Merge branch 'new_opentcs' of http://git.picaiba.com/agv/opentcs into new_opentcs
This commit is contained in:
commit
ec7e0fc699
@ -162,6 +162,9 @@ public class LoopbackCommunicationAdapter
|
|||||||
|
|
||||||
private final Router router;
|
private final Router router;
|
||||||
|
|
||||||
|
//标记是否开启自动回休息点:true=开启,false=关闭
|
||||||
|
private final Boolean IS_AUTOMATIC_BREAKS = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance.
|
* Creates a new instance.
|
||||||
*
|
*
|
||||||
@ -212,21 +215,23 @@ public class LoopbackCommunicationAdapter
|
|||||||
}
|
}
|
||||||
super.initialize();
|
super.initialize();
|
||||||
|
|
||||||
// 注册属性变化监听器
|
if (IS_AUTOMATIC_BREAKS) {
|
||||||
getProcessModel().addPropertyChangeListener(evt -> {
|
// 注册属性变化监听器
|
||||||
if (evt.getPropertyName().equals(VehicleProcessModel.Attribute.ENERGY_LEVEL.name())) {
|
getProcessModel().addPropertyChangeListener(evt -> {
|
||||||
LOG.info("Vehicle energy level changed to: {}", evt.getNewValue());
|
if (evt.getPropertyName().equals(VehicleProcessModel.Attribute.ENERGY_LEVEL.name())) {
|
||||||
checkChargingNeed();
|
LOG.info("Vehicle energy level changed to: {}", evt.getNewValue());
|
||||||
}
|
checkChargingNeed();
|
||||||
// 直接检查命令队列状态,不依赖特定属性名
|
}
|
||||||
if (getSentCommands().isEmpty() && getUnsentCommands().isEmpty()) {
|
// 直接检查命令队列状态,不依赖特定属性名
|
||||||
LOG.debug("All commands executed, checking for parking position...");
|
if (getSentCommands().isEmpty() && getUnsentCommands().isEmpty()) {
|
||||||
LOG.info("Found parking positions: {}", findAllParkingPositions().stream()
|
LOG.debug("All commands executed, checking for parking position...");
|
||||||
.map(Point::getName)
|
LOG.info("Found parking positions: {}", findAllParkingPositions().stream()
|
||||||
.collect(Collectors.joining(", ")));
|
.map(Point::getName)
|
||||||
checkAndMoveToParkingPosition();
|
.collect(Collectors.joining(", ")));
|
||||||
}
|
checkAndMoveToParkingPosition();
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
String initialPos
|
String initialPos
|
||||||
= vehicle.getProperties().get(LoopbackAdapterConstants.PROPKEY_INITIAL_POSITION);
|
= vehicle.getProperties().get(LoopbackAdapterConstants.PROPKEY_INITIAL_POSITION);
|
||||||
@ -524,7 +529,7 @@ public class LoopbackCommunicationAdapter
|
|||||||
ACTION_STATUS = true;
|
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) {
|
while (ACTION_STATUS) {
|
||||||
|
@ -23,4 +23,8 @@ public interface GuestUserCredentials {
|
|||||||
* 内核开放端口
|
* 内核开放端口
|
||||||
*/
|
*/
|
||||||
Integer PORT = 1099;
|
Integer PORT = 1099;
|
||||||
|
/**
|
||||||
|
* WMS系统地址
|
||||||
|
*/
|
||||||
|
String WMS_URL = "http://192.168.124.114:2004/api/project.yueda.agv.agv/updateAgvTaskDevice";
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ public class BaseService {
|
|||||||
* 生成进程内唯一的int型ID
|
* 生成进程内唯一的int型ID
|
||||||
* 优点:简单高效
|
* 优点:简单高效
|
||||||
* 限制:
|
* 限制:
|
||||||
* - 重启后可能重复
|
* - 重启后可能重复,但数据是内存中存在,重启即销毁
|
||||||
* - 超过21亿后会回绕(正常应用很难达到)
|
* - 超过21亿后会回绕(正常应用很难达到)
|
||||||
*/
|
*/
|
||||||
public static int generate() {
|
public static int generate() {
|
||||||
|
@ -11,13 +11,13 @@ public class ExecuteAction extends BaseService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 下发动作到平台
|
* 下发动作到平台
|
||||||
* @param orderName 车辆名称
|
* @param name 名称
|
||||||
* @param vehicleName 车辆名称
|
* @param vehicleName 车辆名称
|
||||||
* @param point 当前位置
|
* @param point 当前位置
|
||||||
* @param action 动作
|
* @param action 动作
|
||||||
* @param serialNum 序列号
|
* @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);
|
String url = getUrl(vehicleName);
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ public class ExecuteAction extends BaseService {
|
|||||||
String time = now.format(formatter);
|
String time = now.format(formatter);
|
||||||
|
|
||||||
RequestAction requestAction = new RequestAction();
|
RequestAction requestAction = new RequestAction();
|
||||||
requestAction.setOrder_name(orderName);
|
requestAction.setOrder_name(name);
|
||||||
requestAction.setAction(action);
|
requestAction.setAction(action);
|
||||||
requestAction.setPoint(point);
|
requestAction.setPoint(point);
|
||||||
|
|
||||||
|
@ -169,7 +169,23 @@ public class ExecuteMove extends BaseService {
|
|||||||
* 获取当前订单ID
|
* 获取当前订单ID
|
||||||
*/
|
*/
|
||||||
public static Integer getOrderID(String vehicleName) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -154,6 +154,7 @@ public class AdapterManage {
|
|||||||
agvInfoParams.setAgv_model(params.getInteger("agv_model"));
|
agvInfoParams.setAgv_model(params.getInteger("agv_model"));
|
||||||
agvInfoParams.setCharge_status(params.getInteger("charge_status"));
|
agvInfoParams.setCharge_status(params.getInteger("charge_status"));
|
||||||
agvInfoParams.setAction_status(params.getInteger("action_status"));
|
agvInfoParams.setAction_status(params.getInteger("action_status"));
|
||||||
|
agvInfoParams.setOrder_id(params.getInteger("order_id"));
|
||||||
|
|
||||||
return agvInfoParams;
|
return agvInfoParams;
|
||||||
}
|
}
|
||||||
|
@ -52,4 +52,8 @@ public class AgvInfoParams {
|
|||||||
* 执行动作状态:1=完成,2=执行中
|
* 执行动作状态:1=完成,2=执行中
|
||||||
*/
|
*/
|
||||||
private Integer action_status;
|
private Integer action_status;
|
||||||
|
/**
|
||||||
|
* 控制器最后执行订单ID,id=0即为未创建任务
|
||||||
|
*/
|
||||||
|
private Integer order_id;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ package org.opentcs.kernel.extensions.servicewebapi.v1;
|
|||||||
|
|
||||||
import static java.util.Objects.requireNonNull;
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import jakarta.annotation.Nullable;
|
import jakarta.annotation.Nullable;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@ -62,36 +63,55 @@ public class TransportOrderHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据WMS任务创建订单序列和运输订单
|
* 根据WMS任务创建订单序列和运输订单
|
||||||
* @param orderName 订单名称
|
* @param name 订单序列名称
|
||||||
// * @param vehicleName 车辆名称
|
* @param body 结构体
|
||||||
* @param type 订单类型
|
|
||||||
* @param destinations 位置信息
|
|
||||||
* @return 创建的订单
|
* @return 创建的订单
|
||||||
*/
|
*/
|
||||||
public TransportOrder createWmsTask(String orderName, String type, List<PostTransportOrderInfoRequestTo> destinations){
|
public List<TransportOrder> createWmsTask(String name, String body){
|
||||||
|
|
||||||
//订单目标点结构体
|
//解析data
|
||||||
List<Destination> destinationsList = new ArrayList<>();
|
String type = JSON.parseObject(body).getString("type");
|
||||||
for (PostTransportOrderInfoRequestTo destination : destinations) {
|
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<PostTransportOrderInfoRequestTo> 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<TransportOrder> orders = new ArrayList<>();
|
||||||
|
for (PostTransportOrderInfoRequestTo destination : dataList) {
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
//构建订单对象
|
//设置订单序列完整性,自动完成订单
|
||||||
PostTransportOrderRequestTO postTransportOrderRequestTO = new PostTransportOrderRequestTO();
|
this.putOrderSequenceComplete(name);
|
||||||
postTransportOrderRequestTO.setIncompleteName(false);
|
|
||||||
postTransportOrderRequestTO.setDispensable(false);
|
|
||||||
postTransportOrderRequestTO.setDeadline(Instant.now());
|
|
||||||
// if (vehicleName != null) {
|
|
||||||
// postTransportOrderRequestTO.setIntendedVehicle(vehicleName);
|
|
||||||
// }
|
|
||||||
postTransportOrderRequestTO.setType(type);
|
|
||||||
postTransportOrderRequestTO.setDestinations(destinationsList);
|
|
||||||
|
|
||||||
//创建运输订单
|
return orders;
|
||||||
return this.createOrder(orderName, postTransportOrderRequestTO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportOrder createOrder(String name, PostTransportOrderRequestTO order)
|
public TransportOrder createOrder(String name, PostTransportOrderRequestTO order)
|
||||||
|
@ -4,28 +4,23 @@ package org.opentcs.kernel.extensions.servicewebapi.v1;
|
|||||||
|
|
||||||
import static java.util.Objects.requireNonNull;
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
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;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetOrderSequenceResponseTO;
|
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.GetPeripheralAttachmentInfoResponseTO;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.GetPeripheralJobResponseTO;
|
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.GetVehicleAttachmentInfoResponseTO;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PlantModelTO;
|
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.PostOrderSequenceRequestTO;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostPeripheralJobRequestTO;
|
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.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.PostVehicleRoutesRequestTO;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostVehicleRoutesResponseTO;
|
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostVehicleRoutesResponseTO;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleAllowedOrderTypesTO;
|
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleAllowedOrderTypesTO;
|
||||||
@ -375,32 +370,12 @@ public class V1RequestHandler
|
|||||||
IllegalStateException {
|
IllegalStateException {
|
||||||
response.type(HttpConstants.CONTENT_TYPE_APPLICATION_JSON_UTF8);
|
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<PostTransportOrderInfoRequestTo> dataList = JSON.parseArray(destinations, PostTransportOrderInfoRequestTo.class);
|
|
||||||
|
|
||||||
//获取路由成本最低的车辆
|
|
||||||
// String executeVehicle = vehicleHandler.getExecuteVehicle(dataList.getFirst().getPoint());
|
|
||||||
|
|
||||||
//创建订单
|
|
||||||
TransportOrder wmsTask = transportOrderHandler.createWmsTask(
|
|
||||||
request.params(":NAME"),
|
|
||||||
type,
|
|
||||||
dataList
|
|
||||||
);
|
|
||||||
|
|
||||||
//构建响应json
|
//构建响应json
|
||||||
return jsonBinder.toJson(wmsTask);
|
return jsonBinder.toJson(
|
||||||
|
transportOrderHandler.createWmsTask(
|
||||||
|
request.params(":NAME"),
|
||||||
|
request.body()
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object handlePutTransportOrderIntendedVehicle(Request request, Response response)
|
private Object handlePutTransportOrderIntendedVehicle(Request request, Response response)
|
||||||
|
@ -116,71 +116,71 @@ public class VehicleHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 获取执行成本最低车辆
|
// * 获取执行成本最低车辆
|
||||||
* @param destinationPoint 目标点
|
// * @param destinationPoint 目标点
|
||||||
* @return 车辆名称
|
// * @return 车辆名称
|
||||||
*/
|
// */
|
||||||
public String getExecuteVehicle(String destinationPoint) {
|
// public String getExecuteVehicle(String destinationPoint) {
|
||||||
|
//
|
||||||
//获取所有车辆
|
// //获取所有车辆
|
||||||
Set<Vehicle> vehicles = vehicleService.fetchObjects(Vehicle.class);
|
// Set<Vehicle> vehicles = vehicleService.fetchObjects(Vehicle.class);
|
||||||
//设置终点
|
// //设置终点
|
||||||
List<String> destinationPointList = List.of(destinationPoint);
|
// List<String> destinationPointList = List.of(destinationPoint);
|
||||||
//记录最低路由成本
|
// //记录最低路由成本
|
||||||
long costs = 0;
|
// long costs = 0;
|
||||||
//返回的车辆名称
|
// //返回的车辆名称
|
||||||
String vehicleName = null;
|
// String vehicleName = null;
|
||||||
|
//
|
||||||
for (Vehicle vehicle : vehicles) {
|
// for (Vehicle vehicle : vehicles) {
|
||||||
VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference());
|
// VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference());
|
||||||
boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled();
|
// boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled();
|
||||||
|
//
|
||||||
//校验车辆:通讯适配器状态、车辆状态、集成级别、订单
|
// //校验车辆:通讯适配器状态、车辆状态、集成级别、订单
|
||||||
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
|
// vehicle.getTransportOrder() != null
|
||||||
) {
|
// ) {
|
||||||
//车辆不能执行任务直接获取下台车辆
|
// //车辆不能执行任务直接获取下台车辆
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
//获取车辆当前位置设置为起点
|
// //获取车辆当前位置设置为起点
|
||||||
String sourcePoint = vehicle.getCurrentPosition().getName();
|
// 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);
|
||||||
|
//
|
||||||
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();
|
||||||
|
//
|
||||||
//判断成本值是否合规(为空或小于0不合规)
|
// //判断成本值是否合规(为空或小于0不合规)
|
||||||
if (value == null || value.getCosts() < 0) {
|
// if (value == null || value.getCosts() < 0) {
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
//比较成本,取成本低车辆名称
|
// //比较成本,取成本低车辆名称
|
||||||
if (vehicleName == null || costs > value.getCosts()) {
|
// if (vehicleName == null || costs > value.getCosts()) {
|
||||||
//记录数据
|
// //记录数据
|
||||||
costs = value.getCosts();
|
// costs = value.getCosts();
|
||||||
vehicleName = vehicle.getName();
|
// vehicleName = vehicle.getName();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
if (vehicleName == null) {
|
// if (vehicleName == null) {
|
||||||
//无空闲车辆需要创建订单无意向车辆订单
|
// //无空闲车辆需要创建订单无意向车辆订单
|
||||||
// throw new IllegalArgumentException("无可用车辆");
|
//// throw new IllegalArgumentException("无可用车辆");
|
||||||
return "";
|
// return "";
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return vehicleName;
|
// return vehicleName;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find all vehicles orders and filters depending on the given parameters.
|
* Find all vehicles orders and filters depending on the given parameters.
|
||||||
|
@ -356,8 +356,12 @@ public class TransportOrderUtil
|
|||||||
// vehicle reports the remaining movements as finished.
|
// vehicle reports the remaining movements as finished.
|
||||||
updateTransportOrderState(order.getReference(), TransportOrder.State.WITHDRAWN);
|
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
|
VehicleController vehicleController
|
||||||
= vehicleControllerPool.getVehicleController(vehicle.getName());
|
= vehicleControllerPool.getVehicleController(vehicle.getName());
|
||||||
|
@ -7,11 +7,14 @@ import static java.util.Objects.requireNonNull;
|
|||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
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.Router;
|
||||||
import org.opentcs.components.kernel.services.TCSObjectService;
|
import org.opentcs.components.kernel.services.TCSObjectService;
|
||||||
import org.opentcs.data.model.Point;
|
import org.opentcs.data.model.Point;
|
||||||
@ -194,6 +197,22 @@ public class OrderAssigner {
|
|||||||
.sorted(orderCandidateComparator)
|
.sorted(orderCandidateComparator)
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.ifPresent(candidate -> assignOrder(candidate, assignmentState));
|
.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<String, String> 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(
|
private void tryAssignVehicle(
|
||||||
@ -248,6 +267,23 @@ public class OrderAssigner {
|
|||||||
.sorted(Comparator.comparingLong(AssignmentCandidate::getCompleteRoutingCosts))
|
.sorted(Comparator.comparingLong(AssignmentCandidate::getCompleteRoutingCosts))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.ifPresent(candidate -> assignOrder(candidate, assignmentState));
|
.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<String, String> 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) {
|
private void assignOrder(AssignmentCandidate candidate, AssignmentState assignmentState) {
|
||||||
|
Loading…
Reference in New Issue
Block a user