Selaa lähdekoodia

code sync for 中间计量表

TonyKang 6 vuotta sitten
vanhempi
commit
adb8f93437

+ 8 - 8
app/controller/report_controller.js

@@ -120,7 +120,7 @@ module.exports = app => {
                 }
                 rptTpl = JSON.parse(rptTpl[0].rpt_content);
                 // console.log('get the template!');
-                const pageRst = await getAllPagesCommon(ctx, rptTpl, params, JV.PAGING_OPTION_NORMAL, JV.OUTPUT_TYPE_NORMAL);
+                const pageRst = await getAllPagesCommon(ctx, rptTpl, params, JV.PAGING_OPTION_NORMAL, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
                 // console.log(pageRst);
                 const roleRel = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id);
                 const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
@@ -143,7 +143,7 @@ module.exports = app => {
         async getMultiReportsEx(ctx) {
             // 原则说明:把所有报表模板集中获取,统一filter,只读一次数据!
             const params = JSON.parse(ctx.request.body.params);
-            const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL);
+            const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             const roleRel = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids);
             encodeSignatureDataUri(roleRel, this.app.baseDir);
             // console.log(pageRstArr);
@@ -166,7 +166,7 @@ module.exports = app => {
                 });
             }
             const roleRelArr = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids);
-            const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL);
+            const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             const runnableRst = [];
             for (let idx = 0; idx < pageRstArr.length; idx++) {
                 let roleRel = null;
@@ -200,7 +200,7 @@ module.exports = app => {
                 });
             }
             const roleRelArr = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids);
