Prechádzať zdrojové kódy

Merge branch 'master' of http://192.168.1.41:3000/maixinrong/Calculation

MaiXinRong 5 rokov pred
rodič
commit
a84029e43c

+ 97 - 58
app/controller/report_controller.js

@@ -124,8 +124,10 @@ module.exports = app => {
                 // 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);
-
-                encodeSignatureDataUri(roleRel, this.app.baseDir);
+                // console.log('after role stage!');
+                // console.log(roleRel);
+                await encodeSignatureDataUri(roleRel, this.app.baseDir);
+                // console.log('encodeSignatureDataUri!');
                 ctx.body = { data: pageRst, signatureRelInfo: roleRel, stageAudit: stgAudit };
                 // ctx.body = { data: { msg: 'test the network' } };
                 ctx.status = 201;
@@ -145,7 +147,7 @@ module.exports = app => {
             const params = JSON.parse(ctx.request.body.params);
             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);
+            await encodeSignatureDataUri(roleRel, this.app.baseDir);
             // console.log(pageRstArr);
             ctx.body = { data: pageRstArr, signatureRelInfo: roleRel };
             ctx.status = 201;
@@ -280,52 +282,60 @@ async function getReportData(ctx, params, filters) {
     const rst = {};
     const runnableRst = [];
     const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
+    const mem_tz_runnableRst = []; // 内存表,中间计量台账清单数据,因有主从关系,但却又只算一次,所以上面的并行机制无法满足需求,所以得走另外的分支处理
+    const mem_tz_runnableKey = []; // 配合内存表用
     // console.log('params');
     // console.log(params);
     for (const filter of filters) {
-        switch (filter) {
-            case 'project' :
-                runnableRst.push(ctx.service.project.getProjectById(params.project_id));
-                runnableKey.push('project');
-                break;
-            case 'tender_info' :
-                runnableRst.push(ctx.service.tenderInfo.getTenderInfo(params.tender_id));
-                runnableKey.push('tender_info');
-                break;
-            case 'ledger' :
-                runnableRst.push(ctx.service.ledger.getData(params.tender_id, 0));
-                runnableKey.push('ledger');
-                break;
-            case 'stage_bills':
-                runnableRst.push(ctx.service.stageBills.getLastestStageData(params.tender_id, params.stage_id));
-                runnableKey.push('stage_bills');
-                break;
-            case 'stage_bills_final':
-                runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
-                runnableKey.push('stage_bills_final');
-                break;
-            case 'stage':
-                runnableRst.push(ctx.service.stage.getStageById(params.stage_id));
-                runnableKey.push('stage');
-                break;
-            case 'stage_pay':
-                runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
-                runnableKey.push('stage_pay');
-                break;
-            case 'mem_stage_im_tz':
-                runnableRst.push(ctx.service.reportMemory.getStageImTzData(params.tender_id, params.stage_id));
-                runnableKey.push('mem_stage_im_tz');
-                break;
-            case 'mem_stage_im_tz_bills':
-                runnableRst.push(ctx.service.reportMemory.getStageImTzBillsData(params.tender_id, params.stage_id));
-                runnableKey.push('mem_stage_im_tz_bills');
-                break;
-            case 'mem_stage_im_zl':
-                runnableRst.push(ctx.service.reportMemory.getStageImZlData(params.tender_id, params.stage_id));
-                runnableKey.push('mem_stage_im_zl');
-                break;
-            default:
-                break;
+        if (runnableKey.indexOf(filter) < 0) {
+            switch (filter) {
+                case 'project' :
+                    runnableRst.push(ctx.service.project.getProjectById(params.project_id));
+                    runnableKey.push('project');
+                    break;
+                case 'tender_info' :
+                    runnableRst.push(ctx.service.tenderInfo.getTenderInfo(params.tender_id));
+                    runnableKey.push('tender_info');
+                    break;
+                case 'ledger' :
+                    runnableRst.push(ctx.service.ledger.getData(params.tender_id, 0));
+                    runnableKey.push('ledger');
+                    break;
+                case 'stage_bills':
+                    runnableRst.push(ctx.service.stageBills.getLastestStageData(params.tender_id, params.stage_id));
+                    runnableKey.push('stage_bills');
+                    break;
+                case 'stage_bills_final':
+                    runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
+                    runnableKey.push('stage_bills_final');
+                    break;
+                case 'stage':
+                    runnableRst.push(ctx.service.stage.getStageById(params.stage_id));
+                    runnableKey.push('stage');
+                    break;
+                case 'stage_pay':
+                    runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
+                    runnableKey.push('stage_pay');
+                    break;
+                case 'mem_stage_im_tz':
+                    if (mem_tz_runnableRst.length === 0) {
+                        mem_tz_runnableRst.push(ctx.service.reportMemory.getStageImTzNoReturn(params.tender_id, params.stage_id));
+                    }
+                    mem_tz_runnableKey.push('mem_stage_im_tz');
+                    break;
+                case 'mem_stage_im_tz_bills':
+                    if (mem_tz_runnableRst.length === 0) {
+                        mem_tz_runnableRst.push(ctx.service.reportMemory.getStageImTzNoReturn(params.tender_id, params.stage_id));
+                    }
+                    mem_tz_runnableKey.push('mem_stage_im_tz_bills');
+                    break;
+                case 'mem_stage_im_zl':
+                    runnableRst.push(ctx.service.reportMemory.getStageImZlData(params.tender_id, params.stage_id));
+                    runnableKey.push('mem_stage_im_zl');
+                    break;
+                default:
+                    break;
+            }
         }
     }
     // console.log('before query, runnableKey');
@@ -338,6 +348,12 @@ async function getReportData(ctx, params, filters) {
         // if (rst[runnableKey[idx]] instanceof Array) console.log('is Array')
         // else console.log('is not Array');
     }
+    if (mem_tz_runnableRst.length > 0) {
+        await mem_tz_runnableRst[0];
+        for (const key of mem_tz_runnableKey) {
+            rst[key] = ctx.service.reportMemory.getStageImTzDataDirectlyByKey(key);
+        }
+    }
     return rst;
 }
 
@@ -635,19 +651,42 @@ function setupCustomizeCfg(customizeCfg, rptTpl, defProperties) {
     }
 }
 
-function encodeSignatureDataUri(roleRel, baseDir) {
-    for (const singleRoleRel of roleRel) {
-        const roleRelContent = JSON.parse(singleRoleRel.rel_content);
-        for (const role of roleRelContent) {
-            if (role.sign_path !== '') {
-                const filePath = baseDir + '/app' + role.sign_path;
-                const bData = fs.readFileSync(filePath);
-                const base64Str = bData.toString('base64');
-                const datauri = 'data:image/png;base64,' + base64Str;
-                role.sign_pic = datauri;
-                // fsUtil.writeObjToFile(datauri, 'D:/Temp/imageDataUri.txt');
+function isFileExisted(file) {
+    return new Promise(function(resolve, reject) {
+        fs.access(file, err => {
+            if (err) {
+                reject(false);
+            } else {
+                resolve(true);
+            }
+        });
+    });
+}
+
+async function encodeSignatureDataUri(roleRel, baseDir) {
+    if (roleRel) {
+        for (const singleRoleRel of roleRel) {
+            const roleRelContent = JSON.parse(singleRoleRel.rel_content);
+            for (const role of roleRelContent) {
+                // console.log(role);
+                if (role.sign_path !== '') {
+                    const filePath = baseDir + '/app' + role.sign_path;
+                    try {
+                        const res = await isFileExisted(filePath);
+                        if (res) {
+                            const bData = fs.readFileSync(filePath);
+                            const base64Str = bData.toString('base64');
+                            const datauri = 'data:image/png;base64,' + base64Str;
+                            role.sign_pic = datauri;
+                        } else {
+                            console.log('文件不存在:' + filePath);
+                        }
+                    } catch (err) {
+                        console.error(err);
+                    }
+                }
             }
+            singleRoleRel.rel_content = JSON.stringify(roleRelContent);
         }
-        singleRoleRel.rel_content = JSON.stringify(roleRelContent);
     }
 }

+ 1 - 13
app/reports/util/rpt_calculation_data_util.js

@@ -224,7 +224,7 @@ class Rpt_Data_Extractor {
         // console.log(JV.DATA_DETAIL_DATA_EX);
         // console.log(rptDataObj[JV.DATA_DETAIL_DATA_EX]);
         // fsUtil.writeObjToFile(rptDataObj, 'D:/GitHome/temp/insertedOriginalData.jsp');
-        // fsUtil.writeObjToFile(rawDataObj, 'D:/GitHome/temp/insertedRawDataData.jsp');
+        fsUtil.writeObjToFile(rawDataObj, 'D:/GitHome/temp/insertedRawDataData.jsp');
         // fsUtil.writeObjToFile($PROJECT, 'D:/GitHome/temp/$PROJECTData.jsp');
         // fsUtil.writeObjToFile(tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS], 'D:/GitHome/temp/masterFieldsAfterAssemble.jsp');
         // fsUtil.writeObjToFile(tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS], 'D:/GitHome/temp/detailFieldsAfterAssemble.jsp');
@@ -768,18 +768,6 @@ function ext_getProperty(dataKey, propKey) {
     return rst;
 }
 
-function isFileExisted(file) {
-    return new Promise(function(resolve, reject) {
-        fs.access(file, err => {
-            if (err) {
-                reject(false);
-            } else {
-                resolve(true);
-            }
-        });
-    });
-}
-
 async function ext_getPicProperty(dataKey, propKey, isPath) {
     const rst = [];
     const parentObj = this;

+ 29 - 13
app/service/report_memory.js

@@ -87,11 +87,7 @@ module.exports = app => {
         async _generateStageIm(tid, sid, isTz = true) {
             await this._checkTender(tid);
             await this._checkStage(sid);
-            // console.log('this.ctx.stage.im_type: ' + this.ctx.stage.im_type);
-            // console.log('imType.tz.value: ' + imType.tz.value);
-            // console.log('isTz: ' + isTz);
             if (isTz && this.ctx.stage.im_type !== imType.tz.value) {
-                // console.log('您查看的报表跟设置不符,请查看“总量控制”的报表');
                 throw '您查看的报表跟设置不符,请查看“总量控制”的报表';
             } else if (!isTz && this.ctx.stage.im_type === imType.tz.value) {
                 throw '您查看的报表跟设置不符,请查看“0号台账”的报表';
@@ -104,15 +100,38 @@ module.exports = app => {
             }
         }
 
+        async getStageImTzNoReturn(tid, sid) {
+            // 备注:单独拎出以下几行代码一个是为了提高效率(跟getStageImTzDataDirectlyByKey方法协作使用)
+            //      二是如果出现并行查询(台账及台账清单)情况下,会出现干扰(已验证过),导致数据丢失
+            if (!this.stageImData) {
+                this.stageImData = {};
+            }
+            try {
+                await this._generateStageIm(tid, sid);
+            } catch (err) {
+                this.stageImData.main = [];
+                this.stageImData.bills = [];
+            }
+        }
+
+        getStageImTzDataDirectlyByKey(key) {
+            let rst = [];
+            if (key === 'mem_stage_im_tz') {
+                rst = this.stageImData.main;
+            } else {
+                rst = this.stageImData.bills;
+            }
+            return rst;
+        }
+
         async getStageImTzData(tid, sid) {
             if (!this.stageImData) {
                 this.stageImData = {};
                 try {
                     await this._generateStageIm(tid, sid);
-                } catch(err) {
-                    // console.log('getStageImTzData exception');
+                } catch (err) {
                     if (err.statck) {
-                        this.ctx.logger.error(error);
+                        this.ctx.logger.error(err);
                     }
                     this.stageImData.main = err.statck ? '数据错误' : err;
                     this.stageImData.bills = this.stageImData.main;
@@ -127,10 +146,8 @@ module.exports = app => {
                 try {
                     await this._generateStageIm(tid, sid);
                 } catch (err) {
-                    // console.log(err);
-                    // console.log('getStageImTzBillsData exception');
                     if (err.statck) {
-                        this.ctx.logger.error(error);
+                        this.ctx.logger.error(err);
                     }
                     this.stageImData.main = err.statck ? '数据错误' : err;
                     this.stageImData.bills = this.stageImData.main;
@@ -143,10 +160,9 @@ module.exports = app => {
             this.stageImData = {};
             try {
                 await this._generateStageIm(tid, sid, false);
-            } catch(err) {
-                // console.log('getStageImZlData exception');
+            } catch (err) {
                 if (err.statck) {
-                    this.ctx.logger.error(error);
+                    this.ctx.logger.error(err);
                 }
                 this.stageImData.main = err.statck ? '数据错误' : err;
             }