Browse Source

计量台账,计量速度优化

MaiXinRong 4 years ago
parent
commit
b84370a021
2 changed files with 100 additions and 35 deletions
  1. 30 28
      app/public/js/stage.js
  2. 70 7
      app/public/js/stage_im.js

+ 30 - 28
app/public/js/stage.js

@@ -471,9 +471,9 @@ $(document).ready(() => {
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                     stagePosSpreadObj.loadCurPosData();
                     if (detail) {
-                        detail.loadStageChangeUpdateData(result);
+                        detail.loadStageChangeUpdateData(result, nodes);
                     } else {
-                        stageIm.loadUpdateChangeData(result)
+                        stageIm.loadUpdateChangeData(result, nodes)
                     }
                     self.obj.modal('hide');
                 });
@@ -919,11 +919,13 @@ $(document).ready(() => {
                     // tag update
                     const nodes = stageTree.loadPostStageData(data);
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                    console.time('detail');
                     if (detail) {
-                        detail.loadStageLedgerUpdateData(data);
+                        detail.loadStageLedgerUpdateData(data, nodes);
                     } else {
-                        stageIm.loadUpdateLedgerData(data);
+                        stageIm.loadUpdateLedgerData(data, nodes);
                     }
+                    console.timeEnd('detail');
                 }, function () {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                 });
@@ -1003,9 +1005,9 @@ $(document).ready(() => {
                         const nodes = stageTree.loadPostStageData(result);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                         if (detail) {
-                            detail.loadStageLedgerUpdateData(result);
+                            detail.loadStageLedgerUpdateData(result, nodes);
                         } else {
-                            stageIm.loadUpdateLedgerData(result);
+                            stageIm.loadUpdateLedgerData(result, nodes);
                         }
                         stageTreeSpreadObj.loadExprToInput(sheet);
                     });
