Procházet zdrojové kódy

refactor(pressure2): 优化锅炉和管道任务报告服务

- 移除未使用的导入类和事务注解
- 修改updateReport方法以支持审核和审批两种状态
- 添加实时更新审核/审批状态功能
- 实现根据OA评论动态更新报告审核人和审批人信息
- 增加AtomicBoolean控制报告更新逻辑
- 优化Lambda查询条件支持多状态筛选
xuzhancheng před 1 týdnem
rodič
revize
0e3af2f54c

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

@@ -11,19 +11,14 @@ 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.BatchRecheckOrderItemVO;
 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.boilertaskorder.vo.TaskOrderMainCheckVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreportrecord.BoilerTaskOrderItemReportRecordDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equipboiler.EquipBoilerDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equipboilercheckhistory.EquipBoilerCheckHistoryDO;
-import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
-import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
-import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreportrecord.BoilerTaskOrderItemReportRecordDO;
 import cn.start.tz.module.pressure2.dal.dataobject.reporttemplate.ReportTemplateDO;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorder.BoilerTaskOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrderItemMapper;
@@ -39,7 +34,6 @@ import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOARes;
 import cn.start.tz.module.pressure2.service.boilertaskorderissuereport.BoilerTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.pushtaskorder.PushTaskOrderService;
 import cn.start.tz.module.pressure2.service.synchronization.SynchronizationService;
-import cn.start.tz.module.pressure2.service.synchronization.dto.ReportDto;
 import cn.start.tz.module.pressure2.service.taskordernontaxapply.TaskOrderNonTaxApplyService;
 import cn.start.tz.module.pressure2.service.taskordernontaxapply.vo.TaskOrderNonTaxApplyCreateVO;
 import cn.start.tz.module.system.api.user.AdminUserApi;
@@ -57,7 +51,6 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import java.time.LocalDate;
@@ -67,9 +60,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.*;
-import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
 import cn.start.tz.framework.common.pojo.PageResult;
