Parcourir la source

refactor(pressure2): 优化锅炉和管道任务报告处理逻辑

- 引入 BoilerTaskOrderSyncReportVO 和 PipeTaskOrderSyncReportVO 进行数据同步
- 添加 BoilerTaskOrderService 依赖注入实现报告数据同步功能
- 使用 fastjson2 替换 jackson 进行 JSON 解析提高性能
- 重构锅炉设备检查历史记录更新逻辑优化代码结构
- 完善管道任务订单项目报告服务中的设备详情处理流程
- 优化管道设备检验日期和结论信息的批量更新机制
- 实现管道子表检验信息向主表的智能数据映射功能
xuzhancheng il y a 1 semaine
Parent
commit
cee6b741ad

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

@@ -11,6 +11,7 @@ import cn.start.tz.module.infra.api.file.FileApi;
 import cn.start.tz.module.pressure.enums.EquipmentCheckTypeEnum;
 import cn.start.tz.module.pressure.enums.TaskOrderItemReportTypeEnum;
 import cn.start.tz.module.pressure.enums.TaskOrderStatusEnum;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderSyncReportVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.InspectionOpinionApprovalVo;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.ReportUploadVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
@@ -27,6 +28,7 @@ import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboilercheckhistory.EquipBoilerCheckHistoryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.reporttemplate.ReportTemplateMapper;
 import cn.start.tz.module.pressure2.framework.thread.CommonThread;
+import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.externalOA.ExternalOAService;
 import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOACommentInfoRes;
 import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOACommentRes;
@@ -38,6 +40,7 @@ import cn.start.tz.module.pressure2.service.taskordernontaxapply.TaskOrderNonTax
 import cn.start.tz.module.pressure2.service.taskordernontaxapply.vo.TaskOrderNonTaxApplyCreateVO;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fasterxml.jackson.databind.JsonNode;
@@ -488,7 +491,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     CommonResult<List<AdminUserRespDTO>> userListByNickname = adminUserApi.getUserListByNickname(comment.getUserName());
                     if (!userListByNickname.isSuccess() || userListByNickname.getData().isEmpty()) {
                         log.warn("addFlowRecord:未找到用户{}", comment.getUserName());
-                    }else {
+                    } else {
                         boilerTaskOrderItemReportRecordDO.setCreator(userListByNickname.getData().get(0).getId());
                     }
 
@@ -550,7 +553,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
      *
      * @param boilerTaskOrderItemReportDO 报告
      */
