|
|
@@ -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);
|