From 95e6f81713251edab6df949ab4904c34ff7aaa03 Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:13:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96score=E8=BF=94?= =?UTF-8?q?=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/Constants.ts | 2 ++ src/common/Utils.ts | 10 ++++++++++ src/controllers/activity.controller.ts | 23 ++++++++--------------- src/controllers/chest.controller.ts | 10 +++++----- src/controllers/game.controller.ts | 8 ++++---- src/controllers/sign.controller.ts | 16 +++++++++++----- src/controllers/tasks.controller.ts | 3 ++- src/services/rank.svr.ts | 6 +++--- 8 files changed, 45 insertions(+), 33 deletions(-) diff --git a/src/common/Constants.ts b/src/common/Constants.ts index 67f4af7..6506d3a 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -59,3 +59,5 @@ export const SCORE_ENHANCE_CHEST_GIFT = 'enhance_chest_gift' // google reCaptcha最小分数 export const RECAPTCHA_MIN_SCORE = 0.5 +// 排行榜分数缩放系数 +export const RANK_SCORE_SCALE = 100 diff --git a/src/common/Utils.ts b/src/common/Utils.ts index ca1e4b9..e334386 100644 --- a/src/common/Utils.ts +++ b/src/common/Utils.ts @@ -7,3 +7,13 @@ export const isObjectIdString = (str: string) => { export const isValidShareCode = (str: string) => { return /^[3fBCM8j17XNA9xYun4wmLWep2oHFlhPcgyEJskqOz6GK0UtV5ZRaDSvrTbidQI]{10}$/.test(str) } + +export const formatNumShow = (num: number) => { + if (num >= 10) { + return num.toString() + } else if (num === 0) { + return '0' + } else { + return num.toFixed(1) + } +} diff --git a/src/controllers/activity.controller.ts b/src/controllers/activity.controller.ts index e719c3f..e687939 100644 --- a/src/controllers/activity.controller.ts +++ b/src/controllers/activity.controller.ts @@ -4,8 +4,9 @@ import { rankKey, rankLevel } from 'services/rank.svr' import { BaseController, ROLE_ANON, SyncLocker, ZError, ZRedisClient, role, router } from 'zutils' import { ScoreRecord } from 'models/ScoreRecord' import { formatAddress } from 'zutils/utils/chain.util' -import { isValidShareCode } from 'common/Utils' +import { formatNumShow, isValidShareCode } from 'common/Utils' import { checkReCaptcha } from 'services/google.svr' +import { RANK_SCORE_SCALE } from 'common/Constants' const MAX_LIMIT = 100 export default class ActivityController extends BaseController { @@ -93,15 +94,15 @@ export default class ActivityController extends BaseController { for (let u of users) { const totalScore = await new ZRedisClient().zscore(totalKey, u.id) const inviteScore = await new ZRedisClient().zscore(keyInvite, `${user.id}_${u.id}`) - const score = totalScore ? parseInt(totalScore + '') : 0 - const scoreInvite = inviteScore ? parseInt(inviteScore + '') / 100 : 0 + const score = totalScore ? parseInt(totalScore + '') / RANK_SCORE_SCALE : 0 + const scoreInvite = inviteScore ? parseInt(inviteScore + '') / RANK_SCORE_SCALE : 0 results.push({ // user: u.id, level: rankLevel(score), nickname: u.twitterName || u.discordName || formatAddress(u.address), avatar: u.twitterAvatar || '', - score, - scoreInvite, + score: formatNumShow(score), + scoreInvite: formatNumShow(scoreInvite), }) } return results @@ -116,7 +117,7 @@ export default class ActivityController extends BaseController { const records = await ScoreRecord.find({ user: user.id, activity: user.activity }) return records.map(record => { return { - score: record.score, + score: formatNumShow(record.score), type: record.type, //@ts-ignore time: record.createdAt.getTime(), @@ -138,16 +139,8 @@ export default class ActivityController extends BaseController { // const yesterdayKey = rankKey(activity, yesterday()) for (let i = 0; i < records.length; i += 2) { const id = records[i] - let score = parseInt(records[i + 1]) + let score = formatNumShow(parseInt(records[i + 1]) / RANK_SCORE_SCALE) const user = await ActivityUser.findById(id) - // let invite = '' - // if (user?.inviteUser) { - // const inviteUser = await ActivityUser.findById(user.inviteUser) - // if (inviteUser) { - // invite = inviteUser.address - // } - // } - // const yesterdayScore = await new ZRedisClient().zscore(yesterdayKey, id) const rank = start + i / 2 + 1 results.push({ rank, diff --git a/src/controllers/chest.controller.ts b/src/controllers/chest.controller.ts index fd6b2a8..3d6e133 100644 --- a/src/controllers/chest.controller.ts +++ b/src/controllers/chest.controller.ts @@ -14,7 +14,7 @@ import { SCORE_OPEN_CHEST, } from 'common/Constants' import { formatAddress } from 'zutils/utils/chain.util' -import { isObjectIdString, isValidShareCode } from 'common/Utils' +import { formatNumShow, isObjectIdString, isValidShareCode } from 'common/Utils' import { checkReCaptcha } from 'services/google.svr' import { GeneralScription } from 'models/chain/GeneralScription' import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord' @@ -89,7 +89,7 @@ class BoxController extends BaseController { result.push({ nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown', avatar: u?.twitterAvatar || '', - score: score, + score: formatNumShow(score), // @ts-ignore time: records[i].createdAt.getTime(), }) @@ -114,7 +114,7 @@ class BoxController extends BaseController { result.push({ nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown', avatar: u?.twitterAvatar || '', - score: score, + score: formatNumShow(score), // @ts-ignore time: records[i].createdAt.getTime(), }) @@ -345,7 +345,7 @@ class BoxController extends BaseController { }) await chest.save() - return { score, items } + return { score: formatNumShow(score), items } } /** @@ -360,7 +360,7 @@ class BoxController extends BaseController { return records.map(record => { return { chest: record.data.chestId, - score: record.score, + score: formatNumShow(record.score), level: record.data.level, // @ts-ignore time: record.createdAt.getTime(), diff --git a/src/controllers/game.controller.ts b/src/controllers/game.controller.ts index 2cf3169..e5b9061 100644 --- a/src/controllers/game.controller.ts +++ b/src/controllers/game.controller.ts @@ -1,17 +1,17 @@ -import { MANUAL_OPEN_GAME, RESET_STEP, SCORE_GAME_STEP } from 'common/Constants' +import { MANUAL_OPEN_GAME, SCORE_GAME_STEP } from 'common/Constants' import { ActivityGame } from 'models/ActivityGame' import { DAILY_SIGN, SIGN_SEQ, SIGN_TOTAL, TicketRecord, USE_TICKET } from 'models/TicketRecord' import { queryCheckInList } from 'services/chain.svr' import { checkInToday, seqSignCfg, seqSignScore, totalSignCfg, totalSignScore } from 'services/sign.svr' import { ZError, SyncLocker, BaseController, router } from 'zutils' import { formatDate } from 'utils/utcdate.util' -import { generateChestLevel, generateNewChest, generateStepReward } from 'services/game.svr' -import { ChestStatusEnum } from 'models/ActivityChest' +import { generateStepReward } from 'services/game.svr' import { updateRankScore } from 'services/rank.svr' import { ExploreRecord } from 'models/ExploreRecord' import { isObjectId } from 'zutils/utils/string.util' import { GeneralScription } from 'models/chain/GeneralScription' import { CheckIn } from 'models/chain/CheckIn' +import { formatNumShow } from 'common/Utils' /** * 探索游戏相关接口 @@ -386,6 +386,6 @@ class GameController extends BaseController { } await ticketRecord.save() - return { score, chests: chests.map(chest => chest.toJson()) } + return { score: formatNumShow(score), chests: chests.map(chest => chest.toJson()) } } } diff --git a/src/controllers/sign.controller.ts b/src/controllers/sign.controller.ts index 12c3116..0566321 100644 --- a/src/controllers/sign.controller.ts +++ b/src/controllers/sign.controller.ts @@ -11,8 +11,14 @@ import { checkParamsNeeded } from 'zutils/utils/net.util' import { aesDecrypt } from 'zutils/utils/security.util' import { base58ToHex } from 'zutils/utils/string.util' import { ActivityGame } from 'models/ActivityGame' -import { MAX_ENHANCE_COUNT_ADV, MAX_ENHANCE_COUNT_BASE, SCORE_INVITE_USER, SCORE_SOCIAL_TASK } from 'common/Constants' -import { isObjectIdString } from 'common/Utils' +import { + MAX_ENHANCE_COUNT_ADV, + MAX_ENHANCE_COUNT_BASE, + RANK_SCORE_SCALE, + SCORE_INVITE_USER, + SCORE_SOCIAL_TASK, +} from 'common/Constants' +import { formatNumShow, isObjectIdString } from 'common/Utils' import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord' const LOGIN_TIP = 'This signature is just to verify your identity' @@ -138,13 +144,13 @@ class SignController extends BaseController { twitterAvatar: user.twitterAvatar, discordId: user.discordId, discordName: user.discordName, - scoreToday: todayScore ? parseInt(todayScore + '') : 0, - scoreTotal: totalScore ? parseInt(totalScore + '') : 0, + scoreToday: formatNumShow(todayScore ? parseInt(todayScore + '') / RANK_SCORE_SCALE : 0), + scoreTotal: formatNumShow(totalScore ? parseInt(totalScore + '') / RANK_SCORE_SCALE : 0), rankTotal: totalRank ? totalRank : '-', invite, inviteCount: records.length, inviteScore, - scoreSocial, + scoreSocial: formatNumShow(scoreSocial), code: user.inviteCode, mapopen: gameRecord.status, enhanceCount, diff --git a/src/controllers/tasks.controller.ts b/src/controllers/tasks.controller.ts index 77529ca..37149b0 100644 --- a/src/controllers/tasks.controller.ts +++ b/src/controllers/tasks.controller.ts @@ -7,6 +7,7 @@ import { GeneralScription } from 'models/chain/GeneralScription' import { BASE_TASK_TICKET } from 'common/Constants' import { BASE_TASK_REWARD, SIGN_SEQ, TicketRecord } from 'models/TicketRecord' import { ActivityGame } from 'models/ActivityGame' +import { formatNumShow } from 'common/Utils' const fs = require('fs') const prod = process.env.NODE_ENV === 'production' @@ -230,6 +231,6 @@ export default class TasksController extends BaseController { await ActivityGame.updateOne({ user: user.id, activity: user.activity }, { $inc: { tickets: ticket } }) await ticketRecord.save() } - return { status: currentTask.status, score, ticket } + return { status: currentTask.status, score: formatNumShow(score), ticket } } } diff --git a/src/services/rank.svr.ts b/src/services/rank.svr.ts index a4050b0..29422f4 100644 --- a/src/services/rank.svr.ts +++ b/src/services/rank.svr.ts @@ -1,4 +1,4 @@ -import { INVITE_REBATE, INVITE_REBATE_LEVEL, SCORE_INVITE_REBATE } from 'common/Constants' +import { INVITE_REBATE, INVITE_REBATE_LEVEL, RANK_SCORE_SCALE, SCORE_INVITE_REBATE } from 'common/Constants' import { ActivityUser } from 'models/ActivityUser' import { ScoreRecord } from 'models/ScoreRecord' import { ZRedisClient } from 'zutils' @@ -49,7 +49,7 @@ export const updateRankScore = async ({ const score1 = score * INVITE_REBATE let scoreParams1 = Object.assign({ fromUser: user }, scoreParams) const keyInvite = `${activity}:invite` - await updateRankInvite(keyInvite, parseInt(score1 * 100 + ''), `${userMod.inviteUser}_${user}`) + await updateRankInvite(keyInvite, parseInt(score1 * RANK_SCORE_SCALE + ''), `${userMod.inviteUser}_${user}`) await updateRankScore({ user: userMod.inviteUser, score: score1, @@ -74,7 +74,7 @@ const updateRank = async (key: string, score: number, member: string) => { scoreSaved = scoreSaved.substring(0, scoreSaved.indexOf('.')) } let scoreOld = parseInt(scoreSaved || '0') - score = score + scoreOld + score = score * RANK_SCORE_SCALE + scoreOld const scoreToSave = score + 1 - Date.now() / 1000 / 10000000000 await new ZRedisClient().zadd(key, scoreToSave, member) }