|
@@ -10,6 +10,13 @@ const JV = require('../reports/rpt_component/jpc_value_define');
|
|
|
const rpt_xl_util = require('../reports/util/rpt_excel_util');
|
|
|
const rptDataExtractor = require('../reports/util/rpt_calculation_data_util');
|
|
|
const RPT_DEF_PROPERTIES = require('../const/report_defined_properties');
|
|
|
+const needCustomTables = [
|
|
|
+ 'mem_custom_select',
|
|
|
+ 'mem_gather_stage_bills', 'mem_gather_deal_bills', 'mem_gather_stage_pay', 'mem_gather_tender_info',
|
|
|
+ 'mem_stage_sum_bills', 'mem_stage_sum_pay',
|
|
|
+ 'mem_jh_gather_im_change', 'mem_jh_im_change', 'mem_jh_gather_stage_bills_compare',
|
|
|
+ 'mem_material_sum_gl',
|
|
|
+];
|
|
|
|
|
|
module.exports = app => {
|
|
|
|
|
@@ -28,41 +35,179 @@ module.exports = app => {
|
|
|
}
|
|
|
|
|
|
async getAllPagesCommon(ctx, rptTpl, params, option, outputType, baseDir, customSelect) {
|
|
|
- // const rptDataUtil = new rptDataExtractor();
|
|
|
- // rptDataUtil.initialize(rptTpl);
|
|
|
- // const filter = rptDataUtil.getDataRequestFilter();
|
|
|
- // const rawDataObj = await ctx.service.report.getReportData(params, filter.tables, filter.memFieldKeys,
|
|
|
- // rptTpl[JV.NODE_CUSTOM_DEFINE], customSelect);
|
|
|
- // // console.log(rawDataObj);
|
|
|
- // try {
|
|
|
- // 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;
|
|
|
-
|
|
|
- // const defProperties = RPT_DEF_PROPERTIES;
|
|
|
- // const tplData = rptDataUtil.assembleData(ctx, rawDataObj, baseDir, printCom, customSelect);
|
|
|
-
|
|
|
- // if (params.custCfg) {
|
|
|
- // setupCustomizeCfg(params.custCfg, rptTpl, defProperties);
|
|
|
- // } else {
|
|
|
- // // setupCustomizeCfg(defProperties, rptTpl, defProperties);
|
|
|
- // }
|
|
|
- // const dftOption = params.option || JV.PAGING_OPTION_NORMAL;
|
|
|
- // printCom.initialize(rptTpl);
|
|
|
- // printCom.analyzeData(ctx.helper, rptTpl, tplData, defProperties, dftOption, outputType, customSelect);
|
|
|
- // const maxPages = printCom.totalPages;
|
|
|
- // let pageRst = null;
|
|
|
- // if (maxPages > 0) {
|
|
|
- // pageRst = printCom.outputAsSimpleJSONPageArray(ctx.helper, rptTpl, tplData, 1, maxPages, defProperties, params.custCfg, customSelect);
|
|
|
- // } else {
|
|
|
- // pageRst = printCom.outputAsPreviewPage(rptTpl, defProperties);
|
|
|
- // }
|
|
|
- // pageRst.id = params.rpt_tpl_id;
|
|
|
- // return pageRst;
|
|
|
- // } catch (ex) {
|
|
|
- // console.log('报表数据异常, tender id: ' + params.tender_id);
|
|
|
- // console.log(ex);
|
|
|
- // }
|
|
|
+ const rptDataUtil = new rptDataExtractor();
|
|
|
+ rptDataUtil.initialize(rptTpl);
|
|
|
+ const filter = rptDataUtil.getDataRequestFilter();
|
|
|
+ const rawDataObj = await ctx.service.report.getReportData(params, filter.tables, filter.memFieldKeys,
|
|
|
+ rptTpl[JV.NODE_CUSTOM_DEFINE], customSelect);
|
|
|
+ // console.log(rawDataObj);
|
|
|
+ try {
|
|
|
+ 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;
|
|
|
+
|
|
|
+ const defProperties = RPT_DEF_PROPERTIES;
|
|
|
+ const tplData = rptDataUtil.assembleData(ctx, rawDataObj, baseDir, printCom, customSelect);
|
|
|
+
|
|
|
+ if (params.custCfg) {
|
|
|
+ setupCustomizeCfg(params.custCfg, rptTpl, defProperties);
|
|
|
+ } else {
|
|
|
+ // setupCustomizeCfg(defProperties, rptTpl, defProperties);
|
|
|
+ }
|
|
|
+ const dftOption = params.option || JV.PAGING_OPTION_NORMAL;
|
|
|
+ printCom.initialize(rptTpl);
|
|
|
+ printCom.analyzeData(ctx.helper, rptTpl, tplData, defProperties, dftOption, outputType, customSelect);
|
|
|
+ const maxPages = printCom.totalPages;
|
|
|
+ let pageRst = null;
|
|
|
+ if (maxPages > 0) {
|
|
|
+ pageRst = printCom.outputAsSimpleJSONPageArray(ctx.helper, rptTpl, tplData, 1, maxPages, defProperties, params.custCfg, customSelect);
|
|
|
+ } else {
|
|
|
+ pageRst = printCom.outputAsPreviewPage(rptTpl, defProperties);
|
|
|
+ }
|
|
|
+ pageRst.id = params.rpt_tpl_id;
|
|
|
+ return pageRst;
|
|
|
+ } catch (ex) {
|
|
|
+ console.log('报表数据异常, tender id: ' + params.tender_id);
|
|
|
+ console.log(ex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async getMultiRptsCommon(ctx, params, outputType, baseDir) {
|
|
|
+ for (let idx = 0; idx < params.rpt_ids.length; idx++) {
|
|
|
+ params.rpt_ids[idx] = parseInt(params.rpt_ids[idx]); // 转换一下,以防万一
|
|
|
+ }
|
|
|
+ const rptTpls = await ctx.service.rptTpl.getAllTplByIds(params.rpt_ids);
|
|
|
+ rptTpls.sort(function(rpt1, rpt2) {
|
|
|
+ return params.rpt_ids.indexOf(rpt1.id) - params.rpt_ids.indexOf(rpt2.id);
|
|
|
+ });
|
|
|
+ for (let rtIdx = 0; rtIdx < rptTpls.length; rtIdx++) {
|
|
|
+ const id = rptTpls[rtIdx].id;
|
|
|
+ rptTpls[rtIdx] = JSON.parse(rptTpls[rtIdx].rpt_content);
|
|
|
+ rptTpls[rtIdx].id = id;
|
|
|
+ }
|
|
|
+
|
|
|
+ const rptDataUtil = new rptDataExtractor();
|
|
|
+ const filterTables = [];
|
|
|
+ const memFieldKeys = {};
|
|
|
+ let customSelect = {};
|
|
|
+ let customDefine = {};
|
|
|
+ for (const rptTpl of rptTpls) {
|
|
|
+ rptDataUtil.initialize(rptTpl);
|
|
|
+ const filter = rptDataUtil.getDataRequestFilter();
|
|
|
+ // console.log(filter);
|
|
|
+ for (const table of filter.tables) {
|
|
|
+ if (filterTables.indexOf(table) < 0 && needCustomTables.indexOf(table) < 0) {
|
|
|
+ filterTables.push(table);
|
|
|
+ }
|
|
|
+ // memFieldKeys[table] = [];
|
|
|
+ }
|
|
|
+ for (const tableKeyProp in filter.memFieldKeys) {
|
|
|
+ if (needCustomTables.indexOf(tableKeyProp) >= 0) continue;
|
|
|
+ if (!memFieldKeys.hasOwnProperty(tableKeyProp)) {
|
|
|
+ memFieldKeys[tableKeyProp] = [];
|
|
|
+ }
|
|
|
+ for (const mfKey of filter.memFieldKeys[tableKeyProp]) {
|
|
|
+ if (memFieldKeys[tableKeyProp].indexOf(mfKey) < 0) {
|
|
|
+ memFieldKeys[tableKeyProp].push(mfKey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 输出报表的时候要把客户选择的数据的参数加进来
|
|
|
+ let finCustomSelect = {};
|
|
|
+ if (rptTpl[JV.NODE_CUSTOM_DEFINE]) {
|
|
|
+ finCustomSelect = rptTpl[JV.NODE_CUSTOM_DEFINE] && rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_AUDIT_SELECT].enable
|
|
|
+ ? await ctx.service.rptCustomDefine.getCustomDefine(params.tender_id, params.stage_id, rptTpl.id)
|
|
|
+ : await ctx.service.rptCustomDefine.getCustomDefine(params.tender_id, -1, rptTpl.id);
|
|
|
+ }
|
|
|
+ if (finCustomSelect) {
|
|
|
+ customDefine = rptTpl[JV.NODE_CUSTOM_DEFINE];
|
|
|
+ customSelect = finCustomSelect;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ const rawDataObj = await ctx.service.report.getReportData(params, filterTables, memFieldKeys, customDefine, customSelect);
|
|
|
+ // const rawDataObj = await ctx.service.report.getReportData(params, filterTables, memFieldKeys, {}, {});
|
|
|
+ try {
|
|
|
+ const rptPageRstArray = [];
|
|
|
+ // 2. 一个一个模板创建数据
|
|
|
+ // let defProperties = await ctx.service.rptPreDefineCfg.getCfgById('Administrator');
|
|
|
+ // defProperties = JSON.parse(defProperties[0].defined_content);
|
|
|
+ const defProperties = RPT_DEF_PROPERTIES;
|
|
|
+ for (let tplIdx = 0; tplIdx < rptTpls.length; tplIdx++) {
|
|
|
+ const rptTpl = (rptTpls[tplIdx]._doc) ? rptTpls[tplIdx]._doc : rptTpls[tplIdx];
|
|
|
+ rptDataUtil.initialize(rptTpl);
|
|
|
+ let customSelect = rptTpl[JV.NODE_CUSTOM_DEFINE] && rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_AUDIT_SELECT].enable
|
|
|
+ ? await ctx.service.rptCustomDefine.getCustomDefine(params.tender_id, params.stage_id, rptTpl.id)
|
|
|
+ : await ctx.service.rptCustomDefine.getCustomDefine(params.tender_id, -1, rptTpl.id);
|
|
|
+ if (rptTpl[JV.NODE_CUSTOM_DEFINE] && rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_CHANGE_SELECT] && rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_CHANGE_SELECT].enable) {
|
|
|
+ customSelect = { tid: params.tender_id, rid: params.rpt_tpl_id, sid: -1, change_select: params.customSelect[tplIdx].change_select };
|
|
|
+ }
|
|
|
+
|
|
|
+ // 从汇总的rawDataObj中拷贝所需数据表至curRawDataObj,以供后续使用
|
|
|
+ const curRawDataObj = {};
|
|
|
+ const filter = rptDataUtil.getDataRequestFilter();
|
|
|
+ for (const table of filter.tables) {
|
|
|
+ curRawDataObj[table] = ctx.helper.clone(rawDataObj[table]);
|
|
|
+ }
|
|
|
+ // 如果是用户交互类型的表,则应该单独获取数据
|
|
|
+ if ((params.customSelect && params.customSelect[tplIdx]) || rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_OPTION]) {
|
|
|
+ const cfTables = [],
|
|
|
+ cmFieldKeys = [];
|
|
|
+ const curFilter = rptDataUtil.getDataRequestFilter();
|
|
|
+ for (const table of curFilter.tables) {
|
|
|
+ if (needCustomTables.indexOf(table) >= 0) {
|
|
|
+ cfTables.push(table);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (const tableKeyProp in filter.memFieldKeys) {
|
|
|
+ if (needCustomTables.indexOf(tableKeyProp) < 0) continue;
|
|
|
+ if (!cmFieldKeys.hasOwnProperty(tableKeyProp)) {
|
|
|
+ cmFieldKeys[tableKeyProp] = [];
|
|
|
+ }
|
|
|
+ for (const mfKey of filter.memFieldKeys[tableKeyProp]) {
|
|
|
+ if (cmFieldKeys[tableKeyProp].indexOf(mfKey) < 0) {
|
|
|
+ cmFieldKeys[tableKeyProp].push(mfKey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const customRawDataObj = await ctx.service.report.getReportData(params, cfTables, cmFieldKeys,
|
|
|
+ rptTpl[JV.NODE_CUSTOM_DEFINE], customSelect);
|
|
|
+ for (const prop in customRawDataObj) {
|
|
|
+ curRawDataObj[prop] = customRawDataObj[prop];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const tplData = rptDataUtil.assembleData(ctx, curRawDataObj, baseDir, null, customSelect);
|
|
|
+ const printCom = JpcEx.createNew();
|
|
|
+ rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = params.pageSize;
|
|
|
+
|
|
|
+ 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;
|
|
|
+ if (params.custCfg) setupCustomizeCfg(params.custCfg, rptTpl, defProperties);
|
|
|
+ const dftOption = params.option || JV.PAGING_OPTION_NORMAL;
|
|
|
+
|
|
|
+ printCom.initialize(rptTpl);
|
|
|
+ // console.log(rptTpl);
|
|
|
+ printCom.analyzeData(ctx.helper, rptTpl, tplData, defProperties, dftOption, outputType, customSelect);
|
|
|
+ const maxPages = printCom.totalPages;
|
|
|
+ let pageRst = null;
|
|
|
+ // console.log(maxPages);
|
|
|
+ if (maxPages > 0) {
|
|
|
+ pageRst = printCom.outputAsSimpleJSONPageArray(ctx.helper, rptTpl, tplData, 1, maxPages, defProperties, params.custCfg, customSelect);
|
|
|
+ } else {
|
|
|
+ pageRst = printCom.outputAsPreviewPage(rptTpl, defProperties);
|
|
|
+ }
|
|
|
+ pageRst.id = rptTpl.id;
|
|
|
+ rptPageRstArray.push(pageRst);
|
|
|
+ }
|
|
|
+ return rptPageRstArray;
|
|
|
+ } catch (ex) {
|
|
|
+ console.log(`'报表数据异常(getMultiRptsCommon): project_id ${params.project_id}, tender_id: ${params.tender_id}, stage_id: ${params.stage_id}`);
|
|
|
+ console.log(ex);
|
|
|
+ } finally {
|
|
|
+ //
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
getAllPreviewPagesCommon(rawRptTpl, pageSize) {
|