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) {