-            const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL);
+            const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             const runnableRst = [];
             let rptRoleRelArr = [];
             const reAssignSignatureName = function(pageData, roleRel, rpt_name_key) {
@@ -324,7 +324,7 @@ async function getReportData(ctx, params, filters) {
     return rst;
 }
 
-async function getAllPagesCommon(ctx, rptTpl, params, option, outputType) {
+async function getAllPagesCommon(ctx, rptTpl, params, option, outputType, baseDir) {
     // let rptTpl = null;
     const rptDataUtil = new rptDataExtractor();
     rptDataUtil.initialize(rptTpl);
@@ -335,7 +335,7 @@ async function getAllPagesCommon(ctx, rptTpl, params, option, outputType) {
     // console.log(rawDataObj);
     try {
         // console.log('before assemble');
-        const tplData = rptDataUtil.assembleData(rawDataObj);
+        const tplData = rptDataUtil.assembleData(rawDataObj, baseDir);
         // console.log(tplData);
         const printCom = JpcEx.createNew();
         if (params.pageSize) rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = params.pageSize;
@@ -372,7 +372,7 @@ async function getAllPagesCommon(ctx, rptTpl, params, option, outputType) {
     }
 }
 
-async function getMultiRptsCommon(ctx, params, outputType) {
+async function getMultiRptsCommon(ctx, params, outputType, baseDir) {
     for (let idx = 0; idx < params.rpt_ids.length; idx++) {
         params.rpt_ids[idx] = parseInt(params.rpt_ids[idx]); // 转换一下,以防万一
     }
@@ -420,7 +420,7 @@ async function getMultiRptsCommon(ctx, params, outputType) {
         for (let tplIdx = 0; tplIdx < rptTpls.length; tplIdx++) {
             const rptTpl = (rptTpls[tplIdx]._doc) ? rptTpls[tplIdx]._doc : rptTpls[tplIdx];
             rptDataUtil.initialize(rptTpl);
-            const tplData = rptDataUtil.assembleData(rawDataObj);
+            const tplData = rptDataUtil.assembleData(rawDataObj, baseDir);
             const printCom = JpcEx.createNew();
             rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = params.pageSize;
 

+ 80 - 42
app/reports/util/rpt_calculation_data_util.js

@@ -7,6 +7,7 @@
 const JV = require('../rpt_component/jpc_value_define');
 const $JE = require('../rpt_component/jpc_rte');
 
+const fs = require('fs');
 const fsUtil = require('../../public/js/fsUtil');
 const stringUtil = require('../../public/js/stringUtil');
 const scMathUtil = require('../../public/js/scMathUtil');
@@ -172,14 +173,14 @@ class Rpt_Data_Extractor {
     }
 
     // 装配数据(把收集到的数据,依据报表模板的指示,预处理(如:排序、过滤、合计)及装配到相关指标)
-    assembleData(rawDataObj) {
+    assembleData(rawDataObj, baseDir) {
         const $PROJECT = { REPORT: {} };
         const tpl = this.rptTpl;
         this.COMMON.initialize(tpl, rawDataObj);
         $PROJECT.COMMON = this.COMMON;
 
         // console.log(rawDataObj);
-        setupFunc($PROJECT.REPORT, rawDataObj);
+        setupFunc($PROJECT.REPORT, rawDataObj, baseDir);
 
         if (tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
             for (const preHandle of tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
@@ -487,10 +488,11 @@ function adjustData(sourceData, adjustCfg) {
 }
 
 function sortData(sourceData, sortCfg, prjData) {
-    let rst = getActDataArr(sourceData), tempRstArr = [];
-    let sortType = sortCfg[JV.PROP_SORT_TYPE];
-    let srcData = getActDataArr(sourceData);
-    for (let item of srcData) {
+    let rst = getActDataArr(sourceData);
+    const tempRstArr = [];
+    const sortType = sortCfg[JV.PROP_SORT_TYPE];
+    const srcData = getActDataArr(sourceData);
+    for (const item of srcData) {
         if (item._doc) {
             tempRstArr.push(item._doc);
         } else {
@@ -498,10 +500,10 @@ function sortData(sourceData, sortCfg, prjData) {
         }
     }
     function private_normal_sort(destArr, sortKeys) {
-        destArr.sort(function(a, b){
+        destArr.sort(function(a, b) {
             let compRst = 0;
-            for (let comp of sortKeys) {
-                let reverse = (comp.order === 'ascend')?1:(-1);
+            for (const comp of sortKeys) {
+                const reverse = (comp.order === 'ascend') ? 1 : (-1);
                 //
                 if (a[comp.key] > b[comp.key]) {
                     compRst = reverse;
@@ -515,29 +517,30 @@ function sortData(sourceData, sortCfg, prjData) {
         });
     }
     function private_parent_sort(parentArr, parentKeys, childArr, childKeys) {
-        let tmpRst = {}, rst = [];
-        for (let pItem of parentArr) {
+        const tmpRst = {};
+        const rst = [];
+        for (const pItem of parentArr) {
             let pKey = 'key';
-            for (let key of parentKeys) {
+            for (const key of parentKeys) {
                 pKey += '_' + pItem[key];
             }
             tmpRst[pKey] = [];
         }
-        for (let cItem of childArr) {
+        for (const cItem of childArr) {
             let cKey = 'key';
-            for (let key of childKeys) {
+            for (const key of childKeys) {
                 cKey += '_' + cItem[key];
             }
             if (tmpRst[cKey]) {
                 tmpRst[cKey].push(cItem);
             } else {
-                //unknown child value! should be filtered!
+                // unknown child value! should be filtered!
             }
         }
         // childArr.splice(0);
-        for (let pItem of parentArr) {
+        for (const pItem of parentArr) {
             let pKey = 'key';
-            for (let key of parentKeys) {
+            for (const key of parentKeys) {
                 pKey += '_' + pItem[key];
             }
             rst.push(tmpRst[pKey]);
@@ -549,15 +552,15 @@ function sortData(sourceData, sortCfg, prjData) {
     }
     switch (sortType) {
         case 'tree':
-            let addLevel = true;
+            const addLevel = true;
             rst = treeUtil.buildTreeNodeDirectly(tempRstArr, addLevel);
             let newTopArr = [];
             if ((sortCfg[JV.PROP_FILTER_TOP_BILLS_NODES] && sortCfg[JV.PROP_FILTER_TOP_BILLS_NODES].length > 0) ||
                 (sortCfg[JV.PROP_FILTER_OTHER_BILLS_NODES] && sortCfg[JV.PROP_FILTER_OTHER_BILLS_NODES].length > 0)) {
-                let local_check_bills = function(tItem) {
+                const local_check_bills = function(tItem) {
                     let chkDtl = false;
                     if (tItem.flags && tItem.flags.length > 0) {
-                        for (let flagItem of tItem.flags) {
+                        for (const flagItem of tItem.flags) {
                             if (sortCfg[JV.PROP_FILTER_OTHER_BILLS_NODES].indexOf(flagItem.flag) >= 0) {
                                 newTopArr.push(tItem);
                                 chkDtl = true;
@@ -566,15 +569,15 @@ function sortData(sourceData, sortCfg, prjData) {
                         }
                     }
                     if (!chkDtl && tItem.items && tItem.items.length > 0) {
-                        for (let dtlItem of tItem.items) {
+                        for (const dtlItem of tItem.items) {
                             local_check_bills(dtlItem);
                         }
                     }
                 };
-                for (let topItem of rst) {
+                for (const topItem of rst) {
                     let chkTop = false;
                     if (topItem.flags && topItem.flags.length > 0) {
-                        for (let flagItem of topItem.flags) {
+                        for (const flagItem of topItem.flags) {
                             if (sortCfg[JV.PROP_FILTER_TOP_BILLS_NODES].indexOf(flagItem.flag) >= 0) {
                                 newTopArr.push(topItem);
                                 chkTop = true;
@@ -589,7 +592,7 @@ function sortData(sourceData, sortCfg, prjData) {
             } else {
                 newTopArr = rst;
             }
-            let destArr = [];
+            const destArr = [];
             // fsUtil.writeObjToFile(newTopArr, 'D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRstBefore.jsp');
             treeUtil.getFlatArray(newTopArr, destArr, true);
             // console.log(destArr);
@@ -602,28 +605,28 @@ function sortData(sourceData, sortCfg, prjData) {
             // fsUtil.writeObjToFile(sourceData.data, 'D:/GitHome/ConstructionCost/tmp/normalSortedRst.jsp');
             break;
         case 'accord_to_parent':
-            let pcKey = sortCfg[JV.PROP_PARENT_CHILD_SORT_KEY];
-            let parentSrcData = getModuleDataByKey(prjData, pcKey[JV.PROP_PARENT_DATA_KEY]);
+            const pcKey = sortCfg[JV.PROP_PARENT_CHILD_SORT_KEY];
+            const parentSrcData = getModuleDataByKey(prjData, pcKey[JV.PROP_PARENT_DATA_KEY]);
             if (parentSrcData) {
-                let tempParentArr = [];
-                for (let item of getActDataArr(parentSrcData)) {
+                const tempParentArr = [];
+                for (const item of getActDataArr(parentSrcData)) {
                     if (item._doc) {
                         tempParentArr.push(item._doc);
                     } else {
                         tempParentArr.push(item);
                     }
                 }
-                let sortedRstArr = private_parent_sort(tempParentArr, pcKey[JV.PROP_PARENT_SORT_KEYS], tempRstArr, pcKey[JV.PROP_CHILD_SORT_KEYS]);
+                const sortedRstArr = private_parent_sort(tempParentArr, pcKey[JV.PROP_PARENT_SORT_KEYS], tempRstArr, pcKey[JV.PROP_CHILD_SORT_KEYS]);
                 if (sortCfg[JV.PROP_OTHER_SUB_SORT] && sortCfg[JV.PROP_OTHER_SUB_SORT].length > 0) {
-                    for (let sort of sortCfg[JV.PROP_OTHER_SUB_SORT]) {
+                    for (const sort of sortCfg[JV.PROP_OTHER_SUB_SORT]) {
                         if (sort[JV.PROP_SORT_TYPE] === 'normal') {
-                            for (let subArr of sortedRstArr) {
+                            for (const subArr of sortedRstArr) {
                                 private_normal_sort(subArr, sort[JV.PROP_SORT_KEYS]);
                             }
                         } else if (sort[JV.PROP_SORT_TYPE] === 'self_define') {
-                            for (let subArr of sortedRstArr) {
+                            for (const subArr of sortedRstArr) {
                                 // console.log(subArr);
-                                let selfDefFunc = null;
+                                const selfDefFunc = null;
                                 eval('selfDefFunc = ' + sort[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
                                 subArr.sort(selfDefFunc);
                                 // console.log(subArr);
@@ -632,8 +635,8 @@ function sortData(sourceData, sortCfg, prjData) {
                     }
                 }
                 tempRstArr.splice(0);
-                for (let item of sortedRstArr) {
-                    for (let subItem of item) {
+                for (const item of sortedRstArr) {
+                    for (const subItem of item) {
                         tempRstArr.push(subItem);
                     }
                 }
@@ -658,9 +661,11 @@ function sortData(sourceData, sortCfg, prjData) {
     return rst;
 }
 
-function setupFunc(obj, ownRawObj) {
+function setupFunc(obj, ownRawObj, baseDir) {
     obj.myOwnRawDataObj = ownRawObj;
+    obj.baseDir = baseDir;
     obj.getProperty = ext_getProperty;
+    obj.getPicProperty = ext_getPicProperty;
     // obj.getPropertyByForeignId = ext_getPropertyByForeignId;
     obj.getArrayProperty = ext_getArrayValues;
     obj.getBlank = ext_getBlank;
@@ -680,8 +685,8 @@ function assembleFields(fieldList, rstDataArr, $PROJECT) {
                 } else if (field.Precision.type === 'flexible') {
                     const vrst = eval(field.Precision.flexibleMapExpression);
                     if (vrst && vrst.length === 1) {
-                        field.flexiblePrecisionRefObj =vrst[0];
-                        vrst.splice(0,1);
+                        field.flexiblePrecisionRefObj = vrst[0];
+                        vrst.splice(0, 1);
                     }
                 }
             }
@@ -763,6 +768,29 @@ function ext_getProperty(dataKey, propKey) {
     return rst;
 }
 
+function ext_getPicProperty(dataKey, propKey, isPath) {
+    const rst = [];
+    const parentObj = this;
+    const dtObj = parentObj.myOwnRawDataObj[dataKey];
+    if (propKey && dtObj) {
+        const da = getActDataArr(dtObj);
+        for (const dItem of da) {
+            pri_push_property(propKey, dItem, rst);
+        }
+        if (isPath) {
+            for (let picIdx = 0; picIdx < rst.length; picIdx++) {
+                const filePath = parentObj.baseDir + '/app/' + rst[picIdx];
+                // fs.access
+                const bData = fs.readFileSync(filePath);
+                const base64Str = bData.toString('base64');
+                const datauri = 'data:image/png;base64,' + base64Str;
+                rst[picIdx] = datauri;
+            }
+        }
+    }
+    return rst;
+}
+
 function ext_getArrayValues(dataKey, itemKey) {
     const rst = [];
     const parentObj = this;
@@ -801,9 +829,19 @@ function ext_getArrayValues(dataKey, itemKey) {
     return rst;
 }
 
-function ext_getBlank(dftVal) {
+function ext_getBlank(dataKey, dftVal) {
     const rst = [];
+    const parentObj = this;
+    const dtObj = parentObj.myOwnRawDataObj[dataKey]; // dataKey是有必要的,必须知道是哪个Table
     // 计量需要重写
+    if (dtObj) {
+        const dtData = getActDataArr(dtObj);
+        for (let i = 0; i < dtData.length; i++) {
+            if (dftVal !== null && dftVal !== undefined) {
+                rst.push(dftVal)
+            } else rst.push('');
+        }
+    }
     return rst;
 }
 
@@ -837,7 +875,7 @@ function replaceActDataArr(dtObj, newArr) {
 
 function pri_push_property(propKey, doc, rst) {
     if (propKey instanceof Array) {
-        //备注:这里的key数组表示取value的优先级
+        // 备注:这里的key数组表示取value的优先级
         for (let pi = 0; pi < propKey.length; pi++) {
             if (doc.hasOwnProperty('property')) {
                 if (doc['property'].hasOwnProperty(propKey[pi])) {
@@ -848,13 +886,13 @@ function pri_push_property(propKey, doc, rst) {
                 rst.push(doc[propKey[pi]]);
                 break;
             } else {
-                let lenBefore = rst.length;
+                const lenBefore = rst.length;
                 getDeepProperty(propKey[pi], doc, rst);
                 if (rst.length === (lenBefore + 1)) {
                     if (rst[lenBefore] !== null && rst[lenBefore] !== undefined && rst[lenBefore] !== '') {
                         break;
                     } else {
-                        rst.splice(-1, 1); //删除末尾一条数据,给后面留空间
+                        rst.splice(-1, 1); // 删除末尾一条数据,给后面留空间
                     }
                 }
             }