被邀请人不再给积分, 在被邀请人获得积分时, 邀请人都会得到额外积分

This commit is contained in:
CounterFire2023 2024-03-28 17:06:05 +08:00
parent 8220ef2a2c
commit 142589a20b
4 changed files with 64 additions and 38 deletions

View File

@ -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'

View File

@ -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 }
}
/**

View File

@ -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,

View File

@ -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,
})
}
}
}
/**