diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index 10548bc67..9a5694e93 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -91,20 +91,18 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol let res: any = await lockData(serverId, DATA_NAME.JOIN_GUILD, code);// 加锁 if (!!res.err) return { status: -1, resResult: resResult(STATUS.REDLOCK_ERR) }; - const result = await RoleModel.joinGuild(roleId, code, guildName, false); - if (!result) { + let role = await RoleModel.findByRoleId(roleId); + if (role.hasGuild) { res.releaseCallback();//解锁 return { status: -1, resResult: resResult(STATUS.GUILD_HAS_JOIN) }; } - await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'guildName', value: guildName }]); - const dicCenterBase = gameData.centerBase.get(lv); if (!dicCenterBase) { res.releaseCallback();//解锁 return { status: -1, resResult: resResult(STATUS.DIC_DATA_NOT_FOUND) }; } const maxMemberCnt = dicCenterBase.peopleNum; - const guild = await GuildModel.addMember(code, roleId, maxMemberCnt, serverId, result.ce); + const guild = await GuildModel.addMember(code, roleId, maxMemberCnt, serverId, role.ce); if (!guild) { res.releaseCallback();//解锁 return { status: -1, resResult: resResult(STATUS.GUILD_MEMBER_MAX) }; @@ -112,7 +110,14 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]) } - const role = await RoleModel.findByRoleId(roleId); + role = await RoleModel.joinGuild(roleId, code, guildName, false); + if (!role) { + await GuildModel.notAddMember(code, roleId, role.ce); + res.releaseCallback();//解锁 + return { status: -1, resResult: resResult(STATUS.GUILD_HAS_JOIN) }; + } + await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'guildName', value: guildName }]); + const userGuild = await UserGuildModel.createUserGuild(guild.code, role, false); if (!userGuild) { res.releaseCallback();//解锁 diff --git a/shared/db/Guild.ts b/shared/db/Guild.ts index 302d98747..40630298c 100644 --- a/shared/db/Guild.ts +++ b/shared/db/Guild.ts @@ -188,6 +188,11 @@ export default class Guild extends BaseModel { return result; } + public static async notAddMember(code: string, roleId: string, ce: number) { + let result: GuildType = await GuildModel.findOneAndUpdate({ code }, { $inc: { memberCnt: -1, guildCe: -ce }, $pull: { members: roleId }, $set: { isMemberMax: false } }, { new: true }).lean({getters: true}); + return result; + } + public static async dismiss(code: string, serverId: number) { const result: GuildType = await GuildModel.findOneAndUpdate({ code, status: GUILD_STATUS.RUNNING, serverId }, { status: GUILD_STATUS.DISMISSED }, { new: true }) .populate('leader', {roleId: 1, _id: 0}, 'Role')