排行榜:修复一键领取

This commit is contained in:
luying
2021-05-08 19:42:24 +08:00
parent 78e3c26a7a
commit 082266493a
4 changed files with 39 additions and 17 deletions

View File

@@ -11,6 +11,7 @@ import { GeneralRankParamRole, GeneralRankParamBattle, RoleRankInfo } from "../.
import { gameData } from "../../../pubUtils/data";
import { addItems } from "../../../services/rewardService";
import { HeroModel, HeroUpdate } from "../../../db/Hero";
import { RewardInter } from "../../../pubUtils/interface";
export default function (app: Application) {
return new RoleHandler(app);
@@ -153,26 +154,47 @@ export class RoleHandler {
let { type, id } = msg;
let dicReward = gameData.generalRankReward.get(id);
if(!dicReward || dicReward.rankId != type) return resResult(STATUS.WRONG_PARMS);
let ids: number[] = [];
if(id == 0) {
gameData.generalRankReward.forEach((dic, id)=> {
if(dic.rankId == type) {
ids.push(id);
}
});
} else {
ids.push(id);
}
let rewards: RewardInter[] = [];
let canReceiveId: number[] = [];
let role = await RoleModel.findByRoleId(roleId, 'rankReceived');
let redisKey = RANK_TYPE_TO_KEY.get(type);
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = await r.getRankByRange();
let num = ranks.length > 0? ranks[0].num: 0;
if(num < dicReward.condition) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
for(let id of ids) {
let dicReward = gameData.generalRankReward.get(id);
if(!dicReward || dicReward.rankId != type) continue;
let redisKey = RANK_TYPE_TO_KEY.get(type);
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = await r.getRankByRange();
let num = ranks.length > 0? ranks[0].num: 0;
if(num < dicReward.condition) continue;
if(role.rankReceived.includes(id)) continue;
let reward = dicReward.reward;
rewards = rewards.concat(reward);
canReceiveId.push(id);
}
let role = await RoleModel.receiveRankReward(roleId, id);
if(!role) return resResult(STATUS.REWARD_HAS_RECEIVED);
let reward = dicReward.reward;
let goods = await addItems(roleId, roleName, sid, reward);
role = await RoleModel.receiveRankReward(roleId, ids);
if(canReceiveId.length <= 0) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
let received = role.rankReceived.filter(rewardId => {
let dic = gameData.generalRankReward.get(rewardId);
return dic && dic.rankId == type;
});
let goods = await addItems(roleId, roleName, sid, rewards);
return resResult(STATUS.SUCCESS, {
type: type,
received,

View File

@@ -1,4 +1,4 @@
import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE, TIME_OUTPUT_TYPE } from './../consts';
import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE } from './../consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
import User from './User';
@@ -641,8 +641,8 @@ export default class Role extends BaseModel {
return roles[Math.floor(roles.length / 2)]
}
public static async receiveRankReward(roleId: string, id: number) {
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId, rankReceived: { $nin: [id] } }, { $push: { rankReceived: id } }, { new: true }).lean();
public static async receiveRankReward(roleId: string, ids: number[]) {
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { rankReceived: { $each: ids } } }, { new: true }).lean();
return role;
}
}

View File

@@ -1,4 +1,4 @@
import { TASK_TYPE, ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE } from '../../consts';
import { ACTIVITY_RESOURCES_TYPE } from '../../consts';
import { ActivityModelType } from '../../db/Activity';
import { ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays';
import { ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward';

View File

@@ -4,7 +4,7 @@ import { HeroModel, HeroType } from '../db/Hero';
import fs = require('fs');
import path = require('path');
import { HERO_CE_RATIO, ABI_STAGE, GACHA_TO_FLOOR, TIME_OUTPUT_TYPE, REFRESH_TIME } from '../consts';
import { HERO_CE_RATIO, ABI_STAGE, GACHA_TO_FLOOR, REFRESH_TIME } from '../consts';
import { findIndex } from 'underscore';
import { getTimeFunM } from './timeUtil';