shawenguan hace 2 años
padre
commit
5f149375e9

+ 10 - 10
BoxJsSub/JoJo_BoxJs.json

@@ -310,7 +310,7 @@
           "name": "合成组合执行次数",
           "val": "0#1",
           "type": "text",
-          "desc": "合成组合执行次数,格式如:0#1,1#1"
+          "desc": "合成组合执行次数,格式如:0#1,0代表应索引0的可行方案组合,1代表执行次数"
         },
         {
           "id": "lkGandartCompositeTaskMateList",
@@ -318,7 +318,7 @@
           "val": "[]",
           "autoGrow": false,
           "type": "textarea",
-          "desc": "合成组合可行方案"
+          "desc": "普通模式运行得出,仅供查看,用于编写合成组合执行次数"
         },
         {
           "id": "lkGandartCompositeTaskFinalList",
@@ -326,23 +326,23 @@
           "val": "[]",
           "autoGrow": false,
           "type": "textarea",
-          "desc": "合成组合最终方案"
+          "desc": "普通模式运行得出,作为极速模式下的缓存,可手动编写(慎重)"
         },
         {
-          "id": "lkGandartCompositeTaskList1",
-          "name": "合成中-任务列表",
+          "id": "lkGandartCompositeTaskList0",
+          "name": "待开始-任务列表",
           "val": "[]",
           "autoGrow": true,
           "type": "textarea",
-          "desc": "合成中的任务列表"
+          "desc": "待开始的任务列表,用于查看合成任务ID(勿编辑修改)"
         },
         {
-          "id": "lkGandartCompositeTaskList0",
-          "name": "待开始-任务列表",
+          "id": "lkGandartCompositeTaskList1",
+          "name": "合成中-任务列表",
           "val": "[]",
           "autoGrow": false,
           "type": "textarea",
-          "desc": "待开始的任务列表"
+          "desc": "合成中的任务列表,用于查看合成任务ID(勿编辑修改)"
         },
         {
           "id": "lkGandartCompositeTaskList2",
@@ -350,7 +350,7 @@
           "val": "[]",
           "autoGrow": false,
           "type": "textarea",
-          "desc": "已结束的任务列表"
+          "desc": "已结束的任务列表,用于查看合成任务ID(勿编辑修改)"
         }
       ]
     }

+ 60 - 9
Scripts/gandart/gandartComposite.js

