✨ feat(活动): 活动多时间配置
This commit is contained in:
@@ -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);
|
||||
|
||||
1
gm-server/typings/config/plugin.d.ts
vendored
1
gm-server/typings/config/plugin.d.ts
vendored
@@ -31,5 +31,6 @@ declare module 'egg' {
|
||||
jsonp?: EggPluginItem;
|
||||
view?: EggPluginItem;
|
||||
cors?: EggPluginItem;
|
||||
xtransit?: EggPluginItem;
|
||||
}
|
||||
}
|
||||
@@ -69,6 +69,7 @@ export enum ACTIVITY_TIME_TYPE {
|
||||
SERVER_OPEN_TIME = 1, // 服务器开启时间
|
||||
ROLE_REGISTER_TIME = 2, // 角色创建时间
|
||||
DATE_TIME = 3, // 指定的日期时间
|
||||
MULT_DATE_TIME = 4, // 多时间类型
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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: '无效支付类型' },
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user