فهرست منبع

综合费率表相关

TonyKang 6 سال پیش
والد
کامیت
624385ca8d

+ 1 - 1
modules/reports/controllers/rpt_controller.js

@@ -22,7 +22,7 @@ import rpt_pdf_util from "../util/rpt_pdf_util";
 import rpt_svg_util from "../util/rpt_svg_util";
 import fs from "fs";
 import strUtil from "../../../public/stringUtil";
-import rptDataExtractor from "../util/rpt_construct_data_util";
+import rptDataExtractor from "../util/rpt_yanghu_data_util";
 
 //统一回调函数
 let callback = function(req, res, err, data){

+ 89 - 0
modules/reports/util/rpt_construct_data_util.js

@@ -8,6 +8,8 @@ let consts = require('../../../modules/main/models/project_consts');
 
 let fsUtil = require("../../../public/fsUtil");
 let stringUtil = require("../../../public/stringUtil");
+let scMathUtil = require("../../../public/scMathUtil");
+let _ = require("lodash");
 
 let treeUtil = require('../../../public/treeUtil');
 let projectConst = consts.projectConst;
@@ -220,6 +222,12 @@ class Rpt_Data_Extractor {
                 }
             }
         }
+        if (rst.indexOf(projectConst.RATION) >= 0 &&
+            rst.indexOf(projectConst.RATION_GLJ) >= 0 && rst.indexOf(projectConst.RATION_COE) < 0) {
+            rst.push(projectConst.RATION_COE);
+            //备注:在此情况下,根据业务特点,有可能需要额外计算project工料机的基价单价及市场单价,需要用到一些额外信息处理。
+            //     这里也不精细控制,直接多加一个请求类型。以后说不定还有其他类型的请求,到时候再加。
+        }
         if (rst.length === 0) {
             rst.push(projectConst.RATION_ASS);
         }
@@ -276,6 +284,15 @@ class Rpt_Data_Extractor {
                 setupFunc($PROJECT.SUMMARY, `SegmentDetail`, {"data": rawDataObj.SegmentDetail});
             }
         }
+        //综合费率
+        let feeRate = getModuleDataByKey(rawDataObj.prjData, "feeRate");
+        if (feeRate) {
+            //把综合费率树结构数据拉扁
+            // console.log(feeRate);
+            let newFeeRates = setupFeeRate(feeRate.data._doc);
+            // console.log(newFeeRates);
+            feeRate.data._doc.rates = newFeeRates;
+        }
 
         if (tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
             for (let preHandle of tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
@@ -311,6 +328,28 @@ class Rpt_Data_Extractor {
                 }
             }
         }
+        //一些计算(不保存数据,需要动态计算的)
+        if (rawDataObj.hasOwnProperty(`prj`)) {
+            let calcOptions = rawDataObj.prj._doc.property.calcOptions;
+            let decimalObj = rawDataObj.prj._doc.property.decimal;
+            let labourCoeDatas =  getModuleDataByKey(rawDataObj.prjData, "labour_coe");
+            let prjGLJDatas = getModuleDataByKey(rawDataObj.prjData, "projectGLJ");
+            let rationDatas = getModuleDataByKey(rawDataObj.prjData, "ration");
+            if (calcOptions && decimalObj && labourCoeDatas && labourCoeDatas && prjGLJDatas && rationDatas) {
+                for (let rationItem of rationDatas.data) {
+                    let glj = _.find(prjGLJDatas.data.gljList, {'id': rationItem.projectGLJID});
+                    if (glj) {
+                        let newGlj = gljUtil.getGLJPrice(glj, prjGLJDatas.data, calcOptions, labourCoeDatas, decimalObj, false, _, scMathUtil);
+                        rationItem.marketPrice = newGlj.marketPrice;
+                        rationItem.basePrice =  newGlj.basePrice;
+                        rationItem.adjustPrice = newGlj.adjustPrice;
+                        rationItem.marketUnitFee = newGlj.marketPrice;//更新树节点市场单价列的值
+                    }
+                }
+            }
+            // console.log("重新计算!");
+        }
+        //
         let rptDataObj = {};
         rptDataObj[JV.DATA_DISCRETE_DATA] = [];
         rptDataObj[JV.DATA_MASTER_DATA] = [];
