🐞 fix(宝箱): 宝箱随机逻辑,减少floor表查询

This commit is contained in:
luying
2023-03-31 15:08:17 +08:00
parent 2caf169055
commit 3fed442e39
2 changed files with 13 additions and 9 deletions

View File

@@ -13,7 +13,7 @@ import { combineItems } from '../role/util';
import { recordGuildFund } from './timeLimitRankService';
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
import { DicGiftPackagePlan } from '../../pubUtils/dictionary/DicGiftPackagePlan';
import { Floor, GiftPackageFloorModel } from '../../db/GiftPackageFloor';
import { Floor, GiftPackageFloorModel, GiftPackageFloorType } from '../../db/GiftPackageFloor';
import { isNumber } from 'underscore';
@@ -75,11 +75,16 @@ export async function useGiftPackage(roleId: string, roleName: string, sid: stri
if(pool.length <= 0) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let allReward: { type: number, id: number, count: number }[] = [];
let giftPackage = { giftPackageId: giftID };
const floorPlans = groupByFloorId(pool);
let dropHistory = (floorPlans && Object.keys(floorPlans).length > 0) ? await GiftPackageFloorModel.findByGiftPackageId(roleId, giftID): { floors: [], getSum: 0, allSum: 0 };
for (let i = 0; i < giftCount; i++) {
let { rewards, floors } = await randomSelectedData(pool, roleId, giftID, count);
let { rewards, floors } = await randomSelectedData(dropHistory, pool, roleId, giftID, count);
allReward.push(...rewards);
giftPackage['floors'] = floors;
}
await GiftPackageFloorModel.updateByGiftPackageId(roleId, giftID, {
floors: dropHistory.floors, getSum: dropHistory.getSum, allSum: dropHistory.allSum
});
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
Object.assign(result, { giftPackage });
break;
@@ -200,10 +205,9 @@ async function initFloorData(floors: Floor[], floorPlans: { [key: number]: DicGi
}
}
async function randomSelectedData(pool: DicGiftPackagePlan[], roleId: string, giftPackageId: number, count: number) {
async function randomSelectedData(dropHistory: {floors: Floor[], getSum: number, allSum: number }, pool: DicGiftPackagePlan[], roleId: string, giftPackageId: number, count: number) {
let rewards: RewardParam[] = [];
const floorPlans = groupByFloorId(pool);
let dropHistory = (floorPlans && Object.keys(floorPlans).length > 0) ? await GiftPackageFloorModel.findByGiftPackageId(roleId, giftPackageId): { floors: [], getSum: 0, allSum: 0 };
let { floors = [], getSum = 0, allSum = 0 } = dropHistory;
for (let i = 0; i < count; i++) {
@@ -266,10 +270,10 @@ async function randomSelectedData(pool: DicGiftPackagePlan[], roleId: string, gi
let result;
result = Object.assign({}, { rewards })
if(floorPlans && Object.keys(floorPlans).length > 0) {
const { floors: newFloors } = await GiftPackageFloorModel.updateByGiftPackageId(roleId, giftPackageId, {
floors, getSum, allSum
});
Object.assign(result, { giftPackageId, floors: newFloors });
dropHistory.floors = floors;
dropHistory.getSum = getSum;
dropHistory.allSum = allSum;
Object.assign(result, { giftPackageId, floors });
}
return result;
}