From 1f4663ecb57a400880ef93b298ddc49a990ab9a7 Mon Sep 17 00:00:00 2001 From: zhl Date: Fri, 21 May 2021 17:25:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E8=A1=8C=E6=A6=9C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=98=B5=E5=92=8C=E5=A4=B4=E5=83=8F=E7=9A=84=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/GameUser.ts | 9 +++++++++ src/services/GameLogic.ts | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/models/GameUser.ts b/src/models/GameUser.ts index 4637a28..008c4bc 100644 --- a/src/models/GameUser.ts +++ b/src/models/GameUser.ts @@ -43,6 +43,15 @@ class GameUserClass extends BaseModule { let records = await this.find({accountId}).limit(1) return records.length > 0 ? records[0] : null } + + public static async userMapByAccountIDS(this: ReturnModelType, accountIds: string[]) { + const records = await this.find({accountId: {$in: accountIds}}) + let map: Map = new Map() + for (let record of records) { + map.set(record.accountId, record) + } + return map + } } export const GameUser = getModelForClass(GameUserClass, {existingConnection: GameUserClass.db}); diff --git a/src/services/GameLogic.ts b/src/services/GameLogic.ts index 897c9e1..be841f8 100644 --- a/src/services/GameLogic.ts +++ b/src/services/GameLogic.ts @@ -17,6 +17,7 @@ import { ShopActivity } from '../models/shop/ShopActivity' import { getAccountRank, getRankCount, getRankList, updateRank } from './Rank' import { PuzzleRank } from '../models/match/PuzzleRank' import { UserReward } from '../models/UserReward' +import { GameUser } from '../models/GameUser' export function transformRecord(records: any[]) { @@ -208,14 +209,24 @@ export async function getRank({shop, level, accountId, mode, skip, limit } level: number | string, accountId: string, mode: number, skip: number, limit: number}) { - // let records = await PuzzleRank.find({shop, level, mode}).limit(limit).skip(skip).sort({'score': -1}) const key = rankKey(shop, level, mode) let datas: any = await getRankList(skip, limit, key) - // let scoreMap: Map = new Map() let rankList: any[][] = [] + let accountIDS: string[] = [] for (let i = 0, l = datas.length; i < l; i += 2) { - // scoreMap.set(datas[i], datas[i + 1] << 0) rankList.push([datas[i], datas[i + 1] << 0]) + accountIDS.push(datas[i]) + } + const userMap = await GameUser.userMapByAccountIDS(accountIDS) + for (let d of rankList) { + if (userMap.has(d[0])) { + let u = userMap.get(d[0]) + d.push(u.nickname || '') + d.push(u.avatar || '') + } else { + d.push('') + d.push('') + } } let userRank = (await getAccountRank(accountId, key)) || 999