feat(活动): 活动多时间配置

This commit is contained in:
luying
2022-11-11 10:27:07 +08:00
parent f3357fc226
commit 282dd73951
7 changed files with 68 additions and 2 deletions

View File

@@ -24,7 +24,9 @@ export default class Activity extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => {
return {
...cur, beginTime: cur.beginTime?.getTime()||0, endTime: cur.endTime?.getTime()||0, env: ctx.app.config.realEnv
...cur, beginTime: cur.beginTime?.getTime()||0, endTime: cur.endTime?.getTime()||0,
multiTime: (cur.multiTime||[]).map(cur => ({ id: cur.id, beginTime: cur.beginTime?.getTime()||0, endTime: cur.endTime?.getTime()||0 })),
env: ctx.app.config.realEnv
}
}), total
});
@@ -195,6 +197,8 @@ export default class Activity extends Service {
const { ctx } = this;
if(!data.checkParams()) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if(!data.checkTime()) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_TIME_ERR);
let activities = await ActivityModel.findActivityByIds(data.activityIds);
// let checkTimeResult = await checkActivityEditable(activities);
// if(!checkTimeResult) return resResult(STATUS.GM_CAN_NOT_EDIT_ACT);

View File

@@ -31,5 +31,6 @@ declare module 'egg' {
jsonp?: EggPluginItem;
view?: EggPluginItem;
cors?: EggPluginItem;
xtransit?: EggPluginItem;
}
}

View File

@@ -69,6 +69,7 @@ export enum ACTIVITY_TIME_TYPE {
SERVER_OPEN_TIME = 1, // 服务器开启时间
ROLE_REGISTER_TIME = 2, // 角色创建时间
DATE_TIME = 3, // 指定的日期时间
MULT_DATE_TIME = 4, // 多时间类型
}
/**

View File

@@ -549,6 +549,7 @@ export const STATUS = {
GM_HIDDEN_TIME_ERR: { code: 60028, simStr: '时间不可有所重叠' },
GM_OLD_REF_TIME_ERR: { code: 60029, simStr: '正在进行中的时间不可更新成未来' },
GM_HIDDEN_CANNOT_INIT: { code: 60030, simStr: '已初始化过' },
GM_ACTIVITY_TIME_ERR: { code: 60031, simStr: '时间不可有重叠' },
// 支付相关状态 70000 - 79999
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },

View File

@@ -5,6 +5,15 @@ import { COUNTER } from '../consts';
import { ActivityGroupModel } from './ActivityGroup';
import { UpdateActivityParam } from '../domain/backEndField/params';
class MultiTime {
@prop({ required: true })
id: number; // 开启时间 timeType=4
@prop({ required: true })
beginTime: Date; // 开启时间 timeType=4
@prop({ required: true })
endTime: Date; // 结束时间 timeType=4
}
/**
* 活动系统
*/
@@ -26,7 +35,9 @@ export default class Activity extends BaseModel {
data: string; // 活动表中的数据
@prop({ required: true })
name: string; // 活动名
@prop({ required: true, type: MultiTime, _id: false })
multiTime: MultiTime[]; // 结束时间 timeType=4
@prop({ required: true })
timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime)
@prop({ required: true })
@@ -104,6 +115,9 @@ export default class Activity extends BaseModel {
if (!param.endTime) {
delete param["endTime"];
}
if (!param.multiTime) {
delete param["multiTime"];
}
let rec: ActivityModelType = await ActivityModel.findOneAndUpdate({ activityId }, { $set: { ...param, updatedBy: uid }, $setOnInsert: { isEnable: true, createdBy: uid } },
{ new: true, upsert: true }).lean(true);
result.push(rec);

View File

@@ -95,6 +95,21 @@ export abstract class ActivityBase {
break;
}
case ACTIVITY_TIME_TYPE.MULT_DATE_TIME: {
let now = new Date();
let multiTime = activityData.multiTime||[];
for(let { id, beginTime, endTime } of multiTime) {
if(beginTime <= now && endTime > now) {
this.beginTime = beginTime.valueOf();
this.endTime = endTime.valueOf();
this.roundIndex = id;
let startOfBeginDay = moment(this.beginTime).startOf('d').add(REFRESH_TIME, 'h');
this.todayIndex = deltaDays(startOfBeginDay.toDate(), new Date) + 1;
}
}
break;
}
default: {
break;
}
@@ -116,6 +131,12 @@ export abstract class ActivityBase {
}
}
class multiTime {
id: number = 0;
beginTime: number = 0;
endTime: number = 0;
}
/**
* 存在内存内的活动
*/
@@ -124,6 +145,7 @@ export class ActivityInRemote {
activityId: number; // 活动Id
beginTime: number = 0; // 开启时间 timeType=3
endTime: number = 0; // 结束时间 timeType=3
multiTime: multiTime[] = []; // 开启时间 timeType=4
type: number; // 活动类型
data: string; // 活动表中的数据
@@ -141,6 +163,11 @@ export class ActivityInRemote {
this.activityId = activity.activityId;
if(activity.beginTime) this.beginTime = activity.beginTime.getTime();
if(activity.endTime) this.endTime = activity.endTime.getTime();
if(activity.multiTime) {
for(let { id, beginTime, endTime } of activity.multiTime) {
this.multiTime.push({ id, beginTime: beginTime?.getTime()||0, endTime: endTime?.getTime()||0 });
}
}
this.type = activity.type;
this.data = activity.data;
this.timeType = activity.timeType;
@@ -160,6 +187,7 @@ export function transActivityInRemoteToModelType(activity: ActivityInRemote): Ac
...activity,
beginTime: new Date(activity.beginTime),
endTime: new Date(activity.endTime),
multiTime: activity.multiTime.map(cur => ({ id: cur.id, beginTime: new Date(cur.beginTime), endTime: new Date(cur.endTime)})),
_id: '',
createdAt: new Date(),
updatedAt: new Date(),

View File

@@ -368,6 +368,7 @@ export class UpdateActivityParam {
name: string = '';
hideDayByServer: number = 0;
effectDay: number = 0;
multiTime: { id: number, beginTime: Date, endTime: Date}[] = []
constructor(obj?: any) {
if(!obj) return;
@@ -390,6 +391,11 @@ export class UpdateActivityParam {
this.name = obj.name;
this.hideDayByServer = obj.hideDayByServer;
this.effectDay = obj.effectDay;
if(obj.multiTime && obj.multiTime.length) {
for(let { id, beginTime, endTime } of obj.multiTime) {
this.multiTime.push({ id, beginTime: new Date(beginTime), endTime: new Date(endTime)})
}
}
}
checkParams() {
@@ -408,6 +414,17 @@ export class UpdateActivityParam {
if(this.effectDay && !isNumber(this.effectDay)) return false;
return true;
}
checkTime() {
let t = undefined;
for(let { beginTime, endTime } of this.multiTime) {
console.log('####', t, beginTime, endTime)
if(beginTime > endTime) return false;
if(t && beginTime < t) return false;
t = endTime;
}
return true;
}
}