✨ feat(活动): 活动多时间配置
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Vendored
+1
@@ -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, // 多时间类型
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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: '无效支付类型' },
|
||||||
|
|||||||
@@ -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,6 +35,8 @@ 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)
|
||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user