Quellcode durchsuchen

feat(pressure2): 添加受理单和约检确认单检验员同步功能

- 引入PipeAcceptOrderUserDO和AcceptOrderDO数据对象及对应Mapper
- 在设备管路调度服务中注入受理单和约检确认单相关Mapper依赖
- 修改删除调度逻辑,仅当源ID为空时才更新设备调度状态
- 重构状态判断逻辑,优化任务状态映射规则
- 扩展同步检验员功能,支持同步到约检确认单和受理单
- 完善多单据类型的检验员同步机制,确保数据一致性
xuzhancheng vor 1 Woche
Ursprung
Commit
de76aaeaad

+ 85 - 38
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equippipescheduling/EquipPipeSchedulingServiceImpl.java

@@ -29,6 +29,8 @@ import cn.start.tz.module.pressure2.dal.dataobject.equippipeschedulinguser.Equip
 import cn.start.tz.module.pressure2.dal.dataobject.pipeappointmentconfirmorderitem.PipeAppointmentConfirmOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeappointmentconfirmorderitemdetail.PipeAppointmentConfirmOrderItemDetailDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeappointmentconfirmorderuser.PipeAppointmentConfirmOrderUserDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderuser.PipeAcceptOrderUserDO;
+import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderuser.PipeTaskOrderUserDO;
 import cn.start.tz.module.pressure2.dal.mysql.appointmentconfirmorder.AppointmentConfirmOrderMapper;
@@ -42,6 +44,8 @@ import cn.start.tz.module.pressure2.dal.mysql.equippipeschedulinguser.EquipPipeS
 import cn.start.tz.module.pressure2.dal.mysql.pipeappointmentconfirmorderitem.PipeAppointmentConfirmOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipeappointmentconfirmorderitemdetail.PipeAppointmentConfirmOrderItemDetailMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipeappointmentconfirmorderuser.PipeAppointmentConfirmOrderUserMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipeacceptorderuser.PipeAcceptOrderUserMapper;
+import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorder.BoilerTaskOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderuser.PipeTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.service.appointmentconfirmorder.AppointmentConfirmOrderService;
@@ -152,6 +156,10 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
     @Resource
     private PipeAppointmentConfirmOrderUserMapper pipeAppointmentConfirmOrderUserMapper;
     @Resource
+    private PipeAcceptOrderUserMapper pipeAcceptOrderUserMapper;
+    @Resource
+    private AcceptOrderMapper acceptOrderMapper;
+    @Resource
     private BoilerTaskOrderMapper boilerTaskOrderMapper;
     @Resource
     private PipeTaskOrderUserMapper pipeTaskOrderUserMapper;
