xuzhancheng 1 周之前
父節點
當前提交
db89a83e3d
共有 16 個文件被更改,包括 257 次插入5 次删除
  1. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/BoilerTaskOrderItemReportController.java
  2. 27 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/ExternalOAController.java
  3. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/PipeTaskOrderItemReportController.java
  4. 1 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  5. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportService.java
  6. 37 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java
  7. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAService.java
  8. 64 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAServiceImpl.java
  9. 8 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOACreateFlowRes.java
  10. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOATokenRes.java
  11. 14 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/OAAffairDataVO.java
  12. 22 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/OAAffairItemVO.java
  13. 10 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/OAGetAffairsResVO.java
  14. 1 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  15. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportService.java
  16. 37 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/BoilerTaskOrderItemReportController.java

@@ -113,4 +113,10 @@ public class BoilerTaskOrderItemReportController {
         return success(true);
     }
 
+    @GetMapping("/updateReportBySummaryId")
+    @Operation(summary = "根据OA流程ID更新单个报告状态")
+    public CommonResult<Boolean> updateReportBySummaryId(@RequestParam("summaryId") String summaryId) {
+        return success(boilerTaskOrderItemReportService.updateReportBySummaryId(summaryId));
+    }
+
 }

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

@@ -16,6 +16,7 @@ import jakarta.annotation.Resource;
 import jakarta.annotation.security.PermitAll;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -30,6 +31,7 @@ import static cn.start.tz.framework.common.pojo.CommonResult.success;
 @RestController
 @RequestMapping("/pressure2/external-oa")
 @Validated
+@Slf4j
 public class ExternalOAController {
 
     @Resource
@@ -157,4 +159,29 @@ public class ExternalOAController {
     public CommonResult<Boolean> returnFlow(ReturnFlowVO returnFlowVO) {
         return externalOAService.returnFlow(returnFlowVO);
     }
+
+    /**
+     * 根据summaryId获取OA待办事项的审批链接
+     *
+     * @param summaryId OA流程ID(必填)
+     * @return 审批链接URL
+     */
+    @GetMapping("/getAffairLink")
+    @PermitAll
+    public CommonResult<String> getAffairLink(@RequestParam("summaryId") String summaryId) {
+        // 参数校验
+        if (summaryId == null || summaryId.trim().isEmpty()) {
+            return CommonResult.error(400, "summaryId不能为空");
+        }
+        try {
+            String link = externalOAService.getAffairLink(summaryId.trim());
+            if (link == null) {
+                return CommonResult.error(404, "未找到summaryId=" + summaryId + "对应的待办事项");
+            }
+            return success(link);
+        } catch (Exception e) {
+            log.error("获取待办事项链接失败,summaryId={}", summaryId, e);
+            return CommonResult.error(500, "获取待办事项链接失败:" + e.getMessage());
+        }
+    }
 }

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/PipeTaskOrderItemReportController.java

@@ -105,4 +105,10 @@ public class PipeTaskOrderItemReportController {
         pipeTaskOrderItemReportService.handleCompletion(id);
         return success(true);
     }
+
+    @GetMapping("/updateReportBySummaryId")
+    @Operation(summary = "根据OA流程ID更新单个报告状态")
+    public CommonResult<Boolean> updateReportBySummaryId(@RequestParam("summaryId") String summaryId) {
+        return success(pipeTaskOrderItemReportService.updateReportBySummaryId(summaryId));
+    }
 }

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

