Browse Source

TASK #4467 归档拆分接口调整

Tony Kang 1 year ago
parent
commit
ca54666037

+ 32 - 13
app/controller/report_archive_controller.js

@@ -250,7 +250,7 @@ module.exports = app => {
             }
         }
 
-        async _updateArchiveCommon(ctx, prjId, stgId, rptId, parentUuidName, childUuids, splitField) {
+        async _updateArchiveCommon(ctx, prjId, stgId, rptId, parentUuidName, childUuids) {
             const updateDate = new Date();
             const montStr = (updateDate.getMonth() + 1) < 10 ? ('0' + (updateDate.getMonth() + 1)) : (updateDate.getMonth() + 1);
             const dateStr = (updateDate.getDate()) < 10 ? ('0' + updateDate.getDate()) : (updateDate.getDate());
@@ -294,20 +294,26 @@ module.exports = app => {
                             // 以及删除子oss文件
                             if (item.items[updateRmIdx].childUuids && item.items[updateRmIdx].childUuids.length > 0) {
                                 for (const childUuid of item.items[updateRmIdx].childUuids) {
-                                    await ctx.app.signPdfOss.delete(`archive/${childUuid}.PDF`);
+                                    let uuid = '';
+                                    if (typeof childUuid === 'string') {
+                                        uuid = childUuid;
+                                    } else {
+                                        uuid = childUuid.uuid;
+                                    }
+                                    await ctx.app.signPdfOss.delete(`archive/${uuid}.PDF`);
                                 }
                             }
                             item.items.splice(updateRmIdx, 1);
                         }
 
-                        const newItem = { uuid: parentUuidName, updateDate_time: dtStr, childUuids, splitField };
+                        const newItem = { uuid: parentUuidName, updateDate_time: dtStr, childUuids };
                         item.items.push(newItem);
                         break;
                     }
                 }
                 if (!hasArchive) {
                     // 表示有新的模板需要添加
-                    contentArr.push({ rpt_id: rptId, items: [{ uuid: parentUuidName, updateDate_time: dtStr, childUuids, splitField }] });
+                    contentArr.push({ rpt_id: rptId, items: [{ uuid: parentUuidName, updateDate_time: dtStr, childUuids }] });
                 }
                 const updatedRst = await ctx.service.rptArchive.updateArchive(orgArchiveList[0].id, prjId, stgId, contentArr);
                 // console.log(updatedRst);
@@ -315,7 +321,7 @@ module.exports = app => {
             } else {
                 // 需要增加
                 const archiveArr = [];
-                archiveArr.push({ rpt_id: rptId, items: [{ uuid: parentUuidName, updateDate_time: dtStr, childUuids, splitField }] });
+                archiveArr.push({ rpt_id: rptId, items: [{ uuid: parentUuidName, updateDate_time: dtStr, childUuids }] });
                 const addedRst = await ctx.service.rptArchive.createArchive(prjId, stgId, archiveArr);
                 rst = { err: 0, msg: parentUuidName, data: { uuid: parentUuidName, fileName, updateDate, updatedRst: archiveArr } };
             }
