Merge branch 'new_opentcs' of http://git.picaiba.com/agv/opentcs into new_opentcs

This commit is contained in:
魏红阳 2025-07-01 13:43:51 +08:00
commit ec7e0fc699
12 changed files with 203 additions and 138 deletions

View File

@ -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) {

View File

@ -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";
} }

View File

@ -20,7 +20,7 @@ public class BaseService {
* 生成进程内唯一的int型ID * 生成进程内唯一的int型ID
* 优点简单高效 * 优点简单高效
* 限制 * 限制
* - 重启后可能重复 * - 重启后可能重复,但数据是内存中存在重启即销毁
* - 超过21亿后会回绕正常应用很难达到 * - 超过21亿后会回绕正常应用很难达到
*/ */
public static int generate() { public static int generate() {

View File

@ -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);

View File

@ -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;
} }
/** /**

View File

@ -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;
} }

View File

@ -52,4 +52,8 @@ public class AgvInfoParams {
* 执行动作状态1=完成2=执行中 * 执行动作状态1=完成2=执行中
*/ */
private Integer action_status; private Integer action_status;
/**
* 控制器最后执行订单IDid=0即为未创建任务
*/
private Integer order_id;
} }

View File

@ -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)

View File

@ -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)

View File

@ -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.

View File

@ -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());

View File

@ -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) {