diff --git a/server/imserver/constant.go b/server/imserver/constant.go index 90cc0d10..1f73e973 100644 --- a/server/imserver/constant.go +++ b/server/imserver/constant.go @@ -59,6 +59,9 @@ const ( GuildMemberLevelViceLeader = 2 // 成员等级, 副会长 GuildMemberLevelElite = 3 // 成员等级, 精英 GuildMemberLevelDefault = 3 // 成员等级, 普通成员 + JoinCondDefault = 0 // 加入条件 0 需要审批 + JoinCondFree = 1 // 加入条件 1 可直接加入 + JoinCondStar = 2 // 加入条件 2 满足星星条件 PendingReqIsJoinGuildStatusDefault = 0 // 等待验证请求状态, 0 等待审核 PendingReqIsJoinGuildStatusJoined = 1 // 等待验证请求状态, 1 已加入 PendingReqIsJoinGuildStatusReject = 2 // 等待验证请求状态, 2 拒绝 diff --git a/server/imserver/guild.go b/server/imserver/guild.go index d0dc025e..b8896e1b 100644 --- a/server/imserver/guild.go +++ b/server/imserver/guild.go @@ -72,12 +72,10 @@ func (g *Guild) IsFull() error { } // AddMember 添加成员 -func (g *Guild) AddMember(member *GuildMember) error { - if err := g.IsFull(); err != nil { - return err +func (g *Guild) AddMember(member *GuildMember) { + if err := g.IsFull(); err == nil { + g.Members = append(g.Members, member) } - g.Members = append(g.Members, member) - return nil } // RemoveMember 移除成员 diff --git a/server/imserver/guilddbmgr.go b/server/imserver/guilddbmgr.go index 9f62b7c1..8e135f46 100644 --- a/server/imserver/guilddbmgr.go +++ b/server/imserver/guilddbmgr.go @@ -2,6 +2,7 @@ package main import ( "f5" + "fmt" "q5" ) @@ -192,18 +193,29 @@ func (gm *GuildMgr) createGuildDB(g *Guild) { {"leader_account_id", g.LeaderId}, {"max_members", q5.ToString(g.MaxMembers)}, } + var insertError error + var lastInsertId int64 + var rowsAffected int64 + + insertCallback := func(err error, id int64, affectedRows int64) { + insertError = err + lastInsertId = id + rowsAffected = affectedRows + } + f5.GetJsStyleDb().Insert( FRIEND_DB, "t_guild", fields, - func(err error, lastInsertId int64, rowsAffected int64) { - if err != nil || rowsAffected != 1 { - f5.GetSysLog().Info("createGuildDB:%v\n", err) - } - f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId) - f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected) - }, + insertCallback, ) + + if insertError != nil || rowsAffected != 1 { + // 插入失败,处理错误逻辑 + fmt.Printf("Failed to insert guild: %v", insertError) + } + + f5.GetSysLog().Info("Guild inserted successfully. LastInsertId: %d, RowsAffected: %d", lastInsertId, rowsAffected) } // updateGuild 更新公会信息 diff --git a/server/imserver/guildmgr.go b/server/imserver/guildmgr.go index bc20c302..5477d57c 100644 --- a/server/imserver/guildmgr.go +++ b/server/imserver/guildmgr.go @@ -76,14 +76,11 @@ func (gm *GuildMgr) CreateGuild(name string, leaderId string) (int64, error) { MaxMembers: MaxMembers, } - newMember := GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader} - err = guild.AddMember(&newMember) - if err != nil { - return 0, err - } + newMember := &GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader} + guild.Members = append(guild.Members, newMember) gm.createGuildDB(guild) - gm.upsertGuildMember(guildId, &newMember) + gm.upsertGuildMember(guildId, newMember) gm.AddGuild(guildId, guild) return guildId, nil @@ -96,7 +93,7 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error return err } - // check join guild + // 是否加入其他公会 _, err = gm.checkJoinGuild(applicantAccountId) if err != nil { return err @@ -107,6 +104,19 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error return err } + // 可直接加入 + if guild.JoinCond == JoinCondFree { + gm.JoinGuild(guild, applicantAccountId) + return nil + } + + if guild.JoinCond == JoinCondStar { + var userStar int32 = 200 + if userStar < guild.JoinCondValue { + return fmt.Errorf("joincond error") + } + } + // IF exists, then replace it fields `isJoinGuild` is 0 gm.upsertPendingReqs(guildId, applicantAccountId, PendingReqIsJoinGuildStatusDefault) pendReq, exists := gm.pendingReqs[guildId] @@ -142,19 +152,21 @@ func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string) return err } + err = guild.IsFull() + if err != nil { + return err + } + // 是否在申请队列中 _, exists := gm.pendingReqs[guildId][accountId] if !exists { return fmt.Errorf("no pending applications for this guild") } - newMember := GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault} - err = guild.AddMember(&newMember) - if err != nil { - return err - } + newMember := &GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault} + guild.AddMember(newMember) - gm.upsertGuildMember(guildId, &newMember) + gm.upsertGuildMember(guildId, newMember) gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined) logContent := fmt.Sprintf("Approve[operator:%s]", operatorAccountId) @@ -178,28 +190,11 @@ func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error { } // JoinGuild 直接加入公会 -func (gm *GuildMgr) JoinGuild(guildId int64, accountId string) error { - guild, err := gm.GetGuild(guildId) - if err != nil { - return err - } - - err = guild.IsFull() - if err != nil { - return err - } - +func (gm *GuildMgr) JoinGuild(guild *Guild, accountId string) { newMember := GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault} - err = guild.AddMember(&newMember) - if err != nil { - return err - } - + guild.AddMember(&newMember) + guildId := guild.GuildId gm.upsertGuildMember(guildId, &newMember) - delete(gm.pendingReqs[guildId], accountId) - gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined) - - return nil } // LeaveGuild 离开公会