@@ -3731,8 +3731,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         log.info("发起oa审核");
         try {
             ExternalOACreateFlowRes externalOAFlow = createExternalOAFlow(taskOrderItemReportDO,updateObj);
-            JSONObject jsonObject = JSONObject.parseObject(externalOAFlow.getData());
-            updateObj.setSummaryId(jsonObject.getString("summaryId"));
+            updateObj.setSummaryId(externalOAFlow.getData().getSummaryId());
             taskOrderItemReportMapper.updateById(updateObj);
         } catch (Exception e) {
             log.error("发起oa审核异常", e);

+ 7 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportService.java

@@ -96,6 +96,13 @@ public interface BoilerTaskOrderItemReportService extends IService<BoilerTaskOrd
      */
     boolean handleOACancelFlow(String summaryId);
 
+    /**
+     * 根据summaryId更新单个报告状态(从OA查询最新状态并更新本地)
+     * @param summaryId OA流程ID
+     * @return 是否找到并处理了对应的报告
+     */
+    boolean updateReportBySummaryId(String summaryId);
+
     /**
      * 报告办结
      * @param id

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

@@ -394,6 +394,43 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         return true;
     }
 
+    @Override
+    public boolean updateReportBySummaryId(String summaryId) {
+        BoilerTaskOrderItemReportDO report = taskOrderItemReportMapper.selectOne(
+                new LambdaQueryWrapper<BoilerTaskOrderItemReportDO>()
+                        .eq(BoilerTaskOrderItemReportDO::getSummaryId, summaryId));
+        if (report == null) {
+            log.warn("updateReportBySummaryId:未找到summaryId={}对应的锅炉报告", summaryId);
+            return false;
+        }
+
+        log.info("updateReportBySummaryId:开始处理锅炉报告, id={}", report.getId());
+        ExternalOACommentRes externalOAComment = externalOAService.getExternalOAComment(summaryId);
+        if (externalOAComment == null || externalOAComment.getData() == null) {
+            log.warn("updateReportBySummaryId:获取OA评论为空, summaryId={}", summaryId);
+            return false;
+        }
+
+        ExternalOARes oaRes = externalOAComment.getData();
+        // 流程流转记录
+        List<ExternalOACommentInfoRes> comments = oaRes.getComments();
+        if (comments != null && !comments.isEmpty()) {
+            addFlowRecord(report, comments);
+        }
+
+        String state = oaRes.getState();
+        if (state != null) {
+            boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+                    .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+            if ("结束".equals(state) && !isStepBack) {
+                updateReportStatus(report, externalOAComment);
+                log.info("updateReportBySummaryId:锅炉报告状态已更新, id={}", report.getId());
+            }
+        }
+
+        return true;
+    }
+
 
     @Override
     public boolean handleOAReturnFlow(String summaryId, String returnReason) {

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

@@ -53,4 +53,11 @@ public interface ExternalOAService {
      * @return
      */
     CommonResult<Boolean> returnFlow(ReturnFlowVO returnFlowVO);
+
+    /**
+     * 根据summaryId获取OA待办事项的审批链接
+     * @param summaryId OA流程ID
+     * @return 审批链接URL,未找到返回null
+     */
+    String getAffairLink(String summaryId);
 }

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

@@ -29,6 +29,7 @@ import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.io.ByteArrayInputStream;
@@ -65,9 +66,11 @@ public class ExternalOAServiceImpl implements ExternalOAService {
     private DynamicTbValService dynamicTbValService;
 
     @Resource
+    @Lazy
     private BoilerTaskOrderItemReportService boilerTaskOrderItemReportService;
 
     @Resource
+    @Lazy
     private PipeTaskOrderItemReportService pipeTaskOrderItemReportService;
 
     @Value("${tz.fonts-folder-path:}")
@@ -239,4 +242,65 @@ public class ExternalOAServiceImpl implements ExternalOAService {
         log.warn("OA退回流程:未找到summaryId={}对应的报告记录", summaryId);
         return CommonResult.error(500, "未找到对应的报告记录");
     }
+
+    @Override
+    public String getAffairLink(String summaryId) {
+        log.info("获取OA待办事项链接,summaryId={}", summaryId);
+        // 获取OA系统token
+        ExternalOATokenRes tokenRes = this.getExternalOAToken(null);
+        if (tokenRes == null || StringUtils.isBlank(tokenRes.getId())) {
+            log.error("获取OA待办事项链接失败:获取token为空");
+            throw new RuntimeException("获取OA系统token失败");
+        }
+
+        // 构建请求并调用OA获取待办事项列表
+        String url = this.oaHost + "/seeyon/rest/myflow/getAffairs?token=" + tokenRes.getId();
+        Map<String, String> requestBody = new HashMap<>();
+        requestBody.put("memberCode", "300801");
+        requestBody.put("templateCode", "jianwureport");
+        requestBody.put("pageNum", "1");
+        requestBody.put("pageSize", "999");
+
+        log.info("获取OA待办事项请求URL:{},参数:{}", url, JSON.toJSONString(requestBody));
+        try {
+            String result = HttpUtil.createPost(url)
+                    .body(JSON.toJSONString(requestBody))
+                    .timeout(30000)
+                    .execute()
+                    .body();
+            log.info("获取OA待办事项响应:{}", result);
+
+            // 解析响应并校验格式
+            OAGetAffairsResVO getAffairsRes = JSON.parseObject(result, OAGetAffairsResVO.class);
+            if (getAffairsRes == null) {
+                log.error("获取OA待办事项失败:响应解析为null");
+                throw new RuntimeException("OA接口响应数据格式异常");
+            }
+            if (getAffairsRes.getCode() == null || getAffairsRes.getCode() != 0) {
+                log.error("获取OA待办事项失败:code={}, message={}", getAffairsRes.getCode(), getAffairsRes.getMessage());
+                throw new RuntimeException("OA接口返回异常:" + getAffairsRes.getMessage());
+            }
+
+            OAAffairDataVO data = getAffairsRes.getData();
+            if (data == null || data.getList() == null || data.getList().isEmpty()) {
+                log.warn("获取OA待办事项:summaryId={}未找到匹配的待办事项", summaryId);
+                return null;
+            }
+
+            // 筛选SUMMARYID匹配的待办事项
+            long targetSummaryId = Long.parseLong(summaryId);
+            for (OAAffairItemVO item : data.getList()) {
+                if (item.getSummaryId() != null && item.getSummaryId() == targetSummaryId) {
+                    log.info("获取OA待办事项链接成功:summaryId={}, link={}", summaryId, item.getLink());
+                    return item.getLink() + "&token=" + tokenRes.getId();
+                }
+            }
+
+            log.warn("获取OA待办事项:summaryId={}在返回列表中未找到匹配项", summaryId);
+            return null;
+        } catch (Exception e) {
+            log.error("获取OA待办事项链接异常,summaryId={}", summaryId, e);
+            throw new RuntimeException("获取OA待办事项链接失败:" + e.getMessage(), e);
+        }
+    }
 }

