Browse Source

广东接口相关

1.更新广东接口
2.更改计算程序刷新定额计算程序方法
vian 5 years ago
parent
commit
131d2c0659

+ 14 - 0
config/config.js

@@ -16,6 +16,20 @@ module.exports = {
         },
         importURL:"192.168.1.184:6050"
     },
+    qa_outer: {
+        server: "smartcost.in.8866.org",
+        port: "26904",
+        options:{
+            user:'smartcost',
+            pass:'smartcost3850888',
+            auth: {
+                "authdb": "admin"
+            },
+            connectTimeoutMS: 100000,
+            useMongoClient: true
+        },
+        importURL:"192.168.1.184:6050"
+    },
     test_auth: {
         server: "120.78.150.216",
         port: "27017",

+ 3 - 1
modules/pm/controllers/pm_controller.js

@@ -868,7 +868,9 @@ module.exports = {
     getProjectByGranularity: async function(req, res) {
         try {
             let data = JSON.parse(req.body.data);
-            let projData = await pm_facade.getProjectByGranularity(data.tenderID, data.granularity, req.session.sessionUser.id, req.session.compilationVersion);
+            const userID = req.session.sessionUser.id;
+            const version = req.session.compilationVersion;
+            let projData = await pm_facade.getProjectByGranularity(data.tenderID, data.granularity, data.summaryObj, userID, version);
             callback(req, res, 0, 'success', projData);
         } catch (err) {
             callback(req, res, 1, err, null);

+ 24 - 30
modules/pm/facade/pm_facade.js

@@ -1017,11 +1017,14 @@ async function getTendersFeeInfo(tenders) {
     return IDMapping;
 }
 
-async function getSummaryInfo(projectIDs, feeFields = null){
-    function initFees(obj, feeFields) {
+async function getSummaryInfo(projectIDs, feeFields = null, engineeringCostFields = null){
+    function initFees(obj, feeFields, engineeringCostFields) {
         for (let data of feeFields) {
             obj[data.v] = 0;
         }
+        for (let data of engineeringCostFields) {
+            obj[data.k] = 0; 
+        }
     }
     if (!feeFields) {
         feeFields = [
@@ -1034,6 +1037,10 @@ async function getSummaryInfo(projectIDs, feeFields = null){
             {k: billsFlags.TAX, v: 'tax'}
         ];
     }
+    // 项目总造价的各个费用,k为汇总的字段,v为工程造价的费用字段
+    if (!engineeringCostFields) {
+        engineeringCostFields = [{ k: 'estimate', v: 'estimate' }];
+    }
     //ID与汇总信息映射
     let IDMapping = {};
     //固定清单类别与汇总金额字段映射
@@ -1056,21 +1063,21 @@ async function getSummaryInfo(projectIDs, feeFields = null){
                 }
             }
         }
-        IDMapping[project.ID] = {estimate: 0, rate: 0, buildingArea: grossArea, perCost: ''};
-        initFees(IDMapping[project.ID], feeFields);
+        IDMapping[project.ID] = {rate: 0, buildingArea: grossArea, perCost: ''};
+        initFees(IDMapping[project.ID], feeFields, engineeringCostFields);
         console.log(IDMapping[project.ID]);
     }
 
     //单项工程
     let engineerings = await projectModel.find({ParentID: {$in : projectIDs}, projType: projectType.engineering, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
-    //单位工程
     let tenders = [];
     let engIDs = [];
     for(let eng of engineerings){
         engIDs.push(eng.ID);
-        IDMapping[eng.ID] = {estimate: 0, rate: 0, buildingArea: '', perCost: ''};
-        initFees(IDMapping[eng.ID], feeFields);
+        IDMapping[eng.ID] = {rate: 0, buildingArea: '', perCost: ''};
+        initFees(IDMapping[eng.ID], feeFields, engineeringCostFields);
     }
+    //单位工程
     if(engIDs.length > 0){
         tenders = await projectModel.find({ParentID: {$in : engIDs}, projType: projectType.tender, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
     }
@@ -1078,8 +1085,8 @@ async function getSummaryInfo(projectIDs, feeFields = null){
     if(tenders.length > 0){
         for(let tender of tenders){
             tenderIDs.push(tender.ID);
-            IDMapping[tender.ID] = {rate: 0, estimate: 0, buildingArea: '', perCost: '', changeMark:tender.changeMark,property:tender.property};
-            initFees(IDMapping[tender.ID], feeFields);
+            IDMapping[tender.ID] = {rate: 0, buildingArea: '', perCost: '', changeMark:tender.changeMark,property:tender.property};
+            initFees(IDMapping[tender.ID], feeFields, engineeringCostFields);
             let buildingArea = getBuildingArea(tender.property.projectFeature);
             if(buildingArea){
                 IDMapping[tender.ID]['buildingArea'] = buildingArea;
@@ -1095,13 +1102,14 @@ async function getSummaryInfo(projectIDs, feeFields = null){
             let billsFlag = bills.flags[0]['flag'];
             let costField = flagFieldMapping[billsFlag];
             IDMapping[bills.projectID][costField] = getTotalFee(bills, 'common');
-            //暂估合价(工程造价暂估合价)
+            // 工程造价各费用
             if (billsFlag === billsFlags.ENGINEERINGCOST){
-                IDMapping[bills.projectID]['estimate'] = getTotalFee(bills, 'estimate');
+                engineeringCostFields.forEach(({k, v}) => {
+                    IDMapping[bills.projectID][k] = getTotalFee(bills, v);
+                });
             }
         }
-        let summaryFields = feeFields.map(data => data.v);
-        summaryFields.push('estimate');
+        let summaryFields = [...feeFields, ...engineeringCostFields].map(data => data.v);
         //进行单项工程级别的汇总
         for(let tender of tenders){
             summarizeToParent(IDMapping[tender.ParentID], IDMapping[tender.ID], summaryFields);
@@ -1372,7 +1380,7 @@ async function getProjectFeature(valuationID, engineeringName, feeName) {
 
 //根据单位工程,获取建设项目-单项工程-单位工程,不包含无单位工程的单项工程
 //@param {Number}tenderID(单位工程ID) {Number}granularity(颗粒度 1:建设项目 2:单项工程 3:单位工程)
-async function getProjectByGranularity(tenderID, granularity, userID, versionName) {
+async function getProjectByGranularity(tenderID, granularity, summaryObj, userID, versionName) {
     const GRANULARITY = {
         PROJECT: 1,
         ENGINEERING: 2,
@@ -1406,22 +1414,8 @@ async function getProjectByGranularity(tenderID, granularity, userID, versionNam
     }
     constructionProject.children = engineerings;
     //获取汇总信息
-    let feeFields = [
-        {k: billsFlags.ENGINEERINGCOST, v: 'engineeringCost'},
-        {k: billsFlags.SUB_ENGINERRING, v: 'subEngineering'},
-        {k: billsFlags.MEASURE, v: 'measure'},
-        {k: billsFlags.SAFETY_CONSTRUCTION, v: 'safetyConstruction'},
-        {k: billsFlags.OTHER, v: 'other'},
-        {k: billsFlags.CHARGE, v: 'charge'},
-        {k: billsFlags.PROVISIONAL, v: 'provisional'},
-        {k: billsFlags.MATERIAL_PROVISIONAL, v: 'materialProvisional'},
-        {k: billsFlags.ENGINEERING_ESITIMATE, v: 'engineeringEstimate'},
-        {k: billsFlags.DAYWORK, v: 'daywork'},
-        {k: billsFlags.TURN_KEY_CONTRACT, v: 'turnKeyContract'},
-        {k: billsFlags.CLAIM_VISA, v: 'claimVisa'},
-        {k: billsFlags.TAX, v: 'tax'}
-    ];
-    constructionProject.summaryInfo = await getSummaryInfo([constructionProject.ID], feeFields);
+    const { feeFields, engineeringCostFields } = summaryObj;
+    constructionProject.summaryInfo = await getSummaryInfo([constructionProject.ID], feeFields, engineeringCostFields);
     //获取编制软件信息: 软件公司;软件名;版本号;授权信息; base64
     let product = await productModel.findOne({});
     let company = product.company || '珠海纵横创新软件有限公司',

+ 22 - 0
web/building_saas/main/js/models/exportStandardInterface.js

@@ -137,6 +137,27 @@ const XMLStandard = (function () {
         'FBSBF': '分包设备费',
         'FBGR': '分包人工工日',
     };
+
+    // 项目汇总字段
+    const summaryObj = {
+        feeFields: [
+            {k: fixedFlag.ENGINEERINGCOST, v: 'engineeringCost'},
+            {k: fixedFlag.SUB_ENGINERRING, v: 'subEngineering'},
+            {k: fixedFlag.MEASURE, v: 'measure'},
+            {k: fixedFlag.SAFETY_CONSTRUCTION, v: 'safetyConstruction'},
+            {k: fixedFlag.OTHER, v: 'other'},
+            {k: fixedFlag.CHARGE, v: 'charge'},
+            {k: fixedFlag.PROVISIONAL, v: 'provisional'},
+            {k: fixedFlag.MATERIAL_PROVISIONAL, v: 'materialProvisional'},
+            {k: fixedFlag.ENGINEERING_ESITIMATE, v: 'engineeringEstimate'},
+            {k: fixedFlag.DAYWORK, v: 'daywork'},
+            {k: fixedFlag.TURN_KEY_CONTRACT, v: 'turnKeyContract'},
+            {k: fixedFlag.CLAIM_VISA, v: 'claimVisa'},
+            {k: fixedFlag.TAX, v: 'tax'}
+        ],
+        engineeringCostFields: null
+    };
+
     // 通用设置和工具
     let _base = XML_EXPORT_BASE,
         _config = _base.CONFIG,
@@ -2133,6 +2154,7 @@ const XMLStandard = (function () {
     }
 
     return {
+        summaryObj,
         entry,
         resetContentCode,
         saveAsFile

+ 22 - 18
web/building_saas/main/js/models/exportStdInterfaceBase.js

@@ -504,15 +504,16 @@ const XML_EXPORT_BASE = (() => {
     /*
      * 根据粒度获取项目(不包含详细数据)数据
      * @param  {Number}granularity 导出粒度
+     *         {Object}summaryObj 汇总字段
      *         {Number}tenderID 单位工程ID
      *         {String}userID 用户ID
      * @return {Object} 返回的数据结构:{children: [{children: []}]} 最外层为建设项目,中间为单项工程,最底层为单位工程
      * */
-    async function getProjectByGranularity(granularity, tenderID, userID) {
+    async function getProjectByGranularity(granularity, summaryObj, tenderID, userID) {
         let projectData = _cache.projectData;
         // 没有数据,需要拉取
         if (!Object.keys(projectData).length) {
-            projectData = await ajaxPost('/pm/api/getProjectByGranularity', { user_id: userID, tenderID: tenderID, granularity: granularity });
+            projectData = await ajaxPost('/pm/api/getProjectByGranularity', { user_id: userID, tenderID, granularity, summaryObj});
             _cache.projectData = projectData;
         }
         return projectData;
@@ -547,7 +548,7 @@ const XML_EXPORT_BASE = (() => {
      *         {String}userID 用户ID
      * @return {Array} 数据结构为:[{data: Object, exportKind: Number, fileName: String}]
      * */
-    async function extractExportData(entryFunc, granularity, exportKind, tenderID, userID) {
+    async function extractExportData(entryFunc, granularity, summaryObj, exportKind, tenderID, userID) {
         // 默认导出建设项目
         if (!granularity || ![1, 2, 3].includes(granularity)) {
             granularity = GRANULARITY.PROJECT;
@@ -557,7 +558,7 @@ const XML_EXPORT_BASE = (() => {
             exportKind = EXPORT_KIND.Tender;
         }
         // 拉取标段数据:建设项目、单项工程、单位工程数据
-        let projectData = await getProjectByGranularity(granularity, tenderID, userID);
+        let projectData = await getProjectByGranularity(granularity, summaryObj, tenderID, userID);
         if (!projectData) {
             throw '获取项目数据错误';
         }
@@ -570,6 +571,19 @@ const XML_EXPORT_BASE = (() => {
         return await entryFunc(userID, exportKind, projectData);
     }
 
+    //获取普通基数: {xxx}
+    function getNormalBase(str) {
+        let reg = /{.+?}/g,
+            matchs = str.match(reg);
+        return matchs || [];
+    }
+    //获取id引用基数: @xxx-xxx-xx
+    function getIDBase(str) {
+        let reg = /@.{36}/g,
+            matchs = str.match(reg);
+        return matchs || [];
+    }
+
     // 转换基数表达式
     // 1.有子项,则取固定清单对应基数
     // 2.无子项,有基数,a.优先转换为行代号(不可自身) b.不能转换为行代号则找对应字典
@@ -582,8 +596,8 @@ const XML_EXPORT_BASE = (() => {
         }
         if (expr) {
             let illegal = false;
-            let normalBase = _getNormalBase(expr),
-                idBase = _getIDBase(expr);
+            let normalBase = getNormalBase(expr),
+                idBase = getIDBase(expr);
             //普通基数转基数字典
             normalBase.forEach(base => {
                 let replaceStr = CalcBaseMap[base];
@@ -629,18 +643,6 @@ const XML_EXPORT_BASE = (() => {
             }
             return expr;
         }
-        //获取普通基数: {xxx}
-        function _getNormalBase(str) {
-            let reg = /{.+?}/g,
-                matchs = str.match(reg);
-            return matchs || [];
-        }
-        //获取id引用基数: @xxx-xxx-xx
-        function _getIDBase(str) {
-            let reg = /@.{36}/g,
-                matchs = str.match(reg);
-            return matchs || [];
-        }
     }
     // 转换基数说明,根据转换后的基数处理
     //1.行引用转换为对应行的名称
@@ -801,6 +803,8 @@ const XML_EXPORT_BASE = (() => {
         sortByNext,
         getTenderDetail,
         getProjectByGranularity,
+        getNormalBase,
+        getIDBase,
         transformCalcBase,
         transformCalcBaseState,
         getCodeSheetData,

File diff suppressed because it is too large
+ 711 - 127
web/building_saas/main/js/models/exportStdInterface_gd18.js


+ 5 - 1
web/building_saas/main/js/views/calc_program_view.js

@@ -41,7 +41,7 @@ let calcProgramObj = {
 
     // 刷新显示当前选中树结点的计算程序。
     // treeNode:末指定时默认是造价书当前选中树结点
-    // refreshKind: 1 仅刷新 2 计算并刷新但无需保存 3 计算保存并刷新
+    // refreshKind: 1 仅刷新 2 计算并刷新但无需保存 3 计算保存并刷新 4 仅计算无需保存和刷新
     refreshCalcProgram: function (treeNode, refreshKind = 1) {
         var me = this;
         me.treeNode = treeNode;
@@ -51,6 +51,7 @@ let calcProgramObj = {
                 // doNothing
                 break;
             case 2:
+            case 4:
                 projectObj.project.calcProgram.innerCalc(treeNode, []);
                 projectObj.project.calcProgram.rationMap = null;
                 delete treeNode.changed;
@@ -61,6 +62,9 @@ let calcProgramObj = {
         }
 
         me.datas = treeNode.data.calcTemplate ? treeNode.data.calcTemplate.calcItems : [];
+        if (refreshKind === 4) {
+            return;
+        } 
         sheetCommonObj.initSheet(me.sheet, me.setting, me.datas.length);
         sheetCommonObj.showData(me.sheet, me.setting, me.datas);
         customRowHeader(me.sheet, me.datas.length);

+ 3 - 3
web/building_saas/main/js/views/export_view.js

@@ -95,7 +95,7 @@ const ExportView = (() => {
                     for (let checkedData of checkedDatas) {
                         let fileKind = parseInt($(checkedData).val());
                         let exportData = await _base.extractExportData(XMLStandard.entry, _base.CONFIG.GRANULARITY.PROJECT,
-                                fileKind, projectObj.project.ID(), userID);
+                            XMLStandard.summaryObj, fileKind, projectObj.project.ID(), userID);
                         _exportCache.push(...exportData);
                     }
                 }
@@ -140,8 +140,8 @@ const ExportView = (() => {
                     pr.start('导出数据接口', '正在导出文件,请稍候……');
                     for (let checkedData of checkedDatas) {
                         let fileKind = parseInt($(checkedData).val());
-                        let exportData = await _base.extractExportData(XMLStandard.entry, _base.CONFIG.GRANULARITY.PROJECT,
-                            fileKind, projectObj.project.ID(), userID);
+                        let exportData = await _base.extractExportData(XMLStandard.entry, _base.CONFIG.GRANULARITY.PROJECT, 
+                            XMLStandard.summaryObj, fileKind, projectObj.project.ID(), userID);
                         _exportCache.push(...exportData);
                     }
                     pr.end();