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 + '\'' +
|
'}';
|
}
|
}
|