diff --git a/gm-server/app/service/Activity.ts b/gm-server/app/service/Activity.ts index c5ae3c940..8a5295d72 100644 --- a/gm-server/app/service/Activity.ts +++ b/gm-server/app/service/Activity.ts @@ -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); diff --git a/gm-server/typings/config/plugin.d.ts b/gm-server/typings/config/plugin.d.ts index 39c01f0fb..d789dcfce 100644 --- a/gm-server/typings/config/plugin.d.ts +++ b/gm-server/typings/config/plugin.d.ts @@ -31,5 +31,6 @@ declare module 'egg' { jsonp?: EggPluginItem; view?: EggPluginItem; cors?: EggPluginItem; + xtransit?: EggPluginItem; } } \ No newline at end of file diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index b53371951..e83d9034a 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -69,6 +69,7 @@ export enum ACTIVITY_TIME_TYPE { SERVER_OPEN_TIME = 1, // 服务器开启时间 ROLE_REGISTER_TIME = 2, // 角色创建时间 DATE_TIME = 3, // 指定的日期时间 + MULT_DATE_TIME = 4, // 多时间类型 } /** diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index b4a77d640..eef12c399 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -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: '无效支付类型' }, diff --git a/shared/db/Activity.ts b/shared/db/Activity.ts index 6983aab5e..7b3aa913b 100644 --- a/shared/db/Activity.ts +++ b/shared/db/Activity.ts @@ -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); diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 1d3454401..979ea60c3 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -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(), diff --git a/shared/domain/backEndField/params.ts b/shared/domain/backEndField/params.ts index 9c3e4ffd0..836a64342 100644 --- a/shared/domain/backEndField/params.ts +++ b/shared/domain/backEndField/params.ts @@ -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; + } }