// 节日活动 - 重阳集会 import { ActivityModelType } from '../../db/Activity'; import { ActivityNovemberRecModelType, NovemberRecord, } from '../../db/ActivityNovemberRec'; import { ActivityBase } from './activityField'; // 后台格式 interface NovemberDataInDb { dayIndex: number; // 天数 menuId: number; // 菜谱id buyCost: string; // 对应菜谱购买一次次数的消耗,type&id&count dailyBuyCnt: number; // 对应菜谱每天可以购买的次数 dailyFreeCnt: number; // 对应菜谱每天可以免费的次数 successRewards: string;// 对应菜谱每局的成功奖励 type&id&count failRewards: string; // 对应菜谱每局的失败安慰奖励 type&id&count }; interface NovemberDataReturn { dayIndex: number; // 第几天 menuId: number; // 菜谱id buyCost: string; // 对应菜谱购买一次的消耗,type&id&count buyCnt: number; // 对应菜谱累积到现在已经购买了的次数 maxBuyCnt: number; // 对应菜谱累积到现在可购买的次数,buyCnt(); constructor(activityData: ActivityModelType, createTime: number, serverTime: number) { super(activityData, createTime, serverTime) this.initData(activityData.data) } public initData(data: string): void { let novemberData: NovemberDataInDb[] = JSON.parse(data); if (!novemberData || novemberData.length == 0) return; for (const obj of novemberData) { let buyCost = obj?.buyCost || '&'; let buyCnt = 0; let maxBuyCnt = this.todayIndex * (obj?.dailyBuyCnt || 0); let playCnt = 0; let maxPlayCnt = this.todayIndex * (obj?.dailyFreeCnt || 0); let successRewards = obj?.successRewards || '&'; let failRewards = obj?.failRewards || '&' this.menuMap.set(obj.menuId, { dayIndex: obj.dayIndex, menuId: obj.menuId, buyCost, buyCnt, maxBuyCnt, playCnt, maxPlayCnt, successRewards, failRewards, isPushBuyRec: true }) } } public setPlayerRecords(playerData: ActivityNovemberRecModelType) { this.updatePlayerRecord(playerData); } public updatePlayerRecord(playerData: ActivityNovemberRecModelType) { if (!playerData) return; if (playerData.records) { this.records = playerData.records; for (const { menuId, isPass } of playerData.records) { if (!isPass) continue; let menu = this.menuMap.get(menuId); menu.playCnt += 1; this.menuMap.set(menuId, menu); } } if (playerData.buyRec) { for (const { menuId, buyCnt } of playerData.buyRec) { let menu = this.menuMap.get(menuId); menu.buyCnt += buyCnt; menu.maxPlayCnt += buyCnt; menu.isPushBuyRec = false; this.menuMap.set(menuId, menu); } } } public getShowResult() { return { ...this.getBaseKeys(), menus: [...this.menuMap.values()] } } }