@@ -330,11 +336,12 @@ module.exports = app => {
                 const stgId = ctx.params.stgId;
                 const rptId = ctx.params.rptId;
                 // const childAmt = parseInt(ctx.params.childAmt); // 子分页数量
-                const childInfo = ctx.params.childAmt.split(';'); // 这个参数带比较多的信息,包含分割指标的:1. 名称 2. ID 3. 内容
+                const childInfo = ctx.params.splitInfo.split(';'); // 这个参数带比较多的信息,包含分割指标的:1. 名称 2. ID 3. 内容
                 const splitArcPages = JSON.parse(childInfo[0]);
                 // console.log(splitArcPages);
                 const childAmt = splitArcPages.length;
                 const splitFieldObj = JSON.parse(childInfo[1]);
+                const ttlPages = parseInt(childInfo[2]); // 总页数
                 // console.log(splitFieldObj);
                 const parentUuid = uuidV1();
                 const childUuids = [];
@@ -350,8 +357,15 @@ module.exports = app => {
                     //*/
                     let fileName = parentUuid + '.PDF';
                     if (index > 0) {
-                        childUuids.push(uuidV1());
-                        fileName = childUuids[childUuids.length - 1] + '.PDF';
+                        const cUuid = uuidV1();
+                        const startPage = splitArcPages[index - 1];
+                        // const endPage = splitArcPages[index - 1];
+                        let endPage = ttlPages;
+                        if (index < splitArcPages.length) {
+                            endPage = splitArcPages[index] - 1;
+                        }
+                        childUuids.push({ uuid: cUuid, totalPages: (endPage - startPage + 1), startPage, endPage, splitKeyValue: splitFieldObj.splitPageValues[index - 1] });
+                        fileName = cUuid + '.PDF';
                     }
                     const oss_result = await ctx.app.signPdfOss.put('archive/' + fileName, stream);
                     if (!(oss_result && oss_result.url && oss_result.res.status === 200)) {
@@ -366,7 +380,7 @@ module.exports = app => {
                     }
                     // stream = await parts();
                 }
-                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, parentUuid, childUuids, splitFieldObj);
+                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, parentUuid, childUuids);
                 ctx.body = body;
             } catch (error) {
                 ctx.helper.log(error);
@@ -390,7 +404,7 @@ module.exports = app => {
                 if (!(oss_result && oss_result.url && oss_result.res.status === 200)) {
                     throw '上传文件失败';
                 }
-                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, newUuidName, [], {});
+                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, newUuidName, []);
                 ctx.body = body;
             } catch (err) {
                 this.log(err);
@@ -428,7 +442,7 @@ module.exports = app => {
                     }
                 }
 
