292 lines
7.5 KiB
JavaScript
292 lines
7.5 KiB
JavaScript
import {Router} from 'express'
|
|
import logger from '../../utils/logger'
|
|
import getCustomerReplayModel from '../../models/snoopy/CustomerReplay'
|
|
import RedisDao from '../../redis/redis.dao'
|
|
import getOpsToken from '../../utils/get-ops-token'
|
|
import config from '../../../config/config'
|
|
import axios from 'axios'
|
|
|
|
const router = new Router()
|
|
const redisDao = new RedisDao()
|
|
|
|
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
|
|
}
|
|
const query = req.query
|
|
const game_id = query.game_id
|
|
const currentPage = query.currentPage || 0
|
|
const pageSize = query.pageSize || 0
|
|
const start = (currentPage - 1) * pageSize
|
|
const limit = parseInt(pageSize)
|
|
const data_type = query.data_type
|
|
const CustomerReplayModel =
|
|
data_type === 'dev' ? CustomerReplayTest : CustomerReplay
|
|
|
|
delete req.query.data_type
|
|
|
|
try {
|
|
const records = await CustomerReplayModel.find({
|
|
game_id: game_id,
|
|
deleted: false,
|
|
})
|
|
.skip(start)
|
|
.limit(limit)
|
|
.sort({createdAt: 'desc'})
|
|
const total = await CustomerReplayModel.find({
|
|
game_id: game_id,
|
|
deleted: false,
|
|
}).countDocuments()
|
|
res.json({errcode: 0, errmsg: '', records: records, total: total})
|
|
} catch (err) {
|
|
logger.error(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 isDev = body.isDev
|
|
const CustomerReplayModel = isDev ? CustomerReplayTest : CustomerReplay
|
|
delete body.isDev
|
|
|
|
try {
|
|
const _id = body._id
|
|
const search = await CustomerReplayModel.findById(_id)
|
|
if (search) {
|
|
// 更新
|
|
const result = await CustomerReplayModel.updateOne({_id: _id}, body)
|
|
res.send({
|
|
errcode: 0,
|
|
result: result,
|
|
})
|
|
} else {
|
|
// 新建
|
|
const newReplay = CustomerReplayModel(body)
|
|
const result = await newReplay.save()
|
|
res.send({
|
|
errcode: 0,
|
|
result: result,
|
|
})
|
|
}
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
})
|
|
|
|
// 启用禁用奖励配置
|
|
router.put('/', 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 type = body.type // 启用: true 禁用 false
|
|
const isDev = body.isDev
|
|
const CustomerReplayModel = isDev ? CustomerReplayTest : CustomerReplay
|
|
delete body.isDev
|
|
|
|
try {
|
|
if (body.ids) {
|
|
const record = await CustomerReplayModel.where({
|
|
_id: {$in: body.ids},
|
|
})
|
|
.updateMany({actived: type})
|
|
.exec()
|
|
res.json({errcode: 0, errmsg: '', count: record.n})
|
|
} else {
|
|
res.json({errcode: 101, errmsg: '无有效奖励!'})
|
|
}
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
})
|
|
|
|
// 删除奖励配置
|
|
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
|
|
const isDev = body.isDev
|
|
const CustomerReplayModel = isDev ? CustomerReplayTest : CustomerReplay
|
|
delete body.isDev
|
|
|
|
try {
|
|
if (body.ids) {
|
|
const record = await CustomerReplayModel.where({_id: {$in: body.ids}})
|
|
.updateMany({
|
|
deleted: true,
|
|
delete_time: new Date(),
|
|
deletedBy: req.user.id,
|
|
})
|
|
.exec()
|
|
res.json({errcode: 0, errmsg: '', count: record.n})
|
|
} else {
|
|
res.json({errcode: 101, errmsg: '无有效奖励!'})
|
|
}
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
})
|
|
|
|
// 获取客服配置
|
|
router.get('/kefu-cfg', 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 {
|
|
const query = req.query
|
|
const key = `kefu:${query.game_id}:6001`
|
|
const result = await redisDao.getByKey(key)
|
|
res.send({
|
|
errcode: 0,
|
|
result: result,
|
|
})
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
})
|
|
|
|
// 发布客服配置
|
|
router.post('/kefu-cfg', 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
|
|
}
|
|
|
|
try {
|
|
const body = req.body
|
|
const token = await getOpsToken()
|
|
|
|
const kefuRes = await axios({
|
|
url: config.minigame.api + 'minigame/',
|
|
method: 'post',
|
|
data: {
|
|
action: 'config_deploy',
|
|
data: {
|
|
config: {
|
|
app_id: body.app_id,
|
|
app_secret: body.app_secret,
|
|
msg_key: body.msg_key,
|
|
img_url: body.img_url,
|
|
},
|
|
game_id: body.game_id,
|
|
platform: 'weixin',
|
|
kefu: true,
|
|
},
|
|
},
|
|
headers: {
|
|
authorization: 'Bearer ' + token,
|
|
},
|
|
})
|
|
const kefuStatus = kefuRes.status
|
|
|
|
if (kefuStatus === 200) {
|
|
const key = `kefu:${body.game_id}:6001`
|
|
// TODO: 迁移至正式服redis
|
|
await redisDao.updateOneKey(
|
|
key,
|
|
JSON.stringify({msg_key: body.msg_key, img_url: body.img_url})
|
|
)
|
|
|
|
res.send({
|
|
errcode: 0,
|
|
})
|
|
} else {
|
|
res.send({
|
|
errcode: 1,
|
|
errmsg: '发布客服配置时发生错误',
|
|
})
|
|
}
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
|
|
logger.db(req, '游戏管理', '客服奖励', '发布客服配置')
|
|
})
|
|
|
|
// 获取上传 Token
|
|
|
|
router.get('/ops-token', async (req, res, next) => {
|
|
try {
|
|
const token = await getOpsToken()
|
|
res.send({
|
|
errcode: 0,
|
|
result: token,
|
|
})
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
})
|
|
|
|
export default router
|