Browse Source

Agv Event 体系

master
修宁 6 months ago
parent
commit
0cbe63d635
  1. 75
      servo/src/main/java/com/galaxis/rcs/common/entity/RcsTaskBiz.java
  2. 118
      servo/src/main/java/com/galaxis/rcs/common/entity/RcsTaskPlan.java
  3. 25
      servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java
  4. 4
      servo/src/main/java/com/galaxis/rcs/ptr/AmrMessageHandler.java
  5. 14
      servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java

75
servo/src/main/java/com/galaxis/rcs/common/entity/RcsTaskBiz.java

@ -1,44 +1,85 @@
package com.galaxis.rcs.common.entity; package com.galaxis.rcs.common.entity;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
* (rcs_task_biz) * (rcs_task_biz)
*/ */
@Data @Getter
@Setter
public class RcsTaskBiz implements Serializable { public class RcsTaskBiz implements Serializable {
/** */ /**
*
*/
private Long bizTaskId; private Long bizTaskId;
/** 环境ID */ /**
* 环境ID
*/
private Long envId; private Long envId;
/** 任务类型 */ /**
* 任务类型
*/
private String bizType; private String bizType;
/** 托盘ID */ /**
* 托盘ID
*/
private String lpn; private String lpn;
/** 任务优先级 */ /**
* 任务优先级
*/
private Integer priority; private Integer priority;
/** 任务起始点 */ /**
* 任务起始点
*/
private String taskFrom; private String taskFrom;
/** 任务目标点 */ /**
* 任务目标点
*/
private String taskTo; private String taskTo;
/** 系统分配的执行器ID */ /**
* 系统分配的执行器ID
*/
private String allocatedExecutorId; private String allocatedExecutorId;
/** 任务负载信息 */ /**
* 任务负载信息
*/
private String bizTaskPayload; private String bizTaskPayload;
/** 异常提示信息 */ /**
* 异常提示信息
*/
private String bizTaskErrorInfo; private String bizTaskErrorInfo;
/** 任务描述 */ /**
* 任务描述
*/
private String bizTaskDescription; private String bizTaskDescription;
/** 任务状态 */ /**
* 任务状态
*/
private String bizTaskStatus; private String bizTaskStatus;
/** 创建时间 */ /**
* 创建时间
*/
private Date createAt; private Date createAt;
/** 创建人 */ /**
* 创建人
*/
private String createBy; private String createBy;
/** 更新时间 */ /**
* 更新时间
*/
private Date updateAt; private Date updateAt;
/** 更新人 */ /**
* 更新人
*/
private String updateBy; private String updateBy;
@Override
public String toString() {
return "RcsTaskBiz(" + bizTaskId + ", executor='" + allocatedExecutorId + ", status='" + bizTaskStatus + ")";
}
} }

118
servo/src/main/java/com/galaxis/rcs/common/entity/RcsTaskPlan.java

