wlzboy
2025-12-25 77b8624957ea9afafc81af72e52212c15b5f091e
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java
@@ -1,11 +1,14 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.common.config.LegacySystemConfig;
import com.ruoyi.common.utils.LongUtil;
import com.ruoyi.system.domain.SysTask;
import com.ruoyi.system.domain.SysTaskEmergency;
import com.ruoyi.system.domain.enums.TaskStatus;
import com.ruoyi.system.mapper.SysTaskMapper;
import com.ruoyi.system.service.IDispatchOrdService;
import com.ruoyi.system.service.IServiceOrderService;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysTaskEmergencyService;
import com.ruoyi.system.service.ITaskStatusPushService;
import com.ruoyi.system.utils.TaskStatusPushConverter;
@@ -41,6 +44,12 @@
    @Autowired
    private IDispatchOrdService dispatchOrdService;
    
    @Autowired
    private IServiceOrderService serviceOrderService;
    @Autowired
    private ISysDictDataService sysDictDataService;
    /**
     * 将单个任务状态推送到旧系统
     * 
@@ -48,7 +57,6 @@
     * @return 是否推送成功
     */
    @Override
    @Transactional
    public boolean pushTaskStatusToLegacy(Long taskId) {
        if (!legacyConfig.isEnabled()) {
//            log.info("旧系统同步已禁用,跳过状态推送,任务ID: {}", taskId);
@@ -93,8 +101,8 @@
            // 转换为旧系统状态码
            Integer targetStatusCode = TaskStatusPushConverter.convertToLegacyStatus(newTaskStatus);
            if (targetStatusCode == null) {
//                log.debug("【新推旧】任务状态不需要推送到旧系统,任务ID: {}, 状态: {}",
//                    taskId, newTaskStatus.getInfo());
                log.debug("【新推旧】任务状态不需要推送到旧系统,任务ID: {}, 状态: {}",
                    taskId, newTaskStatus.getInfo());
                return false;
            }
            
@@ -116,16 +124,21 @@
//                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus));
                return true; // 返回true,因为这不算失败,只是不需要推送
            }
            if(newTaskStatus.equals(TaskStatus.CANCELLED)){
                if(LongUtil.isNotEmpty(emergency.getLegacyServiceOrdId()) ) {
                    log.info("取消转运任务: {}", emergency.getLegacyServiceOrdId());
                    cancelTask(emergency.getLegacyServiceOrdId(), emergency.getCancelReason(), emergency.getCancelBy());
                }
            }
            // 推送状态到旧系统
            boolean result = updateLegacyTaskStatus(emergency.getLegacyDispatchOrdId(), targetStatusCode);
            
            if (!result) {
//                log.info("【新推旧】任务状态推送成功,任务ID: {}, DispatchOrdID: {}, 旧状态: {} ({}), 新状态: {} ({})",
//                    taskId, emergency.getLegacyDispatchOrdId(),
//                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus),
//                    targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode));
//            } else {
            if (result) {
                log.info("【新推旧】任务状态推送成功,任务ID: {}, DispatchOrdID: {}, 旧状态: {} ({}), 新状态: {} ({})",
                    taskId, emergency.getLegacyDispatchOrdId(),
                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus),
                    targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode));
            } else {
                log.error("【新推旧】任务状态推送失败,任务ID: {}, DispatchOrdID: {}",
                    taskId, emergency.getLegacyDispatchOrdId());
            }
@@ -205,7 +218,52 @@
            return 0;
        }
    }
    private void cancelTask(Long serviceOrderId, String cancelReason, String cancelBy){
        // 取消任务,更新SQL Server中的ServiceOrder表
        try {
            if (serviceOrderId == null || serviceOrderId <= 0) {
                log.warn("ServiceOrderID为空,无法取消任务");
                return;
            }
            // 解析取消原因ID
            Integer cancelReasonId = null;
            String cancelReasonText = "";
            if (cancelReason != null && !cancelReason.isEmpty()) {
                try {
                    cancelReasonId = Integer.parseInt(cancelReason);
                    // 从数据字典查询取消原因文本
                    String dictLabel = sysDictDataService.selectDictLabel("task_cancel_reason", cancelReason);
                    if (dictLabel != null && !dictLabel.isEmpty()) {
                        cancelReasonText = "[取消操作:" + (cancelBy != null ? cancelBy : "系统") + "] " + dictLabel;
                    } else {
                        cancelReasonText = "[取消操作:" + (cancelBy != null ? cancelBy : "系统") + "]";
                    }
                } catch (NumberFormatException e) {
                    log.warn("取消原因ID格式错误: {}", cancelReason);
                    cancelReasonText = "[取消操作:" + (cancelBy != null ? cancelBy : "系统") + "] " + cancelReason;
                }
            } else {
                cancelReasonText = "[取消操作:" + (cancelBy != null ? cancelBy : "系统") + "]";
            }
            // 调用Service更新ServiceOrder表
            int rows = serviceOrderService.updateServiceOrderCancelInfo(serviceOrderId, cancelReasonId, cancelReasonText);
            if (rows > 0) {
                log.info("成功更新旧系统ServiceOrder取消信息,ServiceOrdID: {}, 取消原因ID: {}, 取消原因文本: {}",
                    serviceOrderId, cancelReasonId, cancelReasonText);
            } else {
                log.warn("更新旧系统ServiceOrder取消信息失败,未找到对应订单,ServiceOrdID: {}", serviceOrderId);
            }
        } catch (Exception e) {
            log.error("更新旧系统ServiceOrder取消信息异常,ServiceOrdID: {}", serviceOrderId, e);
        }
    }
    /**
     * 更新旧系统调度单状态(直接操作SQL Server数据库)
     *