增加邮件相关功能
This commit is contained in:
parent
625d15c0c9
commit
b61a2d76b5
@ -10,6 +10,7 @@ import itemRouter from './item';
|
|||||||
import dataRouter from './data';
|
import dataRouter from './data';
|
||||||
import giftRouter from './gift';
|
import giftRouter from './gift';
|
||||||
import orderRouter from './order';
|
import orderRouter from './order';
|
||||||
|
import mailRouter from './mail';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -29,6 +30,7 @@ router.use('/item', itemRouter);
|
|||||||
router.use('/data', dataRouter);
|
router.use('/data', dataRouter);
|
||||||
router.use('/gift', giftRouter);
|
router.use('/gift', giftRouter);
|
||||||
router.use('/order', orderRouter);
|
router.use('/order', orderRouter);
|
||||||
|
router.use('/mail', mailRouter);
|
||||||
router.use('/', gamesRouter);
|
router.use('/', gamesRouter);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
144
src/controllers/games/mail.js
Normal file
144
src/controllers/games/mail.js
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
import {Router} from 'express'
|
||||||
|
import logger from '../../utils/logger'
|
||||||
|
import getCustomerReplayModel from '../../models/snoopy/CustomerReplay'
|
||||||
|
import gameSvrUtil from "../../utils/gamesvr.utils";
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
const router = new Router()
|
||||||
|
|
||||||
|
const CustomerReplay = getCustomerReplayModel()
|
||||||
|
const CustomerReplayTest = getCustomerReplayModel('test')
|
||||||
|
|
||||||
|
// 获取邮件列表
|
||||||
|
router.get('/', async (req, res, next) => {
|
||||||
|
// 权限判断
|
||||||
|
const hasPerm =
|
||||||
|
req.user.permissions.includes(`${req.query.uid}-readable`) ||
|
||||||
|
req.user.permissions.includes(`${req.query.uid}-edit`) ||
|
||||||
|
req.user.permissions.includes(`${req.query.uid}-publish`) ||
|
||||||
|
req.user.permissions.includes(`games-writeable`)
|
||||||
|
if (!hasPerm) {
|
||||||
|
res.status(403).send({
|
||||||
|
errcode: 1,
|
||||||
|
errmsg: '用户无此游戏邮件列表查看权限!',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let gameId = req.query.gameid;
|
||||||
|
const result = await gameSvrUtil.queryMailList(gameId, req.query.isDev);
|
||||||
|
if (result.errcode === 0 && result.maillist && result.maillist.length > 0) {
|
||||||
|
const itemIdArr = [];
|
||||||
|
for (const record of result.maillist) {
|
||||||
|
record.sendtime = moment(record.sendtime, "X").format(
|
||||||
|
"YYYY-MM-DD HH:mm"
|
||||||
|
);
|
||||||
|
record.expiretime = moment(record.expiretime, "X").format(
|
||||||
|
"YYYY-MM-DD HH:mm"
|
||||||
|
);
|
||||||
|
if (record.attachments && record.attachments.length > 0) {
|
||||||
|
for (const a of record.attachments) {
|
||||||
|
itemIdArr.push(a.itemid);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
record.attachments = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.json(result);
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 发送邮件
|
||||||
|
router.post('/', async (req, res, next) => {
|
||||||
|
// 权限判断
|
||||||
|
const hasPerm =
|
||||||
|
req.user.permissions.includes(`${req.body.uid}-edit`) ||
|
||||||
|
req.user.permissions.includes(`${req.body.uid}-publish`) ||
|
||||||
|
req.user.permissions.includes(`games-writeable`)
|
||||||
|
if (!hasPerm) {
|
||||||
|
res.status(403).send({
|
||||||
|
errcode: 1,
|
||||||
|
errmsg: '用户无此游戏邮件编辑权限!',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.db(req, '游戏管理', '客服邮件', '发送邮件')
|
||||||
|
|
||||||
|
const body = req.body
|
||||||
|
const data = body.data;
|
||||||
|
data.sendtime = moment(data.sendtime).unix();
|
||||||
|
data.expiretime = moment(data.expiretime).unix();
|
||||||
|
if (data.attachments && data.attachments.length > 0) {
|
||||||
|
let str = "";
|
||||||
|
for (const [index, item] of data.attachments.entries()) {
|
||||||
|
if (index > 0) str += "|";
|
||||||
|
str += `${item.itemid}:${item.itemnum}`;
|
||||||
|
}
|
||||||
|
data.attachments = str;
|
||||||
|
if (data.attachmentStr) {
|
||||||
|
delete data.attachmentStr;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data.attachments = "";
|
||||||
|
}
|
||||||
|
if (!data.ext) {
|
||||||
|
data.ext = "";
|
||||||
|
}
|
||||||
|
if (data.mailtype === 2) {
|
||||||
|
delete data.to;
|
||||||
|
}
|
||||||
|
let result = {};
|
||||||
|
if (data.mailid) {
|
||||||
|
result = await gameSvrUtil.updateMail(data, req.body.isDev);
|
||||||
|
} else {
|
||||||
|
result = await gameSvrUtil.sendMail(data, req.body.isDev);
|
||||||
|
}
|
||||||
|
res.json(result);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// 删除邮件配置
|
||||||
|
router.delete('/', async (req, res, next) => {
|
||||||
|
// 权限判断
|
||||||
|
const hasPerm =
|
||||||
|
req.user.permissions.includes(`${req.body.uid}-edit`) ||
|
||||||
|
req.user.permissions.includes(`${req.body.uid}-publish`) ||
|
||||||
|
req.user.permissions.includes(`games-writeable`)
|
||||||
|
if (!hasPerm) {
|
||||||
|
res.status(403).send({
|
||||||
|
errcode: 1,
|
||||||
|
errmsg: '用户无此游戏邮件编辑权限!',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.db(req, '游戏管理', '客服邮件', '删除客服邮件')
|
||||||
|
const body = req.body
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (body.ids) {
|
||||||
|
let count = 0;
|
||||||
|
let errcount = 0;
|
||||||
|
for (let id of body.ids) {
|
||||||
|
let result = await gameSvrUtil.deleteMail({gameid: body.gameid, mailid: id}, req.body.isDev);
|
||||||
|
if (result.errcode == 0) {
|
||||||
|
count ++;
|
||||||
|
} else {
|
||||||
|
errcount ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.json({errcode: 0, errmsg: '', count: count, errcount: errcount});
|
||||||
|
} else {
|
||||||
|
res.json({errcode: 101, errmsg: '无有效邮件!'})
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default router
|
@ -1,7 +1,12 @@
|
|||||||
import request from "request";
|
import request from "request";
|
||||||
import Promise from "bluebird";
|
import Promise from "bluebird";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
|
import stringUtil from './string.utils';
|
||||||
|
|
||||||
|
const getMailSvr = function (isDev) {
|
||||||
|
isDev = stringUtil.isTrue(isDev);
|
||||||
|
return `https://gamemail${isDev ? '-test' : ''}.kingsome.cn/webapp/index.php`;
|
||||||
|
}
|
||||||
const requestData = function(options) {
|
const requestData = function(options) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
request(options, (err, response, body) => {
|
request(options, (err, response, body) => {
|
||||||
@ -9,6 +14,7 @@ const requestData = function(options) {
|
|||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
if (response && response.statusCode === 200) {
|
if (response && response.statusCode === 200) {
|
||||||
|
// console.log('server response: ', response);
|
||||||
const data = JSON.parse(body);
|
const data = JSON.parse(body);
|
||||||
if (data.errcode) {
|
if (data.errcode) {
|
||||||
return reject(new Error(data.errmsg));
|
return reject(new Error(data.errmsg));
|
||||||
@ -29,271 +35,48 @@ const requestData = function(options) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
export default {
|
export default {
|
||||||
queryScrollList(svr) {
|
|
||||||
const qs = {
|
|
||||||
c: "RollMsg",
|
|
||||||
a: "getMsgList"
|
|
||||||
};
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: qs,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
updateScroll(svr, data) {
|
|
||||||
data.c = "RollMsg";
|
|
||||||
data.a = "updateMsg";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
addScroll(svr, data) {
|
|
||||||
data.c = "RollMsg";
|
|
||||||
data.a = "addMsg";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
deleteScroll(svr, msgid) {
|
|
||||||
const qs = {
|
|
||||||
c: "RollMsg",
|
|
||||||
a: "removeMsg",
|
|
||||||
msgid: msgid
|
|
||||||
};
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: qs,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
/* begin of mail*/
|
/* begin of mail*/
|
||||||
queryMailList(svr) {
|
queryMailList(gameId, isDev) {
|
||||||
const qs = {
|
const qs = {
|
||||||
c: "Mail",
|
c: "MailMgr",
|
||||||
a: "getMailList"
|
a: "getMailList",
|
||||||
|
gameid: gameId
|
||||||
};
|
};
|
||||||
const options = {
|
const options = {
|
||||||
url: svr,
|
url: getMailSvr(isDev),
|
||||||
qs: qs,
|
qs: qs,
|
||||||
headers: { "cache-control": "no-cache" }
|
headers: { "cache-control": "no-cache" }
|
||||||
};
|
};
|
||||||
return requestData(options);
|
return requestData(options);
|
||||||
},
|
},
|
||||||
updateMail(svr, data) {
|
sendMail(data, isDev) {
|
||||||
data.c = "Mail";
|
data.c = "MailMgr";
|
||||||
|
data.a = "sendMail";
|
||||||
|
const options = {
|
||||||
|
url: getMailSvr(isDev),
|
||||||
|
qs: data,
|
||||||
|
headers: { "cache-control": "no-cache" }
|
||||||
|
};
|
||||||
|
return requestData(options);
|
||||||
|
},
|
||||||
|
updateMail(data, isDev) {
|
||||||
|
data.c = "MailMgr";
|
||||||
data.a = "updateMail";
|
data.a = "updateMail";
|
||||||
const options = {
|
const options = {
|
||||||
url: svr,
|
url: getMailSvr(isDev),
|
||||||
qs: data,
|
qs: data,
|
||||||
headers: { "cache-control": "no-cache" }
|
headers: { "cache-control": "no-cache" }
|
||||||
};
|
};
|
||||||
return requestData(options);
|
return requestData(options);
|
||||||
},
|
},
|
||||||
addMail(svr, data) {
|
deleteMail(data, isDev) {
|
||||||
data.c = "Mail";
|
data.c = "MailMgr";
|
||||||
data.a = "addMail";
|
data.a = "deleteMail";
|
||||||
const options = {
|
const options = {
|
||||||
url: svr,
|
url: getMailSvr(isDev),
|
||||||
qs: data,
|
qs: data,
|
||||||
headers: { "cache-control": "no-cache" }
|
headers: { "cache-control": "no-cache" }
|
||||||
};
|
};
|
||||||
return requestData(options);
|
return requestData(options);
|
||||||
},
|
},
|
||||||
deleteMail(svr, mailid) {
|
|
||||||
const qs = {
|
|
||||||
c: "Mail",
|
|
||||||
a: "deleteMail",
|
|
||||||
mailid: mailid
|
|
||||||
};
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: qs,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
getItemNames(svr, itemIdArr) {
|
|
||||||
const itemIdStr = itemIdArr.join(",");
|
|
||||||
const qs = {
|
|
||||||
c: "Item",
|
|
||||||
a: "getItemsInfo",
|
|
||||||
item_ids: itemIdStr
|
|
||||||
};
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: qs,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
searchItem(svr, { itemId, itemName, start, limit }) {
|
|
||||||
const qs = {
|
|
||||||
c: "Item",
|
|
||||||
a: "searchItem",
|
|
||||||
start: start,
|
|
||||||
limit: limit
|
|
||||||
};
|
|
||||||
if (itemId) qs.item_id = itemId;
|
|
||||||
if (itemName) qs.item_name = itemName;
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: qs,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
/* end of mail*/
|
|
||||||
/* begin of activity*/
|
|
||||||
queryActivityList(svr) {
|
|
||||||
const qs = {
|
|
||||||
c: "Activity",
|
|
||||||
a: "getActivityList"
|
|
||||||
};
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: qs,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
updateActivity(svr, data) {
|
|
||||||
data.c = "Activity";
|
|
||||||
data.a = "updateActivity";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
/* end of activity*/
|
|
||||||
|
|
||||||
/* begin of recharge*/
|
|
||||||
queryRechargeList(svr, data) {
|
|
||||||
data.c = "GMTool";
|
|
||||||
data.a = "execSql";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
addRecharge(svr, data) {
|
|
||||||
data.c = "GMTool";
|
|
||||||
data.a = "addVirtualOrder";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
|
|
||||||
/* end of recharge*/
|
|
||||||
|
|
||||||
/* begin of users*/
|
|
||||||
queryUsersList(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "searchUser";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
updateUser(svr, data) {
|
|
||||||
data.c = "Item";
|
|
||||||
data.a = "searchUser";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
// deleteUser(svr, accountid) {
|
|
||||||
// const qs = {
|
|
||||||
// accountid: accountid
|
|
||||||
// };
|
|
||||||
// const options = {
|
|
||||||
// url: svr,
|
|
||||||
// qs: qs,
|
|
||||||
// headers: { "cache-control": "no-cache" }
|
|
||||||
// };
|
|
||||||
// return requestData(options);
|
|
||||||
// },
|
|
||||||
shutupUser(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "forbidSpeak";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
forbidUser(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "forbidAccount";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
disforbidUser(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "disforbidAccount";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
disforbidSpeak(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "forbidSpeak";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
queryForbid(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "searchForbidAccount";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
queryShutup(svr, data) {
|
|
||||||
data.c = "User";
|
|
||||||
data.a = "searchForbidSpeak";
|
|
||||||
const options = {
|
|
||||||
url: svr,
|
|
||||||
qs: data,
|
|
||||||
headers: { "cache-control": "no-cache" }
|
|
||||||
};
|
|
||||||
return requestData(options);
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/* end of users*/
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user