소스 검색

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

MaiXinRong 1 년 전
부모
커밋
28fe6191d9
3개의 변경된 파일51개의 추가작업 그리고 12개의 파일을 삭제
  1. 9 4
      app/controller/payment_controller.js
  2. 33 3
      app/service/jpc_report.js
  3. 9 5
      app/service/payment_detail.js

+ 9 - 4
app/controller/payment_controller.js

@@ -322,7 +322,9 @@ module.exports = app => {
                     (ctx.detail.status === auditConst.status.uncheck || ctx.detail.status === auditConst.status.checkNo)) {
                     const rptTpl = await ctx.service.rptTpl.getDataById(ctx.trInfo.rpt_id);
                     if (rptTpl) {
-                        const pageRst = await ctx.service.jpcReport.getAllPreviewPagesCommon(rptTpl, 'A4');
+                        // const pageRst = await ctx.service.jpcReport.getAllPreviewPagesCommon(rptTpl, 'A4');
+                        rptTpl.source_type = 101;
+                        const pageRst = await ctx.service.jpcReport.getPreviewPagesWithDiscreteDataCommon(ctx, rptTpl, 'A4', this.app.baseDir, null);
                         const rptMsg = pageRst.items[0];
                         // 判断与原有的报表审批人列表是否有区别
                         let difference = false;
@@ -390,7 +392,8 @@ module.exports = app => {
                 const content = [];
                 // 获取当前报表人
                 const rptAudit = await ctx.service.paymentRptAudit.getDataByCondition({ td_id: ctx.detail.id, uid: ctx.session.sessionUser.accountId });
-                if (report_json && report_json.items && report_json.items[0].interact_cells.length > 0) {
+                if (report_json && report_json.items && report_json.items.length > 0 && report_json.items[0].interact_cells.length > 0) {
+                // if (report_json && report_json.items && report_json.items[0].interact_cells.length > 0) {
                     for (const [i, cell] of report_json.items[0].interact_cells.entries()) {
                         cell.index = i;
                     }
@@ -654,7 +657,7 @@ module.exports = app => {
                     throw '权限不足';
                 }
                 let [tenderRptList, rptProjectList] = await this._returnRptProjectList(ctx, true);
-                const safeRpt = tenderRptList.find(x => { return x.type === 1 });
+                const safeRpt = tenderRptList.find(x => { return x.type === 1; });
                 tenderRptList = ctx.helper._.filter(tenderRptList, { type: 0, is_del: 0 });
                 // for (const tr of tenderRptList) {
                 //     if (tr.status === shenpiConst.sp_status.gdspl) {
@@ -788,7 +791,9 @@ module.exports = app => {
                 if (trInfo.uid === ctx.session.sessionUser.accountId && trInfo.is_del === 0 && trInfo.rpt_id) {
                     const rptTpl = await ctx.service.rptTpl.getDataById(trInfo.rpt_id);
                     if (rptTpl) {
+                        rptTpl.source_type = 101;
                         const pageRst = await ctx.service.jpcReport.getAllPreviewPagesCommon(rptTpl, 'A4');
+                        // const pageRst = await ctx.service.jpcReport.getPreviewPagesWithDiscreteDataCommon(ctx, rptTpl, 'A4', this.app.baseDir, null);
                         renderData.rptMsg = pageRst.items[0];
                         // 判断与原有的报表审批人列表是否有区别
                         let difference = false;
@@ -900,7 +905,7 @@ module.exports = app => {
                         responseData.data = await ctx.service.paymentTenderRpt.updateRptAudit(trInfo, data.rpt_audit);
                         break;
                     case 'add-detail':
-                        responseData.data = await ctx.service.paymentDetail.addDetail(trInfo, data.code, data.s_time);
+                        responseData.data = await ctx.service.paymentDetail.addDetail(ctx, trInfo, data.code, data.s_time);
                         break;
                     default: throw '参数有误';
                 }

+ 33 - 3
app/service/jpc_report.js

@@ -214,10 +214,40 @@ module.exports = app => {
             }
         }
 
-        async getAllPreviewPagesCommon(rawRptTpl, pageSize) {
-            // const rawDataObj = await ctx.service.report.getReportData(rptTpl.source_type, params, filter.tables, filter.memFieldKeys,
-            //     rptTpl[JV.NODE_CUSTOM_DEFINE], customSelect);
+        async getPreviewPagesWithDiscreteDataCommon(ctx, rawRptTpl, pageSize, baseDir, customSelect) {
+            // 此方法是要获取带离散数据的预览页面
+            const rptTpl = JSON.parse(rawRptTpl.rpt_content);
+            let params = null;
+            if (ctx.params) {
+                params = {};
+                params.tender_id = ctx.params.id;
+                params.detail_id = ctx.params.did;
+            }
+            const rptDataUtil = new rptDataExtractor();
+            rptDataUtil.initialize(rptTpl);
+            const filter = rptDataUtil.getDataRequestFilter();
+            const source_type = rawRptTpl.source_type;
+            const rawDataObj = await ctx.service.report.getReportData(source_type, params, filter.tables, filter.memFieldKeys,
+                rptTpl[JV.NODE_CUSTOM_DEFINE], null);
+            try {
+                const printCom = JpcEx.createNew();
+                rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
+                const defProperties = RPT_DEF_PROPERTIES;
+                const tplData = rptDataUtil.assembleData(ctx, rawDataObj, baseDir, printCom, customSelect);
+                setupSomeDftCustomizeCfg(rptTpl);
+                printCom.initialize(rptTpl);
+                printCom.analyzeData(ctx.helper, rptTpl, tplData, defProperties, JV.PAGING_OPTION_NORMAL, JV.OUTPUT_TYPE_NORMAL, customSelect, []);
+                //
+                let pageRst = null;
+                pageRst = printCom.outputAsSimpleJSONPageArray(ctx.helper, rptTpl, tplData, 1, 1, defProperties, params.custCfg, customSelect);
+                return pageRst;
+            } catch (ex) {
+                console.log('报表数据异常, tender id: ' + params.tender_id);
+                console.log(ex);
+            }
+        }
 
+        async getAllPreviewPagesCommon(rawRptTpl, pageSize) {
             const printCom = JpcEx.createNew();
             const defProperties = RPT_DEF_PROPERTIES;
             const rptTpl = JSON.parse(rawRptTpl.rpt_content);

+ 9 - 5
app/service/payment_detail.js

@@ -60,7 +60,8 @@ module.exports = app => {
             return preDetail;
         }
 
-        async addFormDetail(trInfo, code, s_time) {
+        // async addFormDetail(trInfo, code, s_time) {
+        async addFormDetail(ctx, trInfo, code, s_time) {
             const transaction = await this.db.beginTransaction();
             try {
                 if (!(trInfo.is_del === 0 && trInfo.rpt_audit)) {
@@ -68,7 +69,9 @@ module.exports = app => {
                 }
                 const preDetail = await this.addCommomCheck(trInfo, code);
                 const rptTpl = await this.ctx.service.rptTpl.getDataById(trInfo.rpt_id);
-                const pageRst = this.ctx.service.jpcReport.getAllPreviewPagesCommon(rptTpl, 'A4');
+                const pageRst = await this.ctx.service.jpcReport.getAllPreviewPagesCommon(rptTpl, 'A4');
+                // rptTpl.source_type = 101;
+                // const pageRst = await ctx.service.jpcReport.getPreviewPagesWithDiscreteDataCommon(ctx, rptTpl, 'A4', this.app.baseDir, null);
                 const newDetail = {
                     tender_id: this.ctx.paymentTender.id,
                     tr_id: trInfo.id,
@@ -164,10 +167,10 @@ module.exports = app => {
             }
         }
 
-        async addDetail(trInfo, code, s_time) {
+        async addDetail(ctx, trInfo, code, s_time) {
             switch (trInfo.type) {
                 case paymentConst.modes_value_object.form:
-                    return this.addFormDetail(trInfo, code, s_time);
+                    return this.addFormDetail(ctx, trInfo, code, s_time);
                 case paymentConst.modes_value_object.safe:
                     return this.addSafeDetail(trInfo, code, s_time);
                 default:
@@ -352,7 +355,8 @@ module.exports = app => {
             detail.auditors = await this.ctx.service.paymentDetailAudit.getAuditors(detail.id, detail.times);
             detail.curAuditor = await this.ctx.service.paymentDetailAudit.getCurAuditor(detail.id, detail.times);
             detail.rptAudits = await this.ctx.service.paymentRptAudit.getListByDetail(detail.id);
-            const auditorIds = this._.map(detail.auditors, 'aid'), rptAuditIds = this._.map(detail.rptAudits, 'uid');
+            const auditorIds = this._.map(detail.auditors, 'aid'),
+                rptAuditIds = this._.map(detail.rptAudits, 'uid');
 
             if (accountId === detail.uid) { // 原报
                 detail.curTimes = detail.times;