import moment = require('moment'); import { ACTIVITY_TIME_TYPE, REFRESH_TIME, SERVER_OPEN_TIME } from '../../consts'; import { ActivityModelType } from '../../db/Activity'; import { deltaDays } from '../../pubUtils/util'; // 活动数据 export abstract class ActivityBase { activityId: number = 0; beginTime: number = 0; endTime: number = 0; type: number = 0; todayIndex: number = 0;//从1开始 delayDay: number = 0;//延迟多少天开启,0表示按照原计划开启 roundIndex: number = 0;//周期活动第几个周期,从1开始 nextRefreshTime: number = 0;//周期活动下次刷新时间 abstract initData(data: string): void; //今天是活动第几天 public today(): number { return this.todayIndex; } constructor(activityData: ActivityModelType, createTime: number) { this.activityId = activityData.activityId; this.delayDay = activityData.delayDay ? activityData.delayDay : 0; this.beginTime = moment(activityData.beginTime).add(this.delayDay, 'd').valueOf(); this.endTime = moment(activityData.endTime).add(this.delayDay, 'd').valueOf(); this.todayIndex = deltaDays(moment(this.beginTime).toDate(), new Date) + 1; this.roundIndex = 1; this.nextRefreshTime = this.endTime; this.type = activityData.type; // console.log('今天是活动第几天', activityData.beginTime, new Date, this.todayIndex) console.log('***** activityData', activityData.timeType) switch (activityData.timeType) { case ACTIVITY_TIME_TYPE.SERVER_OPEN_TIME: { this.beginTime = moment(SERVER_OPEN_TIME).add(this.delayDay, 'd').startOf('d').add(REFRESH_TIME, 'h').valueOf(); if (activityData.days > 0) { this.endTime = moment(this.beginTime).add(activityData.days, 'd').valueOf(); } else { this.endTime = moment(this.beginTime).add(1, 'd').valueOf(); } this.todayIndex = deltaDays(moment(this.beginTime).toDate(), new Date) + 1; console.log('活动时间数据11...', activityData.timeType, this.beginTime, this.endTime, this.todayIndex, this.roundIndex, this.nextRefreshTime) break; } case ACTIVITY_TIME_TYPE.ROLE_REGISTER_TIME: { this.beginTime = moment(createTime * 1000).add(this.delayDay, 'd').startOf('d').add(REFRESH_TIME, 'h').valueOf(); if (activityData.days > 0) { this.endTime = moment(this.beginTime).add(activityData.days, 'd').valueOf(); } else { this.endTime = moment(this.beginTime).add(1, 'd').valueOf(); } this.todayIndex = deltaDays(moment(this.beginTime).toDate(), new Date) + 1; console.log('活动时间数据22...', activityData.timeType, this.beginTime, this.endTime, this.todayIndex, this.roundIndex, this.nextRefreshTime) break; } case ACTIVITY_TIME_TYPE.DATE_TIME: { console.log('活动时间数据33...', activityData.timeType, this.beginTime, this.endTime, this.todayIndex, this.roundIndex, this.nextRefreshTime) break; } default: { break; } } if (activityData.interval > 0) { this.roundIndex = Math.ceil((moment(new Date).valueOf() - this.beginTime) / (activityData.interval * 1000)); this.nextRefreshTime = moment(this.beginTime).add(activityData.interval * this.roundIndex, 'second').valueOf(); this.todayIndex = Math.ceil(((moment(new Date).valueOf() - this.beginTime) / (24 * 60 * 60 * 1000))); } console.log('活动时间数据...', '活动id:', activityData.activityId, '类型:', activityData.timeType, '开始时间:', this.beginTime, moment(this.beginTime).toDate(), '结束:', this.endTime, moment(this.endTime).toDate(), '今天第几天:', this.todayIndex, '回合:', this.roundIndex, '下次刷新:', this.nextRefreshTime, moment(this.nextRefreshTime).toDate()) } } /** * 存在内存内的活动 */ export class ActivityInRemote { groupId: number; // 组Id activityId: number; // 活动Id beginTime: number; // 开启时间 timeType=3 endTime: number; // 结束时间 timeType=3 type: number; // 活动类型 data: string; // 活动表中的数据 timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime) days: number; // 活动持续天数 timeType=1、2 delayDay: number; // 迟几天开启活动,0表示按照规定时间开启 interval: number; // 周期性活动时间间隔,秒 constructor(activity?: ActivityModelType) { this.groupId = activity.groupId; this.activityId = activity.activityId; this.beginTime = activity.beginTime.getTime(); this.endTime = activity.endTime.getTime(); this.type = activity.type; this.data = activity.data; this.timeType = activity.timeType; this.days = activity.days; this.delayDay = activity.delayDay; this.interval = activity.interval; } } export function transActivityInRemoteToModelType(activity: ActivityInRemote) { if(!activity) return null; return { ...activity, beginTime: new Date(activity.beginTime), endTime: new Date(activity.endTime), _id: '', createdAt: new Date(), updatedAt: new Date(), createdBy: 0, updatedBy: 0 } }