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 + ")";
|
}
|
}
|
}
|