wlzboy
9 小时以前 5f2ee03958a1a16dc27195c76ea7cffb422c95d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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 + ")";
        }
    }
}