后台:获取邮件记录
This commit is contained in:
@@ -85,6 +85,7 @@ export class GmHandler {
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -93,6 +94,7 @@ export class GmHandler {
|
||||
} else {
|
||||
await f.sendToServer(serverIds);
|
||||
}
|
||||
await f.saveRecord(uid);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import { GM_MAIL_TYPE, MAIL_STATUS, MAIL_TYPE, SEND_NAME } from "../consts";
|
||||
import { MailParam } from '../domain/roleField/mail';
|
||||
import { GMMailType, GMMailModel } from "../db/GMMail";
|
||||
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
||||
import { GMMailRecordModel } from "../db/GMMailRecord";
|
||||
|
||||
/**
|
||||
* 获取邮件信息
|
||||
@@ -69,6 +70,9 @@ export class SendMailFun {
|
||||
private sendTime: number;
|
||||
private endTime: number;
|
||||
private notPush: boolean = false;
|
||||
private mails: MailType[] = [];
|
||||
private groupMails: GroupMailType[] = [];
|
||||
private serverMails: ServerMailType[] = [];
|
||||
|
||||
// 从dicMail读取数据
|
||||
public setWithContentId(contentId: MAIL_TYPE, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }) {
|
||||
@@ -126,6 +130,7 @@ export class SendMailFun {
|
||||
let mails = new Map<string, MailParam>();
|
||||
for(let roleId of roleIds) {
|
||||
let originMail = await MailModel.addMail({ roleId, ...this.getCreateMailParams() });
|
||||
this.mails.push(originMail);
|
||||
let mail = new MailParam(this.mailType, originMail);
|
||||
mails.set(roleId, mail);
|
||||
}
|
||||
@@ -139,6 +144,7 @@ export class SendMailFun {
|
||||
return { roleId, status: MAIL_STATUS.CREATE }
|
||||
})
|
||||
let originMail = await GroupMailModel.addMail({ roleStatus, ...this.getCreateMailParams() });
|
||||
this.groupMails.push(originMail);
|
||||
return new MailParam(this.mailType, originMail);
|
||||
}
|
||||
|
||||
@@ -148,6 +154,7 @@ export class SendMailFun {
|
||||
for(let serverId of serverIds) {
|
||||
let originMail = await ServerMailModel.addMail({ serverId, ...this.getCreateMailParams() });
|
||||
mails.set(serverId, new MailParam(this.mailType, originMail));
|
||||
this.serverMails.push(originMail);
|
||||
}
|
||||
return mails
|
||||
}
|
||||
@@ -206,4 +213,16 @@ export class SendMailFun {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async saveRecord(createUid: number) {
|
||||
for(let mail of this.mails) {
|
||||
await GMMailRecordModel.createRecord(GM_MAIL_TYPE.SINGLE, mail, createUid);
|
||||
}
|
||||
for(let mail of this.groupMails) {
|
||||
await GMMailRecordModel.createRecord(GM_MAIL_TYPE.GROUP, mail, createUid);
|
||||
}
|
||||
for(let mail of this.serverMails) {
|
||||
await GMMailRecordModel.createRecord(GM_MAIL_TYPE.SERVER, mail, createUid);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,14 +11,27 @@ export default class MailController extends Controller {
|
||||
|
||||
public async updateGMMail() {
|
||||
const { ctx } = this;
|
||||
const { _id, content, sendName, sendTime, endTime, useTempTime, continueHour } = ctx.request.body;
|
||||
const { _id, content, sendName, 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);
|
||||
}
|
||||
ctx.body = await ctx.service.mail.updateGMMail(_id, content, sendName, useTempTime, sendTime, endTime, continueHour);
|
||||
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, content, sendName, useTempTime, sendTime, endTime, continueHour, updateGoods);
|
||||
return
|
||||
}
|
||||
|
||||
public async getGMMailRecords() {
|
||||
const { ctx } = this;
|
||||
const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
|
||||
ctx.body = await ctx.service.mail.getGMMailRecords(page, pageSize, sortField, sortOrder, form);
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,4 +75,5 @@ export default (app: Application) => {
|
||||
|
||||
router.post('/api/mail/getgmmaillist', controller.mail.getGMMailList);
|
||||
router.post('/api/mail/updategmmail', controller.mail.updateGMMail);
|
||||
router.post('/api/mail/getgmmailrecords', controller.mail.getGMMailRecords);
|
||||
};
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
import { Service } from 'egg';
|
||||
import { GMMailModel } from '@db/GMMail';
|
||||
import { STATUS } from '@consts';
|
||||
import { GMMailRecordModel } from '@db/GMMailRecord';
|
||||
import { RewardInter } from '@pubUtils/interface';
|
||||
|
||||
export default class Mail extends Service {
|
||||
|
||||
@@ -14,13 +16,21 @@ export default class Mail extends Service {
|
||||
});
|
||||
}
|
||||
|
||||
public async updateGMMail(_id: string, content: string, sendName: string, useTempTime: boolean, sendTime: number, endTime: number, continueHour: number) {
|
||||
public async updateGMMail(_id: string, content: string, sendName: string, useTempTime: boolean, sendTime: number, endTime: number, continueHour: number, goods: RewardInter[]) {
|
||||
const { ctx } = this;
|
||||
if(_id == 'new') {
|
||||
await GMMailModel.addMail({ content, sendName, useTempTime, sendTime, endTime, continueHour });
|
||||
await GMMailModel.addMail({ content, sendName, useTempTime, sendTime, endTime, continueHour, goods });
|
||||
} else {
|
||||
await GMMailModel.updateMailById(_id, { content, sendName, useTempTime, sendTime, endTime, continueHour });
|
||||
await GMMailModel.updateMailById(_id, { content, sendName, useTempTime, sendTime, endTime, continueHour, goods });
|
||||
}
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
public async getGMMailRecords(page: number, pageSize: number, sortField: string, sortOrder: string, form: {}) {
|
||||
const { ctx } = this;
|
||||
const list = await GMMailRecordModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
list
|
||||
});
|
||||
}
|
||||
}
|
||||
102
shared/db/GMMailRecord.ts
Normal file
102
shared/db/GMMailRecord.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { MailType } from './Mail';
|
||||
import { GroupMailType } from './GroupMail';
|
||||
import { ServerMailType } from './ServerMail';
|
||||
import { GM_MAIL_TYPE } from '../consts';
|
||||
import { MailParam } from '../domain/roleField/mail';
|
||||
|
||||
class Reward {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
count: number;
|
||||
}
|
||||
|
||||
@index({ roleId: 1 })
|
||||
|
||||
export default class GMMailRecord extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
content: string; // 内容
|
||||
|
||||
@prop({ required: true })
|
||||
sendName: string; // 发件人
|
||||
|
||||
@prop({ required: true })
|
||||
sendTime: number; // 发送时间
|
||||
|
||||
@prop({ required: true })
|
||||
endTime: number; // 过期时间
|
||||
|
||||
@prop({ required: true, type: Reward })
|
||||
goods: Reward[]; // 奖励
|
||||
|
||||
@prop({ required: true, enum: GM_MAIL_TYPE })
|
||||
mailType: GM_MAIL_TYPE;
|
||||
|
||||
@prop({ required: true })
|
||||
roleIds: string[];
|
||||
|
||||
@prop({ required: true })
|
||||
serverIds: number[];
|
||||
|
||||
@prop({ required: true })
|
||||
mailId: string;
|
||||
|
||||
/**
|
||||
* @description 创建记录
|
||||
* @param mailType 邮件类型
|
||||
* @param mail 邮件
|
||||
* @param uid 操作人
|
||||
*/
|
||||
public static async createRecord(mailType: GM_MAIL_TYPE, mail: MailType|GroupMailType|ServerMailType, uid = 1) {
|
||||
const doc = new GMMailRecordModel();
|
||||
let params = new MailParam(mailType, mail);
|
||||
let roleIds: string[] = [], serverIds: number[] = [];
|
||||
if(mailType == GM_MAIL_TYPE.SINGLE) {
|
||||
roleIds.push((<MailType>mail).roleId);
|
||||
} else if (mailType == GM_MAIL_TYPE.GROUP) {
|
||||
let roleStatus = (<GroupMailType>mail).roleStatus;
|
||||
for(let {roleId} of roleStatus) {
|
||||
roleIds.push(roleId);
|
||||
}
|
||||
} else if (mailType == GM_MAIL_TYPE.SERVER) {
|
||||
serverIds.push((<ServerMailType>mail).serverId)
|
||||
}
|
||||
const update = Object.assign(doc.toJSON(), params, { roleIds, serverIds, mailId: mail._id, createdBy: uid, updatedBy: uid });
|
||||
delete update._id;
|
||||
let rec: MailType = await GMMailRecordModel.findByIdAndUpdate(doc._id, update, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
// private static getSearchObj(form: {_id?: string, content?: string}) {
|
||||
// let searchObj = {};
|
||||
// if(form['_id']) searchObj['_id'] = form._id;
|
||||
// if(form['content']) searchObj['context'] = { $regex: new RegExp(form.content.toString(), 'i') }
|
||||
// return searchObj
|
||||
// }
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, form: {} = {}) {
|
||||
|
||||
let searchObj = form;
|
||||
let sort = {};
|
||||
if(sortField && sortOrder) {
|
||||
if(sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
const result: GMMailRecordType[] = await GMMailRecordModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const GMMailRecordModel = getModelForClass(GMMailRecord);
|
||||
|
||||
export interface GMMailRecordType extends Pick<DocumentType<GMMailRecord>, keyof GMMailRecord> { };
|
||||
export type GMMailRecordParam = Partial<GMMailRecordType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user