🐞 fix(军团): 军团补发邮件有可能因为并发发出多封

This commit is contained in:
luying
2022-11-08 17:35:33 +08:00
parent 4e205b47bb
commit f92d1336ac
6 changed files with 28 additions and 31 deletions

View File

@@ -9,7 +9,7 @@ import { GuildModel } from '../../../db/Guild';
import { handleCost, addItems } from '../../../services/role/rewardService';
import { CHAT_SERVER, GUILD_POINT_WAYS } from '../../../consts';
import { addFund, donate, getDonation, getGuildFundByRefTime } from '../../../services/donateService';
import { getUserGuildWithRefActive, refreshUserGuild } from '../../../services/guildService';
import { getUserGuildWithRefActive } from '../../../services/guildService';
import { ARMY } from '../../../pubUtils/dicParam';
import { addActive } from '../../../services/guildService'
import { checkTask, checkTaskInDonate } from '../../../services/task/taskService';
@@ -34,9 +34,8 @@ export class DonationHandler {
async getDonation(msg: guildInter & {}, session: BackendSession) {
const roleId: string = session.get('roleId');
const serverId: number = parseInt(session.get('serverId'));
const { myUserGuild } = msg;
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild) return resResult(STATUS.WRONG_PARMS);
let guild = await GuildModel.findGuild(userGuild.guildCode, serverId, 'structure lv');
@@ -53,7 +52,7 @@ export class DonationHandler {
* @param session
*/
async donate(msg: guildInter & { id: number }, session: BackendSession) {
const { id, myUserGuild } = msg;
const { id } = msg;
const roleId: string = session.get('roleId');
const roleName: string = session.get('roleName');
const serverId: number = parseInt(session.get('serverId'));
@@ -65,7 +64,7 @@ export class DonationHandler {
return resResult(STATUS.REDLOCK_ERR);
}
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild) {
res.releaseCallback();
return resResult(STATUS.WRONG_PARMS);
@@ -120,7 +119,7 @@ export class DonationHandler {
const roleName: string = session.get('roleName');
const sid: string = session.get('sid');
const serverId: number = parseInt(session.get('serverId'));
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild)
return resResult(STATUS.WRONG_PARMS);
const { guildCode: code, receiveBoxs: resReceiveBoxs } = userGuild;

View File

@@ -2,7 +2,7 @@ import { Application, BackendSession, ChannelService, HandlerService, } from 'pi
import { resResult, getRandEelm, shouldRefresh, sortArrRandom } from '../../../pubUtils/util';
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_SELECT, USER_GUILD_SELECT, TASK_TYPE, DEBUG_MAGIC_WORD, CHANNEL_PREFIX, MSG_TYPE, MSG_SOURCE, ITEM_CHANGE_REASON, TA_EVENT, GUILD_DISMISS_WAY, GUILD_MASTER_CHANGE_WAY, GUILD_QUIT_WAY, PUSH_ROUTE } from '../../../consts';
import { UserGuildModel, UserGuildType } from '../../../db/UserGuild';
import { checkAuth, joinGuild, getUserGuildWithRefActive, addActive, settleGuildWeekly, getMyGuildInfo, refreshUserGuild, setUserGuildSession, getInvitationList, addGuildRecord, pushChangeGuildLeader, pushGuildMemberQuit, pushGuildDismiss, pushGuildInfoUpdate, getTodayGuildActive } from '../../../services/guildService';
import { checkAuth, joinGuild, getUserGuildWithRefActive, addActive, settleGuildWeekly, getMyGuildInfo, setUserGuildSession, getInvitationList, addGuildRecord, pushChangeGuildLeader, pushGuildMemberQuit, pushGuildDismiss, pushGuildInfoUpdate, getTodayGuildActive } from '../../../services/guildService';
import { GuildModel, GuildType, GuildUpdateParam } from '../../../db/Guild';
import { RoleModel, RoleType } from '../../../db/Role';
import { ARMY } from '../../../pubUtils/dicParam';
@@ -269,8 +269,7 @@ export class GuildHandler {
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const { myUserGuild } = msg;
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild) {
return resResult(STATUS.SUCCESS, { hasGuild: false })
};
@@ -845,9 +844,9 @@ export class GuildHandler {
const sid = session.get('sid');
const serverId = session.get('serverId');
const { code, id, myUserGuild } = msg;
const { code, id } = msg;
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild) return resResult(STATUS.GUILD_NOT_FOUND);
let activeDayReward = gameData.guildActiveDayReward.get(id);

View File

@@ -8,7 +8,7 @@ import { gameData, getGoodById, getWishPoolReward } from '../../../pubUtils/data
import { addItems, checkGoods, checkHeroEquips, checkHeroes, getHonourObject, handleCost } from '../../../services/role/rewardService';
import { ITID, CONSUME_TYPE } from '../../../consts/constModules/itemConst';
import { GUILD_POINT_WAYS, GUILD_STRUCTURE, WISH_POOL_TYPE } from '../../../consts/constModules/guildConst';
import { refreshUserGuild, getWishPool, getUserGuildWithRefActive, addActive } from '../../../services/guildService';
import { getWishPool, getUserGuildWithRefActive, addActive } from '../../../services/guildService';
import { findIndex, findWhere } from 'underscore';
import { RoleModel } from '../../../db/Role';
import { getRoleOnlineInfo } from '../../../services/redisService';
@@ -27,8 +27,7 @@ export class WishPoolHandler {
async getWishPool(msg: guildInter & {}, session: BackendSession) {
const roleId: string = session.get('roleId');
const { myUserGuild } = msg;
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild)
return resResult(STATUS.WRONG_PARMS);
let res = await getWishPool(userGuild);
@@ -46,7 +45,7 @@ export class WishPoolHandler {
if (dicItid.type != CONSUME_TYPE.SOUL || type != WISH_POOL_TYPE.SOUL)
return resResult(STATUS.GUILD_WISH_POOL_CAN_NOT_WISH);
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild) return resResult(STATUS.WRONG_PARMS);
const { guildCode: code, wishGoods, receivedWishPool } = userGuild;
@@ -89,7 +88,7 @@ export class WishPoolHandler {
if (!wishUserGuild)
return resResult(STATUS.WRONG_PARMS);
const { guildCode: code, wishGoods } = wishUserGuild;
let dntRoleGuild = await refreshUserGuild(myUserGuild, dntRoleId);
let dntRoleGuild = await getUserGuildWithRefActive(dntRoleId);
if (!dntRoleGuild)
return resResult(STATUS.WRONG_PARMS);
if (dntRoleGuild.guildCode != code)
@@ -130,7 +129,7 @@ export class WishPoolHandler {
const roleId: string = session.get('roleId');
const roleName: string = session.get('roleName');
const sid: string = session.get('sid');
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild)
return resResult(STATUS.WRONG_PARMS);
const { wishGoods, receivedWishPool } = userGuild;
@@ -153,7 +152,7 @@ export class WishPoolHandler {
async getReports(msg: guildInter & {}, session: BackendSession) {
const roleId: string = session.get('roleId');
const { myUserGuild } = msg;
let userGuild = await refreshUserGuild(myUserGuild, roleId);
let userGuild = await getUserGuildWithRefActive(roleId);
if (!userGuild)
return resResult(STATUS.WRONG_PARMS);
const { guildCode: code } = userGuild;

View File

@@ -212,27 +212,20 @@ export async function getUserGuildWithRefActive(roleId: string, select?: string)
let userGuild = await UserGuildModel.getMyGuild(roleId, select ? select + ' wishGoods +refTimeDaily' : '+refTimeDaily');
// console.log(JSON.stringify(userGuild))
if (!userGuild) return false;
return await refreshUserGuild(userGuild, roleId);
}
export async function refreshUserGuild(userGuild: UserGuildType, roleId: string) {
if(!userGuild) return false;
let { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods, receivedWishPool, receiveBoxs } = userGuild;
let { receivedActive, refTimeDaily, guildCode, wishGoods, receiveBoxs } = userGuild;
const now = new Date();
let isRefDaily = shouldRefresh(refTimeDaily, now);
// console.log('####### isRefDaily', isRefDaily, refTimeDaily, now)
if (isRefDaily) {
userGuild = await UserGuildModel.resetDailyInfo(roleId);
if (!userGuild) return false;
if(refTimeDaily) {
await sendUnreceivedWishPool(wishGoods, roleId);
await sendUnreceivedActiveBox(roleId, userGuild.guildCode, refTimeDaily, receivedActive);
await sendUnreceivedDonateBox(roleId, userGuild.guildCode, refTimeDaily, receiveBoxs);
await sendUnreceivedActiveBox(roleId, guildCode, refTimeDaily, receivedActive);
await sendUnreceivedDonateBox(roleId, guildCode, refTimeDaily, receiveBoxs);
await sendUnreceivedBossWar(roleId, refTimeDaily);
}
receivedActive = []; refTimeDaily = now; activeDaily = 0; activeRecord = []; wishGoods = []; receivedWishPool = [], receiveBoxs = [];
let wishDntCnt = 0, donateCnt = 0;
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods, receiveBoxs, wishDntCnt, donateCnt, receivedWishPool }, {});
if (!userGuild) return false;
}
return userGuild;

View File

@@ -31,6 +31,5 @@ declare module 'egg' {
jsonp?: EggPluginItem;
view?: EggPluginItem;
cors?: EggPluginItem;
xtransit?: EggPluginItem;
}
}

View File

@@ -225,6 +225,14 @@ export default class UserGuild extends BaseModel {
const result: UserGuildType = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON, 'wishGoods.id': id }, { $inc: { 'wishGoods.$.receiveCnt': 1, 'wishGoods.$.drawCnt': 1}, $push:{'wishGoods.$.donateNames': dntRoleName} }, { new: true }).select(select).lean();
return result;
}
public static async resetDailyInfo(roleId: string) {
const result: UserGuildType = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $set: {
receivedActive: [], refTimeDaily: new Date(), activeDaily: 0, activeRecord: [], wishGoods: [], receivedWishPool: [], receiveBoxs: [], wishDntCnt: 0, donateCnt: 0
} }, { new: true }).lean();
return result;
}
}
export const UserGuildModel = getModelForClass(UserGuild);