@ -1,6 +1,10 @@
package com.galaxis.rcs.common.entity; package com.galaxis.rcs.common.entity;
import com.galaxis.rcs.common.enums.PlanTaskType;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@ -8,46 +12,118 @@ import java.util.Date;
/** /**
* (rcs_task_plan) * (rcs_task_plan)
*/ */
@Data @Getter
@Setter
public class RcsTaskPlan implements Serializable { public class RcsTaskPlan implements Serializable {
/** 规划ID */ /**
* 规划ID
*/
private Long planTaskId; private Long planTaskId;
/** 业务任务ID */ /**
* 业务任务ID
*/
private Long bizTaskId; private Long bizTaskId;
/** 环境ID */ /**
* 环境ID
*/
private Long envId; private Long envId;
/** 规划类型 */ /**
* 规划类型
*/
private String planType; private String planType;
/** 执行器ID */ /**
* 执行器ID
*/
private String executorId; private String executorId;
/** 规划序号 */ /**
* 规划序号
*/
private Integer seq; private Integer seq;
/** 目标点ID */ /**
* 目标点ID
*/
private String targetId; private String targetId;
/** 目标点货架列 */ /**
* 目标点货架列
*/
private Integer targetBay; private Integer targetBay;
/** 目标点货架层 */ /**
* 目标点货架层
*/
private Integer targetLevel; private Integer targetLevel;
/** 目标点货架格 */ /**
* 目标点货架格
*/
private Integer targetCell; private Integer targetCell;
/** 目标点旋转角度 */ /**
* 目标点旋转角度
*/
private BigDecimal targetRotation; private BigDecimal targetRotation;
/** 背负托盘ID */ /**
* 背负托盘ID
*/
private String loadLpn; private String loadLpn;
/** 任务负载信息 */ /**
* 任务负载信息
*/
private String planTaskPayload; private String planTaskPayload;
/** 规划执行状态 */ /**
* 规划执行状态
*/
private String planTaskStatus; private String planTaskStatus;
/** 异常提示信息 */ /**
* 异常提示信息
*/
private String planTaskErrorInfo; private String planTaskErrorInfo;
/** 任务描述 */ /**
* 任务描述
*/
private String planTaskDescription; private String planTaskDescription;
/** 创建时间 */ /**
* 创建时间
*/
private Date createAt; private Date createAt;
/** 创建人 */ /**
* 创建人
*/
private String createBy; private String createBy;
/** 更新时间 */ /**
* 更新时间
*/
private Date updateAt; private Date updateAt;
/** 更新人 */ /**
* 更新人
*/
private String updateBy; private String updateBy;
@Override
public String toString() {
var task = this;
String taskStr = "UNKNOWN:" + task.getPlanType();
switch (PlanTaskType.valueOf(task.getPlanType())) {
case MOVE:
taskStr = "MOVE " + task.getTargetId();
break;
case MOVE_BACKWARD:
taskStr = "MOVE_BACKWARD " + task.getTargetId();
break;
case CHARGE:
taskStr = "CHARGE " + 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;
}
taskStr = taskStr + " STATE:" + task.getPlanTaskStatus();
return taskStr;
}
} }

25
servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java

@ -5,6 +5,7 @@ import com.galaxis.rcs.common.entity.RcsTaskBiz;
import com.galaxis.rcs.common.entity.RcsTaskPlan; import com.galaxis.rcs.common.entity.RcsTaskPlan;
import com.galaxis.rcs.common.enums.PlanTaskStatus; import com.galaxis.rcs.common.enums.PlanTaskStatus;
import com.galaxis.rcs.common.enums.PlanTaskType; import com.galaxis.rcs.common.enums.PlanTaskType;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.yvan.logisticsModel.LogisticsRuntime; import com.yvan.logisticsModel.LogisticsRuntime;
@ -159,6 +160,15 @@ public class PlanTaskSequence {
return jw.getInnerMap(); return jw.getInnerMap();
} }
@Override
public String toString() {
List<String> list = Lists.newArrayList();
for (RcsTaskPlan task : taskList) {
list.add(task.toString());
}
return "PlanTaskSequence [biz=" + this.bizTask.toString() + "] taskList:" + Joiner.on("\n").join(list);
}
/** /**
* 是不是所有的任务都完成了 * 是不是所有的任务都完成了
*/ */
@ -184,21 +194,6 @@ public class PlanTaskSequence {
return null; return null;
} }
@SneakyThrows
public void savePlanTask(RcsTaskPlan planTask) {
//TODO: 保存数据库
var jw = new JsonWrapper(planTask);
jw.set("isAllCompleted", this.isAllCompleted());
var list = Splitter.on("\n").splitToList(jw.toString());
String[] ar = new String[list.size()];
list.toArray(ar);
// log.info("3-Received message: " + json);
BannerUtils.printConfig(log, "保存业务任务 planTask", ar);
}
public boolean isEmpty() { public boolean isEmpty() {
return this.taskList.isEmpty(); return this.taskList.isEmpty();
} }

4
servo/src/main/java/com/galaxis/rcs/ptr/AmrMessageHandler.java