@@ -20,7 +20,11 @@ const config = {
 const lk = new ToolKit(`光予合成手`, `GandartCompostier`, `gandartComposite.js`);
 
 const GandartConstKey = {
+    // -----通用助手相关的-----
     Token: 'lkGandartToken',
+    UserData: 'lkGandartUserData',
+    PrivCollectionBrief: 'lkGandartPrivCollectionBrief',
+    PrivCollectionDetail: 'lkGandartPrivCollectionDetail',
     CollectionName: 'lkGandartCollectionName',
     CastingId: 'lkGandartCastingId',
     LimitPrice: 'lkGandartLimitPrice',
@@ -28,6 +32,7 @@ const GandartConstKey = {
     CollectionCateLst: 'lkGandartCollectionCateLst',
     FloatPriceIntaval: 'lkGandartFloatPriceIntaval',
     IsCollectionWatchLocked: 'lkIsGandartCollectionWatchLocked',
+    // -----合成脚本增加的-----
     CompositeFuncEnalbleList: 'lkGandartCompositeFuncEnalbleList',
     CompositeTaskList0: 'lkGandartCompositeTaskList0',
     CompositeTaskList1: 'lkGandartCompositeTaskList1',
@@ -208,6 +213,41 @@ function printMaterialGroupsInfo(materialGroups) {
     lk.log(detailStr);
 }
 
+async function checkGetMaterialDetails(gMaterialDetails, materialDict) {
+    let useCache = lk.getVal(GandartConstKey.CompositeMaterialCache);
+    lk.log(`合成材料列表本地缓存:${useCache}`);
+    if (!lk.isEmpty(useCache)) {
+        useCache = JSON.parse(useCache);
+    } else {
+        useCache = false;
+    }
+    let isReqServerData = false;
+    if (useCache) {
+        let jsonStr = lk.getVal(GandartConstKey.PrivCollectionDetail);
+        if (!lk.isEmpty(jsonStr)) {
+            lk.log(jsonStr);
+            try {
+                let data = JSON.parse(jsonStr);
+                for (let k in materialDict) {
+                    gMaterialDetails[k] = data[k];
+                }
+            } catch (error) {
+                lk.logErr(error);
+                isReqServerData = true;
+            }
+        } else {
+            isReqServerData = true;
+        }
+    }
+    if (isReqServerData) {
+        for (let k in materialDict) {
+            let mInfo = materialDict[k];
+            gMaterialDetails[k] = await getDetailByCasting(mInfo.castingId, mInfo.collectionName);
+        }
+    }
+    return gMaterialDetails;
+}
+
 async function tryToExecCompositeTask(taskId, taskInfo = {}) {
     if (getCompositeTaskMode() == 1) {
         lk.log('开始极速模式执行合成任务');
@@ -237,18 +277,13 @@ async function tryToExecCompositeTask(taskId, taskInfo = {}) {
         let materialGroups = ret[0];
         lk.log(`排列组合组数:${materialGroups.length}`);
         // printMaterialGroupsInfo(materialGroups);
-        // 获取用户材料拥有详情
         let materialDict = ret[1];
-        for (let k in materialDict) {
-            let mInfo = materialDict[k];
-            gMaterialDetails[k] = await getDetailByCasting(mInfo.castingId, mInfo.collectionName);
-        }
+        // 获取用户材料拥有详情
+        await checkGetMaterialDetails(gMaterialDetails, materialDict);
         // 找出可行的合成搭配
         let validCompositeGroups = findValidGroupMaterialGroups(materialGroups, gMaterialDetails);
-        lk.setVal(GandartConstKey.CompositeTaskMateList, JSON.stringify(validCompositeGroups, null, 2));
-
-        lk.log(`预估可行组合数:${validCompositeGroups.length}`);
-        printMaterialGroupsInfo(validCompositeGroups, '预估可行组合数');
+        setCompositeTaskMateListForDisplay(validCompositeGroups);
+        // printMaterialGroupsInfo(validCompositeGroups, '预估可行组合数');
 
         if (isGenFinalLisstEnable()) {
             let compositeCountDict = getCompositeCountDict();
@@ -281,6 +316,22 @@ async function tryToExecCompositeTask(taskId, taskInfo = {}) {
     return;
 }
 
+function setCompositeTaskMateListForDisplay(validCompositeGroups) {
+    lk.log(`预估可行组合数:${validCompositeGroups.length}`);
+    let disText = '';
+    for (let i = 0; i < validCompositeGroups.length; i++) {
+        let group = validCompositeGroups[i];
+        let rowText = `[${i}]`;
+        for (let j = 0; j < group.length; j++) {
+            let mInfo = group[i];
+            rowText += `${mInfo.collectionName}x${mInfo.number},`;
+        }
+        disText += rowText.substring(0, rowText.length - 1) + '\n';
+    }
+    lk.log(disText);
+    lk.setVal(GandartConstKey.CompositeTaskMateList, disText);
+}
+
 async function doExecFinalComposite(taskId, taskInfo, finalGroups) {
     let retOrderLst = [];
     let retWillDelLst = [];

+ 154 - 12
Scripts/gandart/gandartHelper.js

@@ -20,12 +20,12 @@ const config = {
 const lk = new ToolKit(`光予助手`, `GandartHelper`, `gandartHelper.js`);
 
 const GandartConstKey = {
+    // -----通用助手相关的-----
     Token: 'lkGandartToken',
     UserData: 'lkGandartUserData',
     PrivCollectionBrief: 'lkGandartPrivCollectionBrief',
     PrivCollectionDetail: 'lkGandartPrivCollectionDetail',
     CollectionName: 'lkGandartCollectionName',
-    CollectionName: 'lkGandartCollectionName',
     CastingId: 'lkGandartCastingId',
     LimitPrice: 'lkGandartLimitPrice',
     TransactionRecordId: 'lkGandartTransactionRecordId',
@@ -73,10 +73,13 @@ function checkHanldeRequest() {
                 break;
             case '/base/user/getUser':
                 handleUserInfo();
-                break
+                break;
             case '/base/v2/order/nftorder/selectCollection':
                 handleMyOwnCollection();
                 break;
+            case '/base/order/nftorder/collectionDetails':
+                handleMyCollectionDetails();
+                break;
             case '/base/v2/resaleManage/resale/findAllIsOpenResale':
                 handleFindAllIsOpenResale();
                 break;
@@ -90,6 +93,9 @@ function checkHanldeRequest() {
                 handleCollectionDetailsByCastingId();
                 break;
             default:
+                if (path.match(/\/read\/api\/composite\/getDetailByCasting/)) {
+                    handleMyCollectionDetailByCasting();
+                }
                 break;
         }
     }
@@ -118,13 +124,36 @@ function handleVerifyCodeLogin() {
     lk.msg('');
 }
 
+function handleUserInfo() {
+    try {
+        let data = lk.getResponseBody();
+        if (!data) {
+            return;
+        }
+        lk.log(`获取用户信息`);
+        data = JSON.parse(data);
+        if (data.user) {
+            lk.setVal(GandartConstKey.UserData, JSON.stringify(data.user));
+            lk.log('成功获取光予用户信息');
+            lk.appendNotifyInfo('🎉成功获取光予用户信息');
+        } else {
+            lk.execFail();
+            lk.appendNotifyInfo('❌获取光予用户信息失败,请稍后再试');
+        }
+    } catch (e) {
+        lk.execFail();
+        lk.appendNotifyInfo('❌获取光予用户信息失败');
+    }
+    // lk.msg('');
+}
+
 function handleMyOwnCollection() {
     try {
         let data = lk.getResponseBody();
         if (!data) {
             return;
         }
-        lk.log(`获取个人产品简要列表`);
+        lk.log(`获取个人拥有的产品简要列表`);
         data = JSON.parse(data);
         if (data.rows) {
             let jsonStr = lk.getVal(GandartConstKey.PrivCollectionBrief, '[]');
@@ -140,9 +169,22 @@ function handleMyOwnCollection() {
                     }
                 }
             }
+            let pageRows = data.rows;
+            for (let i = 0; i < pageRows.length; i++) {
+                const ele = pageRows[i];
+                const info = {
+                    castingId: ele.castingId,
+                    number: ele.number,
+                    collectionName: ele.collectionName,
+                    page: curPage,
+                }
+                cacheLst.push(info);
+            }
+            jsonStr = JSON.stringify(cacheLst, null, 2);
+            lk.setVal(GandartConstKey.PrivCollectionBrief, jsonStr);
 
             lk.log('成功获取个人产品简要列表');
-            lk.appendNotifyInfo('🎉成功获取个人产品简要列表');
+            lk.appendNotifyInfo('🎉成功获取光予个人产品简要列表');
         } else {
             lk.execFail();
             lk.appendNotifyInfo('❌获取光予个人产品简要列表失败,请稍后再试');
@@ -154,29 +196,129 @@ function handleMyOwnCollection() {
     // lk.msg('');
 }
 
-function handleUserInfo() {
+function handleMyCollectionDetails() {
     try {
         let data = lk.getResponseBody();
         if (!data) {
             return;
         }
-        lk.log(`获取用户信息`);
+        lk.log(`获取个人拥有的产品详情列表`);
         data = JSON.parse(data);
-        if (data.user) {
-            lk.setVal(GandartConstKey.UserData, JSON.stringify(data.user));
-            lk.log('成功获取光予用户信息');
-            lk.appendNotifyInfo('🎉成功获取光予用户信息');
+        if (data.rows) {
+            let params = {};
+            let reqBody = lk.getRequestBody();
+            if (reqBody) {
+                params = lk.parseQueryStr(reqBody);
+            }
+            let jsonStr = lk.getVal(GandartConstKey.PrivCollectionDetail, '{}');
+            let cacheDetails = JSON.parse(jsonStr);
+            let pageRows = data.rows;
+
+            let castingId = params.castingId;
+            if (pageRows[0]) {
+                castingId = pageRows[0].castingId;
+            }
+            let cacheLst = cacheDetails[castingId] || [];
+            let curPage = data.page;
+            if (curPage == 1) {
+                //全部清理
+                cacheLst = [];
+            } else {
+                for (let i = cacheLst.length - 1; i >= 0; i--) {
+                    if (cacheLst[i].page == curPage) {
+                        cacheLst.splice(i, 1);
+                    }
+                }
+            }
+            for (let i = 0; i < pageRows.length; i++) {
+                const ele = pageRows[i];
+                const info = {
+                    id: ele.id,
+                    viewSort: ele.viewSort,
+                    castingId: ele.castingId,
+                    collectionName: ele.collectionName,
+                    page: curPage,
+                }
+                cacheLst.push(info);
+            }
+            cacheDetails[castingId] = cacheLst;
+            jsonStr = JSON.stringify(cacheDetails, null, 2);
+            lk.setVal(GandartConstKey.PrivCollectionBrief, jsonStr);
+
+            lk.log('成功获取个人产品详情列表');
+            lk.appendNotifyInfo('🎉成功获取光予个人产品详情列表');
         } else {
             lk.execFail();
-            lk.appendNotifyInfo('❌获取光予用户信息失败,请稍后再试');
+            lk.appendNotifyInfo('❌获取光予个人产品详情列表失败,请稍后再试');
         }
     } catch (e) {
         lk.execFail();
-        lk.appendNotifyInfo('❌获取光予用户信息失败');
+        lk.appendNotifyInfo('❌获取光予个人产品详情列表发生错误');
     }
     // lk.msg('');
 }
 
+function handleMyCollectionDetailByCasting() {
+    try {
+        let data = lk.getResponseBody();
+        if (!data) {
+            return;
+        }
+        lk.log(`获取个人拥有的产品详情列表#合成选择`);
+        data = JSON.parse(data);
+        if (data.success) {
+            const url = $request.url;
+            const params = lk.parseQueryStr(url);
+            if (!params.castingId) {
+                let reqBody = lk.getRequestBody();
+                if (reqBody) {
+                    params = lk.parseQueryStr(reqBody);
+                }
+            }
+            let jsonStr = lk.getVal(GandartConstKey.PrivCollectionDetail, '{}');
+            let cacheDetails = JSON.parse(jsonStr);
+            let obj = data.obj;
+            let itemLst = obj.list;
+
+            let castingId = params.castingId;
+            if (itemLst[0]) {
+                castingId = itemLst[0].castingId;
+            }
+            let cacheLst = cacheDetails[castingId] || [];
+            let curPage = obj.page;
+            if (curPage == 1) {
+                //全部清理
+                cacheLst = [];
+            } else {
+                //删除对应页码的
+                for (let i = cacheLst.length - 1; i >= 0; i--) {
+                    if (cacheLst[i].page == curPage) {
+                        cacheLst.splice(i, 1);
+                    }
+                }
+            }
+            for (let i = 0; i < itemLst.length; i++) {
+                const ele = itemLst[i];
+                const info = {
+                    id: ele.id,
+                    viewSort: ele.viewSort,
+                    castingId: ele.castingId,
+                    collectionName: ele.collectionName,
+                }
+                cacheLst.push(info);
+            }
+
+            cacheDetails[castingId] = cacheLst;
+            jsonStr = JSON.stringify(cacheDetails, null, 2);
+            lk.setVal(GandartConstKey.PrivCollectionDetail, jsonStr);
+            lk.log('成功获取个人产品详情列表');
+        }
+    } catch (error) {
+        lk.log('获取个人产品详情列表发生错误');
+        lk.logErr(error);
+    }
+}
+
 function handleFindAllIsOpenResale() {
     try {
         let data = lk.getResponseBody();

+ 4 - 0
Scripts/gandart/gandartOrder.js

@@ -20,7 +20,11 @@ const config = {
 const lk = new ToolKit(`光予下单手`, `GandartOrder`, `gandartOrder.js`);
 
 const GandartConstKey = {
+    // -----通用助手相关的-----
     Token: 'lkGandartToken',
+    UserData: 'lkGandartUserData',
+    PrivCollectionBrief: 'lkGandartPrivCollectionBrief',
+    PrivCollectionDetail: 'lkGandartPrivCollectionDetail',
     CollectionName: 'lkGandartCollectionName',
     CastingId: 'lkGandartCastingId',
     LimitPrice: 'lkGandartLimitPrice',