From d60d6081ac0cda4cac97aa3efe60e8f298fe4e66 Mon Sep 17 00:00:00 2001 From: xuzhiheng <2543137953@qq.com> Date: Thu, 26 Jun 2025 17:14:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95=E5=88=86?= =?UTF-8?q?=E9=85=8D=E8=BD=A6=E8=BE=86=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/TransportOrderHandler.java | 10 ++--- .../servicewebapi/v1/V1RequestHandler.java | 45 +++++++++---------- .../phase/assignment/OrderAssigner.java | 18 ++++++-- 3 files changed, 40 insertions(+), 33 deletions(-) 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 f5930ec..1ee2c32 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,12 +63,12 @@ public class TransportOrderHandler { /** * 根据WMS任务创建订单序列和运输订单 * @param orderName 订单名称 - * @param vehicleName 车辆名称 +// * @param vehicleName 车辆名称 * @param type 订单类型 * @param destinations 位置信息 * @return 创建的订单 */ - public TransportOrder createWmsTask(String orderName, String vehicleName, String type, List destinations){ + public TransportOrder createWmsTask(String orderName, String type, List destinations){ //订单目标点结构体 List destinationsList = new ArrayList<>(); @@ -84,9 +84,9 @@ public class TransportOrderHandler { postTransportOrderRequestTO.setIncompleteName(false); postTransportOrderRequestTO.setDispensable(false); postTransportOrderRequestTO.setDeadline(Instant.now()); - if (vehicleName != null) { - postTransportOrderRequestTO.setIntendedVehicle(vehicleName); - } +// if (vehicleName != null) { +// postTransportOrderRequestTO.setIntendedVehicle(vehicleName); +// } postTransportOrderRequestTO.setType(type); postTransportOrderRequestTO.setDestinations(destinationsList); 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 6d798f9..0fd8408 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 @@ -18,12 +18,14 @@ 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; @@ -373,31 +375,6 @@ public class V1RequestHandler IllegalStateException { response.type(HttpConstants.CONTENT_TYPE_APPLICATION_JSON_UTF8); - //解析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"), - executeVehicle, - type, - dataList - ); - - //尝试立即将订单分配给意向车辆 - if (executeVehicle != null) { - //todo 有问题需要延时或者分配车辆时过滤已绑定订单的意向车辆 - orderDispatcherHandler.tryImmediateAssignment(request.params(":NAME")); - } - - //构建响应json - return jsonBinder.toJson(wmsTask); - // return jsonBinder.toJson( // GetTransportOrderResponseTO.fromTransportOrder( // transportOrderHandler.createOrder( @@ -406,6 +383,24 @@ public class V1RequestHandler // ) // ) // ); + + //解析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); } private Object handlePutTransportOrderIntendedVehicle(Request request, Response response) 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 e8244f8..7f79346 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 @@ -133,12 +133,12 @@ public class OrderAssigner { ); AssignmentState assignmentState = new AssignmentState(); - if (availableVehicles.size() < availableOrders.size()) { + if (availableVehicles.size() < availableOrders.size()) { //车数量 < 订单数 availableVehicles.stream() .sorted(vehicleComparator) .forEach(vehicle -> tryAssignOrder(vehicle, availableOrders, assignmentState)); } - else { + else { //车数量 >= 订单数 availableOrders.stream() .sorted(orderComparator) .forEach(order -> tryAssignVehicle(order, availableVehicles, assignmentState)); @@ -227,13 +227,25 @@ public class OrderAssigner { ) .collect(Collectors.partitioningBy(filterResult -> !filterResult.isFiltered())); +// // 调试输出:分组统计结果 +// System.out.println("Candidate groups: Passed=" + ordersSplitByFilter.get(Boolean.TRUE).size() + ", Filtered=" + ordersSplitByFilter.get(Boolean.FALSE).size()); +// +// // 调试输出:显示所有通过过滤的候选(排序前) +// List passedCandidates = ordersSplitByFilter.get(Boolean.TRUE).stream() +// .map(CandidateFilterResult::getCandidate) +// .collect(Collectors.toList()); +// +// passedCandidates.forEach(c -> System.out.println("passedCandidates - order: " + c.getTransportOrder() + ",vehicle:" + c.getVehicle() + ",Costs: " + c.getCompleteRoutingCosts())); + ordersSplitByFilter.get(Boolean.FALSE).stream() .map(CandidateFilterResult::toFilterResult) .forEach(filterResult -> assignmentState.addFilteredOrder(filterResult)); + ordersSplitByFilter.get(Boolean.TRUE).stream() .map(CandidateFilterResult::getCandidate) - .sorted(vehicleCandidateComparator) +// .sorted(vehicleCandidateComparator) 框架原本排序有问题,修改为按照路由成本排序 + .sorted(Comparator.comparingLong(AssignmentCandidate::getCompleteRoutingCosts)) .findFirst() .ifPresent(candidate -> assignOrder(candidate, assignmentState)); }