From 88f60b97bd68d67201cbeb56a70295951d3c5d6b Mon Sep 17 00:00:00 2001 From: yvan Date: Fri, 27 Jun 2025 14:53:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E7=8A=B6=E6=80=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/galaxis/rcs/plan/PlanTaskSequence.java | 43 +++++++++++++++- .../java/com/yvan/logisticsModel/PtrAgvItem.java | 57 ++++++++++++---------- 2 files changed, 73 insertions(+), 27 deletions(-) diff --git a/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java b/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java index 5b8beb3..c637c70 100644 --- a/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java +++ b/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java @@ -5,8 +5,14 @@ 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.galaxis.rcs.ptr.ArmMessageType; +import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.yvan.logisticsModel.LogisticsRuntime; +import com.yvan.logisticsModel.PtrAgvDeviceTask; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.clever.core.BannerUtils; import org.clever.core.id.SnowFlake; import org.clever.core.json.JsonWrapper; @@ -15,6 +21,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +@Slf4j public class PlanTaskSequence { @JsonIgnore public static final SnowFlake snowFlake = new SnowFlake(); @@ -27,7 +34,6 @@ public class PlanTaskSequence { public String lastWayPointId; public Float lastRotationAngle = null; - public boolean isFinished = false; public String lastLoadLpn = ""; public PlanTaskSequence(String executorId, LogisticsRuntime logisticsRuntime, RcsTaskBiz bizTask, String createBy) { @@ -103,7 +109,6 @@ public class PlanTaskSequence { // 添加完成动作 public RcsTaskPlan addFinish() { RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.FINISH.toString()); - this.isFinished = true; return task; } @@ -145,4 +150,38 @@ public class PlanTaskSequence { jw.set("items", list); return jw.getInnerMap(); } + + /** + * 是不是所有的任务都完成了 + */ + public boolean isAllCompleted() { + boolean isAllComplete = true; + for (RcsTaskPlan task : taskList) { + if (!PlanTaskStatus.FINISHED.toString().equals(task.getPlanTaskStatus())) { + isAllComplete = false; + break; + } + } + return isAllComplete; + } + + public RcsTaskPlan getByPlanTaskId(Long planTaskId) { + for (RcsTaskPlan task : taskList) { + if (task.getPlanTaskId().equals(planTaskId)) { + return task; + } + } + return null; + } + + @SneakyThrows + public void savePlanTask(RcsTaskPlan planTask) { + //TODO: 保存数据库 + var jw = new JsonWrapper(planTask); + 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); + } } diff --git a/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java b/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java index 149c42f..76b8d84 100644 --- a/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java +++ b/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.galaxis.rcs.common.entity.RcsTaskPlan; import com.galaxis.rcs.common.enums.AgvEventType; import com.galaxis.rcs.common.enums.LCCDirection; +import com.galaxis.rcs.common.enums.PlanTaskStatus; import com.galaxis.rcs.common.enums.PlanTaskType; import com.galaxis.rcs.connector.cl2.Cl2DeviceConnector; import com.galaxis.rcs.plan.PlanTaskSequence; @@ -17,6 +18,7 @@ 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.collect.Queues; +import com.yvan.logisticsMonitor.task.PlanTask; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.clever.core.json.JsonWrapper; @@ -221,7 +223,19 @@ public abstract class PtrAgvItem extends ExecutorItem { public boolean isFree() { // return (this.logisticsRuntime.isRunning() && this.deviceTaskQueue.isEmpty() && this.connectorThread.isRunning()); - return this.runtime.isRunning() && planTaskSequence == null && deviceTaskQueue.isEmpty() && !isPaused; + if (!this.runtime.isRunning()) { + return false; + } + if (planTaskSequence != null && !planTaskSequence.isAllCompleted()) { + return false; + } + if (!deviceTaskQueue.isEmpty()) { + return false; + } + if (this.isPaused) { + return false; + } + return true; } public void updatePosition(int logicX, int logicY, short direction) { @@ -268,9 +282,26 @@ public abstract class PtrAgvItem extends ExecutorItem { if (task.seqNo == seqNo) { task.taskGroupStatus = messageStatus; if (task.x == x && task.y == y) { + // 标记任务已完成, 4=完成 task.taskStatus = 4; } + + if (messageStatus == 4) { + fireEvent(AgvEventType.DEVICE_TASK_COMPLETE, this, task); + RcsTaskPlan planTask = planTaskSequence.getByPlanTaskId(task.planTaskId); + planTask.setPlanTaskStatus(PlanTaskStatus.FINISHED.toString()); + planTaskSequence.savePlanTask(planTask); + if (planTaskSequence.isAllCompleted()) { + fireEvent(AgvEventType.PLAN_COMPLETE, this); + planTaskSequence = null; + } + + } else { + log.error("messageStatus unkown messageStatus={}", messageStatus); + } + } + // TODO: 3是什么? if (task.taskGroupStatus < 3 /*|| task.taskStatus < 4*/) { needCompute = false; } @@ -278,32 +309,8 @@ public abstract class PtrAgvItem extends ExecutorItem { if (needCompute) { LockSupport.unpark(connectorThread); } - - // 如果是任务完成事件 - if (messageStatus == 4) { - fireEvent(AgvEventType.DEVICE_TASK_COMPLETE, this, this.connectorThread.__currentTask); - - if (isTaskSequenceComplete()) { - fireEvent(AgvEventType.PLAN_COMPLETE, this); - planTaskSequence = null; - } - } } - /** - * 检查当前任务序列是否完成 - */ - public boolean isTaskSequenceComplete() { - if (planTaskSequence == null) { - return false; - } - for (PtrAgvDeviceTask task : runningDeviceTaskList) { - if (task.taskGroupStatus < 3 /*|| task.taskStatus < 4*/) { - return false; - } - } - return true; - } public void updateRedisStatus() { String statusKey = getRedisKey("status");