|
@@ -18,7 +18,7 @@ import {
|
|
|
import {PaymentHelper} from "../utils/PaymentHelper";
|
|
import {PaymentHelper} from "../utils/PaymentHelper";
|
|
|
import {SignatureVerifier} from "../utils/SignatureVerifier";
|
|
import {SignatureVerifier} from "../utils/SignatureVerifier";
|
|
|
import {ChannelConfigManager} from "../utils/ChannelConfigManager";
|
|
import {ChannelConfigManager} from "../utils/ChannelConfigManager";
|
|
|
-import {getRoleInfoByUidAndServerId} from "../mongo/mongodb";
|
|
|
|
|
|
|
+import {getRoleInfoByUidAndServerId, getRoleListByUserId} from "../mongo/mongodb";
|
|
|
import {min} from "moment-timezone";
|
|
import {min} from "moment-timezone";
|
|
|
|
|
|
|
|
// platform内存缓存,key: ip:device_no,TTL 5分钟
|
|
// platform内存缓存,key: ip:device_no,TTL 5分钟
|
|
@@ -1617,7 +1617,61 @@ class ApiController {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 通过 userId 查询该账号在各区服的角色列表
|
|
|
|
|
+ * 请求参数(GET/POST 均可):uid、channel_id
|
|
|
|
|
+ * 返回:[{ roleId, roleName, zhandouli, serverName, serverId, createTime }]
|
|
|
|
|
+ */
|
|
|
|
|
+ async getUserRoleList(ctx) {
|
|
|
|
|
+ const uid = ctx.query.uid || ctx.request.body?.uid;
|
|
|
|
|
+ const tag = ctx.query.channel_id || ctx.request.body?.channel_id || 1;
|
|
|
|
|
+
|
|
|
|
|
+ logger.info('getUserRoleList 请求参数:', {uid, tag});
|
|
|
|
|
+
|
|
|
|
|
+ if (!uid) {
|
|
|
|
|
+ ctx.body = ApiController.fail('uid 不能为空', -1);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 查询该用户进入过的所有区服(join game_server 取 db_name 和区服名)
|
|
|
|
|
+ const enterServerList: any[] = await Server.getEnterServerListByUid(uid, tag);
|
|
|
|
|
+
|
|
|
|
|
+ logger.info('getUserRoleList enterServerList:', {
|
|
|
|
|
+ count: enterServerList?.length,
|
|
|
|
|
+ first: enterServerList?.[0] ? {
|
|
|
|
|
+ server_id: enterServerList[0].server_id,
|
|
|
|
|
+ db_name: enterServerList[0].db_name,
|
|
|
|
|
+ name: enterServerList[0].name,
|
|
|
|
|
+ } : null,
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
|
|
+ if (!enterServerList || enterServerList.length === 0) {
|
|
|
|
|
+ ctx.body = ApiController.success('请求成功', 1, false, []);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 去重(同一 server_id 可能有多条进区记录,取最新一条即可)
|
|
|
|
|
+ const seen = new Set<string>();
|
|
|
|
|
+ const uniqueServers = enterServerList.filter((s) => {
|
|
|
|
|
+ if (seen.has(String(s.server_id))) return false;
|
|
|
|
|
+ seen.add(String(s.server_id));
|
|
|
|
|
+ return true;
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 并发查询每个区服的 MongoDB 角色信息
|
|
|
|
|
+ const roleList = await getRoleListByUserId(
|
|
|
|
|
+ uniqueServers.map((s) => ({
|
|
|
|
|
+ server_id: s.server_id,
|
|
|
|
|
+ db_name: s.db_name,
|
|
|
|
|
+ name: s.name,
|
|
|
|
|
+ })),
|
|
|
|
|
+ tag,
|
|
|
|
|
+ uid
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ logger.info('getUserRoleList 返回角色列表:', {uid, count: roleList.length});
|
|
|
|
|
+ ctx.body = ApiController.success('请求成功', 1, false, roleList);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
module.exports = new ApiController();
|
|
module.exports = new ApiController();
|