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 7c05c1a..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 @@ -162,6 +162,9 @@ public class LoopbackCommunicationAdapter private final Router router; + //标记是否开启自动回休息点:true=开启,false=关闭 + private final Boolean IS_AUTOMATIC_BREAKS = false; + /** * Creates a new instance. * @@ -212,21 +215,23 @@ public class LoopbackCommunicationAdapter } super.initialize(); - // 注册属性变化监听器 - getProcessModel().addPropertyChangeListener(evt -> { - if (evt.getPropertyName().equals(VehicleProcessModel.Attribute.ENERGY_LEVEL.name())) { - LOG.info("Vehicle energy level changed to: {}", evt.getNewValue()); - checkChargingNeed(); - } - // 直接检查命令队列状态,不依赖特定属性名 - if (getSentCommands().isEmpty() && getUnsentCommands().isEmpty()) { - LOG.debug("All commands executed, checking for parking position..."); - LOG.info("Found parking positions: {}", findAllParkingPositions().stream() - .map(Point::getName) - .collect(Collectors.joining(", "))); - checkAndMoveToParkingPosition(); - } - }); + if (IS_AUTOMATIC_BREAKS) { + // 注册属性变化监听器 + getProcessModel().addPropertyChangeListener(evt -> { + if (evt.getPropertyName().equals(VehicleProcessModel.Attribute.ENERGY_LEVEL.name())) { + LOG.info("Vehicle energy level changed to: {}", evt.getNewValue()); + checkChargingNeed(); + } + // 直接检查命令队列状态,不依赖特定属性名 + if (getSentCommands().isEmpty() && getUnsentCommands().isEmpty()) { + LOG.debug("All commands executed, checking for parking position..."); + LOG.info("Found parking positions: {}", findAllParkingPositions().stream() + .map(Point::getName) + .collect(Collectors.joining(", "))); + checkAndMoveToParkingPosition(); + } + }); + } String initialPos = vehicle.getProperties().get(LoopbackAdapterConstants.PROPKEY_INITIAL_POSITION); @@ -524,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/common/GuestUserCredentials.java b/opentcs-common/src/main/java/org/opentcs/common/GuestUserCredentials.java index cdf25b5..dc797cc 100644 --- a/opentcs-common/src/main/java/org/opentcs/common/GuestUserCredentials.java +++ b/opentcs-common/src/main/java/org/opentcs/common/GuestUserCredentials.java @@ -23,4 +23,8 @@ public interface GuestUserCredentials { * 内核开放端口 */ Integer PORT = 1099; + /** + * WMS系统地址 + */ + String WMS_URL = "http://192.168.124.114:2004/api/project.yueda.agv.agv/updateAgvTaskDevice"; } 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 1ee2c32..2c2dbd3 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 @@ -4,6 +4,7 @@ package org.opentcs.kernel.extensions.servicewebapi.v1; import static java.util.Objects.requireNonNull; +import com.alibaba.fastjson.JSON; import jakarta.annotation.Nullable; import jakarta.inject.Inject; import java.time.Instant; @@ -62,36 +63,55 @@ public class TransportOrderHandler { /** * 根据WMS任务创建订单序列和运输订单 - * @param orderName 订单名称 -// * @param vehicleName 车辆名称 - * @param type 订单类型 - * @param destinations 位置信息 + * @param name 订单序列名称 + * @param body 结构体 * @return 创建的订单 */ - public TransportOrder createWmsTask(String orderName, String type, List destinations){ + public List createWmsTask(String name, String body){ - //订单目标点结构体 - List destinationsList = new ArrayList<>(); - for (PostTransportOrderInfoRequestTo destination : destinations) { + //解析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); + + //构建订单序列 + 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(false); - postTransportOrderRequestTO.setDeadline(Instant.now()); -// if (vehicleName != null) { -// postTransportOrderRequestTO.setIntendedVehicle(vehicleName); -// } - postTransportOrderRequestTO.setType(type); - postTransportOrderRequestTO.setDestinations(destinationsList); + //设置订单序列完整性,自动完成订单 + this.putOrderSequenceComplete(name); - //创建运输订单 - return this.createOrder(orderName, postTransportOrderRequestTO); + return orders; } public TransportOrder createOrder(String name, PostTransportOrderRequestTO order) diff --git a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java index 0fd8408..ade3e01 100644 --- a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java +++ b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java @@ -4,28 +4,23 @@ package org.opentcs.kernel.extensions.servicewebapi.v1; import static java.util.Objects.requireNonNull; -import com.alibaba.fastjson.JSON; import jakarta.inject.Inject; import java.util.List; import java.util.concurrent.ExecutionException; import org.opentcs.access.KernelRuntimeException; import org.opentcs.data.ObjectExistsException; import org.opentcs.data.ObjectUnknownException; -import org.opentcs.data.order.TransportOrder; import org.opentcs.kernel.extensions.servicewebapi.HttpConstants; import org.opentcs.kernel.extensions.servicewebapi.JsonBinder; import org.opentcs.kernel.extensions.servicewebapi.RequestHandler; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetOrderSequenceResponseTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetPeripheralAttachmentInfoResponseTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetPeripheralJobResponseTO; -import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetTransportOrderResponseTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetVehicleAttachmentInfoResponseTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PlantModelTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostOrderSequenceRequestTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostPeripheralJobRequestTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostTopologyUpdateRequestTO; -import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostTransportOrderInfoRequestTo; -import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostTransportOrderRequestTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostVehicleRoutesRequestTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostVehicleRoutesResponseTO; import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleAllowedOrderTypesTO; @@ -375,32 +370,12 @@ public class V1RequestHandler IllegalStateException { response.type(HttpConstants.CONTENT_TYPE_APPLICATION_JSON_UTF8); -// return jsonBinder.toJson( -// GetTransportOrderResponseTO.fromTransportOrder( -// transportOrderHandler.createOrder( -// request.params(":NAME"), -// jsonBinder.fromJson(request.body(), PostTransportOrderRequestTO.class) -// ) -// ) -// ); - - //解析data - String type = JSON.parseObject(request.body()).getString("type"); - String destinations = JSON.parseObject(request.body()).getString("destinations"); - List dataList = JSON.parseArray(destinations, PostTransportOrderInfoRequestTo.class); - - //获取路由成本最低的车辆 -// String executeVehicle = vehicleHandler.getExecuteVehicle(dataList.getFirst().getPoint()); - - //创建订单 - TransportOrder wmsTask = transportOrderHandler.createWmsTask( - request.params(":NAME"), - type, - dataList - ); - //构建响应json - return jsonBinder.toJson(wmsTask); + return jsonBinder.toJson( + transportOrderHandler.createWmsTask( + request.params(":NAME"), + request.body() + )); } private Object handlePutTransportOrderIntendedVehicle(Request request, Response response) diff --git a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java index c54f8d0..640e95d 100644 --- a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java +++ b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java @@ -116,71 +116,71 @@ public class VehicleHandler { } } - /** - * 获取执行成本最低车辆 - * @param destinationPoint 目标点 - * @return 车辆名称 - */ - public String getExecuteVehicle(String destinationPoint) { - - //获取所有车辆 - Set vehicles = vehicleService.fetchObjects(Vehicle.class); - //设置终点 - List destinationPointList = List.of(destinationPoint); - //记录最低路由成本 - long costs = 0; - //返回的车辆名称 - String vehicleName = null; - - for (Vehicle vehicle : vehicles) { - VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference()); - boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled(); - - //校验车辆:通讯适配器状态、车辆状态、集成级别、订单 - if ( - !commAdapterEnabled || - vehicle.getState() != Vehicle.State.IDLE || - vehicle.getIntegrationLevel() != Vehicle.IntegrationLevel.TO_BE_UTILIZED || - vehicle.getTransportOrder() != null - ) { - //车辆不能执行任务直接获取下台车辆 - continue; - } - - //获取车辆当前位置设置为起点 - String sourcePoint = vehicle.getCurrentPosition().getName(); - - PostVehicleRoutesRequestTO postVehicleRoutesRequestTO = new PostVehicleRoutesRequestTO(destinationPointList); - postVehicleRoutesRequestTO.setSourcePoint(sourcePoint); - Map, Route> vehicleRoutes = this.getVehicleRoutes(vehicle.getName(), postVehicleRoutesRequestTO); - - for (Map.Entry, Route> entry : vehicleRoutes.entrySet()) { -// TCSObjectReference key = entry.getKey(); - Route value = entry.getValue(); - - //判断成本值是否合规(为空或小于0不合规) - if (value == null || value.getCosts() < 0) { - continue; - } - - //比较成本,取成本低车辆名称 - if (vehicleName == null || costs > value.getCosts()) { - //记录数据 - costs = value.getCosts(); - vehicleName = vehicle.getName(); - } - } - } - - - if (vehicleName == null) { - //无空闲车辆需要创建订单无意向车辆订单 -// throw new IllegalArgumentException("无可用车辆"); - return ""; - } - - return vehicleName; - } +// /** +// * 获取执行成本最低车辆 +// * @param destinationPoint 目标点 +// * @return 车辆名称 +// */ +// public String getExecuteVehicle(String destinationPoint) { +// +// //获取所有车辆 +// Set vehicles = vehicleService.fetchObjects(Vehicle.class); +// //设置终点 +// List destinationPointList = List.of(destinationPoint); +// //记录最低路由成本 +// long costs = 0; +// //返回的车辆名称 +// String vehicleName = null; +// +// for (Vehicle vehicle : vehicles) { +// VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference()); +// boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled(); +// +// //校验车辆:通讯适配器状态、车辆状态、集成级别、订单 +// if ( +// !commAdapterEnabled || +// vehicle.getState() != Vehicle.State.IDLE || +// vehicle.getIntegrationLevel() != Vehicle.IntegrationLevel.TO_BE_UTILIZED || +// vehicle.getTransportOrder() != null +// ) { +// //车辆不能执行任务直接获取下台车辆 +// continue; +// } +// +// //获取车辆当前位置设置为起点 +// String sourcePoint = vehicle.getCurrentPosition().getName(); +// +// PostVehicleRoutesRequestTO postVehicleRoutesRequestTO = new PostVehicleRoutesRequestTO(destinationPointList); +// postVehicleRoutesRequestTO.setSourcePoint(sourcePoint); +// Map, Route> vehicleRoutes = this.getVehicleRoutes(vehicle.getName(), postVehicleRoutesRequestTO); +// +// for (Map.Entry, Route> entry : vehicleRoutes.entrySet()) { +//// TCSObjectReference key = entry.getKey(); +// Route value = entry.getValue(); +// +// //判断成本值是否合规(为空或小于0不合规) +// if (value == null || value.getCosts() < 0) { +// continue; +// } +// +// //比较成本,取成本低车辆名称 +// if (vehicleName == null || costs > value.getCosts()) { +// //记录数据 +// costs = value.getCosts(); +// vehicleName = vehicle.getName(); +// } +// } +// } +// +// +// if (vehicleName == null) { +// //无空闲车辆需要创建订单无意向车辆订单 +//// throw new IllegalArgumentException("无可用车辆"); +// return ""; +// } +// +// return vehicleName; +// } /** * Find all vehicles orders and filters depending on the given parameters. diff --git a/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/TransportOrderUtil.java b/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/TransportOrderUtil.java index 1e739bb..4c05221 100644 --- a/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/TransportOrderUtil.java +++ b/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/TransportOrderUtil.java @@ -356,8 +356,12 @@ public class TransportOrderUtil // vehicle reports the remaining movements as finished. updateTransportOrderState(order.getReference(), TransportOrder.State.WITHDRAWN); - //撤销订单 - ExecuteOperation.cancelOrder(vehicle.getName()); + //撤销订单,获取订单状态 + TransportOrder.State state = order.getState(); + if (state == TransportOrder.State.BEING_PROCESSED) { + //订单执行中,需要撤销下发给控制器的任务 + ExecuteOperation.cancelOrder(vehicle.getName()); + } VehicleController vehicleController = vehicleControllerPool.getVehicleController(vehicle.getName()); diff --git a/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/phase/assignment/OrderAssigner.java b/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/phase/assignment/OrderAssigner.java index 7f79346..eedeed2 100644 --- a/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/phase/assignment/OrderAssigner.java +++ b/opentcs-strategies-default/src/main/java/org/opentcs/strategies/basic/dispatching/phase/assignment/OrderAssigner.java @@ -7,11 +7,14 @@ import static java.util.Objects.requireNonNull; import jakarta.inject.Inject; import java.util.Collection; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; +import org.opentcs.common.GuestUserCredentials; +import org.opentcs.communication.http.HttpClient; import org.opentcs.components.kernel.Router; import org.opentcs.components.kernel.services.TCSObjectService; import org.opentcs.data.model.Point; @@ -194,6 +197,22 @@ public class OrderAssigner { .sorted(orderCandidateComparator) .findFirst() .ifPresent(candidate -> assignOrder(candidate, assignmentState)); + + AssignmentCandidate assignmentCandidate = ordersSplitByFilter.get(Boolean.TRUE).stream() + .map(CandidateFilterResult::getCandidate) + .sorted(orderCandidateComparator) + .findFirst().orElse(null); + + if (assignmentCandidate != null + && assignmentCandidate.getTransportOrder().getWrappingSequence() != null) { + //已分配车辆,调用接口告诉wms系统 + HashMap dataMap = new HashMap<>(); + dataMap.put("task_code", assignmentCandidate.getTransportOrder().getWrappingSequence().getName()); + dataMap.put("vehicle_name", vehicle.getName()); + + HttpClient httpClient = new HttpClient(); + httpClient.sendCommand(GuestUserCredentials.WMS_URL, dataMap); + } } private void tryAssignVehicle( @@ -248,6 +267,23 @@ public class OrderAssigner { .sorted(Comparator.comparingLong(AssignmentCandidate::getCompleteRoutingCosts)) .findFirst() .ifPresent(candidate -> assignOrder(candidate, assignmentState)); + + AssignmentCandidate assignmentCandidate = ordersSplitByFilter.get(Boolean.TRUE).stream() + .map(CandidateFilterResult::getCandidate) + .sorted(Comparator.comparingLong(AssignmentCandidate::getCompleteRoutingCosts)) + .findFirst().orElse(null); + + if (assignmentCandidate != null + && assignmentCandidate.getVehicle() != null + && order.getWrappingSequence() != null) { + //已分配车辆,调用接口告诉wms系统 + HashMap dataMap = new HashMap<>(); + dataMap.put("task_code", order.getWrappingSequence().getName()); + dataMap.put("vehicle_name", assignmentCandidate.getVehicle().getName()); + + HttpClient httpClient = new HttpClient(); + httpClient.sendCommand(GuestUserCredentials.WMS_URL, dataMap); + } } private void assignOrder(AssignmentCandidate candidate, AssignmentState assignmentState) {