Bläddra i källkod

变更令-归档部分处理 + code sync

Tony Kang 1 år sedan
förälder
incheckning
ccd05ebd00

+ 25 - 16
app/controller/report_archive_controller.js

@@ -203,6 +203,8 @@ module.exports = app => {
             const params = JSON.parse(ctx.request.body.params);
             const prjId = params.prjId;
             const stgId = params.stgId;
+            const tdId = params.tenderId;
+            const bzId = params.businessId;
             const rptId = params.rptId;
             const ttlPgs = params.ttlPgs;
             const uuid = params.uuid;
@@ -212,7 +214,7 @@ module.exports = app => {
             const reportName = params.reportName;
             const userId = ctx.session.sessionUser.accountId;
             const content = params.content;
-            const orgArchiveList = await ctx.service.rptArchiveEncryption.getPrjStgArchiveEncryption(prjId, stgId);
+            const orgArchiveList = await ctx.service.rptArchiveEncryption.getArchiveEncryptionByBzId(prjId, stgId, bzId);
             if (orgArchiveList.length > 0) {
                 const contentArr = JSON.parse(orgArchiveList[0].content);
                 let hasArchive = false;
@@ -244,20 +246,20 @@ module.exports = app => {
                 } else {
                     //
                 }
-                const updatedRst = await ctx.service.rptArchiveEncryption.updateArchiveEncryption(orgArchiveList[0].id, prjId, stgId, contentArr);
+                const updatedRst = await ctx.service.rptArchiveEncryption.updateArchiveEncryption(orgArchiveList[0].id, prjId, stgId, tdId, bzId, contentArr);
                 // console.log(updatedRst);
                 ctx.body = { err: 0, msg: '', data: { addedRst: contentArr } };
             } else {
                 // 需要增加
                 const archiveArr = [];
                 archiveArr.push({ rpt_id: rptId, uuid, total_page: ttlPgs, encryption: content, user_id: userId, report_name: reportName, childUuids, splitArcPages });
-                const addedRst = await ctx.service.rptArchiveEncryption.createArchiveEncryption(prjId, stgId, archiveArr);
+                const addedRst = await ctx.service.rptArchiveEncryption.createArchiveEncryption(prjId, stgId, tdId, bzId, archiveArr);
                 // console.log(addedRst);
                 ctx.body = { err: 0, msg: '', data: { addedRst: archiveArr } };
             }
         }
 
-        async _updateArchiveCommon(ctx, prjId, stgId, rptId, parentUuidName, childUuids) {
+        async _updateArchiveCommon(ctx, prjId, stgId, bzId, tdId, 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());
@@ -272,7 +274,7 @@ module.exports = app => {
             let rst = null;
             const fileName = parentUuidName + '.PDF';
             let removeUuid = ''; // 因这里把增删功能做在一起,有可能要删除一个旧的uuid,需要返回,给加密处理用
-            const orgArchiveList = await ctx.service.rptArchive.getPrjStgArchive(prjId, stgId);
+            const orgArchiveList = await ctx.service.rptArchive.getArchiveByBzId(prjId, stgId, bzId);
             if (orgArchiveList.length > 0) {
                 const contentArr = JSON.parse(orgArchiveList[0].content);
                 let hasArchive = false;
@@ -324,14 +326,14 @@ module.exports = app => {
                     // 表示有新的模板需要添加
                     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);
+                const updatedRst = await ctx.service.rptArchive.updateArchive(orgArchiveList[0].id, prjId, stgId, tdId, bzId, contentArr);
                 // console.log(updatedRst);
                 rst = { err: 0, msg: parentUuidName, data: { uuid: parentUuidName, childUuids, removeUuid, 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);
+                const addedRst = await ctx.service.rptArchive.createArchive(prjId, stgId, tdId, bzId, archiveArr);
                 rst = { err: 0, msg: parentUuidName, data: { uuid: parentUuidName, childUuids, removeUuid, fileName, updateDate, updatedRst: archiveArr } };
             }
             return rst;
@@ -343,6 +345,8 @@ module.exports = app => {
             try {
                 const prjId = ctx.params.prjId;
                 const stgId = ctx.params.stgId;
+                const bzId = ctx.params.bzId;
+                const tdId = ctx.params.tdId;
                 const rptId = ctx.params.rptId;
                 // const childAmt = parseInt(ctx.params.childAmt); // 子分页数量
                 const childInfo = ctx.params.splitInfo.split(';'); // 这个参数带比较多的信息,包含分割指标的:1. 名称 2. ID 3. 内容
@@ -389,7 +393,7 @@ module.exports = app => {
                     }
                     // stream = await parts();
                 }
-                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, parentUuid, childUuids);
+                const body = await this._updateArchiveCommon(ctx, prjId, stgId, bzId, tdId, rptId, parentUuid, childUuids);
                 ctx.body = body;
             } catch (error) {
                 ctx.helper.log(error);
@@ -406,6 +410,8 @@ module.exports = app => {
                 const stream = await ctx.getFileStream();
                 const prjId = ctx.params.prjId;
                 const stgId = ctx.params.stgId;
+                const bzId = ctx.params.bzId;
+                const tdId = ctx.params.tdId;
                 const rptId = ctx.params.rptId;
                 const newUuidName = uuidV1();
                 const fileName = newUuidName + '.PDF';
@@ -413,7 +419,8 @@ 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, bzId, tdId, rptId, newUuidName, []);
+                // console.log(body);
                 ctx.body = body;
             } catch (err) {
                 this.log(err);
@@ -431,6 +438,8 @@ module.exports = app => {
                 const stream = await ctx.getFileStream();
                 const prjId = ctx.params.prjId;
                 const stgId = ctx.params.stgId;
+                const bzId = ctx.params.bzId;
+                const tdId = ctx.params.tdId;
                 const rptId = ctx.params.rptId;
                 const orgUuidName = ctx.params.orgName;
                 const orgFileName = orgUuidName + '.PDF';
@@ -453,8 +462,7 @@ module.exports = app => {
                     }
                 }
 
-                // const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, orgUuidName, []);
-                const body = await this._updateArchiveCommon(ctx, prjId, stgId, rptId, newUuidName, []); // 只管用新的uuid,此方法中会自动删除最旧的那个记录及相关PDF文档
+                const body = await this._updateArchiveCommon(ctx, prjId, stgId, bzId, tdId, rptId, newUuidName, []); // 只管用新的uuid,此方法中会自动删除最旧的那个记录及相关PDF文档
                 ctx.body = body;
             } catch (err) {
                 this.log(err);
@@ -467,9 +475,10 @@ module.exports = app => {
             try {
                 const prjId = ctx.params.prjId;
                 const stgId = ctx.params.stgId;
+                const bzId = ctx.params.bzId;
                 const rptId = parseInt(ctx.params.rptId);
                 const uuid = ctx.params.orgName;
-                const orgArchiveList = await ctx.service.rptArchiveEncryption.getPrjStgArchiveEncryption(prjId, stgId);
+                const orgArchiveList = await ctx.service.rptArchiveEncryption.getArchiveEncryptionByBzId(prjId, stgId, bzId);
                 if (orgArchiveList.length > 0) {
                     const contentArr = JSON.parse(orgArchiveList[0].content);
                     for (let idx = contentArr.length - 1; idx >= 0; idx--) {
@@ -478,8 +487,7 @@ module.exports = app => {
                             break;
                         }
                     }
-                    // const updatedRst = await ctx.service.rptArchive.updateArchive(prjId, stgId, contentArr);
-                    rst = await ctx.service.rptArchiveEncryption.updateArchiveEncryption(orgArchiveList[0].id, prjId, stgId, contentArr);
+                    rst = await ctx.service.rptArchiveEncryption.updateArchiveEncryption(orgArchiveList[0].id, prjId, stgId, orgArchiveList[0].tender_id, bzId, contentArr);
                 }
             } catch (err) {
                 this.log(err);
@@ -507,9 +515,10 @@ module.exports = app => {
                 const prjId = ctx.params.prjId;
                 const stgId = ctx.params.stgId;
                 const rptId = ctx.params.rptId;
+                const bzId = ctx.params.bzId;
                 const orgUuidName = ctx.params.orgName;
                 // const fileName = orgUuidName + '.PDF';
-                const orgArchiveList = await ctx.service.rptArchive.getPrjStgArchive(prjId, stgId);
+                const orgArchiveList = await ctx.service.rptArchive.getArchiveByBzId(prjId, stgId, bzId);
                 if (orgArchiveList.length > 0) {
                     const contentArr = JSON.parse(orgArchiveList[0].content);
                     for (let idx = contentArr.length - 1; idx >= 0; idx--) {
@@ -542,7 +551,7 @@ module.exports = app => {
                             break;
                         }
                     }
-                    rst = await ctx.service.rptArchive.updateArchive(orgArchiveList[0].id, prjId, stgId, contentArr);
+                    rst = await ctx.service.rptArchive.updateArchive(orgArchiveList[0].id, prjId, stgId, orgArchiveList[0].tender_id, bzId, contentArr);
                 }
             } catch (err) {
                 this.log(err);

+ 25 - 9
app/controller/report_controller.js

@@ -180,7 +180,6 @@ module.exports = app => {
                         archiveList = JSON.parse(archives[0].content);
                     }
                 }
-                // const archiveList = await ctx.service.rptArchive.getPrjStgArchive(tender.data.project_id, ctx.stage.id);
                 let prjAccList = await ctx.service.projectAccount.getAllAccountByProjectId(tender.data.project_id);
                 const roleList = await ctx.service.signatureRole.getSignatureRolesByTenderId(tender.id);
                 const usedList = await ctx.service.signatureUsed.getSignatureUsedByTenderId(tender.id);
@@ -620,7 +619,7 @@ module.exports = app => {
             }
         }
 
-        async _indexForBGL(ctx, source_type) {
+        async _indexForBGL(ctx, source_type, stage_id) {
             // 变更令、变更方案、变更立项、变更申请 报表入口
             try {
                 await this._getStageAuditViewData(ctx);
@@ -630,6 +629,8 @@ module.exports = app => {
                 pageShow.closeShowAllCustomized = 0;
                 const tenderId = ctx.params.id;
                 const changeId = ctx.params.cid;
+                let bzId = '';
+                if (stage_id === -300) bzId = changeId;
                 const paymentDetail_id = -1;
                 const pid = ctx.session.sessionProject.id;
                 const budget_id = -1;
@@ -642,8 +643,24 @@ module.exports = app => {
                 const stageList = [];
                 const unitList = await ctx.service.constructionUnit.getAllDataByCondition({ where: { pid } }); // 找公司章用的
                 const isAdmin = ctx.session.sessionUser.is_admin;
-                const lastAuditor = null;
-                const archiveList = [];
+                let lastAuditor = null;
+                for (let cIdx = 0; cIdx < changes.length; cIdx++) {
+                    if (changes[cIdx].cid === changeId) {
+                        if (changes[cIdx].status === 3) {
+                            const changeAudit = await ctx.service.changeAudit.getLastUser(changeId, changes[cIdx].times, 3);
+                            if (changeAudit) {
+                                lastAuditor = { end_time: changeAudit.sin_time };
+                            }
+                        }
+                        break;
+                    }
+                }
+                let archiveList = [];
+                const archives = await ctx.service.rptArchive.getArchiveByBzId(pid, stage_id, bzId);
+                if (archives.length > 0) {
+                    archiveList = JSON.parse(archives[0].content);
+                }
+
                 let prjAccList = await ctx.service.projectAccount.getAllAccountByProjectId(pid);
                 const roleList = [];
                 const usedList = [];
@@ -674,7 +691,6 @@ module.exports = app => {
 
                 const materialList = await ctx.service.material.getValidMaterials();
 
-                const stage_id = -300;
                 const stage_order = -1;
                 const sorder = -1;
                 const stage_times = -1;
@@ -761,22 +777,22 @@ module.exports = app => {
 
         async indexForChange(ctx) {
             // 变更令报表入口
-            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change);
+            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change, -300);
         }
 
         async indexForChangePlan(ctx) {
             // 变更方案报表入口
-            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change_plan);
+            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change_plan, -301);
         }
 
         async indexForChangeProject(ctx) {
             // 变更立项报表入口
-            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change_project);
+            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change_project, -302);
         }
 
         async indexForChangeApply(ctx) {
             // 变更申请报表入口
-            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change_apply);
+            await this._indexForBGL(ctx, sourceTypeConst.sourceType.change_apply, -303);
         }
 
         /**

+ 68 - 43
app/public/report/js/rpt_archive.js

@@ -379,22 +379,33 @@ let rptArchiveObj = {
             let achivedItem = null;
             for (let item of ARCHIVE_LIST) {
                 if (parseInt(item.rpt_id) === currentNode.refId) {
-                    if (LAST_AUDITOR.end_time) {
-                        auditDate = new Date(LAST_AUDITOR.end_time);
+                    if (LAST_AUDITOR) {
+                        if (LAST_AUDITOR.end_time) {
+                            auditDate = new Date(LAST_AUDITOR.end_time);
+                        } else {
+                            auditDate = new Date(LAST_AUDITOR.begin_time);
+                        }
                     } else {
-                        auditDate = new Date(LAST_AUDITOR.begin_time);
+                        // 其他情况(如变更令相关)
                     }
                     achivedAmt = item.items?item.items.length:0;
                     achivedItem = item;
                     break;
                 }
             }
-            if (auditDate) {
-                cardArchiveInfo.append('<h6>第' + current_stage_order + '期,审批通过时间:' + auditDate.getFullYear() + '-' + (auditDate.getMonth() + 1) + '-' + auditDate.getDate() + '。</h6>');
+            if (STAGE_ID <= -300 && STAGE_ID > -400) {
+                if (auditDate) {
+                    cardArchiveInfo.append('<h6>审批通过时间:' + auditDate.getFullYear() + '-' + (auditDate.getMonth() + 1) + '-' + auditDate.getDate() + '。</h6>');
+                }
+                cardArchiveInfo.append('<h6>已归档' + achivedAmt + '份文件。</h6>');
             } else {
-                cardArchiveInfo.append('<h6>第' + current_stage_order + '期');
+                if (auditDate) {
+                    cardArchiveInfo.append('<h6>第' + current_stage_order + '期,审批通过时间:' + auditDate.getFullYear() + '-' + (auditDate.getMonth() + 1) + '-' + auditDate.getDate() + '。</h6>');
+                } else {
+                    cardArchiveInfo.append('<h6>第' + current_stage_order + '期');
+                }
+                cardArchiveInfo.append('<h6>本张报表第' + current_stage_order + '期,已归档' + achivedAmt + '份文件。</h6>');
             }
-            cardArchiveInfo.append('<h6>本张报表第' + current_stage_order + '期,已归档' + achivedAmt + '份文件。</h6>');
             if (achivedItem && achivedItem.items && achivedItem.items.length === 3) {
                 cardArchiveInfo.append('<h6>本次归档将会覆盖最旧那次归档。</h6>');
             }
@@ -655,8 +666,49 @@ let rptArchiveObj = {
             rptArchiveObj._archiveCurrentReport(currentRptPageRst, currentNode, cb);
         }
     },
+    _getBusinessId: function() {
+        let rst = '';
+        switch (current_stage_id) {
+            case -300: // 变更令
+                rst = encodeURIComponent(CHNAGE_ID);
+                break;
+            case -301: // 变更方案
+                break;
+            case -302: // 变更立项
+                break;
+            case -303: // 变更申请
+                break;
+            default:
+                break;                            
+        }
+        return rst;
+    },
     _archiveCurrentReport: function(currentRptPageRst, currentNode, cb) {
         // 归档当前报表
+        const bzId = rptArchiveObj._getBusinessId();
+        const _prepareEncryptionParam = function(result, pageEncryptInfo) {
+            const params = {};
+            params.prjId = PROJECT_ID;
+            params.stgId = current_stage_id;
+            params.tenderId = TENDER_ID;
+            params.businessId = bzId;
+            params.rptId = currentNode.refId;
+            params.ttlPgs = currentRptPageRst.items.length;
+            params.content = pageEncryptInfo;
+            params.uuid = result.uuid; //正确返回时,带着uuid回来
+            params.childUuids = result.childUuids; //还有子uuid
+            params.splitArcPages = currentRptPageRst.splitArcPages ? currentRptPageRst.splitArcPages : [];
+            // params.splitArcPagesInfo = currentRptPageRst.splitArcPagesInfo ? currentRptPageRst.splitArcPagesInfo : {};
+            params.reportName = currentNode.name;
+            return params;
+        };
+        const _prepareArchiveUrl = function(archiveOprStr, suffix) {
+            let rst = `/tender/report_api/${archiveOprStr}/${PROJECT_ID}/${current_stage_id}/${bzId}/${TENDER_ID}/${currentNode.refId}${suffix}`;
+            if (currentRptPageRst.splitArcPages && currentRptPageRst.splitArcPages.length > 0) {
+                rst = `/tender/report_api/addParentChildrenArchive/${PROJECT_ID}/${current_stage_id}/${bzId}/${TENDER_ID}/${currentNode.refId}/${JSON.stringify(currentRptPageRst.splitArcPages)};${JSON.stringify(currentRptPageRst.splitArcPagesInfo)};${currentRptPageRst.items.length}`;
+            }
+            return rst;
+        }
         if (currentRptPageRst !== null) {
             try {
                 let signCells = [];
@@ -771,10 +823,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)};${currentRptPageRst.items.length}`;
-                    }
+                    const archiveUrl = _prepareArchiveUrl('addArchive', '');
                     postDataWithFile(archiveUrl, formData, function (result) {
                         // 成功后,更新当前页面
                         //*
@@ -784,17 +833,7 @@ let rptArchiveObj = {
                             rptArchiveObj.showArchivedItem(currentNode);
                             zTreeOprObj.refreshNodes();
                             //第二步:增加加密信息
-                            let params = {};
-                            params.prjId = PROJECT_ID;
-                            params.stgId = current_stage_id;
-                            params.rptId = currentNode.refId;
-                            params.ttlPgs = currentRptPageRst.items.length;
-                            params.content = pageEncryptInfo;
-                            params.uuid = result.uuid; //正确返回时,带着uuid回来
-                            params.childUuids = result.childUuids; //还有子uuid
-                            params.splitArcPages = currentRptPageRst.splitArcPages ? currentRptPageRst.splitArcPages : [];
-                            params.splitArcPagesInfo = currentRptPageRst.splitArcPagesInfo ? currentRptPageRst.splitArcPagesInfo : {};
-                            params.reportName = currentNode.name;
+                            let params = _prepareEncryptionParam(result, pageEncryptInfo);
                             CommonAjax.postXsrfEx("/tender/report_api/addArchiveEncryption", params, 10000, true, getCookie('csrfToken_j'),
                                 function(rst){
                                     if (cb) {
@@ -812,7 +851,7 @@ let rptArchiveObj = {
                             );
                         } else {
                             // 有冲突,需要删除
-                            CommonAjax.postXsrfEx('/tender/report_api/removeArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + result.fileName, '', 3000, true, getCookie('csrfToken_j'),
+                            CommonAjax.postXsrfEx(`/tender/report_api/removeArchive/${PROJECT_ID}/${current_stage_id}/${bzId}/${currentNode.refId}/${result.fileName}`, '', 3000, true, getCookie('csrfToken_j'),
                                 function(result){
                                     if (cb) {
                                         cb('err', 'add archive conflict!', null);
@@ -837,13 +876,8 @@ let rptArchiveObj = {
                                 orgName = aItem.items[idx].uuid;
                             }
                         }
-                        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)};${currentRptPageRst.items.length}`; // 分页方式不需要 orgName
-                        }
+                        const archiveUrl = _prepareArchiveUrl('updateArchive', `/${orgName}`);
                         postDataWithFile(archiveUrl, formData, function (result) {
-                        // postDataWithFile('/tender/report_api/updateArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + '/' + orgName, formData, function (result) {
                             // 成功后,更新当前页面
                             if (result.updatedRst) {
                                 // console.log(result);
@@ -851,18 +885,8 @@ let rptArchiveObj = {
                                 rptArchiveObj.showArchivedItem(currentNode);
                                 zTreeOprObj.refreshNodes();
                                 //第二步:更新加密信息
-                                let params = {};
-                                params.prjId = PROJECT_ID;
-                                params.stgId = current_stage_id;
-                                params.rptId = currentNode.refId;
-                                params.ttlPgs = currentRptPageRst.items.length;
-                                params.content = pageEncryptInfo;
-                                params.childUuids = result.childUuids;
-                                params.removeUuid = result.removeUuid;
-                                params.splitArcPages = (currentRptPageRst.splitArcPages) ? currentRptPageRst.splitArcPages : [];
-                                // params.uuid = orgName;
-                                params.uuid = result.uuid;
-                                params.reportName = currentNode.name;
+                                // let params = {};
+                                let params = _prepareEncryptionParam(result, pageEncryptInfo);
                                 CommonAjax.postXsrfEx("/tender/report_api/updateArchiveEncryption", params, 10000, true, getCookie('csrfToken_j'),
                                     function(result){
                                         if (cb) {
@@ -880,7 +904,7 @@ let rptArchiveObj = {
                                 );
                             } else {
                                 // 有冲突,需要删除
-                                CommonAjax.postXsrfEx('/tender/report_api/removeArchive/' + PROJECT_ID + '/' + current_stage_id + '/' + currentNode.refId + result.fileName, '', 3000, true, getCookie('csrfToken'),
+                                CommonAjax.postXsrfEx(`/tender/report_api/removeArchive/${PROJECT_ID}/${current_stage_id}/${bzId}/${currentNode.refId}/${result.fileName}`, '', 3000, true, getCookie('csrfToken'),
                                     function(result){
                                         if (cb) {
                                             cb('err', 'update archive conflict!', null);
@@ -929,11 +953,12 @@ let rptArchiveObj = {
     },
 
     removeArchive: function() {
+        // 这个是从'归档报表'界面进来的
         let me = rptArchiveObj;
         const bkRefId = parseInt(me.currentNode.refId);
         const bkUuid = me.currentArchiveUuid;
         if (me.currentNode && me.currentArchiveUuid) {
-            const url = `/tender/report_api/removeArchive/${PROJECT_ID}/${current_stage_id}/${me.currentNode.refId}/${me.currentArchiveUuid}`;
+            const url = `/tender/report_api/removeArchive/${PROJECT_ID}/${current_stage_id}/${rptArchiveObj._getBusinessId()}/${me.currentNode.refId}/${me.currentArchiveUuid}`;
             CommonAjax.postXsrfEx(url, '', 3000, true, getCookie('csrfToken_j'),
                 function(result){
                     // console.log(result.data);

+ 4 - 4
app/router.js

@@ -486,11 +486,11 @@ module.exports = app => {
     app.post('/tender/report_api/updateCustNode', sessionAuth, 'reportController.updateCustNode');
     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/:splitInfo', sessionAuth, 'reportArchiveController.addParentChildrenArchiveReports');
+    app.post('/tender/report_api/addArchive/:prjId/:stgId/:bzId/:tdId/:rptId', sessionAuth, 'reportArchiveController.addReportArchive');
+    app.post('/tender/report_api/addParentChildrenArchive/:prjId/:stgId/:bzId/:tdId/: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');
+    app.post('/tender/report_api/updateArchive/:prjId/:stgId/:bzId/:tdId/:rptId/:orgName', sessionAuth, 'reportArchiveController.updateReportArchive');
+    app.post('/tender/report_api/removeArchive/:prjId/:stgId/:bzId/:rptId/:orgName', sessionAuth, 'reportArchiveController.removeReportArchive');
 
     app.post('/tender/report_api/addArchiveEncryption', sessionAuth, 'reportArchiveController.addReportArchiveEncryption');
     app.post('/tender/report_api/updateArchiveEncryption', sessionAuth, 'reportArchiveController.updateReportArchiveEncryption');

+ 29 - 2
app/service/rpt_archive.js

@@ -34,6 +34,29 @@ module.exports = app => {
             return list;
         }
 
+        async getArchiveByBzId(prjId, stgId, bzId) {
+            if (stgId > 0) {
+                return await this.getPrjStgArchive(prjId, stgId);
+            }
+            this.initSqlBuilder();
+            this.sqlBuilder.setAndWhere('prj_id', {
+                value: prjId,
+                operate: '=',
+            });
+            this.sqlBuilder.setAndWhere('stage_id', {
+                value: stgId,
+                operate: '=',
+            });
+            this.sqlBuilder.setAndWhere('business_id', {
+                value: `"${bzId}"`,
+                operate: '=',
+            });
+            this.sqlBuilder.columns = ['id', 'prj_id', 'stage_id', 'content'];
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+            const rstList = await this.db.query(sql, sqlParam);
+            return rstList;
+        }
+
         async getPrjStgArchive(prjId, stgId) {
             this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('prj_id', {
@@ -50,13 +73,15 @@ module.exports = app => {
             return rstList;
         }
 
-        async createArchive(prj_id, stage_id, archiveArr) {
+        async createArchive(prj_id, stage_id, tender_id, business_id, archiveArr) {
             let rst = null;
             this.transaction = await this.db.beginTransaction();
             try {
                 const data = {
                     prj_id,
                     stage_id,
+                    business_id,
+                    tender_id,
                     content: JSON.stringify(archiveArr),
                 };
                 // console.log(data);
@@ -70,7 +95,7 @@ module.exports = app => {
             return rst;
         }
 
-        async updateArchive(id, prj_id, stage_id, archiveArr) {
+        async updateArchive(id, prj_id, stage_id, tender_id, business_id, archiveArr) {
             let rst = null;
             this.transaction = await this.db.beginTransaction();
             try {
@@ -78,6 +103,8 @@ module.exports = app => {
                     id,
                     prj_id,
                     stage_id,
+                    business_id,
+                    tender_id,
                     content: JSON.stringify(archiveArr),
                 };
                 // console.log(data);

+ 29 - 64
app/service/rpt_archive_encryption.js

@@ -34,6 +34,29 @@ module.exports = app => {
             return list;
         }
 
+        async getArchiveEncryptionByBzId(prjId, stgId, bzId) {
+            if (stgId > 0) {
+                return await this.getPrjStgArchiveEncryption(prjId, stgId);
+            }
+            this.initSqlBuilder();
+            this.sqlBuilder.setAndWhere('prj_id', {
+                value: prjId,
+                operate: '=',
+            });
+            this.sqlBuilder.setAndWhere('stage_id', {
+                value: stgId,
+                operate: '=',
+            });
+            this.sqlBuilder.setAndWhere('business_id', {
+                value: `"${bzId}"`,
+                operate: '=',
+            });
+            this.sqlBuilder.columns = ['id', 'prj_id', 'stage_id', 'content'];
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+            const rstList = await this.db.query(sql, sqlParam);
+            return rstList;
+        }
+
         async getPrjStgArchiveEncryption(prjId, stgId) {
             this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('prj_id', {
@@ -50,13 +73,15 @@ module.exports = app => {
             return rstList;
         }
 
-        async createArchiveEncryption(prj_id, stage_id, archiveArr) {
+        async createArchiveEncryption(prj_id, stage_id, tender_id, business_id, archiveArr) {
             let rst = null;
             this.transaction = await this.db.beginTransaction();
             try {
                 const data = {
                     prj_id,
                     stage_id,
+                    business_id,
+                    tender_id,
                     content: JSON.stringify(archiveArr),
                 };
                 // console.log(data);
@@ -70,7 +95,7 @@ module.exports = app => {
             return rst;
         }
 
-        async updateArchiveEncryption(id, prj_id, stage_id, archiveArr) {
+        async updateArchiveEncryption(id, prj_id, stage_id, tender_id, business_id, archiveArr) {
             let rst = null;
             this.transaction = await this.db.beginTransaction();
             try {
@@ -78,6 +103,8 @@ module.exports = app => {
                     id,
                     prj_id,
                     stage_id,
+                    business_id,
+                    tender_id,
                     content: JSON.stringify(archiveArr),
                 };
                 // console.log(data);
@@ -90,68 +117,6 @@ module.exports = app => {
             }
             return rst;
         }
-
-        // async addInitialStageData(tender_id, stage, preStage) {
-        //     // 在加stage的时候需要挂上这个,copy之前的签名人
-        //     const rst = [];
-        //     const preRoleRelList = await this.getRoleRptRelByTenderId(tender_id, preStage.id);
-        //     for (const rptRoleRel of preRoleRelList) {
-        //         const relList = JSON.parse(rptRoleRel.rel_content);
-        //         // const newRptRoleRel = {tender_id: tender_id, rpt_id: rptRoleRel.rpt_id, sid: stage.id, rel_content: ''};
-        //         const newRelList = [];
-        //         for (const role of relList) {
-        //             const newRole = {};
-        //             newRelList.push(newRole);
-        //             for (const key in role) {
-        //                 if (key !== 'sign_date') {
-        //                     newRole[key] = role[key];
-        //                 } else {
-        //                     newRole[key] = '';
-        //                 }
-        //             }
-        //         }
-        //         // rst.push(await this.createRoleRelationship(tender_id, rptRoleRel.rpt_id, stage.id, newRelList));
-        //         await this.createRoleRelationship(tender_id, rptRoleRel.rpt_id, stage.id, newRelList); // 暂时用不到,就先不返回结果
-        //     }
-        //     return rst;
-        // }
-
-        // async updateRoleRelationship(id, tender_id, rpt_id, sid, relArr) {
-        //     let rst = null;
-        //     if (id < 0) {
-        //         rst = await this.createRoleRelationship(tender_id, rpt_id, sid, relArr);
-        //     } else {
-        //         this.transaction = await this.db.beginTransaction();
-        //         try {
-        //             const data = { id, tender_id, rpt_id, sid, rel_content: JSON.stringify(relArr) };
-        //             rst = await this.transaction.update(this.tableName, data);
-        //             await this.transaction.commit();
-        //         } catch (ex) {
-        //             console.log(ex);
-        //             // 回滚
-        //             await this.transaction.rollback();
-        //         }
-        //     }
-        //     return rst;
-        // }
-        //
-        // async updateMultiRoleRelationship(orgParams, newRelArr) {
-        //     for (let idx = 0; idx < orgParams.length; idx++) {
-        //         const param = orgParams[idx];
-        //         const data = { tender_id: param[0], sid: param[1], rpt_id: param[2] };
-        //         this.transaction = await this.db.beginTransaction();
-        //         try {
-        //             await this.transaction.delete(this.tableName, data);
-        //             this.transaction.commit();
-        //             await this.createRoleRelationship(param[0], param[2], param[1], newRelArr);
-        //         } catch (ex) {
-        //             console.log(ex.toString());
-        //             // 回滚
-        //             await this.transaction.rollback();
-        //         }
-        //     }
-        //     return true;
-        // }
     }
     return RptArchiveEncryption;
 };

+ 7 - 7
app/view/report/index.ejs

@@ -4,7 +4,7 @@
     <% include ../payment_safe/sub_menu.ejs %>
 <% } else if (stg_id === -200) { %>
     <% include ../budget/sub_menu.ejs %>
-<% } else if (stg_id === -300) { %>
+<% } else if ([-300, -301, -302, -303].includes(stg_id)) { %>
     <% include ../tender/tender_sub_menu.ejs %>
 <% } else { %>
     <% include ../stage/stage_sub_menu.ejs %>
@@ -14,12 +14,12 @@
         <div class="title-main d-flex">
             <% if(stg_id === -1) { %>
                 <% include ../tender/tender_sub_mini_menu.ejs %>
-            <% } else if (stg_id === -100 || stg_id === -200 || stg_id === -300) { %>
+            <% } else if ([-100, -200, -300, -301, -302, -303].includes(stg_id)) { %>
             <% } else { %>
                 <% include ../stage/stage_sub_mini_menu.ejs %>
             <% } %>
             <div>
-                <% if (false || (stg_id !== -100 && stg_id !== -200 && stg_id !== -300)) { %>
+                <% if (false || ![-100, -200, -300, -301, -302, -303].includes(stg_id)) { %>
                 <div class="d-inline-block">
                     <div class="dropdown" id="divSelectableStages">
                         <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentStage" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
@@ -27,7 +27,7 @@
                     </div>
                 </div>
                 <% } %>
-                <% if ((stg_id === -200) || (stg_id !== -100 && stg_id !== -300)) { %>
+                <% if (stg_id === -200 || ![-100, -300, -301, -302, -303].includes(stg_id)) { %>
                 <div class="d-inline-block">
                     <ul class="nav nav-pills m-0">
                         <li class="nav-item mr-1"><a href="#man-c" data-toggle="modal" data-target="#man-c" class=" btn btn-outline-primary btn-sm"><i class="fa fa-cog"></i> 推荐报表</a></li>
@@ -37,7 +37,7 @@
                     </ul>
                 </div>
                 <% } %>
-                <% if (stg_id === -300) { %>
+                <% if ([-300, -301, -302, -303].includes(stg_id)) { %>
                 <!--
                 <div class="d-inline-block">
                     <div class="dropdown">
@@ -51,7 +51,7 @@
                     <a class="btn btn-sm btn-light active" href="javascript:void(0);">输出报表</a>
                 </div>
                 <% } %>
-                <% if (false || (stg_id !== -100 && stg_id !== -200 && stg_id !== -300)) { %>
+                <% if (false || ![-100, -200, -300, -301, -302, -303].includes(stg_id)) { %>
                 <% if (ctx.session.sessionProject.page_show.isPreset) { %>
                 <div class="d-inline-block">
                     <div class="dropdown">
@@ -479,7 +479,7 @@
         current_stage_status = STAGE_LIST[STAGE_LIST.length - 1].status;
     }
 
-    <% if (false || (stg_id !== -100 && stg_id !== -200 && stg_id !== -300)) { %>
+    <% if (false || ![-100, -200, -300, -301, -302, -303].includes(stg_id)) { %>
     buildStageSelection();
     <% } %>
     setupSignature();

+ 10 - 2
sql/update.sql

@@ -11,6 +11,14 @@ CREATE TABLE `zh_change_settle_list`  (
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT = '变更已结算清单表(用于修订和重审时生成,防止已结算变更清单被删除)';
 
-ALTER TABLE `zh_rpt_archive_encryption` 
+ALTER TABLE `calculation`.`zh_rpt_archive` 
 ADD COLUMN `business_id` VARCHAR(45) NULL COMMENT '有其他业务情况,统一在这里标识(类uuid),要结合stage_id来看,如stage_id > 0,则是标段和期,< 0则是其他业务,如 -300 -> 变更令;-301 - 变更方案;-302 - 变更立项 -303 - 变更申请' AFTER `stage_id`,
-ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`;
+ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`,
+ADD INDEX `PRJ_STG_BZ` (`prj_id` ASC, `stage_id` ASC, `business_id` ASC);
+;
+
+ALTER TABLE `calculation`.`zh_rpt_archive_encryption` 
+ADD COLUMN `business_id` VARCHAR(45) NULL COMMENT '有其他业务情况,统一在这里标识(类uuid),要结合stage_id来看,如stage_id > 0,则是标段和期,< 0则是其他业务,如 -300 -> 变更令;-301 - 变更方案;-302 - 变更立项 -303 - 变更申请' AFTER `stage_id`,
+ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`,
+ADD INDEX `PRJ_STG_BZ` (`prj_id` ASC, `stage_id` ASC, `business_id` ASC);
+;