From 35778e97ce61167efc35c35d775c9fd2d19274f1 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 8 Feb 2023 20:18:24 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(gvg):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B6=88=E8=80=97=E9=81=93=E5=85=B7=E7=9A=84=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/gvg/gvgItemService.ts | 4 +++- shared/db/GVGUserItem.ts | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/game-server/app/services/gvg/gvgItemService.ts b/game-server/app/services/gvg/gvgItemService.ts index 8de0acc6e..f6fbae57f 100644 --- a/game-server/app/services/gvg/gvgItemService.ts +++ b/game-server/app/services/gvg/gvgItemService.ts @@ -71,7 +71,9 @@ export async function handleGVGCost(roleId: string, leagueCode: string, sid: str if(!itemResult) return false; const decreaseResult = await GVGUserItemModel.decreaseItem(configId, leagueCode, roleId, leagueItems); - return decreaseResult; + const pushGoods = decreaseResult.map(item => ({ id: item.id, count: item.count, expireTime: item.expireTime })); + if(pushGoods.length > 0) await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.LEAGUE_ITEM_UPDATE, { items: pushGoods }, sid); + return true; } export function getProduceCoinCnt(items: RewardInter[]) { diff --git a/shared/db/GVGUserItem.ts b/shared/db/GVGUserItem.ts index e5298c11a..b5e5e09da 100644 --- a/shared/db/GVGUserItem.ts +++ b/shared/db/GVGUserItem.ts @@ -2,6 +2,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { nowSeconds } from '../pubUtils/timeUtil'; import { RewardInter } from '../pubUtils/interface'; +import { genCode } from '../pubUtils/util'; @index({ leagueCode: 1, roleId: 1, configId: 1, status: 1 }) export default class GVGUserItem extends BaseModel { @@ -24,6 +25,9 @@ export default class GVGUserItem extends BaseModel { @prop({ required: true, default: 0 }) expireTime: number; + @prop({ required: true, default: 0 }) + batchCode: string; + public static async findByRole(configId: number, leagueCode: string, roleId: string) { const result: GVGUserItemType[] = await GVGUserItemModel.find({ configId, leagueCode, roleId, expireTime: { $gte: nowSeconds() } }, { _id: 0, id: 1, count: 1 }).lean(); return result; @@ -40,12 +44,13 @@ export default class GVGUserItem extends BaseModel { } public static async decreaseItem(configId: number, leagueCode: string, roleId: string, items: RewardInter[]) { - const result = await GVGUserItemModel.bulkWrite(items.map(({ id, count }) => { + let batchCode = genCode(10); + await GVGUserItemModel.bulkWrite(items.map(({ id, count }) => { let filter = { configId, leagueCode, roleId, id, count: { $gte: count }, expireTime: { $gte: nowSeconds() } } - return { updateOne: { filter, update: { $inc: { count: -1 * count } } } } + return { updateOne: { filter, update: { $inc: { count: -1 * count }, $set: { batchCode } } } } })); - console.log(result.matchedCount, items.length) - return result.matchedCount == items.length; + const result: GVGUserItemType[] = await GVGUserItemModel.find({ batchCode }).lean(); + return result; } public static async checkItemCnt(configId: number, leagueCode: string, roleId: string, id: number, count: number) {