@@ -598,12 +606,12 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
         Set<String> confirmOrderIds = new HashSet<>();
         deleteTask.getIds().forEach(scheduleId -> {
             EquipPipeSchedulingDO schedulingDO = equipPipeSchedulingMapper.selectById(scheduleId);
-            if (schedulingDO != null && schedulingDO.getConfirmOrderId() != null) {
+            confirmOrderIds.add(schedulingDO.getConfirmOrderId());
+            if (schedulingDO.getConfirmOrderId() != null && schedulingDO.getSourceId() == null) {
                 // 找出所有同 confirmOrderId 的子排期一起删除
                 List<EquipPipeSchedulingDO> childSchedulings = equipPipeSchedulingMapper.selectList(
                         new LambdaQueryWrapperX<EquipPipeSchedulingDO>()
                                 .eq(EquipPipeSchedulingDO::getConfirmOrderId, schedulingDO.getConfirmOrderId()));
-                confirmOrderIds.add(schedulingDO.getConfirmOrderId());
 
                 for (EquipPipeSchedulingDO child : childSchedulings) {
                     doDeleteSingleScheduling(child.getId());
@@ -631,7 +639,7 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
             equipPipeDO.setHasYearScheduling(false);
         }
 
-        if (!equipIds.isEmpty()) {
+        if (!equipIds.isEmpty() && schedulingDO.getSourceId() == null) {
             equipPipeMapper.update(equipPipeDO, new LambdaQueryWrapperX<EquipPipeDO>().in(EquipPipeDO::getId, equipIds));
         }
 
@@ -646,7 +654,7 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
             equipPipeDetailDO.setHasYearScheduling(false);
         }
 
-        if (!equipDetailIds.isEmpty()) {
+        if (!equipDetailIds.isEmpty() && schedulingDO.getSourceId() == null) {
             equipPipeDetailMapper.update(equipPipeDetailDO, new LambdaQueryWrapperX<EquipPipeDetailDO>().in(EquipPipeDetailDO::getId, equipDetailIds));
         }
 
@@ -1438,15 +1446,17 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
                     if (sourceItem.getAppointmentId() != null) {
                         status = 200; // 待约检
                     }
-                    if (sourceItem.getAcceptStatus() != null && sourceItem.getAcceptStatus() == 200) {
+                    if (sourceItem.getAcceptStatus() != null){
                         status = 300; // 已受理
                     }
-                    if (sourceItem.getTaskStatus() != null) {
+                    if (sourceItem.getTaskStatus() != null && sourceItem.getTaskStatus() >= 400) {
                         status = 400; // 检测中
+                    }
+
+                    // TaskStatusEnum: 710办结确认, 800报告办结
+                    if (status >= 400) {
                         if (sourceItem.getTaskStatus() >= 800) {
-                            status = 600;
-                        } else if (sourceItem.getTaskStatus() >= 710) {
-                            status = 500;
+                            status = 600; // 已办结
                         }
                     }
                 }
@@ -1698,32 +1708,32 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
         }
 
         // 7. 复制检验项目 EquipPipeSchedulingCheckDO
-        List<EquipPipeSchedulingCheckDO> sourceChecks = equipPipeSchedulingCheckMapper.selectList(
-                EquipPipeSchedulingCheckDO::getSchedulingId, sourceId);
-        if (sourceChecks != null && !sourceChecks.isEmpty()) {
-            List<EquipPipeSchedulingCheckDO> newChecks = new ArrayList<>();
-            for (EquipPipeSchedulingCheckDO sourceCheck : sourceChecks) {
-                EquipPipeSchedulingCheckDO newCheck = new EquipPipeSchedulingCheckDO();
-                cn.hutool.core.bean.BeanUtil.copyProperties(sourceCheck, newCheck, "id", "schedulingId", "createTime", "updateTime", "deleted", "taskOrderId", "acceptOrderId");
-                newCheck.setSchedulingId(newSchedulingId);
-                newChecks.add(newCheck);
-            }
-            equipPipeSchedulingCheckMapper.insert(newChecks);
-        }
-
-        // 8. 复制费用 EquipPipeSchedulingFeeDO
-        List<EquipPipeSchedulingFeeDO> sourceFees = equipPipeSchedulingFeeMapper.selectList(
-                EquipPipeSchedulingFeeDO::getSchedulingId, sourceId);
-        if (sourceFees != null && !sourceFees.isEmpty()) {
-            List<EquipPipeSchedulingFeeDO> newFees = new ArrayList<>();
-            for (EquipPipeSchedulingFeeDO sourceFee : sourceFees) {
-                EquipPipeSchedulingFeeDO newFee = new EquipPipeSchedulingFeeDO();
-                cn.hutool.core.bean.BeanUtil.copyProperties(sourceFee, newFee, "id", "schedulingId", "createTime", "updateTime", "deleted");
-                newFee.setSchedulingId(newSchedulingId);
-                newFees.add(newFee);
-            }
-            equipPipeSchedulingFeeMapper.insert(newFees);
-        }
+//        List<EquipPipeSchedulingCheckDO> sourceChecks = equipPipeSchedulingCheckMapper.selectList(
+//                EquipPipeSchedulingCheckDO::getSchedulingId, sourceId);
+//        if (sourceChecks != null && !sourceChecks.isEmpty()) {
+//            List<EquipPipeSchedulingCheckDO> newChecks = new ArrayList<>();
+//            for (EquipPipeSchedulingCheckDO sourceCheck : sourceChecks) {
+//                EquipPipeSchedulingCheckDO newCheck = new EquipPipeSchedulingCheckDO();
+//                cn.hutool.core.bean.BeanUtil.copyProperties(sourceCheck, newCheck, "id", "schedulingId", "createTime", "updateTime", "deleted", "taskOrderId", "acceptOrderId");
+//                newCheck.setSchedulingId(newSchedulingId);
+//                newChecks.add(newCheck);
+//            }
+//            equipPipeSchedulingCheckMapper.insert(newChecks);
+//        }
+//
+//        // 8. 复制费用 EquipPipeSchedulingFeeDO
+//        List<EquipPipeSchedulingFeeDO> sourceFees = equipPipeSchedulingFeeMapper.selectList(
+//                EquipPipeSchedulingFeeDO::getSchedulingId, sourceId);
+//        if (sourceFees != null && !sourceFees.isEmpty()) {
+//            List<EquipPipeSchedulingFeeDO> newFees = new ArrayList<>();
+//            for (EquipPipeSchedulingFeeDO sourceFee : sourceFees) {
+//                EquipPipeSchedulingFeeDO newFee = new EquipPipeSchedulingFeeDO();
+//                cn.hutool.core.bean.BeanUtil.copyProperties(sourceFee, newFee, "id", "schedulingId", "createTime", "updateTime", "deleted");
+//                newFee.setSchedulingId(newSchedulingId);
+//                newFees.add(newFee);
+//            }
+//            equipPipeSchedulingFeeMapper.insert(newFees);
+//        }
 
         // 9. 创建新检验员数据
         List<EquipPipeSchedulingUserDO> newUsers = new ArrayList<>();
@@ -1761,7 +1771,7 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
     }
 
     /**
-     * 同步任务单检验员:收集同一 confirmOrderId 下所有排期的检验员,去重后重建到任务
+     * 同步任务单、约检确认单、受理单检验员:收集同一 confirmOrderId 下所有排期的检验员,去重后重建到
      */
     private void syncTaskOrderUsers(String confirmOrderId) {
         if (confirmOrderId == null || confirmOrderId.isEmpty()) {
@@ -1791,7 +1801,44 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
             }
         }
 
-        // 3. 找到任务单:通过第一个有约检确认单的排期查找
+        // 3. 同步约检确认单用户(confirmOrderId 即约检确认单ID)
+        pipeAppointmentConfirmOrderUserMapper.delete(new LambdaQueryWrapperX<PipeAppointmentConfirmOrderUserDO>()
+                .eq(PipeAppointmentConfirmOrderUserDO::getOrderId, confirmOrderId));
+        if (!dedupedUsers.isEmpty()) {
+            List<PipeAppointmentConfirmOrderUserDO> confirmOrderUsers = dedupedUsers.stream().map(user -> {
+                PipeAppointmentConfirmOrderUserDO confirmUser = new PipeAppointmentConfirmOrderUserDO();
+                confirmUser.setOrderId(confirmOrderId);
+                confirmUser.setUserId(user.getUserId());
+                confirmUser.setType(user.getType());
+                confirmUser.setGroupTeamId(user.getGroupTeamId());
+                return confirmUser;
+            }).collect(Collectors.toList());
+            pipeAppointmentConfirmOrderUserMapper.insert(confirmOrderUsers);
+        }
+
+        // 4. 同步受理单用户(通过 appointmentId = confirmOrderId 查找受理单)
+        List<AcceptOrderDO> acceptOrders = acceptOrderMapper.selectList(
+                new LambdaQueryWrapperX<AcceptOrderDO>()
+                        .eq(AcceptOrderDO::getAppointmentId, confirmOrderId));
+        if (acceptOrders != null && !acceptOrders.isEmpty()) {
+            for (AcceptOrderDO acceptOrder : acceptOrders) {
+                pipeAcceptOrderUserMapper.delete(new LambdaQueryWrapperX<PipeAcceptOrderUserDO>()
+                        .eq(PipeAcceptOrderUserDO::getOrderId, acceptOrder.getId()));
+                if (!dedupedUsers.isEmpty()) {
+                    List<PipeAcceptOrderUserDO> acceptOrderUsers = dedupedUsers.stream().map(user -> {
+                        PipeAcceptOrderUserDO acceptUser = new PipeAcceptOrderUserDO();
+                        acceptUser.setOrderId(acceptOrder.getId());
+                        acceptUser.setUserId(user.getUserId());
+                        acceptUser.setType(user.getType());
+                        acceptUser.setGroupTeamId(user.getGroupTeamId());
+                        return acceptUser;
+                    }).collect(Collectors.toList());
+                    pipeAcceptOrderUserMapper.insert(acceptOrderUsers);
+                }
+            }
+        }
+
+        // 5. 同步任务单用户(通过排期查找任务单)
         BoilerTaskOrderDO taskOrder = null;
         for (EquipPipeSchedulingDO scheduling : schedulings) {
             List<AppointmentConfirmOrderDO> appointments = appointmentConfirmOrderMapper.selectList(
@@ -1810,7 +1857,7 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
             return;
         }
 
-        // 4. 删除任务单现有检验员,重建
+        // 6. 删除任务单现有检验员,重建
         pipeTaskOrderUserMapper.delete(new LambdaQueryWrapperX<PipeTaskOrderUserDO>()
                 .eq(PipeTaskOrderUserDO::getOrderId, taskOrder.getId()));