修改创建订单逻辑
This commit is contained in:
parent
3e546985f2
commit
bb878f6dc8
@ -62,48 +62,36 @@ public class TransportOrderHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据WMS任务创建订单序列和运输订单
|
* 根据WMS任务创建订单序列和运输订单
|
||||||
* @param sequenceName 序列名称
|
* @param orderName 订单名称
|
||||||
* @param vehicleName 车辆名称
|
* @param vehicleName 车辆名称
|
||||||
* @param type 订单类型
|
* @param type 订单类型
|
||||||
* @param destinations 位置信息
|
* @param destinations 位置信息
|
||||||
* @return 创建的订单
|
* @return 创建的订单
|
||||||
*/
|
*/
|
||||||
public List<TransportOrder> createWmsTask(String sequenceName, String vehicleName, String type, List<PostTransportOrderInfoRequestTo> destinations){
|
public TransportOrder createWmsTask(String orderName, String vehicleName, String type, List<PostTransportOrderInfoRequestTo> destinations){
|
||||||
|
|
||||||
//构建订单序列对象
|
//订单目标点结构体
|
||||||
PostOrderSequenceRequestTO postOrderSequenceRequestTO = new PostOrderSequenceRequestTO();
|
List<Destination> destinationsList = new ArrayList<>();
|
||||||
postOrderSequenceRequestTO.setIncompleteName(false);
|
|
||||||
postOrderSequenceRequestTO.setType(type);
|
|
||||||
postOrderSequenceRequestTO.setIntendedVehicle(vehicleName);
|
|
||||||
postOrderSequenceRequestTO.setFailureFatal(true);
|
|
||||||
//根据传入name,创建订单序列
|
|
||||||
this.createOrderSequence(sequenceName, postOrderSequenceRequestTO);
|
|
||||||
|
|
||||||
//构建订单对象
|
|
||||||
PostTransportOrderRequestTO postTransportOrderRequestTO = new PostTransportOrderRequestTO();
|
|
||||||
postTransportOrderRequestTO.setIncompleteName(true);
|
|
||||||
postTransportOrderRequestTO.setDispensable(false);
|
|
||||||
postTransportOrderRequestTO.setDeadline(Instant.now());
|
|
||||||
postTransportOrderRequestTO.setIntendedVehicle(vehicleName);
|
|
||||||
// postTransportOrderRequestTO.setPeripheralReservationToken("");
|
|
||||||
postTransportOrderRequestTO.setWrappingSequence(sequenceName);
|
|
||||||
postTransportOrderRequestTO.setType(type);
|
|
||||||
|
|
||||||
List<TransportOrder> orders = new ArrayList<>();
|
|
||||||
|
|
||||||
//根据传入点位创建订单
|
|
||||||
for (PostTransportOrderInfoRequestTo destination : destinations) {
|
for (PostTransportOrderInfoRequestTo destination : destinations) {
|
||||||
List<Destination> destinationsList = new ArrayList<>();
|
|
||||||
Destination newDestination = new Destination();
|
Destination newDestination = new Destination();
|
||||||
newDestination.setLocationName(destination.getLocationName());
|
newDestination.setLocationName(destination.getLocationName());
|
||||||
newDestination.setOperation(destination.getOperation());
|
newDestination.setOperation(destination.getOperation());
|
||||||
destinationsList.add(newDestination);
|
destinationsList.add(newDestination);
|
||||||
postTransportOrderRequestTO.setDestinations(destinationsList);
|
|
||||||
TransportOrder order = this.createOrder("", postTransportOrderRequestTO);
|
|
||||||
orders.add(order);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return orders;
|
//构建订单对象
|
||||||
|
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);
|
||||||
|
|
||||||
|
//创建运输订单
|
||||||
|
return this.createOrder(orderName, postTransportOrderRequestTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportOrder createOrder(String name, PostTransportOrderRequestTO order)
|
public TransportOrder createOrder(String name, PostTransportOrderRequestTO order)
|
||||||
|
@ -11,6 +11,7 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import org.opentcs.access.KernelRuntimeException;
|
import org.opentcs.access.KernelRuntimeException;
|
||||||
import org.opentcs.data.ObjectExistsException;
|
import org.opentcs.data.ObjectExistsException;
|
||||||
import org.opentcs.data.ObjectUnknownException;
|
import org.opentcs.data.ObjectUnknownException;
|
||||||
|
import org.opentcs.data.order.TransportOrder;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.HttpConstants;
|
import org.opentcs.kernel.extensions.servicewebapi.HttpConstants;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.JsonBinder;
|
import org.opentcs.kernel.extensions.servicewebapi.JsonBinder;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.RequestHandler;
|
import org.opentcs.kernel.extensions.servicewebapi.RequestHandler;
|
||||||
@ -292,7 +293,8 @@ public class V1RequestHandler
|
|||||||
vehicleHandler.postReceiveCallback(
|
vehicleHandler.postReceiveCallback(
|
||||||
request.body()
|
request.body()
|
||||||
);
|
);
|
||||||
return jsonBinder.toJson("");
|
return "";
|
||||||
|
// return jsonBinder.toJson("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object handlePostDispatcherTrigger(Request request, Response response)
|
private Object handlePostDispatcherTrigger(Request request, Response response)
|
||||||
@ -377,19 +379,25 @@ public class V1RequestHandler
|
|||||||
List<PostTransportOrderInfoRequestTo> dataList = JSON.parseArray(destinations, PostTransportOrderInfoRequestTo.class);
|
List<PostTransportOrderInfoRequestTo> dataList = JSON.parseArray(destinations, PostTransportOrderInfoRequestTo.class);
|
||||||
|
|
||||||
//获取路由成本最低的车辆
|
//获取路由成本最低的车辆
|
||||||
String executeVehicle = vehicleHandler.getExecuteVehicle(dataList.getFirst().getPoint(), dataList.getLast().getPoint());
|
String executeVehicle = vehicleHandler.getExecuteVehicle(dataList.getFirst().getPoint());
|
||||||
System.out.println("handlePostTransportOrder: " + executeVehicle);
|
|
||||||
|
|
||||||
//定制逻辑
|
//创建订单
|
||||||
return jsonBinder.toJson(
|
TransportOrder wmsTask = transportOrderHandler.createWmsTask(
|
||||||
transportOrderHandler.createWmsTask(
|
request.params(":NAME"),
|
||||||
request.params(":NAME"),
|
executeVehicle,
|
||||||
executeVehicle,
|
type,
|
||||||
type,
|
dataList
|
||||||
dataList
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//尝试立即将订单分配给意向车辆
|
||||||
|
if (executeVehicle != null) {
|
||||||
|
//todo 有问题需要延时或者分配车辆时过滤已绑定订单的意向车辆
|
||||||
|
orderDispatcherHandler.tryImmediateAssignment(request.params(":NAME"));
|
||||||
|
}
|
||||||
|
|
||||||
|
//构建响应json
|
||||||
|
return jsonBinder.toJson(wmsTask);
|
||||||
|
|
||||||
// return jsonBinder.toJson(
|
// return jsonBinder.toJson(
|
||||||
// GetTransportOrderResponseTO.fromTransportOrder(
|
// GetTransportOrderResponseTO.fromTransportOrder(
|
||||||
// transportOrderHandler.createOrder(
|
// transportOrderHandler.createOrder(
|
||||||
@ -449,7 +457,7 @@ public class V1RequestHandler
|
|||||||
ExecutionException {
|
ExecutionException {
|
||||||
transportOrderHandler.putOrderSequenceComplete(request.params(":NAME"));
|
transportOrderHandler.putOrderSequenceComplete(request.params(":NAME"));
|
||||||
response.type(HttpConstants.CONTENT_TYPE_TEXT_PLAIN_UTF8);
|
response.type(HttpConstants.CONTENT_TYPE_TEXT_PLAIN_UTF8);
|
||||||
return "";
|
return jsonBinder.toJson("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object handlePostImmediateAssignment(Request request, Response response)
|
private Object handlePostImmediateAssignment(Request request, Response response)
|
||||||
|
@ -69,7 +69,7 @@ public class VehicleHandler {
|
|||||||
* 接收平台异步回调处理
|
* 接收平台异步回调处理
|
||||||
*/
|
*/
|
||||||
public void postReceiveCallback(Object data) {
|
public void postReceiveCallback(Object data) {
|
||||||
System.out.println("jsonObject-----ssss: " + data.toString());
|
// System.out.println("jsonObject-----ssss: " + data.toString());
|
||||||
|
|
||||||
//截取平台响应的字符串
|
//截取平台响应的字符串
|
||||||
String jsonStr;
|
String jsonStr;
|
||||||
@ -87,17 +87,21 @@ public class VehicleHandler {
|
|||||||
throw new ObjectUnknownException("postReceiveCallback Unknown vehicle: " + name);
|
throw new ObjectUnknownException("postReceiveCallback Unknown vehicle: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// String adapterName = "org.opentcs.virtualvehicle.LoopbackCommunicationAdapterDescription";
|
VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference());
|
||||||
// VehicleCommAdapterDescription newAdapter
|
if (!vehicleProcessModelTO.isCommAdapterEnabled()) {
|
||||||
// = vehicleService.fetchAttachmentInformation(vehicle.getReference())
|
//未开启通讯适配器,手动选择通讯适配器开启
|
||||||
// .getAvailableCommAdapters()
|
String adapterName = "org.opentcs.virtualvehicle.LoopbackCommunicationAdapterDescription";
|
||||||
// .stream()
|
VehicleCommAdapterDescription newAdapter
|
||||||
// .filter(description -> description.getClass().getName().equals(adapterName))
|
= vehicleService.fetchAttachmentInformation(vehicle.getReference())
|
||||||
// .findAny()
|
.getAvailableCommAdapters()
|
||||||
// .orElseThrow(
|
.stream()
|
||||||
// () -> new IllegalArgumentException("Unknown vehicle driver class name: " + adapterName)
|
.filter(description -> description.getClass().getName().equals(adapterName))
|
||||||
// );
|
.findAny()
|
||||||
// vehicleService.attachCommAdapter(vehicle.getReference(), newAdapter);
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException("Unknown vehicle driver class name: " + adapterName)
|
||||||
|
);
|
||||||
|
vehicleService.attachCommAdapter(vehicle.getReference(), newAdapter);
|
||||||
|
}
|
||||||
|
|
||||||
//将数据更新到线程安全的集合中,防止线程阻塞
|
//将数据更新到线程安全的集合中,防止线程阻塞
|
||||||
AdapterManage.setAdapterStatus(name);
|
AdapterManage.setAdapterStatus(name);
|
||||||
@ -114,13 +118,10 @@ public class VehicleHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取执行成本最低车辆
|
* 获取执行成本最低车辆
|
||||||
* @param sourcePoint 起点
|
|
||||||
* @param destinationPoint 目标点
|
* @param destinationPoint 目标点
|
||||||
* @return 车辆名称
|
* @return 车辆名称
|
||||||
*/
|
*/
|
||||||
public String getExecuteVehicle(String sourcePoint, String destinationPoint) {
|
public String getExecuteVehicle(String destinationPoint) {
|
||||||
|
|
||||||
// System.out.println("sourcePoint: " + sourcePoint + " destinationPoint: " + destinationPoint);
|
|
||||||
|
|
||||||
//获取所有车辆
|
//获取所有车辆
|
||||||
Set<Vehicle> vehicles = vehicleService.fetchObjects(Vehicle.class);
|
Set<Vehicle> vehicles = vehicleService.fetchObjects(Vehicle.class);
|
||||||
@ -135,30 +136,28 @@ public class VehicleHandler {
|
|||||||
VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference());
|
VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference());
|
||||||
boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled();
|
boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled();
|
||||||
|
|
||||||
//校验车辆:通讯适配器、状态、集成级别 todo 可能需要改,无空闲车辆可能也要分配车辆
|
//校验车辆:通讯适配器状态、车辆状态、集成级别、订单
|
||||||
if (
|
if (
|
||||||
!commAdapterEnabled ||
|
!commAdapterEnabled ||
|
||||||
vehicle.getState() != Vehicle.State.IDLE ||
|
vehicle.getState() != Vehicle.State.IDLE ||
|
||||||
vehicle.getIntegrationLevel() != Vehicle.IntegrationLevel.TO_BE_UTILIZED
|
vehicle.getIntegrationLevel() != Vehicle.IntegrationLevel.TO_BE_UTILIZED ||
|
||||||
|
vehicle.getTransportOrder() != null
|
||||||
) {
|
) {
|
||||||
//车辆不能执行任务直接获取下台车辆
|
//车辆不能执行任务直接获取下台车辆
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取车辆当前位置设置为起点
|
||||||
|
String sourcePoint = vehicle.getCurrentPosition().getName();
|
||||||
|
|
||||||
PostVehicleRoutesRequestTO postVehicleRoutesRequestTO = new PostVehicleRoutesRequestTO(destinationPointList);
|
PostVehicleRoutesRequestTO postVehicleRoutesRequestTO = new PostVehicleRoutesRequestTO(destinationPointList);
|
||||||
postVehicleRoutesRequestTO.setSourcePoint(sourcePoint);
|
postVehicleRoutesRequestTO.setSourcePoint(sourcePoint);
|
||||||
Map<TCSObjectReference<Point>, Route> vehicleRoutes = this.getVehicleRoutes(vehicle.getName(), postVehicleRoutesRequestTO);
|
Map<TCSObjectReference<Point>, Route> vehicleRoutes = this.getVehicleRoutes(vehicle.getName(), postVehicleRoutesRequestTO);
|
||||||
|
|
||||||
// System.out.println("getExecuteVehicle vehicleRoutes: " + vehicleRoutes);
|
|
||||||
|
|
||||||
for (Map.Entry<TCSObjectReference<Point>, Route> entry : vehicleRoutes.entrySet()) {
|
for (Map.Entry<TCSObjectReference<Point>, Route> entry : vehicleRoutes.entrySet()) {
|
||||||
TCSObjectReference<Point> key = entry.getKey();
|
// TCSObjectReference<Point> key = entry.getKey();
|
||||||
Route value = entry.getValue();
|
Route value = entry.getValue();
|
||||||
|
|
||||||
// System.out.println("getExecuteVehicle point: " + key);
|
|
||||||
// System.out.println("getExecuteVehicle route: " + value);
|
|
||||||
// System.out.println("getExecuteVehicle route costs: " + value.getCosts());
|
|
||||||
|
|
||||||
//判断成本值是否合规(为空或小于0不合规)
|
//判断成本值是否合规(为空或小于0不合规)
|
||||||
if (value == null || value.getCosts() < 0) {
|
if (value == null || value.getCosts() < 0) {
|
||||||
continue;
|
continue;
|
||||||
@ -173,12 +172,12 @@ public class VehicleHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vehicleName == null) {
|
|
||||||
throw new IllegalArgumentException("无可用车辆");
|
|
||||||
// throw new IllegalArgumentException("No vehicle available.");
|
|
||||||
}
|
|
||||||
|
|
||||||
//todo 无空闲车辆可能需要创建一个无车辆订单序列
|
if (vehicleName == null) {
|
||||||
|
//无空闲车辆需要创建订单无意向车辆订单
|
||||||
|
// throw new IllegalArgumentException("无可用车辆");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
return vehicleName;
|
return vehicleName;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user