浏览代码

urgent fix

TonyKang 5 年之前
父节点
当前提交
c0eb0b593f
共有 2 个文件被更改,包括 38 次插入7 次删除
  1. 3 3
      app/controller/report_controller.js
  2. 35 4
      app/reports/util/rpt_calculation_data_util.js

+ 3 - 3
app/controller/report_controller.js

@@ -535,9 +535,6 @@ async function getAllPagesCommon(ctx, rptTpl, params, option, outputType, baseDi
     const rawDataObj = await getReportData(ctx, params, filter.tables, filter.memFieldKeys);
     // console.log(rawDataObj);
     try {
-        // console.log('before assemble');
-        const tplData = rptDataUtil.assembleData(ctx, 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;
         if (params.orientation && (params.orientation !== 'null')) rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] = params.orientation;
@@ -555,6 +552,9 @@ async function getAllPagesCommon(ctx, rptTpl, params, option, outputType, baseDi
         }
         const dftOption = params.option || JV.PAGING_OPTION_NORMAL;
         printCom.initialize(rptTpl);
+        // console.log('before assemble');
+        const tplData = rptDataUtil.assembleData(ctx, rawDataObj, baseDir, printCom);
+        // console.log(tplData);
         printCom.analyzeData(rptTpl, tplData, defProperties, dftOption, outputType);
         const maxPages = printCom.totalPages;
         let pageRst = null;

+ 35 - 4
app/reports/util/rpt_calculation_data_util.js

@@ -190,7 +190,7 @@ class Rpt_Data_Extractor {
     }
 
     // 装配数据(把收集到的数据,依据报表模板的指示,预处理(如:排序、过滤、合计)及装配到相关指标)
-    assembleData(ctx, rawDataObj, baseDir) {
+    assembleData(ctx, rawDataObj, baseDir, $CURRENT_RPT) {
         const $PROJECT = { REPORT: {} };
         const tpl = this.rptTpl;
         this.COMMON.initialize(tpl, rawDataObj);
@@ -210,7 +210,7 @@ class Rpt_Data_Extractor {
                         // filterData(srcData, preHandle, rawDataObj.prjData);
                         break;
                     case JV.PROP_HANDLE_TYPE_PRE_DEFINED:
-                        preDefineProcess(ctx, tpl, preHandle, rawDataObj);
+                        preDefineProcess(ctx, tpl, preHandle, rawDataObj, $CURRENT_RPT);
                         break;
                     default:
                         break;
@@ -484,13 +484,44 @@ function filterData(sourceData, handleCfg, prjData) {
     // fsUtil.writeObjToFile(sourceData.data, 'D:/GitHome/ConstructionCost/tmp/filteredRst.jsp');
 }
 
-function preDefineProcess(ctx, tpl, preDefineCfg, rawDataObj) {
+function getOrgFieldDefine(fieldId, tpl) {
+    let rst = null;
+    if (tpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
+        for (const field of tpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
+            if (field[JV.PROP_ID] === fieldId) {
+                rst = field;
+                break;
+            }
+        }
+    }
+    if (rst === null && tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
+        for (const field of tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
+            if (field[JV.PROP_ID] === fieldId) {
+                rst = field;
+                break;
+            }
+        }
+    }
+    if (rst === null && tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
+        for (const field of tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
+            if (field[JV.PROP_ID] === fieldId) {
+                rst = field;
+                break;
+            }
+        }
+    }
+    // 不会让用户选择独立离散指标的
+    return rst;
+}
+
+function preDefineProcess(ctx, tpl, preDefineCfg, rawDataObj, $CURRENT_RPT) {
     // 依据约定,需要提供如右所示格式的数据:[{field: 'b_code', table: 'mem_stage_bills'}, {field: 'id', table: 'mem_stage_bills'}]
     // 指标对象的mapExpression 格式类似于: "$PROJECT.REPORT.getProperty('mem_stage_im_zl', 'calc_memo')"
     const fields = [];
+    // console.log($CURRENT_RPT);
     if (preDefineCfg.fields) {
         for (const field of preDefineCfg.fields) {
-            const tplF = $JE.F(field.ID, tpl);
+            const tplF = getOrgFieldDefine(field[JV.PROP_FIELD_ID], tpl);
             const mapStr = tplF[JV.PROP_FIELD_EXP_MAP].split(','); // 如上,用逗号分割
             let start = 0;
             let end = 0;