diff --git a/gm-server/app/controller/users.ts b/gm-server/app/controller/users.ts index b504acfdb..bb032d553 100644 --- a/gm-server/app/controller/users.ts +++ b/gm-server/app/controller/users.ts @@ -38,6 +38,12 @@ export default class UserController extends Controller { ctx.body = await ctx.service.users.getrolelist(page, pageSize, sortField, sortOrder, form); } + public async getpaystatic() { + const { ctx } = this; + const { page = 1, pageSize = 10, form } = ctx.request.body; + ctx.body = await ctx.service.users.getpaystatic(page, pageSize, form); + } + public async setWar() { const { ctx } = this; const { roleId, warId } = ctx.request.body; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index ec694274a..67b21758c 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -25,6 +25,7 @@ export default (app: Application) => { router.post('/api/users/getuserlist', tokenParser,controller.users.getuserlist); router.post('/api/users/fixsms', tokenParser, controller.users.fixSms); router.post('/api/users/getrolelist', tokenParser,controller.users.getrolelist); + router.post('/api/users/getpaystatic', controller.users.getpaystatic); router.post('/api/users/deleterole', tokenParser,controller.users.deleteRole); router.post('/api/users/setwar', tokenParser, controller.users.setWar); router.post('/api/users/setcreatetime', tokenParser, controller.users.setCreateTime); diff --git a/gm-server/app/service/users.ts b/gm-server/app/service/users.ts index bfbcd748d..6207dfd5e 100644 --- a/gm-server/app/service/users.ts +++ b/gm-server/app/service/users.ts @@ -13,7 +13,7 @@ import GiftCodeDetail, { GiftCodeDetailModel } from '@db/GiftCodeDetail'; import { deletRole } from '@pubUtils/roleUtil'; import { RScriptRecordModel } from '@db/RScriptRecord'; import { DicWar } from '@pubUtils/dictionary/DicWar'; -import { SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam } from '@domain/backEndField/search'; +import { SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam, SearchRoleParam } from '@domain/backEndField/search'; import { CreateGiftCode, UpdateGiftCode } from '@domain/backEndField/params'; import { isNumber } from 'util'; import { GuildModel } from '@db/Guild'; @@ -23,6 +23,7 @@ import { TowerRecordModel } from '@db/TowerRecord'; import { nowSeconds } from '@pubUtils/timeUtil'; import { RoleCeModel, RoleCeType } from '@db/RoleCe'; import { HangUpRecordModel } from '@db/HangUpRecord'; +import { UserOrderModel } from '@db/UserOrder'; const Excel = require('exceljs'); // import { resResult } from '@pubUtils/util'; @@ -121,9 +122,17 @@ export default class GMUsers extends Service { /** * 根据类型等搜索玩家 */ - public async getrolelist(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchUserParam) { + public async getrolelist(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchRoleParam) { const { ctx } = this; + if(!!form.channelId) { + let user = await UserModel.findUserByChannelRegex(form.channelId); + if(!user) { + return ctx.service.utils.resResult(STATUS.SUCCESS, { list: [], total: 0 }); + } + form.uid = user.uid; + } + const roles = await RoleModel.findByCondition(page, pageSize, sortField, sortOrder, form); const total = await RoleModel.countByCondition( form ) @@ -132,10 +141,12 @@ export default class GMUsers extends Service { let heroCount = await HeroModel.count({ roleId: role.roleId }).lean(); let itemCount = await ItemModel.count({ roleId: role.roleId }).lean(); - let { roleId, roleName, serverId, lv, gold, coin, ce, blockType = 0, blockReason = '', fixedIpLocation, ipLocation } = role; + let { roleId, roleName, serverId, lv, gold, coin, ce, blockType = 0, blockReason = '', fixedIpLocation, ip, ipLocation, totalPay } = role; let { uid, tel } = role.userInfo; + let user = await UserModel.findUserByUid(role.userInfo.uid); + list.push({ - key: roleId, roleId, roleName, serverId, lv, uid, tel, heroCount, itemCount, gold, coin, ce, blockType, blockReason, fixedIpLocation, ipLocation, + key: roleId, roleId, roleName, serverId, lv, uid, tel, heroCount, itemCount, gold, coin, ce, blockType, blockReason, fixedIpLocation, ip, ipLocation, channelId: user?.channelId, totalPay, channelType: user?.channelType, env: ctx.app.config.realEnv }); } @@ -143,6 +154,30 @@ export default class GMUsers extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total }) } + public async getpaystatic(page: number, pageSize: number, form: { beginTime: number, endTime: number, serverId: number }) { + const { ctx } = this; + let match = {}; + if(form.beginTime && form.endTime) { + match['beginTime'] = { $gt: new Date(form.beginTime) }; + match['endTime'] = { $lt: new Date(form.endTime) }; + } + if(form.serverId) { + match['serverId'] = form.serverId; + } + console.log(match) + let list = await UserOrderModel.aggregate([ + { $match: match }, + { $group: { '_id': '$roleId', sum: { '$sum': '$price' }, count: { '$sum': 1 }, max: { $max:'$price'}, lastTime: { $max: '$updatedAt' } } }, + { $lookup: { from: 'roles', localField: '_id', foreignField: 'roleId', as: 'role' } }, + { $unwind: '$role' }, + { $project: { _id: 0, roleId: '$_id', roleName: '$role.roleName', guildName: '$role.guildName', serverId: '$role.serverId', lv: '$role.lv', sum: 1, count: 1, max: 1, lastTime: {$dateToString: {format: '%Y-%m-%d %H:%M:%S', date:{$add:['$lastTime',28800000]}}}, env: ctx.app.config.realEnv } }, + { $sort: { 'sum': -1 } }, + { $limit: pageSize }, + { $skip: (page - 1) * pageSize }, + ]) + return ctx.service.utils.resResult(STATUS.SUCCESS, { list }) + } + // public async createHero(uids: Array, _hid: string, _hlv: string) { // const { ctx } = this; // console.log('gm createHero', uids, _hid, _hlv); diff --git a/gm-server/typings/config/plugin.d.ts b/gm-server/typings/config/plugin.d.ts index 39c01f0fb..d789dcfce 100644 --- a/gm-server/typings/config/plugin.d.ts +++ b/gm-server/typings/config/plugin.d.ts @@ -31,5 +31,6 @@ declare module 'egg' { jsonp?: EggPluginItem; view?: EggPluginItem; cors?: EggPluginItem; + xtransit?: EggPluginItem; } } \ No newline at end of file diff --git a/shared/db/User.ts b/shared/db/User.ts index 4693af1a1..4db791aba 100644 --- a/shared/db/User.ts +++ b/shared/db/User.ts @@ -249,6 +249,11 @@ export default class User extends BaseModel { return user; } + public static async findUserByChannelRegex(channelId: string) { + const user: UserType = await UserModel.findOne({ channelId: { $regex: new RegExp(channelId.toString(), 'i') } }).select('uid token serverType auth tel userCode pkgName ip deviceId').lean({ getters: true }); + return user; + } + public static async findTokenByTel(tel: string) { const user: UserType = await UserModel.findOne({ tel }).lean(); return user ? user.token : null; diff --git a/shared/domain/backEndField/search.ts b/shared/domain/backEndField/search.ts index 61e7465fd..e68895c2c 100644 --- a/shared/domain/backEndField/search.ts +++ b/shared/domain/backEndField/search.ts @@ -11,6 +11,7 @@ export interface SearchRoleParam { roleId?: string; // 角色id roleName?: string; // 昵称 tel?: string; + channelId?: string; } export interface SearchHeroParam {