You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.9 KiB
138 lines
4.9 KiB
package com.galaxis.rcs.plan;
|
|
|
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
import com.galaxis.rcs.common.entity.RcsTaskBiz;
|
|
import com.galaxis.rcs.common.entity.RcsTaskPlan;
|
|
import com.galaxis.rcs.common.enums.PlanTaskStatus;
|
|
import com.galaxis.rcs.common.enums.PlanTaskType;
|
|
import com.google.common.collect.Lists;
|
|
import com.yvan.logisticsModel.LogisticsRuntime;
|
|
import org.clever.core.id.SnowFlake;
|
|
import org.clever.core.json.JsonWrapper;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class PlanTaskSequence {
|
|
@JsonIgnore
|
|
public static final SnowFlake snowFlake = new SnowFlake();
|
|
public final String executorId;
|
|
@JsonIgnore
|
|
public final LogisticsRuntime logisticsRuntime;
|
|
public final List<RcsTaskPlan> taskList = Lists.newArrayList();
|
|
public final RcsTaskBiz bizTask;
|
|
public final String createBy;
|
|
|
|
public String lastWayPointId;
|
|
public Float lastRotationAngle = null;
|
|
public boolean isFinished = false;
|
|
public String lastLoadLpn = "";
|
|
|
|
public PlanTaskSequence(String executorId, LogisticsRuntime logisticsRuntime, RcsTaskBiz bizTask, String createBy) {
|
|
this.executorId = executorId;
|
|
this.logisticsRuntime = logisticsRuntime;
|
|
this.bizTask = bizTask;
|
|
this.createBy = createBy;
|
|
}
|
|
|
|
private RcsTaskPlan createTaskPlanEntity(String planType) {
|
|
RcsTaskPlan planTask = new RcsTaskPlan();
|
|
planTask.setPlanTaskId(snowFlake.nextId());
|
|
planTask.setBizTaskId(this.bizTask.getBizTaskId());
|
|
planTask.setEnvId(logisticsRuntime.logisticsEnv.getEnvId());
|
|
planTask.setPlanType(planType);
|
|
planTask.setExecutorId(this.executorId);
|
|
planTask.setSeq(taskList.size());
|
|
planTask.setPlanTaskStatus(PlanTaskStatus.PENDING.toString());
|
|
planTask.setPlanTaskErrorInfo("N/A");
|
|
planTask.setPlanTaskDescription("N/A");
|
|
planTask.setCreateBy(createBy);
|
|
planTask.setCreateAt(new Date());
|
|
|
|
taskList.add(planTask);
|
|
return planTask;
|
|
}
|
|
|
|
// 添加移动到指定路标点的动作
|
|
public RcsTaskPlan addMoveTo(String waypointId) {
|
|
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.MOVE.toString());
|
|
task.setTargetId(waypointId);
|
|
this.lastWayPointId = waypointId;
|
|
return task;
|
|
}
|
|
|
|
// 添加旋转动作
|
|
public RcsTaskPlan addRotationTo(float rotationAngle) {
|
|
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.ROTATION.toString());
|
|
task.setTargetRotation(new BigDecimal(rotationAngle));
|
|
this.lastRotationAngle = rotationAngle;
|
|
return task;
|
|
}
|
|
|
|
// 添加取货动作
|
|
public RcsTaskPlan addLoad(String lpn, String rackId, int bay, int level, int cell) {
|
|
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.LOAD.toString());
|
|
task.setTargetId(rackId);
|
|
task.setTargetBay(bay);
|
|
task.setTargetLevel(level);
|
|
task.setTargetCell(cell);
|
|
this.lastLoadLpn = lpn;
|
|
return task;
|
|
}
|
|
|
|
// 添加放货动作
|
|
public RcsTaskPlan addUnload(String item, int level, int bay, int cell) {
|
|
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.UNLOAD.toString());
|
|
task.setTargetId(item);
|
|
task.setTargetBay(bay);
|
|
task.setTargetLevel(level);
|
|
task.setTargetCell(cell);
|
|
this.lastLoadLpn = "";
|
|
return task;
|
|
}
|
|
|
|
// 添加完成动作
|
|
public RcsTaskPlan addFinish() {
|
|
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.FINISH.toString());
|
|
this.isFinished = true;
|
|
return task;
|
|
}
|
|
|
|
/**
|
|
* 输出方便阅读的 Json 格式
|
|
*
|
|
* @return
|
|
*/
|
|
public Map<String, ?> toPrettyMap() {
|
|
JsonWrapper jw = new JsonWrapper();
|
|
jw.set("executorId", executorId);
|
|
jw.set("bizTask", bizTask);
|
|
List<String> list = Lists.newArrayList();
|
|
for (RcsTaskPlan task : taskList) {
|
|
String taskStr = "UNKNOWN:" + task.getPlanType();
|
|
switch (PlanTaskType.valueOf(task.getPlanType())) {
|
|
case MOVE:
|
|
taskStr = "MOVE " + task.getTargetId();
|
|
break;
|
|
case LOAD:
|
|
taskStr = "LOAD " + task.getTargetId() + "_" + task.getTargetBay() + "_" + task.getTargetLevel() + "_" + task.getTargetCell();
|
|
break;
|
|
case UNLOAD:
|
|
taskStr = "UNLOAD " + task.getTargetId() + "_" + task.getTargetBay() + "_" + task.getTargetLevel() + "_" + task.getTargetCell();
|
|
break;
|
|
case ROTATION:
|
|
taskStr = "Rotation " + task.getTargetRotation();
|
|
break;
|
|
case FINISH:
|
|
taskStr = "FINISH";
|
|
break;
|
|
}
|
|
|
|
list.add(taskStr);
|
|
}
|
|
jw.set("items", list);
|
|
return jw.getInnerMap();
|
|
}
|
|
}
|
|
|