From dddb5e6b39b85ae5debf0d45d7f8fe42187004da Mon Sep 17 00:00:00 2001 From: xuzhiheng <2543137953@qq.com> Date: Sat, 28 Jun 2025 17:23:12 +0800 Subject: [PATCH] update --- .../LoopbackCommunicationAdapter.java | 4 +- .../http/service/BaseService.java | 2 +- .../http/service/ExecuteAction.java | 6 +-- .../http/service/ExecuteMove.java | 18 +++++++- .../org/opentcs/manage/AdapterManage.java | 1 + .../opentcs/manage/entity/AgvInfoParams.java | 4 ++ .../v1/TransportOrderHandler.java | 45 ++++++++++++------- 7 files changed, 56 insertions(+), 24 deletions(-) diff --git a/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java b/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java index dd45cb3..ff525e8 100644 --- a/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java +++ b/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java @@ -343,7 +343,7 @@ public class LoopbackCommunicationAdapter sourcePoint = cmd.getStep().getSourcePoint().getName(); //下发AGV移动指令 -// ExecuteMove.sendCmd(getProcessModel().getName(), cmd, getSerialNum()); + ExecuteMove.sendCmd(getProcessModel().getName(), cmd, getSerialNum()); } // Start the simulation task if we're not in single step mode and not simulating already. @@ -529,7 +529,7 @@ public class LoopbackCommunicationAdapter ACTION_STATUS = true; //下发动作 - ExecuteAction.sendCmd(command.getTransportOrder().getName(), getProcessModel().getName(), getProcessModel().getPosition(), command.getOperation(), getSerialNum()); + ExecuteAction.sendCmd(command.getTransportOrder().getWrappingSequence().getName(), getProcessModel().getName(), getProcessModel().getPosition(), command.getOperation(), getSerialNum()); //进入阻塞 while (ACTION_STATUS) { diff --git a/opentcs-common/src/main/java/org/opentcs/communication/http/service/BaseService.java b/opentcs-common/src/main/java/org/opentcs/communication/http/service/BaseService.java index d60e3bf..3b2cf50 100644 --- a/opentcs-common/src/main/java/org/opentcs/communication/http/service/BaseService.java +++ b/opentcs-common/src/main/java/org/opentcs/communication/http/service/BaseService.java @@ -20,7 +20,7 @@ public class BaseService { * 生成进程内唯一的int型ID * 优点:简单高效 * 限制: - * - 重启后可能重复 + * - 重启后可能重复,但数据是内存中存在,重启即销毁 * - 超过21亿后会回绕(正常应用很难达到) */ public static int generate() { diff --git a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteAction.java b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteAction.java index d77b626..42bf4ad 100644 --- a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteAction.java +++ b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteAction.java @@ -11,13 +11,13 @@ public class ExecuteAction extends BaseService { /** * 下发动作到平台 - * @param orderName 车辆名称 + * @param name 名称 * @param vehicleName 车辆名称 * @param point 当前位置 * @param action 动作 * @param serialNum 序列号 */ - public static void sendCmd(String orderName, String vehicleName, String point, String action, Integer serialNum) { + public static void sendCmd(String name, String vehicleName, String point, String action, Integer serialNum) { String url = getUrl(vehicleName); @@ -27,7 +27,7 @@ public class ExecuteAction extends BaseService { String time = now.format(formatter); RequestAction requestAction = new RequestAction(); - requestAction.setOrder_name(orderName); + requestAction.setOrder_name(name); requestAction.setAction(action); requestAction.setPoint(point); diff --git a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java index a500f6f..c567826 100644 --- a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java +++ b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java @@ -169,7 +169,23 @@ public class ExecuteMove extends BaseService { * 获取当前订单ID */ public static Integer getOrderID(String vehicleName) { - return orderInfoMap.get(vehicleName).getId(); + + if (orderInfoMap.containsKey(vehicleName)) { + return orderInfoMap.get(vehicleName).getId(); + } + return null; + } + + /** + * 清理对应订单,实现平台接管后继续执行订单 + */ + public static boolean resetOrder(String vehicleName) { + + if (orderInfoMap.containsKey(vehicleName)) { + orderInfoMap.remove(vehicleName); + } + + return true; } /** diff --git a/opentcs-common/src/main/java/org/opentcs/manage/AdapterManage.java b/opentcs-common/src/main/java/org/opentcs/manage/AdapterManage.java index 6b92260..9e8980f 100644 --- a/opentcs-common/src/main/java/org/opentcs/manage/AdapterManage.java +++ b/opentcs-common/src/main/java/org/opentcs/manage/AdapterManage.java @@ -154,6 +154,7 @@ public class AdapterManage { agvInfoParams.setAgv_model(params.getInteger("agv_model")); agvInfoParams.setCharge_status(params.getInteger("charge_status")); agvInfoParams.setAction_status(params.getInteger("action_status")); + agvInfoParams.setOrder_id(params.getInteger("order_id")); return agvInfoParams; } diff --git a/opentcs-common/src/main/java/org/opentcs/manage/entity/AgvInfoParams.java b/opentcs-common/src/main/java/org/opentcs/manage/entity/AgvInfoParams.java index 9abd558..69c304c 100644 --- a/opentcs-common/src/main/java/org/opentcs/manage/entity/AgvInfoParams.java +++ b/opentcs-common/src/main/java/org/opentcs/manage/entity/AgvInfoParams.java @@ -52,4 +52,8 @@ public class AgvInfoParams { * 执行动作状态:1=完成,2=执行中 */ private Integer action_status; + /** + * 控制器最后执行订单ID,id=0即为未创建任务 + */ + private Integer order_id; } diff --git a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java index c77f2fb..a9ccd69 100644 --- a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java +++ b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java @@ -63,41 +63,52 @@ public class TransportOrderHandler { /** * 根据WMS任务创建订单序列和运输订单 - * @param orderName 订单名称 + * @param name 订单序列名称 * @param body 结构体 * @return 创建的订单 */ - public TransportOrder createWmsTask(String orderName, String body){ + public List createWmsTask(String name, String body){ //解析data String type = JSON.parseObject(body).getString("type"); String intendedVehicle = JSON.parseObject(body).getString("intendedVehicle") != null ? JSON.parseObject(body).getString("intendedVehicle") : null; Boolean dispensable = JSON.parseObject(body).getBoolean("dispensable") != null ? JSON.parseObject(body).getBoolean("dispensable") : false; +// String wrappingSequence = JSON.parseObject(body).getString("wrappingSequence") != null ? JSON.parseObject(body).getString("wrappingSequence") : null; String destinationsStr = JSON.parseObject(body).getString("destinations"); List dataList = JSON.parseArray(destinationsStr, PostTransportOrderInfoRequestTo.class); - //订单目标点结构体 - List destinationsList = new ArrayList<>(); + //构建订单序列 + PostOrderSequenceRequestTO postOrderSequenceRequestTO = new PostOrderSequenceRequestTO(); + postOrderSequenceRequestTO.setIncompleteName(false); + if (intendedVehicle != null) { + postOrderSequenceRequestTO.setIntendedVehicle(intendedVehicle); + } + postOrderSequenceRequestTO.setType(type); + postOrderSequenceRequestTO.setFailureFatal(true); + //根据传入名称创建订单序列 + OrderSequence orderSequence = this.createOrderSequence(name, postOrderSequenceRequestTO); + + //构建订单对象 + PostTransportOrderRequestTO postTransportOrderRequestTO = new PostTransportOrderRequestTO(); + postTransportOrderRequestTO.setIncompleteName(true); + postTransportOrderRequestTO.setDispensable(dispensable); + postTransportOrderRequestTO.setDeadline(Instant.now()); + postTransportOrderRequestTO.setWrappingSequence(orderSequence.getName()); + postTransportOrderRequestTO.setType(type); + //根据传入点位创建多个订单 + List orders = new ArrayList<>(); for (PostTransportOrderInfoRequestTo destination : dataList) { + List destinationsList = new ArrayList<>(); Destination newDestination = new Destination(); newDestination.setLocationName(destination.getLocationName()); newDestination.setOperation(destination.getOperation()); destinationsList.add(newDestination); + postTransportOrderRequestTO.setDestinations(destinationsList); + TransportOrder order = this.createOrder("", postTransportOrderRequestTO); + orders.add(order); } - //构建订单对象 - PostTransportOrderRequestTO postTransportOrderRequestTO = new PostTransportOrderRequestTO(); - postTransportOrderRequestTO.setIncompleteName(false); - postTransportOrderRequestTO.setDispensable(dispensable); - postTransportOrderRequestTO.setDeadline(Instant.now()); - if (intendedVehicle != null) { - postTransportOrderRequestTO.setIntendedVehicle(intendedVehicle); - } - postTransportOrderRequestTO.setType(type); - postTransportOrderRequestTO.setDestinations(destinationsList); - - //创建运输订单 - return this.createOrder(orderName, postTransportOrderRequestTO); + return orders; } public TransportOrder createOrder(String name, PostTransportOrderRequestTO order)