台湾展会用
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

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();
}
}