后台:获取邮件记录
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) {
|
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 { id, mailType, roleIds, serverIds } = msg;
|
||||||
let f = new SendMailFun();
|
let f = new SendMailFun();
|
||||||
await f.setWithGmMail(id);
|
await f.setWithGmMail(id);
|
||||||
@@ -93,6 +94,7 @@ export class GmHandler {
|
|||||||
} else {
|
} else {
|
||||||
await f.sendToServer(serverIds);
|
await f.sendToServer(serverIds);
|
||||||
}
|
}
|
||||||
|
await f.saveRecord(uid);
|
||||||
return resResult(STATUS.SUCCESS);
|
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 { MailParam } from '../domain/roleField/mail';
|
||||||
import { GMMailType, GMMailModel } from "../db/GMMail";
|
import { GMMailType, GMMailModel } from "../db/GMMail";
|
||||||
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
||||||
|
import { GMMailRecordModel } from "../db/GMMailRecord";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取邮件信息
|
* 获取邮件信息
|
||||||
@@ -69,6 +70,9 @@ export class SendMailFun {
|
|||||||
private sendTime: number;
|
private sendTime: number;
|
||||||
private endTime: number;
|
private endTime: number;
|
||||||
private notPush: boolean = false;
|
private notPush: boolean = false;
|
||||||
|
private mails: MailType[] = [];
|
||||||
|
private groupMails: GroupMailType[] = [];
|
||||||
|
private serverMails: ServerMailType[] = [];
|
||||||
|
|
||||||
// 从dicMail读取数据
|
// 从dicMail读取数据
|
||||||
public setWithContentId(contentId: MAIL_TYPE, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }) {
|
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>();
|
let mails = new Map<string, MailParam>();
|
||||||
for(let roleId of roleIds) {
|
for(let roleId of roleIds) {
|
||||||
let originMail = await MailModel.addMail({ roleId, ...this.getCreateMailParams() });
|
let originMail = await MailModel.addMail({ roleId, ...this.getCreateMailParams() });
|
||||||
|
this.mails.push(originMail);
|
||||||
let mail = new MailParam(this.mailType, originMail);
|
let mail = new MailParam(this.mailType, originMail);
|
||||||
mails.set(roleId, mail);
|
mails.set(roleId, mail);
|
||||||
}
|
}
|
||||||
@@ -139,6 +144,7 @@ export class SendMailFun {
|
|||||||
return { roleId, status: MAIL_STATUS.CREATE }
|
return { roleId, status: MAIL_STATUS.CREATE }
|
||||||
})
|
})
|
||||||
let originMail = await GroupMailModel.addMail({ roleStatus, ...this.getCreateMailParams() });
|
let originMail = await GroupMailModel.addMail({ roleStatus, ...this.getCreateMailParams() });
|
||||||
|
this.groupMails.push(originMail);
|
||||||
return new MailParam(this.mailType, originMail);
|
return new MailParam(this.mailType, originMail);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +154,7 @@ export class SendMailFun {
|
|||||||
for(let serverId of serverIds) {
|
for(let serverId of serverIds) {
|
||||||
let originMail = await ServerMailModel.addMail({ serverId, ...this.getCreateMailParams() });
|
let originMail = await ServerMailModel.addMail({ serverId, ...this.getCreateMailParams() });
|
||||||
mails.set(serverId, new MailParam(this.mailType, originMail));
|
mails.set(serverId, new MailParam(this.mailType, originMail));
|
||||||
|
this.serverMails.push(originMail);
|
||||||
}
|
}
|
||||||
return mails
|
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() {
|
public async updateGMMail() {
|
||||||
const { ctx } = this;
|
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(!_id) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
||||||
if(useTempTime) {
|
if(useTempTime) {
|
||||||
if(!sendTime || !endTime) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
if(!sendTime || !endTime) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
||||||
} else {
|
} else {
|
||||||
if(!continueHour) return ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
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
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,4 +75,5 @@ export default (app: Application) => {
|
|||||||
|
|
||||||
router.post('/api/mail/getgmmaillist', controller.mail.getGMMailList);
|
router.post('/api/mail/getgmmaillist', controller.mail.getGMMailList);
|
||||||
router.post('/api/mail/updategmmail', controller.mail.updateGMMail);
|
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 { Service } from 'egg';
|
||||||
import { GMMailModel } from '@db/GMMail';
|
import { GMMailModel } from '@db/GMMail';
|
||||||
import { STATUS } from '@consts';
|
import { STATUS } from '@consts';
|
||||||
|
import { GMMailRecordModel } from '@db/GMMailRecord';
|
||||||
|
import { RewardInter } from '@pubUtils/interface';
|
||||||
|
|
||||||
export default class Mail extends Service {
|
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;
|
const { ctx } = this;
|
||||||
if(_id == 'new') {
|
if(_id == 'new') {
|
||||||
await GMMailModel.addMail({ content, sendName, useTempTime, sendTime, endTime, continueHour });
|
await GMMailModel.addMail({ content, sendName, useTempTime, sendTime, endTime, continueHour, goods });
|
||||||
} else {
|
} 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);
|
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