@@ -1143,6 +1182,43 @@ function setupMainFunc(obj, prop, ownRawObj) {
     obj[prop].getFee = ext_mainGetFee;
 }
 
+function setupFeeRate(feeRateData){
+    let cacheObj = {}, topArr = [], rstArr = [], id_pre = 'ID_';
+    const rateProperties = [];
+    for (let rate of feeRateData.rates) {
+        cacheObj[id_pre + rate._doc.ID] = {"obj": rate._doc, "items": []};
+        // cacheObj[id_pre + rate.ID].items = [];
+        if (rate._doc.ParentID === null || rate._doc.ParentID === undefined) {
+            topArr.push(cacheObj[id_pre + rate._doc.ID]);
+        }
+    }
+    for (let rate of feeRateData.rates) {
+        if (rate._doc.ParentID && cacheObj[id_pre + rate._doc.ParentID]) {
+            cacheObj[id_pre + rate._doc.ParentID].items.push(cacheObj[id_pre + rate._doc.ID]);
+            if (rateProperties.indexOf(rate._doc.name) < 0) {
+                rateProperties.push(rate._doc.name);
+            }
+        }
+    }
+    let pri_func_set_property_rate = function (orgRateItem, rstRateItem) {
+        rstRateItem[orgRateItem.obj.name] = orgRateItem.obj.rate;
+        for (let subOrgRateItem of orgRateItem.items) {
+            pri_func_set_property_rate(subOrgRateItem, rstRateItem);
+        }
+    };
+    for (let topRate of topArr) {
+        let rstItem = {"name": topRate.obj.name};
+        for (let property of rateProperties) {
+            rstItem[property] = 0;
+        }
+        for (let dtlRateItem of topRate.items) {
+            pri_func_set_property_rate(dtlRateItem, rstItem);
+        }
+        rstArr.push(rstItem);
+    }
+    return rstArr;
+}
+
 function setupFunc(obj, prop, ownRawObj) {
     obj[prop] = {};
     obj[prop]["myOwnRawDataObj"] = ownRawObj;
@@ -1154,6 +1230,8 @@ function setupFunc(obj, prop, ownRawObj) {
     obj[prop].getArrayValues = ext_getArrayValues;
     obj[prop].getArrayItemByKey = ext_getArrayItemByKey;
     obj[prop].getPropertyByFlag = ext_getPropertyByFlag;
+    obj[prop].getSubRateProperty = ext_getRateProperty;
+    obj[prop].getRateProperty = ext_getRateProperty;
     obj[prop].getBlank = ext_getBlank;
     if (prop === projectConst.CALC_PROGRAM) obj[prop].getCalcProperty = ext_getCalcProperty;
     if (prop === projectConst.FEERATE) obj[prop].getFeeRate = ext_getFeeRate;
@@ -1250,6 +1328,17 @@ function ext_mainGetPropety(propKey) {
     return rst;
 }
 
+function ext_getRateProperty(propKey) {
+    let rst = [], parentObj = this;
+    let dtObj = parentObj["myOwnRawDataObj"];
+    if (propKey && dtObj) {
+        for (let rate of dtObj.data._doc.rates) {
+            rst.push(rate[propKey]);
+        }
+    }
+    return rst;
+}
+
 function ext_getPropety(propKey) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];

+ 1 - 1
test/unit/reports/test_cover_01.js

@@ -40,7 +40,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_cover_02.js

@@ -38,7 +38,7 @@ let userId_Leng = "59cdf14a0034a1000ba52b97"; //小冷User Id 换成_id了
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_rpt_11_2.js

@@ -42,7 +42,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 10 - 5
test/unit/reports/test_rpt_test_template.js

@@ -30,7 +30,10 @@ let demoPrjId = - 1;
 // let demoRptId = 6; //封面
 // let demoRptId = 22; //03
 // let demoRptId = 26; //07
-let demoRptId = 28; //09
+// let demoRptId = 28; //09
+// let demoRptId = 24; //05
+// let demoRptId = 20; //01
+let demoRptId = 23; //04 综合费率表
 
 let pagesize = "A4";
 //288: 11-2表(新)
@@ -43,7 +46,8 @@ let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
 //demoPrjId = 1626; //QA:
 // demoPrjId = 2260; //QA:
 // demoPrjId = 410; //QA:
-demoPrjId = 313; //PROD:
+// demoPrjId = 313; //PROD:
+demoPrjId = 446; //PROD:
 // demoPrjId = 4107; //UAT:
 //*/
 let userId_Dft = userId_Leng;
@@ -55,7 +59,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 import rpt_xl_util from "../../../modules/reports/util/rpt_excel_util";
 import rpt_pdf_util from "../../../modules/reports/util/rpt_pdf_util";
 
@@ -71,7 +75,8 @@ test('测试 - 测试模板啦: ', function (t) {
         rptDataUtil.initialize(rptTpl._doc);
         let filter = rptDataUtil.getDataRequestFilter();
         // filter.push('ration');  //临时用
-        // filter.push('feeRate'); //临时用2
+        filter.push('feeRate'); //临时用2
+        // filter.push('projectGLJ'); //临时用3
         console.log(filter);
         //正常应该根据报表模板定义的数据类型来请求数据
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
@@ -79,7 +84,7 @@ test('测试 - 测试模板啦: ', function (t) {
                 try {
                     fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataObject_测试模板.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
+                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
                     // fsUtil.writeObjToFile(tplData, "D:/GitHome/YangHuCost/tmp/rptTplAssembledData_测试模板.jsp");
                     //it's time to build the report!!!
                     let printCom = JpcEx.createNew();

+ 1 - 1
test/unit/reports/test_summary.js

@@ -57,7 +57,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-let rptDataExtractor = require("../../../modules/reports/util/rpt_construct_data_util");
+let rptDataExtractor = require("../../../modules/reports/util/rpt_yanghu_data_util");
 let rpt_xl_util = require("../../../modules/reports/util/rpt_excel_util");
 let rpt_pdf_util = require("../../../modules/reports/util/rpt_pdf_util");
 

+ 1 - 1
test/unit/reports/test_svg_data.js

@@ -40,7 +40,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 import rpt_svg_util from "../../../modules/reports/util/rpt_svg_util";
 
 let fs = require('fs');

+ 1 - 1
test/unit/reports/test_tpl_05.js

@@ -45,7 +45,7 @@ let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade"
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 let pm_facade = require('../../../modules/pm/facade/pm_facade');
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_tpl_07.js

@@ -39,7 +39,7 @@ let userId_Dft = "595328da1934dc327cad08eb";
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_tpl_09.js

@@ -40,7 +40,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_tpl_09_1.js

@@ -46,7 +46,7 @@ let userId_Dft = userId_HaiZhu;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_tpl_10.js

@@ -45,7 +45,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数

+ 1 - 1
test/unit/reports/test_tpl_11.js

@@ -43,7 +43,7 @@ let userId_Dft = userId_Leng;
 let rptTplFacade = require("../../../modules/reports/facade/rpt_template_facade");
 let rptTplDataFacade = require("../../../modules/reports/facade/rpt_tpl_data_facade");
 
-import rptDataExtractor from "../../../modules/reports/util/rpt_construct_data_util";
+import rptDataExtractor from "../../../modules/reports/util/rpt_yanghu_data_util";
 
 let fs = require('fs');
 //设置Date Format函数