task-svr/src/repairdata2.ts
2024-04-23 09:52:40 +08:00

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)
})()