-    public void updateReportStatus(BoilerTaskOrderItemReportDO boilerTaskOrderItemReportDO,ExternalOACommentRes commentRes) {
+    public void updateReportStatus(BoilerTaskOrderItemReportDO boilerTaskOrderItemReportDO, ExternalOACommentRes commentRes) {
         // 根据NODE_NAME区分审核人和审批人
         List<ExternalOACommentInfoRes> comments = commentRes != null && commentRes.getData() != null
                 ? commentRes.getData().getComments() : null;
@@ -661,6 +664,10 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
     @Resource
     @Lazy
     private BoilerTaskOrderIssueReportService boilerTaskOrderIssueReportService;
+
+    @Resource
+    @Lazy
+    private BoilerTaskOrderService boilerTaskOrderService;
     @Resource
     private CommonThread commonThread;
     @Resource
@@ -758,88 +765,70 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
             //任务单办结后重置容器设备排期状态
             EquipBoilerDO equipBoilerDO = new EquipBoilerDO();
             equipBoilerDO.setId(taskOrderItemTmp.getEquipId());
+            // 获取主报告信息, taskOrderItemReportDO
+            String prepareJson = taskOrderItemReportDO.getPrepareJson();
+            JSONObject map = JSONObject.parse(prepareJson);
+            String lastCheckReportNo = taskOrderItemReportDO.getReportNo();
             // 内检
             if (100 == boilerTaskOrderDO.getCheckType()) {
                 equipBoilerDO.setHasInternal(false);
 
-                // 获取主报告信息, taskOrderItemReportDO
-                String prepareJson = taskOrderItemReportDO.getPrepareJson();
-                try {
-                    Map<String, String> map = objectMapper.readValue(prepareJson, Map.class);
 
-                    String lastCheckReportNo = taskOrderItemReportDO.getReportNo();
-                    LocalDate nextCheckDate = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckDate"));
-                    LocalDate nextCheckYearDate2 = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckYearDate"));
-                    equipBoilerDO.setNextcheckdate(nextCheckDate.atStartOfDay());
-                    equipBoilerDO.setNextInCheckDate(nextCheckYearDate2.atStartOfDay());
-                } catch (Exception e) {
-                    throw exception0(1001, "获取主报告结论失败");
+//
+                if (map.getString("nextInCheckDate") != null) {
+                    LocalDate nextInCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextInCheckDate"));
+                    equipBoilerDO.setNextcheckdate(nextInCheckDate.atStartOfDay());
                 }
-
-                if (EquipmentCheckTypeEnum.OVERDUE_INSPECTION.getType().equals(boilerTaskOrderDO.getCheckType())) {
-//                    equipBoilerDO.setIsExceedTimeLimit(true);
+                if (map.getString("nextOutCheckDate") != null) {
+                    LocalDate nextOutCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextOutCheckDate"));
+                    equipBoilerDO.setNextInCheckDate(nextOutCheckDate.atStartOfDay());
                 }
+                if (map.getString("nextPressureCheckDate") != null) {
+                    LocalDate nextPressureCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextPressureCheckDate"));
+                    equipBoilerDO.setNextInCheckDate(nextPressureCheckDate.atStartOfDay());
+                }
+                if (map.getString("checkResult") != null) {
+                    equipBoilerDO.setLastInCheckConclusion(map.getString("checkResult"));
+                }
+                if (map.getString("suggestion") != null) {
+                    equipBoilerDO.setLastInCheckConclusion(map.getString("suggestion"));
+                }
+                equipBoilerDO.setLastInCheckReportNo(lastCheckReportNo);
+                equipBoilerDO.setLastAllDate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+
             } else if (200 == boilerTaskOrderDO.getCheckType()) {
                 // 外检
-//                equipBoilerDO.setIsYearScheduling(false);
-
-                // 获取主报告信息, taskOrderItemReportDO
-                String prepareJson = taskOrderItemReportDO.getPrepareJson();
-                try {
-                    Map<String, String> map = objectMapper.readValue(prepareJson, Map.class);
-                    String lastCheckReportNo = taskOrderItemReportDO.getReportNo();
-//
-//                    LocalDate nextCheckDate = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckDate"));
-//                    LocalDate nextCheckYearDate2 = DateUtils.parseDateWithMultipleFormats(map.get("nextYearCheckDate2"));
-//                    equipBoilerDO.setNextCheckDate(nextCheckDate);
-//                    equipBoilerDO.setNextYearCheckDate(nextCheckYearDate2);
+                equipBoilerDO.setHasExternal(false);
 
-                } catch (Exception e) {
-                    // throw exception0(1001,"获取主报告结论失败");
-                    log.error("获取主报告结论失败", e);
+                if (map.getString("nextOutCheckDate") != null) {
+                    LocalDate nextOutCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextOutCheckDate"));
+                    equipBoilerDO.setNextOutCheckDate(nextOutCheckDate.atStartOfDay());
                 }
-
-                if (Integer.valueOf(200).equals(boilerTaskOrderDO.getCheckType())) {
-                    //当主报告完成审核后更新所有子报告的审核人(年检的审批后)
-                    LambdaUpdateWrapper<BoilerTaskOrderItemReportDO> updateBySubReport = new LambdaUpdateWrapper<>();
-                    updateBySubReport.eq(BoilerTaskOrderItemReportDO::getOrderItemId, taskOrderItemReportDO.getOrderItemId());
-                    updateBySubReport.eq(BoilerTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.SUB_REPORT.getType());
-                    updateBySubReport.set(BoilerTaskOrderItemReportDO::getApprovalId, taskOrderItemReportDO.getApprovalId());
-                    updateBySubReport.set(BoilerTaskOrderItemReportDO::getApprovalName, taskOrderItemReportDO.getApprovalName());
-                    updateBySubReport.set(BoilerTaskOrderItemReportDO::getApprovalTime, LocalDateTime.now());
-                    taskOrderItemReportMapper.update(updateBySubReport);
+                if (map.getString("checkResult") != null) {
+                    equipBoilerDO.setLastOutCheckConclusion(map.getString("checkResult"));
+                }
+                if (map.getString("suggestion") != null) {
+                    equipBoilerDO.setLastOutCheckConclusion(map.getString("suggestion"));
                 }
+                equipBoilerDO.setLastOutCheckReportNo(lastCheckReportNo);
+                equipBoilerDO.setLastYearDate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+
             } else if (300 == boilerTaskOrderDO.getCheckType()) {
                 // 耐压检
-//                equipBoilerDO.setIsYearScheduling(false);
+                equipBoilerDO.setHasPressure(false);
 
-                // 获取主报告信息, taskOrderItemReportDO
-                String prepareJson = taskOrderItemReportDO.getPrepareJson();
-                try {
-                    Map<String, String> map = objectMapper.readValue(prepareJson, Map.class);
-                    String lastCheckReportNo = taskOrderItemReportDO.getReportNo();
-//
-//                    LocalDate nextCheckDate = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckDate"));
-//                    LocalDate nextCheckYearDate2 = DateUtils.parseDateWithMultipleFormats(map.get("nextYearCheckDate2"));
-//                    equipBoilerDO.setNextCheckDate(nextCheckDate);
-//                    equipBoilerDO.setNextYearCheckDate(nextCheckYearDate2);
-//
-
-                } catch (Exception e) {
-                    // throw exception0(1001,"获取主报告结论失败");
-                    log.error("获取主报告结论失败", e);
+                if (map.getString("nextPressureCheckDate") != null) {
+                    LocalDate nextPressureCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextPressureCheckDate"));
+                    equipBoilerDO.setNextPressureCheckDate(nextPressureCheckDate.atStartOfDay());
                 }
-
-                if (Integer.valueOf(200).equals(boilerTaskOrderDO.getCheckType())) {
-                    //当主报告完成审核后更新所有子报告的审核人(年检的审批后)
-                    LambdaUpdateWrapper<BoilerTaskOrderItemReportDO> updateBySubReport = new LambdaUpdateWrapper<>();
-                    updateBySubReport.eq(BoilerTaskOrderItemReportDO::getOrderItemId, taskOrderItemReportDO.getOrderItemId());
-                    updateBySubReport.eq(BoilerTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.SUB_REPORT.getType());
-                    updateBySubReport.set(BoilerTaskOrderItemReportDO::getApprovalId, taskOrderItemReportDO.getApprovalId());
-                    updateBySubReport.set(BoilerTaskOrderItemReportDO::getApprovalName, taskOrderItemReportDO.getApprovalName());
-                    updateBySubReport.set(BoilerTaskOrderItemReportDO::getApprovalTime, LocalDateTime.now());
-                    taskOrderItemReportMapper.update(updateBySubReport);
+                if (map.getString("checkResult") != null) {
+                    equipBoilerDO.setLastPressureCheckConclusion(map.getString("checkResult"));
+                }
+                if (map.getString("suggestion") != null) {
+                    equipBoilerDO.setLastPressureCheckConclusion(map.getString("suggestion"));
                 }
+                equipBoilerDO.setLastPressureCheckReportNo(lastCheckReportNo);
+                equipBoilerDO.setLastPressureDate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
             }
 
             equipBoilerMapper.updateById(equipBoilerDO);
@@ -862,7 +851,9 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                 historyDO.setIsFirst(false);
                 equipBoilerCheckHistoryMapper.insert(historyDO);
             }
-
+            BoilerTaskOrderSyncReportVO reqVO = new BoilerTaskOrderSyncReportVO();
+            reqVO.setRefId(taskOrderItemTmp.getId());
+            boilerTaskOrderService.syncAllReportDataByOrderItemId(reqVO);
 
             boolean isAllFinish = boilerTaskOrderItemDOList.stream().allMatch(item -> item.getTaskStatus() == TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue());
             if (isAllFinish && !boilerTaskOrderItemDOList.isEmpty()) {

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

@@ -13,17 +13,22 @@ import cn.start.tz.module.pressure.enums.TaskOrderItemReportTypeEnum;
 import cn.start.tz.module.pressure.enums.TaskOrderStatusEnum;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.InspectionOpinionApprovalVo;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.ReportUploadVO;
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderSyncReportVO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipecheckhistory.EquipPipeCheckHistoryDO;
+import cn.start.tz.module.pressure2.dal.dataobject.equippipedetail.EquipPipeDetailDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderinput.PipeTaskOrderInputDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemdetail.PipeTaskOrderItemDetailDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreportrecord.PipeTaskOrderItemReportRecordDO;
 import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equippipecheckhistory.EquipPipeCheckHistoryMapper;
+import cn.start.tz.module.pressure2.dal.mysql.equippipedetail.EquipPipeDetailMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderinput.PipeTaskOrderInputMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemdetail.PipeTaskOrderItemDetailMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemreportrecord.PipeTaskOrderItemReportRecordMapper;
 import cn.start.tz.module.pressure2.framework.thread.CommonThread;
 import cn.start.tz.module.pressure2.service.externalOA.ExternalOAService;
@@ -38,6 +43,7 @@ import cn.start.tz.module.pressure2.service.taskordernontaxapply.TaskOrderNonTax
 import cn.start.tz.module.pressure2.service.taskordernontaxapply.vo.TaskOrderNonTaxApplyCreateVO;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -55,6 +61,7 @@ import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo.*;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
@@ -184,6 +191,12 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
     @Resource
     private PipeTaskOrderItemMapper pipeTaskOrderItemMapper;
 
+    @Resource
+    private PipeTaskOrderItemDetailMapper pipeTaskOrderItemDetailMapper;
+
+    @Resource
+    private EquipPipeDetailMapper equipPipeDetailMapper;
+
     @Resource
     private ExternalOAService externalOAService;
 
@@ -197,6 +210,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
     private AdminUserApi adminUserApi;
 
     @Resource
+    @Lazy
     private PipeTaskOrderService pipeTaskOrderService;
 
     @Override
@@ -632,106 +646,119 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
             List<PipeTaskOrderItemDO> pipeTaskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().
                     eq(PipeTaskOrderItemDO::getOrderId, taskOrderItemTmp.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()));
+            List<String> pipeDetailIds = pipeTaskOrderItemDetailDOList.stream().map(PipeTaskOrderItemDetailDO::getEquipDetailId).toList();
+            List<EquipPipeDetailDO> equipPipeDetailDOList = equipPipeDetailMapper.selectByIds(pipeDetailIds);
 
             PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectById(taskOrderItemTmp.getOrderId());
 
             //任务单办结后重置容器设备排期状态
-            EquipPipeDO equipPipeDO = new EquipPipeDO();
-            equipPipeDO.setId(taskOrderItemTmp.getEquipId());
-            if (EquipmentCheckTypeEnum.PERIODICAL_SURVEY.getType().equals(pipeTaskOrderDO.getCheckType())) {
-//                equipPipeDO.setIsScheduling(false);
-//                equipPipeDO.setIsExpiredScheduling(false);
-
-                // 获取主报告信息, taskOrderItemReportDO
-                String prepareJson = taskOrderItemReportDO.getPrepareJson();
-                try {
-                    Map<String, String> map = objectMapper.readValue(prepareJson, Map.class);
+            String prepareJson = taskOrderItemReportDO.getPrepareJson();
+            JSONObject map = JSONObject.parse(prepareJson);
 
+            if (EquipmentCheckTypeEnum.PERIODICAL_SURVEY.getType().equals(pipeTaskOrderDO.getCheckType())) {
+                // 法定检验(全面检验)
+                for (EquipPipeDetailDO equipPipeDetailDO : equipPipeDetailDOList) {
                     String lastCheckReportNo = taskOrderItemReportDO.getReportNo();
-                    LocalDate nextCheckDate = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckDate"));
-                    LocalDate nextCheckYearDate2 = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckYearDate"));
-//                    equipPipeDO.setNextCheckDate(nextCheckDate);
-//                    equipPipeDO.setNextYearCheckDate(nextCheckYearDate2);
-//
-//                    equipPipeDO.setCavityStructure(map.get("cavityStructure"));
-//                    equipPipeDO.setLastCheckSafetyStatus(map.get("lastCheckSafetyStatus"));
-//
-//                    equipPipeDO.setLastCheckAllowWorkPressure(map.get("lastCheckAllowWorkPressure"));
-//                    equipPipeDO.setLastCheckAllowWorkMedium(map.get("lastCheckAllowWorkMedium"));
-//                    equipPipeDO.setLastCheckAllowWorkTemperature(map.get("lastCheckAllowWorkTemperature"));
-//                    equipPipeDO.setLastCheckConclusion(map.get("checkConclusion"));
-//                    equipPipeDO.setLastCheckProblem(map.get("checkProblem"));
-//                    equipPipeDO.setLastCheckReportNo(lastCheckReportNo);
-
-                } catch (Exception e) {
-                    throw exception0(1001, "获取主报告结论失败");
-                }
-
-                if (EquipmentCheckTypeEnum.OVERDUE_INSPECTION.getType().equals(pipeTaskOrderDO.getCheckType())) {
-//                    equipPipeDO.setIsExceedTimeLimit(true);
+                    if (map.getString("nextLegalCheckDate") != null) {
+                        LocalDate nextLegalCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextLegalCheckDate"));
+                        equipPipeDetailDO.setNextLegalCheckDate(nextLegalCheckDate.atStartOfDay());
+                    }
+                    if (map.getString("checkResult") != null) {
+                        equipPipeDetailDO.setLegalInspectionConclusion(map.getString("checkResult"));
+                    }
+                    if (map.getString("suggestion") != null) {
+                        equipPipeDetailDO.setLegalInspectionConclusion(map.getString("suggestion"));
+                    }
+                    equipPipeDetailDO.setLastInspectionReportNo(lastCheckReportNo);
+                    equipPipeDetailDO.setLastalldate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                    equipPipeDetailDO.setHasLegalScheduling(false);
                 }
             } else if (EquipmentCheckTypeEnum.ANNUAL_INSPECTION.getType().equals(pipeTaskOrderDO.getCheckType())) {
-//                equipPipeDO.setIsYearScheduling(false);
-
-                // 获取主报告信息, taskOrderItemReportDO
-                String prepareJson = taskOrderItemReportDO.getPrepareJson();
-                try {
-                    Map<String, String> map = objectMapper.readValue(prepareJson, Map.class);
+                // 年度检验(在线检验)
+                for (EquipPipeDetailDO equipPipeDetailDO : equipPipeDetailDOList) {
                     String lastCheckReportNo = taskOrderItemReportDO.getReportNo();
-//
-//                    LocalDate nextCheckDate = DateUtils.parseDateWithMultipleFormats(map.get("nextCheckDate"));
-//                    LocalDate nextCheckYearDate2 = DateUtils.parseDateWithMultipleFormats(map.get("nextYearCheckDate2"));
-//                    equipPipeDO.setNextCheckDate(nextCheckDate);
-//                    equipPipeDO.setNextYearCheckDate(nextCheckYearDate2);
-//
-//                    equipPipeDO.setCavityStructure(map.get("cavityStructure"));
-//
-//                    equipPipeDO.setLastYearCheckConclusionPressure(map.get("lastYearCheckConclusionPressure"));
-//                    equipPipeDO.setLastYearCheckConclusionMedium(map.get("lastYearCheckConclusionMedium"));
-//                    equipPipeDO.setLastYearCheckConclusionTemperature(map.get("lastYearCheckConclusionTemperature"));
-//                    equipPipeDO.setLastYearCheckConclusion(map.get("checkConclusion"));
-//                    equipPipeDO.setLastYearCheckProblem(map.get("checkProblem"));
-//
-//                    equipPipeDO.setLastYearCheckReportNo(lastCheckReportNo);
-
-                } catch (Exception e) {
-                    // throw exception0(1001,"获取主报告结论失败");
-                    log.error("获取主报告结论失败", e);
-                }
-
-                if (Integer.valueOf(200).equals(pipeTaskOrderDO.getCheckType())) {
-                    //当主报告完成审核后更新所有子报告的审核人(年检的审批后)
-                    LambdaUpdateWrapper<PipeTaskOrderItemReportDO> updateBySubReport = new LambdaUpdateWrapper<>();
-                    updateBySubReport.eq(PipeTaskOrderItemReportDO::getOrderItemId, taskOrderItemReportDO.getOrderItemId());
-                    updateBySubReport.eq(PipeTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.SUB_REPORT.getType());
-                    updateBySubReport.set(PipeTaskOrderItemReportDO::getApprovalId, taskOrderItemReportDO.getApprovalId());
-                    updateBySubReport.set(PipeTaskOrderItemReportDO::getApprovalName, taskOrderItemReportDO.getApprovalName());
-                    updateBySubReport.set(PipeTaskOrderItemReportDO::getApprovalTime, LocalDateTime.now());
-                    taskOrderItemReportMapper.update(updateBySubReport);
+                    if (map.getString("nextYearCheckDate") != null) {
+                        LocalDate nextYearCheckDate = DateUtils.parseDateWithMultipleFormats(map.getString("nextYearCheckDate"));
+                        equipPipeDetailDO.setNextYearCheckDate(nextYearCheckDate.atStartOfDay());
+                    }
+                    if (map.getString("checkResult") != null) {
+                        equipPipeDetailDO.setYearInspectionConclusion(map.getString("checkResult"));
+                    }
+                    if (map.getString("suggestion") != null) {
+                        equipPipeDetailDO.setYearInspectionConclusion(map.getString("suggestion"));
+                    }
+                    equipPipeDetailDO.setLastYearReportNo(lastCheckReportNo);
+                    equipPipeDetailDO.setLastonlinedate(taskOrderItemReportDO.getCheckDate().atStartOfDay());
+                    equipPipeDetailDO.setHasYearScheduling(false);
                 }
             }
+            equipPipeDetailMapper.updateBatch(equipPipeDetailDOList);
 
-            equipPipeMapper.updateById(equipPipeDO);
             //todo 推送公众号催费消息
 
-            Long count = equipPipeCheckHistoryMapper.selectCount(new LambdaQueryWrapperX<EquipPipeCheckHistoryDO>().
-                    eq(EquipPipeCheckHistoryDO::getOrderId, pipeTaskOrderDO.getId()).
-                    eq(EquipPipeCheckHistoryDO::getEquipId, equipPipeDO.getId())
-            );
-            if (count == null || count == 0) {
-                EquipPipeCheckHistoryDO historyDO = new EquipPipeCheckHistoryDO();
-
-                historyDO.setCheckType(pipeTaskOrderDO.getCheckType());
-                historyDO.setProgress(100);
-                historyDO.setCheckDate(pipeTaskOrderDO.getCheckDate());
-                historyDO.setOrderId(pipeTaskOrderDO.getId());
-                historyDO.setEquipId(equipPipeDO.getId());
-
-                historyDO.setDeptId(pipeTaskOrderDO.getDeptId());
-                historyDO.setIsFirst(false);
-                equipPipeCheckHistoryMapper.insert(historyDO);
+            for (EquipPipeDO equipPipeDO : equipPipeDOList) {
+                // 管道的信息为子表管线中检验时间为管道中最早且不为空的
+                List<EquipPipeDetailDO> equipPipeDetailDOS = equipPipeDetailMapper.selectList(new LambdaQueryWrapperX<EquipPipeDetailDO>()
+                        .eq(EquipPipeDetailDO::getEquipPipeId, equipPipeDO.getId()));
+
+                if (EquipmentCheckTypeEnum.PERIODICAL_SURVEY.getType().equals(pipeTaskOrderDO.getCheckType())) {
+                    // 法定检验(全面检验) - 找出上次法定检验日期最早的管线,将其所有信息设置到主表
+                    EquipPipeDetailDO earliestDetail = equipPipeDetailDOS.stream()
+                            .filter(detail -> detail.getLastalldate() != null)
+                            .min(Comparator.comparing(EquipPipeDetailDO::getLastalldate))
+                            .orElse(null);
+
+                    if (earliestDetail != null) {
+                        equipPipeDO.setNextLegalCheckDate(earliestDetail.getNextLegalCheckDate());
+                        equipPipeDO.setLastLegalPeriodicalInspectionReportNo(earliestDetail.getLastInspectionReportNo());
+                        equipPipeDO.setLastLegalConclusion(earliestDetail.getLegalInspectionConclusion());
+                        equipPipeDO.setLastLegalIssues(earliestDetail.getLegalInspectionIssues());
+                    }
+                    equipPipeDO.setHasLegalScheduling(false);
+                } else if (EquipmentCheckTypeEnum.ANNUAL_INSPECTION.getType().equals(pipeTaskOrderDO.getCheckType())) {
+                    // 年度检验(在线检验) - 找出上年检日期最早的管线,将其所有信息设置到主表
+                    EquipPipeDetailDO earliestDetail = equipPipeDetailDOS.stream()
+                            .filter(detail -> detail.getLastonlinedate() != null)
+                            .min(Comparator.comparing(EquipPipeDetailDO::getLastonlinedate))
+                            .orElse(null);
+
+                    if (earliestDetail != null) {
+                        equipPipeDO.setNextYearCheckDate(earliestDetail.getNextYearCheckDate());
+                        equipPipeDO.setLastYearReportNo(earliestDetail.getLastYearReportNo());
+                        equipPipeDO.setLastYearConclusion(earliestDetail.getYearInspectionConclusion());
+                        equipPipeDO.setLastYearIssues(earliestDetail.getYearInspectionIssues());
+                    }
+                    equipPipeDO.setHasYearScheduling(false);
+                }
+
+                equipPipeMapper.updateById(equipPipeDO);
+                Long count = equipPipeCheckHistoryMapper.selectCount(new LambdaQueryWrapperX<EquipPipeCheckHistoryDO>().
+                        eq(EquipPipeCheckHistoryDO::getOrderId, pipeTaskOrderDO.getId()).
+                        eq(EquipPipeCheckHistoryDO::getEquipId, equipPipeDO.getId())
+                );
+                if (count == null || count == 0) {
+                    EquipPipeCheckHistoryDO historyDO = new EquipPipeCheckHistoryDO();
+
+                    historyDO.setCheckType(pipeTaskOrderDO.getCheckType());
+                    historyDO.setProgress(100);
+                    historyDO.setCheckDate(pipeTaskOrderDO.getCheckDate());
+                    historyDO.setOrderId(pipeTaskOrderDO.getId());
+                    historyDO.setEquipId(equipPipeDO.getId());
+
+                    historyDO.setDeptId(pipeTaskOrderDO.getDeptId());
+                    historyDO.setIsFirst(false);
+                    equipPipeCheckHistoryMapper.insert(historyDO);
+                }
             }
 
+            PipeTaskOrderSyncReportVO reqVO = new PipeTaskOrderSyncReportVO();
+            reqVO.setOrderId(taskOrderItemReportDO.getOrderId());
+            pipeTaskOrderService.syncAllReportDataByOrderId(reqVO);
+
             if (!pipeTaskOrderItemDOList.isEmpty()) {
                 PipeTaskOrderItemDO pipeTaskOrderItemDO = pipeTaskOrderItemDOList.get(0);
                 // 任务完成