package com.algo.model; import java.util.Objects; /** * 任务分配结果数据模型 * 包含任务分配的完整结果信息 */ public class TaskAssignment { /** * 任务ID */ private String taskId; /** * 分配的AGV编号 */ private String agvId; /** * 片段ID,格式:任务编号_AGV编号_序号 */ private String segId; /** * 使用的背篓编号 */ private String lev; /** * 动作类型:take取货 put放货 */ private String type; // 动作类型常量 public static final String TYPE_TAKE = "take"; // 取货 public static final String TYPE_PUT = "put"; // 放货 // 构造函数 public TaskAssignment() { } public TaskAssignment(String taskId, String agvId, String segId, String lev, String type) { this.taskId = taskId; this.agvId = agvId; this.segId = segId; this.lev = lev; this.type = type; } // 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 getSegId() { return segId; } public void setSegId(String segId) { this.segId = segId; } public String getLev() { return lev; } public void setLev(String lev) { this.lev = lev; } public String getType() { return type; } public void setType(String type) { this.type = type; } /** * 生成片段ID * * @param taskId 任务ID * @param agvId AGV编号 * @param sequence 序号(1表示取货,2表示放货) * @return 片段ID */ public static String generateSegId(String taskId, String agvId, int sequence) { if (sequence == 1) { return taskId + "_" + agvId + "_pickup"; } else if (sequence == 2) { return taskId + "_" + agvId + "_delivery"; } return taskId + "_" + agvId + "_" + sequence; } /** * 检查是否为取货任务 * * @return true如果是取货任务 */ public boolean isTakeTask() { return TYPE_TAKE.equals(type); } /** * 检查是否为放货任务 * * @return true如果是放货任务 */ public boolean isPutTask() { return TYPE_PUT.equals(type); } /** * 解析片段ID获取序号 * * @return 序号,如果解析失败返回0 */ public int parseSequenceFromSegId() { if (segId == null || segId.trim().isEmpty()) { return 0; } try { String[] parts = segId.split("_"); if (parts.length >= 3) { return Integer.parseInt(parts[2]); } } catch (NumberFormatException e) { // 忽略解析错误 } return 0; } /** * 验证任务分配结果是否有效 * * @return true如果有效 */ public boolean isValid() { return taskId != null && !taskId.trim().isEmpty() && agvId != null && !agvId.trim().isEmpty() && segId != null && !segId.trim().isEmpty() && lev != null && !lev.trim().isEmpty() && type != null && (TYPE_TAKE.equals(type) || TYPE_PUT.equals(type)); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TaskAssignment that = (TaskAssignment) o; return Objects.equals(taskId, that.taskId) && Objects.equals(agvId, that.agvId) && Objects.equals(segId, that.segId); } @Override public int hashCode() { return Objects.hash(taskId, agvId, segId); } @Override public String toString() { return "TaskAssignment{" + "taskId='" + taskId + '\'' + ", agvId='" + agvId + '\'' + ", segId='" + segId + '\'' + ", lev='" + lev + '\'' + ", type='" + type + '\'' + '}'; } }