Tony Kang 2 سال پیش
والد
کامیت
f4047156da
2فایلهای تغییر یافته به همراه110 افزوده شده و 64 حذف شده
  1. 97 64
      app/controller/report_controller.js
  2. 13 0
      app/public/report/js/rpt_signature.js

+ 97 - 64
app/controller/report_controller.js

@@ -432,20 +432,21 @@ module.exports = app => {
             const roleRel = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id, params.stage_id); // 新需求中,允许在非审核状态下设置签名
             const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
             const stgAuditForOrg = await ctx.service.stageAudit.getStageAudit(params.stage_id, 1);
+            const stageList = await ctx.service.stage.getValidStagesShort(params.tender_id);
             // console.log('after role stage!');
             // console.log(roleRel);
-            mergeStampSignature(ctx, params.stage_status, pageRst, roleRel[0]);
-            mergeTextSignature(params.isTextSignature, params.stage_status, pageRst, roleRel[0]);
-            await encodeSignatureDataUri(roleRel, this.app.baseDir);
-            if (params.getPicFlag) {
-                await encodeDummySignatureDataUri(pageRst, this.app.baseDir); // 注意草图数据量问题!
-            }
             const stageFlow = await ctx.service.stageAudit.getAuditGroupByListWithOwner(params.stage_id, params.stage_times);
             stageFlow.forEach(x => {
                 if (!x) return;
                 x.visible = (!ctx.session.sessionUser.is_admin && ctx.session.sessionProject.page_show.individualSign === 1)
                     ? x.aid === ctx.session.sessionUser.accountId : true;
             });
+            mergeStampSignature(ctx, params.stage_status, pageRst, roleRel[0], null, stgAudit, stageList);
+            mergeTextSignature(params.isTextSignature, params.stage_status, pageRst, roleRel[0], stgAudit, stageFlow);
+            await encodeSignatureDataUri(roleRel, this.app.baseDir);
+            if (params.getPicFlag) {
+                await encodeDummySignatureDataUri(pageRst, this.app.baseDir); // 注意草图数据量问题!
+            }
 
             // console.log('encodeSignatureDataUri!');
             // fsUtil.writeObjToFile(pageRst, 'D:/GitHome/Temp/testBuiltPageResult2.js');
@@ -535,7 +536,8 @@ module.exports = app => {
             });
             // console.log('roleRel: ');
             // console.log(roleRel);
-            mergeStampSignature(ctx, params.stage_status, pageRstArr, roleRel, params.rpt_ids);
+            const stageList = await ctx.service.stage.getValidStagesShort(params.tender_id);
+            mergeStampSignature(ctx, params.stage_status, pageRstArr, roleRel, params.rpt_ids, stgAudit, stageList);
             mergeTextSignature(params.isTextSignature, params.stage_status, pageRstArr, roleRel, params.rpt_ids);
 
             await encodeSignatureDataUri(roleRel, this.app.baseDir);
@@ -580,9 +582,11 @@ module.exports = app => {
                     );
                 });
             }
-            const stgAudit = (params.stage_status === 3) ? (await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times)) : [];
+            // const stgAudit = (params.stage_status === 3) ? (await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times)) : [];
+            const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
             const stgAuditForOrg = (params.stage_status === 3) ? (await ctx.service.stageAudit.getStageAudit(params.stage_id, 1)) : [];
-            const stageList = (params.stage_status === 3) ? (await ctx.service.stage.getValidStagesShort(params.tender_id)) : [];
+            // const stageList = (params.stage_status === 3) ? (await ctx.service.stage.getValidStagesShort(params.tender_id)) : [];
+            const stageList = await ctx.service.stage.getValidStagesShort(params.tender_id);
 
             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)) : [];
@@ -604,7 +608,7 @@ module.exports = app => {
                 }
             }
 
-            mergeStampSignature(ctx, params.stage_status, pageRstArr, roleRelArr, params.rpt_ids);
+            mergeStampSignature(ctx, params.stage_status, pageRstArr, roleRelArr, params.rpt_ids, stgAudit, stageList);
             mergeTextSignature(params.isTextSignature, params.stage_status, pageRstArr, roleRelArr, params.rpt_ids);
 
             await this.ctx.helper.recursiveMkdirSync(baseDir + '/app/public/download');
