From 142589a20b84c9f779547f7e5b8e1025cdb04a7f Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:06:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A2=AB=E9=82=80=E8=AF=B7=E4=BA=BA=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E7=BB=99=E7=A7=AF=E5=88=86,=20=E5=9C=A8=E8=A2=AB?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E4=BA=BA=E8=8E=B7=E5=BE=97=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E6=97=B6,=20=E9=82=80=E8=AF=B7=E4=BA=BA=E9=83=BD=E4=BC=9A?= =?UTF-8?q?=E5=BE=97=E5=88=B0=E9=A2=9D=E5=A4=96=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/Constants.ts | 6 +++ src/controllers/activity.controller.ts | 54 +++++++++++++------------- src/controllers/chest.controller.ts | 21 +++++----- src/services/rank.svr.ts | 21 ++++++++++ 4 files changed, 64 insertions(+), 38 deletions(-) diff --git a/src/common/Constants.ts b/src/common/Constants.ts index e210207..c86a77e 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -27,6 +27,10 @@ export const STEP_CHEST_RATE = 0.1 export const STEP_CHEST_LEVEL = [70, 85, 95, 100] // 低保步数 export const RESET_STEP = 2 +// 邀请用户得到额外分数 +export const INVITE_REBATE = 0.2 +// 向上追溯的默认层级 +export const INVITE_REBATE_LEVEL = 1 // 积分类型-邀请用户 export const SCORE_INVITE_USER = 'invite_user' @@ -40,3 +44,5 @@ export const SCORE_DRAW = 'draw' export const SCORE_GAME_STEP = 'game_step' // 积分类型-社交任务 export const SCORE_SOCIAL_TASK = 'Social Tasks' +// 积分类型-邀请用户额外收益 +export const SCORE_INVITE_REBATE = 'invite_rebate' diff --git a/src/controllers/activity.controller.ts b/src/controllers/activity.controller.ts index 0430794..edd6345 100644 --- a/src/controllers/activity.controller.ts +++ b/src/controllers/activity.controller.ts @@ -1,13 +1,10 @@ import { ActivityInfo } from 'models/ActivityInfo' import { ActivityUser } from 'models/ActivityUser' -import { rankKey, rankLevel, updateRankScore } from 'services/rank.svr' +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 { formatDate } from 'zutils/utils/date.util' -import { SCORE_INVITE_INVITEE, SCORE_INVITE_USER } from 'common/Constants' import { isValidShareCode } from 'common/Utils' -const shareCfg = require('../../configs/share_cfg.json') const MAX_LIMIT = 100 export default class ActivityController extends BaseController { @@ -52,32 +49,33 @@ export default class ActivityController extends BaseController { if (!inviteUser) { throw new ZError(12, 'invalid invite code') } - const dateTag = formatDate(new Date()) - // 更新邀请积分-邀请人 - await updateRankScore({ - user: inviteUser.id, - score: shareCfg.inviter, - activity: user.activity, - scoreType: SCORE_INVITE_USER, - scoreParams: { - date: dateTag, - user: user.id, - }, - }) - // 更新邀请积分-被邀请人 - await updateRankScore({ - user: user.id, - score: shareCfg.invitee, - activity: user.activity, - scoreType: SCORE_INVITE_INVITEE, - scoreParams: { - date: dateTag, - user: inviteUser.id, - }, - }) + // const dateTag = formatDate(new Date()) + // // 更新邀请积分-邀请人 + // await updateRankScore({ + // user: inviteUser.id, + // score: shareCfg.inviter, + // activity: user.activity, + // scoreType: SCORE_INVITE_USER, + // scoreParams: { + // date: dateTag, + // user: user.id, + // }, + // }) + // // 更新邀请积分-被邀请人 + // await updateRankScore({ + // user: user.id, + // score: shareCfg.invitee, + // activity: user.activity, + // scoreType: SCORE_INVITE_INVITEE, + // scoreParams: { + // date: dateTag, + // user: inviteUser.id, + // }, + // }) user.inviteUser = inviteUser.id await user.save() - return { score: shareCfg.invitee } + // return { score: shareCfg.invitee } + return { score: 0 } } /** diff --git a/src/controllers/chest.controller.ts b/src/controllers/chest.controller.ts index 1b2c5f0..1c82ef0 100644 --- a/src/controllers/chest.controller.ts +++ b/src/controllers/chest.controller.ts @@ -32,15 +32,16 @@ class BoxController extends BaseController { }).sort({ level: -1, }) - for (let chest of chests) { - // TODO:: 待规则确定后, 将符合条件的锁定的箱子解锁 - if (chest.status === 0) { - if (user.allTaskFinished()) { - chest.status = 1 - await chest.save() - } - } - } + // 20240328: 不再有上锁的箱子了 + // for (let chest of chests) { + // // TODO:: 待规则确定后, 将符合条件的锁定的箱子解锁 + // if (chest.status === 0) { + // if (user.allTaskFinished()) { + // chest.status = 1 + // await chest.save() + // } + // } + // } const results = chests.map(chest => chest.toJson()) for (let result of results) { if (result.stat > 0 && chestSet.has(result.id)) { @@ -132,7 +133,7 @@ class BoxController extends BaseController { const chestsForUser = await ActivityChest.find({ user: uid, activity: user.activity }) // 如果用户没有宝箱, 则说明用户是新用户, 生成一个宝箱 if (chestsForUser.length === 0) { - const newChest = generateNewChest(uid, user.activity, 1, ChestStatusEnum.LOCKED) + const newChest = generateNewChest(uid, user.activity, 1, ChestStatusEnum.NORMAL) await newChest.save() return { score: 0, diff --git a/src/services/rank.svr.ts b/src/services/rank.svr.ts index dc57862..c83797d 100644 --- a/src/services/rank.svr.ts +++ b/src/services/rank.svr.ts @@ -1,3 +1,5 @@ +import { INVITE_REBATE, INVITE_REBATE_LEVEL, SCORE_INVITE_REBATE } from 'common/Constants' +import { ActivityUser } from 'models/ActivityUser' import { ScoreRecord } from 'models/ScoreRecord' import { ZRedisClient } from 'zutils' import { formatDate } from 'zutils/utils/date.util' @@ -10,6 +12,7 @@ const rankLevels = require('../../configs/uaw_rank_level.json') * activity: 活动id * scoreType: 分数类型 * scoreParams: 额外的参数 + * rebatLevel: 返利层级 */ export const updateRankScore = async ({ user, @@ -17,12 +20,14 @@ export const updateRankScore = async ({ activity, scoreType, scoreParams, + rebateLevel = INVITE_REBATE_LEVEL, }: { user: string score: number activity: string scoreType: string scoreParams: any + rebateLevel?: number }) => { let record = new ScoreRecord({ user: user, @@ -37,6 +42,22 @@ export const updateRankScore = async ({ // add daily score const dailyKey = rankKey(activity, new Date()) await updateRank(dailyKey, score, user) + // 给邀请人返利 + if (rebateLevel > 0) { + let userMod = await ActivityUser.findById(user) + if (userMod?.inviteUser) { + const score1 = Math.floor(scoreParams.score * INVITE_REBATE) + let scoreParams1 = Object.assign({ fromUser: user }, scoreParams) + await updateRankScore({ + user: userMod.inviteUser, + score: score1, + activity, + scoreType: SCORE_INVITE_REBATE, + scoreParams: scoreParams1, + rebateLevel: rebateLevel - 1, + }) + } + } } /**