|
@@ -124,8 +124,10 @@ module.exports = app => {
|
|
// console.log(pageRst);
|
|
// console.log(pageRst);
|
|
const roleRel = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id);
|
|
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);
|
|
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: pageRst, signatureRelInfo: roleRel, stageAudit: stgAudit };
|
|
// ctx.body = { data: { msg: 'test the network' } };
|
|
// ctx.body = { data: { msg: 'test the network' } };
|
|
ctx.status = 201;
|
|
ctx.status = 201;
|
|
@@ -145,7 +147,7 @@ module.exports = app => {
|
|
const params = JSON.parse(ctx.request.body.params);
|
|
const params = JSON.parse(ctx.request.body.params);
|
|
const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
|
|
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);
|
|
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);
|
|
// console.log(pageRstArr);
|
|
ctx.body = { data: pageRstArr, signatureRelInfo: roleRel };
|
|
ctx.body = { data: pageRstArr, signatureRelInfo: roleRel };
|
|
ctx.status = 201;
|
|
ctx.status = 201;
|
|
@@ -280,52 +282,60 @@ async function getReportData(ctx, params, filters) {
|
|
const rst = {};
|
|
const rst = {};
|
|
const runnableRst = [];
|
|
const runnableRst = [];
|
|
const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
|
|
const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
|
|
|
|
+ const mem_tz_runnableRst = []; // 内存表,中间计量台账清单数据,因有主从关系,但却又只算一次,所以上面的并行机制无法满足需求,所以得走另外的分支处理
|
|
|
|
+ const mem_tz_runnableKey = []; // 配合内存表用
|
|
// console.log('params');
|
|
// console.log('params');
|
|
// console.log(params);
|
|
// console.log(params);
|
|
for (const filter of filters) {
|
|
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');
|
|
// 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')
|
|
// if (rst[runnableKey[idx]] instanceof Array) console.log('is Array')
|
|
// else console.log('is not 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;
|
|
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);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|