124 lines
4.3 KiB
TypeScript
124 lines
4.3 KiB
TypeScript
import mongoose from 'mongoose'
|
|
import * as dotenv from 'dotenv'
|
|
|
|
const envFile = process.env.NODE_ENV && process.env.NODE_ENV === 'production' ? `.env.production` : '.env.development'
|
|
dotenv.config({ path: envFile })
|
|
console.log(process.env.DB_MAIN)
|
|
import { ActivityChest } from 'models/ActivityChest'
|
|
import { ScoreRecord } from 'models/ScoreRecord'
|
|
import { DeleteRecord } from 'models/DeleteRecord'
|
|
import { rankKey, updateRank, updateRankInvite } from 'services/rank.svr'
|
|
import { ZRedisClient } from 'zutils'
|
|
import { RANK_SCORE_SCALE } from 'common/Constants'
|
|
const db = mongoose.connection
|
|
|
|
const updateRedis = async (activity, user, score) => {
|
|
const key = rankKey(activity)
|
|
await updateRank(key, score, user)
|
|
}
|
|
|
|
const updateRedisInvite = async (activity, sourceUser, user, score) => {
|
|
const keyInvite = `${activity}:invite`
|
|
await updateRankInvite(keyInvite, parseInt(score * RANK_SCORE_SCALE + ''), `${sourceUser}_${user}`)
|
|
}
|
|
|
|
;(async () => {
|
|
try {
|
|
return false
|
|
let fs = require('fs')
|
|
let ids = fs.readFileSync('initdatas/chest_id.txt', 'utf-8').split('\n')
|
|
let ids2 = []
|
|
for (let i = 0; i < ids.length; i++) {
|
|
if (ids[i].trim()) {
|
|
ids2.push(ids[i])
|
|
}
|
|
}
|
|
let chests = await ActivityChest.find({ _id: { $in: ids2 } })
|
|
const activity = 'uaw_activity'
|
|
console.time('delete')
|
|
let opts = { url: process.env.REDIS }
|
|
new ZRedisClient(opts)
|
|
for (let chest of chests) {
|
|
if (chest.status === 1) {
|
|
// 未开启
|
|
// 处理助力分数
|
|
if (chest.bonusUsers.length > 0) {
|
|
for (let user of chest.bonusUsers) {
|
|
let record = await ScoreRecord.findOne({ user: user, activity: chest.activity, type: 'enhance_chest_gift' })
|
|
console.log('助力分数: ', record.score)
|
|
await updateRedis(activity, user, -record.score)
|
|
let dRecord = new DeleteRecord({
|
|
type: 'enhance_chest_gift',
|
|
data: record,
|
|
})
|
|
await dRecord.save()
|
|
await ScoreRecord.deleteOne({ _id: record.id })
|
|
}
|
|
}
|
|
} else if (chest.status === 9) {
|
|
// 已开启
|
|
// 处理助力分数
|
|
if (chest.bonusUsers.length > 0) {
|
|
for (let user of chest.bonusUsers) {
|
|
let record = await ScoreRecord.findOne({ user: user, activity: chest.activity, type: 'enhance_chest_gift' })
|
|
console.log('助力分数: ', record.score)
|
|
// update redis
|
|
await updateRedis(activity, user, -record.score)
|
|
let dRecord = new DeleteRecord({
|
|
type: 'enhance_chest_gift',
|
|
data: record,
|
|
})
|
|
await dRecord.save()
|
|
await ScoreRecord.deleteOne({ _id: record.id })
|
|
}
|
|
}
|
|
// 处理已开箱所得分数
|
|
let record = await ScoreRecord.findOne({
|
|
'data.chestId': chest.id,
|
|
user: chest.user,
|
|
activity: chest.activity,
|
|
type: 'open_chest',
|
|
})
|
|
console.log('开箱所得分数: ', record.score)
|
|
// update redis
|
|
await updateRedis(activity, chest.user, -record.score)
|
|
let dRecord = new DeleteRecord({
|
|
type: 'open_chest',
|
|
data: record,
|
|
})
|
|
await dRecord.save()
|
|
await ScoreRecord.deleteOne({ _id: record.id })
|
|
// 处理邀请者所得分数
|
|
let subRecords = await ScoreRecord.find({
|
|
'data.fromUser': record.user,
|
|
'data.chestId': chest.id,
|
|
type: 'invite_rebate',
|
|
})
|
|
for (let subRecord of subRecords) {
|
|
console.log('邀请者所得分数: ', subRecord.score, subRecord.id)
|
|
// update redis
|
|
await updateRedis(activity, subRecord.user, -record.score)
|
|
await updateRedisInvite(activity, record.user, subRecord.user, -record.score)
|
|
let dRecord = new DeleteRecord({
|
|
type: 'invite_rebate',
|
|
data: subRecord,
|
|
})
|
|
await dRecord.save()
|
|
await ScoreRecord.deleteOne({ _id: subRecord.id })
|
|
}
|
|
// 移除当前箱子
|
|
}
|
|
let dRecordChest = new DeleteRecord({
|
|
type: 'chest',
|
|
data: chest,
|
|
})
|
|
await dRecordChest.save()
|
|
await ActivityChest.deleteOne({ _id: chest.id })
|
|
}
|
|
console.timeEnd('delete')
|
|
} catch (e) {
|
|
console.log(e)
|
|
}
|
|
process.exit(0)
|
|
})()
|