Bladeren bron

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhangweicheng 7 jaren geleden
bovenliggende
commit
41a9b5c234

+ 56 - 59
modules/reports/rpt_component/jpc_flow_tab.js

@@ -12,12 +12,11 @@ let JpcAreaHelper = require('./helper/jpc_helper_area');
 let PDFKit = require('pdfkit');
 
 let JpcFlowTabSrv = function(){};
-//let grpPageInfo = {"segGrpRecStartIdx": 0, "insertedGrpRecAmt": 0, "preAddPageGrpInfo": null};
 JpcFlowTabSrv.prototype.createNew = function(){
+    //grpPageInfo :{"segGrpRecStartIdx": 0, "insertedGrpRecAmt": 0, "preAddPageGrpInfo": null}; //纯属解释参数grpPageInfo结构
     function private_addPageValue(ValuedIdxLst, sortedSequence, grpSequenceInfo, startRecIdx, maxRecPerPage,page_seg_map, segIdx, pageIdx, grpPageInfo, isFollow, segAutoHeightInfo, prePageLeftAutoHeightRecAmt) {
         let vIdx = [], preAmt = 0, insertedGrpAmt = 0, grp_lines = 0, followMode = (isFollow)?JV.TYPE_FOLLOW_MODE:-1, nextPageAutoHeightRecAmt = 0;
         if (grpSequenceInfo && grpPageInfo) {
-            //grpPageInfo[JV.PROP_INSERTED_GRP_REC] = 0;
             if (grpPageInfo[JV.PROP_PRE_ADD_GRP_REC_INFO].length > 0) {
                 for (let grpLineIdx of grpPageInfo[JV.PROP_PRE_ADD_GRP_REC_INFO]) {
                     vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_GROUP, grpPageInfo[JV.PROP_SEG_GRP_IDX], grpLineIdx]);
@@ -36,9 +35,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 ttlValAmt = segAutoHeightInfo[segIdx][startRecIdx + vi];
             }
             if (prePageLeftAutoHeightRecAmt > 0 && vi === 0) {
-                // startIdx = ttlValAmt - prePageLeftAutoHeightRecAmt;
                 startIdx = prePageLeftAutoHeightRecAmt;
-                // autoHeightAmt += prePageLeftAutoHeightRecAmt;
             }
             for (let subValIdx = startIdx; subValIdx < ttlValAmt; subValIdx++) {
                 vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_AUTO_HEIGHT, sortedSequence[startRecIdx + vi], subValIdx, ttlValAmt]);
@@ -51,66 +48,67 @@ JpcFlowTabSrv.prototype.createNew = function(){
             }
             return couldBreak;
         }
+        let private_inner_add_grp_rec = function(vi) {
+            let hasFullGrp = true, couldBreak = false;
+            for (let i = 0; i < grp_lines; i++) {
+                if ( ((vi + insertedGrpAmt * grp_lines) + i + 1) >= (maxRecPerPage - preAmt)) {
+                    for (let j = i; j < grp_lines; j++) {
+                        grpPageInfo[JV.PROP_PRE_ADD_GRP_REC_INFO].push(j);
+                    }
+                    //准备要跳出去了
+                    hasFullGrp = false;
+                    break;
+                } else {
+                    vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_GROUP, grpPageInfo[JV.PROP_SEG_GRP_IDX], i]);
+                }
+            }
+            //3. 进位下一个group信息所在位置
+            if (hasFullGrp) {
+                grpPageInfo[JV.PROP_INSERTED_GRP_REC]++;
+                insertedGrpAmt++;
+                grpPageInfo[JV.PROP_SEG_GRP_IDX]++;
+            } else {
+                couldBreak = true;
+            }
+            return couldBreak;
+        }
+        let private_normal_add_rec = function(vi) {
+            let couldBreak = false;
+            if (segAutoHeightInfo && segAutoHeightInfo.length > 0) {
+                if (segAutoHeightInfo[segIdx].length > startRecIdx + vi) {
+                    couldBreak = private_addAutoHeightPageValue(vi);
+                    // if (couldBreak) break;
+                } else if (vIdx.length < maxRecPerPage) {
+                    vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
+                }
+            } else {
+                if (sortedSequence.length > startRecIdx + vi) {
+                    vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, sortedSequence[startRecIdx + vi]]);
+                } else {
+                    vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
+                }
+            }
+            return couldBreak;
+        }
         for (let vi = 0; (vi + insertedGrpAmt * grp_lines) < maxRecPerPage - preAmt; vi++) {
             if (grpSequenceInfo && grpPageInfo) {
                 if ((startRecIdx + vi) === grpSequenceInfo[grpPageInfo[JV.PROP_SEG_GRP_IDX]]) {
                     //表示这里要插入grouping信息啦!
-                    //1. 首先push正常的记录
-                    vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, sortedSequence[startRecIdx + vi]]);
-                    //2. 然后就要push grouping记录了
-                    let hasFullGrp = true;
-                    for (let i = 0; i < grp_lines; i++) {
-                        if ( ((vi + insertedGrpAmt * grp_lines) + i + 1) >= (maxRecPerPage - preAmt)) {
-                            for (let j = i; j < grp_lines; j++) {
-                                grpPageInfo[JV.PROP_PRE_ADD_GRP_REC_INFO].push(j);
-                            }
-                            //准备要跳出去了
-                            hasFullGrp = false;
-                            break;
-                        } else {
-                            vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_GROUP, grpPageInfo[JV.PROP_SEG_GRP_IDX], i]);
-                        }
-                    }
-                    //3. 进位下一个group信息所在位置
-                    if (hasFullGrp) {
-                        grpPageInfo[JV.PROP_INSERTED_GRP_REC]++;
-                        insertedGrpAmt++;
-                        grpPageInfo[JV.PROP_SEG_GRP_IDX]++;
-                    } else {
-                        break;
-                    }
-                } else {
+                    let couldBreak = false;
+                    //1. 首先push正常的记录(要考虑自动行高调整的分支)
                     if (segAutoHeightInfo && segAutoHeightInfo.length > 0) {
-                        if (segAutoHeightInfo[segIdx].length > startRecIdx + vi) {
-                            let couldBreak = private_addAutoHeightPageValue(vi);
-                            if (couldBreak) break;
-                        } else if (vIdx.length < maxRecPerPage) {
-                            vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
-                        }
+                        couldBreak = private_addAutoHeightPageValue(vi);
                     } else {
-                        if (sortedSequence.length > startRecIdx + vi) {
-                            vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, sortedSequence[startRecIdx + vi]]);
-                        } else {
-                            vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
-                        }
-                    }
-                }
-            } else {
-                if (segAutoHeightInfo && segAutoHeightInfo.length > 0) {
-                    if (segAutoHeightInfo[segIdx].length > startRecIdx + vi) {
-                        let couldBreak = private_addAutoHeightPageValue(vi);
-                        if (couldBreak) break;
-                    } else if (vIdx.length < maxRecPerPage) {
-                        vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
-                    }
-                } else {
-                    nextPageAutoHeightRecAmt = 0;
-                    if (sortedSequence.length > startRecIdx + vi) {
                         vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, sortedSequence[startRecIdx + vi]]);
-                    } else {
-                        vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
                     }