-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.boilertaskorderitemreport.BoilerTaskOrderItemReportMapper;
@@ -315,9 +306,12 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
      */
     @Override
     public void updateReport() {
-        // 找出全部审核中的
+        // 找出全部审核中和审批中
         List<BoilerTaskOrderItemReportDO> boilerTaskOrderItemReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
-                .eq(BoilerTaskOrderItemReportDO::getTaskStatus, cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum.REPORT_APPROVAL.getStatus()).isNotNull(BoilerTaskOrderItemReportDO::getSummaryId));
+                .in(BoilerTaskOrderItemReportDO::getTaskStatus, List.of(
+                        cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum.REPORT_APPROVAL.getStatus(),
+                        cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum.REPORT_RATIFY.getStatus()))
+                .isNotNull(BoilerTaskOrderItemReportDO::getSummaryId));
         boilerTaskOrderItemReportDOS.parallelStream().forEach(boilerTaskOrderItemReportDO -> {
                     try {
                         log.info("开始处理,{}", boilerTaskOrderItemReportDO);
@@ -477,7 +471,11 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         );
         // 找到最新的一个记录
         BoilerTaskOrderItemReportRecordDO latestRecord = boilerTaskOrderItemReportRecordDOS.isEmpty() ? null : boilerTaskOrderItemReportRecordDOS.get(0);
-        // 添加时间晚于最新的记录的记录
+        // 添加时间晚于最新的记录的记录,并实时更新审核/审批状态
+        AtomicBoolean needUpdateReport = new AtomicBoolean(false);
+        LambdaUpdateWrapper<BoilerTaskOrderItemReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<>();
+        reportUpdateWrapper.eq(BoilerTaskOrderItemReportDO::getId, boilerTaskOrderItemReportDO.getId());
+
         List<BoilerTaskOrderItemReportRecordDO> newComments = comments.stream()
                 .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .map(comment -> {
@@ -507,6 +505,44 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     return boilerTaskOrderItemReportRecordDO;
                 }).toList();
         taskOrderItemReportRecordMapper.insertBatch(newComments);
+
+        // 根据NODE_NAME实时更新报告的审核人/审批人信息
+        // 找最新的"审核人"节点的【同意】或【已阅】评论
+        comments.stream()
+                .filter(c -> c.getComment() != null
+                        && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
+                        && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
+                        && "审核人".equals(c.getNodeName()))
+                .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
+                .ifPresent(approval -> {
+                    List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(approval.getUserName()).getCheckedData();
+                    if (!userList.isEmpty()) {
+                        reportUpdateWrapper.set(BoilerTaskOrderItemReportDO::getApprovalId, userList.get(0).getId());
+                        reportUpdateWrapper.set(BoilerTaskOrderItemReportDO::getApprovalTime, approval.getCreateDate());
+                        reportUpdateWrapper.set(BoilerTaskOrderItemReportDO::getTaskStatus, TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
+                        needUpdateReport.set(true);
+                    }
+                });
+
+        // 找最新的"审批人"节点的【同意】或【已阅】评论
+        comments.stream()
+                .filter(c -> c.getComment() != null
+                        && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
+                        && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
+                        && "审批人".equals(c.getNodeName()))
+                .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
+                .ifPresent(ratify -> {
+                    List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(ratify.getUserName()).getCheckedData();
+                    if (!userList.isEmpty()) {
+                        reportUpdateWrapper.set(BoilerTaskOrderItemReportDO::getRatifyId, userList.get(0).getId());
+                        reportUpdateWrapper.set(BoilerTaskOrderItemReportDO::getRatifyTime, ratify.getCreateDate());
+                        needUpdateReport.set(true);
+                    }
+                });
+
+        if (needUpdateReport.get()) {
+            taskOrderItemReportMapper.update(reportUpdateWrapper);
+        }
     }
 
     /**

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

@@ -1,6 +1,5 @@
 package cn.start.tz.module.pressure2.service.pipetaskorderitemreport;
 
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.start.tz.framework.common.exception.ErrorCode;
 import cn.start.tz.framework.common.pojo.CommonResult;
@@ -12,12 +11,8 @@ 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;
-import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
-import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
 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.pipetaskorder.PipeTaskOrderDO;
@@ -36,11 +31,9 @@ import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOACommentInfoR
 import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOACommentRes;
 import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOARes;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
-import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
 import cn.start.tz.module.pressure2.service.pipetaskorderissuereport.PipeTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.pushtaskorder.PushTaskOrderService;
 import cn.start.tz.module.pressure2.service.synchronization.SynchronizationService;
-import cn.start.tz.module.pressure2.service.synchronization.dto.ReportDto;
 import cn.start.tz.module.pressure2.service.taskordernontaxapply.TaskOrderNonTaxApplyService;
 import cn.start.tz.module.pressure2.service.taskordernontaxapply.vo.TaskOrderNonTaxApplyCreateVO;
 import cn.start.tz.module.system.api.user.AdminUserApi;
@@ -54,7 +47,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import jakarta.annotation.Resource;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
@@ -209,9 +201,12 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
 
     @Override
     public void updateReport() {
-        // 找出全部审核中的
+        // 找出全部审核中和审批中
         List<PipeTaskOrderItemReportDO> pipeTaskOrderItemReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
-                .eq(PipeTaskOrderItemReportDO::getTaskStatus, cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum.REPORT_APPROVAL.getStatus()).isNotNull(PipeTaskOrderItemReportDO::getSummaryId));
+                .in(PipeTaskOrderItemReportDO::getTaskStatus, List.of(
+                        cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum.REPORT_APPROVAL.getStatus(),
+                        cn.start.tz.module.pressure2.enums.TaskOrderStatusEnum.REPORT_RATIFY.getStatus()))
+                .isNotNull(PipeTaskOrderItemReportDO::getSummaryId));
         pipeTaskOrderItemReportDOS.parallelStream().forEach(pipeTaskOrderItemReportDO -> {
                     try {
                         log.info("开始处理,{}", pipeTaskOrderItemReportDO);
@@ -261,7 +256,11 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         );
         // 找到最新的一个记录
         PipeTaskOrderItemReportRecordDO latestRecord = pipeTaskOrderItemReportRecordDOS.isEmpty() ? null : pipeTaskOrderItemReportRecordDOS.get(0);
-        // 添加时间晚于最新的记录的记录
+        // 添加时间晚于最新的记录的记录,并实时更新审核/审批状态
+        AtomicBoolean needUpdateReport = new AtomicBoolean(false);
+        LambdaUpdateWrapper<PipeTaskOrderItemReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<>();
+        reportUpdateWrapper.eq(PipeTaskOrderItemReportDO::getId, pipeTaskOrderItemReportDO.getId());
+
         List<PipeTaskOrderItemReportRecordDO> newComments = comments.stream()
                 .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .map(comment -> {
@@ -289,6 +288,44 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                     return pipeTaskOrderItemReportRecordDO;
                 }).toList();
         pipeTaskOrderItemReportRecordMapper.insertBatch(newComments);
+
+        // 根据NODE_NAME实时更新报告的审核人/审批人信息
+        // 找最新的"审核人"节点的【同意】或【已阅】评论
+        comments.stream()
+                .filter(c -> c.getComment() != null
+                        && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
+                        && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
+                        && "审核人".equals(c.getNodeName()))
+                .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
+                .ifPresent(approval -> {
+                    List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(approval.getUserName()).getCheckedData();
+                    if (!userList.isEmpty()) {
+                        reportUpdateWrapper.set(PipeTaskOrderItemReportDO::getApprovalId, userList.get(0).getId());
+                        reportUpdateWrapper.set(PipeTaskOrderItemReportDO::getApprovalTime, approval.getCreateDate());
+                        reportUpdateWrapper.set(PipeTaskOrderItemReportDO::getTaskStatus, TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
+                        needUpdateReport.set(true);
+                    }
+                });
+
+        // 找最新的"审批人"节点的【同意】或【已阅】评论
+        comments.stream()
+                .filter(c -> c.getComment() != null
+                        && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
+                        && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
+                        && "审批人".equals(c.getNodeName()))
+                .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
+                .ifPresent(ratify -> {
+                    List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(ratify.getUserName()).getCheckedData();
+                    if (!userList.isEmpty()) {
+                        reportUpdateWrapper.set(PipeTaskOrderItemReportDO::getRatifyId, userList.get(0).getId());
+                        reportUpdateWrapper.set(PipeTaskOrderItemReportDO::getRatifyTime, ratify.getCreateDate());
+                        needUpdateReport.set(true);
+                    }
+                });
+
+        if (needUpdateReport.get()) {
+            taskOrderItemReportMapper.update(reportUpdateWrapper);
+        }
     }
 
     @Override