Browse Source

归档加密与归档UUID不匹配问题 + 大文档导出excel爆内存问题(预保留debug代码,方便人工处理及后续测试调整)

Tony Kang 1 year ago
parent
commit
9506b97696

+ 5 - 3
app/controller/report_archive_controller.js

@@ -317,13 +317,13 @@ module.exports = app => {
                 }
                 const updatedRst = await ctx.service.rptArchive.updateArchive(orgArchiveList[0].id, prjId, stgId, contentArr);
                 // console.log(updatedRst);
-                rst = { err: 0, msg: parentUuidName, data: { uuid: parentUuidName, fileName, updateDate, updatedRst: contentArr } };
+                rst = { err: 0, msg: parentUuidName, data: { uuid: parentUuidName, childUuids, fileName, updateDate, updatedRst: contentArr } };
             } else {
                 // 需要增加
                 const archiveArr = [];
                 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 } };
+                rst = { err: 0, msg: parentUuidName, data: { uuid: parentUuidName, childUuids, fileName, updateDate, updatedRst: archiveArr } };
             }
             return rst;
         }
@@ -442,7 +442,9 @@ module.exports = app => {
                     }
                 }
 
-                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, orgUuidName, []);
+                const newUuidName = uuidV1();
+                // const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, orgUuidName, []);
+                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, newUuidName, []); // 只管用新的uuid,此方法中会自动删除最旧的那个记录及相关PDF文档
                 ctx.body = body;
             } catch (err) {
                 this.log(err);

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

@@ -723,7 +723,8 @@ let rptArchiveObj = {
                                 params.content = pageEncryptInfo;
                                 params.childUuids = result.updatedRst.childUuids;
                                 params.splitArcPages = (currentRptPageRst.splitArcPages) ? currentRptPageRst.splitArcPages : [];
-                                params.uuid = orgName;
+                                // params.uuid = orgName;
+                                params.uuid = result.uuid;
                                 CommonAjax.postXsrfEx("/tender/report_api/updateArchiveEncryption", params, 10000, true, getCookie('csrfToken_j'),
                                     function(result){
                                         if (cb) {

+ 26 - 1
app/public/report/js/rpt_main.js

@@ -814,6 +814,11 @@ let rptControlObj = {
     },
 
     downloadExcelReport: async function(pageDataArr, pageSize, rpt_names, signatureRelArr) {
+        const MAX_BRK_PAGE = 300;
+        const __sleep = (n) => {
+            var start = new Date().getTime();
+            while(true)  if(new Date().getTime()-start > n) break;
+        }
         const private_download = async function(currentIndex) {
             if (currentIndex < pageDataArr.length) {
                 //这里的数据应该在调用前己处理
@@ -824,8 +829,28 @@ let rptControlObj = {
                 await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, rptName, singlePage, null, null, role_rel_list, null, getStageStatus() !== 3);
             }
         };
+        const _splitDownload = async (currentIndex) => {
+            if (currentIndex < pageDataArr.length) {
+                const rptName = rpt_names[currentIndex];
+                const ttlPages = pageDataArr[currentIndex].items.length;
+                const splitAmt = Math.ceil(ttlPages / MAX_BRK_PAGE);
+                const singlePage = true;
+                let role_rel_list = signatureRelArr[currentIndex];
+                const bkItems = [].concat(pageDataArr[currentIndex].items);
+                for (let sIdx = 0; sIdx < splitAmt; sIdx++) {
+                    let dlItems = bkItems.slice(sIdx * MAX_BRK_PAGE, (sIdx + 1) * MAX_BRK_PAGE);
+                    pageDataArr[currentIndex].items = dlItems;
+                    await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, `${rptName}${sIdx}`, singlePage, null, null, role_rel_list, null, getStageStatus() !== 3);
+                    if (sIdx < splitAmt - 1) __sleep(10000);
+                }
+            }
+        };
         for (let idx = 0; idx < pageDataArr.length; idx++) {
-            await private_download(idx);
+            if (pageDataArr[idx].items.length > MAX_BRK_PAGE) {
+                await private_download(idx); // 应该用_splitDownload方法,只是目前的判断条件还不够理想,需要在qa上再仔细调整,在外网需要临时debug来分批导出
+            } else {
+                await private_download(idx);
+            }
         }
     },