From f2da3f1b573f2384f5d83343de19f9c116301bf6 Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:52:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BF=AE=E5=A4=8D=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- initdatas/chest_id.txt | 1033 ++++++++++++++++++++++++++++ package.json | 3 + src/controllers/game.controller.ts | 12 +- src/models/DeleteRecord.ts | 20 + src/repairdata.ts | 96 +++ src/repairdata2.ts | 123 ++++ src/repairredis.ts | 94 +++ src/services/rank.svr.ts | 6 +- 8 files changed, 1384 insertions(+), 3 deletions(-) create mode 100644 initdatas/chest_id.txt create mode 100644 src/models/DeleteRecord.ts create mode 100644 src/repairdata.ts create mode 100644 src/repairdata2.ts create mode 100644 src/repairredis.ts diff --git a/initdatas/chest_id.txt b/initdatas/chest_id.txt new file mode 100644 index 0000000..adb66f4 --- /dev/null +++ b/initdatas/chest_id.txt @@ -0,0 +1,1033 @@ +661ff5383e2baabdc1fab185 +661ff7cabbd343e6cc4572d7 +66211951bbd343e6cc8fd131 +66211951bbd343e6cc8fd132 +66213178bbd343e6cca5d0e7 +66213b33bbd343e6ccb06e99 +6621442dbbd343e6ccbb0562 +66214a5dbbd343e6ccc30549 +66214c93bbd343e6ccc59204 +66214c933e2baabdc1799159 +66214c93bbd343e6ccc59206 +66214c93bbd343e6ccc59207 +66214c93bbd343e6ccc59208 +66214c933e2baabdc179915f +66214c93bbd343e6ccc5920a +66214d66bbd343e6ccc67b6e +66214e74bbd343e6ccc7bc98 +66214f5ebbd343e6ccc8c47a +66214f5ebbd343e6ccc8c47b +662151a8bbd343e6cccb9eff +662152f13e2baabdc180d5ea +6621548abbd343e6cccf41da +66217041bbd343e6cce7b895 +662173b5bbd343e6ccea1d5e +662173b5bbd343e6ccea1d5f +662173b5bbd343e6ccea1d60 +66217860bbd343e6cced2b2b +6621c56dbbd343e6cc10b392 +6621c92abbd343e6cc124d68 +6621dcafbbd343e6cc1d1095 +6621e12dbbd343e6cc203f58 +6621e12dbbd343e6cc203f59 +6621e5263e2baabdc1d3d097 +6621ed08bbd343e6cc29fbba +6621ed08bbd343e6cc29fbbb +6621ed08bbd343e6cc29fbbc +6621ed08bbd343e6cc29fbbd +66221806bbd343e6cc4dba74 +66221806bbd343e6cc4dba75 +662218063e2baabdc1fb71d9 +66221806bbd343e6cc4dba76 +662218063e2baabdc1fb71da +66221806bbd343e6cc4dba78 +662218063e2baabdc1fb71db +662218063e2baabdc1fb71dc +662221ccbbd343e6cc560b12 +662221cdbbd343e6cc560c48 +662221d2bbd343e6cc56113a +662243d1dc17cf161fe1af14 +66226579bea94bcdc9f9269f +662272e5f3bbf3b2da92735e +66227610f3bbf3b2da98a1d2 +6622761467bd287dd233863a +6622761667bd287dd2338a55 +66227619f3bbf3b2da98b358 +6622763767bd287dd233cea6 +6622763bf3bbf3b2da98f775 +6622763ef3bbf3b2da98fcab +6622764667bd287dd233f339 +6622766567bd287dd2342ea2 +66227665f3bbf3b2da994b0c +6622766567bd287dd2342fc4 +66227681f3bbf3b2da998107 +66227683f3bbf3b2da998449 +662276aff3bbf3b2da99d533 +6622770867bd287dd2355c2c +6622770b67bd287dd2356056 +6622770ef3bbf3b2da9a7ece +6622778567bd287dd2364499 +6622778bf3bbf3b2da9b69ee +662277acf3bbf3b2da9ba1bc +6622781667bd287dd2374617 +66227818f3bbf3b2da9c69a8 +6622781b67bd287dd2374f44 +66227824f3bbf3b2da9c80e1 +6622782f67bd287dd23772a4 +6622783667bd287dd2377ffe +6622783967bd287dd23784a7 +66227840f3bbf3b2da9caff4 +66227841f3bbf3b2da9cb150 +6622786167bd287dd237c8b2 +66227938f3bbf3b2da9e650c +6622793bf3bbf3b2da9e7010 +66227942f3bbf3b2da9e7c9c +6622794467bd287dd2396e31 +66227944f3bbf3b2da9e8207 +66227946f3bbf3b2da9e84cc +66227948f3bbf3b2da9e8642 +6622794967bd287dd239733f +662279e6f3bbf3b2da9f8cfd +662279f1f3bbf3b2da9fa21c +662279f167bd287dd23a8c26 +662279f5f3bbf3b2da9fab1a +662279f767bd287dd23a96b0 +662279f867bd287dd23a97c6 +66227a0d67bd287dd23abddb +66227a1167bd287dd23ac295 +66227a1967bd287dd23ad3d6 +66227a1a67bd287dd23ad434 +66227a4967bd287dd23b2b0f +66227a68f3bbf3b2daa06e17 +66227a6a67bd287dd23b6562 +66227a6c67bd287dd23b67c3 +66227a6cf3bbf3b2daa075b8 +66227a7667bd287dd23b7553 +66227a7967bd287dd23b7e6d +66227a7b67bd287dd23b82fe +66227a7bf3bbf3b2daa08e43 +66227a7b67bd287dd23b8415 +66227a80f3bbf3b2daa093e3 +66227a84f3bbf3b2daa0a37d +66227a8767bd287dd23b990b +66227a8bf3bbf3b2daa0b09e +66227a9667bd287dd23bb4e2 +66227a9b67bd287dd23bbc53 +66227aa367bd287dd23bcd6f +66227aa467bd287dd23bcebe +66227aa4f3bbf3b2daa0e53a +66227aa5f3bbf3b2daa0e707 +66227aa567bd287dd23bd0f5 +66227ab767bd287dd23bee63 +66227ae1f3bbf3b2daa150b9 +66227afb67bd287dd23c617d +66227b04f3bbf3b2daa18bc1 +66227b3df3bbf3b2daa1efc2 +66227b7367bd287dd23d43fa +66227b7567bd287dd23d4779 +66227b7667bd287dd23d4848 +66227b7767bd287dd23d4980 +66227b8367bd287dd23d5cf8 +66227b8467bd287dd23d5dbf +66227b89f3bbf3b2daa27ca9 +66227b8967bd287dd23d6958 +66227b9ff3bbf3b2daa2a1ed +66227ba267bd287dd23d9c1d +66227ba467bd287dd23da325 +66227bcd67bd287dd23de9f9 +66227bcf67bd287dd23dedf1 +66227bd267bd287dd23df177 +66227bd8f3bbf3b2daa3062f +66227bd967bd287dd23dff2e +66227be3f3bbf3b2daa3167f +66227c0867bd287dd23e5272 +66227c0cf3bbf3b2daa3598d +66227c1c67bd287dd23e772a +66227c2967bd287dd23e904a +66227c3567bd287dd23ea756 +66227c37f3bbf3b2daa3a800 +66227c4067bd287dd23ebf12 +66227c44f3bbf3b2daa3c357 +66227c4b67bd287dd23ed205 +66227c4c67bd287dd23ed2f4 +66227c5167bd287dd23edaab +66227c57f3bbf3b2daa3e613 +66227c5af3bbf3b2daa3eecb +66227c68f3bbf3b2daa40ee6 +66227c69f3bbf3b2daa40f87 +66227c7267bd287dd23f1de3 +66227c7f67bd287dd23f314b +66227c8467bd287dd23f3bd7 +66227c8667bd287dd23f3d03 +66227c99f3bbf3b2daa469f5 +66227c9a67bd287dd23f6913 +66227cb6f3bbf3b2daa4a21e +66227cd1f3bbf3b2daa4d652 +66227cd5f3bbf3b2daa4e149 +66227cd767bd287dd23fe286 +66227ce267bd287dd23ff6e0 +66227ce567bd287dd23ffc9f +66227cee67bd287dd2400e6b +66227d3967bd287dd2409330 +66227d48f3bbf3b2daa5be23 +66227d4b67bd287dd240b358 +66227d5df3bbf3b2daa5e603 +66227d65f3bbf3b2daa5f171 +66227d6ff3bbf3b2daa6070a +66227d7167bd287dd240f98d +66227d7b67bd287dd2410a74 +66227d98f3bbf3b2daa64f8d +66227d9bf3bbf3b2daa653de +66227d9d67bd287dd24148bd +66227d9e67bd287dd24149df +66227d9ff3bbf3b2daa65ad7 +66227da1f3bbf3b2daa65e41 +66227dc7f3bbf3b2daa6a29e +66227dcbf3bbf3b2daa6aad0 +66227dce67bd287dd2419ca9 +66227dd467bd287dd241a834 +66227ddb67bd287dd241b37d +66227e1067bd287dd2421270 +66227e70f3bbf3b2daa7d369 +66227e83f3bbf3b2daa7f35e +66227e8567bd287dd242deab +66227e85f3bbf3b2daa7f4e1 +66227e8567bd287dd242def3 +66227e9667bd287dd242faca +66227e9af3bbf3b2daa81ca8 +66227e9df3bbf3b2daa826dd +66227ea167bd287dd2431114 +66227ec7f3bbf3b2daa87407 +66227eca67bd287dd2436093 +66227ecaf3bbf3b2daa8791e +66227ecbf3bbf3b2daa87990 +66227ecbf3bbf3b2daa87a5d +66227f0467bd287dd243cf92 +66227f04f3bbf3b2daa8e494 +66227f0b67bd287dd243dc2a +66227f0ff3bbf3b2daa8fb67 +66227f0f67bd287dd243e2c3 +66227f0ff3bbf3b2daa8fbed +66227f1967bd287dd243fa7b +66227f28f3bbf3b2daa92bff +66227f2cf3bbf3b2daa935e1 +66227f30f3bbf3b2daa93b4e +66227f3667bd287dd2443281 +66227f3cf3bbf3b2daa9524a +66227f4367bd287dd2444892 +66227f44f3bbf3b2daa9632f +66227f5a67bd287dd24476de +66227f9b67bd287dd244fe0d +66227f9e67bd287dd24502f0 +66227fa867bd287dd245115b +66227fc367bd287dd245458b +66227fc3f3bbf3b2daaa543a +66227fc667bd287dd2454a02 +66227fc7f3bbf3b2daaa59b9 +66227fc7f3bbf3b2daaa5bd0 +66227fd0f3bbf3b2daaa6d0d +66227fd7f3bbf3b2daaa775b +66227fd8f3bbf3b2daaa78fe +66227fda67bd287dd2457204 +66227fdbf3bbf3b2daaa7df1 +66227fdd67bd287dd24578ec +66227fe067bd287dd2457f1b +66227fe867bd287dd2458d2f +66228005f3bbf3b2daaaceef +6622800ff3bbf3b2daaae0fa +6622801367bd287dd245e61d +6622801467bd287dd245e7f5 +6622802bf3bbf3b2daab1e9c +6622802ef3bbf3b2daab2589 +6622803567bd287dd2462f19 +66228035f3bbf3b2daab333e +6622806af3bbf3b2daab9e13 +66228084f3bbf3b2daabd846 +66228086f3bbf3b2daabdb8e +6622808667bd287dd246ddd9 +6622808767bd287dd246de98 +6622808767bd287dd246df57 +662280de67bd287dd24791a7 +662280e2f3bbf3b2daac9f18 +662280fc67bd287dd247ce7d +662280fef3bbf3b2daacd877 +6622813e67bd287dd24863f9 +6622814467bd287dd2486dc4 +66228144f3bbf3b2daad6ca0 +66228160f3bbf3b2daada5fd +6622816167bd287dd248b191 +6622816167bd287dd248b1a9 +66228161f3bbf3b2daada6fb +66228178f3bbf3b2daadd929 +6622817867bd287dd248e237 +66228179f3bbf3b2daadda24 +6622818cf3bbf3b2daae05c5 +662281a967bd287dd2494941 +662281dbf3bbf3b2daaea46d +662281df67bd287dd249b7bb +6622821367bd287dd24a2e50 +66228213f3bbf3b2daaf248f +6622821367bd287dd24a2ec3 +6622821967bd287dd24a39b1 +6622822c67bd287dd24a605e +6622823667bd287dd24a77fc +6622823af3bbf3b2daaf7892 +6622824867bd287dd24a9ee5 +662282ad67bd287dd24b760e +662282adf3bbf3b2dab0764f +662282b4f3bbf3b2dab0809f +662282c5f3bbf3b2dab0ac0b +6622830e67bd287dd24c3140 +6622830f67bd287dd24c32dd +6622830f67bd287dd24c3461 +66228310f3bbf3b2dab1427e +6622831167bd287dd24c38f6 +66228315f3bbf3b2dab14d4c +66228328f3bbf3b2dab17186 +6622832967bd287dd24c68b9 +6622837267bd287dd24d0195 +6622837467bd287dd24d0555 +6622837567bd287dd24d07fa +6622837667bd287dd24d0bcf +6622838a67bd287dd24d38ac +6622839767bd287dd24d5087 +662283a8f3bbf3b2dab27a08 +662283acf3bbf3b2dab28024 +662283ac67bd287dd24d7514 +66228413f3bbf3b2dab355e6 +6622841967bd287dd24e492d +6622841c67bd287dd24e4dd3 +6622842af3bbf3b2dab38261 +6622842af3bbf3b2dab38320 +66228430f3bbf3b2dab38f54 +66228432f3bbf3b2dab3933c +66228438f3bbf3b2dab39dfa +6622843b67bd287dd24e8f21 +66228443f3bbf3b2dab3ba48 +66228444f3bbf3b2dab3bba3 +6622844467bd287dd24ea65c +6622844af3bbf3b2dab3cdf2 +6622844ff3bbf3b2dab3d669 +6622847067bd287dd24f075c +6622847f67bd287dd24f266f +6622847f67bd287dd24f2724 +6622848667bd287dd24f39af +662284bc67bd287dd24fb6d6 +662284c067bd287dd24fc63c +662284c667bd287dd24fcef6 +662284c9f3bbf3b2dab4e748 +662284edf3bbf3b2dab52e89 +662284edf3bbf3b2dab52f56 +6622851af3bbf3b2dab58bed +6622854467bd287dd250e19f +6622854567bd287dd250e352 +66228545f3bbf3b2dab5e5f4 +6622854767bd287dd250e6e0 +66228547f3bbf3b2dab5e8bf +6622856cf3bbf3b2dab6368b +6622856ff3bbf3b2dab63d77 +6622857ef3bbf3b2dab65951 +6622858e67bd287dd2516f55 +662285a4f3bbf3b2dab6a3fe +662285a567bd287dd2519e69 +662285a767bd287dd251a30c +662285ac67bd287dd251a9b4 +662285b0f3bbf3b2dab6bef9 +662285b3f3bbf3b2dab6c4eb +662285bf67bd287dd251d06f +662285c167bd287dd251d582 +662285c6f3bbf3b2dab6e8d4 +662285c7f3bbf3b2dab6e910 +662285c967bd287dd251e78b +662285d367bd287dd251fc76 +662285f967bd287dd2524654 +662285fdf3bbf3b2dab75a34 +662285fe67bd287dd25250b0 +662285fe67bd287dd25252af +6622861667bd287dd2528279 +66228617f3bbf3b2dab78be5 +66228639f3bbf3b2dab7d0a4 +6622865367bd287dd253081d +66228666f3bbf3b2dab82ab8 +66228684f3bbf3b2dab865cf +66228692f3bbf3b2dab884d0 +66228693f3bbf3b2dab88842 +662286a167bd287dd253af5e +662286a2f3bbf3b2dab8a492 +662286a967bd287dd253c02f +662286aef3bbf3b2dab8c106 +662286b7f3bbf3b2dab8d33e +662286d067bd287dd25408c1 +662286df67bd287dd2542b7e +6622871ef3bbf3b2dab9aa97 +66228721f3bbf3b2dab9b2f8 +66228722f3bbf3b2dab9b6eb +6622872367bd287dd254b352 +66228723f3bbf3b2dab9b7dd +6622872467bd287dd254b549 +66228728f3bbf3b2dab9c036 +6622872a67bd287dd254be67 +6622872df3bbf3b2dab9cbcf +6622872e67bd287dd254cb66 +6622872ef3bbf3b2dab9cddc +66228732f3bbf3b2dab9d52b +6622873267bd287dd254d622 +6622875667bd287dd25525ef +6622876c67bd287dd2554dc7 +6622876f67bd287dd255551c +6622876f67bd287dd25555e5 +66228770f3bbf3b2daba5692 +66228774f3bbf3b2daba5d86 +6622877467bd287dd2556076 +66228774f3bbf3b2daba5ef9 +6622877867bd287dd2556541 +6622877b67bd287dd2556bda +662287a467bd287dd255b849 +662287a667bd287dd255bdb5 +662287aaf3bbf3b2dabac2c6 +662287c067bd287dd255fbae +662287c767bd287dd2560b2b +662287c9f3bbf3b2dabb0b14 +662287c967bd287dd2560f32 +662287ca67bd287dd2560fb7 +662287d367bd287dd25623d8 +662287d5f3bbf3b2dabb25c5 +662287d8f3bbf3b2dabb2ac8 +662287d9f3bbf3b2dabb2bc7 +662287d967bd287dd2562fb5 +662287e7f3bbf3b2dabb4d34 +662287f6f3bbf3b2dabb6beb +66228807f3bbf3b2dabb8cc3 +66228811f3bbf3b2dabb9e10 +66228821f3bbf3b2dabbc23f +66228822f3bbf3b2dabbc405 +6622883bf3bbf3b2dabbff2a +66228844f3bbf3b2dabc121f +6622885567bd287dd25730ed +6622885e67bd287dd257442c +66228882f3bbf3b2dabc99b9 +6622888c67bd287dd257b384 +662288a767bd287dd257e94e +662288a8f3bbf3b2dabce983 +662288aa67bd287dd257f1b3 +662288ab67bd287dd257f41e +662288cd67bd287dd2583b9a +662288cf67bd287dd2584123 +662288d6f3bbf3b2dabd4158 +662288e267bd287dd2586637 +662288e367bd287dd25868d2 +662288e367bd287dd2586a29 +662288e3f3bbf3b2dabd5ea0 +662288e367bd287dd2586ac2 +662288e567bd287dd25871d9 +662288ecf3bbf3b2dabd71b4 +662288f0f3bbf3b2dabd7823 +662288f167bd287dd258895e +662288f267bd287dd2588a9e +662288f367bd287dd2588d51 +662288f4f3bbf3b2dabd7fe6 +662288f567bd287dd2589265 +662288fdf3bbf3b2dabd9331 +662288fe67bd287dd258a738 +66228912f3bbf3b2dabdbc31 +6622891567bd287dd258dd02 +6622891567bd287dd258dd8f +66228918f3bbf3b2dabdcbb3 +66228918f3bbf3b2dabdcc13 +66228929f3bbf3b2dabdeef1 +6622892bf3bbf3b2dabdf4e4 +6622892cf3bbf3b2dabdf599 +6622892df3bbf3b2dabdf680 +6622892ff3bbf3b2dabdfb3f +6622893167bd287dd2590ec4 +6622893af3bbf3b2dabe1020 +66228942f3bbf3b2dabe1fec +66228943f3bbf3b2dabe2061 +6622895f67bd287dd2596d9a +66228970f3bbf3b2dabe8043 +66228973f3bbf3b2dabe87c1 +6622897b67bd287dd259a76e +6622897f67bd287dd259ad9b +6622898167bd287dd259b2a4 +66228982f3bbf3b2dabea58d +66228984f3bbf3b2dabeab16 +6622898467bd287dd259bb1f +66228986f3bbf3b2dabeaf93 +6622899bf3bbf3b2dabee0e1 +662289af67bd287dd25a16bd +662289ba67bd287dd25a2cec +662289bbf3bbf3b2dabf2673 +662289c267bd287dd25a3afe +662289ce67bd287dd25a593d +662289d3f3bbf3b2dabf55ff +662289d467bd287dd25a68f5 +662289ddf3bbf3b2dabf69c1 +662289e9f3bbf3b2dabf84ea +662289e9f3bbf3b2dabf85b5 +662289eaf3bbf3b2dabf86dd +662289eb67bd287dd25a98b3 +662289ebf3bbf3b2dabf88d5 +662289ecf3bbf3b2dabf8976 +662289ecf3bbf3b2dabf8a8e +662289ed67bd287dd25a9b8c +662289f267bd287dd25aa83d +662289faf3bbf3b2dabfa621 +662289fd67bd287dd25abf5d +662289fef3bbf3b2dabfb146 +662289fff3bbf3b2dabfb21b +66228a0067bd287dd25ac3c4 +66228a0667bd287dd25ad30e +66228a06f3bbf3b2dabfc31d +66228a0967bd287dd25ad9b1 +66228a09f3bbf3b2dabfc7b4 +66228a0967bd287dd25ada58 +66228a15f3bbf3b2dabfe383 +66228a19f3bbf3b2dabfef50 +66228a2567bd287dd25b1569 +66228a2667bd287dd25b1797 +66228a2df3bbf3b2dac014ec +66228a2df3bbf3b2dac01573 +66228a2e67bd287dd25b2721 +66228a30f3bbf3b2dac01ab6 +66228a3067bd287dd25b2a1d +66228a3167bd287dd25b2a90 +66228a31f3bbf3b2dac01d6b +66228a31f3bbf3b2dac01e2d +66228a33f3bbf3b2dac01fc7 +66228a3467bd287dd25b2ecf +66228a35f3bbf3b2dac02394 +66228a3767bd287dd25b3823 +66228a5467bd287dd25b79f6 +66228a5867bd287dd25b84ed +66228a5af3bbf3b2dac07055 +66228a5b67bd287dd25b87e8 +66228a5e67bd287dd25b8fc2 +66228a5ff3bbf3b2dac07ca6 +66228a6067bd287dd25b9362 +66228a6167bd287dd25b94fc +66228a62f3bbf3b2dac080db +66228a62f3bbf3b2dac081c4 +66228a80f3bbf3b2dac0bc27 +66228a8267bd287dd25bd7f8 +66228a86f3bbf3b2dac0c869 +66228a8867bd287dd25be7c4 +66228a88f3bbf3b2dac0cfa5 +66228a9bf3bbf3b2dac0f57f +66228a9d67bd287dd25c1433 +66228a9ef3bbf3b2dac1002a +66228a9f67bd287dd25c184a +66228aa167bd287dd25c1b11 +66228aa167bd287dd25c1b88 +66228aa2f3bbf3b2dac10589 +66228aa4f3bbf3b2dac108a6 +66228aa867bd287dd25c28de +66228aab67bd287dd25c2e39 +66228aabf3bbf3b2dac11d3d +66228ac6f3bbf3b2dac1582e +66228ad467bd287dd25c877d +66228ad9f3bbf3b2dac17ce8 +66228af767bd287dd25cd734 +66228afa67bd287dd25cd9de +66228afb67bd287dd25cdc30 +66228afc67bd287dd25cdcaa +66228afe67bd287dd25ce26a +66228b1af3bbf3b2dac20f16 +66228b1d67bd287dd25d291d +66228b1f67bd287dd25d2cb1 +66228b1f67bd287dd25d2d2e +66228b3af3bbf3b2dac25115 +66228b3f67bd287dd25d7a6e +66228b3f67bd287dd25d7a8e +66228b40f3bbf3b2dac25dc5 +66228b4567bd287dd25d856b +66228b45f3bbf3b2dac266d7 +66228b49f3bbf3b2dac26d35 +66228b4a67bd287dd25d8e28 +66228b4bf3bbf3b2dac2707b +66228b4c67bd287dd25d9257 +66228b4cf3bbf3b2dac2720c +66228b4f67bd287dd25d9991 +66228b50f3bbf3b2dac27a76 +66228b5067bd287dd25d9d40 +66228b50f3bbf3b2dac27c21 +66228b51f3bbf3b2dac27d77 +66228b52f3bbf3b2dac27eca +66228b53f3bbf3b2dac27fc5 +66228b5367bd287dd25da569 +66228b5f67bd287dd25dbef1 +66228b62f3bbf3b2dac29cc7 +66228b63f3bbf3b2dac29fb9 +66228b67f3bbf3b2dac2a642 +66228b6af3bbf3b2dac2ab31 +66228b6d67bd287dd25ddedd +66228b70f3bbf3b2dac2b879 +66228b7a67bd287dd25dfb82 +66228b7c67bd287dd25dfea9 +66228b8567bd287dd25e18be +66228b8867bd287dd25e1d64 +66228b88f3bbf3b2dac2eea6 +66228b8ff3bbf3b2dac303f0 +66228b9167bd287dd25e3648 +66228b93f3bbf3b2dac30be3 +66228b94f3bbf3b2dac30dbf +66228b9567bd287dd25e3f2b +66228b95f3bbf3b2dac31085 +66229d4ae4006fc1a1e75acd +66229d4ae4006fc1a1e75ace +66229d4ae4006fc1a1e75acf +6622b1d389d2ff9bbe5630fe +6622b1d389d2ff9bbe5630fa +6622b1d389d2ff9bbe5630ff +6622bae189d2ff9bbe714c0b +6622bc4489d2ff9bbe75764b +6622bc4489d2ff9bbe757655 +6622be0889d2ff9bbe7a9c1f +6622c05e89d2ff9bbe80fa12 +6622c13c1c88add6265b6925 +6622c196278af860785d904a +6622c1ae278af860785dcda6 +6622c1b9278af860785de87d +6622c1ed278af860785e63d5 +6622c238278af860785f0f8c +6622c242278af860785f2804 +6622c243278af860785f2bbf +6622c246278af860785f3304 +6622c248278af860785f35f9 +6622c24a278af860785f3a47 +6622c254278af860785f52fb +6622c27d278af860785fb33b +6622c280278af860785fbbda +6622c293278af860785fe8b9 +6622c29b278af860785ffb5c +6622c2d0278af86078607630 +6622c344278af860786186c9 +6622c348278af86078618f2c +6622c34e278af86078619f02 +6622c35e278af8607861ca22 +6622c372278af8607862010a +6622c392278af8607862531c +6622c396278af86078625ac2 +6622c39a278af86078626513 +6622c3ac278af86078628fc8 +6622c3ac278af86078628fbe +6622c3ac278af86078628fc9 +6622c3ac278af86078628fca +6622c3ec278af86078632adb +6622c3fd278af860786350c7 +6622c401278af86078635814 +6622c414278af860786383fa +6622c41d278af86078639aac +6622c466278af86078644af8 +6622c468278af860786452b8 +6622c46b278af86078645cf9 +6622c46c278af86078645e7c +6622c46d278af86078645fd5 +6622c47c278af8607864824a +6622c47d278af86078648562 +6622c4a4278af8607864dd46 +6622c584278af8607866f19d +6622c585278af8607866f2ea +6622c588278af8607866fb75 +6622c59a278af8607867257a +6622c59b278af860786728ac +6622c5c2278af86078677bfc +6622c5c4278af86078677d79 +6622c5db278af8607867af8f +6622c5db278af8607867b0df +6622c5dc278af8607867b268 +6622c5df278af8607867b901 +6622c5f5278af8607867e4f5 +6622c5f7278af8607867e97a +6622c633278af86078685ee6 +6622c666278af8607868c458 +6622c667278af8607868c7c8 +6622c667278af8607868c7d7 +6622c687278af86078690bfc +6622c6ff278af860786a0a87 +6622c703278af860786a1323 +6622c720278af860786a5485 +6622c74e278af860786abcb8 +6622c766278af860786af54a +6622c76b278af860786b0304 +6622c76c278af860786b03de +6622c76c278af860786b049d +6622c76c278af860786b0574 +6622c9ce278af8607870364c +6622c9d2278af86078703ce5 +6622c9d9278af860787048a6 +6622c9db278af86078704cc2 +6622c9ee278af86078707804 +6622c9f0278af86078707b6a +6622c9f7278af86078708f32 +6622c9ff278af8607870a11c +6622ca52278af860787157a5 +6622cab3278af86078722024 +6622cab8278af86078722a36 +6622cabe278af860787236ba +6622cac0278af86078723a15 +6622cac0278af86078723b79 +6622cda6278af86078781039 +6622cda8278af8607878144c +6622cda9278af860787815f7 +6622cda9278af860787816f1 +6622cdaa278af860787817bf +6622cdda278af86078787e5f +6622cdf1278af8607878af94 +6622cdf2278af8607878b173 +6622ce4b278af86078794555 +6622ce4d278af86078794b6a +6622ce73278af860787999a3 +6622ce9d278af8607879eb66 +6622ced2278af860787a5755 +6622cf03278af860787abc11 +6622cf04278af860787abdab +6622cf04278af860787abf72 +6622cf05278af860787ac0e2 +6622cf06278af860787ac289 +6622cf49278af860787b3fd6 +6622cf89278af860787bc07e +6622cfac278af860787c0656 +6622cfb6278af860787c1a4e +6622cfb6278af860787c1a73 +6622cfb6278af860787c1a7c +6622cfb9278af860787c1e35 +6622cfc0278af860787c2cc0 +6622cfd1278af860787c4b5a +6622cfd9278af860787c5bc0 +6622cff3278af860787c91ea +6622cffd278af860787cab54 +6622d001278af860787cb20f +6622d002278af860787cb3d7 +6622d114278af860787edc96 +6622d116278af860787ee18d +6622d11c278af860787eeb4a +6622d11d278af860787eebef +6622d11d278af860787eeccd +6622d2cd278af8607882355c +6622d2d0278af86078823a4b +6622d2d3278af86078823dfc +6622d2d5278af860788241e6 +6622d2db278af86078824ab5 +6622d2dc278af86078824cdb +6622d2dd278af86078824f8f +6622d2de278af8607882514d +6622d303278af8607882994a +6622d318278af8607882c09d +6622d3bf278af8607883ee98 +6622d3c0278af8607883eed1 +6622d3c0278af8607883ef1a +6622d3c0278af8607883ef83 +6622d3c0278af8607883f00e +6622d3f9278af86078845d75 +6622d3fc278af86078846208 +6622d430278af8607884be7b +6622d431278af8607884c0f1 +6622d45a278af86078850bd1 +6622d491278af860788565d1 +6622d492278af8607885671f +6622d4ac278af860788597a0 +6622d4ad278af86078859930 +6622d5a7278af860788782c1 +6622d5a8278af860788782ce +6622d5a8278af860788782d5 +6622d5a8278af860788782e0 +6622d5a8278af860788782ee +6622d5fd278af8607888246a +6622d5fe278af86078882652 +6622d600278af86078882a15 +6622d60e278af8607888450b +6622d618278af8607888589d +6622d62b278af86078887b8e +6622d62c278af86078887cd2 +6622d62c278af86078887d6c +6622d62c278af86078887db7 +6622d62c278af86078887dfd +6622d62e278af860788880b0 +6622d6f6278af860788a0fbe +6622d6f6278af860788a0fd2 +6622d6f7278af860788a1073 +6622d70e278af860788a3a12 +6622d70e278af860788a3a1d +6622d70f278af860788a3a45 +6622d71e278af860788a5657 +6622d7ff278af860788bf5c3 +6622d7ff278af860788bf619 +6622d7ff278af860788bf6c7 +6622d929278af860788e1ccf +6622d940278af860788e48cb +6622d945278af860788e50de +6622d945278af860788e517b +6622d946278af860788e5296 +6622d96e278af860788e9f3c +6622d9ab278af860788f1447 +6622da6c278af860789068e7 +6622da74278af860789075e5 +6622da74278af860789076fb +6622da75278af860789078e8 +6622da75278af860789079a0 +6622dbef278af8607892f6b5 +6622dc35278af86078936003 +6622dc36278af86078936255 +6622dc39278af86078936654 +6622dc3d278af86078936c5a +6622dc40278af86078937194 +6622ddbd278af8607895fbf9 +6622ddc2278af860789603d5 +6622ddc5278af860789607c6 +6622ddca278af860789611b8 +6622ddcb278af86078961432 +6622de14278af86078969df0 +6622de16278af86078969fd0 +6622dea1278af86078978e18 +6622dea3278af86078979255 +6622dea4278af86078979365 +6622ded0278af8607897da9c +6622ded1278af8607897db79 +6622ded2278af8607897de34 +6622ded3278af8607897e09e +6622df7a278af8607898ed33 +6622df7b278af8607898ee16 +6622df7e278af8607898f362 +6622dfce278af86078997d5f +6622dfce278af86078997d92 +6622dffc278af8607899cc5b +6622dffe278af8607899cfcc +6622e02b278af860789a17d9 +6622e05b278af860789a6f4b +6622e08e278af860789ac110 +6622e0d7278af860789b3aa5 +6622e0f6278af860789b6c49 +6622e0f8278af860789b6f46 +6622e0f8278af860789b70c6 +6622e0f9278af860789b71c7 +6622e0f9278af860789b728a +6622e100278af860789b7cec +6622e10b278af860789b8ee1 +6622e113278af860789b9efa +6622e11b278af860789baa86 +6622e188278af860789c5f86 +6622e199278af860789c7926 +6622e1db278af860789cdde7 +6622e1dd278af860789ce223 +6622e1e6278af860789cf0a1 +6622e204278af860789d192d +6622e2a7278af860789e0bc2 +6622e2ab278af860789e1072 +6622e2ad278af860789e13e7 +6622e2af278af860789e1566 +6622e2ff278af860789e9476 +6622e30b278af860789ea5ed +6622e311278af860789eafa6 +6622e314278af860789eb36b +6622e315278af860789eb523 +6622e329278af860789ed624 +6622e334278af860789ee679 +6622e368278af860789f395b +6622e3db278af860789feaaf +6622e3de278af860789fee43 +6622e3e6278af860789ff9dc +6622e714278af86078a4b6b7 +6622e71d278af86078a4c1fa +6622e720278af86078a4c5d1 +6622e72c278af86078a4d5a9 +6622e72f278af86078a4d993 +6622e754278af86078a50fd2 +6622e793278af86078a56be8 +6622e7ed278af86078a5f20c +6622e806278af86078a61713 +6622e8bf278af86078a72469 +6622e8c3278af86078a72a66 +6622e8c9278af86078a738d9 +6622e8f9278af86078a7819a +6622e8fa278af86078a78216 +6622e8fa278af86078a782b4 +6622e8fa278af86078a782ff +6622e943278af86078a7eeb0 +6622e94a278af86078a7f8c9 +6622e9bc278af86078a8aef5 +6622e9c0278af86078a8b4d1 +6622e9c6278af86078a8bd36 +6622e9e5278af86078a8f0be +6622ea0c278af86078a92bab +6622ea23278af86078a94d0b +6622ea81278af86078a9db04 +6622ea9d278af86078aa0571 +6622eb4f278af86078ab21c7 +6622eb52278af86078ab2567 +6622eb53278af86078ab2765 +6622eb55278af86078ab2ab9 +6622ec13278af86078ac4f92 +6622ec13278af86078ac4fb8 +6622ec14278af86078ac5002 +6622ec14278af86078ac5081 +6622ec14278af86078ac50f2 +6622ed74278af86078ae51c8 +6622ed7f278af86078ae627d +6622edbb278af86078aec305 +6622edee278af86078af0e35 +6622ee1f278af86078af585a +6622eece278af86078b0534e +6622eed6278af86078b05d5e +6622eeea278af86078b07aaa +6622eeeb278af86078b07bfb +6622eeec278af86078b07d51 +6622eeed278af86078b07f67 +6622eeee278af86078b080d0 +6622ef63278af86078b12308 +6622ef7a278af86078b142ec +6622ef83278af86078b1501a +6622efc5278af86078b1b3ea +6622efc5278af86078b1b493 +6622efef278af86078b1f155 +6622f018278af86078b22e0f +6622f02d278af86078b24f65 +6622f02d278af86078b24f77 +6622f02d278af86078b25059 +6622f051278af86078b28276 +6622f052278af86078b2845f +6622f052278af86078b284a2 +6622f057278af86078b28a4f +6622f057278af86078b28a9b +6622f05b278af86078b291c4 +6622f096278af86078b2e710 +6622f0cf278af86078b33fd8 +6622f10b278af86078b39962 +6622f146278af86078b3f14e +6622f178278af86078b43741 +6622f179278af86078b43a26 +6622f179278af86078b43aa6 +6622f17a278af86078b43b09 +6622f17e278af86078b4413b +6622f181278af86078b444a4 +6622f181278af86078b44516 +6622f18b278af86078b453e8 +6622f192278af86078b45c5d +6622f1bf278af86078b49b11 +6622f1c8278af86078b4a88e +6622f1f7278af86078b4eb92 +6622f23f278af86078b55334 +6622f24d278af86078b564d9 +6622f24e278af86078b566b0 +6622f24f278af86078b5687a +6622f275278af86078b59a09 +6622f2ac278af86078b5e55a +6622f2b1278af86078b5edbf +6622f2f0278af86078b644bd +6622f32c278af86078b698e6 +6622f366278af86078b6ebfb +6622f3bd278af86078b76bec +6622f3be278af86078b76ead +6622f3c0278af86078b770cb +6622f3c3278af86078b77473 +6622f3c5278af86078b7768a +6622f3c7278af86078b7795a +6622f3ec278af86078b7b272 +6622f413278af86078b7ebd4 +6622f45b278af86078b85caa +6622f494278af86078b8b091 +6622f4d2278af86078b90b8d +6622f501278af86078b95021 +6622f506278af86078b956e8 +6622f507278af86078b957a5 +6622f50b278af86078b95c31 +6622f50c278af86078b95d53 +6622f50c278af86078b95d66 +6622f50e278af86078b962b7 +6622f512278af86078b9667d +6622f51a278af86078b97178 +6622f51c278af86078b974bc +6622f543278af86078b9ae42 +6622f57f278af86078ba0d1d +6622f5c2278af86078ba7083 +6622f5f8278af86078bac023 +6622f632278af86078bb1ba6 +6622f66e278af86078bb7576 +6622f6b4278af86078bbdb12 +6622f6fd278af86078bc4041 +6622f70e278af86078bc58b2 +6622f711278af86078bc5c40 +6622f713278af86078bc5f5e +6622f715278af86078bc621d +6622f716278af86078bc6380 +6622f721278af86078bc75f1 +6622f74b278af86078bcb4ab +6622f75f278af86078bcd6a5 +6622f79a278af86078bd2feb +6622f7da278af86078bd8eb8 +6622f7e4278af86078bd9c71 +6622f7ed278af86078bda964 +6622f7ef278af86078bdac9b +6622f818278af86078bde40a +6622f84c278af86078be2c52 +6622f85c278af86078be40c0 +6622f85e278af86078be44ab +6622f860278af86078be4919 +6622f862278af86078be4bba +6622f872278af86078be60f5 +6622f874278af86078be629d +6622f8ca278af86078bee19d +6622f8cb278af86078bee281 +6622f91b278af86078bf581a +6622f91e278af86078bf5c71 +6622f92a278af86078bf6f19 +6622f92b278af86078bf71a2 +6622f92d278af86078bf74e0 +6622fa19278af86078c0d9a3 +6622fa1d278af86078c0debd +6622fa20278af86078c0e4cf +6622fa23278af86078c0e9a6 +6622fa4e278af86078c12859 +6622faae278af86078c1b6e9 +6622faaf278af86078c1b843 +6622fab1278af86078c1bb2f +6622fab2278af86078c1bd1c +6622fab4278af86078c1c02c +6622fabf278af86078c1d073 +6622fac1278af86078c1d428 +6622fb95278af86078c30c5f +6622fb9c278af86078c315e9 +6622fbc3278af86078c357ff +6622fbc4278af86078c35915 +6622fbc6278af86078c35b63 +6622fbc7278af86078c35ccd +6622fc03278af86078c3b246 +6622fc05278af86078c3b49f +6622fc0a278af86078c3bc07 +6622fc0b278af86078c3be96 +6622fc0d278af86078c3c16a +6622fc41278af86078c40fef +6622fc7c278af86078c4664c +6622fc7f278af86078c46b17 +6622fc82278af86078c46f45 +6622fc85278af86078c473f6 +6622fc87278af86078c4779b +6622fdff278af86078c6a0bd +6622fdff278af86078c6a1e5 +6622fe01278af86078c6a338 +6622fe02278af86078c6a4c2 +6622fe03278af86078c6a64b +6622fe42278af86078c6fc7f +6622fed0278af86078c7cace +6622fed1278af86078c7cc6c +6622ff07278af86078c81771 +6622ff85278af86078c8c2dd +6622ff86278af86078c8c3d6 +6622ffca278af86078c926ea +6622ffca278af86078c9279c +6622ffcb278af86078c92974 +6622ffcc278af86078c92a33 +6622ffcd278af86078c92ae2 +66230050278af86078c9e2c7 +66231a7d7f558d001f94017d +66231a7d7f558d001f940183 +66231a7d7f558d001f94017e +66231a7d7f558d001f940184 +6623210d7f558d001f9f78c1 +6623210d7f558d001f9f78c2 +662324c27f558d001fa7039d +66232b2f7f558d001fba4640 +66232b2f7f558d001fba463c +66232b2f7f558d001fba4641 +66232dfb7f558d001fc2b155 +662337157f558d001fdb286c +6623371e7f558d001fdb4217 \ No newline at end of file diff --git a/package.json b/package.json index 3569e8b..878caff 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,9 @@ "lint": "eslint --ext .ts src/**", "format": "eslint --ext .ts src/** --fix", "initdata": "ts-node src/initdata.ts", + "repairdata": "ts-node -r tsconfig-paths/register src/repairdata.ts", + "repairdata2": "ts-node -r tsconfig-paths/register src/repairdata2.ts", + "repairredis": "ts-node -r tsconfig-paths/register src/repairredis.ts", "test:watch": "jest --watch", "test": "jest" }, diff --git a/src/controllers/game.controller.ts b/src/controllers/game.controller.ts index 46304e0..63d14f5 100644 --- a/src/controllers/game.controller.ts +++ b/src/controllers/game.controller.ts @@ -375,7 +375,17 @@ class GameController extends BaseController { // updateData['$inc']['maxNoChestCount'] = step // } // } - await ActivityGame.updateOne({ user: user.id, activity: user.activity }, updateData) + let saveRes = await ActivityGame.findOneAndUpdate( + { user: user.id, activity: user.activity, tickets: { $gte: step } }, + updateData, + { + new: false, + upsert: false, + includeResultMetadata: true, + }, + ) + // TODO:: check saveRes + console.log(saveRes) await updateRankScore({ user: user.id, score: score, diff --git a/src/models/DeleteRecord.ts b/src/models/DeleteRecord.ts new file mode 100644 index 0000000..eb48212 --- /dev/null +++ b/src/models/DeleteRecord.ts @@ -0,0 +1,20 @@ +import { dbconn } from 'decorators/dbconn' +import { getModelForClass, index, modelOptions, mongoose, prop } from '@typegoose/typegoose' +import { Severity } from '@typegoose/typegoose/lib/internal/constants' +import { BaseModule } from './Base' +/** + * 宝箱券 + */ +@dbconn() +@index({ type: 1 }, { unique: false }) +@modelOptions({ + schemaOptions: { collection: 'delete_record', timestamps: true }, + options: { allowMixed: Severity.ALLOW }, +}) +export class DeleteRecordClass extends BaseModule { + @prop() + public type: string + @prop({ type: mongoose.Schema.Types.Mixed }) + public data: any +} +export const DeleteRecord = getModelForClass(DeleteRecordClass, { existingConnection: DeleteRecordClass['db'] }) diff --git a/src/repairdata.ts b/src/repairdata.ts new file mode 100644 index 0000000..a8364e1 --- /dev/null +++ b/src/repairdata.ts @@ -0,0 +1,96 @@ +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 { VoucherRecord } from 'models/VoucherRecord' +import { NFTHolderRecord } from 'models/NFTHodlerRecord' +import { TicketRecord } from 'models/TicketRecord' +const db = mongoose.connection + +;(async () => { + try { + await mongoose.connect(process.env.DB_MAIN) + let chests = await ActivityChest.find({}) + // 过滤掉箱子码开出来的箱子 + console.log('箱子总数: ', chests.length) + let voucherChestSet = new Set() + let voucherRecords = await VoucherRecord.find({ status: 9 }) + for (let record of voucherRecords) { + if (record.chests.length > 0) { + voucherChestSet.add(record.chests[0]) + } + } + let chestsLeft = [] + for (let chest of chests) { + if (!voucherChestSet.has(chest.id)) { + chestsLeft.push(chest) + } + } + console.log('过滤掉箱子码开出来的箱子: ', voucherChestSet.size, '剩余: ', chestsLeft.length) + // 过滤掉正常合作伙伴nft holeder的箱子 + let nftHolderRecords = await NFTHolderRecord.find({}) + let nftHolderChestSet = new Set() + for (let record of nftHolderRecords) { + if (record.rewards.length > 0) { + nftHolderChestSet.add(record.rewards[0]) + } + } + let chestsLeft2 = [] + for (let chest of chestsLeft) { + if (!nftHolderChestSet.has(chest.id)) { + chestsLeft2.push(chest) + } + } + console.log('过滤掉正常NFT holder记录的箱子: ', nftHolderChestSet.size, '剩余: ', chestsLeft2.length) + // 根据探索记录时间和箱子生成时间过滤正常的箱子 + let ticketRecords = await TicketRecord.find({ score: { $lt: 0 } }) + let exploreChestSet = new Set() + for (let ticketRecord of ticketRecords) { + // query chest createAt between ticketRecord.createAt and ticketRecord.createAt - 1 second + let total = Math.abs(ticketRecord.score) + let chestArr = [] + for (let chest of chestsLeft2) { + if ( + chest.user === ticketRecord.user && + // @ts-ignore + chest.createdAt < ticketRecord.createdAt && + // @ts-ignore + chest.createdAt > ticketRecord.createdAt - 1000 + ) { + chestArr.push(chest) + } + } + // 有限保留已开过和品质高的箱子 + chestArr.sort((a, b) => { + return b.status - a.status + }) + let count = 0 + for (let chest of chestArr) { + if (count >= total) { + break + } + exploreChestSet.add(chest.id) + count++ + } + } + let chestsLeft3 = [] + for (let chest of chestsLeft2) { + if (!exploreChestSet.has(chest.id)) { + chestsLeft3.push(chest) + } + } + console.log(chestsLeft3.length) + console.log('过滤掉探索获得的箱子: ', exploreChestSet.size, '剩余: ', chestsLeft3.length) + let file = require('fs') + let ids = chestsLeft3.map(chest => chest.id) + file.writeFileSync('initdatas/chest_id.txt', ids.join('\n')) + + console.log('Finished repair box data in the database') + } catch (e) { + console.log(e) + } + process.exit(0) +})() diff --git a/src/repairdata2.ts b/src/repairdata2.ts new file mode 100644 index 0000000..5458cd8 --- /dev/null +++ b/src/repairdata2.ts @@ -0,0 +1,123 @@ +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) +})() diff --git a/src/repairredis.ts b/src/repairredis.ts new file mode 100644 index 0000000..2210ac7 --- /dev/null +++ b/src/repairredis.ts @@ -0,0 +1,94 @@ +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 totalKey = 'uaw_activity:score' +const keyInvite = `uaw_activity:invite` + +const updateRedis = async (activity, user, score) => { + await updateRank(totalKey, score, user) +} + +const updateRedisInvite = async (activity, sourceUser, user, score) => { + await updateRankInvite(keyInvite, parseInt(score * RANK_SCORE_SCALE + ''), `${sourceUser}_${user}`) +} + +const updateRedis2 = (key, vals) => { + return new Promise((resolve, reject) => { + new ZRedisClient().pub.zadd(key, vals, function (err, res) { + if (err) { + reject(err) + } else { + resolve(res) + } + }) + }) +} + +;(async () => { + return false + try { + let records = await ScoreRecord.aggregate([{ $group: { _id: '$user', count: { $sum: '$score' } } }]) + console.time('first') + // _id, count + console.log('records: ', records.length) + let opts = { url: process.env.REDIS } + new ZRedisClient(opts) + let vals = [] + for (let i = 0, l = records.length; i < l; i++) { + vals.push(records[i].count * 100 + 1 - Date.now() / 1000 / 10000000000) + vals.push(records[i]._id) + if (i++ % 1000 === 0) { + await updateRedis2(totalKey, vals) + vals.length = 0 + } + } + if (vals.length > 0) { + await updateRedis2(totalKey, vals) + } + console.timeEnd('first') + let records2 = await ScoreRecord.aggregate([ + { $match: { type: 'invite_rebate' } }, + { + $group: { + _id: { + user: '$user', + from: '$data.fromUser', + }, + count: { $sum: '$score' }, + }, + }, + ]) + + console.time('second') + // _id, count + console.log('records2: ', records2.length) + let vals2 = [] + for (let i = 0, l = records.length; i < l; i++) { + vals2.push(records[i].count * 100) + vals2.push(`${records[i]._id.from}_${records[i]._id.user}`) + if (i++ % 1000 === 0) { + await updateRedis2(keyInvite, vals2) + vals2.length = 0 + } + } + if (vals2.length > 0) { + await updateRedis2(keyInvite, vals2) + } + console.timeEnd('second') + } catch (e) { + console.log(e) + } + console.log('end') + process.exit(0) +})() diff --git a/src/services/rank.svr.ts b/src/services/rank.svr.ts index f8c144f..c56be6d 100644 --- a/src/services/rank.svr.ts +++ b/src/services/rank.svr.ts @@ -68,7 +68,7 @@ export const updateRankScore = async ({ * @param score * @param member */ -const updateRank = async (key: string, score: number, member: string) => { +export const updateRank = async (key: string, score: number, member: string) => { let scoreSaved = (await new ZRedisClient().zscore(key, member)) + '' if (scoreSaved) { scoreSaved = scoreSaved.substring(0, scoreSaved.indexOf('.')) @@ -76,10 +76,12 @@ const updateRank = async (key: string, score: number, member: string) => { let scoreOld = parseInt(scoreSaved || '0') score = score * RANK_SCORE_SCALE + scoreOld const scoreToSave = score + 1 - Date.now() / 1000 / 10000000000 + let vals = ['1', '2'] + new ZRedisClient().pub.zadd(...vals) await new ZRedisClient().zadd(key, scoreToSave, member) } -const updateRankInvite = async (key: string, score: number, member: string) => { +export const updateRankInvite = async (key: string, score: number, member: string) => { await new ZRedisClient().zincrby(key, score, member) }