xuzhancheng 1 日 前
コミット
be8de7c1b8

+ 9 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/ExternalOAController.java

@@ -3,6 +3,7 @@ package cn.start.tz.module.pressure2.controller.admin.externalOA;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.module.pressure2.controller.admin.externalOA.vo.OATodoCountVO;
 import cn.start.tz.module.pressure2.controller.admin.externalOA.vo.ReturnFlowVO;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.boilertaskorderitemreport.BoilerTaskOrderItemReportService;
@@ -201,4 +202,12 @@ public class ExternalOAController {
         }
     }
 
+    /**
+     * 获取OA待办中锅炉/管道的审核、审批数量统计(独立接口,避免阻塞首页主查询)
+     */
+    @GetMapping("/getOATodoCount")
+    public CommonResult<OATodoCountVO> getOATodoCount() {
+        return success(externalOAService.getOATodoCount());
+    }
+
 }

+ 29 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/vo/OATodoCountVO.java

@@ -0,0 +1,29 @@
+package cn.start.tz.module.pressure2.controller.admin.externalOA.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * OA待办数量统计 VO
+ * 用于首页展示锅炉/管道的审核、审批待办数量
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OATodoCountVO {
+
+    /** 锅炉审核数量 */
+    private Integer boilerCheckCount = 0;
+
+    /** 锅炉审批数量 */
+    private Integer boilerRatifyCount = 0;
+
+    /** 管道审核数量 */
+    private Integer pipeCheckCount = 0;
+
+    /** 管道审批数量 */
+    private Integer pipeRatifyCount = 0;
+}

+ 34 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java

@@ -4085,14 +4085,27 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         log.info("发起oa审核");
         try {
             ExternalOACreateFlowRes externalOAFlow = createExternalOAFlow(taskOrderItemReportDO,updateObj);
+            
+            // 判断是否是重新发送(已有summaryId)
+            boolean isResend = taskOrderItemReportDO.getSummaryId() != null && !taskOrderItemReportDO.getSummaryId().isEmpty();
+            
+            // 如果是重新发送,且返回code=0,即使data为null也认为成功
+            if (isResend && "0".equals(externalOAFlow.getCode())) {
+                log.info("OA流程重新发送成功,使用原有summaryId: {}", taskOrderItemReportDO.getSummaryId());
+                // 保持原有的summaryId不变,不需要更新
+                return;
+            }
+            
+            // 首次发送,需要获取新的summaryId
             if (externalOAFlow.getData() == null){
-                log.error(externalOAFlow.getMessage());
+                log.error("OA流程发起失败: {}", externalOAFlow.getMessage());
+                throw new ServiceException(500, "OA流程发起失败: " + externalOAFlow.getMessage());
             }else {
                 updateObj.setSummaryId(externalOAFlow.getData().getSummaryId());
                 taskOrderItemReportMapper.updateById(updateObj);
             }
         } catch (Exception e) {
-            log.error("发起oa审核异常,OA流程已发起但响应解析失败,不中断业务流程", e);
+//            log.error("发起oa审核异常,OA流程已发起但响应解析失败,不中断业务流程", e);
             throw new RuntimeException("发起oa审核异常", e);
         }
     }
@@ -4113,19 +4126,34 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         EquipBoilerDO equipBoilerDO = equipBoilerMapper.selectById(equipId);
         ExternalOACreateFlowReq externalOACreateFlowReq = new ExternalOACreateFlowReq();
         ExternalOACreateFlowBodyDataReq.FormMain formmain_0042 = new ExternalOACreateFlowBodyDataReq.FormMain();
+        ExternalOACreateFlowBodyDataReq.FormMain_1698 formMain_1698 = new ExternalOACreateFlowBodyDataReq.FormMain_1698();
         formmain_0042.setContractno(boilerTaskOrderDO.getUnitName());
+        formMain_1698.setUnit(boilerTaskOrderDO.getUnitName());
+        String prepareId = taskOrderItemReportDO.getPrepareId();
+        if (prepareId != null) {
+            AdminUserRespDTO userRespDTO = adminUserApi.getUser(prepareId).getData();
+            if (userRespDTO != null) {
+                formMain_1698.setPrepare(userRespDTO.getEmployeeNo());
+            }
+        }
         formmain_0042.setUnitname(taskOrderItemReportDO.getReportNo());
