格式化score返回
This commit is contained in:
parent
ea8dae5ae7
commit
95e6f81713
@ -59,3 +59,5 @@ export const SCORE_ENHANCE_CHEST_GIFT = 'enhance_chest_gift'
|
|||||||
|
|
||||||
// google reCaptcha最小分数
|
// google reCaptcha最小分数
|
||||||
export const RECAPTCHA_MIN_SCORE = 0.5
|
export const RECAPTCHA_MIN_SCORE = 0.5
|
||||||
|
// 排行榜分数缩放系数
|
||||||
|
export const RANK_SCORE_SCALE = 100
|
||||||
|
@ -7,3 +7,13 @@ export const isObjectIdString = (str: string) => {
|
|||||||
export const isValidShareCode = (str: string) => {
|
export const isValidShareCode = (str: string) => {
|
||||||
return /^[3fBCM8j17XNA9xYun4wmLWep2oHFlhPcgyEJskqOz6GK0UtV5ZRaDSvrTbidQI]{10}$/.test(str)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -4,8 +4,9 @@ import { rankKey, rankLevel } from 'services/rank.svr'
|
|||||||
import { BaseController, ROLE_ANON, SyncLocker, ZError, ZRedisClient, role, router } from 'zutils'
|
import { BaseController, ROLE_ANON, SyncLocker, ZError, ZRedisClient, role, router } from 'zutils'
|
||||||
import { ScoreRecord } from 'models/ScoreRecord'
|
import { ScoreRecord } from 'models/ScoreRecord'
|
||||||
import { formatAddress } from 'zutils/utils/chain.util'
|
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 { checkReCaptcha } from 'services/google.svr'
|
||||||
|
import { RANK_SCORE_SCALE } from 'common/Constants'
|
||||||
|
|
||||||
const MAX_LIMIT = 100
|
const MAX_LIMIT = 100
|
||||||
export default class ActivityController extends BaseController {
|
export default class ActivityController extends BaseController {
|
||||||
@ -93,15 +94,15 @@ export default class ActivityController extends BaseController {
|
|||||||
for (let u of users) {
|
for (let u of users) {
|
||||||
const totalScore = await new ZRedisClient().zscore(totalKey, u.id)
|
const totalScore = await new ZRedisClient().zscore(totalKey, u.id)
|
||||||
const inviteScore = await new ZRedisClient().zscore(keyInvite, `${user.id}_${u.id}`)
|
const inviteScore = await new ZRedisClient().zscore(keyInvite, `${user.id}_${u.id}`)
|
||||||
const score = totalScore ? parseInt(totalScore + '') : 0
|
const score = totalScore ? parseInt(totalScore + '') / RANK_SCORE_SCALE : 0
|
||||||
const scoreInvite = inviteScore ? parseInt(inviteScore + '') / 100 : 0
|
const scoreInvite = inviteScore ? parseInt(inviteScore + '') / RANK_SCORE_SCALE : 0
|
||||||
results.push({
|
results.push({
|
||||||
// user: u.id,
|
// user: u.id,
|
||||||
level: rankLevel(score),
|
level: rankLevel(score),
|
||||||
nickname: u.twitterName || u.discordName || formatAddress(u.address),
|
nickname: u.twitterName || u.discordName || formatAddress(u.address),
|
||||||
avatar: u.twitterAvatar || '',
|
avatar: u.twitterAvatar || '',
|
||||||
score,
|
score: formatNumShow(score),
|
||||||
scoreInvite,
|
scoreInvite: formatNumShow(scoreInvite),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
@ -116,7 +117,7 @@ export default class ActivityController extends BaseController {
|
|||||||
const records = await ScoreRecord.find({ user: user.id, activity: user.activity })
|
const records = await ScoreRecord.find({ user: user.id, activity: user.activity })
|
||||||
return records.map(record => {
|
return records.map(record => {
|
||||||
return {
|
return {
|
||||||
score: record.score,
|
score: formatNumShow(record.score),
|
||||||
type: record.type,
|
type: record.type,
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
time: record.createdAt.getTime(),
|
time: record.createdAt.getTime(),
|
||||||
@ -138,16 +139,8 @@ export default class ActivityController extends BaseController {
|
|||||||
// const yesterdayKey = rankKey(activity, yesterday())
|
// const yesterdayKey = rankKey(activity, yesterday())
|
||||||
for (let i = 0; i < records.length; i += 2) {
|
for (let i = 0; i < records.length; i += 2) {
|
||||||
const id = records[i]
|
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)
|
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
|
const rank = start + i / 2 + 1
|
||||||
results.push({
|
results.push({
|
||||||
rank,
|
rank,
|
||||||
|
@ -14,7 +14,7 @@ import {
|
|||||||
SCORE_OPEN_CHEST,
|
SCORE_OPEN_CHEST,
|
||||||
} from 'common/Constants'
|
} from 'common/Constants'
|
||||||
import { formatAddress } from 'zutils/utils/chain.util'
|
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 { checkReCaptcha } from 'services/google.svr'
|
||||||
import { GeneralScription } from 'models/chain/GeneralScription'
|
import { GeneralScription } from 'models/chain/GeneralScription'
|
||||||
import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord'
|
import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord'
|
||||||
@ -89,7 +89,7 @@ class BoxController extends BaseController {
|
|||||||
result.push({
|
result.push({
|
||||||
nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown',
|
nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown',
|
||||||
avatar: u?.twitterAvatar || '',
|
avatar: u?.twitterAvatar || '',
|
||||||
score: score,
|
score: formatNumShow(score),
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
time: records[i].createdAt.getTime(),
|
time: records[i].createdAt.getTime(),
|
||||||
})
|
})
|
||||||
@ -114,7 +114,7 @@ class BoxController extends BaseController {
|
|||||||
result.push({
|
result.push({
|
||||||
nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown',
|
nickname: u?.twitterName || u?.discordName || u?.address ? formatAddress(u.address) : 'unknown',
|
||||||
avatar: u?.twitterAvatar || '',
|
avatar: u?.twitterAvatar || '',
|
||||||
score: score,
|
score: formatNumShow(score),
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
time: records[i].createdAt.getTime(),
|
time: records[i].createdAt.getTime(),
|
||||||
})
|
})
|
||||||
@ -345,7 +345,7 @@ class BoxController extends BaseController {
|
|||||||
})
|
})
|
||||||
|
|
||||||
await chest.save()
|
await chest.save()
|
||||||
return { score, items }
|
return { score: formatNumShow(score), items }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -360,7 +360,7 @@ class BoxController extends BaseController {
|
|||||||
return records.map(record => {
|
return records.map(record => {
|
||||||
return {
|
return {
|
||||||
chest: record.data.chestId,
|
chest: record.data.chestId,
|
||||||
score: record.score,
|
score: formatNumShow(record.score),
|
||||||
level: record.data.level,
|
level: record.data.level,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
time: record.createdAt.getTime(),
|
time: record.createdAt.getTime(),
|
||||||
|
@ -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 { ActivityGame } from 'models/ActivityGame'
|
||||||
import { DAILY_SIGN, SIGN_SEQ, SIGN_TOTAL, TicketRecord, USE_TICKET } from 'models/TicketRecord'
|
import { DAILY_SIGN, SIGN_SEQ, SIGN_TOTAL, TicketRecord, USE_TICKET } from 'models/TicketRecord'
|
||||||
import { queryCheckInList } from 'services/chain.svr'
|
import { queryCheckInList } from 'services/chain.svr'
|
||||||
import { checkInToday, seqSignCfg, seqSignScore, totalSignCfg, totalSignScore } from 'services/sign.svr'
|
import { checkInToday, seqSignCfg, seqSignScore, totalSignCfg, totalSignScore } from 'services/sign.svr'
|
||||||
import { ZError, SyncLocker, BaseController, router } from 'zutils'
|
import { ZError, SyncLocker, BaseController, router } from 'zutils'
|
||||||
import { formatDate } from 'utils/utcdate.util'
|
import { formatDate } from 'utils/utcdate.util'
|
||||||
import { generateChestLevel, generateNewChest, generateStepReward } from 'services/game.svr'
|
import { generateStepReward } from 'services/game.svr'
|
||||||
import { ChestStatusEnum } from 'models/ActivityChest'
|
|
||||||
import { updateRankScore } from 'services/rank.svr'
|
import { updateRankScore } from 'services/rank.svr'
|
||||||
import { ExploreRecord } from 'models/ExploreRecord'
|
import { ExploreRecord } from 'models/ExploreRecord'
|
||||||
import { isObjectId } from 'zutils/utils/string.util'
|
import { isObjectId } from 'zutils/utils/string.util'
|
||||||
import { GeneralScription } from 'models/chain/GeneralScription'
|
import { GeneralScription } from 'models/chain/GeneralScription'
|
||||||
import { CheckIn } from 'models/chain/CheckIn'
|
import { CheckIn } from 'models/chain/CheckIn'
|
||||||
|
import { formatNumShow } from 'common/Utils'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 探索游戏相关接口
|
* 探索游戏相关接口
|
||||||
@ -386,6 +386,6 @@ class GameController extends BaseController {
|
|||||||
}
|
}
|
||||||
await ticketRecord.save()
|
await ticketRecord.save()
|
||||||
|
|
||||||
return { score, chests: chests.map(chest => chest.toJson()) }
|
return { score: formatNumShow(score), chests: chests.map(chest => chest.toJson()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,14 @@ import { checkParamsNeeded } from 'zutils/utils/net.util'
|
|||||||
import { aesDecrypt } from 'zutils/utils/security.util'
|
import { aesDecrypt } from 'zutils/utils/security.util'
|
||||||
import { base58ToHex } from 'zutils/utils/string.util'
|
import { base58ToHex } from 'zutils/utils/string.util'
|
||||||
import { ActivityGame } from 'models/ActivityGame'
|
import { ActivityGame } from 'models/ActivityGame'
|
||||||
import { MAX_ENHANCE_COUNT_ADV, MAX_ENHANCE_COUNT_BASE, SCORE_INVITE_USER, SCORE_SOCIAL_TASK } from 'common/Constants'
|
import {
|
||||||
import { isObjectIdString } from 'common/Utils'
|
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'
|
import { ChestEnhanceRecord } from 'models/ChestEnhanceRecord'
|
||||||
|
|
||||||
const LOGIN_TIP = 'This signature is just to verify your identity'
|
const LOGIN_TIP = 'This signature is just to verify your identity'
|
||||||
@ -138,13 +144,13 @@ class SignController extends BaseController {
|
|||||||
twitterAvatar: user.twitterAvatar,
|
twitterAvatar: user.twitterAvatar,
|
||||||
discordId: user.discordId,
|
discordId: user.discordId,
|
||||||
discordName: user.discordName,
|
discordName: user.discordName,
|
||||||
scoreToday: todayScore ? parseInt(todayScore + '') : 0,
|
scoreToday: formatNumShow(todayScore ? parseInt(todayScore + '') / RANK_SCORE_SCALE : 0),
|
||||||
scoreTotal: totalScore ? parseInt(totalScore + '') : 0,
|
scoreTotal: formatNumShow(totalScore ? parseInt(totalScore + '') / RANK_SCORE_SCALE : 0),
|
||||||
rankTotal: totalRank ? totalRank : '-',
|
rankTotal: totalRank ? totalRank : '-',
|
||||||
invite,
|
invite,
|
||||||
inviteCount: records.length,
|
inviteCount: records.length,
|
||||||
inviteScore,
|
inviteScore,
|
||||||
scoreSocial,
|
scoreSocial: formatNumShow(scoreSocial),
|
||||||
code: user.inviteCode,
|
code: user.inviteCode,
|
||||||
mapopen: gameRecord.status,
|
mapopen: gameRecord.status,
|
||||||
enhanceCount,
|
enhanceCount,
|
||||||
|
@ -7,6 +7,7 @@ import { GeneralScription } from 'models/chain/GeneralScription'
|
|||||||
import { BASE_TASK_TICKET } from 'common/Constants'
|
import { BASE_TASK_TICKET } from 'common/Constants'
|
||||||
import { BASE_TASK_REWARD, SIGN_SEQ, TicketRecord } from 'models/TicketRecord'
|
import { BASE_TASK_REWARD, SIGN_SEQ, TicketRecord } from 'models/TicketRecord'
|
||||||
import { ActivityGame } from 'models/ActivityGame'
|
import { ActivityGame } from 'models/ActivityGame'
|
||||||
|
import { formatNumShow } from 'common/Utils'
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
|
||||||
const prod = process.env.NODE_ENV === 'production'
|
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 ActivityGame.updateOne({ user: user.id, activity: user.activity }, { $inc: { tickets: ticket } })
|
||||||
await ticketRecord.save()
|
await ticketRecord.save()
|
||||||
}
|
}
|
||||||
return { status: currentTask.status, score, ticket }
|
return { status: currentTask.status, score: formatNumShow(score), ticket }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 { ActivityUser } from 'models/ActivityUser'
|
||||||
import { ScoreRecord } from 'models/ScoreRecord'
|
import { ScoreRecord } from 'models/ScoreRecord'
|
||||||
import { ZRedisClient } from 'zutils'
|
import { ZRedisClient } from 'zutils'
|
||||||
@ -49,7 +49,7 @@ export const updateRankScore = async ({
|
|||||||
const score1 = score * INVITE_REBATE
|
const score1 = score * INVITE_REBATE
|
||||||
let scoreParams1 = Object.assign({ fromUser: user }, scoreParams)
|
let scoreParams1 = Object.assign({ fromUser: user }, scoreParams)
|
||||||
const keyInvite = `${activity}:invite`
|
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({
|
await updateRankScore({
|
||||||
user: userMod.inviteUser,
|
user: userMod.inviteUser,
|
||||||
score: score1,
|
score: score1,
|
||||||
@ -74,7 +74,7 @@ const updateRank = async (key: string, score: number, member: string) => {
|
|||||||
scoreSaved = scoreSaved.substring(0, scoreSaved.indexOf('.'))
|
scoreSaved = scoreSaved.substring(0, scoreSaved.indexOf('.'))
|
||||||
}
|
}
|
||||||
let scoreOld = parseInt(scoreSaved || '0')
|
let scoreOld = parseInt(scoreSaved || '0')
|
||||||
score = score + scoreOld
|
score = score * RANK_SCORE_SCALE + scoreOld
|
||||||
const scoreToSave = score + 1 - Date.now() / 1000 / 10000000000
|
const scoreToSave = score + 1 - Date.now() / 1000 / 10000000000
|
||||||
await new ZRedisClient().zadd(key, scoreToSave, member)
|
await new ZRedisClient().zadd(key, scoreToSave, member)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user