HJ_Server/src/api_s2c/event/payForDiamond/ApiCanReceive.ts

57 lines
2.5 KiB
TypeScript

import { ApiCall } from "tsrpc";
import { HuoDongFun } from "../../../public/huodongfun";
import { ReqCanReceive, ResCanReceive } from '../../../shared/protocols/event/payForDiamond/PtlCanReceive';
import { PublicShared } from "../../../shared/public/public";
import { ActionLog } from "../../../public/actionLog/actionLog";
const hasGotKeyPrefix = 'payForDiamond:hasGot:'; // 已领取额度
const showOffListKeyPrefix = 'payForDiamond:ShowOff:'; // 需要炫耀的玩家列表。 其中需要包含信息:玩家区服, 玩家玩家名称, 领到的数量
export async function playerCanReceive(call: ApiCall) {
const activityId = call.req.activityId;
const activityInfo = await HuoDongFun.getHdidInfo(call, activityId);
if (!activityInfo) {
return call.error('No such activity');
}
const hasReceivedKey = hasGotKeyPrefix + activityId;
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey);
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
const remaining = activityInfo.data['totalmoney'] - hasReceived;
const showOffResult = await G.iorediscross.lrange(showOffListKeyPrefix + activityId, 0, -1);
const showOffList = showOffResult.map(result => JSON.parse(result));
const zeroTime = PublicShared.getToDayZeroTime();
const vipScore = await ActionLog.getDayLog(call.uid, 'pay');
const price = activityInfo.data['price'];
if (!vipScore) {
return {
payNum: 0, remaining, result: false, activityInfo, showOffList, price
};
}
const payNum = vipScore;
// 玩家充值未达标或者奖池余额耗尽则不能领取
if (payNum < price || remaining <= 0) {
return {
payNum, remaining, result: false, activityInfo, showOffList, price
}
}
// 检查玩家今日是否已经领取
const playerActivityInfo = await G.mongodb.cEvent('payForDiamond').findOne({ uid: call.uid, type: 'payForDiamond' });
if (playerActivityInfo) {
if (playerActivityInfo[zeroTime]) {
return {
payNum, remaining, result: false, activityInfo, showOffList, price
};
}
}
return {
payNum, remaining, result: true, activityInfo, showOffList, price
};
}
export default async function (call: ApiCall<ReqCanReceive, ResCanReceive>) {
const canReceiveResult = await playerCanReceive(call);
if (canReceiveResult) {
const { payNum, remaining, result, showOffList, price } = canReceiveResult;
call.succ({ payNum, remaining, result, showOffList, price });
}
}