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 = "15"; // 入库 public static final String TYPE_OUTBOUND = "16"; // 出库 public static final String TYPE_MOVE = "18"; // 移库 public static final String TYPE_STANDBY = "20"; // 去待机位 public static final String TYPE_CHARGE = "19"; // 充电 // 构造函数 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 + '\'' + '}'; } }