瀏覽代碼

接口导入导出debug

vian 5 年之前
父節點
當前提交
1c80f6aa76

+ 3 - 3
modules/pm/facade/pm_facade.js

@@ -1635,9 +1635,9 @@ async function getBasicInfo(compilationID, fileKind = null) {
     //提取文件类型中需要的数据 (投标项目可能不需要招标的一些信息)
     if (fileKind && infoLib && infoLib.info && infoLib.info.length) {
         let strMap = {
-            1: 'tender',    //投标
-            2: 'bid',       //招标
-            3: 'control'    //控制价
+            1: '投标',    //投标
+            2: '招标',       //招标
+            3: '控制价'    //控制价
         };
         let needfulData = infoLib.info.filter(data => !data.fileKind || data.fileKind === strMap[fileKind]);
         needfulData.forEach(nData => {

+ 0 - 4
web/building_saas/pm/js/pm_import.js

@@ -459,10 +459,6 @@ const importView = (() => {
                 await projTreeObj.getUploadToken();
                 await UPLOAD_CDN.uploadSync(file, key, projTreeObj.uptoken);
                 // 下载并处理文件
-                /* const rstData = await ajaxPost('/pm/import/importInterface', { key });
-                if (Array.isArray(rstData)) {
-                    doAfterImport(rstData);
-                } */
                 await ajaxPost('/pm/import/importInterface', { key });
                 await importProcessChecking(key, null, (projectData) => handleProjectAfterChecking(projectData));
             } catch (err) {

+ 18 - 3
web/over_write/js/guangdong_2018_export.js

@@ -2209,6 +2209,14 @@ const XMLStandard = (function () {
             return sectionalWorks;
         }
 
+        // 项目人材机code-data映射,减少循环次数,方便组成物定额人材机等数据可通过编码获取完整数据
+        let projectGLJCodeMap;
+        function setupprojectGLJCodeMap(projectGLJList) {
+            const map = {};
+            projectGLJList.forEach(glj => map[glj.code] = glj);
+            return map;
+        }
+
         /*
          * 加载所有单位工程元素
          * @param  {Object}summaryInfoMap 总的汇总价格映射表(与项目ID映射)
@@ -2240,6 +2248,7 @@ const XMLStandard = (function () {
                     unitWorks.push(unitWork);
                     continue;
                 }
+                projectGLJCodeMap = setupprojectGLJCodeMap(tenderDetail.projectGLJ.datas.gljList);
                 // 不是简单结构,继续添加各种子元素
                 // 方便用户看错误来自哪个单位工程
                 _failList.push(`<span style="font-weight: bold">单位工程“${tData.name}”下:</span>`);
@@ -2456,6 +2465,12 @@ const XMLStandard = (function () {
             const theLib = rationLibs.find(lib => lib.id === ration.libID);
             return theLib ? theLib.libCode : '';
         }
+        // 获取NoCost 如果类型是主材或者设备,输出=“true”,否则为"false"。
+        function getNoCost(projectGLJCodeMap, code) {
+            const noCostType = [4, 5];
+            const glj = projectGLJCodeMap[code];
+            return glj && noCostType.includes(glj.type) ? 'true' : 'false';
+        }
         // 加载定额
         function loadRation(node, kind) {
             // 定额
@@ -2483,7 +2498,7 @@ const XMLStandard = (function () {
                 })
                 .map(rGLJ => {
                     const totalQuantity = gljUtil.getTotalQuantity(rGLJ, node.data, Decimal.QUANTITY, Decimal.GLJ);
-                    const noCost = !+totalQuantity; // 总消耗量为0即为不计价材料
+                    const noCost = getNoCost(projectGLJCodeMap, rGLJ.code);
                     return new LabourMaterialsEquipmentsMachinesElement(rGLJ, rGLJ.quantity, noCost);
                 });
             norm.children.push(...rationGLJElements);
@@ -2653,7 +2668,7 @@ const XMLStandard = (function () {
                 .map(gljSummaryItem => {
                     const gljEle = new LabourMaterialsEquipmentsMachinesSummary(gljSummaryItem);
                     gljEle.children = gljSummaryItem.ratios.map(ratio => {
-                        const noCost = !+ratio.consumption;
+                        const noCost = getNoCost(projectGLJCodeMap, ratio.code);
                         return new LabourMaterialsEquipmentsMachinesElement(ratio, ratio.consumption, noCost);
                     });
                     return gljEle;
@@ -2689,7 +2704,7 @@ const XMLStandard = (function () {
                     const ratios = tenderDetail.projectGLJ.datas.mixRatioMap[connectKey] || [];
                     gljSummaryItem.ratios = ratios;
                     gljEle.children = ratios.map(ratio => {
-                        const noCost = !+ratio.consumption;
+                        const noCost = getNoCost(projectGLJCodeMap, ratio.code);
                         return new LabourMaterialsEquipmentsMachinesElement(ratio, ratio.consumption, noCost);
                     });
                     mergeGLJSummary(gljSummaryItem); // 合并人材机消耗量,为输出建设项目表下的人材机汇总做准备

+ 33 - 9
web/over_write/js/guangdong_2018_import.js

@@ -62,6 +62,8 @@ const importXML = (() => {
         FEE: 2,
         // 费率、指数、比例(%)类小数精度
         RATE: 3,
+        // 默认、中间过程
+        PROCESS: 6
     };
     // 根据上方精度要求得到的项目属性,小数位数的值
     const tenderPropertyDecimal = {
@@ -115,9 +117,9 @@ const importXML = (() => {
     }
     // 从xml对象中提取基本信息相关
     function extractBasicInfo(projectSrc) {
-        const projectInfo = getValue(projectSrc, ['ProjectInfo']); // 估概预算信息
-        const tendereeInfo = getValue(projectSrc, ['TendereeInfo']); // 招标信息
-        const bidderInfo = getValue(projectSrc, ['BidderInfo']); // 投标信息
+        const projectInfo = getValue(projectSrc, ['ConstructionInfo', 'ProjectInfo']); // 估概预算信息
+        const tendereeInfo = getValue(projectSrc, ['ConstructionInfo', 'TendereeInfo']); // 招标信息
+        const bidderInfo = getValue(projectSrc, ['ConstructionInfo', 'BidderInfo']); // 投标信息
         return [
             { key: 'projNum', value: getValue(projectSrc, ['_Number']) }, // 编码
             { key: 'projectCategory', value: getValue(projectSrc, ['_ProjectCategory']) }, // 工程类别
@@ -518,7 +520,7 @@ const importXML = (() => {
         }
     }
     // 提取措施项目
-    function extractCSXM(tenderSrc) {
+    /* function extractCSXM(tenderSrc) {
         const csxmSrc = getValue(tenderSrc, ['Preliminaries']);
         const fields = [['DivisionalWorks'], ['WorkElement']];
         const fees = getFeesFromBasicCost(csxmSrc); // 措施项目的汇总价
@@ -533,6 +535,22 @@ const importXML = (() => {
             fees,
             items
         };
+    } */
+    function extractCSXM(tenderSrc) {
+        const csxmSrc = getValue(tenderSrc, ['Preliminaries']);
+        const fields = [['DivisionalWorks'], ['WorkElement']];
+        const fees = getFeesFromBasicCost(csxmSrc); // 措施项目的汇总价
+        const items = extractItemsRecur(csxmSrc, fields, (itemSrc, curField) => {
+            if (curField[0] === fields[0][0]) {
+                return extractDivisionalWorks(itemSrc, billType.BILL);
+            } else {
+                return extractWorkElement(itemSrc, billType.BILL);
+            }
+        });
+        return {
+            fees,
+            items
+        };
     }
     // 提取其他项目
     function extractOther(tenderSrc) {
@@ -555,9 +573,9 @@ const importXML = (() => {
             specialty: extractData(sundry, 'SpecialtyProvisionalPrice', [['SpecialtyProvisionalPriceGroup'], ['SpecialtyProvisionalPriceItem']],
                 { engineeringContent: ['_Content'] }, { engineeringContent: ['_Content'] }),
             dayWork: extractData(sundry, 'DayWorkRate', [['DayWorkRateGroup'], ['DayWorkRateItem']]),
-            mainContractor: extractData(sundry, 'MainContractorAttendance', [['MainContractorAttendanceGroup'], ['MainContractorAttendanceItem']], { serviceContent: ['_Content'] }),
-            claim: extractData(sundry, 'ClaimsCost', [['ClaimsCostGroup'], ['ClaimsCostItem']]),
-            visa: extractData(sundry, 'SiteInstructionCost', [['SiteInstructionCostGroup'], ['SiteInstructionCostItem']]),
+            mainContractor: extractData(sundry, 'MainContractorAttendance', [['MainContractorAttendanceGroup'], ['MainContractorAttendanceItem']], { serviceContent: ['_Content'] }, { serviceContent: ['_Content'] }),
+            claim: extractData(sundry, 'ClaimsCost', [['ClaimsCostGroup'], ['ClaimsCostItem']], { claimVisa: ['_Reason'] }, { claimVisa: ['_Reason'] }),
+            visa: extractData(sundry, 'SiteInstructionCost', [['SiteInstructionCostGroup'], ['SiteInstructionCostItem']], { claimVisa: ['_Reason'] }, { claimVisa: ['_Reason'] }),
         };
         // 提取标题和明细
         function extractGroupOrItem(itemSrc, isGroup = true, extendAttrs = null, field) {
@@ -675,8 +693,15 @@ const importXML = (() => {
             }
             const type = getValue(gljSrc, ['_Kind']);
             switch (type) {
+                case '1':
+                    return { type: 1, shorName: '人' };
+                case '4':
+                    return { type: 4, shortName: '主' };
+                case '5':
+                    return { type: 5, shortName: '设' }
                 case '6':
                     return { type: 202, shorName: '砼' };
+                case '3':
                 case '7':
                     return { type: 301, shorName: '机' };
                 case '15':
@@ -989,7 +1014,6 @@ const importXML = (() => {
         // 合并大项费用
         function mergeWorkSummary(workSummary) {
             // 首层数据与清单模板根据费用字典进行匹配,匹配到的则赋值一些属性,匹配不到则将其及其所有子数据插入到模板最末大项费用
-            debugger;
             workSummary.forEach(summaryBills => {
                 const matched = roots.find(root => FlagFeeCodeMap[getFlag(root)] === summaryBills.feeCode);
                 if (matched) {
@@ -1382,7 +1406,7 @@ const importXML = (() => {
                 return '0';
             } else {
                 const tempQuantity = ration.quantity / bills.quantity;
-                return isFinite(tempQuantity) ? scMathUtil.roundForObj(tempQuantity, Decimal.QUANTITY) : '0';
+                return isFinite(tempQuantity) ? scMathUtil.roundForObj(tempQuantity, Decimal.PROCESS) : '0';
             }
         }
         // 转换定额人材机