import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, STATUS } from "../../consts"; import { ActivityModelType } from "../../db/Activity"; import { ActivityWeeklyFundModel } from "../../db/ActivityWeeklyFund"; import { WeeklyFundData } from "../../domain/activityField/weeklyFundField"; 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 getWeeklyFundData(activityId: number, serverId: number, roleId: string) { let activityData = await getActivityById(activityId); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new WeeklyFundData(activityData, createTime, serverTime); let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityId, roleId); playerData.setPlayerRecord(playerRecord); return playerData; } /** * 周基金 玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getWeeklyFundDataShow(activityId: number, serverId: number, roleId: string) { let playerData = await getWeeklyFundData(activityId, serverId, roleId); // console.log('##### weeklyFund', playerData) if(playerData && playerData.canShow && playerData.canShow()) { return playerData.getShowResult(); } return null } /** * 周基金 是否可以购买 * @param roleId 玩家id * @param serverId 服 * @param activityData 活动数据 * @returns */ export async function checkWeeklyFund(roleId: string, serverId: number, activityData: ActivityModelType) { if(!activityData || activityData.type !== ACTIVITY_TYPE.WEEKLY_FUND) return false; let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId); return !playerRecord; } /** * 周基金购买 * @param roleId 玩家id * @param roleName 玩家名 * @param sid * @param serverId 服 * @param activityId 活动 * @param productID 商品id * @returns */ export async function makeWeeklyFund(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.WEEKLY_FUND) { return STATUS.ACTIVITY_TYPE_ERROR; } let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new WeeklyFundData(activityData, createTime, serverTime); let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId); if(playerRecord) { return STATUS.ORDER_CANNOT_BUY; } await ActivityWeeklyFundModel.buy(serverId, activityId, roleId, productID); let rewardParamArr = stringToRewardParam(playerData.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 }) } }