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>) { 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>) { Array.prototype.intersection = function (this: Array<any>, other: Array<any>) {

View File

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