@@ -1120,9 +1122,9 @@ $(document).ready(() => {
                         const nodes = stageTree.loadPostStageData(data);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes.concat(filterNodes));
                         if (detail) {
-                            detail.loadStageLedgerUpdateData(data);
+                            detail.loadStageLedgerUpdateData(data, nodes);
                         } else {
-                            stageIm.loadUpdateLedgerData(data);
+                            stageIm.loadUpdateLedgerData(data, nodes);
                         }
                         stageTreeSpreadObj.loadExprToInput(sheet);
                     }, function () {
@@ -1172,9 +1174,9 @@ $(document).ready(() => {
                 stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                 stagePosSpreadObj.loadCurPosData();
                 if (detail) {
-                    detail.loadStagePosUpdateData(result);
+                    detail.loadStagePosUpdateData(result, nodes);
                 } else {
-                    stageIm.loadUpdatePosData(result);
+                    stageIm.loadUpdatePosData(result, nodes);
                 }
                 toastr.success('已计量' + data.updateData.length + '条');
             }, function () {
@@ -1228,9 +1230,9 @@ $(document).ready(() => {
                         const nodes = stageTree.loadPostStageData(result);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                         if (detail) {
-                            detail.loadStageLedgerUpdateData(result);
+                            detail.loadStageLedgerUpdateData(result, nodes);
                         } else {
-                            stageIm.loadUpdateLedgerData(result);
+                            stageIm.loadUpdateLedgerData(result, nodes);
                         }
                     });
                 };
@@ -1294,9 +1296,9 @@ $(document).ready(() => {
                 stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                 stagePosSpreadObj.loadCurPosData();
                 if (detail) {
-                    detail.loadStagePosUpdateData(result);
+                    detail.loadStagePosUpdateData(result, nodes);
                 } else {
-                    stageIm.loadUpdatePosData(result);
+                    stageIm.loadUpdatePosData(result, nodes);
                 }
                 $('#calc-by-ratio').modal('hide');
             }, function () {
@@ -1608,9 +1610,9 @@ $(document).ready(() => {
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), refreshData);
                     stagePosSpreadObj.loadCurPosData();
                     if (detail) {
-                        detail.loadStagePosUpdateData(result);
+                        detail.loadStagePosUpdateData(result, nodes);
                     } else {
-                        stageIm.loadUpdatePosData(result);
+                        stageIm.loadUpdatePosData(result, nodes);
                     }
                 }, function () {
                     stagePosSpreadObj.loadCurPosData();
@@ -1759,9 +1761,9 @@ $(document).ready(() => {
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                     stagePosSpreadObj.loadCurPosData();
                     if (detail) {
-                        detail.loadStagePosUpdateData(result);
+                        detail.loadStagePosUpdateData(result, nodes);
                     } else {
-                        stageIm.loadUpdatePosData(result);
+                        stageIm.loadUpdatePosData(result, nodes);
                     }
                 }, function () {
                     stagePosSpreadObj.loadCurPosData();
@@ -1815,9 +1817,9 @@ $(document).ready(() => {
                         const nodes = stageTree.loadPostStageData(result.ledger);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                         if (detail) {
-                            detail.loadStagePosUpdateData(result);
+                            detail.loadStagePosUpdateData(result, nodes);
                         } else {
-                            stageIm.loadUpdatePosData(result);
+                            stageIm.loadUpdatePosData(result, nodes);
                         }
                         // todo 只加载改变项
                         stagePosSpreadObj.loadCurPosData();
@@ -1843,9 +1845,9 @@ $(document).ready(() => {
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), refreshData);
                         stagePosSpreadObj.loadCurPosData();
                         if (detail) {
-                            detail.loadStagePosUpdateData(result);
+                            detail.loadStagePosUpdateData(result, nodes);
                         } else {
-                            stageIm.loadUpdatePosData(result);
+                            stageIm.loadUpdatePosData(result, nodes);
                         }
                     });
                 }
@@ -3184,18 +3186,18 @@ $(document).ready(() => {
             this.reLoadDetailData();
             this.loadLocateInfo();
         }
-        loadStageLedgerUpdateData(data) {
-            const imData = stageIm.loadUpdateLedgerData(data);
+        loadStageLedgerUpdateData(data, nodes) {
+            const imData = stageIm.loadUpdateLedgerData(data, nodes);
             SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Data, imData);
             this.reLoadDetailData();
         }
-        loadStagePosUpdateData(data) {
-            const imData = stageIm.loadUpdatePosData(data);
+        loadStagePosUpdateData(data, nodes) {
+            const imData = stageIm.loadUpdatePosData(data, nodes);
             SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Data, imData);
             this.reLoadDetailData();
         }
-        loadStageChangeUpdateData(data) {
-            const imData = stageIm.loadUpdateChangeData(data);
+        loadStageChangeUpdateData(data, nodes) {
+            const imData = stageIm.loadUpdateChangeData(data, nodes);
             SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Data, imData);
             this.reLoadDetailData();
         }

+ 70 - 7
app/public/js/stage_im.js

@@ -13,7 +13,7 @@ const stageIm = (function () {
     const resetFields = ['peg', 'bw', 'xm', 'drawing_code', 'calc_memo', 'position', 'jldy'];
     const splitChar = '-';
     const mergeChar = ';';
-    let stage, imType, decimal, details, changes, ImData, pre;
+    let stage, imType, decimal, details, changes, ImData, pre, orgImData;
     const gsTreeSetting = {
         id: 'ledger_id',
         pid: 'ledger_pid',
@@ -849,7 +849,9 @@ const stageIm = (function () {
             initCheck();
         }
         // 生成数据
+        console.time('build');
         recursiveBuildImData(gsTree.children);
+        console.timeEnd('build');
         if (stage.im_type !== imType.tz.value) {
             ImData.sort(function (x, y) {
                 const iCode = compareCode(x.code, y.code);
@@ -870,6 +872,67 @@ const stageIm = (function () {
         return ImData;
     }
 
+    /**
+     * 递归 生成中间计量表
+     * @param {Array} nodes
+     */
+    function recursiveReBuildImData (nodes, refreshNodeIds) {
+        if (!nodes || nodes.length === 0) { return; }
+        for (const node of nodes) {
+            if (refreshNodeIds.indexOf(node.id) < 0) continue;
+            if (gsTree.isLeafXmj(node) || ((stage.im_type !== imType.bw.value && stage.im_type !== imType.bb.value) && stage.im_gather && node.check)) {
+                if (stage.im_type === imType.tz.value) {
+                    generateTzImData(node);
+                } else if (stage.im_type === imType.zl.value) {
+                    generateZlImData(node);
+                } else if (stage.im_type === imType.bw.value) {
+                    generateBwImData(node);
+                } else if (stage.im_type === imType.bb.value) {
+                    generateBwBillsImData(node);
+                }
+            } else {
+                recursiveReBuildImData(node.children, refreshNodeIds);
+            }
+        }
+    }
+
+    function refreshImData(refreshNodes) {
+        // 初始化
+        const refreshIds = refreshNodes.map(x => {return x.id});
+        orgImData = ImData ? ImData.filter(x => {
+            return refreshIds.indexOf(x.lid) < 0
+        }) : [];
+        ImData = [];
+        pre = (stage.im_pre && stage.im_pre !== '') ? stage.im_pre + splitChar : '';
+        if (stage.im_gather) {
+            initCheck();
+        }
+        // 生成数据
+        recursiveReBuildImData(gsTree.children, refreshIds);
+        for (const [i, im] of ImData.entries()) {
+            if (im.source.length > 1) {
+                im.source.sort(function (x, y) {
+                    return compareCode(x.b_code, y.b_code);
+                });
+            }
+            getCalcMemo(im);
+            getChangeInfo(im);
+            checkCustomDetail(im);
+        }
+        ImData = ImData.concat(orgImData);
+        if (stage.im_type !== imType.tz.value) {
+            ImData.sort(function (x, y) {
+                const iCode = compareCode(x.code, y.code);
+                return iCode === 0 ? x.lIndex - y.lIndex : iCode;
+            });
+        }
+        for (const [i, im] of ImData.entries()) {
+            im.im_code = pre + getNumberFormat(stage.order, 2) + splitChar + getNumberFormat(i + 1, 3);
+        }
+        orgImData = [];
+        return ImData;
+    }
+
     function loadUpdateDetailData (data) {
         const datas = data instanceof Array ? data : [data];
         for (const d of datas) {
@@ -897,7 +960,7 @@ const stageIm = (function () {
         }
     }
 
-    function loadUpdateLedgerData(data) {
+    function loadUpdateLedgerData(data, refreshNodes) {
         gsTree.loadPostStageData(data);
         if (data.change) {
             _.remove(changes, data.change.target);
@@ -905,9 +968,9 @@ const stageIm = (function () {
                 changes.push(c);
             }
         }
-        return buildImData();
+        return refreshImData(refreshNodes);
     }
-    function loadUpdatePosData(data) {
+    function loadUpdatePosData(data, refreshNodes) {
         if (data.pos) {
             if (data.pos.pos && data.pos.pos.length > 0 && typeof data.pos.pos[0] === 'string') {
                 gsPos.removeDatas(data.pos.pos);
@@ -919,9 +982,9 @@ const stageIm = (function () {
             }
         }
         gsTree.loadPostStageData(data.ledger);
-        return buildImData();
+        return refreshImData(refreshNodes);
     }
-    function loadUpdateChangeData(data) {
+    function loadUpdateChangeData(data, refreshNodes) {
         if (data.pos) {
             gsPos.loadCurStageData(data.pos.curStageData);
         }
@@ -932,7 +995,7 @@ const stageIm = (function () {
                 changes.push(c);
             }
         }
-        return buildImData();
+        return refreshImData(refreshNodes);
     }
 
     function getParentCheckNode(node) {