@@ -772,9 +776,9 @@ module.exports = app => {
             const roleRelArr = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
             // console.log(`baseDir: ${baseDir}`);
             // fsUtil.writeObjToFile(roleRelArr, 'D:/GitHome/temp/签名信息.js');
-            const stgAudit = (params.stage_status === 3) ? (await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times)) : [];
-            const stgAuditForOrg = (params.stage_status === 3) ? (await ctx.service.stageAudit.getStageAudit(params.stage_id, 1)) : [];
-            const stageList = (params.stage_status === 3) ? (await ctx.service.stage.getValidStagesShort(params.tender_id)) : [];
+            const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
+            const stgAuditForOrg = await ctx.service.stageAudit.getStageAudit(params.stage_id, 1);
+            const stageList = await ctx.service.stage.getValidStagesShort(params.tender_id);
 
             const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             // fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/pageRstArrForExcel.js');
@@ -792,7 +796,7 @@ module.exports = app => {
                     waterMarkStr = await getWatermarkPicData(pageRstArr[0], this.app.baseDir);
                 }
             }
-            mergeStampSignature(ctx, params.stage_status, pageRstArr, roleRelArr, params.rpt_ids);
+            mergeStampSignature(ctx, params.stage_status, pageRstArr, roleRelArr, params.rpt_ids, stgAudit, stageList);
             mergeTextSignature(params.isTextSignature, params.stage_status, pageRstArr, roleRelArr, params.rpt_ids);
             await this.ctx.helper.recursiveMkdirSync(this.app.baseDir + '/app/public/download');
             const runnableRst = [];
@@ -1553,8 +1557,37 @@ function mergeTextSignature(isTxtSignature, status, pageData, singleRoleRel, rpt
     }
 }
 
+function _chkIfAudit(role_rel, STAGE_AUDIT, STAGE_LIST) {
+    let rst = false;
+    for (const stg_audit of STAGE_AUDIT) {
+        if (role_rel.acc_id === stg_audit.aid) {
+            if (stg_audit.status === 3) {
+                rst = true;
+            } else {
+                rst = false;
+            }
+            // break; //因为实际业务中会有反复,所以就不break了,一直判断,以最后一个为准
+        }
+    }
+    if (!rst) {
+        // 还有原报需要检测
+        for (const stg_ort_rpt of STAGE_LIST) {
+            if (role_rel.acc_id === stg_ort_rpt.aid) {
+                if (stg_ort_rpt.status === 3) {
+                    rst = true;
+                } else {
+                    rst = false;
+                }
+                // break; //因为实际业务中会有反复,所以就不break了,一直判断,以最后一个为准
+            }
+        }
+    }
+    // rst = true; //测试,未来将屏蔽
+    return rst;
+}
+
 // 因机制问题,此方法必须在mergeTextSignature之前调用
