Forráskód Böngészése

项目人材机11-2表

TonyKang 7 éve
szülő
commit
ae4755309d

+ 67 - 43
modules/reports/util/rpt_construct_data_util.js

@@ -136,11 +136,25 @@ class Rpt_Data_Extractor {
                             if (key === projectConst.RATION_GLJ && (rst.indexOf(projectConst.PROJECTGLJ) < 0)) {
                                 rst.push(projectConst.PROJECTGLJ);
                             }
-                            if (key === projectConst.PROJECTGLJ && (rst.indexOf(projectConst.RATION_GLJ) < 0)) {
-                                rst.push(projectConst.RATION_GLJ);
+                            if (key === projectConst.PROJECTGLJ) {
+                                if (rst.indexOf(projectConst.RATION_GLJ) < 0) rst.push(projectConst.RATION_GLJ);
+                                if (field[JV.PROP_FIELD_EXP_MAP].indexOf("'quantity'") > 0 ||
+                                    field[JV.PROP_FIELD_EXP_MAP].indexOf("'subdivisionQuantity'") > 0 ||
+                                    field[JV.PROP_FIELD_EXP_MAP].indexOf("'techQuantity'") > 0 ) {
+                                    if (rst.indexOf(projectConst.RATION) < 0) rst.push(projectConst.RATION);
+                                    if (rst.indexOf(projectConst.BILLS) < 0) rst.push(projectConst.BILLS);
+                                }
                             }
                         }
                     }
+                } else if (key === projectConst.PROJECTGLJ) {
+                    if (rst.indexOf(projectConst.RATION_GLJ) < 0) rst.push(projectConst.RATION_GLJ);
+                    if (field[JV.PROP_FIELD_EXP_MAP].indexOf("'quantity'") > 0 ||
+                        field[JV.PROP_FIELD_EXP_MAP].indexOf("'subdivisionQuantity'") > 0 ||
+                        field[JV.PROP_FIELD_EXP_MAP].indexOf("'techQuantity'") > 0 ) {
+                        if (rst.indexOf(projectConst.RATION) < 0) rst.push(projectConst.RATION);
+                        if (rst.indexOf(projectConst.BILLS) < 0) rst.push(projectConst.BILLS);
+                    }
                 }
             }
         };
