后台:获取邮件记录

This commit is contained in:
luying
2021-06-30 14:05:34 +08:00
parent 730aeae370
commit 0d12af8ac6
6 changed files with 152 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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);
}
}
}

View File

@@ -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
}
}

View File

@@ -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);
};

View File

@@ -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
View 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>; // 将所有字段变成可选项