diff --git a/shared/db/Notice.ts b/shared/db/Notice.ts index 3bc3dc894..3063bcba8 100644 --- a/shared/db/Notice.ts +++ b/shared/db/Notice.ts @@ -8,6 +8,7 @@ import { CounterModel } from './Counter'; */ @modelOptions({schemaOptions: {id: false}}) @index({ id: 1 }) +@index({ packages: 1 }) export default class Notice extends BaseModel { @prop({ required: true }) @@ -35,10 +36,12 @@ export default class Notice extends BaseModel { @prop({ required: true, select: false }) isEnable: boolean; + @prop({ required: true, select: false, type: String }) + packages: string[]; - public static async getAllNotice() { + public static async getAllNotice(packageCode: string) { let curTime = new Date(); - let notices: NoticeType[] = await NoticeModel.find({ showStartTime: { $lte: curTime }, showEndTime: { $gte: curTime }, isEnable: true }) + let notices: NoticeType[] = await NoticeModel.find({ showStartTime: { $lte: curTime }, showEndTime: { $gte: curTime }, isEnable: true, packages: packageCode }) .sort({ sort: -1, createTime: -1 }) .lean({ virtuals: true }); return notices; @@ -76,7 +79,7 @@ export default class Notice extends BaseModel { sort[sortField] = -1; } } - const result: NoticeType[] = await NoticeModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).select('+sort +showStartTime +showEndTime +isEnable').lean({ getters: true, virtuals: true }); + const result: NoticeType[] = await NoticeModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).select('+sort +showStartTime +showEndTime +isEnable +packages').lean({ getters: true, virtuals: true }); return result; } diff --git a/web-server/app/controller/game.ts b/web-server/app/controller/game.ts index f9b7acfe5..2048157d2 100644 --- a/web-server/app/controller/game.ts +++ b/web-server/app/controller/game.ts @@ -146,8 +146,17 @@ export default class GameController extends Controller { public async getnotice() { const { ctx } = this; + const { pid, gid } = ctx.request.body; - let notice = await NoticeModel.getAllNotice(); + let packageCode = 'default'; + if(pid && gid) { + let pkg = await PackageModel.getPackageByGidPid(gid, pid); + if(pkg) packageCode = pkg?.packageCode; + } + + let notice = await NoticeModel.getAllNotice(packageCode); + if(notice.length == 0) notice = await NoticeModel.getAllNotice('default'); + let result = notice.map(cur => { let { id, title, tag, type, content, time } = cur; return {