| | |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import com.ruoyi.system.domain.enums.TaskStatus; |
| | | import com.ruoyi.system.event.TaskStatusChangedEvent; |
| | | import com.ruoyi.system.mapper.DispatchOrdMapper; |
| | | import com.ruoyi.system.mapper.LegacyTransferSyncMapper; |
| | | import com.ruoyi.system.mapper.SysDictDataMapper; |
| | | import com.ruoyi.system.mapper.SysTaskEmergencyMapper; |
| | | import com.ruoyi.system.mapper.SysTaskMapper; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | | private DispatchOrdMapper dispatchOrdMapper; |
| | | |
| | | @Autowired |
| | | private SysDictDataMapper sysDictDataMapper; |
| | | |
| | | /** |
| | | * 监听任务状态变更事件 |
| | |
| | | log.debug("任务状态不需要同步到旧系统,任务ID: {}, 状态: {}", |
| | | event.getTaskId(), newTaskStatus.getInfo()); |
| | | return; |
| | | } |
| | | |
| | | // 如果是取消状态,同步取消原因到DispatchOrd表 |
| | | if (TaskStatus.CANCELLED.equals(newTaskStatus) && emergency.getCancelReason() != null) { |
| | | syncCancelReasonToDispatchOrd(emergency.getLegacyDispatchOrdId(), emergency.getCancelReason()); |
| | | } |
| | | |
| | | // 插入状态变更记录到DispatchOrd_Running表 |
| | |
| | | // 不抛出异常,避免影响主流程 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 同步取消原因到DispatchOrd表 |
| | | * |
| | | * @param dispatchOrdId 调度单ID |
| | | * @param cancelReason 取消原因(字典value) |
| | | */ |
| | | private void syncCancelReasonToDispatchOrd(Long dispatchOrdId, String cancelReason) { |
| | | try { |
| | | if (cancelReason == null || cancelReason.isEmpty()) { |
| | | log.debug("取消原因为空,跳过同步,DispatchOrdID: {}", dispatchOrdId); |
| | | return; |
| | | } |
| | | |
| | | // 将cancelReason(字典value)转换为Integer |
| | | Integer cancelReasonId = null; |
| | | try { |
| | | cancelReasonId = Integer.valueOf(cancelReason); |
| | | } catch (NumberFormatException e) { |
| | | log.error("取消原因格式错误,无法转换为数字,cancelReason: {}, DispatchOrdID: {}", cancelReason, dispatchOrdId); |
| | | return; |
| | | } |
| | | |
| | | // 从数据字典中查询取消原因文本 |
| | | String cancelReasonText = sysDictDataMapper.selectDictLabel("task_cancel_reason", cancelReason); |
| | | if (cancelReasonText == null || cancelReasonText.isEmpty()) { |
| | | log.warn("未找到取消原因对应的文本,cancelReason: {}, DispatchOrdID: {}", cancelReason, dispatchOrdId); |
| | | cancelReasonText = cancelReason; // 使用原值作为预备 |
| | | } |
| | | |
| | | log.info("开始同步取消原因到DispatchOrd,DispatchOrdID: {}, 取消原因ID: {}, 取消原因文本: {}", |
| | | dispatchOrdId, cancelReasonId, cancelReasonText); |
| | | |
| | | // 调用Mapper更新DispatchOrd表 |
| | | int rows = dispatchOrdMapper.updateDispatchOrdCancelReason(dispatchOrdId, cancelReasonId, cancelReasonText); |
| | | |
| | | if (rows > 0) { |
| | | log.info("成功同步取消原因到DispatchOrd,DispatchOrdID: {}, 取消原因: {} ({})", |
| | | dispatchOrdId, cancelReasonText, cancelReasonId); |
| | | } else { |
| | | log.warn("同步取消原因失败,未找到对应的调度单,DispatchOrdID: {}", dispatchOrdId); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("同步取消原因到DispatchOrd异常,DispatchOrdID: {}, 取消原因: {}", |
| | | dispatchOrdId, cancelReason, e); |
| | | // 不抛出异常,避免影响主流程 |
| | | } |
| | | } |
| | | } |