-                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, orgUuidName, [], {});
+                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, orgUuidName, []);
                 ctx.body = body;
             } catch (err) {
                 this.log(err);
@@ -495,8 +509,13 @@ module.exports = app => {
                                         if (item.items[subIdx].childUuids && item.items[subIdx].childUuids.length > 0) {
                                             // 如果有子分页,也得删除!
                                             for (const childUuid of item.items[subIdx].childUuids) {
-                                                let childUuidName = childUuid;
-                                                if (!childUuid.includes('.PDF')) childUuidName = childUuidName + '.PDF';
+                                                let childUuidName = '';
+                                                if (typeof childUuid === 'string') {
+                                                    childUuidName = childUuid;
+                                                } else {
+                                                    childUuidName = childUuid.uuid;
+                                                }
+                                                if (!childUuidName.includes('.PDF')) childUuidName = childUuidName + '.PDF';
                                                 await ctx.app.signPdfOss.delete(`archive/${childUuidName}`);
                                             }
                                         }

+ 2 - 2
app/public/report/js/rpt_archive.js

@@ -635,7 +635,7 @@ let rptArchiveObj = {
                 if (!rptArchiveObj._chkIfFullArchives(currentNode)) {
                     let archiveUrl = `/tender/report_api/addArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}`;
                     if (currentRptPageRst.splitArcPages && currentRptPageRst.splitArcPages.length > 0) {
-                        archiveUrl = `/tender/report_api/addParentChildrenArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}/${JSON.stringify(currentRptPageRst.splitArcPages)};${JSON.stringify(currentRptPageRst.splitArcPagesInfo)}`;
+                        archiveUrl = `/tender/report_api/addParentChildrenArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}/${JSON.stringify(currentRptPageRst.splitArcPages)};${JSON.stringify(currentRptPageRst.splitArcPagesInfo)};${currentRptPageRst.items.length}`;
                     }
                     postDataWithFile(archiveUrl, formData, function (result) {
                     // postDataWithFile('/tender/report_api/addArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId, formData, function (result) {
@@ -704,7 +704,7 @@ let rptArchiveObj = {
                         let archiveUrl = `/tender/report_api/updateArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}/${orgName}`;
                         if (currentRptPageRst.splitArcPages && currentRptPageRst.splitArcPages.length > 0) {
                             // archiveUrl = `/tender/report_api/addParentChildrenArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}/${orgName}`;
-                            archiveUrl = `/tender/report_api/addParentChildrenArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}/${JSON.stringify(currentRptPageRst.splitArcPages)};${JSON.stringify(currentRptPageRst.splitArcPagesInfo)}`; // 分页方式不需要 orgName 
+                            archiveUrl = `/tender/report_api/addParentChildrenArchive/${PROJECT_ID}/${current_stage_id}/${currentNode.refId}/${JSON.stringify(currentRptPageRst.splitArcPages)};${JSON.stringify(currentRptPageRst.splitArcPagesInfo)};${currentRptPageRst.items.length}`; // 分页方式不需要 orgName 
                         }
                         postDataWithFile(archiveUrl, formData, function (result) {
                         // postDataWithFile('/tender/report_api/updateArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + '/' + orgName, formData, function (result) {

+ 13 - 11
app/public/report/js/rpt_jspdf.js

@@ -672,23 +672,25 @@ const JpcJsPDFHelper = {
     },
     getChildrenDocs: function(pageData, paperSize, signatureRelArr, signAuditArr) {
         let rst = [];
+        const ttlPages = pageData.items.length;
         if (pageData.splitArcPages && pageData.splitArcPages.length > 0) {
-            let prePageVal = pageData.splitArcPages[0];
-            let indPages = [];
             const orgItems = [].concat(pageData.items);
             try {
+                // 新方式的splitArcPages数据有所不同(主要是为了考虑流水式表处理方便),splitArcPages记录的是每一段的起始页
+                // 比如: [1,3,4,6],这里表示总共分4段,第一段起始页是1,总页数是第二段的起始页-第一段的起始页(即:3-1)
+                //        最后一段的总页数是:ttlPages - 本段的起始页 + 1
                 for (let pIdx = 0; pIdx < pageData.splitArcPages.length; pIdx++) {
-                    if (prePageVal !== pageData.splitArcPages[pIdx]) {
-                        pageData.items = indPages;
-                        rst.push(JpcJsPDFHelper._createPdf(pageData, paperSize, signatureRelArr, signAuditArr));
-                        indPages = [];
-                        prePageVal = pageData.splitArcPages[pIdx];
+                    const startPage = pageData.splitArcPages[pIdx];
+                    let endPage = ttlPages;
+                    if (pIdx < pageData.splitArcPages.length - 1) {
+                        endPage = pageData.splitArcPages[pIdx + 1] - 1;
                     }
-                    indPages.push(orgItems[pIdx]);
-                    if (pIdx === pageData.splitArcPages.length - 1) {
-                        pageData.items = indPages;
-                        rst.push(JpcJsPDFHelper._createPdf(pageData, paperSize, signatureRelArr, signAuditArr));
+                    const indPages = [];
+                    for (let spIdx = startPage; spIdx <= endPage; spIdx++) {
+                        indPages.push(orgItems[spIdx - 1]);
                     }
+                    pageData.items = indPages;
+                    rst.push(JpcJsPDFHelper._createPdf(pageData, paperSize, signatureRelArr, signAuditArr));
                 }
             } finally {
                 pageData.items = orgItems;

+ 19 - 13
app/public/report/js/rpt_main.js

@@ -1248,23 +1248,29 @@ function downloadPDFReport(pageDataArr, pageSize, rpt_names, signatureRelArr, si
 
             JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName, singleSignatureRelArr, STAGE_AUDIT, false, zTreeOprObj._chkPrePayStatus()); // 精确控制签名
             if (pageData.splitArcPages) {
-                let prePageVal = pageData.splitArcPages[0], rptNameIdx = 0;
-                let indPages = [];
-                const orgItems = pageData.items;
+                // 新方式的splitArcPages数据有所不同(主要是为了考虑流水式表处理方便),splitArcPages记录的是每一段的起始页
+                // 比如: [1,3,4,6],这里表示总共分4段,第一段起始页是1,总页数是第二段的起始页-第一段的起始页(即:3-1)
+                //        最后一段的总页数是:ttlPages - 本段的起始页 + 1
+                /*
+                let rptNameIdx = 0;
+                const ttlPages = pageData.items.length;
+                const orgItems = [].concat(pageData.items);
                 for (let pIdx = 0; pIdx < pageData.splitArcPages.length; pIdx++) {
-                    if (prePageVal !== pageData.splitArcPages[pIdx]) {
-                        pageData.items = indPages;
-                        JpcJsPDFHelper.outputAsPdf(pageData, pageSize, `${rptName}_${rptNameIdx}`, singleSignatureRelArr, STAGE_AUDIT);
-                        rptNameIdx++;
-                        indPages = [];
-                        prePageVal = pageData.splitArcPages[pIdx];
+                    const startPage = pageData.splitArcPages[pIdx];
+                    let endPage = ttlPages;
+                    if (pIdx < pageData.splitArcPages.length - 1) {
+                        endPage = pageData.splitArcPages[pIdx + 1] - 1;
                     }
-                    indPages.push(orgItems[pIdx]);
-                    if (pIdx === pageData.splitArcPages.length - 1) {
-                        pageData.items = indPages;
-                        JpcJsPDFHelper.outputAsPdf(pageData, pageSize, `${rptName}_${rptNameIdx}`, singleSignatureRelArr, STAGE_AUDIT);
+                    const indPages = [];
+                    for (let spIdx = startPage; spIdx <= endPage; spIdx++) {
+                        indPages.push(orgItems[spIdx - 1]);
                     }
+                    pageData.items = indPages;
+                    JpcJsPDFHelper.outputAsPdf(pageData, pageSize, `${rptName}_${rptNameIdx}`, singleSignatureRelArr, STAGE_AUDIT);
+                    rptNameIdx++;
                 }
+                pageData.items = orgItems;
+                //*/
                 // 已验证拆分ok
             }
             if (rptControlObj.currentDownloadIdx < newPageDataArr.length) setTimeout(private_download(newPageDataArr, new_rpt_names), 2000);

+ 3 - 3
app/reports/rpt_component/jpc_bill_tab.js

@@ -58,12 +58,12 @@ JpcBillTabSrv.prototype.createNew = function() {
             pagesForPreSplit.push(pgIdx);
             splitFieldInfo.splitPageValues.push(preVal);
             for (let idx = 1; idx < dataObj.splitArcVals.length; idx++) {
+                pgIdx++;
                 if (preVal !== dataObj.splitArcVals[idx]) {
                     preVal = dataObj.splitArcVals[idx];
-                    pgIdx++;
+                    pagesForPreSplit.push(pgIdx);
+                    splitFieldInfo.splitPageValues.push(preVal);
                 }
-                pagesForPreSplit.push(pgIdx);
-                splitFieldInfo.splitPageValues.push(preVal);
             }
             dataObj.splitArcPages = pagesForPreSplit;
             dataObj.splitArcPagesInfo = splitFieldInfo;

+ 1 - 1
app/router.js

@@ -465,7 +465,7 @@ module.exports = app => {
     app.post('/report/cDefine', sessionAuth, 'reportController.setCustomDefine');
 
     app.post('/tender/report_api/addArchive/:prjId/:stgId/:rptId', sessionAuth, 'reportArchiveController.addReportArchive');
-    app.post('/tender/report_api/addParentChildrenArchive/:prjId/:stgId/:rptId/:childAmt', sessionAuth, 'reportArchiveController.addParentChildrenArchiveReports');
+    app.post('/tender/report_api/addParentChildrenArchive/:prjId/:stgId/:rptId/:splitInfo', sessionAuth, 'reportArchiveController.addParentChildrenArchiveReports');
 
     app.post('/tender/report_api/updateArchive/:prjId/:stgId/:rptId/:orgName', sessionAuth, 'reportArchiveController.updateReportArchive');
     app.post('/tender/report_api/removeArchive/:prjId/:stgId/:rptId/:orgName', sessionAuth, 'reportArchiveController.removeReportArchive');