@ -136,7 +136,7 @@ public class AmrMessageHandler {
String[] ar = new String[list.size()]; String[] ar = new String[list.size()];
list.toArray(ar); list.toArray(ar);
// log.info("3-Received message: " + json); // log.info("3-Received message: " + json);
BannerUtils.printConfig(log, "MQTT 收到报文 [" + id + "] ArmMessageType." + ArmMessageType.fromValue(id) + " - " + ArmMessageType.fromValue(id).description, ar); // BannerUtils.printConfig(log, "MQTT 收到报文 [" + id + "] ArmMessageType." + ArmMessageType.fromValue(id) + " - " + ArmMessageType.fromValue(id).description, ar);
} }
AmrMessage<?> amrMessage = null; AmrMessage<?> amrMessage = null;
@ -210,7 +210,7 @@ public class AmrMessageHandler {
var list = Splitter.on("\n").splitToList(new JsonWrapper(payload).toString()); var list = Splitter.on("\n").splitToList(new JsonWrapper(payload).toString());
String[] ar = new String[list.size()]; String[] ar = new String[list.size()];
list.toArray(ar); list.toArray(ar);
BannerUtils.printConfig(log, "MQTT 发送报文 [" + id + "] RcsMessageType." + RcsMessageType.fromValue(id) + " - " + RcsMessageType.fromValue(id).description, ar); // BannerUtils.printConfig(log, "MQTT 发送报文 [" + id + "] RcsMessageType." + RcsMessageType.fromValue(id) + " - " + RcsMessageType.fromValue(id).description, ar);
} }
log.debug("发送消息: {}", payload); log.debug("发送消息: {}", payload);
ptrMqttClient.publish(topic, payload); ptrMqttClient.publish(topic, payload);

14
servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java

@ -18,6 +18,7 @@ import com.yvan.logisticsModel.LogisticsRuntime;
import com.yvan.logisticsModel.StaticItem; import com.yvan.logisticsModel.StaticItem;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.clever.core.Conv;
import org.clever.data.redis.Redis; import org.clever.data.redis.Redis;
import org.clever.data.redis.RedisAdmin; import org.clever.data.redis.RedisAdmin;
@ -243,9 +244,10 @@ public abstract class PtrAgvItem extends ExecutorItem {
for (PtrAgvDeviceTask task : runningDeviceTaskList) { for (PtrAgvDeviceTask task : runningDeviceTaskList) {
task.taskGroupStatus = taskStatus; task.taskGroupStatus = taskStatus;
if (taskStatus == 4) { if (taskStatus == 4) {
if (task.taskStatus != 4) {
this.runtime.eventManager.fireDeviceTaskCompleteEvent(this, task); this.runtime.eventManager.fireDeviceTaskCompleteEvent(this, task);
task.taskStatus = 4; task.taskStatus = 4;
}
// 更新计划任务 // 更新计划任务
List<RcsTaskPlan> planTaskList = planTaskSequence.taskList.stream().filter(pt -> task.movePlanTaskId.equals(pt.getPlanTaskId()) || task.planTaskIdSet.contains(pt.getPlanTaskId())).toList(); List<RcsTaskPlan> planTaskList = planTaskSequence.taskList.stream().filter(pt -> task.movePlanTaskId.equals(pt.getPlanTaskId()) || task.planTaskIdSet.contains(pt.getPlanTaskId())).toList();
@ -253,9 +255,9 @@ public abstract class PtrAgvItem extends ExecutorItem {
if (PlanTaskStatus.FINISHED.toString().equals(planTask.getPlanTaskStatus())) { if (PlanTaskStatus.FINISHED.toString().equals(planTask.getPlanTaskStatus())) {
continue; continue;
} }
this.runtime.eventManager.firePlanTaskCompleteEvent(this, planTaskSequence, planTask);
planTask.setPlanTaskStatus(PlanTaskStatus.FINISHED.toString()); planTask.setPlanTaskStatus(PlanTaskStatus.FINISHED.toString());
planTaskSequence.savePlanTask(planTask); this.runtime.eventManager.firePlanTaskCompleteEvent(this, planTaskSequence, planTask);
} }
} }
} }
@ -393,7 +395,7 @@ public abstract class PtrAgvItem extends ExecutorItem {
statusMap.put("direction", String.valueOf(direction)); statusMap.put("direction", String.valueOf(direction));
statusMap.put("orientation", String.valueOf(orientation)); statusMap.put("orientation", String.valueOf(orientation));
statusMap.put("soc", this.battery == null ? "-1" : String.valueOf(this.battery.SOC)); statusMap.put("soc", this.battery == null ? "-1" : String.valueOf(this.battery.SOC));
statusMap.put("mode", this.__taskMode.toString()); statusMap.put("mode", Conv.asString(this.__taskMode));
statusMap.put("taskStatus", getTaskStatus()); statusMap.put("taskStatus", getTaskStatus());
redis.hPutAll(statusKey, statusMap); redis.hPutAll(statusKey, statusMap);

Loading…
Cancel
Save