+        formMain_1698.setReportNo(taskOrderItemReportDO.getReportNo());
+        formMain_1698.setReportName(taskOrderItemReportDO.getReportName());
         formmain_0042.setDeptName("锅炉");
+        formMain_1698.setEquipType("锅炉");
         formmain_0042.setReportnum(taskOrderItemReportDO.getReportNo().substring(2, 4));
+        formMain_1698.setProjectNo(taskOrderItemReportDO.getReportNo().substring(2, 4));
         //  设备类型是锅炉,设备小类非电站锅炉,且关联部门是电站锅炉检验部的就传1,否则传0
         if (formmain_0042.getReportnum().equals("06")){
             DeptRespDTO data = deptApi.getDept(equipBoilerDO.getRelatedDepartment()).getCheckedData();
             formmain_0042.setProperty(!equipBoilerDO.getType().equals("1") && data.getName().equals("锅炉检验部") ? "1" : "0");
+            formMain_1698.setProperty(!equipBoilerDO.getType().equals("1") && data.getName().equals("锅炉检验部") ? "1" : "0");
         }
         // 独审报告
         if (formmain_0042.getReportnum().equals("39")){
             BoilerConnectRecordReportDO boilerConnectRecordReportDO = boilerConnectRecordReportMapper.selectById(taskOrderItemReportDO.getProjectId());
             formmain_0042.setProperty(boilerConnectRecordReportDO.getApprovalCode());
+            formMain_1698.setProperty(boilerConnectRecordReportDO.getApprovalCode());
 
         }
         formmain_0042.setBeginDate(boilerTaskOrderDO.getRemark());
@@ -4154,6 +4182,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr();
             externalOACreateFlowBodyAttReq.setSubReference(snowflakeNextIdStr);
             formmain_0042.setTotalFee(snowflakeNextIdStr);
+            formMain_1698.setRecordFile(snowflakeNextIdStr);
 
             thirdAttachments.add(externalOACreateFlowBodyAttReq);
         }
@@ -4165,6 +4194,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr();
             externalOACreateFlowBodyAttReq.setSubReference(snowflakeNextIdStr);
             formmain_0042.setDiscount(snowflakeNextIdStr);
+            formMain_1698.setReportFile(snowflakeNextIdStr);
             thirdAttachments.add(externalOACreateFlowBodyAttReq);
         }
         externalOACreateFlowReq.setData(externalOACreateFlowBodyDataReq);
@@ -4172,12 +4202,14 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         String auditor = updateObj.getAuditor();
         AdminUserRespDTO checkedData = adminUserApi.getUserByEmployeeNo(auditor).getCheckedData();
         formmain_0042.setApproval(checkedData.getEmployeeNo());
+        formMain_1698.setApproval(checkedData.getEmployeeNo());
         String loginUserId = getLoginUserId();
         String employeeNo = adminUserApi.getUser(loginUserId).getCheckedData().getEmployeeNo();
         if (!enablProd){
             employeeNo = "300801";
         }
         externalOACreateFlowBodyDataReq.setFormmain_0042(formmain_0042);
+        externalOACreateFlowBodyDataReq.setFormmain_1698(formMain_1698);
         return externalOAService.createExternalOAFlow(externalOACreateFlowReq,employeeNo);
 //        return externalOAService.createExternalOAFlow(externalOACreateFlowReq,checkedData.getUsername());
     }

+ 8 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java

@@ -854,11 +854,14 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         taskOrderItemReportMapper.updateById(updateObj);
 
         // 流转记录