-async function mergeStampSignature(ctx, status, pageData, singleRoleRel, rpt_ids) {
+async function mergeStampSignature(ctx, status, pageData, singleRoleRel, rpt_ids, stgAudit, stageList) {
     const dupPicPaths = [];
     const _getMaxRect = function(page) {
         const rect = [100000000, 100000000, 0, 0];
@@ -1631,7 +1664,7 @@ async function mergeStampSignature(ctx, status, pageData, singleRoleRel, rpt_ids
         return rst;
 
     };
-    const _mergeSingleStamp = async function(_page, _roleRelList) {
+    const _mergeSingleStamp = async function(_page, _roleRelList, checkAudit = false) {
         let roleRelContent = [];
         if (_roleRelList && _roleRelList.rel_content !== null && _roleRelList.rel_content !== undefined && _roleRelList.rel_content !== '') {
             roleRelContent = JSON.parse(_roleRelList.rel_content);
@@ -1644,40 +1677,42 @@ async function mergeStampSignature(ctx, status, pageData, singleRoleRel, rpt_ids
                     const sCell = page.signature_cells[scIdx];
                     for (const role_rel of roleRelContent) {
                         if (sCell.signature_name === role_rel.signature_name) {
-                            if (Array.isArray(role_rel.sign_output) && role_rel.sign_output.length > 0) {
-                                for (const signType of role_rel.sign_output) {
-                                    switch (signType) {
-                                        case COMPANY_SIGN_STR:
-                                        case PRIVATE_SIGN_STR:
-                                            // 创建一个新的cell
-                                            let stampPath = (signType === COMPANY_SIGN_STR) ? role_rel.company_stamp_path : role_rel.private_stamp_path;
-                                            stampPath = ctx.app.config.fujianOssPath + stampPath;
-                                            if (dupPicPaths.indexOf(stampPath) < 0) {
-                                                dupPicPaths.push(stampPath);
-                                                // await _chkRawPicSizeOSS(ctx, stampPath);
-                                            }
-                                            // 保存在签字信息中的签章信息
-                                            let signatureArea;
-                                            if (role_rel.areaData && role_rel.areaData[signType]) {
-                                                signatureArea = role_rel.areaData[signType];
-                                            }
-
-                                            const newStampCell = {
-                                                signature_name: JV.SIGNATURE_NAME_DUMMY,
-                                                control: sCell.control,
-                                                style: sCell.style,
-                                                path: stampPath,
-                                                isStamp: true,
-                                                maxRect,
-                                                orgArea: sCell.area,
-                                                area: signatureArea || createStampArea(sCell, _page[JV.NODE_CONTROL_COLLECTION], maxRect), // 有签章信息就直接取,没有的话就走原来的逻辑
-                                                signatureName: role_rel.signature_name, // 节点名称
-                                                signType, // 签章信息
-                                                isSaveSignature: !!signatureArea, // 是否有签章位置信息
-                                            };
-                                            newStampCells.push(newStampCell);
-                                            break;
-                                        default: break;
+                            if (!checkAudit || _chkIfAudit(role_rel, stgAudit, stageList)) {
+                                if (Array.isArray(role_rel.sign_output) && role_rel.sign_output.length > 0) {
+                                    for (const signType of role_rel.sign_output) {
+                                        switch (signType) {
+                                            case COMPANY_SIGN_STR:
+                                            case PRIVATE_SIGN_STR:
+                                                // 创建一个新的cell
+                                                let stampPath = (signType === COMPANY_SIGN_STR) ? role_rel.company_stamp_path : role_rel.private_stamp_path;
+                                                stampPath = ctx.app.config.fujianOssPath + stampPath;
+                                                if (dupPicPaths.indexOf(stampPath) < 0) {
+                                                    dupPicPaths.push(stampPath);
+                                                    // await _chkRawPicSizeOSS(ctx, stampPath);
+                                                }
+                                                // 保存在签字信息中的签章信息
+                                                let signatureArea;
+                                                if (role_rel.areaData && role_rel.areaData[signType]) {
+                                                    signatureArea = role_rel.areaData[signType];
+                                                }
+
+                                                const newStampCell = {
+                                                    signature_name: JV.SIGNATURE_NAME_DUMMY,
+                                                    control: sCell.control,
+                                                    style: sCell.style,
+                                                    path: stampPath,
+                                                    isStamp: true,
+                                                    maxRect,
+                                                    orgArea: sCell.area,
+                                                    area: signatureArea || createStampArea(sCell, _page[JV.NODE_CONTROL_COLLECTION], maxRect), // 有签章信息就直接取,没有的话就走原来的逻辑
+                                                    signatureName: role_rel.signature_name, // 节点名称
+                                                    signType, // 签章信息
+                                                    isSaveSignature: !!signatureArea, // 是否有签章位置信息
+                                                };
+                                                newStampCells.push(newStampCell);
+                                                break;
+                                            default: break;
+                                        }
                                     }
                                 }
                             }
@@ -1690,21 +1725,19 @@ async function mergeStampSignature(ctx, status, pageData, singleRoleRel, rpt_ids
             }
         }
     };
-    if (status === 3) {
-        if (pageData instanceof Array) {
-            pageData.forEach((dtlPage, index) => {
-                let dftRolRel = [];
-                const rpt_id = rpt_ids[index];
-                for (const roleRel of singleRoleRel) {
-                    if (roleRel.rpt_id === rpt_id) {
-                        dftRolRel = roleRel;
-                    }
+    if (pageData instanceof Array) {
+        pageData.forEach((dtlPage, index) => {
+            let dftRolRel = [];
+            const rpt_id = rpt_ids[index];
+            for (const roleRel of singleRoleRel) {
+                if (roleRel.rpt_id === rpt_id) {
+                    dftRolRel = roleRel;
                 }
-                _mergeSingleStamp(dtlPage, dftRolRel);
-            });
-        } else {
-            _mergeSingleStamp(pageData, singleRoleRel);
-        }
+            }
+            _mergeSingleStamp(dtlPage, dftRolRel, status !== 3);
+        });
+    } else {
+        _mergeSingleStamp(pageData, singleRoleRel, status !== 3);
     }
 }
 

+ 13 - 0
app/public/report/js/rpt_signature.js

@@ -861,6 +861,19 @@ let rptSignatureHelper = {
                 // break; //因为实际业务中会有反复,所以就不break了,一直判断,以最后一个为准
             }
         }
+        if (!rst) {
+            // 还有原报需要检测
+            for (const stg_ort_rpt of STAGE_LIST) {
+                if (role_rel.acc_id === stg_ort_rpt.aid) {
+                    if (stg_ort_rpt.status === 3) {
+                        rst = true;
+                    } else {
+                        rst = false;
+                    }
+                    break;
+                }
+            }
+        }
         // rst = true; //测试,未来将屏蔽
         return rst;
     },