Browse Source

导出Excel不显示审核意见及时间问题

TonyKang 4 years ago
parent
commit
7b0c81e169
2 changed files with 118 additions and 0 deletions
  1. 115 0
      app/controller/report_controller.js
  2. 3 0
      app/reports/util/rpt_excel_util.js

+ 115 - 0
app/controller/report_controller.js

@@ -434,6 +434,10 @@ module.exports = app => {
                     );
                 });
             }
+            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 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);
@@ -463,6 +467,8 @@ module.exports = app => {
                 }
                 // console.log('roleRel.rel_content: ' + roleRel.rel_content);
                 // fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/testBuiltPageResult.jsp');
+                mergeSignAudit(pageRstArr[idx], roleRel, stgAudit);
+                mergeSignDate(pageRstArr[idx], params.stage_id, roleRel, stgAudit, stgAuditForOrg, stageList);
                 runnableRst.push(getExcelByPageData(pageRstArr[idx], params.rpt_names[idx], roleRel));
             }
             // fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/计量导出pageArr.js');
@@ -486,6 +492,10 @@ module.exports = app => {
                 });
             }
             const roleRelArr = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
+            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 pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             for (const pageRst of pageRstArr) {
                 for (const page of pageRst.items) {
@@ -529,6 +539,8 @@ module.exports = app => {
                 for (const roleR of roleRelArr) {
                     if (roleR.rpt_id === params.rpt_ids[idx]) {
                         roleRel = JSON.parse(roleR.rel_content);
+                        mergeSignAudit(pageRstArr[idx], roleRel, stgAudit);
+                        mergeSignDate(pageRstArr[idx], params.stage_id, roleRel, stgAudit, stgAuditForOrg, stageList);
                         // 这里要做些电子签名的signature_name转换,以防重名
                         reAssignSignatureName(pageRstArr[idx], roleRel, params.rpt_names[idx]);
                         rptRoleRelArr = rptRoleRelArr.concat(roleRel);
@@ -1227,3 +1239,106 @@ async function createExportRequestJob(ctx) {
         }
     }
 }
+
+function mergeSignAudit(pageData, currRoleRelList, currAuditList) {
+    for (const page of pageData.items) {
+        if (page.signature_audit_cells) {
+            for (const sCell of page.signature_audit_cells) {
+                sCell.Value = ''; // 这里要先清除原有信息
+                for (const role_rel of currRoleRelList) {
+                    if (sCell.signature_name === role_rel.signature_name + '_审核意见') {
+                        let preDate = '';
+                        sCell.Value = '同意'; // 只有选择了签名的,才需要初始化一个默认的意见(之前的逻辑在有多个签名,哪怕只选择了一个,其他的意见都会有默认意见)
+                        for (const audit_rel of currAuditList) {
+                            if (role_rel.acc_id === audit_rel.aid) {
+                                if (audit_rel.end_time > preDate && audit_rel.status === 3) {
+                                    sCell.Value = audit_rel.opinion;
+                                    preDate = audit_rel.end_time;
+                                }
+                                // 不能break,实际会有多个审核意见,以最后一个为准
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+    }
+}
+
+function mergeSignDate(pageData, current_stage_id, currRoleRelList, STAGE_AUDIT, STAGE_AUDIT_ORG, STAGE_LIST) {
+    if (currRoleRelList && currRoleRelList.length > 0 && STAGE_AUDIT && STAGE_AUDIT.length > 0) {
+        for (let rridx = 0; rridx < currRoleRelList.length; rridx++) {
+            const role_rel = currRoleRelList[rridx];
+            if (role_rel.sign_date === undefined || role_rel.sign_date === null || role_rel.sign_date === '') {
+                const dftDate = _getSignDateByAllScenarios(role_rel.acc_id, current_stage_id, STAGE_AUDIT, STAGE_AUDIT_ORG, STAGE_LIST);
+                role_rel.sign_date = dftDate;
+            }
+        }
+    }
+    for (const page of pageData.items) {
+        if (page.signature_date_cells) {
+            for (const sCell of page.signature_date_cells) {
+                sCell.Value = _getSignDateDftName();
+                for (const role_rel of currRoleRelList) {
+                    if (sCell.signature_name === role_rel.signature_name + '_签字日期') {
+                        if (role_rel.sign_date !== '') {
+                            if (typeof role_rel.sign_date === 'string') {
+                                role_rel.sign_date = new Date(role_rel.sign_date);
+                            }
+                            sCell.Value = role_rel.sign_date.Format(role_rel.sign_date_format);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+    }
+}
+
+function _getSignDateByAllScenarios(userAccId, current_stage_id, STAGE_AUDIT, STAGE_AUDIT_ORG, STAGE_LIST) {
+    let rst = '';
+    let hasAudit = false;
+    for (const stg_audit of STAGE_AUDIT) {
+        if (stg_audit.aid === userAccId) {
+            hasAudit = true;
+            if (stg_audit.status === 3) {
+                rst = stg_audit.end_time;
+            } else {
+                rst = '';
+            }
+            // break; //因为实际业务中会有反复,所以就不break了,一直判断,以最后一个为准
+        }
+    }
+    let isOrgRpt = false;
+    for (const stg of STAGE_LIST) {
+        if (stg.id === current_stage_id) {
+            if (stg.user_id === userAccId) {
+                isOrgRpt = true;
+            }
+            break;
+        }
+    }
+    if (isOrgRpt && !hasAudit && STAGE_AUDIT_ORG && STAGE_AUDIT_ORG.length > 0) {
+        if (STAGE_AUDIT_ORG[0].begin_time && STAGE_AUDIT_ORG[0].begin_time !== '' && STAGE_AUDIT_ORG[0].begin_time.length > 20) {
+            rst = STAGE_AUDIT_ORG[0].begin_time;
+        }
+    }
+    if (!isOrgRpt && !hasAudit) {
+        // 非审批流程人员以及非原报,则显示期截至时间
+        for (const stg of STAGE_LIST) {
+            if (stg.id === current_stage_id && stg.period) {
+                const period = stg.period.split(' ~ ');
+                if (period.length === 2) {
+                    rst = period[1];
+                }
+            }
+        }
+    }
+    return rst;
+}
+
+function _getSignDateDftName() {
+    return '    年  月  日';
+}
+

+ 3 - 0
app/reports/util/rpt_excel_util.js

@@ -918,6 +918,9 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
             self_create_cell(theShtData[JV.PROP_CELLS], rows, theYPos);
             self_create_cell(theShtData[JV.PROP_SIGNATURE_DATE_CELLS], rows, theYPos);
             self_create_cell(theShtData[JV.PROP_SIGNATURE_AUDIT_CELLS], rows, theYPos);
+            // fsUtil.writeObjToFile(newPageData, 'D:/GitHome/ConstructionOperation/tmp/combinedHeader.js');
+            console.log('theShtData[JV.PROP_SIGNATURE_AUDIT_CELLS]: ');
+            console.log(theShtData[JV.PROP_SIGNATURE_AUDIT_CELLS]);
 
             // 3. then fill up rst
             for (let i = 0; i < rows.length; i++) {