+ 8 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOACreateFlowRes.java

@@ -5,6 +5,13 @@ import lombok.Data;
 @Data
 public class ExternalOACreateFlowRes {
     private String code;
-    private String data;
+    private ExternalOACreateFlowResData data;
     private String message;
+
+    @Data
+    public static class ExternalOACreateFlowResData{
+    	private String formurl;
+        private String summaryId;
+        private String affairId;
+    }
 }

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

@@ -5,5 +5,8 @@ import lombok.Data;
 @Data
 public class ExternalOATokenRes {
     private String bindingUser;
+    /**
+     * token
+     */
     private String id;
 }

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

@@ -0,0 +1,14 @@
+package cn.start.tz.module.pressure2.service.externalOA.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OAAffairDataVO {
+    private Integer total;
+    private Integer pages;
+    private Integer pageSize;
+    private List<OAAffairItemVO> list;
+    private Integer pageNum;
+}

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

@@ -0,0 +1,22 @@
+package cn.start.tz.module.pressure2.service.externalOA.vo;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class OAAffairItemVO {
+    @JSONField(name = "SUBJECT")
+    private String subject;
+    @JSONField(name = "ID")
+    private Long id;
+    @JSONField(name = "SUMMARYID")
+    private Long summaryId;
+    @JSONField(name = "CREATE_DATE")
+    private String createDate;
+    @JSONField(name = "NAME")
+    private String name;
+    @JSONField(name = "RN")
+    private Integer rn;
+    @JSONField(name = "LINK")
+    private String link;
+}

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

@@ -0,0 +1,10 @@
+package cn.start.tz.module.pressure2.service.externalOA.vo;
+
+import lombok.Data;
+
+@Data
+public class OAGetAffairsResVO {
+    private Integer code;
+    private OAAffairDataVO data;
+    private String message;
+}

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

@@ -2962,8 +2962,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         log.info("发起oa审核");
 
             ExternalOACreateFlowRes externalOAFlow = createExternalOAFlow(taskOrderItemReportDO, updateObj);
-            JSONObject jsonObject = JSONObject.parseObject(externalOAFlow.getData());
-            updateObj.setSummaryId(jsonObject.getString("summaryId"));
+            updateObj.setSummaryId(externalOAFlow.getData().getSummaryId());
             taskOrderItemReportMapper.updateById(updateObj);
     }
     /**

+ 7 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportService.java

@@ -91,6 +91,13 @@ public interface PipeTaskOrderItemReportService extends IService<PipeTaskOrderIt
      */
     boolean handleOACancelFlow(String summaryId);
 
+    /**
+     * 根据summaryId更新单个报告状态(从OA查询最新状态并更新本地)
+     * @param summaryId OA流程ID
+     * @return 是否找到并处理了对应的报告
+     */
+    boolean updateReportBySummaryId(String summaryId);
+
     /**
      * 报告办结
      * @param id

+ 37 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java

@@ -356,6 +356,43 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         return true;
     }
 
+    @Override
+    public boolean updateReportBySummaryId(String summaryId) {
+        PipeTaskOrderItemReportDO report = taskOrderItemReportMapper.selectOne(
+                new LambdaQueryWrapper<PipeTaskOrderItemReportDO>()
+                        .eq(PipeTaskOrderItemReportDO::getSummaryId, summaryId));
+        if (report == null) {
+            log.warn("updateReportBySummaryId:未找到summaryId={}对应的管道报告", summaryId);
+            return false;
+        }
+
+        log.info("updateReportBySummaryId:开始处理管道报告, id={}", report.getId());
+        ExternalOACommentRes externalOAComment = externalOAService.getExternalOAComment(summaryId);
+        if (externalOAComment == null || externalOAComment.getData() == null) {
+            log.warn("updateReportBySummaryId:获取OA评论为空, summaryId={}", summaryId);
+            return false;
+        }
+
+        ExternalOARes oaRes = externalOAComment.getData();
+        // 流程流转记录
+        List<ExternalOACommentInfoRes> comments = oaRes.getComments();
+        if (comments != null && !comments.isEmpty()) {
+            addFlowRecord(report, comments);
+        }
+
+        String state = oaRes.getState();
+        if (state != null) {
+            boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+                    .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+            if ("结束".equals(state) && !isStepBack) {
+                updateReportStatus(report, comments);
+                log.info("updateReportBySummaryId:管道报告状态已更新, id={}", report.getId());
+            }
+        }
+
+        return true;
+    }
+
     /**
      * 修改报告状态
      *