import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getMonthlyFundData, getMonthlyFundDataShow } from '../../../services/activity/monthlyFundService'; import { ActivityWeeklyFundModel } from '../../../db/ActivityWeeklyFund'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { ActivityMonthlyFundModel } from '../../../db/ActivityMonthlyFund'; import { monthlyFundSchedule } from '../../../services/timeTaskService'; import moment = require('moment'); export default function (app: Application) { new HandlerService(app, {}); return new MonthlyFundHandler(app); } export class MonthlyFundHandler { constructor(private app: Application) { } /************************月基金****************************/ /** * @description 获取数据 * @param {BackendSession} session * @memberof MonthlyFundHandler */ async getData(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); let playerData = await getMonthlyFundDataShow(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); } /** * @description 签到 * @param {BackendSession} session * @memberof MonthlyFundHandler */ async sign(msg: { activityId: number, pageIndex: number, dayIndex: number }, session: BackendSession) { const { activityId, pageIndex, 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 getMonthlyFundData(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let pageData = playerData.findPage(pageIndex); if (!pageData) return resResult(STATUS.ACTIVITY_MISSING); if(!pageData.hasBought) return resResult(STATUS.ACTIVITY_MONTHLY_FUND_NOT_BOUGHT); let signReward = pageData.findSignReward(dayIndex); if(!signReward) return resResult(STATUS.ACTIVITY_MONTHLY_FUND_NOT_FOUND); if(signReward.hasReceived) return resResult(STATUS.ACTIVITY_MONTHLY_FUND_HAS_SIGN); if(signReward.dayIndex > playerData.todayIndex) return resResult(STATUS.ACTIVITY_MONTHLY_FUND_LOCK); let record = await ActivityMonthlyFundModel.sign(serverId, activityId, roleId, playerData.roundIndex, pageIndex, dayIndex, playerData.todayIndex); if(!record) return resResult(STATUS.ACTIVITY_MONTHLY_FUND_HAS_SIGN); pageData.setPlayerRecord(record); if(pageData.hasReceivedAll()) { await ActivityMonthlyFundModel.setReceivedAll(serverId, activityId, roleId, playerData.roundIndex, pageIndex); } let rewardParamArr = stringToRewardParam(signReward.reward); let { goods, addHeros } = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_MONTHLY_FUND_SIGN); return resResult(STATUS.SUCCESS, { activityId, dayIndex, pageIndex, goods, addHeros }); } async debugSendMonthlyFundReward(msg: {}, session: BackendSession) { await monthlyFundSchedule(parseInt(moment().format('YYYYMM'))); return resResult(STATUS.SUCCESS); } }