package com.ruoyi.system.utils; import com.ruoyi.system.domain.enums.TaskStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 任务状态转换工具类 * 用于新旧系统任务状态的映射转换 * * @author ruoyi * @date 2025-01-30 */ public class TaskStatusConverter { private static final Logger log = LoggerFactory.getLogger(TaskStatusConverter.class); /** * 将旧系统状态码转换为新系统TaskStatus * * 映射规则: * 0,1,2,3 -> PENDING (待处理) * 4 -> DEPARTING (出发中) * 5 -> ARRIVED (已到达) * 6 -> IN_PROGRESS (任务中) * 7 -> RETURNING (返程中) * 8,9 -> COMPLETED (已完成) * * 注意:状态码 > 10 的不进行同步(审核类、驻点等由新系统自行管理) * * @param legacyStatusCode 旧系统状态码 * @return 新系统TaskStatus,状态码>=10或未知状态返回null */ public static TaskStatus convertFromLegacyStatus(Integer legacyStatusCode) { if (legacyStatusCode == null) { log.warn("旧系统状态码为空"); return null; } // 状态码 > 10 的不进行同步 if (legacyStatusCode > 10) { log.debug("旧系统状态码 > 10,不进行同步: {} ({})", legacyStatusCode, getLegacyStatusDescription(legacyStatusCode)); return null; } switch (legacyStatusCode) { case 0: // 新调度单(未下发) case 1: // 完全未确认 case 2: // 部分已确认 case 3: // 未出车 return TaskStatus.PENDING; case 4: // 已出车(去接患者途中) return TaskStatus.DEPARTING; case 5: // 已出车(等待患者) return TaskStatus.ARRIVED; case 6: // 已出车(服务中) return TaskStatus.IN_PROGRESS; case 7: // 已送达(回程中) return TaskStatus.RETURNING; case 8: // 已返回 case 9: // 跑空单,已返回 return TaskStatus.COMPLETED; case 10: return TaskStatus.CANCELLED; default: log.warn("未知的旧系统状态码: {}", legacyStatusCode); return null; } } /** * 将新系统TaskStatus转换为旧系统状态码 * 注意:由于多对一的映射关系,这里返回的是最常用的状态码 * * @param taskStatus 新系统TaskStatus * @return 旧系统状态码,未知状态返回null */ public static Integer convertToLegacyStatus(TaskStatus taskStatus) { if (taskStatus == null) { log.warn("新系统任务状态为空"); return null; } switch (taskStatus) { case PENDING: return 3; // 未出车 case DEPARTING: return 4; // 已出车(去接患者途中) case ARRIVED: return 5; // 已出车(等待患者) case IN_PROGRESS: return 6; // 已出车(服务中) case RETURNING: return 7; // 已送达(回程中) case COMPLETED: return 8; // 已返回 case CANCELLED: return 10; // 取消 default: log.warn("未知的新系统任务状态: {}", taskStatus); return null; } } /** * 获取旧系统状态码的描述 * * @param legacyStatusCode 旧系统状态码 * @return 状态描述 */ public static String getLegacyStatusDescription(Integer legacyStatusCode) { if (legacyStatusCode == null) { return "未知状态"; } switch (legacyStatusCode) { case 0: return "新调度单(未下发)"; case 1: return "完全未确认"; case 2: return "部分已确认"; case 3: return "未出车"; case 4: return "已出车(去接患者途中)"; case 5: return "已出车(等待患者)"; case 6: return "已出车(服务中)"; case 7: return "已送达(回程中)"; case 8: return "已返回"; case 9: return "跑空单,已返回"; case 10: return "取消"; case 11: return "已提交,等待审核"; case 12: return "审核完成"; case 13: return "审核不通过"; case 14: return "已驻点"; default: return "未知状态(" + legacyStatusCode + ")"; } } }