102 lines
4.1 KiB
TypeScript
102 lines
4.1 KiB
TypeScript
import { Application, BackendSession, HandlerService, } from 'pinus';
|
|
import { resResult } from '@pubUtils/util';
|
|
import { DEBUG_MAGIC_WORD, getRedisKeyByRankType, HERO_SELECT, ITEM_CHANGE_REASON, RANK_TYPE, ROLE_SELECT, STATUS } from '../../../consts';
|
|
import { pick } from 'underscore';
|
|
import { getTimeLimitRankData, getTimeLimitRankDataShow, sendRankMail, takeSnapshot } from '../../../services/activity/timeLimitRankService';
|
|
import { getRankInHandler, Rank } from '../../../services/rankService';
|
|
import { getActivityById } from '../../../services/activity/activityService';
|
|
import { TimeLimitRankData } from '@domain/activityField/timeLimitRankField';
|
|
import { getServerCreateTime, hasKey } from '../../../services/redisService';
|
|
import { KeyName } from '@domain/rank';
|
|
|
|
|
|
export default function (app: Application) {
|
|
new HandlerService(app, {});
|
|
return new TimeLimitRankHandler(app);
|
|
}
|
|
|
|
export class TimeLimitRankHandler {
|
|
constructor(private app: Application) {
|
|
}
|
|
|
|
/************************幸运转盘****************************/
|
|
/**
|
|
* @description 幸运转盘活动
|
|
* @param {{ activityId: number, }} msg
|
|
* @param {BackendSession} session
|
|
* @memberof TimeLimitRankHandler
|
|
*/
|
|
async getTimeLimitRankData(msg: { activityId: number }, session: BackendSession) {
|
|
const serverId = session.get('serverId');
|
|
const { activityId } = msg;
|
|
|
|
let playerData = await getTimeLimitRankDataShow(activityId, serverId);
|
|
if (!playerData) {
|
|
return resResult(STATUS.ACTIVITY_MISSING);
|
|
}
|
|
|
|
return resResult(STATUS.SUCCESS, { playerData });
|
|
}
|
|
|
|
/**
|
|
* @description 获得排行榜
|
|
* @param {{ activityId: number, }} msg
|
|
* @param {BackendSession} session
|
|
* @memberof TimeLimitRankHandler
|
|
*/
|
|
async getRank(msg: { activityId: number }, session: BackendSession) {
|
|
const { activityId } = msg;
|
|
const roleId = session.get('roleId');
|
|
const serverId = session.get('serverId');
|
|
|
|
let playerData = await getTimeLimitRankData(activityId, serverId);
|
|
if (!playerData) {
|
|
return resResult(STATUS.ACTIVITY_MISSING);
|
|
}
|
|
let type = playerData.rankType;
|
|
|
|
let redisKey = getRedisKeyByRankType(type, true);
|
|
let keyName = new KeyName(redisKey, { serverId, activityId });
|
|
if(!(await hasKey(keyName.getName()))) {
|
|
redisKey = getRedisKeyByRankType(type);
|
|
}
|
|
if (!redisKey) return resResult(STATUS.WRONG_PARMS);
|
|
|
|
let result = await getRankInHandler(redisKey, type, { serverId, activityId: playerData.activityId }, session);
|
|
if(!result) return resResult(STATUS.WRONG_PARMS);
|
|
|
|
return resResult(STATUS.SUCCESS, {
|
|
...pick(playerData, ['activityId', 'tabName', 'beginTime', 'endTime', 'rankEndTime', 'rankType', 'rankRewards']),
|
|
...result
|
|
});
|
|
}
|
|
|
|
|
|
async debugSendMail(msg: { magicWord: string, activityId: number }, session: BackendSession) {
|
|
let serverId = session.get('serverId');
|
|
const { magicWord, activityId } = msg;
|
|
if (magicWord !== DEBUG_MAGIC_WORD) {
|
|
return resResult(STATUS.TOKEN_ERR);
|
|
}
|
|
let playerData = await getTimeLimitRankData(activityId, serverId);
|
|
await sendRankMail(playerData, serverId);
|
|
return resResult(STATUS.SUCCESS);
|
|
}
|
|
|
|
async debugTakeSnapshot(msg: { magicWord: string, activityId: number }, session: BackendSession) {
|
|
let serverId = session.get('serverId');
|
|
|
|
const { magicWord, activityId } = msg;
|
|
if (magicWord !== DEBUG_MAGIC_WORD) {
|
|
return resResult(STATUS.TOKEN_ERR);
|
|
}
|
|
let activityData = await getActivityById(activityId);
|
|
let serverTime = await getServerCreateTime(serverId);
|
|
let playerData = new TimeLimitRankData(activityData, 0, serverTime);
|
|
if(!playerData.needSnapshot) return resResult(STATUS.WRONG_PARMS);
|
|
await takeSnapshot(playerData, serverId);
|
|
return resResult(STATUS.SUCCESS);
|
|
}
|
|
}
|
|
|