diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index 2c091d812..a7898f76a 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -1,7 +1,7 @@ import { gameData, getGuildActiveWeekReward, getGuildActiveByIdAndType, getGoodById } from "../pubUtils/data"; import { GuildModel, GuildType, GuildUpdateParam } from "../db/Guild"; import { resResult, shouldRefresh } from "../pubUtils/util"; -import { STATUS, MAIL_TYPE, GUILD_AUTH, GUILD_JOB, REDIS_KEY, CHAT_SERVER, TASK_TYPE, COUNTER, GUILD_REC_TYPE, PUSH_ROUTE, WAR_TYPE } from "../consts"; +import { STATUS, MAIL_TYPE, GUILD_AUTH, GUILD_JOB, REDIS_KEY, CHAT_SERVER, TASK_TYPE, COUNTER, GUILD_REC_TYPE, PUSH_ROUTE, WAR_TYPE, USER_GUILD_STATUS } from "../consts"; import { RoleModel, RoleType } from "../db/Role"; import { UserGuildModel, UserGuildType, WishGood } from "../db/UserGuild"; import { UserGuildApplyModel } from "../db/UserGuildApply"; @@ -238,6 +238,21 @@ export async function getUserGuildWithRefActive(roleId: string, select?: string) return userGuild; } +/** + * 查询我在今天退出的军团中是否许过愿 + * + * @param {string} roleId + * @return {*} + */ +async function isIWishedInMyTodayQuitGuilds(roleId: string): Promise { + const guilds = await UserGuildModel.findMyGuildsOfToday(roleId, 'wishGoods status'); + + const myWishedGuild = guilds.find((guild) => { + return (guild.status != USER_GUILD_STATUS.ON) && (guild.wishGoods && guild.wishGoods.length > 0); + }); + + return !!myWishedGuild; +} /** * 今天在军团中是否能许愿 * @@ -250,13 +265,8 @@ export async function canWishToday(roleId: string): Promise { return false; } - let userGuild = await UserGuildModel.findMyLastGuild(roleId, ' wishGoods'); - if (!userGuild) { - return true; - } - // 今天退出过军团 & 在退出的军团许过愿 - if (isToday(role.quitGuildTime) && (userGuild.wishGoods && userGuild.wishGoods.length > 0)) { + if (isToday(role.quitGuildTime) && (await isIWishedInMyTodayQuitGuilds(roleId))) { // 新加入的军团不允许许愿 return false; } diff --git a/shared/db/UserGuild.ts b/shared/db/UserGuild.ts index 98f06d26f..c1a6fcbdd 100644 --- a/shared/db/UserGuild.ts +++ b/shared/db/UserGuild.ts @@ -150,7 +150,7 @@ export default class UserGuild extends BaseModel { const doc = new UserGuildModel(); let job = isLeader? GUILD_JOB.DAJIANGJUN: GUILD_JOB.SHIBING; let auth = isLeader? GUILD_AUTH.LEADER: GUILD_AUTH.MEMBER; - let update = Object.assign(doc.toJSON(), { guildCode, roleId: role.roleId, role: role._id, job, auth, receiveBoxs, donateCnt, receivedActive, encourageCnt, bossChallengeCnt, receivedWishPool, wishGoods, wishDntCnt, refTimeDaily, refBossTime, trainCount, buyTrainCount, trainTime }); + const update = Object.assign(doc.toJSON(), { guildCode, roleId: role.roleId, role: role._id, job, auth, receiveBoxs, donateCnt, receivedActive, encourageCnt, bossChallengeCnt, receivedWishPool, wishGoods, wishDntCnt, refTimeDaily, refBossTime, trainCount, buyTrainCount, trainTime }); // 【退出军团】 和 【再加入军团】在同一天 if (isToday(role.quitGuildTime)) { @@ -195,6 +195,20 @@ export default class UserGuild extends BaseModel { return userGuild; } + /** + * 查询我今天所有加入过的军团(从上次的刷新时间(5AM)到现在) + * + * @static + * @param {string} roleId + * @param {string} select + * @return {*} + * @memberof UserGuild + */ + public static async findMyGuildsOfToday(roleId: string, select: string) { + const userGuilds = await UserGuildModel.find({ roleId, createdAt: { $gt: getZeroPointD() } }).select(select).lean(); + return userGuilds; + } + public static async dismiss(guildCode: string) { const result = await UserGuildModel.updateMany({ guildCode }, { status: USER_GUILD_STATUS.DISMISSED });