|
@@ -529,7 +529,7 @@ module.exports = app => {
|
|
|
|
|
|
const roleRelArr = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
|
|
|
// const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id)) : [];
|
|
|
- const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
|
|
|
+ const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, baseDir);
|
|
|
// console.log('params.stage_status: ' + params.stage_status);
|
|
|
// fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/testBuiltPageResult.js');
|
|
|
for (const pageRst of pageRstArr) {
|
|
@@ -543,11 +543,11 @@ module.exports = app => {
|
|
|
// 加水印(注意:还得看用户设置是否需要加水印)
|
|
|
fillWaterMark(pageRstArr);
|
|
|
if (params.needWaterMark) {
|
|
|
- waterMarkStr = await getWatermarkPicData(pageRstArr[0], this.app.baseDir);
|
|
|
+ waterMarkStr = await getWatermarkPicData(pageRstArr[0], baseDir);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- await this.ctx.helper.recursiveMkdirSync(this.app.baseDir + '/app/public/download');
|
|
|
+ await this.ctx.helper.recursiveMkdirSync(baseDir + '/app/public/download');
|
|
|
|
|
|
const runnableRst = [];
|
|
|
/*
|
|
@@ -568,13 +568,9 @@ module.exports = app => {
|
|
|
runnableRst.push(getExcelByPageData(pageRstArr[idx], params.rpt_names[idx], roleRel));
|
|
|
}
|
|
|
/*/
|
|
|
- for (let pageRst of pageRstArr) {
|
|
|
- // _chkIfNeedBreakPage(pageRst);
|
|
|
- }
|
|
|
- const pageBrkAmt = 300;
|
|
|
- const newRptNames = []; // 这个为导出PDF控制分页用
|
|
|
- const newPageDataRst = _resetPageDataByBreaks(pageRstArr, pageBrkAmt, params.rpt_names, newRptNames);
|
|
|
- for (let idx = 0; idx < newPageDataRst.length; idx++) {
|
|
|
+ // 1. merge签名相关信息
|
|
|
+ const pageBrkSize = 6291456; // 6M, 1024*1024*6
|
|
|
+ for (let idx = 0; idx < pageRstArr.length; idx++) {
|
|
|
let roleRel = null;
|
|
|
for (const roleR of roleRelArr) {
|
|
|
if (roleR.rpt_id === params.rpt_ids[idx]) {
|
|
@@ -583,10 +579,32 @@ module.exports = app => {
|
|
|
}
|
|
|
}
|
|
|
if (params.stage_status === 3) {
|
|
|
- mergeSignAudit(newPageDataRst[idx], roleRel, stgAudit);
|
|
|
- mergeSignDate(newPageDataRst[idx], params.stage_id, roleRel, stgAudit, stgAuditForOrg, stageList);
|
|
|
+ mergeSignAudit(pageRstArr[idx], roleRel, stgAudit);
|
|
|
+ mergeSignDate(pageRstArr[idx], params.stage_id, roleRel, stgAudit, stgAuditForOrg, stageList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 判断草图大小是否需要分页
|
|
|
+ const picSize = await _chkRawPicSize(pageRstArr[idx], baseDir);
|
|
|
+ if (picSize > pageBrkSize) {
|
|
|
+ // let pageBrkAmt = Math.ceil(picSize / pageBrkSize);
|
|
|
+ let pageBrkAmt = Math.floor(pageRstArr[idx].items.length / Math.ceil(picSize / pageBrkSize));
|
|
|
+ if (pageBrkAmt < 10) {
|
|
|
+ // 不用管
|
|
|
+ } else if (pageBrkAmt < 100) {
|
|
|
+ pageBrkAmt = Math.floor(pageBrkAmt / 10) * 10;
|
|
|
+ } else if (pageBrkAmt < 1000) {
|
|
|
+ pageBrkAmt = Math.floor(pageBrkAmt / 100) * 100;
|
|
|
+ } else {
|
|
|
+ // 暂时不管
|
|
|
+ }
|
|
|
+ const newRptNames = []; // 这个为导出控制分页用
|
|
|
+ const newPageDataRst = _resetPageDataByBreaks([pageRstArr[idx]], pageBrkAmt, [params.rpt_names[idx]], newRptNames);
|
|
|
+ for (let dtlIdx = 0; dtlIdx < newPageDataRst.length; dtlIdx++) {
|
|
|
+ runnableRst.push(getExcelByPageData(newPageDataRst[dtlIdx], newRptNames[dtlIdx], roleRel));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ runnableRst.push(getExcelByPageData(pageRstArr[idx], params.rpt_names[idx], null));
|
|
|
}
|
|
|
- runnableRst.push(getExcelByPageData(newPageDataRst[idx], newRptNames[idx], roleRel));
|
|
|
}
|
|
|
// */
|
|
|
// fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/计量导出pageArr.js');
|
|
@@ -610,7 +628,32 @@ module.exports = app => {
|
|
|
}
|
|
|
const pageRst = JSON.parse(fs.readFileSync('D:/GitHome/temp/计量excel原始数据_A3BZ6_5384_112表(清单).js', 'utf-8'));
|
|
|
const runnableRst = [];
|
|
|
- runnableRst.push(getExcelByPageData(pageRst, '工程计量表(计量单元-清单)', null));
|
|
|
+
|
|
|
+ const pageBrkSize = 6291456; // 6M, 1024*1024*6
|
|
|
+ // const pageBrkSize = 1048576; // 1M, 1024*1024*1
|
|
|
+ const picSize = await _chkRawPicSize(pageRst, baseDir);
|
|
|
+ if (picSize > pageBrkSize) {
|
|
|
+ let pageBrkAmt = Math.floor(pageRst.items.length / Math.ceil(picSize / pageBrkSize));
|
|
|
+ console.log('pageBrkAmt:' + pageBrkAmt);
|
|
|
+ if (pageBrkAmt < 10) {
|
|
|
+ // 不用管
|
|
|
+ } else if (pageBrkAmt < 100) {
|
|
|
+ pageBrkAmt = Math.floor(pageBrkAmt / 10) * 10;
|
|
|
+ } else if (pageBrkAmt < 1000) {
|
|
|
+ pageBrkAmt = Math.floor(pageBrkAmt / 100) * 100;
|
|
|
+ } else {
|
|
|
+ // 暂时不管
|
|
|
+ }
|
|
|
+ const newRptNames = []; // 这个为导出控制分页用
|
|
|
+ const newPageDataRst = _resetPageDataByBreaks([pageRst], pageBrkAmt, ['工程计量表(计量单元-清单)'], newRptNames);
|
|
|
+ for (let dtlIdx = 0; dtlIdx < newPageDataRst.length; dtlIdx++) {
|
|
|
+ runnableRst.push(getExcelByPageData(newPageDataRst[dtlIdx], newRptNames[dtlIdx], null));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ runnableRst.push(getExcelByPageData(pageRst, '工程计量表(计量单元-清单)', null));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
const uuidRst = await Promise.all(runnableRst);
|
|
|
ctx.body = { data: uuidRst, waterMarkStr: null };
|
|
|
ctx.status = 201;
|
|
@@ -1424,21 +1467,36 @@ function _getSignDateDftName() {
|
|
|
return ' 年 月 日';
|
|
|
}
|
|
|
|
|
|
-function _chkIfNeedBreakPage(pageData) {
|
|
|
- let rst = -1, hasPic = false, picSize = 0;
|
|
|
+async function _chkRawPicSize(pageData, baseDir) {
|
|
|
+ let rst = 0;
|
|
|
const picKeys = [];
|
|
|
- // fs.statSync(`${filesPath}${file}`).size
|
|
|
for (let pi = 0; pi < pageData.items.length; pi++) {
|
|
|
// 每页判断
|
|
|
for (let ci = 0; ci < pageData.items[pi][JV.PROP_SIGNATURE_CELLS].length; ci++) {
|
|
|
const picPath = pageData.items[pi][JV.PROP_SIGNATURE_CELLS][ci].path;
|
|
|
- if (picPath && picPath.indexOf('/sign') < 0 && picKeys.indexOf(picPath) < 0) {
|
|
|
+ // if (picPath && picPath.indexOf('/sign') < 0 && picKeys.indexOf(picPath) < 0) {
|
|
|
+ if (picPath && picKeys.indexOf(picPath) < 0) {
|
|
|
+ // 签名图片也要计算在内,反正不重复
|
|
|
picKeys.push(picPath);
|
|
|
- hasPic = true;
|
|
|
}
|
|
|
// signature_cells PROP_SIGNATURE_CELLS
|
|
|
}
|
|
|
}
|
|
|
+ for (const pKey of picKeys) {
|
|
|
+ const filePath = `${baseDir}/app${pKey}`;
|
|
|
+ const isExist = await isFileExisted(filePath);
|
|
|
+ if (isExist) {
|
|
|
+ const obj = fs.statSync(filePath);
|
|
|
+ if (obj) {
|
|
|
+ rst += obj.size;
|
|
|
+ } else {
|
|
|
+ console.log('no statSync resutl: ' + filePath);
|
|
|
+ }
|
|
|
+ // rst += fs.statSync(filePath).size;
|
|
|
+ } else {
|
|
|
+ console.log(`${pKey} not exists!`);
|
|
|
+ }
|
|
|
+ }
|
|
|
return rst;
|
|
|
}
|
|
|
|