diff --git a/game-server/app/services/activity/popNoticeService.ts b/game-server/app/services/activity/popNoticeService.ts index fe57d37e4..f0303566c 100644 --- a/game-server/app/services/activity/popNoticeService.ts +++ b/game-server/app/services/activity/popNoticeService.ts @@ -1,4 +1,6 @@ +import { ActivityData } from "../../domain/activityField/activityField"; import { PopNoticeData } from "../../domain/activityField/popNotice"; +import { ShopData } from "../../domain/roleField/shop"; import { getRoleCreateTime, getServerCreateTime } from "../redisService"; import { getActivityById } from "./activityService"; @@ -16,5 +18,19 @@ import { getActivityById } from "./activityService"; let serverTime = await getServerCreateTime(serverId); let playerData = new PopNoticeData(activityData, createTime, serverTime); + if(playerData.needActivityTime()) { + let { activityId } = playerData.param; + let curActivity = await getActivityById(activityId); + let data = new ActivityData(curActivity, createTime, serverTime); + playerData.setActivityTime(Math.floor(data.beginTime/1000), Math.floor(data.nextRefreshTime/1000)); + } + if(playerData.needShopTime()) { + let { activityId, shopItemId } = playerData.param; + let curActivity = await getActivityById(activityId); + let data = new ShopData(curActivity, createTime, serverTime); + let item = data.findByItemId(shopItemId); + if(item) playerData.setActivityTime(item.beginTime, item.endTime) + } + delete playerData.param; return playerData; } \ No newline at end of file diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 3b15af5bd..9f3548b43 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -226,4 +226,18 @@ export enum DAILY_COIN_BOX_STATUS { export enum GUIDE_GACHA_STAGE { PULL = 1, // 抽卡阶段 DECIDE = 2, // 决定阶段 +} + +export enum POP_NOTICE_TIME_TYPE { + USE_STR = 1, // 读手写 + USE_TIME = 2, // 读指定 + USE_ACTIVITY = 3, // 按活动 + USE_SHOPITEM = 4, // 按商品 + NO = 5, // 不显示 +} + +export enum POP_NOTICE_TIME_SHOW_TYPE { + READ_STR = 1, // 读time字段字符串 + READ_COUNTDOWN = 2, // 读倒计时 + NO = 3, // 不显示 } \ No newline at end of file diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 7ac970f36..05cd86052 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -166,3 +166,15 @@ export function transActivityInRemoteToModelType(activity: ActivityInRemote): Ac updatedBy: 0 } } + + +export class ActivityData extends ActivityBase { + public initData(_data: string) { + + } + + constructor(activityData: ActivityModelType, createTime: number, serverTime: number) { + super(activityData, createTime, serverTime) + this.initData(activityData.data) + } +} \ No newline at end of file diff --git a/shared/domain/activityField/popNotice.ts b/shared/domain/activityField/popNotice.ts index 226846ddc..471e68d71 100644 --- a/shared/domain/activityField/popNotice.ts +++ b/shared/domain/activityField/popNotice.ts @@ -1,3 +1,5 @@ +import moment = require("moment"); +import { ACTIVITY_TIME_TYPE, POP_NOTICE_TIME_SHOW_TYPE, POP_NOTICE_TIME_TYPE } from "../../consts"; import { ActivityModelType } from "../../db/Activity"; import { ActivityBase } from "./activityField"; @@ -9,7 +11,21 @@ interface PopNoticeInDb { sysType: number; // dic_zyz_systemOpenTime的id,功能开启 timePosition: string; // 控制公告持续时间的显示位置'&'表示不显示持续时间 btnPosition: string; // 按钮位置 - time: string; // 公告持续时间 + timeType: POP_NOTICE_TIME_TYPE; // 1-手写公告 2-指定时间 3-按某个活动时间 4-按某个商品时间 5-无时间 + timeStr: string; // 公告时间 + beginTime: number; // 后台选择的时间,13位时间戳 + endTime: number; // 后台选择的时间,13位时间戳 + activityId: number; // 活动id + shopItemId: number; // 商品id +} + +interface PopNoticeTimeParam { + timeType: POP_NOTICE_TIME_TYPE; + timeStr: string; + beginTime: number; // 后台选择的时间,13位时间戳 + endTime: number; // 后台选择的时间,13位时间戳 + activityId: number; + shopItemId: number; } /** @@ -21,9 +37,12 @@ interface PopNoticeInDb { sort: number; // 活动的排序,越大的越前 skip: string; // 前往 sysType: number; // dic_zyz_systemOpenTime的id,功能开启 + showTimeType: POP_NOTICE_TIME_SHOW_TYPE = POP_NOTICE_TIME_SHOW_TYPE.NO; // 显示类型 timePosition: string; // 控制公告持续时间的显示位置'&'表示不显示持续时间 btnPosition: string; // 按钮位置 - time: string; // 公告持续时间 + time: string = ''; // 公告持续时间 + countdownTime: number = 0; // 公告持续时间,10位时间戳 + param: PopNoticeTimeParam; constructor(activityData: ActivityModelType, createTime: number, serverTime: number) { super(activityData, createTime, serverTime) @@ -39,7 +58,53 @@ interface PopNoticeInDb { this.skip = dataObj.skip; this.timePosition = dataObj.timePosition; this.btnPosition = dataObj.btnPosition; - this.time = dataObj.time; + this.param = { + timeType: dataObj.timeType, + timeStr: dataObj.timeStr, + beginTime: dataObj.beginTime, + endTime: dataObj.endTime, + activityId: dataObj.activityId, + shopItemId: dataObj.shopItemId, + } + this.setTime(); } + private setTime(beginTime?: number, endTime?: number) { + let param = this.param; + switch (param.timeType) { + case POP_NOTICE_TIME_TYPE.USE_STR: + this.showTimeType = POP_NOTICE_TIME_SHOW_TYPE.READ_STR; + this.time = param.timeStr; + break; + case POP_NOTICE_TIME_TYPE.USE_TIME: + this.showTimeType = POP_NOTICE_TIME_SHOW_TYPE.READ_COUNTDOWN; + this.time = `活动时间:${moment(param.beginTime).format('MM.DD')} - ${moment(param.endTime).format('MM.DD')}` + this.countdownTime = Math.floor(param.endTime/1000); + break; + case POP_NOTICE_TIME_TYPE.USE_ACTIVITY: + case POP_NOTICE_TIME_TYPE.USE_SHOPITEM: + this.showTimeType = POP_NOTICE_TIME_SHOW_TYPE.READ_COUNTDOWN; + if(beginTime && endTime) { + this.time = `活动时间:${moment(beginTime * 1000).format('MM.DD')} - ${moment(endTime * 1000).format('MM.DD')}` + this.countdownTime = endTime; + } + break; + case POP_NOTICE_TIME_TYPE.NO: + this.showTimeType = POP_NOTICE_TIME_SHOW_TYPE.NO; + break; + } + } + + public setActivityTime(beginTime: number, endTime: number) { + if(this.param.timeType != POP_NOTICE_TIME_TYPE.USE_ACTIVITY && this.param.timeType != POP_NOTICE_TIME_TYPE.USE_SHOPITEM) return; + this.setTime(beginTime, endTime); + } + + public needActivityTime() { + return this.param.timeType == POP_NOTICE_TIME_TYPE.USE_ACTIVITY; + } + + public needShopTime() { + return this.param.timeType == POP_NOTICE_TIME_TYPE.USE_SHOPITEM; + } } \ No newline at end of file