Explorar o código

fixed: BUG #3390 (公路云、养护云)优化导入excel清单功能速度

Tony Kang %!s(int64=3) %!d(string=hai) anos
pai
achega
b47048eb19
Modificáronse 2 ficheiros con 38 adicións e 8 borrados
  1. 1 1
      modules/main/controllers/bills_controller.js
  2. 37 7
      modules/main/models/bills.js

+ 1 - 1
modules/main/controllers/bills_controller.js

@@ -269,7 +269,7 @@ async function importSheet(excelBills, userID, projectID,){
     let flag = fixedFlag.ONE_SEVEN_BILLS;   //第100章至700章清单
     let fixedBill = await billsData.model.findOne({projectID: projectID, 'flags.flag': flag, deleteInfo: null});
     //删除相关数据
-    let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID);
+    let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID, projectID);
     //新增清单数据
     await billsData.importBills(excelBills);
     //返回数据以更新前端

+ 37 - 7
modules/main/models/bills.js

@@ -168,10 +168,18 @@ class billsModel extends baseModel {
         return await this.model.bulkWrite(operations);
     }
     //删除清单节点的所有子节点及其他附带数据
-    async deepDeleteBill(bills, userID){
+    async deepDeleteBill(bills, userID, projectID){
         let bill_ids = [],
             ration_ids = [];
         let me = this;
+        function getIDs(datas){
+            let ids = [];
+            for(let data of datas){
+                ids.push(data.ID);
+            }
+            return ids;
+        }
+        /*
         async function findBillsChildren(bills){
             if(bills.length > 0){
                 let ids = getIDs(bills);
@@ -180,14 +188,36 @@ class billsModel extends baseModel {
                 await findBillsChildren(findBills);
             }
         }
-        function getIDs(datas){
-            let ids = [];
-            for(let data of datas){
-                ids.push(data.ID);
+        await findBillsChildren(bills);
+        /*/
+        // 优化:一次性获取所有清单,再一个个剔除,剩下bills下所有的子清单,省的递归查询
+        const allBills = await me.model.find({projectID: projectID}, '-_id');
+        function getAllSubIDs(topDatas) {
+            bill_ids = bill_ids.concat(getIDs(topDatas));
+            function _getSubs(datas, rstBills) {
+                let subIDs = []
+                for (let bill of allBills) {
+                    for(let data of datas){
+                        if (data.ID === bill.ParentID) {
+                            subIDs.push(bill.ID);
+                            rstBills.push(bill);
+                        }
+                    }
+                }
+                return subIDs;
+            }
+            let chkBills = [];
+            let chkIds = _getSubs(topDatas, chkBills);
+            while (chkIds.length > 0) {
+                bill_ids = bill_ids.concat(chkIds);
+                let subBills = [];
+                chkIds = _getSubs(chkBills, subBills);
+                chkBills = subBills;
             }
-            return ids;
         }
-        await findBillsChildren(bills);
+        getAllSubIDs(bills);
+        //*/
+
         //剔除第一个节点
         bill_ids = bill_ids.slice(1);
         //获取删除清单下的所有定额