Browse Source

广东接口调整

vian 5 years ago
parent
commit
b0004dce4a
2 changed files with 65 additions and 51 deletions
  1. 39 38
      modules/pm/facade/pm_facade.js
  2. 26 13
      web/over_write/js/guangdong_2018_export.js

+ 39 - 38
modules/pm/facade/pm_facade.js

@@ -2106,47 +2106,48 @@ async function importTenderDetail(tenderData) {
     if (tenderData.quantityDetails && tenderData.quantityDetails.length) {
         await quantityDetailModel.insertMany(tenderData.quantityDetails);
     }
-    //投标文件中,才会有下面这些数据
     if (enterDetail(tenderData)) {
         //匹配标准数据,更新一些标准数据
         await setupStdData(tenderData);
-        let task = [];
-        //定额
-        if (tenderData.ration.length) {
-            task.push(rationModel.insertMany(tenderData.ration))
-        }
-        //定额人材机
-        if (tenderData.rationGLJ.length) {
-            task.push(rationGLJModel.insertMany(tenderData.rationGLJ));
-        }
-        //定额调整系数
-        if (tenderData.rationCoe.length) {
-            task.push(rationCoeModel.insertMany(tenderData.rationCoe));
-        }
-        //项目人材机
-        if (tenderData.projectGLJ.length) {
-            task.push(gljListModel.insertMany(tenderData.projectGLJ));
-        }
-        // 承包人材料
-        if (tenderData.contractorList.length) {
-           task.push(contractorListModel.insertMany(tenderData.contractorList));
-        }
-        // 评标材料表
-        if (tenderData.bidEvaluationList.length) {
-            task.push(bidListModel.insertMany(tenderData.bidEvaluationList));
-        }
-        // 暂估价材料表
-        if (tenderData.evaluationList.length) {
-            task.push(evaluateListModel.insertMany(tenderData.evaluationList));
-        }
-        //组成物
-        if (tenderData.mixRatio.length) {
-            task.push(mixRatioModel.insertMany(tenderData.mixRatio));
-        }
-        //单价文件
-        if (tenderData.unitPrice.length) {
-            task.push(unitPriceModel.insertMany(tenderData.unitPrice));
-        }
+    }
+    let task = [];
+    //定额
+    if (tenderData.ration.length) {
+        task.push(rationModel.insertMany(tenderData.ration))
+    }
+    //定额人材机
+    if (tenderData.rationGLJ.length) {
+        task.push(rationGLJModel.insertMany(tenderData.rationGLJ));
+    }
+    //定额调整系数
+    if (tenderData.rationCoe.length) {
+        task.push(rationCoeModel.insertMany(tenderData.rationCoe));
+    }
+    //项目人材机
+    if (tenderData.projectGLJ.length) {
+        task.push(gljListModel.insertMany(tenderData.projectGLJ));
+    }
+    // 承包人材料
+    if (tenderData.contractorList.length) {
+        task.push(contractorListModel.insertMany(tenderData.contractorList));
+    }
+    // 评标材料表
+    if (tenderData.bidEvaluationList.length) {
+        task.push(bidListModel.insertMany(tenderData.bidEvaluationList));
+    }
+    // 暂估价材料表
+    if (tenderData.evaluationList.length) {
+        task.push(evaluateListModel.insertMany(tenderData.evaluationList));
+    }
+    //组成物
+    if (tenderData.mixRatio.length) {
+        task.push(mixRatioModel.insertMany(tenderData.mixRatio));
+    }
+    //单价文件
+    if (tenderData.unitPrice.length) {
+        task.push(unitPriceModel.insertMany(tenderData.unitPrice));
+    }
+    if (task.length) {
         await Promise.all(task);
     }
     //继续处理定额等数据

+ 26 - 13
web/over_write/js/guangdong_2018_export.js

@@ -1516,7 +1516,7 @@ const XMLStandard = (function () {
         function WorkContent(contentText, fee) {
             const attrs = [
                 // 定额工作内容
-                { name: 'Name', dName: '定额工作内容', required: true, value: contentText, minLen: 1 },
+                { name: 'Name', dName: '定额工作内容', required: true, value: contentText },
                 // 取此工作内容下定额子目/量价/定额同级人材机的综合合价之和
                 { name: 'Total', type: _type.DECIMAL, value: fee },
                 { name: 'Remark', value: '' }
@@ -1636,7 +1636,7 @@ const XMLStandard = (function () {
             const row = node.serialNo() + 1;
             const attrs = [
                 // 名称
-                { name: 'Name', dName: '名称', required: true, minLen: 1, value: bills.name, failHint: `第${row}行清单-“项目名称”`},
+                { name: 'Name', dName: '名称', required: true, minLen: 1, value: bills.name, failHint: `第${row}行清单-“项目名称”` },
                 // 金额
                 { name: 'Total', type: _type.DECIMAL, value: _util.getFee(bills.fees, 'common.totalFee') },
                 // 费用代号
@@ -2329,7 +2329,7 @@ const XMLStandard = (function () {
                 // 先计算人材机总消耗量,以供后面需要
                 gljUtil.calcProjectGLJQuantity(tenderDetail.projectGLJ.datas,
                     tenderDetail.ration_glj.datas, tenderDetail.Ration.datas, tenderDetail.Bills.datas, Decimal.GLJ, _, scMathUtil); */
-                
+
                 // 单位工程费用汇总
                 const unitWorksSummary = loadUnitWorksSummary(tenderDetail);
                 // 获取标准清单编码-取费类别映射表
@@ -2516,14 +2516,16 @@ const XMLStandard = (function () {
         // 加载分部分项清单,这部分是分部分项工程和措施项目共用的
         function loadFBFX(nodes, kind) {
             return nodes.map(node => {
+                // 措施项目是叶子:如果无单位、且无定额、且综合合价=0时,判断为DivisionalWorks;否则,判断为WorkElement。
+                const isDivisionalMeasure = kind === BillsKind.MEASURE && !node.children.length && !node.data.unit && !+_util.getFee(node.data.fees, 'common.totalFee');
                 let ele;
                 // 有子清单的是分部
-                if (node.source.children.length) {
+                if (node.source.children.length || isDivisionalMeasure) {
                     ele = new DivisionalWorks(node.data);
                     const summaryCost = new SummaryOfBasicCost(tenderDetail.mainTree.items, node);
                     // 递归获取子元素
                     ele.children = [summaryCost, ...loadFBFX(node.children, kind)];
-                } else { // 无子清单的是分项
+                } else { // 无子清单的是分项(分部分项部分)
                     ele = loadBills(node, kind);
                 }
                 return ele;
@@ -2539,16 +2541,27 @@ const XMLStandard = (function () {
             // 工程量计算表
             const expressElement = loadQuantityExpressions(tenderDetail.quantity_detail.datas, true, node.data.ID);
             workElement.children.push(...expressElement);
-            // 相同工作内容的定额进行分组
+            // 相同工作内容的定额进行分组。若工作内容为空,则定额直接下挂到清单下
             const workMap = _.groupBy(node.children, node => node.data.jobContentText || '');
-            const workContents = Object
+            const valueWorks = [];
+            const emptyWorkRationNodes = [];
+            Object
                 .entries(workMap)
-                .map(([contentText, rationNodes]) => {
-                    const workContent = new WorkContent(contentText, _util.getAggregateFee(rationNodes));
-                    workContent.children = rationNodes.map(node => loadRation(node, kind));
-                    return workContent;
+                .forEach(([contentText, rationNodes]) => {
+                    if (contentText) {
+                        valueWorks.push({ contentText, rationNodes });
+                    } else {
+                        emptyWorkRationNodes.push(...rationNodes);
+                    }
                 });
+            const workContents = valueWorks.map(({ contentText, rationNodes }) => {
+                const workContent = new WorkContent(contentText, _util.getAggregateFee(rationNodes));
+                workContent.children = rationNodes.map(node => loadRation(node, kind));
+                return workContent;
+            });
             workElement.children.push(...workContents);
+            const rations = emptyWorkRationNodes.map(node => loadRation(node, kind));
+            workElement.children.push(...rations);
             return workElement
         }
 
@@ -2681,7 +2694,7 @@ const XMLStandard = (function () {
             if (!isValidDepth) {
                 _failList.push('计日工子项超过两层')
             } else {
-                // 计日工最底层节点也需要是标题,否则检测平台会报错
+                // 计日工最底层节点也需要是标题,否则检测平台会报错(不过这样的话xsd)
                 dayworkRate.children = loadGroupAndItems(
                     daywork.children,
                     (node) => new DayWorkRateGroup(node),
@@ -3007,4 +3020,4 @@ const XMLStandard = (function () {
         saveAsFile
     };
 
-})();
+})();