diff --git a/servo/src/main/java/com/galaxis/rcs/RCSService.java b/servo/src/main/java/com/galaxis/rcs/RCSService.java index 455eb2d..7b45fe0 100644 --- a/servo/src/main/java/com/galaxis/rcs/RCSService.java +++ b/servo/src/main/java/com/galaxis/rcs/RCSService.java @@ -4,6 +4,7 @@ import com.galaxis.rcs.common.entity.AddTaskRequest; import com.galaxis.rcs.common.entity.AddTaskResult; import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.connector.amr.cl2.Cl2Item; +import com.galaxis.rcs.connector.amr.fm600.Fm600Item; import com.galaxis.rcs.plan.path.PathUtils; import com.google.common.base.Strings; import com.yvan.logisticsModel.LogisticsRuntime; @@ -157,6 +158,9 @@ public class RCSService { switch (jwPayload.asStr("t")) { case "cl2": case "clx": + case "cs1": + case "cc5": + case "cl3": { // 处理 CL2 或 CLX 类型的执行器 // 车所在的标记位置,及方向 11_4:RIGHT var eitem = new Cl2Item(runtime, (Map) jwPayload.getInnerMap()); @@ -173,6 +177,26 @@ public class RCSService { } runtime.executorItemMap.put(eitem.getId(), eitem); break; + } + + case "fm600": { + // 处理 CL2 或 CLX 类型的执行器 + // 车所在的标记位置,及方向 11_4:RIGHT + var fm600Itemitem = new Fm600Item(runtime, (Map) jwPayload.getInnerMap()); + + // 找到地标位置 + StaticItem staticItem = runtime.getStaticItemById(wayPointId); + if (staticItem != null) { + fm600Itemitem.logicX = staticItem.logicX; + fm600Itemitem.logicY = staticItem.logicY; + fm600Itemitem.direction = PathUtils.convertDirectionToPtrDiretion(LCCDirection.fromString(direction)); + + } else { + log.warn("Static item not found for wayPointId: {}", wayPointId); + } + runtime.executorItemMap.put(fm600Itemitem.getId(), fm600Itemitem); + break; + } default: log.warn("Unknown executor type: {}", jwPayload.asStr("t")); diff --git a/servo/src/main/java/com/galaxis/rcs/amr/AmrMessageHandler.java b/servo/src/main/java/com/galaxis/rcs/amr/AmrMessageHandler.java index d41eb20..52f76fb 100644 --- a/servo/src/main/java/com/galaxis/rcs/amr/AmrMessageHandler.java +++ b/servo/src/main/java/com/galaxis/rcs/amr/AmrMessageHandler.java @@ -102,7 +102,7 @@ public class AmrMessageHandler { int id = jw.asInt("id"); String agvId = jw.asInt("content", "VehicleId") + ""; int seqNo = jw.asInt("content", "SeqNo"); - PtrAgvItem agvItem = getPtrAgvItem(agvId); + AmrAgvItem agvItem = getPtrAgvItem(agvId); if (agvItem == null) { return; } @@ -199,9 +199,9 @@ public class AmrMessageHandler { } } - public PtrAgvItem getPtrAgvItem(String vehicleId) { + public AmrAgvItem getPtrAgvItem(String vehicleId) { var executorItem = runtime.executorItemMap.get(vehicleId); - return (PtrAgvItem) executorItem; + return (AmrAgvItem) executorItem; } @SneakyThrows @@ -416,7 +416,7 @@ public class AmrMessageHandler { private final Map lastMessageTimeMap = Maps.newConcurrentMap(); private final ScheduledExecutorService delayCalculator = Executors.newScheduledThreadPool(4); - private void handleHeartbeatMessage(PtrAgvItem agvItem, AmrHeartbeatMessage message) { + private void handleHeartbeatMessage(AmrAgvItem agvItem, AmrHeartbeatMessage message) { agvItem.handleHeartbeat(message); // 计算延迟 @@ -425,19 +425,19 @@ public class AmrMessageHandler { updateRedisNetDelay(agvItem.getId(), netDelay); } - private void handleAmrOnlineMessage(PtrAgvItem agvItem, AmrOnlineMessage message) { + private void handleAmrOnlineMessage(AmrAgvItem agvItem, AmrOnlineMessage message) { agvItem.handleOnlineEvent(); } - private void handleAmrOfflineMessage(PtrAgvItem agvItem, AmrOfflineMessage message) { + private void handleAmrOfflineMessage(AmrAgvItem agvItem, AmrOfflineMessage message) { agvItem.handleOfflineEvent(); } - private void handleTaskCompletedMessage(PtrAgvItem agvItem, AmrTaskCompletedMessage message) { + private void handleTaskCompletedMessage(AmrAgvItem agvItem, AmrTaskCompletedMessage message) { agvItem.taskCompleted(message.CurX, message.CurY, message.CurDirection, 4); } - private void handleLandmarkMessage(PtrAgvItem agvItem, AmrLandmarkMessage message) { + private void handleLandmarkMessage(AmrAgvItem agvItem, AmrLandmarkMessage message) { // 这是源逻辑,CurLogicX / CurLogicY / CurDirection 需要到 PtrAgvItem 中更新, 因为要触发事件 agvItem.x = message.X; agvItem.y = message.Y; @@ -446,7 +446,7 @@ public class AmrMessageHandler { agvItem.updatePosition(message.CurLogicX, message.CurLogicY, message.CurDirection); } - private void handleStatusMessage(PtrAgvItem agvItem, AmrStatusMessage message) { + private void handleStatusMessage(AmrAgvItem agvItem, AmrStatusMessage message) { // 更新位置. TODO 貌似不包含 direction 信息 agvItem.updatePosition(message.CurLogicX, message.CurLogicY, agvItem.direction); @@ -463,7 +463,7 @@ public class AmrMessageHandler { agvItem.updateRedisStatus(); } - private void handleTaskStatusMessage(PtrAgvItem agvItem, JsonWrapper jw, String json) throws MqttException, JsonProcessingException { + private void handleTaskStatusMessage(AmrAgvItem agvItem, JsonWrapper jw, String json) throws MqttException, JsonProcessingException { int EventId = jw.asInt("content", "EventId"); // log.info("1-Received message: " + json); diff --git a/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java b/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java index f58bade..371175c 100644 --- a/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java +++ b/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java @@ -331,16 +331,16 @@ public class LogisticsRuntime { case "cl2": case "cl3": case "clx": + case "cc5": case "cs1": item = new Cl2Item(this, itemObject); this.executorItemMap.put(item.getId(), (ExecutorItem) item); break; + case "fm600": item = new Fm600Item(this, itemObject); this.executorItemMap.put(item.getId(), (ExecutorItem) item); break; - case "cc5": - break; } } diff --git a/servo/src/main/java/com/yvan/workbench/controller/LccController.java b/servo/src/main/java/com/yvan/workbench/controller/LccController.java index dab8be8..6b0acaa 100644 --- a/servo/src/main/java/com/yvan/workbench/controller/LccController.java +++ b/servo/src/main/java/com/yvan/workbench/controller/LccController.java @@ -1,5 +1,6 @@ package com.yvan.workbench.controller; +import com.galaxis.rcs.amr.AmrAgvItem; import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.amr.PtrAgvItem; import com.google.common.base.Strings; @@ -84,7 +85,7 @@ public class LccController { for (var executor : runtime.executorItemMap.values()) { for (var agv : agvStatusList) { if (agv.getId().equals(executor.getId())) { - agv.copyFromExceptVirtual(((PtrAgvItem) executor).getState()); + agv.copyFromExceptVirtual(((AmrAgvItem) executor).getState()); break; } } diff --git a/servo/src/main/java/com/yvan/workbench/controller/RcsController.java b/servo/src/main/java/com/yvan/workbench/controller/RcsController.java index 8e1eb97..41327db 100644 --- a/servo/src/main/java/com/yvan/workbench/controller/RcsController.java +++ b/servo/src/main/java/com/yvan/workbench/controller/RcsController.java @@ -1,5 +1,6 @@ package com.yvan.workbench.controller; +import com.galaxis.rcs.amr.AmrAgvItem; import com.galaxis.rcs.common.entity.LccBasLocation; import com.galaxis.rcs.common.entity.RcsTaskBiz; import com.galaxis.rcs.common.entity.StoreLocation; @@ -8,7 +9,6 @@ import com.galaxis.rcs.common.enums.BizTaskType; import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.plan.PlanTaskSequence; import com.galaxis.rcs.plan.task.*; -import com.galaxis.rcs.amr.PtrAgvItem; import com.google.common.base.Strings; import com.google.common.collect.Maps; import com.yvan.entity.BasLocationVo; @@ -139,8 +139,8 @@ public class RcsController { if (executorItem == null) { return R.fail("executor not found: " + agvId); } - if (!(executorItem instanceof PtrAgvItem)) { - return R.fail("executor is not a PtrAgvItem id=" + agvId); + if (!(executorItem instanceof AmrAgvItem)) { + return R.fail("executor is not a AmrAgvItem id=" + agvId); } return R.success(executorItem); @@ -433,8 +433,8 @@ public class RcsController { if (executorItem == null) { return R.fail("executor not found: " + agvId); } - if (!(executorItem instanceof PtrAgvItem agv)) { - return R.fail("executor is not a PtrAgvItem id=" + agvId); + if (!(executorItem instanceof AmrAgvItem agv)) { + return R.fail("executor is not a AmrAgvItem id=" + agvId); } // 获取机器人当前所在位置, 也可以前端强制指定 @@ -457,10 +457,10 @@ public class RcsController { } if (fromItem == null) { - return R.fail("PtrAgvItem not found at current location: " + agv.logicX + "_" + agv.logicY + ", id=" + agvId); + return R.fail("AmrAgvItem not found at current location: " + agv.logicX + "_" + agv.logicY + ", id=" + agvId); } if (fromDirection == null) { - return R.fail("PtrAgvItem unkown direction id=" + agvId); + return R.fail("AmrAgvItem unkown direction id=" + agvId); } RcsTaskBiz bizTask = new RcsTaskBiz(); @@ -487,7 +487,7 @@ public class RcsController { Map option, RcsTaskBiz bizTask, LogisticsRuntime runtime, - PtrAgvItem agv, + AmrAgvItem agv, PlanTaskSequence planSequence, StaticItem fromItem, LCCDirection fromDirection) {