diff --git a/gm-server/app/controller/game.ts b/gm-server/app/controller/game.ts index faa6aa259..ad2e3d681 100644 --- a/gm-server/app/controller/game.ts +++ b/gm-server/app/controller/game.ts @@ -73,6 +73,20 @@ export default class GameController extends Controller { return } + public async getMarqueeList() { + const { ctx } = this; + const { page, pageSize, sortField, sortOrder, form } = ctx.request.body; + ctx.body = await ctx.service.game.getMarqueeList(page, pageSize, sortField, sortOrder, form); + return + } + + public async updateMarquee() { + const { ctx } = this; + const { code, values } = ctx.request.body; + ctx.body = await ctx.service.game.updateMarquee(code, values); + return + } + public async getDicHero() { const { ctx } = this; ctx.body = await ctx.service.game.getDicHero(); diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index cc6a9e253..de39c4e21 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -59,6 +59,8 @@ export default (app: Application) => { router.post('/api/game/getnoticelist', controller.game.getNoticeList); router.post('/api/game/updatenotice', controller.game.updateNotice); router.post('/api/game/delnotice', controller.game.delNotice); + router.post('/api/game/getmarqueelist', controller.game.getMarqueeList); + router.post('/api/game/updatemarquee', controller.game.updateMarquee); router.post('/api/activity/getactivitylist', tokenParser, controller.activity.getActivityList); router.post('/api/activity/updateactivity', tokenParser, controller.activity.updateActivity); diff --git a/gm-server/app/service/Game.ts b/gm-server/app/service/Game.ts index 289167a0c..d1d8ffc54 100644 --- a/gm-server/app/service/Game.ts +++ b/gm-server/app/service/Game.ts @@ -9,6 +9,7 @@ import { DicActivityType } from '@pubUtils/dictionary/DicActivityType'; import { DicTaskType } from '@pubUtils/dictionary/DicTaskType'; import { ServerStategyModel, ServerStategyTypeParam } from '@db/ServerStategy'; import { NoticeModel, NoticeTypeParam } from '@db/Notice'; +import { MarqueeModel, MarqueeParam } from '@db/Marquee'; /** * Test Service @@ -187,4 +188,30 @@ export default class Game extends Service { if(!result) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); return ctx.service.utils.resResult(STATUS.SUCCESS); } + + + public async getMarqueeList(page: number, pageSize: number, sortField: string, sortOrder: string, form: { type?: number, current?: boolean, content?: string }) { + const { ctx } = this; + const list = await MarqueeModel.findByCondition(page, pageSize, sortField, sortOrder, form); + const total = await MarqueeModel.countByCondition( form ) + return ctx.service.utils.resResult(STATUS.SUCCESS, { + list: list.map(cur => { + return { ...cur, startTime: cur.startTime.getTime(), endTime: cur.endTime.getTime() } + }), total + }); + } + + public async updateMarquee(code: string, params: MarqueeParam) { + const { ctx } = this; + if(params.startTime) params.startTime = new Date(params.startTime); + if(params.endTime) params.endTime = new Date(params.endTime); + let result; + if(code == 'new') { + result = await MarqueeModel.createData(params); + } else { + result = await MarqueeModel.updateData(code, params); + } + if(!result) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + return ctx.service.utils.resResult(STATUS.SUCCESS); + } } diff --git a/shared/db/Marquee.ts b/shared/db/Marquee.ts index b7e467d89..5648b8e69 100644 --- a/shared/db/Marquee.ts +++ b/shared/db/Marquee.ts @@ -10,16 +10,22 @@ import { genCode } from '../pubUtils/util'; export default class Marquee extends BaseModel { @prop({ required: true }) code: string; // 跑马灯唯一标识 + @prop({ required: true, type: Number }) serverIds: number[]; // 推送服务器 + @prop({ required: true, enum: MARQUEE_TYPE }) type: MARQUEE_TYPE; // 推送类型 + @prop({ required: true }) startTime: Date; // 活动开始时间 + @prop({ required: true }) endTime: Date; // 活动结束时间 + @prop({ required: true }) interval: number; // 活动结束时间 + @prop({ required: true }) content: string; // 广播内容 @@ -64,6 +70,41 @@ export default class Marquee extends BaseModel { const result: MarqueeType[] = await MarqueeModel.find({ type: MARQUEE_TYPE.SCHEDULE, startTime: { $lte: new Date() }, endTime: { $gte: new Date() } }).lean(); return result; } + + + private static getSearchObj(form: { type?: number, current?: boolean, content?: string }) { + let searchObj = {}; + if(form['type']) searchObj['type'] = form.type; + if(form['current']) { + searchObj['startTime'] = { $lte: new Date }; + searchObj['endTime'] = { $gte: new Date }; + } + if(form['content']) searchObj['content'] = { $regex: new RegExp(form.content.toString(), 'i') }; + return searchObj + } + + public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: { type?: number, current?: boolean, content?: string } = {}) { + + let searchObj = this.getSearchObj(form); + let sort = {}; + if(sortField && sortOrder) { + if(sortOrder == 'ascend') { + sort[sortField] = 1; + } else if (sortOrder == 'descend') { + sort[sortField] = -1; + } + } + const result: MarqueeType[] = await MarqueeModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).select('+sort +showStartTime +showEndTime +serverType +isEnable').lean({ getters: true, virtuals: true }); + return result; + + } + + public static async countByCondition(form: { type?: number, current?: boolean, content?: string } = {}) { + + let searchObj = this.getSearchObj(form); + const result = await MarqueeModel.count(searchObj); + return result; + } }