+                    //2. 然后就要push grouping记录了
+                    if (private_inner_add_grp_rec(vi)) break;
+                    if (couldBreak) break;
+                } else {
+                    if (private_normal_add_rec(vi)) break;
                 }
+            } else {
+                if (private_normal_add_rec(vi)) break;
             }
         }
         page_seg_map.push([pageIdx, segIdx]);
@@ -439,7 +437,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                     }
                     me.dispValueIdxLst.splice(me.dispValueIdxLst.length - 1, 1);
                 } else if (isFollow) {
-                    prePageLeftAutoHeightRecAmt = private_addPageValue(me.dispValueIdxLst, followTabEx.segments[segIdx], null, counterRowRecEx, maxRowRec, me.page_seg_map, segIdx, pageIdx, null, true, me.auto_height_info, prePageLeftAutoHeightRecAmt);
+                    prePageLeftAutoHeightRecAmt = private_addPageValue(me.dispValueIdxLst, followTabEx.segments[segIdx], null, counterRowRecEx, maxRowRec, me.page_seg_map, segIdx, pageIdx, null, true, null, 0);
                     for (let dv of me.dispValueIdxLst[me.dispValueIdxLst.length - 1]) {
                         private_chk_handle_rec_amt(dv, true);
                     }
@@ -478,7 +476,6 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         adHocAutoHeightAmt += (me.auto_height_info[segIdx][loop] - 1);
                         if (me.group_node_info && me.group_node_info[segIdx]) {
                             if (me.group_node_info[segIdx][adHocAutoHeightGrpStartIdx] === loop) {
-                                me.group_node_info[segIdx][adHocAutoHeightGrpStartIdx] = me.group_node_info[segIdx][adHocAutoHeightGrpStartIdx] + adHocAutoHeightAmt;
                                 adHocAutoHeightGrpStartIdx++;
                             }
                         }
@@ -499,13 +496,13 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         for (let loop = currentRecAmt; loop < currentRecAmt + maxRowRec; loop++) {
                             if (me.auto_height_info[segIdx].length > loop) {
                                 adHocAutoHeightAmt += (me.auto_height_info[segIdx][loop] - 1);
-                                recAmtForAdHocAutoHeight++;
+                                // recAmtForAdHocAutoHeight++;
                             } else {
                                 break;
                             }
                         }
                     }
