shawenguan 1 rok temu
rodzic
commit
5b82629e17
2 zmienionych plików z 94 dodań i 35 usunięć
  1. 64 5
      Scripts/wubian/wubianFirstGrab.js
  2. 30 30
      Scripts/wubian/wubianHelper.js

+ 64 - 5
Scripts/wubian/wubianFirstGrab.js

@@ -22,6 +22,8 @@ const WuBianConstKey = {
     FirstGoodsId: 'WubianFirstGoodsId',
     FirstGoodsName: 'WubianFirstGoodsName',
     CreateFirstOrderData: 'WubianCreateFirstOrderData',
+    FirstGrabConcurrentMode: 'WubianFirstGrabConcurrentMode',
+    FirstGrabRunsPerSecond: 'WubianFirstGrabRunsPerSecond',
 };
 
 const gUserAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Html5Plus/1.0 (Immersed/20) uni-app`;
@@ -42,6 +44,8 @@ const gCommonHeaders = {
 
 let gRetBody;
 
+let gFirstGrabResultList = [];
+
 async function Main() {
     if (magicJS.isStrictRequest) {
         magicJS.checkRecordRequestBody();
@@ -89,12 +93,55 @@ async function tryFirstGrab() {
     let userHashId = getUserHashId();
     let artData = await getWillFirstArtData();
     if (artData) {
-        // let retPreOrderInfo = await doConfirmArtInfo(artData.artId);
-        let retOrderData = await doCreateFirstOrder(userHashId, artData.artId, 1, artData.price);
-        if (retOrderData.code == 200) {
-            magicJS.notification.appendNotifyInfo(`🎉抢购首发产品[${artData.title}]成功`);
+        let nRuns = getRunsPreSecond();
+        let ctrlMillSec = 1000 / nRuns;
+        let isConcurrentExcute = isConcurrentMode();
+
+        if (isConcurrentExcute) {
+            for (let n = 0; n < nRuns; n++) {
+                let startTime = Date.now();
+                // let retPreOrderInfo = await doConfirmArtInfo(artData.artId);
+                doCreateFirstOrder(userHashId, artData.artId, 1, artData.price);
+                let costTime = Date.now() - startTime;
+                if (costTime < ctrlMillSec) {
+                    await magicJS.utils.sleep(ctrlMillSec - costTime);
+                }
+            }
+            let nSuccCount = 0;
+            let nFailCount = 0;
+            for (let retData of gFirstGrabResultList) {
+                if (retData && retData.code == 200) {
+                    nSuccCount += 1;
+                } else {
+                    nFailCount += 1;
+                    magicJS.logger.info(`抢购失败原因:${retData.msg}`);
+                }
+            }
+            let tipsText = `并发模式抢购首发产品[${artData.title}],执行结果如下:\n`;
+            if (nSuccCount > 0) {
+                tipsText = `🎉并发模式抢购首发产品[${artData.title}]成功,执行结果如下:\n`;
+            } else {
+                tipsText = `❌并发模式抢购首发产品[${artData.title}]失败,执行结果如下:\n`;
+            }
+            tipsText += `成功兑换次数:${nSuccCount}\n`;
+            tipsText += `失败兑换次数:${nFailCount}\n`;
+            tipsText += `未知结果次数:${1 * nRuns - nSuccCount - nFailCount}\n`;
+            magicJS.notification.appendNotifyInfo(tipsText);
         } else {
-            magicJS.notification.appendNotifyInfo(`❌抢购首发产品[${artData.title}]失败,原因:${retOrderData.msg}`);
+            for (let n = 0; n < nRuns; n++) {
+                let startTime = Date.now();
+                // let retPreOrderInfo = await doConfirmArtInfo(artData.artId);
+                let retOrderData = await doCreateFirstOrder(userHashId, artData.artId, 1, artData.price);
+                if (retOrderData.code == 200) {
+                    magicJS.notification.appendNotifyInfo(`🎉抢购首发产品[${artData.title}]成功`);
+                } else {
+                    magicJS.notification.appendNotifyInfo(`❌抢购首发产品[${artData.title}]失败,原因:${retOrderData.msg}`);
+                }
+                let costTime = Date.now() - startTime;
+                if (costTime < ctrlMillSec) {
+                    await magicJS.utils.sleep(ctrlMillSec - costTime);
+                }
+            }
         }
     } else {
         magicJS.logger.error(`不存在匹配的首发产品`);
@@ -112,6 +159,17 @@ function getWillArtId() {
     return artId;
 }
 
+
+function isConcurrentMode() {
+    let flag = magicJS.data.read(WuBianConstKey.FirstGrabConcurrentMode, true);
+    return flag;
+}
+
+function getRunsPreSecond() {
+    let runs = magicJS.data.read(WuBianConstKey.FirstGrabRunsPerSecond, 5);
+    return runs;
+}
+
 async function getWillFirstArtData() {
     let indexName = getWillArtIndexName();
     let artId = getWillArtId();
@@ -244,6 +302,7 @@ async function doCreateFirstOrder(userHashId, artHashId, num = 1, price = 0) {
         try {
             let rspData = response.body;
             magicJS.logger.info(`rspData=${JSON.stringify(rspData)}`);
+            gFirstGrabResultList.push(rspData);
             return rspData;
         } catch (e) {
             magicJS.logger.error(e);

+ 30 - 30
Scripts/wubian/wubianHelper.js

@@ -492,36 +492,36 @@ function handleFirstArtList() {
     }
     */
 
-    let result = {
-        "code": 200,
-        "data": {
-            "total": 1,
-            "next": 0,
-            "list": [
-                {
-                    "category": 1,
-                    "coverImage": "",
-                    "refreshTime": 1725881400,
-                    "count": 10000,
-                    "type": 1,
-                    "title": "星链计划",
-                    "avatar": "/uploads/20240830/c18be0bb7951859b97a7a2afba9d33a2.jpg",
-                    "image": "/uploads/20240909/0c5d20baa4c00a3390b131b84bf8d592.jpg",
-                    "tagList": [
-
-                    ],
-                    "price": 138,
-                    "attachFileType": 1,
-                    "artId": "3oe8bev8",
-                    "nickname": "无边星链",
-                    "status": "1"
-                }
-            ]
-        },
-        "msg": "成功",
-        "fail": false
-    }
-    rspData = result;
+    // let result = {
+    //     "code": 200,
+    //     "data": {
+    //         "total": 1,
+    //         "next": 0,
+    //         "list": [
+    //             {
+    //                 "category": 1,
+    //                 "coverImage": "",
+    //                 "refreshTime": 1725881400,
+    //                 "count": 10000,
+    //                 "type": 1,
+    //                 "title": "星链计划",
+    //                 "avatar": "/uploads/20240830/c18be0bb7951859b97a7a2afba9d33a2.jpg",
+    //                 "image": "/uploads/20240909/0c5d20baa4c00a3390b131b84bf8d592.jpg",
+    //                 "tagList": [
+
+    //                 ],
+    //                 "price": 138,
+    //                 "attachFileType": 1,
+    //                 "artId": "3oe8bev8",
+    //                 "nickname": "无边星链",
+    //                 "status": "1"
+    //             }
+    //         ]
+    //     },
+    //     "msg": "成功",
+    //     "fail": false
+    // }
+    // rspData = result;
     let artDataDict = magicJS.data.read(WuBianConstKey.FirstArtListData, {});
     let artList = rspData.data.list;
     for (let item of artList) {