Sfoglia il codice sorgente

fix: 广东-中山接口调整

vian 4 anni fa
parent
commit
801e5b1edb

+ 5 - 0
modules/pm/facade/pm_facade.js

@@ -2006,6 +2006,11 @@ async function importInterfaceProject(importObj, userID, compilation, overWriteU
         if (!data.property.decimal) {
             //小数位数 需要修改,所以深拷贝
             data.property.decimal = JSON.parse(JSON.stringify(defaultDecimal));
+            if (data.property.areaKey === '广东@中山') {
+                data.property.decimal.bills.totalPrice = 2;
+                data.property.decimal.ration.totalPrice = 2;
+                delete data.property.areaKey;
+            }
         }
         //清单工程量精度 需要修改,所以深拷贝
         data.property.billsQuantityDecimal = JSON.parse(JSON.stringify(billsQuantityDecimal));

+ 1 - 1
web/building_saas/standard_interface/export/guangdong_zhongshan.js

@@ -903,7 +903,7 @@ INTERFACE_EXPORT = (() => {
       function BidEvaluationMainMaterial(b, index) {
         const attrs = [{
             name: "Code",
-            value: index,
+            value: b.seq,
           },
           {
             name: "Number",

+ 38 - 11
web/building_saas/standard_interface/import/base.js

@@ -243,9 +243,10 @@ const INTERFACE_EXPORT_BASE = (() => {
    * @param {Array} source - 从xml提取出来的清单
    * @param {Array} target - 清单模板数据
    * @param {Object} parent - 匹配到模板清单的父清单
+   * @param {Boolean} onlyImportMatchBills - 是否只导入文件中的清单,未匹配的模板清单不生成
    * @return {void}
    */
-  function mergeBills(source, target, parent) {
+  function mergeBills(source, target, parent, matchedFlags) {
     source.forEach((bills, index) => {
       // 为了大项费用排序
       if (!parent) {
@@ -281,15 +282,15 @@ const INTERFACE_EXPORT_BASE = (() => {
         }
       }
       if (matched) {
+        matchedFlags.push(getFlag(matched));
         assignAttr(matched, bills);
         if (bills.children && bills.children.length) {
-          mergeBills(bills.children, matched.children, matched);
+          mergeBills(bills.children, matched.children, matched, matchedFlags);
         }
       } else {
         target.push(bills);
       }
     });
-
   }
 
   /**
@@ -297,12 +298,33 @@ const INTERFACE_EXPORT_BASE = (() => {
    * @param {Array} tenderBills - 从xml提取出来的清单
    * @param {Array} billsTarget - 拷贝一份的模板清单,用于合并提取清单
    * @param {Number} tenderID - 单位工程ID
+   * @param {Boolean} onlyImportMatchBills - 是否只导入文件中的清单,未匹配的模板清单不生成
    * @return {Array}
    */
-  function handleBills(tenderBills, billsTarget, tenderID) {
+  function handleBills(tenderBills, billsTarget, tenderID, onlyImportMatchBills) {
     const rst = [];
     // 将提取的清单数据合并进清单模板数据
-    mergeBills(tenderBills, billsTarget, null);
+    const matchedFlags = [];
+    mergeBills(tenderBills, billsTarget, null, matchedFlags);
+
+    // 如果只导入文件中有的清单,除100-700/900章清单、报价清单外,其他未匹配到的固定清单模板,均不导入
+    function removeNotMatchFlagBills(bills) {
+      const rst = [];
+      bills.forEach(item => {
+        const flag = getFlag(item);
+        if (!flag || [fixedFlag.ONE_SEVEN_BILLS, fixedFlag.TOTAL_COST].includes(flag) || matchedFlags.includes(flag)) {
+          rst.push(item);
+        }
+        if (flag && ![fixedFlag.ONE_SEVEN_BILLS, fixedFlag.TOTAL_COST].includes(flag) && item.children && item.children.length) {
+          item.children = removeNotMatchFlagBills(item.children);
+        }
+      });
+      return rst;
+    }
+    if (onlyImportMatchBills) {
+      billsTarget = removeNotMatchFlagBills(billsTarget)
+    }
+
     // 大项费用按照清单标题排序
     billsTarget.sort((a, b) => a.seq - b.seq);
     // 给清单设置数据
@@ -399,7 +421,7 @@ const INTERFACE_EXPORT_BASE = (() => {
   }
 
   // 处理单位工程数据
-  function handleTenderData(tenders, templateData, rationValuationData, engineeringLib) {
+  function handleTenderData(tenders, templateData, rationValuationData, engineeringLib, areaKey, onlyImportMatchBills) {
     tenders.forEach((tender, index) => {
       tender.compilation = compilationData._id;
       tender.userID = userID;
@@ -422,6 +444,7 @@ const INTERFACE_EXPORT_BASE = (() => {
         featureSource.push({ key: 'engineering', value: engineeringLib.lib.name });
       }
       tender.property = {
+        areaKey,
         rootProjectID: tender.ParentID,
         region: '全省',
         engineering_id: engineeringLib.engineering_id,
@@ -445,7 +468,7 @@ const INTERFACE_EXPORT_BASE = (() => {
       };
       delete tender.feature;
       const tenderDataBills = getTemplateBillsTarget(templateData.bills);
-      tender.bills = handleBills(tender.bills, tenderDataBills, tender.ID,); // 必须要拷贝一份,否则多单位工程情况下,前单位工程的清单数据会被后单位工程的覆盖
+      tender.bills = handleBills(tender.bills, tenderDataBills, tender.ID, onlyImportMatchBills); // 必须要拷贝一份,否则多单位工程情况下,前单位工程的清单数据会被后单位工程的覆盖
       // 给暂估材料和评标材料设置项目数据
       const setGLJRefFunc = glj => {
         glj.ID = uuid.v1();
@@ -465,9 +488,11 @@ const INTERFACE_EXPORT_BASE = (() => {
    * 因为无法保证这一套逻辑能不能兼容以后的所有接口,因此提取数据与标准数据模板的合并放在前端进行。
    * 当统一逻辑无法满足某一接口时,接口可以根据标准模板数据自行进行相关处理。
    * @param {Object} importData - 各接口从xml提取出来的数据
+   * @param {String} areaKey - 接口地区
+   * @param {Boolean} onlyImportMatchBills - 是否只导入文件中的清单,未匹配的模板清单不生成
    * @return {Promise<Object>}
    */
-  async function handleImportData(importData) {
+  async function handleImportData(importData, areaKey, onlyImportMatchBills) {
     const valuationID = compilationData.ration_valuation[0].id;
     if (!Array.isArray(importData.tenders) && !importData.tenders.length) {
       throw '导入的文件中不存在有效的标段数据。';
@@ -514,7 +539,7 @@ const INTERFACE_EXPORT_BASE = (() => {
     };
     delete importData.info;
     // 处理单位工程数据
-    handleTenderData(importData.tenders, templateData, rationValuationData, engineeringLib);
+    handleTenderData(importData.tenders, templateData, rationValuationData, engineeringLib, areaKey, onlyImportMatchBills);
     console.log(importData);
   }
 
@@ -542,9 +567,10 @@ const INTERFACE_EXPORT_BASE = (() => {
    * @param {File} file - 导入的文件
    * @param {String} areaKey - 地区标识,如:'安徽@马鞍山'
    * @param {Boolean} escape - 是否需要避免xml中的实体字符转换
+   * @param {Boolean} onlyImportMatchBills - 是否只导入文件中的清单,未匹配的模板清单不生成
    * @return {Promise<Object>}
    */
-  async function extractImportData(entryFunc, file, areaKey, escape = false) {
+  async function extractImportData(entryFunc, file, areaKey, escape = false, onlyImportMatchBills = false) {
     // 将二进制文件转换成字符串
     let xmlStr = await readAsTextSync(file);
     if (escape) {
@@ -560,7 +586,8 @@ const INTERFACE_EXPORT_BASE = (() => {
       throw '无有效数据。';
     }
     const importData = await entryFunc(areaKey, xmlObj);
-    await handleImportData(importData);
+    console.log(areaKey);
+    await handleImportData(importData, areaKey, onlyImportMatchBills);
     return importData;
   }
 

+ 2 - 1
web/building_saas/standard_interface/import/view.js

@@ -57,7 +57,8 @@ const IMPORT_VIEW = (() => {
         }
         const areaKey = `${parentArea}@${subArea}`;
         await STD_INTERFACE.loadScriptByArea(areaKey, STD_INTERFACE.ScriptType.IMPORT);
-        const importData = await INTERFACE_EXPORT_BASE.extractImportData(INTERFACE_IMPORT.entry, file, areaKey);
+        const onlyImportMatchBills = areaKey === '广东@中山';
+        const importData = await INTERFACE_EXPORT_BASE.extractImportData(INTERFACE_IMPORT.entry, file, areaKey, false, onlyImportMatchBills);
         $('#interface-import-modal').modal('hide');
         $.bootstrapLoading.progressStart('导入文件', true);
         $("#progress_modal_body").text('正在导入接口文件,请稍候……');