diff --git a/package.json b/package.json index 111482f..cdad5fa 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "checkredis": "ts-node -r tsconfig-paths/register src/checkredis.ts", "additem": "ts-node -r tsconfig-paths/register src/addboxdata.ts", "fixdata": "ts-node -r tsconfig-paths/register src/fixdata.ts", - "rankquery": "ts-node -r tsconfig-paths/register src/rankquery.ts", + "rankquery": "ts-node -r tsconfig-paths/register src/rankquery2.ts", "taskid": "ts-node -r tsconfig-paths/register src/generateTaskId.ts", "token": "ts-node -r tsconfig-paths/register src/generateToken.ts", "ingame": "ts-node -r tsconfig-paths/register src/fixIngame.ts", diff --git a/src/rankquery2.ts b/src/rankquery2.ts new file mode 100644 index 0000000..f2c1e11 --- /dev/null +++ b/src/rankquery2.ts @@ -0,0 +1,62 @@ +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 { ScoreRecord } from 'models/ScoreRecord' +import { FixAddress } from 'models/ctrl/FixAddress' +import { SCORE_INVITE_REBATE } from 'common/Constants' + +const db = mongoose.connection + +;(async () => { + try { + let begin = new Date('2024-05-10T00:00:00.000Z') + const oneDay = 24 * 60 * 60 * 1000 + let end = new Date(begin.getTime() + oneDay) + let whiteSet = new Set() + console.time('address') + await FixAddress.find() + .cursor() + .eachAsync(async doc => { + whiteSet.add(doc.user) + }) + console.timeEnd('address') + console.time('score') + while (end < new Date()) { + let scoreTask = 0 + let scoreShare = 0 + let scoreWhite = 0 + await ScoreRecord.find({ $and: [{ createdAt: { $gte: begin } }, { createdAt: { $lt: end } }] }) + .cursor() + .eachAsync(async doc => { + if (doc.type === SCORE_INVITE_REBATE) { + scoreShare += doc.score + } else { + scoreTask += doc.score + } + if (whiteSet.has(doc.user)) { + scoreWhite += doc.score + } + }) + + console.log( + begin.toLocaleDateString(), + '\t', + scoreTask + scoreShare, + '\t', + scoreTask, + '\t', + scoreShare, + '\t', + scoreWhite, + ) + begin = end + end = new Date(begin.getTime() + oneDay) + } + } catch (e) { + console.log(e) + } + console.timeEnd('score') + process.exit(0) +})()