🐞 fix(宝箱): 宝箱随机逻辑,减少floor表查询
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user