import moment = require('moment'); import { ACTIVITY_RESOURCES_TYPE } from '../../consts'; import { ActivityModelType } from '../../db/Activity'; import { ActivitySignInModelType } from '../../db/ActivitySignIn'; import { RewardInter } from '../../pubUtils/interface'; import { parseGoodStrWithType, parseHeroStrWithType } from '../../pubUtils/util'; import { CreateHeroParam } from '../roleField/hero'; import { ActivityBase } from './activityField'; // 每天签到配置数据 export class SignInItem { dayIndex: number; // 第几天,从1开始 reward: string; // 签到奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 isReceive: boolean = false; //是否领取 constructor(data: any) { this.dayIndex = data.dayIndex; this.reward = data.reward; this.isReceive = false; } public heroReward(): CreateHeroParam[] { let rewardArray = []; let rewardData = this.reward.split('|').filter(obj => { return obj && obj != '' }); for (let objStr of rewardData) { let reward = parseHeroStrWithType(objStr); rewardArray.push(reward); } return rewardArray.filter(obj => { return obj && obj.type == ACTIVITY_RESOURCES_TYPE.HERO }) } public goodReward(): RewardInter[] { let rewardArray = []; let rewardData = this.reward.split('|').filter(obj => { return obj && obj != '' }); for (let objStr of rewardData) { let reward = parseGoodStrWithType(objStr); rewardArray.push(reward); } return rewardArray.filter(obj => { return obj && obj.type == ACTIVITY_RESOURCES_TYPE.GOODS }) } public canReceive(): boolean { return !this.isReceive; } } // 签到活动数据 export class SignInData extends ActivityBase { list: Array = []; roundIndex: number = 0;//活动周期 price: number = 0;//vip价格,普通签到为0 productID: string = '';//商品ID consume: string = ''//补签消耗 isVip: boolean = false;//是否购买了当前的vip活动 //第几天的签到奖励 public findDayItem(dayIndex: number) { let index = this.list.findIndex(obj => { return obj && obj.dayIndex == dayIndex }) return (index != -1) ? this.list[index] : null; } //解析玩家签到记录 public setPlayerRecords(data: ActivitySignInModelType) { this.isVip = false; if (!data) { return; } let records = data.records ? data.records : []; for (let obj of this.list) { let index = records.findIndex(record => { return obj.dayIndex == record.dayIndex }) if (index != -1) { obj.isReceive = true; } } this.isVip = true } public initData(data: string) { let date = new Date(); this.beginTime = moment(date.setDate(5)).startOf('day').valueOf(); this.endTime = moment(date.setDate(25)).endOf('day').valueOf(); let dataObj = JSON.parse(data); this.price = dataObj.price; this.productID = dataObj.productID; this.consume = dataObj.consume; this.roundIndex = moment().diff(moment(this.beginTime).startOf('months'), 'months') + 1; this.todayIndex = moment(Date.now()).date() - 4; let arr = dataObj.data for (let obj of arr) { this.list.push(new SignInItem(obj)) } } constructor(activityData: ActivityModelType) { super(activityData) this.initData(activityData.data) } }