@@ -208,7 +222,7 @@ class Rpt_Data_Extractor {
         let rationGLJDatas = getModuleDataByKey(rawDataObj.prjData, "ration_glj");
         let rationDatas = getModuleDataByKey(rawDataObj.prjData, "ration");
         let billsDatas = getModuleDataByKey(rawDataObj.prjData, "bills");
-        if (projectGLJDatas && rationGLJDatas, rationDatas, billsDatas) {
+        if (projectGLJDatas && rationGLJDatas && rationDatas && billsDatas) {
             gljUtil.calcProjectGLJQuantity(projectGLJDatas.data, rationGLJDatas.data, rationDatas.data, billsDatas.data, 4);
         }
 
@@ -302,7 +316,7 @@ function getModuleDataByKey(prjData, key) {
 function summaryData(sourceData, handleCfg, prjData){
     let rstArr = [], tempRstArr = [];
     let curParentPrjData = {};
-    for (let item of sourceData.data) {
+    for (let item of getActDataArr(sourceData)) {
         if (item._doc) {
             tempRstArr.push(item._doc);
         } else {
@@ -378,14 +392,13 @@ function summaryData(sourceData, handleCfg, prjData){
             }
         }
     }
-    delete sourceData.data;
-    sourceData.data = rstArr;
+    replaceActDataArr(sourceData, rstArr);
     // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sumRst.jsp");
 }
 
 function filterData(sourceData, handleCfg, prjData) {
     let rstArr = [], tempRstArr = [];
-    for (let item of sourceData.data) {
+    for (let item of getActDataArr(sourceData)) {
         if (item._doc) {
             tempRstArr.push(item._doc);
         } else {
@@ -472,11 +485,7 @@ function filterData(sourceData, handleCfg, prjData) {
             curComparePrjData = getModuleDataByKey(prjData, targetDataKey);
             try {
                 if (curComparePrjData !== null) {
-                    if (targetDataKey === "projectGLJ") {
-                        objDataArr = curComparePrjData.data.gljList;
-                    } else {
-                        objDataArr = curComparePrjData.data;
-                    }
+                    objDataArr = getActDataArr(curComparePrjData);
                     for (let dtl of objDataArr) {
                         if (item[refKey] === dtl[targetPropertyKey]) {
                             rst = dtl;
@@ -533,7 +542,7 @@ function filterData(sourceData, handleCfg, prjData) {
                     if (!compareObj.hasOwnProperty(cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString())) {
                         compareObj[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString()] = [];
                         compareArr = compareObj[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString()];
-                        for (let data of curComparePrjData.data) {
+                        for (let data of getActDataArr(curComparePrjData)) {
                             if (compareArr.indexOf(data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]]) < 0) {
                                 compareArr.push(data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]]);
                             }
@@ -543,7 +552,7 @@ function filterData(sourceData, handleCfg, prjData) {
                     }
                     compRst = private_chkVal(item[cfg.key], compareArr, cfg[JV.PROP_FILTER_CONDITION]);
                 } else {
-                    for (let data of curComparePrjData.data) {
+                    for (let data of getActDataArr(curComparePrjData)) {
                         compRst = private_chkVal(item[cfg.key], data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]], cfg[JV.PROP_FILTER_CONDITION]);
                         if (compRst) break;
                     }
@@ -572,14 +581,13 @@ function filterData(sourceData, handleCfg, prjData) {
         }
         rstArr = newRstArr;
     }
-    delete sourceData.data;
-    sourceData.data = rstArr;
+    replaceActDataArr(sourceData, rstArr);
     // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");
 }
 
 function adjustData(sourceData, adjustCfg) {
     let rstArr = [];
-    for (let item of sourceData.data) {
+    for (let item of getActDataArr(sourceData)) {
         if (item._doc) {
             rstArr.push(item._doc);
         } else {
@@ -595,8 +603,7 @@ function adjustData(sourceData, adjustCfg) {
             }
         }
     }
-    delete sourceData.data;
-    sourceData.data = rstArr;
+    replaceActDataArr(sourceData, rstArr);
 }
 
 function moveRationData(rationData, rawDataObj) {
@@ -605,7 +612,7 @@ function moveRationData(rationData, rawDataObj) {
         let rationGljData = getModuleDataByKey(rawDataObj.prjData, projectConst.RATION_GLJ);
         let prjGljData = getModuleDataByKey(rawDataObj.prjData, projectConst.PROJECTGLJ);
         let dummyCode = " ", dummyPRJID = 10101010;
-        for (let rationItem of rationData.data) {
+        for (let rationItem of getActDataArr(rationData)) {
             if (rationItem.type === 2 || rationItem.type === 3) {
                 //2: 量材(人工/材料/机械/主材/设备) 3:材料(材料/主材/设备)
                 let copyItem = {};
@@ -682,7 +689,7 @@ function getDupGrpKeyVals(sourceData, segKeys) {
 
 function addDummyData(sourceData, addCfg) {
     let rstArr = [], tempRstArr = [];
-    for (let item of sourceData.data) {
+    for (let item of getActDataArr(sourceData)) {
         if (item._doc) {
             tempRstArr.push(item._doc);
         } else {
@@ -715,8 +722,7 @@ function addDummyData(sourceData, addCfg) {
         }
     }
     rstArr = rstArr.concat(tempRstArr);
-    delete sourceData.data;
-    sourceData.data = rstArr;
+    replaceActDataArr(sourceData, rstArr);
 }
 
 function getGLJBizType(orgType, orgCode, orgName) {
@@ -756,9 +762,10 @@ function getGLJBizType(orgType, orgCode, orgName) {
 }
 
 function sortData(sourceData, sortCfg, prjData) {
-    let rst = sourceData.data, tempRstArr = [];
+    let rst = getActDataArr(sourceData), tempRstArr = [];
     let sortType = sortCfg[JV.PROP_SORT_TYPE];
-    for (let item of sourceData.data) {
+    let srcData = getActDataArr(sourceData);
+    for (let item of srcData) {
         if (item._doc) {
             tempRstArr.push(item._doc);
         } else {
@@ -859,14 +866,12 @@ function sortData(sourceData, sortCfg, prjData) {
             }
             let destArr = [];
             treeUtil.getFlatArray(newTopArr, destArr);
-            delete sourceData.data;
-            sourceData.data = destArr;
+            replaceActDataArr(sourceData, destArr);
             // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.jsp");
             break;
         case "normal":
             private_normal_sort(tempRstArr, sortCfg[JV.PROP_SORT_KEYS]);
-            delete sourceData.data;
-            sourceData.data = tempRstArr;
+            replaceActDataArr(sourceData, tempRstArr);
             // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.jsp");
             break;
         case "accord_to_parent":
@@ -874,7 +879,7 @@ function sortData(sourceData, sortCfg, prjData) {
             let parentSrcData = getModuleDataByKey(prjData, pcKey[JV.PROP_PARENT_DATA_KEY]);
             if (parentSrcData) {
                 let tempParentArr = [];
-                for (let item of parentSrcData.data) {
+                for (let item of getActDataArr(parentSrcData)) {
                     if (item._doc) {
                         tempParentArr.push(item._doc);
                     } else {
@@ -906,8 +911,7 @@ function sortData(sourceData, sortCfg, prjData) {
                     }
                 }
             }
-            delete sourceData.data;
-            sourceData.data = tempRstArr;
+            replaceActDataArr(sourceData, tempRstArr);
             break;
         case "self_define":
             if (sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]) {
@@ -915,8 +919,7 @@ function sortData(sourceData, sortCfg, prjData) {
                 eval('selfDefFunc = ' + sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
                 tempRstArr.sort(selfDefFunc);
             }
-            delete sourceData.data;
-            sourceData.data = tempRstArr;
+            replaceActDataArr(sourceData, tempRstArr);
             break;
         default:
             //
@@ -1020,7 +1023,7 @@ function ext_getPropety(propKey) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
     if (propKey && dtObj) {
-        for (let dItem of dtObj.data) {
+        for (let dItem of getActDataArr(dtObj)) {
             let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
             if (propKey instanceof Array) {
                 for (let pi = 0; pi < propKey.length; pi++) {
@@ -1054,7 +1057,7 @@ function ext_getPropertyByRefId(baseKey, refIDKey, propertyKey){
     let dtObj = parentObj["myOwnRawDataObj"];
     let orgDtObj = parentObj["myOwnOrgRawDataObj"];
     if (baseKey && refIDKey && propertyKey && dtObj) {
-        for (let dItem of dtObj.data) {
+        for (let dItem of getActDataArr(dtObj)) {
             let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
             let tmpRst = doc[baseKey];
             if (typeof tmpRst === "string" && tmpRst[0] === "@") {
@@ -1108,7 +1111,7 @@ function ext_getFee(feeKey, dtlFeeKey) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
     if (feeKey && dtObj) {
-        for (let dItem of dtObj.data) {
+        for (let dItem of getActDataArr(dtObj)) {
             rst.push(pri_getFee(dItem, feeKey, dtlFeeKey));
         }
     }
@@ -1219,7 +1222,7 @@ function ext_getArrayValues(itemKey) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
     let keysArr = itemKey.split(".");
-    for (let dataItem of dtObj.data) {
+    for (let dataItem of getActDataArr(dtObj)) {
         let itemArr = [];
         if (keysArr.length <= 2) {
             if (dataItem[keysArr[0]] instanceof Array) {
@@ -1279,7 +1282,8 @@ function ext_getBlank(dftVal) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
     if (dtObj) {
-        for (let i = 0; i < dtObj.data.length; i++) {
+        let dtData = getActDataArr(dtObj);
+        for (let i = 0; i < dtData.length; i++) {
             if (dftVal !== null && dftVal !== undefined) {
                 rst.push(dftVal)
             } else rst.push('');
@@ -1293,7 +1297,7 @@ function ext_getPropertyByFlag(flagVal, rstKey, dftValIfEmpty) {
     let dtObj = parentObj["myOwnRawDataObj"];
     if (flagVal && rstKey && dtObj) {
         let isArr = (flagVal instanceof Array);
-        for (let dItem of dtObj.data) {
+        for (let dItem of getActDataArr(dtObj)) {
             let doc = (dItem._doc)?dItem._doc:dItem;
             if (doc.hasOwnProperty("flags")) {
                 let bFlag = false;
@@ -1335,8 +1339,7 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfN
         if (foreignIdVal instanceof Array) {
             for (let idVal of foreignIdVal) {
                 isFound = false;
-                let dataArr = dtObj.data;
-                if (dtObj.moduleName === "projectGLJ") dataArr = dtObj.data.gljList;
+                let dataArr = getActDataArr(dtObj);
                 for (let i = 0; i < dataArr.length; i++) {
                     let item = (dataArr[i]._doc)?dataArr[i]._doc:dataArr[i];
                     if (item[IdKey] === idVal) {
@@ -1367,7 +1370,7 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfN
                 }
             }
         } else {
-            for (let item of dtObj.data) {
+            for (let item of getActDataArr(dtObj)) {
                 if (item[IdKey] === foreignIdVal) {
                     rst.push(item[propKey]);
                     isFound = true;
@@ -1382,4 +1385,25 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfN
     return rst;
 }
 
+function getActDataArr(dtObj) {
+    let rst = null;
+    if (dtObj) {
+        rst = dtObj.data;
+        if (dtObj.moduleName === "projectGLJ") {
+            rst = dtObj.data.gljList;
+        }
+    }
+    return rst;
+}
+
+function replaceActDataArr(dtObj, newArr) {
+    if (dtObj.moduleName === "projectGLJ") {
+        delete dtObj.data.gljList;
+        dtObj.data.gljList = newArr;
+    } else {
+        delete dtObj.data;
+        dtObj.data = newArr;
+    }
+}
+
 export default Rpt_Data_Extractor;

+ 107 - 0
test/unit/reports/test_rpt_11_2.js

@@ -0,0 +1,107 @@
+/**
+ * Created by Tony on 2018/6/11.
+ */
+
+let test = require('tape');
+import JpcEx from "../../../modules/reports/rpt_component/jpc_ex";
+import JV from "../../../modules/reports/rpt_component/jpc_value_define";
+let config = require("../../../config/config.js");
+config.setupDb(process.env.NODE_ENV);
+let mongoose = require("mongoose");
+let fileUtils = require("../../../modules/common/fileUtils");
+let path = require('path');
+let dbm = require("../../../config/db/db_manager");
+let rpt_cfg = require('./rpt_cfg');
+dbm.connect(process.env.NODE_ENV);
+
+//统一引用models
+fileUtils.getGlobbedFiles('../../../modules/all_models/*.js').forEach(function(modelPath) {
+    require(path.resolve(modelPath));
+});
+
+//config.setupCache();
+let cfgCacheUtil = require("../../../config/cacheCfg");
+cfgCacheUtil.setupDftCache();
+
+let fsUtil = require("../../../public/fsUtil");
+
+let demoPrjId = - 1;
+let demoRptId = 292, pagesize = "A4"; //11-2表(新)
+
+// let userId_Leng = "59cdf14a0034a1000ba52b97"; //小冷User Id 换成_id了 QQ号
+let userId_Leng = "5acac1e885bf55000bd055ba"; //小冷User Id2
+// demoPrjId = 720; //QA: DW3
+//demoPrjId = 1626; //QA:
+demoPrjId = 2260; //QA:
+//*/
+let userId_Dft = userId_Leng;
+/*/
+ 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";
+
+let fs = require('fs');
+//设置Date Format函数
+fs.readFile(__dirname.slice(0, __dirname.length - 18) + '/public/web/date_util.js', 'utf8', 'r', function (err, data) {
+    eval(data);
+});
+
+test('测试 - 测试模板啦: ', function (t) {
+    rptTplFacade.getRptTemplate(demoRptId).then(function(rptTpl) {
+        let rptDataUtil = new rptDataExtractor();
+        rptDataUtil.initialize(rptTpl._doc);
+        let filter = rptDataUtil.getDataRequestFilter();
+        console.log(filter);
+        //正常应该根据报表模板定义的数据类型来请求数据
+        rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
+            if (!err) {
+                try {
+                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_建筑11-2表.jsp");
+                    let tplData = rptDataUtil.assembleData(rawDataObj);
+                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataAfterCacl_建筑11-2表.jsp");
+                    // fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_建筑11-2表.jsp");
+                    //it's time to build the report!!!
+                    let printCom = JpcEx.createNew();
+                    rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pagesize;
+                    let defProperties = rpt_cfg;
+                    let dftOption = JV.PAGING_OPTION_NORMAL;
+                    printCom.initialize(rptTpl);
+                    printCom.analyzeData(rptTpl, tplData, defProperties, dftOption);
+                    let maxPages = printCom.totalPages;
+                    let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
+                    if (pageRst) {
+                        // fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult_建筑11-2表.jsp");
+                    } else {
+                        console.log("oh! no pages were created!");
+                    }
+                } catch (ex) {
+                    console.log(ex);
+                    t.pass('pass with exception!');
+                    t.end();
+                }
+
+                t.pass('pass succeeded!');
+                t.end();
+            } else {
+                console.log(msg);
+                t.pass('pass with error!');
+                t.end();
+            }
+        })
+    });
+});
+
+test('close the connection', function (t) {
+    setTimeout(function () {
+        mongoose.disconnect();
+        t.pass('closing db connection');
+        t.end();
+    }, 1000);
+    // mongoose.disconnect();
+    // t.pass('closing db connection');
+    // t.end();
+});

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

@@ -59,8 +59,9 @@ test('测试 - 测试模板啦: ', function (t) {
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
             if (!err) {
                 try {
-                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_建筑09-1表.jsp");
+                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_建筑09-1表.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
+                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataAfterCacl_建筑09-1表.jsp");
                     // fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_建筑09-1表.jsp");
                     //it's time to build the report!!!
                     let printCom = JpcEx.createNew();