🐞 fix(宝箱): 宝箱随机逻辑,减少floor表查询
This commit is contained in:
@@ -13,7 +13,7 @@ import { combineItems } from '../role/util';
|
|||||||
import { recordGuildFund } from './timeLimitRankService';
|
import { recordGuildFund } from './timeLimitRankService';
|
||||||
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
|
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
|
||||||
import { DicGiftPackagePlan } from '../../pubUtils/dictionary/DicGiftPackagePlan';
|
import { DicGiftPackagePlan } from '../../pubUtils/dictionary/DicGiftPackagePlan';
|
||||||
import { Floor, GiftPackageFloorModel } from '../../db/GiftPackageFloor';
|
import { Floor, GiftPackageFloorModel, GiftPackageFloorType } from '../../db/GiftPackageFloor';
|
||||||
import { isNumber } from 'underscore';
|
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);
|
if(pool.length <= 0) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let allReward: { type: number, id: number, count: number }[] = [];
|
let allReward: { type: number, id: number, count: number }[] = [];
|
||||||
let giftPackage = { giftPackageId: giftID };
|
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++) {
|
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);
|
allReward.push(...rewards);
|
||||||
giftPackage['floors'] = floors;
|
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);
|
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
|
||||||
Object.assign(result, { giftPackage });
|
Object.assign(result, { giftPackage });
|
||||||
break;
|
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[] = [];
|
let rewards: RewardParam[] = [];
|
||||||
const floorPlans = groupByFloorId(pool);
|
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;
|
let { floors = [], getSum = 0, allSum = 0 } = dropHistory;
|
||||||
|
|
||||||
for (let i = 0; i < count; i++) {
|
for (let i = 0; i < count; i++) {
|
||||||
@@ -266,10 +270,10 @@ async function randomSelectedData(pool: DicGiftPackagePlan[], roleId: string, gi
|
|||||||
let result;
|
let result;
|
||||||
result = Object.assign({}, { rewards })
|
result = Object.assign({}, { rewards })
|
||||||
if(floorPlans && Object.keys(floorPlans).length > 0) {
|
if(floorPlans && Object.keys(floorPlans).length > 0) {
|
||||||
const { floors: newFloors } = await GiftPackageFloorModel.updateByGiftPackageId(roleId, giftPackageId, {
|
dropHistory.floors = floors;
|
||||||
floors, getSum, allSum
|
dropHistory.getSum = getSum;
|
||||||
});
|
dropHistory.allSum = allSum;
|
||||||
Object.assign(result, { giftPackageId, floors: newFloors });
|
Object.assign(result, { giftPackageId, floors });
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export default class GiftPackageFloor extends BaseModel {
|
|||||||
|
|
||||||
// 根据礼包 id 查找
|
// 根据礼包 id 查找
|
||||||
public static async findByGiftPackageId(roleId: string, giftPackageId: number, select = '', lean = true) {
|
public static async findByGiftPackageId(roleId: string, giftPackageId: number, select = '', lean = true) {
|
||||||
const result: GiftPackageFloorType = await await GiftPackageFloorModel.findOneAndUpdate({ roleId, giftPackageId}, {}, {new: true, upsert: true}).select(select).lean(lean);
|
const result: GiftPackageFloorType = await GiftPackageFloorModel.findOneAndUpdate({ roleId, giftPackageId}, {}, {new: true, upsert: true}).select(select).lean(lean);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user