✨ 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
+5 -1
View File
@@ -24,7 +24,9 @@ export default class Activity extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS, { return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => { list: list.map(cur => {
return { 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 }), total
}); });
@@ -195,6 +197,8 @@ export default class Activity extends Service {
const { ctx } = this; const { ctx } = this;
if(!data.checkParams()) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); 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 activities = await ActivityModel.findActivityByIds(data.activityIds);
// let checkTimeResult = await checkActivityEditable(activities); // let checkTimeResult = await checkActivityEditable(activities);
// if(!checkTimeResult) return resResult(STATUS.GM_CAN_NOT_EDIT_ACT); // if(!checkTimeResult) return resResult(STATUS.GM_CAN_NOT_EDIT_ACT);
+1
View File
@@ -31,5 +31,6 @@ declare module 'egg' {
jsonp?: EggPluginItem; jsonp?: EggPluginItem;
view?: EggPluginItem; view?: EggPluginItem;
cors?: EggPluginItem; cors?: EggPluginItem;
xtransit?: EggPluginItem;
} }
} }
@@ -69,6 +69,7 @@ export enum ACTIVITY_TIME_TYPE {
SERVER_OPEN_TIME = 1, // 服务器开启时间 SERVER_OPEN_TIME = 1, // 服务器开启时间
ROLE_REGISTER_TIME = 2, // 角色创建时间 ROLE_REGISTER_TIME = 2, // 角色创建时间
DATE_TIME = 3, // 指定的日期时间 DATE_TIME = 3, // 指定的日期时间
MULT_DATE_TIME = 4, // 多时间类型
} }
/** /**
+1
View File
@@ -549,6 +549,7 @@ export const STATUS = {
GM_HIDDEN_TIME_ERR: { code: 60028, simStr: '时间不可有所重叠' }, GM_HIDDEN_TIME_ERR: { code: 60028, simStr: '时间不可有所重叠' },
GM_OLD_REF_TIME_ERR: { code: 60029, simStr: '正在进行中的时间不可更新成未来' }, GM_OLD_REF_TIME_ERR: { code: 60029, simStr: '正在进行中的时间不可更新成未来' },
GM_HIDDEN_CANNOT_INIT: { code: 60030, simStr: '已初始化过' }, GM_HIDDEN_CANNOT_INIT: { code: 60030, simStr: '已初始化过' },
GM_ACTIVITY_TIME_ERR: { code: 60031, simStr: '时间不可有重叠' },
// 支付相关状态 70000 - 79999 // 支付相关状态 70000 - 79999
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' }, NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' }, NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },
+15 -1
View File
@@ -5,6 +5,15 @@ import { COUNTER } from '../consts';
import { ActivityGroupModel } from './ActivityGroup'; import { ActivityGroupModel } from './ActivityGroup';
import { UpdateActivityParam } from '../domain/backEndField/params'; 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; // 活动表中的数据 data: string; // 活动表中的数据
@prop({ required: true }) @prop({ required: true })
name: string; // 活动名 name: string; // 活动名
@prop({ required: true, type: MultiTime, _id: false })
multiTime: MultiTime[]; // 结束时间 timeType=4
@prop({ required: true }) @prop({ required: true })
timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime) timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime)
@prop({ required: true }) @prop({ required: true })
@@ -104,6 +115,9 @@ export default class Activity extends BaseModel {
if (!param.endTime) { if (!param.endTime) {
delete 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 } }, let rec: ActivityModelType = await ActivityModel.findOneAndUpdate({ activityId }, { $set: { ...param, updatedBy: uid }, $setOnInsert: { isEnable: true, createdBy: uid } },
{ new: true, upsert: true }).lean(true); { new: true, upsert: true }).lean(true);
result.push(rec); result.push(rec);
@@ -95,6 +95,21 @@ export abstract class ActivityBase {
break; 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: { default: {
break; 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 activityId: number; // 活动Id
beginTime: number = 0; // 开启时间 timeType=3 beginTime: number = 0; // 开启时间 timeType=3
endTime: number = 0; // 结束时间 timeType=3 endTime: number = 0; // 结束时间 timeType=3
multiTime: multiTime[] = []; // 开启时间 timeType=4
type: number; // 活动类型 type: number; // 活动类型
data: string; // 活动表中的数据 data: string; // 活动表中的数据
@@ -141,6 +163,11 @@ export class ActivityInRemote {
this.activityId = activity.activityId; this.activityId = activity.activityId;
if(activity.beginTime) this.beginTime = activity.beginTime.getTime(); if(activity.beginTime) this.beginTime = activity.beginTime.getTime();
if(activity.endTime) this.endTime = activity.endTime.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.type = activity.type;
this.data = activity.data; this.data = activity.data;
this.timeType = activity.timeType; this.timeType = activity.timeType;
@@ -160,6 +187,7 @@ export function transActivityInRemoteToModelType(activity: ActivityInRemote): Ac
...activity, ...activity,
beginTime: new Date(activity.beginTime), beginTime: new Date(activity.beginTime),
endTime: new Date(activity.endTime), endTime: new Date(activity.endTime),
multiTime: activity.multiTime.map(cur => ({ id: cur.id, beginTime: new Date(cur.beginTime), endTime: new Date(cur.endTime)})),
_id: '', _id: '',
createdAt: new Date(), createdAt: new Date(),
updatedAt: new Date(), updatedAt: new Date(),
+17
View File
@@ -368,6 +368,7 @@ export class UpdateActivityParam {
name: string = ''; name: string = '';
hideDayByServer: number = 0; hideDayByServer: number = 0;
effectDay: number = 0; effectDay: number = 0;
multiTime: { id: number, beginTime: Date, endTime: Date}[] = []
constructor(obj?: any) { constructor(obj?: any) {
if(!obj) return; if(!obj) return;
@@ -390,6 +391,11 @@ export class UpdateActivityParam {
this.name = obj.name; this.name = obj.name;
this.hideDayByServer = obj.hideDayByServer; this.hideDayByServer = obj.hideDayByServer;
this.effectDay = obj.effectDay; 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() { checkParams() {
@@ -408,6 +414,17 @@ export class UpdateActivityParam {
if(this.effectDay && !isNumber(this.effectDay)) return false; if(this.effectDay && !isNumber(this.effectDay)) return false;
return true; 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;
}
} }