-                    if ((ttlSegRecAmtNormal < ttlSegRecAmt) || (followTabEx != null)) {
+                    if ((ttlSegRecAmtNormal < ttlSegRecAmt) || (followTabEx !== null)) {
                         //有流水拓展,并且是follow mode
                         if (currentRecAmt + adHocAutoHeightAmt + recAmtForAdHocAutoHeight + maxRowRec > ttlSegRecAmtNormal) {
                             if (currentRecAmt + adHocAutoHeightAmt + recAmtForAdHocAutoHeight >= ttlSegRecAmtNormal) {

+ 5 - 4
test/unit/reports/test_cover_01.js

@@ -5,19 +5,20 @@
 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();
+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();
 
@@ -56,7 +57,7 @@ test('测试 - 打开模板: 封-1 ', function (t) {
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
             if (!err) {
                 try {
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject.js");
+                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
                     //build the report
                     let printCom = JpcEx.createNew();
@@ -68,7 +69,7 @@ test('测试 - 打开模板: 封-1 ', function (t) {
                     let maxPages = printCom.totalPages;
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
-                        // fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.js");
+                        // fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.jsp");
                     } else {
                         console.log("oh! no pages were created!");
                     }

+ 5 - 4
test/unit/reports/test_cover_02.js

@@ -5,19 +5,20 @@
 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();
+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();
 
@@ -56,7 +57,7 @@ test('测试 - 打开模板: 封-1 ', function (t) {
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
             if (!err) {
                 try {
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject.js");
+                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
                     //build the report
                     let printCom = JpcEx.createNew();
@@ -68,7 +69,7 @@ test('测试 - 打开模板: 封-1 ', function (t) {
                     let maxPages = printCom.totalPages;
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
-                        fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.js");
+                        fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.jsp");
                     } else {
                         console.log("oh! no pages were created!");
                     }

+ 10 - 8
test/unit/reports/test_get_prj_data.js

@@ -2,20 +2,22 @@
  * Created by Tony on 2018/3/23.
  */
 let test = require('tape');
+
+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");
-dbm.connect();
 let consts = require('../../../modules/main/models/project_consts');
 let projectConsts = consts.projectConst;
+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();
@@ -33,8 +35,8 @@ demoPrjId = 1626; //QA:
 let userId_Leng = 1142; //小冷User Id
 let userId_Dft = userId_Leng;
 /*/
-let userId_Dft = 76075;
-//*/
+ let userId_Dft = 76075;
+ //*/
 
 let fs = require('fs');
 //设置Date Format函数
@@ -46,7 +48,7 @@ fs.readFile(__dirname.slice(0, __dirname.length - 18) + '/public/web/date_util.j
 test('测试 - 获取project数据: ', function (t) {
     projectDataMdl.getData(demoPrjId, function (err, message, result) {
         if (!err) {
-            fsUtil.writeObjToFile(result, "D:/GitHome/ConstructionCost/tmp/ProjectDataFullObject.js");
+            fsUtil.writeObjToFile(result, "D:/GitHome/ConstructionCost/tmp/ProjectDataFullObject.jsp");
             t.pass('pass succeeded!');
             t.end();
         } else {
@@ -75,9 +77,9 @@ test('测试 - 获取project部分数据: ', function (t) {
                     // for (let item of results) {
                     //     newData.push(JSON.stringify(item));
                     // }
-                    // fsUtil.writeArrayToFile(newData, "D:/GitHome/ConstructionCost/tmp/getProjectData_partial.js");
-                    // fsUtil.writeObjToFile(prjObj, "D:/GitHome/ConstructionCost/tmp/getProjectObjectNew.js");
-                    fsUtil.writeObjToFile(results, "D:/GitHome/ConstructionCost/tmp/getProjectData_partialNew.js");
+                    // fsUtil.writeArrayToFile(newData, "D:/GitHome/ConstructionCost/tmp/getProjectData_partial.jsp");
+                    // fsUtil.writeObjToFile(prjObj, "D:/GitHome/ConstructionCost/tmp/getProjectObjectNew.jsp");
+                    fsUtil.writeObjToFile(results, "D:/GitHome/ConstructionCost/tmp/getProjectData_partialNew.jsp");
                     t.pass('pass succeeded!');
                     t.end();
                 } else {

+ 3 - 2
test/unit/reports/test_tpl_09.js

@@ -5,19 +5,20 @@
 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();
+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();
 

+ 5 - 3
test/unit/reports/test_tpl_09_1.js

@@ -4,12 +4,14 @@
 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();
+dbm.connect(process.env.NODE_ENV);
 
 //统一引用models
 fileUtils.getGlobbedFiles('../../../modules/all_models/*.js').forEach(function(modelPath) {
@@ -56,7 +58,7 @@ test('测试 - 测试模板啦: ', function (t) {
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
             if (!err) {
                 try {
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject.js");
+                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
                     //it's time to build the report!!!
                     let printCom = JpcEx.createNew();
@@ -116,7 +118,7 @@ test('测试 - 显示保存小数位数问题: ', function (t) {
     rpt_decimal_mdl.find({}).then(function (rst) {
         //console.log(rst);
         if (rst.length > 0) {
-            fsUtil.writeObjToFile(rst, "D:/GitHome/ConstructionCost/tmp/testDecimalResult.js");
+            fsUtil.writeObjToFile(rst, "D:/GitHome/ConstructionCost/tmp/testDecimalResult.jsp");
         }
         t.pass('pass get decimal ok!');
         t.end();