import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from "../../consts"; import { ActivityModelType } from "../../db/Activity"; import { ActivityMonthlyFundModel } from "../../db/ActivityMonthlyFund"; import { MonthlyFundData } from "../../domain/activityField/monthlyFundField"; import { getRoleCreateTime, getServerCreateTime } from "../redisService"; import { getActivityById } from "./activityService"; import { stringToRewardParam, addReward } from "./giftPackageService"; /** * 月基金玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getMonthlyFundData(activityId: number, serverId: number, roleId: string) { let activityData = await getActivityById(activityId); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new MonthlyFundData(activityData, createTime, serverTime); let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityId, playerData.roundIndex, roleId); playerData.setPlayerRecords(playerRecords); return playerData; } /** * 月基金 玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getMonthlyFundDataShow(activityId: number, serverId: number, roleId: string) { let playerData = await getMonthlyFundData(activityId, serverId, roleId); if(playerData && playerData.canShow && playerData.canShow()) { return playerData.getShowResult(); } return null } /** * 月基金 是否可以购买 * @param roleId 玩家id * @param serverId 服 * @param activityData 活动数据 * @returns */ export async function checkMonthlyFund(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) { if(!activityData || activityData.type !== ACTIVITY_TYPE.MONTHLY_FUND) return false; let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new MonthlyFundData(activityData, createTime, serverTime); let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId); playerData.setPlayerRecords(playerRecords); let page = playerData.findByProductID(productID); return !page.hasBought; } /** * 周基金购买 * @param roleId 玩家id * @param roleName 玩家名 * @param sid * @param serverId 服 * @param activityId 活动 * @param productID 商品id * @returns */ export async function makeMonthlyFund(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) { let activityData: ActivityModelType = await getActivityById(activityId); if (!activityData) { return STATUS.ACTIVITY_MISSING; } if (activityData.type !== ACTIVITY_TYPE.MONTHLY_FUND) { return STATUS.ACTIVITY_TYPE_ERROR; } let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new MonthlyFundData(activityData, createTime, serverTime); let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId); playerData.setPlayerRecords(playerRecords); let page = playerData.findByProductID(productID); if(page.hasBought) return STATUS.ORDER_CANNOT_BUY; await ActivityMonthlyFundModel.buy(serverId, activityId, roleId, playerData.roundIndex, page.pageIndex, productID); let rewardParamArr = stringToRewardParam(page.onceReward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.ACT_WEEKLY_FUND_BUY); return { code: 0, data: Object.assign(result, { activityId: activityId, pageIndex: page.pageIndex, roundIndex: playerData.roundIndex }) } }