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