Files
ZYZ/shared/domain/activityField/activityField.ts
2022-01-12 09:43:26 +08:00

123 lines
5.6 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 { 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
}
}