-        BoilerTaskOrderItemReportRecordDO taskOrderItemReportRecordDO = new BoilerTaskOrderItemReportRecordDO();
-        taskOrderItemReportRecordDO.setReportId(id);
-        taskOrderItemReportRecordDO.setProcess(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
-        taskOrderItemReportRecordDO.setResult(100);
-        boilerTaskOrderItemReportRecordMapper.insert(taskOrderItemReportRecordDO);
+//        BoilerTaskOrderItemReportRecordDO taskOrderItemReportRecordDO = new BoilerTaskOrderItemReportRecordDO();
+//        taskOrderItemReportRecordDO.setReportId(id);
+//        taskOrderItemReportRecordDO.setProcess(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
+//        taskOrderItemReportRecordDO.setResult(100);
+//        taskOrderItemReportRecordDO.setRemark("报告审批完成");
+//        taskOrderItemReportRecordDO.setCreateTime(LocalDateTime.now());
+//        taskOrderItemReportRecordDO.setCreator(getLoginUserId());
+//        boilerTaskOrderItemReportRecordMapper.insert(taskOrderItemReportRecordDO);
 
 //        TaskOrderItemReportDO taskOrderItemReportDO = taskOrderItemReportMapper.selectById(orderItemRatifyVO.getId());
         if (taskOrderItemReportDO.getReportType() != null && taskOrderItemReportDO.getReportType() == 100) {

+ 57 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAServiceImpl.java

@@ -9,7 +9,11 @@ import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.security.core.LoginUser;
 import cn.start.tz.module.grape.city.api.GrapeCityApi;
 import cn.start.tz.module.infra.api.file.FileApi;
+import cn.start.tz.module.pressure2.controller.admin.externalOA.vo.OATodoCountVO;
 import cn.start.tz.module.pressure2.controller.admin.externalOA.vo.ReturnFlowVO;
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
+import cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum;
 import cn.start.tz.module.pressure2.service.boilertaskorderitemreport.BoilerTaskOrderItemReportService;
 import cn.start.tz.module.pressure2.service.dynamictbval.DynamicTbValService;
 import cn.start.tz.module.pressure2.service.externalOA.vo.*;
@@ -48,6 +52,8 @@ public class ExternalOAServiceImpl implements ExternalOAService {
 
     @Value("${external.oa.rest.loginName}")
     private String oaLoginName;
+    @Value("${external.oa.rest.enableProd}")
+    private String enableProd;
 
     @Resource
     private GrapeCityApi grapeCityApi;
@@ -237,6 +243,11 @@ public class ExternalOAServiceImpl implements ExternalOAService {
         }else {
             req.setSenderLoginName(this.oaLoginName);
         }
+        if (enableProd != null && enableProd.equals("true")){
+            req.getData().setFormmain_0042(null);
+        }else {
+            req.getData().setFormmain_1698(null);
+        }
         req.setTemplateCode("jianwureport");
         req.setDraft("0");
         log.info("发起OA流程参数:{}", JSON.toJSONString(req));
@@ -568,4 +579,50 @@ public class ExternalOAServiceImpl implements ExternalOAService {
             throw new RuntimeException("获取OA待办事项列表失败:" + e.getMessage(), e);
         }
     }
+
+    @Override
+    public OATodoCountVO getOATodoCount() {
+        // 1. 从OA获取当前用户所有待办事项的summaryId列表
+        List<Long> summaryIds = getAffairSummaryList();
+        if (summaryIds == null || summaryIds.isEmpty()) {
+            log.info("OA待办列表为空,返回全0统计");
+            return new OATodoCountVO();
+        }
+
+        // summaryId在DO中是String类型,转为String列表
+        List<String> summaryIdStrs = summaryIds.stream().map(String::valueOf).toList();
+
+        try {
+            // 2. 按summaryId和taskStatus分别统计锅炉、管道的审核(600)和审批(700)数量
+            int boilerCheckCount = boilerTaskOrderItemReportService.lambdaQuery()
+                    .in(BoilerTaskOrderItemReportDO::getSummaryId, summaryIdStrs)
+                    .eq(BoilerTaskOrderItemReportDO::getTaskStatus, TaskOrderStatusEnum.REPORT_APPROVAL.getStatus())
+                    .count().intValue();
+
+            int boilerRatifyCount = boilerTaskOrderItemReportService.lambdaQuery()
+                    .in(BoilerTaskOrderItemReportDO::getSummaryId, summaryIdStrs)
+                    .eq(BoilerTaskOrderItemReportDO::getTaskStatus, TaskOrderStatusEnum.REPORT_RATIFY.getStatus())
+                    .count().intValue();
+
+            int pipeCheckCount = pipeTaskOrderItemReportService.lambdaQuery()
+                    .in(PipeTaskOrderItemReportDO::getSummaryId, summaryIdStrs)
+                    .eq(PipeTaskOrderItemReportDO::getTaskStatus, TaskOrderStatusEnum.REPORT_APPROVAL.getStatus())
+                    .count().intValue();
+
+            int pipeRatifyCount = pipeTaskOrderItemReportService.lambdaQuery()
+                    .in(PipeTaskOrderItemReportDO::getSummaryId, summaryIdStrs)
+                    .eq(PipeTaskOrderItemReportDO::getTaskStatus, TaskOrderStatusEnum.REPORT_RATIFY.getStatus())
+                    .count().intValue();
+
+            return OATodoCountVO.builder()
+                    .boilerCheckCount(boilerCheckCount)
+                    .boilerRatifyCount(boilerRatifyCount)
+                    .pipeCheckCount(pipeCheckCount)
+                    .pipeRatifyCount(pipeRatifyCount)
+                    .build();
+        } catch (Exception e) {
+            log.error("统计OA待办审核/审批数量异常", e);
+            return new OATodoCountVO();
+        }
+    }
 }

+ 14 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOACreateFlowBodyDataReq.java

@@ -7,6 +7,7 @@ import java.util.Map;
 @Data
 public class ExternalOACreateFlowBodyDataReq {
     private FormMain formmain_0042;
+    private FormMain_1698 formmain_1698;
 
     @Data
     public static class FormMain {
@@ -20,4 +21,17 @@ public class ExternalOACreateFlowBodyDataReq {
         private String property;
         private String approval;
     }
+    @Data
+    public static class FormMain_1698 {
+        private String prepare;
+        private String unit;
+        private String reportNo;
+        private String equipType;
+        private String reportName;
+        private String recordFile;
+        private String reportFile;
+        private String projectNo;
+        private String property;
+        private String approval;
+    }
 }

+ 33 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java

@@ -3248,8 +3248,21 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         log.info("发起oa审核");
         try {
             ExternalOACreateFlowRes externalOAFlow = createExternalOAFlow(taskOrderItemReportDO, updateObj);
+            
+            // 判断是否是重新发送(已有summaryId)
+            boolean isResend = taskOrderItemReportDO.getSummaryId() != null && !taskOrderItemReportDO.getSummaryId().isEmpty();
+            
+            // 如果是重新发送,且返回code=0,即使data为null也认为成功
+            if (isResend && "0".equals(externalOAFlow.getCode())) {
+                log.info("OA流程重新发送成功,使用原有summaryId: {}", taskOrderItemReportDO.getSummaryId());
+                // 保持原有的summaryId不变,不需要更新
+                return;
+            }
+            
+            // 首次发送,需要获取新的summaryId
             if (externalOAFlow.getData() == null) {
                 log.error(externalOAFlow.getMessage());
+                throw new RuntimeException("发起oa审核异常,"+ externalOAFlow.getMessage());
             } else {
                 updateObj.setSummaryId(externalOAFlow.getData().getSummaryId());
                 taskOrderItemReportMapper.updateById(updateObj);
@@ -3284,15 +3297,29 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         EquipPipeDetailDO equipPipeDetailDO = equipPipeDetailMapper.selectById(equipId);
         ExternalOACreateFlowReq externalOACreateFlowReq = new ExternalOACreateFlowReq();
         ExternalOACreateFlowBodyDataReq.FormMain formmain_0042 = new ExternalOACreateFlowBodyDataReq.FormMain();
+        ExternalOACreateFlowBodyDataReq.FormMain_1698 formMain_1698 = new ExternalOACreateFlowBodyDataReq.FormMain_1698();
         formmain_0042.setContractno(pipeTaskOrderDO.getUnitName());
+        formMain_1698.setUnit(pipeTaskOrderDO.getUnitName());
+        String prepareId = taskOrderItemReportDO.getPrepareId();
+        if (prepareId != null) {
+            AdminUserRespDTO userRespDTO = adminUserApi.getUser(prepareId).getData();
+            if (userRespDTO != null) {
+                formMain_1698.setPrepare(userRespDTO.getEmployeeNo());
+            }
+        }
         formmain_0042.setUnitname(taskOrderItemReportDO.getReportNo());
+        formMain_1698.setReportNo(taskOrderItemReportDO.getReportNo());
+        formMain_1698.setReportName(taskOrderItemReportDO.getReportName());
         formmain_0042.setDeptName("管道");
-        formmain_0042.setBeginDate(pipeTaskOrderDO.getRemark());
+        formMain_1698.setEquipType("管道");
         formmain_0042.setReportnum(taskOrderItemReportDO.getReportNo().substring(2, 4));
+        formMain_1698.setProjectNo(taskOrderItemReportDO.getReportNo().substring(2, 4));
         // 如果注册代码是81开头的,就传1,否则传0
         if (formmain_0042.getReportnum().equals("22")){
             formmain_0042.setProperty(equipPipeDetailDO.getPipeRegCode().startsWith("81") ? "1" : "0");
+            formMain_1698.setProperty(equipPipeDetailDO.getPipeRegCode().startsWith("81") ? "1" : "0");
         }
+        formmain_0042.setBeginDate(pipeTaskOrderDO.getRemark());
         ExternalOACreateFlowBodyDataReq externalOACreateFlowBodyDataReq = new ExternalOACreateFlowBodyDataReq();
 
         // 重新发送
@@ -3318,6 +3345,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr();
             externalOACreateFlowBodyAttReq.setSubReference(snowflakeNextIdStr);
             formmain_0042.setTotalFee(snowflakeNextIdStr);
+            formMain_1698.setRecordFile(snowflakeNextIdStr);
+
             thirdAttachments.add(externalOACreateFlowBodyAttReq);
         }
         if (atts2 != null && !atts2.isEmpty()) {
@@ -3328,6 +3357,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr();
             externalOACreateFlowBodyAttReq.setSubReference(snowflakeNextIdStr);
             formmain_0042.setDiscount(snowflakeNextIdStr);
+            formMain_1698.setReportFile(snowflakeNextIdStr);
             thirdAttachments.add(externalOACreateFlowBodyAttReq);
         }
         externalOACreateFlowReq.setData(externalOACreateFlowBodyDataReq);
@@ -3335,12 +3365,14 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         String auditor = updateObj.getAuditor();
         AdminUserRespDTO checkedData = adminUserApi.getUserByEmployeeNo(auditor).getCheckedData();
         formmain_0042.setApproval(checkedData.getEmployeeNo());
+        formMain_1698.setApproval(checkedData.getEmployeeNo());
         String loginUserId = getLoginUserId();
         String employeeNo = adminUserApi.getUser(loginUserId).getCheckedData().getEmployeeNo();
         if (!enablProd){
             employeeNo = "300801";
         }
         externalOACreateFlowBodyDataReq.setFormmain_0042(formmain_0042);
+        externalOACreateFlowBodyDataReq.setFormmain_1698(formMain_1698);
         return externalOAService.createExternalOAFlow(externalOACreateFlowReq,employeeNo);
 //        return null;
     }

+ 7 - 4
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/application-uat.yaml

@@ -160,12 +160,15 @@ feign:
 
 external:
   oa:
-    host: http://192.168.18.115
+    #    host: http://192.168.18.115
+    host: http://192.168.19.68
     rest:
-      userName: flowsend
-      password: 69030b1b-44b7-45d0-aaf3-e73968933642
+      #      userName: flowsend
+      #      password: 69030b1b-44b7-45d0-aaf3-e73968933642
+      userName: restflow
+      password: aefa27bf-518d-42cf-9ae1-84c8fb40552b
       loginName: 300801
-      enableProd: false
+      enableProd: true
     # 定时获取状态
     cron: 0 0 * * * ?
 synchronization: