diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index dd6034fb3..cc68e3081 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -31,39 +31,6 @@ export class GmHandler { constructor(private app: Application) { } - //对接gm后台,下发邮件 - async addMail(msg: { endTime: number, sendName: string, content: string, goods: RewardInter[], sendTime: number }) { - let { endTime, content, sendName, sendTime, goods } = msg; - let mail = await GMMailModel.addMail({ endTime, content, sendName, sendTime, goods }); - return resResult(STATUS.SUCCESS, { mail }); - } - - async sendMail(msg: { id: string, mailType: number, roleIds?: string[], serverIds?: number[] }, session: BackendSession) { - const uid: number = session.get('uid') - let { id, mailType, roleIds, serverIds } = msg; - let f = new SendMailFun(); - await f.setWithGmMail(id); - if (mailType == GM_MAIL_TYPE.SINGLE || mailType == GM_MAIL_TYPE.GROUP) { - await f.sendToUsers(mailType, roleIds); - } else { - await f.sendToServer(serverIds); - } - await f.saveRecord(uid); - return resResult(STATUS.SUCCESS); - } - - async sendWithContent(msg: { contentId: number, mailType: number, params: { params?: string[], sendName?: string, goods?: RewardInter[], endTime?: number }, roleIds?: string[], serverIds?: number[] }, session: BackendSession) { - let { contentId, mailType, roleIds, serverIds, params } = msg; - let f = new SendMailFun(); - f.setWithContentId(contentId, params); - if (mailType == GM_MAIL_TYPE.SINGLE || mailType == GM_MAIL_TYPE.GROUP) { - await f.sendToUsers(mailType, roleIds); - } else { - await f.sendToServer(serverIds); - } - return resResult(STATUS.SUCCESS); - } - async reloadResource(msg: {}, session: BackendSession) { try { let activityServers = this.app.getServersByType('activity'); diff --git a/game-server/app/servers/gm/handler/gmMailHandler.ts b/game-server/app/servers/gm/handler/gmMailHandler.ts new file mode 100644 index 000000000..7bf866b98 --- /dev/null +++ b/game-server/app/servers/gm/handler/gmMailHandler.ts @@ -0,0 +1,48 @@ +import { Application, BackendSession, pinus } from 'pinus'; +import { RoleModel } from '../../../db/Role'; +import { EventRecordModel } from '../../../db/EventRecord'; +import { getEvent } from '../../../services/eventSercive'; +import { getRandSingleEelm, resResult } from '../../../pubUtils/util'; +import { STATUS } from '../../../consts/statusCode'; +import { GMMailModel } from '../../../db/GMMail'; +import { delGuildActivityRank, getRoleOnlineInfo } from '../../../services/redisService'; +import { SendMailFun } from '../../../services/mailService'; +import { GM_MAIL_TYPE } from '../../../consts'; +import { RewardInter } from '../../../pubUtils/interface'; +import { CreateMailParams } from '../../../domain/backEndField/params'; + +export default function (app: Application) { + return new GmMailHandler(app); +} + +export class GmMailHandler { + constructor(private app: Application) { + } + + //对接gm后台,下发邮件 + async sendMail(msg: { id: string, mailType: number, roleIds?: string[], serverIds?: number[] }, session: BackendSession) { + const uid: number = session.get('uid') + let { id, mailType, roleIds, serverIds } = msg; + let f = new SendMailFun(); + await f.setWithGmMail(id); + if (mailType == GM_MAIL_TYPE.SINGLE || mailType == GM_MAIL_TYPE.GROUP) { + await f.sendToUsers(mailType, roleIds); + } else { + await f.sendToServer(serverIds); + } + await f.saveRecord(uid); + return resResult(STATUS.SUCCESS); + } + + async sendWithContent(msg: { contentId: number, mailType: number, params: { params?: string[], sendName?: string, goods?: RewardInter[], endTime?: number }, roleIds?: string[], serverIds?: number[] }, session: BackendSession) { + let { contentId, mailType, roleIds, serverIds, params } = msg; + let f = new SendMailFun(); + f.setWithContentId(contentId, params); + if (mailType == GM_MAIL_TYPE.SINGLE || mailType == GM_MAIL_TYPE.GROUP) { + await f.sendToUsers(mailType, roleIds); + } else { + await f.sendToServer(serverIds); + } + return resResult(STATUS.SUCCESS); + } +} \ No newline at end of file diff --git a/game-server/app/servers/gm/remote/gmRemote.ts b/game-server/app/servers/gm/remote/gmRemote.ts index 37d7c9248..4d5e52268 100644 --- a/game-server/app/servers/gm/remote/gmRemote.ts +++ b/game-server/app/servers/gm/remote/gmRemote.ts @@ -2,12 +2,6 @@ import { Application, ChannelService, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; import { setGmMails, getGmMailById, getGmMails, getGmUseMails } from '../../../pubUtils/gmData/gmDataUtil'; -import { MAIL_TYPE, MAIL_TEM_TYPE, MAIL_STATUS } from "../../../consts/constModules/mailConst"; -import { mailData } from "../../../pubUtils/interface"; -import { findWhere } from 'underscore'; -import { nowSeconds } from '../../../pubUtils/timeUtil'; -import { GroupMailType } from '../../../db/GroupMail'; -import { MailType } from '../../../db/Mail'; import { mongoose } from '@typegoose/typegoose'; const { ObjectId } = mongoose.Types; export default function (app: Application) { diff --git a/game-server/app/servers/role/handler/mailHandler.ts b/game-server/app/servers/role/handler/mailHandler.ts index e811fbb19..29a3d8d41 100644 --- a/game-server/app/servers/role/handler/mailHandler.ts +++ b/game-server/app/servers/role/handler/mailHandler.ts @@ -3,7 +3,7 @@ import { MailModel, MailType } from '../../../db/Mail'; import { GroupMailModel, GroupMailType } from '../../../db/GroupMail'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; -import { MAIL_STATUS, MAIL_TEM_TYPE, GM_MAIL_TYPE } from '../../../consts/constModules/mailConst'; +import { MAIL_STATUS, GM_MAIL_TYPE } from '../../../consts/constModules/mailConst'; import { addItems } from '../../../services/rewardService'; import { checkMailGoods, getMails } from '../../../services/mailService'; import { ServerMailModel, ServerMailType } from '../../../db/ServerMail'; diff --git a/game-server/app/services/mailService.ts b/game-server/app/services/mailService.ts index 31464ddcf..e4c12aee4 100644 --- a/game-server/app/services/mailService.ts +++ b/game-server/app/services/mailService.ts @@ -96,18 +96,18 @@ export class SendMailFun { // 从GMMail表读取数据 public async setWithGmMail(gmmailId: string) { - let gmmail = await GMMailModel.getGmMailById(gmmailId); - if(gmmail) { - this.gmmail = gmmail; - if(gmmail.useTempTime) { - this.sendTime = gmmail.sendTime; - this.endTime = gmmail.endTime; - } else { - this.sendTime = nowSeconds(); - this.endTime = this.sendTime + (gmmail.continueHour||0) * 60 * 60; - } - this.setParam({ ...gmmail }); - } + // let gmmail = await GMMailModel.getGmMailById(gmmailId); + // if(gmmail) { + // this.gmmail = gmmail; + // if(gmmail.useTempTime) { + // this.sendTime = gmmail.sendTime; + // this.endTime = gmmail.endTime; + // } else { + // this.sendTime = nowSeconds(); + // this.endTime = this.sendTime + (gmmail.continueHour||0) * 60 * 60; + // } + // this.setParam({ ...gmmail }); + // } } private setParam(params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[], content?: string }) { diff --git a/gm-server/app/controller/mail.ts b/gm-server/app/controller/mail.ts index 5e694e930..ca3d70611 100644 --- a/gm-server/app/controller/mail.ts +++ b/gm-server/app/controller/mail.ts @@ -1,5 +1,6 @@ import { Controller } from 'egg'; import { GM_MAIL_STATUS, GM_MAIL_TYPE, STATUS } from '@consts'; +import { UpdateMailParams } from '@domain/backEndField/params'; export default class MailController extends Controller { @@ -58,22 +59,25 @@ export default class MailController extends Controller { return } + public async findRoleByIdOrName() { + const { ctx } = this; + const { serverId, roleId, roleName }: { serverId: number, roleId?: string, roleName?: string } = ctx.request.body; + if(!serverId || (!roleId && !roleName)) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); + ctx.body = await ctx.service.mail.findRoleByIdOrName(serverId, roleId, roleName); + + return + } + public async updateGMMail() { const { ctx } = this; - const { _id, sendTime, endTime, useTempTime, continueHour, goods } = ctx.request.body; - if(!_id) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); - if(useTempTime) { - if(!sendTime || !endTime) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); - } else { - if(!continueHour) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); + const msg = ctx.request.body; + if(msg._id == 'new') { + let params = new UpdateMailParams(msg); + let check = params.checkParams(); + if(!check) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); + ctx.body = await ctx.service.mail.createGmMail(params); } - let updateGoods = []; - try{ - updateGoods = JSON.parse(goods); - } catch(e) { - return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); - } - ctx.body = await ctx.service.mail.updateGMMail(_id, updateGoods); + return } diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index b51304201..fffa2fbd9 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -103,6 +103,7 @@ export default (app: Application) => { router.post('/api/mail/getviewsinglemailtxt', controller.mail.getViewSingleMailTxt); router.post('/api/mail/getviewservermail', controller.mail.getViewServerMail); router.post('/api/mail/getviewservermailtxt', controller.mail.getViewServerMailTxt); + router.post('/api/mail/findrolebyidorname', controller.mail.findRoleByIdOrName); router.post('/api/mail/updategmmail', controller.mail.updateGMMail); router.post('/api/mail/getgmmailrecords', controller.mail.getGMMailRecords); }; diff --git a/gm-server/app/service/Game.ts b/gm-server/app/service/Game.ts index a3f15c683..2e8dd8de0 100644 --- a/gm-server/app/service/Game.ts +++ b/gm-server/app/service/Game.ts @@ -90,8 +90,8 @@ export default class Game extends Service { let marqueeResult = await MarqueeModel.createData({ ...marquee, serverIds: values.serverIds, type: MARQUEE_TYPE.SCHEDULE, isRunning: false }, ctx.user?.uid); let noticeResult = await NoticeModel.updateNotice('new', { ...notice, type: 1, sort: 1000, serverType: curEnv?.serverType, isEnable: false }, ctx.user?.uid); - let mailResult = await GMMailModel.addMail({ ...mail, }, ctx.user?.uid); - await MaintenanceModel.createData(values, marqueeResult, noticeResult, mailResult); + // let mailResult = await GMMailModel.addMail(mail, ctx.user?.uid); + await MaintenanceModel.createData(values, marqueeResult, noticeResult, null); } else { let maintenanceResult = await MaintenanceModel.updateData(values.code, values, ctx.user?.uid); if(!maintenanceResult) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); diff --git a/gm-server/app/service/Mail.ts b/gm-server/app/service/Mail.ts index b86b20028..6e4dd5614 100644 --- a/gm-server/app/service/Mail.ts +++ b/gm-server/app/service/Mail.ts @@ -1,10 +1,11 @@ import { Service } from 'egg'; -import { GMMailModel } from '@db/GMMail'; +import { GMMailModel, } from '@db/GMMail'; import { STATUS } from '@consts'; import { GMMailRecordModel } from '@db/GMMailRecord'; -import { RewardInter } from '@pubUtils/interface'; import { SearchMailParam } from '@domain/backEndField/search'; +import { UpdateMailParams } from '@domain/backEndField/params'; +import { RoleModel, RoleType } from '@db/Role'; export default class Mail extends Service { @@ -17,12 +18,32 @@ export default class Mail extends Service { }); } - public async updateGMMail(_id: string, goods: RewardInter[]) { + public async findRoleByIdOrName(serverId: number, roleId: string, roleName: string) { + let role: RoleType; + if(roleId) { + role = await RoleModel.findByRoleId(roleId); + } + if(roleName) { + role = await RoleModel.findByRoleName(roleName); + } + if(!role || role.serverId != serverId) return this.ctx.service.utils.resResult(STATUS.WRONG_PARMS); + return this.ctx.service.utils.resResult(STATUS.SUCCESS, { env: this.ctx.app.config.realEnv, serverId, roleId: role.roleId, roleName: role.roleName }) + + } + + public async createGmMail(params: UpdateMailParams) { const { ctx } = this; - if(_id == 'new') { - await GMMailModel.addMail({ goods }); + await GMMailModel.addMail(params); + + return ctx.service.utils.resResult(STATUS.SUCCESS); + } + + public async updateGMMail(isCreate: boolean, params: UpdateMailParams) { + const { ctx } = this; + if(isCreate) { + await GMMailModel.addMail(params); } else { - await GMMailModel.updateMailById(_id, { goods }); + // await GMMailModel.updateMailById(params._id, params); } return ctx.service.utils.resResult(STATUS.SUCCESS); } diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index ecb51babd..9d84648ad 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -4,7 +4,7 @@ import { COUNTER } from '../consts'; import { CounterModel } from './Counter'; import { HeroModel } from './Hero'; import { RoleModel } from './Role'; -import { SearchEquipParam } from '@domain/backEndField/search'; +import { SearchEquipParam } from '../domain/backEndField/search'; export class RandSe { @prop({ required: true }) diff --git a/shared/db/GMMail.ts b/shared/db/GMMail.ts index 7db3895a9..efd334cc5 100644 --- a/shared/db/GMMail.ts +++ b/shared/db/GMMail.ts @@ -5,7 +5,8 @@ import BaseModel from './BaseModel'; import { getModelForClass, prop, DocumentType, mongoose } from '@typegoose/typegoose'; import { nowSeconds } from '../pubUtils/timeUtil'; import { GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE } from '../consts'; -import { SearchMailParam } from '@domain/backEndField/search'; +import { SearchMailParam } from '../domain/backEndField/search'; +import { UpdateMailParams } from '../domain/backEndField/params'; class Reward { @prop({ required: true }) @@ -14,7 +15,7 @@ class Reward { count: number; } -class Receiver { +export class Receiver { @prop({ required: true }) env: string; @prop({ required: true }) @@ -66,9 +67,6 @@ export default class GMMail extends BaseModel { @prop({ required: true }) mailType: GM_MAIL_TYPE; // 收件人类型 - @prop({ required: true }) - env: string; // 大区环境变量 - @prop({ required: true, type: Receiver, _id: false }) receivers: Receiver[]; @@ -81,7 +79,8 @@ export default class GMMail extends BaseModel { @prop({ required: true }) status: GM_MAIL_STATUS; // 邮件状态 - public static async addMail(params: GMMailTypeParam, uid = 1) { + + public static async addMail(params: UpdateMailParams, uid = 1) { const doc = new GMMailModel(); let mail = Object.assign(doc.toJSON(), params); let result: GMMailType = await GMMailModel.findOneAndUpdate({ _id: mail._id }, { $set: {...mail, updatedBy: uid}, $setOnInsert: { createdBy: uid } }, {upsert: true, new: true}).lean(); diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 24b2e3515..4c428b7ec 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -362,12 +362,16 @@ export default class Role extends BaseModel { const role: RoleType = await RoleModel.findOne({ roleId }).select(select).lean({ getters, virtuals }); return role; } - public static async findByRoleIds(roleIds: string[], select?: string, getters = false, virtuals = true) { const role: RoleType[] = await RoleModel.find({ roleId: { $in: roleIds } }).select(select).lean({ getters, virtuals }); return role; } + public static async findByRoleName(roleName: string, select?: string, getters = false, virtuals = true) { + const role: RoleType = await RoleModel.findOne({ roleName }).select(select).lean({ getters, virtuals }); + return role; + } + public static async createRole(uid: number, serverId: number, roleInfo: { roleId: string; roleName: string; seqId: number; code: string, lv?: number, exp?: number }, lean = true) { const user = await User.findUserByUid(uid); if (!user) return null; diff --git a/shared/db/Serverlist.ts b/shared/db/Serverlist.ts index de33f3e68..f0ec201df 100644 --- a/shared/db/Serverlist.ts +++ b/shared/db/Serverlist.ts @@ -87,6 +87,11 @@ export default class Serverlist extends BaseModel { return server; } + public static async findByServerIds(serverIds: number[]) { + let servers: ServerlistType[] = await ServerlistModel.find({ id: { $in: serverIds } }).select('medianCe activityGroupId').lean({ getters: true, virtuals: true }); + return servers; + } + public static async updateByServerId(serverId: number, update: ServerlistUpdate) { let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $set: update }).lean({ getters: true, virtuals: true }); return server; diff --git a/shared/domain/backEndField/params.ts b/shared/domain/backEndField/params.ts new file mode 100644 index 000000000..e0ab86ad1 --- /dev/null +++ b/shared/domain/backEndField/params.ts @@ -0,0 +1,65 @@ +import { GM_MAIL_TYPE, MAIL_TIME_TYPE } from "../../consts"; +import { isArray } from 'underscore'; + +export class UpdateMailParams { + hasGoods: boolean = false; // 是否有道具 + goods: {id: number; count: number}[]; + timeType: MAIL_TIME_TYPE; // 邮件时间类型 + expire: number; // 有效时间,单位小时 + startTime: number; // 发送时间,延时邮件使用 + circleStart: number; // 循环邮件开始循环时间 + circleEnd: number; // 循环邮件结束循环时间 + circleDay: number; // 循环时间,每周几,0表示每天 + circleHour: string; // 几点发送 + title: string; + content: string; + sendName: string; + mailType: GM_MAIL_TYPE; // 收件人类型 + receivers: {env: string; serverId: number; roleId: string; roleName: string; }[]; + reason: string; // 原因 + isSp: boolean = false; // 特殊邮件 + isSingle: boolean; + + constructor(obj: UpdateMailParams) { + this.goods = obj.goods; + this.hasGoods = obj.goods?.length > 0; + this.timeType = obj.timeType; + this.expire = obj.expire; + this.startTime = obj.startTime; + this.circleStart = obj.circleStart; + this.circleEnd = obj.circleEnd; + this.circleDay = obj.circleDay; + this.circleHour = obj.circleHour; + this.title = obj.title; + this.content = obj.content; + this.sendName = obj.sendName; + if(obj.isSingle == true) { + this.mailType = GM_MAIL_TYPE.SINGLE; + } else if (obj.isSingle == false) { + this.mailType = GM_MAIL_TYPE.SERVER; + } + this.receivers = obj.receivers; + this.reason = obj.reason; + } + + checkParams() { + if(!this.title || !this.content || !this.sendName || !this.reason) return false; + if(this.timeType == MAIL_TIME_TYPE.IMMEDIATE) { + if(!this.expire) return false; + } else if (this.timeType == MAIL_TIME_TYPE.DELAY) { + if(!this.expire || !this.startTime) return false; + } else if (this.timeType == MAIL_TIME_TYPE.CIRCLE) { + if(!this.expire || !this.circleStart || !this.circleEnd || this.circleDay == undefined || !this.circleHour) + return false; + } + if(!this.receivers || !isArray(this.receivers)) return false; + if(!this.mailType) return false; + for(let { serverId, roleId, roleName } of this.receivers) { + if(!serverId) return false; + if(this.mailType == GM_MAIL_TYPE.SINGLE||this.mailType == GM_MAIL_TYPE.GROUP) { + if(!roleId || !roleName) return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/shared/domain/backEndField/search.ts b/shared/domain/backEndField/search.ts index 8eeff68cb..2cc308724 100644 --- a/shared/domain/backEndField/search.ts +++ b/shared/domain/backEndField/search.ts @@ -1,4 +1,4 @@ -import { GM_MAIL_STATUS, GM_MAIL_TYPE } from "@consts"; +import { GM_MAIL_STATUS, GM_MAIL_TYPE } from "../../consts"; export interface SearchUserParam { uid?: number; diff --git a/shared/domain/roleField/mail.ts b/shared/domain/roleField/mail.ts index 971494123..7975e9360 100644 --- a/shared/domain/roleField/mail.ts +++ b/shared/domain/roleField/mail.ts @@ -76,7 +76,8 @@ export class MailParam { } setContent(mail: MailType|GroupMailType|ServerMailType) { - let { contentId = 0, params, goods, sendName } = mail; + let { contentId = 0, goods, sendName } = mail; + let params = [] let dicMail = gameData.mail.get(contentId); if(!dicMail) dicMail = gameData.mail.get(0);