xuzhancheng 12 hodín pred
rodič
commit
cc00bcbd7f

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

@@ -184,4 +184,21 @@ public class ExternalOAController {
             return CommonResult.error(500, "获取待办事项链接失败:" + e.getMessage());
         }
     }
+
+    /**
+     * 根据summaryId获取OA待办事项的审批链接
+     *
+     * @return 审批链接URL
+     */
+    @GetMapping("/getAffairSummaryList")
+    public CommonResult<List<Long>> getAffairSummaryList() {
+        try {
+            List<Long> affairSummaryList = externalOAService.getAffairSummaryList();
+            return success(affairSummaryList);
+        } catch (Exception e) {
+            log.error("获取待办事项失败,", e);
+            return success(new ArrayList<>());
+        }
+    }
+
 }

+ 37 - 45
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/AcceptOrderServiceImpl.java

@@ -918,36 +918,33 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
                 List<String> inspectorIds = inspectors.stream().map(AdminUserRespDTO::getId).collect(Collectors.toList());
 
                 // 通过检验员ID查询关联的订单ID
-                List<BoilerAcceptOrderUserDO> userDOS = acceptOrderUserMapper.selectList(
+                List<BoilerAcceptOrderUserDO> boilerAcceptOrderUserDOS = acceptOrderUserMapper.selectList(
                         new LambdaQueryWrapperX<BoilerAcceptOrderUserDO>()
                                 .in(BoilerAcceptOrderUserDO::getUserId, inspectorIds)
                 );
-
-                List<PipeAcceptOrderUserDO> userDOS1 = pipeAcceptOrderUserMapper.selectList(
+                List<PipeAcceptOrderUserDO> pipeAcceptOrderUserDOS = pipeAcceptOrderUserMapper.selectList(
                         new LambdaQueryWrapperX<PipeAcceptOrderUserDO>()
                                 .in(PipeAcceptOrderUserDO::getUserId, inspectorIds)
                 );
-                if (CollUtil.isNotEmpty(userDOS)) {
-                    List<String> orderIds = userDOS.stream()
+                List<String> orderIds = new ArrayList<>();
+                if (CollUtil.isNotEmpty(boilerAcceptOrderUserDOS)) {
+                    orderIds.addAll(boilerAcceptOrderUserDOS.stream()
                             .map(BoilerAcceptOrderUserDO::getOrderId)
                             .distinct()
-                            .collect(Collectors.toList());
-
-                    if (CollUtil.isNotEmpty(userDOS1)){
-                        orderIds.addAll(userDOS1.stream().map(PipeAcceptOrderUserDO::getOrderId)
-                                .distinct()
-                                .toList()
-                        );
-                        // 去重
-                        orderIds = orderIds.stream().distinct().toList();
-                    }
-
-                    // 设置订单ID列表
-                    pageReqVO.setOrderIds(orderIds);
-                } else {
+                            .toList());
+                }
+                if (CollUtil.isNotEmpty(pipeAcceptOrderUserDOS)) {
+                    orderIds.addAll(pipeAcceptOrderUserDOS.stream()
+                            .map(PipeAcceptOrderUserDO::getOrderId)
+                            .distinct()
+                            .toList());
+                }
+                if (orderIds.isEmpty()){
                     // 没有找到关联订单,返回空结果
                     return new PageResult<>();
                 }
+                // 设置订单ID列表
+                pageReqVO.setOrderIds(orderIds);
             } else {
                 // 没有找到检验员,返回空结果
                 return new PageResult<>();
@@ -970,6 +967,9 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
         if (StringUtils.isNotEmpty(pageReqVO.getBpmUserId())) {
             BpmProcessInstanceDTO bpmProcessInstanceDTO = new BpmProcessInstanceDTO();
             bpmProcessInstanceDTO.setStatus(100);
+            if (CollUtil.isNotEmpty(pageReqVO.getStatus())) {
+                bpmProcessInstanceDTO.setStatus(pageReqVO.getStatus().get(0));
+            }
             bpmProcessInstanceDTO.setProcessDefinitionKey(BpmModeConstantsEnum.ACCEPT_ORDER.getType());
             List<BpmProcessInstanceRespDTO> checkedData = bpmProcessInstanceApi.getProcessInstanceList(pageReqVO.getBpmUserId(), bpmProcessInstanceDTO).getCheckedData();
             if (CollUtil.isNotEmpty(checkedData)) {
@@ -982,9 +982,6 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
             }
         }
 
-        //设置查询设备类型
-        pageReqVO.setEquipMainType(200);
-
         PageResult<AcceptOrderDO> acceptOrderDOPageResult = acceptOrderMapper.selectPage(pageReqVO);
         PageResult<AcceptOrderRespVO> pageResult = BeanUtils.toBean(acceptOrderDOPageResult, AcceptOrderRespVO.class);
 
@@ -994,15 +991,15 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
 
         List<String> ids = pageResult.getList().stream().map(AcceptOrderRespVO::getId).collect(Collectors.toList());
         List<String> processInstanceIds = pageResult.getList().stream().map(AcceptOrderRespVO::getProcessInstanceId).filter(Objects::nonNull).collect(Collectors.toList());
-        List<String> deptIds = pageResult.getList().stream().map(AcceptOrderRespVO::getDeptId).filter(Objects::nonNull).filter(StringUtils::isNotBlank).collect(Collectors.toList());
-        List<BoilerAcceptOrderUserDO> acceptOrderUserDOS = acceptOrderUserMapper.selectList(BoilerAcceptOrderUserDO::getOrderId, ids);
-        List<PipeAcceptOrderUserDO> acceptOrderUserDOS1 = pipeAcceptOrderUserMapper.selectList(PipeAcceptOrderUserDO::getOrderId, ids);
+        List<String> deptIds = pageResult.getList().stream().map(AcceptOrderRespVO::getDeptId).filter(Objects::nonNull).collect(Collectors.toList());
+        List<BoilerAcceptOrderUserDO> boilerAcceptOrderUserDOS = acceptOrderUserMapper.selectList(BoilerAcceptOrderUserDO::getOrderId, ids);
+        List<PipeAcceptOrderUserDO> pipeAcceptOrderUserDOS = pipeAcceptOrderUserMapper.selectList(PipeAcceptOrderUserDO::getOrderId, ids);
 
-        Map<String, DeptRespDTO> deptMap = deptIds.isEmpty() ? new HashMap<>() : deptApi.getDeptMap(deptIds);
+        Map<String, DeptRespDTO> deptMap = deptApi.getDeptMap(deptIds);
 
         //user List
-        Map<String, List<BoilerAcceptOrderUserDO>> userList = acceptOrderUserDOS.stream().collect(Collectors.groupingBy(BoilerAcceptOrderUserDO::getOrderId));
-//        Map<String, List<PipeAcceptOrderUserDO>> userList1 = acceptOrderUserDOS1.stream().collect(Collectors.groupingBy(PipeAcceptOrderUserDO::getOrderId));
+        Map<String, List<BoilerAcceptOrderUserDO>> boilerUserList = boilerAcceptOrderUserDOS.stream().collect(Collectors.groupingBy(BoilerAcceptOrderUserDO::getOrderId));
+        Map<String, List<PipeAcceptOrderUserDO>> pipeUserList = pipeAcceptOrderUserDOS.stream().collect(Collectors.groupingBy(PipeAcceptOrderUserDO::getOrderId));
         Map<String, BpmTaskDTO> bpmTaskDTOMap = bpmTaskApi.getLastTaskMap(processInstanceIds).getData();
 
         pageResult.getList().forEach(acceptOrder -> {
@@ -1014,29 +1011,27 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
             }
 
             acceptOrder.setDept(deptMap.get(acceptOrder.getDeptId()));
-            List<BoilerAcceptOrderUserDO> checkerUserIds = new ArrayList<>();
-            List<BoilerAcceptOrderUserDO> boilerUsers = userList.get(acceptOrder.getId());
-            if (boilerUsers != null) {
-                checkerUserIds.addAll(boilerUsers);
+            List<BoilerAcceptOrderUserDO> checkerUserIds1 = boilerUserList.get(acceptOrder.getId());
+            List<PipeAcceptOrderUserDO> checkerUserIds2 = pipeUserList.get(acceptOrder.getId());
+            if (checkerUserIds1 != null && !checkerUserIds1.isEmpty()){
+                acceptOrder.setCheckerUserIds(checkerUserIds1);
+            }
+            if (checkerUserIds2 != null && !checkerUserIds2.isEmpty()){
+                List<BoilerAcceptOrderUserDO> checkerUserIds = BeanUtils.toBean(checkerUserIds2,BoilerAcceptOrderUserDO.class);
+                acceptOrder.setCheckerUserIds(checkerUserIds);
             }
-//            List<PipeAcceptOrderUserDO> pipeAcceptOrderUserDOS = userList1.get(acceptOrder.getId());
-//            if (pipeAcceptOrderUserDOS != null) {
-//                checkerUserIds.addAll(BeanUtils.toBean(pipeAcceptOrderUserDOS, BoilerAcceptOrderUserDO.class));
-//            }
-            acceptOrder.setCheckerUserIds(checkerUserIds);
-
         });
 
         List<String> userIds = pageResult.getList().stream().map(AcceptOrderRespVO::getCurrentAuditorId).filter(Objects::nonNull).collect(Collectors.toList());
         List<String> userIds2 = pageResult.getList().stream().map(AcceptOrderRespVO::getCreator).filter(Objects::nonNull).toList();
-        List<String> userIds3 = acceptOrderUserDOS.stream().map(BoilerAcceptOrderUserDO::getUserId).filter(Objects::nonNull).toList();
-        List<String> userIds31 = acceptOrderUserDOS1.stream().map(PipeAcceptOrderUserDO::getUserId).filter(Objects::nonNull).toList();
+        List<String> userIds3 = boilerAcceptOrderUserDOS.stream().map(BoilerAcceptOrderUserDO::getUserId).filter(Objects::nonNull).toList();
+        List<String> userIds5 = pipeAcceptOrderUserDOS.stream().map(PipeAcceptOrderUserDO::getUserId).filter(Objects::nonNull).toList();
         List<String> userIds4 = pageResult.getList().stream().map(AcceptOrderRespVO::getSubmitId).filter(Objects::nonNull).toList();
 
         userIds.addAll(userIds2);
         userIds.addAll(userIds3);
-        userIds.addAll(userIds31);
         userIds.addAll(userIds4);
+        userIds.addAll(userIds5);
 
         if(!userIds.isEmpty()){
             Map<String, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
@@ -1046,10 +1041,7 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
 
                 if(acceptOrder.getCheckerUserIds() != null){
                     acceptOrder.getCheckerUserIds().forEach(checkerUserId -> {
-                        AdminUserRespDTO e = userMap.get(checkerUserId.getUserId());
-                        if (e != null){
-                            acceptOrder.getCheckers().add(e);
-                        }
+                        acceptOrder.getCheckers().add(userMap.get(checkerUserId.getUserId()));
                     });
                 }
 

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

@@ -3916,7 +3916,9 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         externalOACreateFlowBodyDataReq.setFormmain_0042(formmain_0042);
         externalOACreateFlowReq.setData(externalOACreateFlowBodyDataReq);
         externalOACreateFlowReq.setThirdAttachments(thirdAttachments);
-        return externalOAService.createExternalOAFlow(externalOACreateFlowReq,updateObj.getApprovalName());
+        String approvalId = updateObj.getApprovalId();
+        AdminUserRespDTO checkedData = adminUserApi.getUser(approvalId).getCheckedData();
+        return externalOAService.createExternalOAFlow(externalOACreateFlowReq,checkedData.getUsername());
     }
 
 

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

@@ -330,12 +330,12 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                                 }
                                 String state = oaRes.getState();
                                 // 检查是否有退回标识:isStepBack=true 或 评论中包含 EXT_ATT3=stepBack
-                                boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
-                                        .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+//                                boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+//                                        .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
 //                                if ("处理中".equals(state) || "待处理".equals(state)) {
 //                                    // 流程处理中,不做操作
 //                                } else
-                                if ("结束".equals(state) && !isStepBack) {
+                                if ("结束".equals(state)) {
                                     // 流程正常结束,修改报告状态
                                     updateReportStatus(boilerTaskOrderItemReportDO, externalOAComment);
                                 }
@@ -418,9 +418,10 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
 
         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) {
+//            boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+//                    .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+//            if ("结束".equals(state) && !isStepBack) {
+            if ("结束".equals(state)) {
                 updateReportStatus(report, externalOAComment);
                 log.info("updateReportBySummaryId:锅炉报告状态已更新, id={}", report.getId());
             }
@@ -512,6 +513,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         // 根据NODE_NAME实时更新报告的审核人/审批人信息
         // 找最新的"审核人"节点的【同意】或【已阅】评论
         comments.stream()
+                .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
@@ -529,6 +531,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
 
         // 找最新的"审批人"节点的【同意】或【已阅】评论
         comments.stream()
+                .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
@@ -828,7 +831,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     equipBoilerDO.setLastInCheckConclusion(map.getString("suggestion"));
                 }
                 equipBoilerDO.setLastInCheckReportNo(lastCheckReportNo);
-                equipBoilerDO.setLastAllDate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                equipBoilerDO.setLastAllDate(boilerTaskOrderDO.getCheckDate().atStartOfDay());
 
             } else if (200 == boilerTaskOrderDO.getCheckType()) {
                 // 外检
@@ -845,7 +848,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     equipBoilerDO.setLastOutCheckConclusion(map.getString("suggestion"));
                 }
                 equipBoilerDO.setLastOutCheckReportNo(lastCheckReportNo);
-                equipBoilerDO.setLastYearDate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                equipBoilerDO.setLastYearDate(boilerTaskOrderDO.getCheckDate().atStartOfDay());
 
             } else if (300 == boilerTaskOrderDO.getCheckType()) {
                 // 耐压检
@@ -862,7 +865,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     equipBoilerDO.setLastPressureCheckConclusion(map.getString("suggestion"));
                 }
                 equipBoilerDO.setLastPressureCheckReportNo(lastCheckReportNo);
