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