Browse Source

Merge remote-tracking branch 'origin/master'

master
yuliang 6 months ago
parent
commit
3cce80d32c
  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. 38
      servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java
  6. 16
      servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java

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

@ -1,44 +1,85 @@
package com.galaxis.rcs.common.entity;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
* (rcs_task_biz)
*/
@Data
@Getter
@Setter
public class RcsTaskBiz implements Serializable {
/** */
/**
*
*/
private Long bizTaskId;
/** 环境ID */
/**
* 环境ID
*/
private Long envId;
/** 任务类型 */
/**
* 任务类型
*/
private String bizType;
/** 托盘ID */
/**
* 托盘ID
*/
private String lpn;
/** 任务优先级 */
/**
* 任务优先级
*/
private Integer priority;
/** 任务起始点 */
/**
* 任务起始点
*/
private String taskFrom;
/** 任务目标点 */
/**
* 任务目标点
*/
private String taskTo;
/** 系统分配的执行器ID */
/**
* 系统分配的执行器ID
*/
private String allocatedExecutorId;
/** 任务负载信息 */
/**
* 任务负载信息
*/
private String bizTaskPayload;
/** 异常提示信息 */
/**
* 异常提示信息
*/
private String bizTaskErrorInfo;
/** 任务描述 */
/**
* 任务描述
*/
private String bizTaskDescription;
/** 任务状态 */
/**
* 任务状态
*/
private String bizTaskStatus;
/** 创建时间 */
/**
* 创建时间
*/
private Date createAt;
/** 创建人 */
/**
* 创建人
*/
private String createBy;
/** 更新时间 */
/**
* 更新时间
*/
private Date updateAt;
/** 更新人 */
/**
* 更新人
*/
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;
import com.galaxis.rcs.common.enums.PlanTaskType;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@ -8,46 +12,118 @@ import java.util.Date;
/**
* (rcs_task_plan)
*/
@Data
@Getter
@Setter
public class RcsTaskPlan implements Serializable {
/** 规划ID */
/**
* 规划ID
*/
private Long planTaskId;
/** 业务任务ID */
/**
* 业务任务ID
*/
private Long bizTaskId;
/** 环境ID */
/**
* 环境ID
*/
private Long envId;
/** 规划类型 */
/**
* 规划类型
*/
private String planType;
/** 执行器ID */
/**
* 执行器ID
*/
private String executorId;
/** 规划序号 */
/**
* 规划序号
*/
private Integer seq;
/** 目标点ID */
/**
* 目标点ID
*/
private String targetId;
/** 目标点货架列 */
/**
* 目标点货架列
*/
private Integer targetBay;
/** 目标点货架层 */
/**
* 目标点货架层
*/
private Integer targetLevel;
/** 目标点货架格 */
/**
* 目标点货架格
*/
private Integer targetCell;
/** 目标点旋转角度 */
/**
* 目标点旋转角度
*/
private BigDecimal targetRotation;
/** 背负托盘ID */
/**
* 背负托盘ID
*/
private String loadLpn;
/** 任务负载信息 */
/**
* 任务负载信息
*/
private String planTaskPayload;
/** 规划执行状态 */
/**
* 规划执行状态
*/
private String planTaskStatus;
/** 异常提示信息 */
/**
* 异常提示信息
*/
private String planTaskErrorInfo;
/** 任务描述 */
/**
* 任务描述
*/
private String planTaskDescription;
/** 创建时间 */
/**
* 创建时间
*/
private Date createAt;
/** 创建人 */
/**
* 创建人
*/
private String createBy;
/** 更新时间 */
/**
* 更新时间
*/
private Date updateAt;
/** 更新人 */
/**
* 更新人
*/
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.enums.PlanTaskStatus;
import com.galaxis.rcs.common.enums.PlanTaskType;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.yvan.logisticsModel.LogisticsRuntime;
@ -159,6 +160,15 @@ public class PlanTaskSequence {
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;
}
@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() {
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()];
list.toArray(ar);
// 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;
@ -210,7 +210,7 @@ public class AmrMessageHandler {
var list = Splitter.on("\n").splitToList(new JsonWrapper(payload).toString());
String[] ar = new String[list.size()];
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);
ptrMqttClient.publish(topic, payload);

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

@ -12,16 +12,13 @@ import com.galaxis.rcs.ptr.receiveEntity.base.CurBatteryData;
import com.galaxis.rcs.ptr.sendEntity.RcsConfigMessage;
import com.galaxis.rcs.ptr.sendEntity.RcsSRMessage;
import com.galaxis.rcs.ptr.sendEntity.RcsSetLocationMessage;
import com.google.common.base.Joiner;
import com.google.common.collect.Queues;
import com.yvan.LccUtils;
import com.yvan.event.AgvEventType;
import com.yvan.logisticsModel.ExecutorItem;
import com.yvan.logisticsModel.LogisticsRuntime;
import com.yvan.logisticsModel.StaticItem;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.clever.core.BannerUtils;
import org.clever.core.Conv;
import org.clever.data.redis.Redis;
import org.clever.data.redis.RedisAdmin;
@ -247,9 +244,10 @@ public abstract class PtrAgvItem extends ExecutorItem {
for (PtrAgvDeviceTask task : runningDeviceTaskList) {
task.taskGroupStatus = taskStatus;
if (taskStatus == 4) {
this.runtime.eventManager.fireDeviceTaskCompleteEvent(this, task);
task.taskStatus = 4;
if (task.taskStatus != 4) {
this.runtime.eventManager.fireDeviceTaskCompleteEvent(this, task);
task.taskStatus = 4;
}
// 更新计划任务
List<RcsTaskPlan> planTaskList = planTaskSequence.taskList.stream().filter(pt -> task.movePlanTaskId.equals(pt.getPlanTaskId()) || task.planTaskIdSet.contains(pt.getPlanTaskId())).toList();
@ -257,9 +255,9 @@ public abstract class PtrAgvItem extends ExecutorItem {
if (PlanTaskStatus.FINISHED.toString().equals(planTask.getPlanTaskStatus())) {
continue;
}
this.runtime.eventManager.firePlanTaskCompleteEvent(this, planTaskSequence, planTask);
planTask.setPlanTaskStatus(PlanTaskStatus.FINISHED.toString());
planTaskSequence.savePlanTask(planTask);
this.runtime.eventManager.firePlanTaskCompleteEvent(this, planTaskSequence, planTask);
}
}
}
@ -338,16 +336,16 @@ public abstract class PtrAgvItem extends ExecutorItem {
}
}
BannerUtils.printConfig(log, "updatePosition", new String[]{
"logicX: " + logicX,
"logicY: " + logicY,
"direction: " + direction,
"finishTargetIndex: " + finishTargetIndex,
"runningDeviceSize:" + (this.runningDeviceTaskList == null ? "null" : this.runningDeviceTaskList.size()),
"planTask:" + (this.planTaskSequence == null ? "null" :
("\n" + Joiner.on("\n").join((List) this.planTaskSequence.toPrettyMap().get("items")))
)
});
// BannerUtils.printConfig(log, "updatePosition", new String[]{
// "logicX: " + logicX,
// "logicY: " + logicY,
// "direction: " + direction,
// "finishTargetIndex: " + finishTargetIndex,
// "runningDeviceSize:" + (this.runningDeviceTaskList == null ? "null" : this.runningDeviceTaskList.size()),
// "planTask:" + (this.planTaskSequence == null ? "null" :
// ("\n" + Joiner.on("\n").join((List) this.planTaskSequence.toPrettyMap().get("items")))
// )
// });
if (needCompute && this.runningDeviceTaskList.size() > 0) {
int index = this.runningDeviceTaskList.size() - 1;
@ -397,7 +395,7 @@ public abstract class PtrAgvItem extends ExecutorItem {
statusMap.put("direction", String.valueOf(direction));
statusMap.put("orientation", String.valueOf(orientation));
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());
redis.hPutAll(statusKey, statusMap);

16
servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java

@ -11,6 +11,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.yvan.event.AgvEventManager;
import com.yvan.event.AgvEventType;
import com.yvan.mqtt.FrontendMessagePushService;
import com.yvan.redis.LccRedisService;
import com.yvan.workbench.model.entity.LccProject;
@ -121,6 +122,21 @@ public class LogisticsRuntime {
this.envId = env.getEnvId();
this.isVirtual = env.getIsVirtual();
this.serverId = serverId;
this.setupEventHandle();
}
private void setupEventHandle() {
eventManager.subscribe((AgvEventType type, Object... args) -> {
ExecutorItem sender = (ExecutorItem) args[0];
String[] eventArgs = new String[args.length - 1];
for (int i = 1; i < args.length; i++) {
eventArgs[i - 1] = Conv.asString(args[i]);
}
BannerUtils.printConfig(log, this.projectUuid + "(" + this.envId + ") " + type + " AGV:" + sender.getId(), eventArgs);
});
}
/**

Loading…
Cancel
Save