Files
ZYZ/shared/domain/activityField/weeklyFundField.ts
2023-03-23 19:14:46 +08:00

93 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 周基金
import moment = require('moment');
import { pick } from 'underscore';
import { ActivityModelType } from '../../db/Activity';
import { ActivityWeeklyFundModelType } from '../../db/ActivityWeeklyFund';
import { ActivityBase } from './activityField';
interface WeeklyFundRewardInDb {
dayIndex: number; // 第几天
reward: string; // 每天签到的奖励 type&id&count
}
interface WeeklyFundDataInDb {
productID: string; // 商品id商品表
price: number; // 购买价格
onceReward: string; // 购买后立刻可以获得的奖励 type&id&count
rewards: WeeklyFundRewardInDb[]; // 每天签到可领取的奖励
rebate: number; // 显示用的返利倍数
}
class WeeklyFundReward {
dayIndex: number; // 第几天
reward: string; // 每天签到的奖励 type&id&count
hasReceived: boolean = false; // 是否领取过
constructor(data: WeeklyFundRewardInDb) {
this.dayIndex = data.dayIndex;
this.reward = data.reward;
}
public setHasReceived() {
this.hasReceived = true;
}
}
export class WeeklyFundData extends ActivityBase {
productID: string; // 商品id商品表
price: number; // 购买价格
onceReward: string; // 购买后立刻可以获得的奖励 type&id&count
rebate: number; // 显示用的返利倍数
buyEndTime: number = 0; // 购买截止时间
rewards: WeeklyFundReward[] = []; // 每天签到可领取的奖励
hasBought: boolean = false; // 是否购买了
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
super(activityData, createTime, serverTime)
this.initData(activityData.data)
}
public initData(data: string): void {
let dataObj: WeeklyFundDataInDb = JSON.parse(data);
if(!dataObj) return;
this.productID = dataObj.productID;
this.price = dataObj.price;
this.onceReward = dataObj.onceReward;
this.rebate = dataObj.rebate;
for(let reward of (dataObj.rewards||[])) {
this.rewards.push(new WeeklyFundReward(reward));
}
this.buyEndTime = this.nextRefreshTime;
this.nextRefreshTime = moment('2100-01-01').valueOf();
this.endTime = moment('2100-01-01').valueOf();
}
public setPlayerRecord(playerData: ActivityWeeklyFundModelType) {
if(!playerData) return;
this.hasBought = true;
for(let { dayIndex } of playerData.record) {
let reward = this.rewards.find(cur => cur.dayIndex == dayIndex);
if(reward) reward.setHasReceived();
}
}
public findSignReward(dayIndex: number) {
return this.rewards.find(cur => cur.dayIndex == dayIndex);
}
private hasReceivedAll() {
return !this.rewards.find(cur => !cur.hasReceived);
}
public getShowResult() {
if(this.buyEndTime < Date.now() && !this.hasBought) return null;
if(this.hasReceivedAll()) return null
return {
...this.getBaseKeys(),
...pick(this, ['productID', 'price', 'onceReward', 'rebate', 'buyEndTime', 'rewards', 'hasBought'])
}
}
}