-                equipBoilerDO.setLastPressureDate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                equipBoilerDO.setLastPressureDate(boilerTaskOrderDO.getCheckDate().atStartOfDay());
             }
 
             equipBoilerMapper.updateById(equipBoilerDO);

+ 16 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamictb/DynamicTbServiceImpl.java

@@ -45,6 +45,7 @@ import cn.start.tz.framework.common.pojo.PageParam;
 import cn.start.tz.framework.common.util.object.BeanUtils;
 
 import cn.start.tz.module.pressure2.dal.mysql.dynamictb.DynamicTbMapper;
+import lombok.extern.slf4j.Slf4j;
 
 import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.start.tz.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -57,6 +58,7 @@ import static cn.start.tz.module.pressure2.enums.ErrorCodeConstants.*;
  */
 @Service
 @Validated
+@Slf4j
 public class DynamicTbServiceImpl extends ServiceImpl<DynamicTbMapper, DynamicTbDO> implements DynamicTbService {
 
     @Resource
@@ -182,7 +184,20 @@ public class DynamicTbServiceImpl extends ServiceImpl<DynamicTbMapper, DynamicTb
         String copyConfig = dynamicTbDO.getCopyConfig();
         dynamicTbDO.setCopyConfig(null);
         DynamicTbRespVO bean = BeanUtils.toBean(dynamicTbDO, DynamicTbRespVO.class);
-        bean.setCopyConfig(JSONObject.parseObject(copyConfig));
+        
+        // 安全地解析 copyConfig JSON 字符串
+        if (StrUtil.isNotEmpty(copyConfig)) {
+            try {
+                bean.setCopyConfig(JSONObject.parseObject(copyConfig));
+            } catch (Exception e) {
+                // 如果解析失败,记录日志并设置为 null 或空对象
+                log.warn("Failed to parse copyConfig JSON for dynamicTb ID: {}, value: {}", id, copyConfig, e);
+                bean.setCopyConfig(new JSONObject());
+            }
+        } else {
+            bean.setCopyConfig(new JSONObject());
+        }
+        
         // 报告原件
         List<DynamicTbFileDO> dynamicTbFileDOS = dynamicTbFileMapper.selectList(DynamicTbFileDO::getId, id);
         bean.setFilePaths(dynamicTbFileDOS.stream().map(dynamicTbFileDO -> {

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

@@ -60,4 +60,6 @@ public interface ExternalOAService {
      * @return 审批链接URL,未找到返回null
      */
     String getAffairLink(String summaryId);
+
+    List<Long> getAffairSummaryList();
 }

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

@@ -6,37 +6,30 @@ import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpStatus;
 import cn.hutool.http.HttpUtil;
 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.grape.city.api.vo.GrapeCityReqDTO;
 import cn.start.tz.module.infra.api.file.FileApi;
 import cn.start.tz.module.pressure2.controller.admin.externalOA.vo.ReturnFlowVO;
-import cn.start.tz.module.pressure2.dal.dataobject.dynamictbval.DynamicTbValDO;
 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.*;
 import cn.start.tz.module.pressure2.service.pipetaskorderitemreport.PipeTaskOrderItemReportService;
-import cn.start.tz.module.pressure2.util.ImageUtil;
 import cn.start.tz.module.system.api.standard.StandardTemplateApi;
-import cn.start.tz.module.system.api.standard.dto.StandardTemplateRespDTO;
+import cn.start.tz.module.system.api.user.AdminUserApi;
+import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.cloud.commons.lang.StringUtils;
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
-import com.grapecity.documents.excel.*;
-import com.grapecity.documents.excel.drawing.ImageType;
-import com.grapecity.documents.excel.template.DataSource.JsonDataSource;
 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;
-import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.util.*;
 
+import static cn.start.tz.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
+
 @Service
 @Slf4j
 public class ExternalOAServiceImpl implements ExternalOAService {
@@ -65,6 +58,9 @@ public class ExternalOAServiceImpl implements ExternalOAService {
     @Resource
     private DynamicTbValService dynamicTbValService;
 
+    @Resource
+    private AdminUserApi adminUserApi;
+
     @Resource
     @Lazy
     private BoilerTaskOrderItemReportService boilerTaskOrderItemReportService;
@@ -247,7 +243,14 @@ public class ExternalOAServiceImpl implements ExternalOAService {
     public String getAffairLink(String summaryId) {
         log.info("获取OA待办事项链接,summaryId={}", summaryId);
         // 获取OA系统token
-        ExternalOATokenRes tokenRes = this.getExternalOAToken(null);
+        LoginUser loginUser = getLoginUser();
+        if (loginUser == null) {
+            log.error("获取OA待办事项链接失败:获取登录用户为空");
+            return null;
+        }
+        String id = loginUser.getId();
+        AdminUserRespDTO checkedData = adminUserApi.getUser(id).getCheckedData();
+        ExternalOATokenRes tokenRes = this.getExternalOAToken(checkedData.getUsername());
         if (tokenRes == null || StringUtils.isBlank(tokenRes.getId())) {
             log.error("获取OA待办事项链接失败:获取token为空");
             throw new RuntimeException("获取OA系统token失败");
@@ -256,7 +259,7 @@ public class ExternalOAServiceImpl implements ExternalOAService {
         // 构建请求并调用OA获取待办事项列表
         String url = this.oaHost + "/seeyon/rest/myflow/getAffairs?token=" + tokenRes.getId();
         Map<String, String> requestBody = new HashMap<>();
-        requestBody.put("memberCode", "300801");
+        requestBody.put("memberCode", checkedData.getUsername());
         requestBody.put("templateCode", "jianwureport");
         requestBody.put("pageNum", "1");
         requestBody.put("pageSize", "999");
@@ -303,4 +306,60 @@ public class ExternalOAServiceImpl implements ExternalOAService {
             throw new RuntimeException("获取OA待办事项链接失败:" + e.getMessage(), e);
         }
     }
+    @Override
+    public List<Long> getAffairSummaryList() {
+        // 获取OA系统token
+        LoginUser loginUser = getLoginUser();
+        if (loginUser == null) {
+            log.error("获取OA待办事项失败:获取登录用户为空");
+            return null;
+        }
+        String id = loginUser.getId();
+        AdminUserRespDTO checkedData = adminUserApi.getUser(id).getCheckedData();
+        ExternalOATokenRes tokenRes = this.getExternalOAToken(checkedData.getUsername());
+        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", checkedData.getUsername());
+        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()) {
+                return null;
+            }
+
+            // 筛选SUMMARYID匹配的待办事项
+            return data.getList().stream().map(OAAffairItemVO::getSummaryId).toList();
+        } catch (Exception e) {
+            log.error("获取OA待办事项链接异常,", e);
+            throw new RuntimeException("获取OA待办事项链接失败:" + e.getMessage(), e);
+        }
+    }
 }

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

@@ -3132,7 +3132,9 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         externalOACreateFlowBodyDataReq.setFormmain_0042(formmain_0042);
         externalOACreateFlowReq.setData(externalOACreateFlowBodyDataReq);
         externalOACreateFlowReq.setThirdAttachments(thirdAttachments);
-        return externalOAService.createExternalOAFlow(externalOACreateFlowReq,updateObj.getApprovalName());
+        String approvalId = updateObj.getApprovalId();
+        AdminUserRespDTO checkedData = adminUserApi.getUser(approvalId).getCheckedData();
+        return externalOAService.createExternalOAFlow(externalOACreateFlowReq,checkedData.getUsername());
     }
 
 

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

@@ -240,12 +240,13 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                                 }
                                 String state = oaRes.getState();
                                 // 检查是否有退回标识:isStepBack=true 或 评论中包含 EXT_ATT3=stepBack
-                                boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
-                                        .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+//                                boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+//                                        .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
 //                                if ("处理中".equals(state) || "待处理".equals(state)) {
 //                                    // 流程处理中,不做操作
 //                                } else
-                                if ("结束".equals(state) && !isStepBack) {
+//                                if ("结束".equals(state) && !isStepBack) {
+                                if ("结束".equals(state)) {
                                     // 流程正常结束,修改报告状态
                                     updateReportStatus(pipeTaskOrderItemReportDO, comments);
                                 }
@@ -310,6 +311,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         // 根据NODE_NAME实时更新报告的审核人/审批人信息
         // 找最新的"审核人"节点的【同意】或【已阅】评论
         comments.stream()
+                .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
@@ -327,6 +329,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
 
         // 找最新的"审批人"节点的【同意】或【已阅】评论
         comments.stream()
+                .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
@@ -442,9 +445,10 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
 
         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) {
+//            boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+//                    .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+//            if ("结束".equals(state) && !isStepBack) {
+            if ("结束".equals(state)) {
                 updateReportStatus(report, comments);
                 log.info("updateReportBySummaryId:管道报告状态已更新, id={}", report.getId());
             }
@@ -675,23 +679,23 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         if (taskOrderItemReportDO.getReportType() != null && taskOrderItemReportDO.getReportType() == 100) {
             // 任务完成
             PipeTaskOrderItemDO updateOrderItem = new PipeTaskOrderItemDO();
-            updateOrderItem.setId(taskOrderItemReportDO.getOrderItemId());
+            updateOrderItem.setOrderId(taskOrderItemReportDO.getOrderId());
             updateOrderItem.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
             pipeTaskOrderItemMapper.updateById(updateOrderItem);
 
-            PipeTaskOrderItemDO taskOrderItemTmp = pipeTaskOrderItemMapper.selectById(taskOrderItemReportDO.getOrderItemId());
+//            PipeTaskOrderItemDO taskOrderItemTmp = pipeTaskOrderItemMapper.selectById(taskOrderItemReportDO.getOrderItemId());
 
             List<PipeTaskOrderItemDO> pipeTaskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().
-                    eq(PipeTaskOrderItemDO::getOrderId, taskOrderItemTmp.getOrderId()).
+                    eq(PipeTaskOrderItemDO::getOrderId, taskOrderItemReportDO.getOrderId()).
                     ne(PipeTaskOrderItemDO::getTaskStatus, TaskOrderStatusEnum.CANCEL.getStatus()));
             List<String> pipeIds = pipeTaskOrderItemDOList.stream().map(PipeTaskOrderItemDO::getEquipId).toList();
             List<EquipPipeDO> equipPipeDOList = equipPipeMapper.selectByIds(pipeIds);
             List<PipeTaskOrderItemDetailDO> pipeTaskOrderItemDetailDOList = pipeTaskOrderItemDetailMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDetailDO>().
-                    eq(PipeTaskOrderItemDetailDO::getOrderId, taskOrderItemTmp.getOrderId()));
+                    eq(PipeTaskOrderItemDetailDO::getOrderId, taskOrderItemReportDO.getOrderId()));
             List<String> pipeDetailIds = pipeTaskOrderItemDetailDOList.stream().map(PipeTaskOrderItemDetailDO::getEquipDetailId).toList();
             List<EquipPipeDetailDO> equipPipeDetailDOList = equipPipeDetailMapper.selectByIds(pipeDetailIds);
 
-            PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectById(taskOrderItemTmp.getOrderId());
+            PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectById(taskOrderItemReportDO.getOrderId());
 
             //任务单办结后重置容器设备排期状态
             String prepareJson = taskOrderItemReportDO.getPrepareJson();
@@ -712,7 +716,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                         equipPipeDetailDO.setLegalInspectionConclusion(map.getString("suggestion"));
                     }
                     equipPipeDetailDO.setLastInspectionReportNo(lastCheckReportNo);
-                    equipPipeDetailDO.setLastalldate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                    equipPipeDetailDO.setLastalldate(pipeTaskOrderDO.getCheckDate().atStartOfDay());
                     equipPipeDetailDO.setHasLegalScheduling(false);
                 }
             } else if (EquipmentCheckTypeEnum.ANNUAL_INSPECTION.getType().equals(pipeTaskOrderDO.getCheckType())) {
@@ -730,7 +734,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                         equipPipeDetailDO.setYearInspectionConclusion(map.getString("suggestion"));
                     }
                     equipPipeDetailDO.setLastYearReportNo(lastCheckReportNo);
-                    equipPipeDetailDO.setLastonlinedate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                    equipPipeDetailDO.setLastonlinedate(pipeTaskOrderDO.getCheckDate().atStartOfDay());
                     equipPipeDetailDO.setHasYearScheduling(false);
                 }
             }