import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getWeeklyFundDataShow, getWeeklyFundData } from '../../../services/activity/weeklyFundService'; import { ActivityWeeklyFundModel } from '../../../db/ActivityWeeklyFund'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; export default function (app: Application) { new HandlerService(app, {}); return new WeeklyFundHandler(app); } export class WeeklyFundHandler { constructor(private app: Application) { } /************************周基金****************************/ /** * @description 获取数据 * @param {BackendSession} session * @memberof WeeklyFundHandler */ async getData(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await getWeeklyFundDataShow(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); } /** * @description 签到 * @param {BackendSession} session * @memberof WeeklyFundHandler */ async sign(msg: { activityId: number, dayIndex: number }, session: BackendSession) { const { activityId, dayIndex } = msg; const roleId = session.get('roleId'); const roleName = session.get('roleName'); const sid = session.get('sid'); const serverId = session.get('serverId'); let playerData = await getWeeklyFundData(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); if(!playerData.hasBought) return resResult(STATUS.ACTIVITY_WEEKLY_FUND_NOT_BOUGHT); let signReward = playerData.findSignReward(dayIndex); if(!signReward) return resResult(STATUS.ACTIVITY_WEEKLY_FUND_NOT_FOUND); if(signReward.hasReceived) return resResult(STATUS.ACTIVITY_WEEKLY_FUND_HAS_SIGN); if(signReward.dayIndex > playerData.todayIndex) return resResult(STATUS.ACTIVITY_WEEKLY_FUND_LOCK); let record = await ActivityWeeklyFundModel.sign(serverId, activityId, roleId, dayIndex, playerData.todayIndex); if(!record) return resResult(STATUS.ACTIVITY_WEEKLY_FUND_HAS_SIGN); let rewardParamArr = stringToRewardParam(signReward.reward); let { goods, addHeros } = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_WEEKLY_FUND_SIGN); return resResult(STATUS.SUCCESS, { activityId, dayIndex, goods, addHeros }); } }