159 lines
6.9 KiB
TypeScript
159 lines
6.9 KiB
TypeScript
import moment = require('moment');
|
||
import { ACTIVITY_TIME_TYPE, REFRESH_TIME } from '../../consts';
|
||
import { ActivityModelType } from '../../db/Activity';
|
||
import { deltaDays } from '../../pubUtils/util';
|
||
|
||
// 活动数据
|
||
export abstract class ActivityBase {
|
||
groupId: number;
|
||
activityId: number = 0;
|
||
name: string = '';
|
||
beginTime: number = 0;
|
||
endTime: number = 0;
|
||
type: number = 0;
|
||
todayIndex: number = 0;//从1开始
|
||
delayDay: number = 0;//延迟多少天开启,0表示按照原计划开启
|
||
hideDayByServer: number = 0;
|
||
|
||
roundIndex: number = 0;//周期活动第几个周期,从1开始
|
||
nextRefreshTime: number = 0;//周期活动下次刷新时间
|
||
|
||
abstract initData(data: string): void;
|
||
|
||
//今天是活动第几天
|
||
public today(): number {
|
||
return this.todayIndex;
|
||
}
|
||
|
||
public canShow() {
|
||
console.log('#### canShow', this.beginTime <= Date.now(), this.endTime >= Date.now())
|
||
return this.beginTime <= Date.now() && this.endTime >= Date.now()
|
||
}
|
||
|
||
/**
|
||
* getBaseKeys
|
||
*/
|
||
public getBaseKeys() {
|
||
return {
|
||
activityId: this.activityId,
|
||
name: this.name,
|
||
beginTime: this.beginTime,
|
||
endTime: this.endTime,
|
||
type: this.type,
|
||
todayIndex: this.todayIndex,
|
||
delayDay: this.delayDay,
|
||
roundIndex: this.roundIndex,
|
||
nextRefreshTime: this.nextRefreshTime,
|
||
}
|
||
}
|
||
|
||
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
|
||
this.activityId = activityData.activityId;
|
||
this.groupId = activityData.groupId;
|
||
this.delayDay = activityData.delayDay ? activityData.delayDay : 0;
|
||
this.hideDayByServer = activityData.hideDayByServer||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.name = activityData.name;
|
||
|
||
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(serverTime * 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('活动时间数据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)));
|
||
}
|
||
if(activityData.hideDayByServer > 0) {
|
||
let hidOverTime = moment(serverTime * 1000).add(activityData.hideDayByServer, 'd').startOf('d').add(REFRESH_TIME, 'h').valueOf();
|
||
if(this.beginTime < hidOverTime) this.beginTime = hidOverTime;
|
||
}
|
||
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; // 周期性活动时间间隔,秒
|
||
hideDayByServer: number;
|
||
name: string;
|
||
|
||
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;
|
||
this.hideDayByServer = activity.hideDayByServer;
|
||
this.name = activity.name;
|
||
}
|
||
}
|
||
|
||
export function transActivityInRemoteToModelType(activity: ActivityInRemote): ActivityModelType {
|
||
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
|
||
}
|
||
}
|