Compare commits

..

5 Commits

Author SHA1 Message Date
dy
ad9e3cca46 Merge branch 'bugfix' into release
# Conflicts:
#	src/public/rank/rank.ts
2023-12-28 19:17:09 +08:00
xcy
cedce860c5 fix:
排行榜bug
2023-12-28 18:46:38 +08:00
dy
cc6aad7223 Merge remote-tracking branch 'origin/bugfix' into bugfix 2023-12-28 18:19:52 +08:00
dy
566c3aeb7b fix 公共方法 2023-12-28 18:19:40 +08:00
xcy
8a69a4fc1e 修复排行榜 2023-12-28 18:13:50 +08:00
2 changed files with 48 additions and 21 deletions

View File

@ -240,7 +240,7 @@ export function ctor() {
}
Array.prototype.random = function (this: Array<any>) {
return this[PublicShared.randomNum(0, this.length)];
return this[PublicShared.randomNum(0, this.length - 1)];
};
Array.prototype.intersection = function (this: Array<any>, other: Array<any>) {

View File

@ -63,7 +63,7 @@ export abstract class Rank {
/**
* RankInfo数据
* type类型判断
* @param info
* @param info
* @returns
*/
getValArr(info: rankInfo): number | string {
@ -84,7 +84,7 @@ export abstract class Rank {
* page和offset转换出min和max
* @param page
* @param offset
* @returns
* @returns
*/
static pageToMin(page: number, offset: number) {
let res = {
@ -131,7 +131,7 @@ export abstract class Rank {
async cotr() {
clusterRunOnce(async () => {
// redis已存在则不初始化
//if(await this.getRankLen() > 0) return
//if(await this.getRankLen() > 0) return
//将db里的数据写入到 rank:xxx:sort里
//写入的单条数据为: {uid:score}
@ -158,7 +158,7 @@ export abstract class Rank {
*
* @param uid uidrank里通常保存于idKey这个字段
* @param data data.valArr字段
* @returns
* @returns
*/
async setRankData(uid: string, data: rankInfo) {
let keySort = this.getRedisKeySort
@ -176,7 +176,7 @@ export abstract class Rank {
/**
*
* @param uid uid
* @returns
* @returns
*/
async getRankData(uid: string) {
let data: rankInfo;
@ -208,8 +208,8 @@ export abstract class Rank {
/**
*
* @param uid
* @returns
* @param uid
* @returns
*/
async getRankScore(uid: string): Promise<number> {
let score = await G.redis.zScore(this.getRedisKeySort, uid)
@ -218,8 +218,8 @@ export abstract class Rank {
/**
* redis中获取单个用户的排名 *
* @param uid
* @returns
* @param uid
* @returns
*/
async getRankSortByOne(uid: string): Promise<number> {
let rank = await G.redis.zRevRank(this.getRedisKeySort, uid)
@ -240,9 +240,9 @@ export abstract class Rank {
/**
* *
* @param min
* @param max
* @returns
* @param min
* @param max
* @returns
*/
async getRankListRange(min: number = 0, max: number = 50): Promise<rankInfo[]> {
let uids = await this.getRankListIdKeyRange(min, max)
@ -250,6 +250,33 @@ export abstract class Rank {
let res = await this.db.find({ idKey: { $in: uids }, type: this.getType() }).toArray()
switch (this.getType()) {
case "slzd1":
case "slzd2":
case "slzd3":
case "slzd4":
case "slzd5":
case "slzd6":
let ghid = [];
res = res.map(item => {
if (!item.data?.player?.ghid || item.data.utime + 60 < G.time) {
ghid.push(G.mongodb.conversionId(item.idKey));
}
return item;
})
if(ghid.length > 0){
let ghinfo = await G.mongodb.collection("gonghui").find(
{ _id: { $in: ghid } }, { projection: { name: 1 } }
).toArray();
ghinfo.forEach(item => {
let index = res.findIndex(x => x.idKey == item._id.toHexString());
res[index].data.player = {
ghName: item.name,
ghId: item._id.toHexString(),
};
this.db.updateOne({ idKey: item._id.toHexString(), type: this.getType() }, { $set: { "data.player": res[index].data.player } });
})
}
break;
default: // 排行数据更新逻辑 默认更新playerInfo
let updateUids = [];
res = res.map(item => {
@ -271,7 +298,7 @@ export abstract class Rank {
this.db.updateOne({ idKey: item.uid, type: this.getType() }, { $set: { "data.player": item } });
// 跟新redis score
this.setRankData(item.uid, res[index].data as any);
// this.setRankData(item.uid, res[index].data as any);
})
}
@ -282,8 +309,8 @@ export abstract class Rank {
/**
* redis中获取指定排名范围的uid集合 *
* @param min
* @param max
* @param min
* @param max
* @returns uid集合数组
*/
async getRankListIdKeyRange(min: number = 0, max: number = 50): Promise<string[]> {
@ -293,7 +320,7 @@ export abstract class Rank {
/**
* rank列表,
* @returns
* @returns
*/
async getRankListAll(): Promise<rankInfo[]> {
// let res = await G.redis.hGetAll(this.getRedisKey)
@ -308,7 +335,7 @@ export abstract class Rank {
/**
* idKey
* @returns
* @returns
*/
async getRankListIdKeyAll(): Promise<string[]> {
let res = this.getRankListIdKeyRange(0, -1)
@ -327,7 +354,7 @@ export abstract class Rank {
// })
// if(updateUid.length > 0) {
// let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
// // let newUserArr = await G.redis.gets('user', ...updateUid.map(uid => [uid] as [string]))
// // let newUserArr = await G.redis.gets('user', ...updateUid.map(uid => [uid] as [string]))
// // let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
// newUserArr.forEach(item => {
// let index = rankList.findIndex( x => x.player.uid == item.uid);
@ -353,8 +380,8 @@ export abstract class Rank {
}
/**
* 50(countMaxNum)
* @param info
* 50(countMaxNum)
* @param info
* @returns
*/
async addNew(info: rankInfo) {