1
zhang
2025-09-10 b1e74bb24e7785176e59699cfe8eb4f217c958c8
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
package com.algo.model;
 
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
 
/**
 * 任务数据模型
 * 包含任务的完整信息
 */
public class TaskData {
 
    /**
     * 任务ID
     */
    private String taskId;
 
    /**
     * AGV编号(仅充电任务和去待机位任务使用)
     */
    private String agvId;
 
    /**
     * 任务起点
     */
    private String start;
 
    /**
     * 任务终点
     */
    private String end;
 
    /**
     * 任务类型:1入库 2出库 3移库 4去待机位 5充电
     */
    private String type;
 
    /**
     * 任务优先级,越大优先级越高
     */
    private int priority;
 
    /**
     * 任务创建时间
     */
    private String taskTime;
 
    // 任务类型常量
    public static final String TYPE_INBOUND = "1";    // 入库
    public static final String TYPE_OUTBOUND = "2";   // 出库
    public static final String TYPE_MOVE = "3";       // 移库
    public static final String TYPE_STANDBY = "4";    // 去待机位
    public static final String TYPE_CHARGE = "5";     // 充电
 
    // 构造函数
    public TaskData() {
    }
 
    public TaskData(String taskId, String agvId, String start, String end,
                    String type, int priority, String taskTime) {
        this.taskId = taskId;
        this.agvId = agvId;
        this.start = start;
        this.end = end;
        this.type = type;
        this.priority = priority;
        this.taskTime = taskTime;
    }
 
    // Getter和Setter方法
    public String getTaskId() {
        return taskId;
    }
 
    public void setTaskId(String taskId) {
        this.taskId = taskId;
    }
 
    public String getAgvId() {
        return agvId;
    }
 
    public void setAgvId(String agvId) {
        this.agvId = agvId;
    }
 
    public String getStart() {
        return start;
    }
 
    public void setStart(String start) {
        this.start = start;
    }
 
    public String getEnd() {
        return end;
    }
 
    public void setEnd(String end) {
        this.end = end;
    }
 
    public String getType() {
        return type;
    }
 
    public void setType(String type) {
        this.type = type;
    }
 
    public int getPriority() {
        return priority;
    }
 
    public void setPriority(int priority) {
        this.priority = priority;
    }
 
    public String getTaskTime() {
        return taskTime;
    }
 
    public void setTaskTime(String taskTime) {
        this.taskTime = taskTime;
    }
 
    /**
     * 检查是否为运输任务(需要取货和送货)
     *
     * @return true如果是运输任务
     */
    public boolean isTransportTask() {
        return TYPE_INBOUND.equals(type) || TYPE_OUTBOUND.equals(type) || TYPE_MOVE.equals(type);
    }
 
    /**
     * 检查是否为充电任务
     *
     * @return true如果是充电任务
     */
    public boolean isChargeTask() {
        return TYPE_CHARGE.equals(type);
    }
 
    /**
     * 检查是否为去待机位任务
     *
     * @return true如果是去待机位任务
     */
    public boolean isStandbyTask() {
        return TYPE_STANDBY.equals(type);
    }
 
    /**
     * 检查是否为指定AGV的任务
     *
     * @return true如果是指定AGV的任务
     */
    public boolean isAssignedToAgv() {
        return agvId != null && !agvId.trim().isEmpty();
    }
 
    /**
     * 解析任务创建时间
     *
     * @return LocalDateTime对象
     */
    public LocalDateTime parseTaskTime() {
        if (taskTime == null || taskTime.trim().isEmpty()) {
            return null;
        }
 
        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            return LocalDateTime.parse(taskTime, formatter);
        } catch (Exception e) {
            return null;
        }
    }
 
    /**
     * 获取任务类型描述
     *
     * @return 任务类型描述
     */
    public String getTypeDescription() {
        switch (type) {
            case TYPE_INBOUND:
                return "入库";
            case TYPE_OUTBOUND:
                return "出库";
            case TYPE_MOVE:
                return "移库";
            case TYPE_STANDBY:
                return "去待机位";
            case TYPE_CHARGE:
                return "充电";
            default:
                return "未知任务类型";
        }
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TaskData taskData = (TaskData) o;
        return Objects.equals(taskId, taskData.taskId);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(taskId);
    }
 
    @Override
    public String toString() {
        return "TaskData{" +
                "taskId='" + taskId + '\'' +
                ", agvId='" + agvId + '\'' +
                ", start='" + start + '\'' +
                ", end='" + end + '\'' +
                ", type='" + type + '\'' +
                ", priority=" + priority +
                ", taskTime='" + taskTime + '\'' +
                '}';
    }