From a88c205eb6710e23353f89380933faf757d5d6c5 Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 10 Jul 2026 10:59:50 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E5=A2=9E=E5=8A=A0agv=E5=85=85?= =?UTF-8?q?=E7=94=B5=20=E5=8F=96=E6=B6=88=E5=85=85=E7=94=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/acs/agv/server/NDCAgvService.java | 8 ++ .../agv/server/impl/NDCAgvServiceImpl.java | 34 ++++++++ .../nl/acs/ext/wms/data/one/BaseResponse.java | 7 ++ .../acs/ext/wms/rest/WmsToAcsController.java | 21 +++++ .../acs/ext/wms/service/WmsToAcsService.java | 27 ++++++ .../wms/service/impl/WmsToAcsServiceImpl.java | 84 +++++++++++++++++++ .../service/quartz/task/AutoCreateInst.java | 42 +++++++++- 7 files changed, 221 insertions(+), 2 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java index 10f237f..9ee52f7 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java @@ -72,4 +72,12 @@ public interface NDCAgvService { * @return */ public boolean createChargingTaskToNDC(String carno); + + /** + * 下发取消充电任务 + * + * @param carno + * @return + */ + public boolean cancelChargingTaskToNDC(String carno); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index a51bbff..ce44932 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -274,6 +274,40 @@ public class NDCAgvServiceImpl implements NDCAgvService { return true; } + @Override + public boolean cancelChargingTaskToNDC(String carno) { + byte carhigh = (byte) IntToHexHigh(Integer.parseInt(carno)); + byte carlow = (byte) IntToHexLow(Integer.parseInt(carno)); + + String str = "十进制下发:"; + String str1 = "十六进制下发:"; + str += "carno:" + (Integer.parseInt(carno)); + str1 += "carno:" + hexToString(carhigh & 0xFF) + hexToString(carlow & 0xFF); + + System.out.println(str); + System.out.println(str1); + + byte[] b = new byte[]{(byte) 0X87, (byte) 0XCD, + (byte) 0X00, (byte) 0X08, + (byte) 0X00, (byte) 0X08, + (byte) 0X00, (byte) 0X01, + (byte) 0X00, (byte) 0X6E, + (byte) 0X00, (byte) 0X03, + (byte) 0X00, (byte) 0X00, + (byte) carhigh, (byte) carlow + }; + log.info("下发AGV取消充电任务--{}", str1); + + try { + OneNDCSocketConnectionAutoRun.write(b); + } catch (Exception e) { + e.getMessage(); + return false; + } + System.out.println("下发agv取消充电任务数据:" + Bytes2HexString(b)); + return true; + } + String hexToString(int i) { return (i < 16 ? "0" + Integer.toHexString(i) : Integer.toHexString(i)).toUpperCase(); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/BaseResponse.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/BaseResponse.java index 3580e96..8bade24 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/BaseResponse.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/BaseResponse.java @@ -1,9 +1,12 @@ package org.nl.acs.ext.wms.data.one; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.Data; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @Data @@ -13,6 +16,7 @@ public class BaseResponse { private String message; private JSONArray errArr = new JSONArray(); private Map parameters = new HashMap(); + private List dataList = new ArrayList<>(); public BaseResponse() { } @@ -41,6 +45,9 @@ public class BaseResponse { this.parameters = parameters; } + public void setDataList(List dataList) { + this.dataList = dataList; + } public Object getParameter(String key) { return this.parameters.get(key); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index e760af0..1f015cb 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -136,4 +136,25 @@ public class WmsToAcsController { return new ResponseEntity<>(wmstoacsService.getDevice(param), HttpStatus.OK); } + @PostMapping("/getAgvDevice") + @Log("wms获取agv设备") + @SaIgnore + public ResponseEntity getAgvDevice(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.getAgvDevice(param), HttpStatus.OK); + } + + @PostMapping("/sendCharge") + @Log("wms下发充电任务") + @SaIgnore + public ResponseEntity sendCharge(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.sendCharge(param), HttpStatus.OK); + } + + @PostMapping("/cancelCharge") + @Log("wms下发取消充电任务") + @SaIgnore + public ResponseEntity cancelCharge(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.cancelCharge(param), HttpStatus.OK); + } + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index aed2de9..e51aab5 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -134,4 +134,31 @@ public interface WmsToAcsService { CreateTaskResponse isGetPut(JSONObject param); CreateTaskResponse getDevice(JSONObject param); + + /** + * 获取agv设备 + * @param param { + * device_code: 车号 + * } + * @return JSONObject + */ + CreateTaskResponse getAgvDevice(JSONObject param); + + /** + * wms 下发充电任务 + * @param param { + * device_code : 车号 + * } + * @return CreateTaskResponse + */ + CreateTaskResponse sendCharge(JSONObject param); + + /** + * wms 下发取消充电任务 + * @param param { + * device_code : 车号 + * } + * @return CreateTaskResponse + */ + CreateTaskResponse cancelCharge(JSONObject param); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index b3db880..9bd6022 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -11,7 +11,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.device.domain.Device; +import org.nl.acs.device_driver.basedriver.agv.ndcone.AgvNdcOneDeviceDriver; import org.nl.acs.device_driver.basedriver.pallet_dispenser.PalletDispenseDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.basedriver.weight_platform.WeightPlatformDeviceDriver; @@ -41,6 +43,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -59,6 +62,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Autowired private TaskService taskserver; + @Autowired + private NDCAgvService ndcAgvService; + private String log_file_type = "log_file_type"; private String log_type = "LMS请求ACS"; @@ -604,4 +610,82 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } } + @Override + public CreateTaskResponse getAgvDevice(JSONObject param) { + log.info("wms获取agv设备-----输入参数{}", param); + CreateTaskResponse response = new CreateTaskResponse(); + // 获取全部设备 + List allDeviceList = deviceAppService.findAllDevice(); + // 找出agv设备 + List agvList = allDeviceList.stream() + .filter(row -> "agv".equals(row.getDevice_type())) + .collect(Collectors.toList()); + + if (ObjectUtil.isNotEmpty(param.getString("device_code"))) { + String deviceCode = param.getString("device_code"); + agvList = allDeviceList.stream() + .filter(row -> "agv".equals(row.getDevice_type()) && row.getDevice_code().equals(deviceCode)) + .collect(Collectors.toList()); + } + + List resulList = new ArrayList<>(); + agvList.forEach(device -> { + AgvNdcOneDeviceDriver driver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); + // 电量 + int electricQty = driver.getElectric_qty(); + JSONObject json = new JSONObject(); + // 车号 + json.put("device_code",device.getDevice_code()); + // 当前电量 + json.put("electric_qty",electricQty); + // 车辆状态 + json.put("status",driver.getStatus()); + resulList.add(json); + }); + log.info("wms获取agv设备-----输出参数{}", resulList); + response.setStatus(200); + response.setDataList(resulList); + return response; + } + + @Override + public CreateTaskResponse sendCharge(JSONObject param) { + log.info("ACS接收WMS下发充电任务-----输入参数{}", param); + + CreateTaskResponse response = new CreateTaskResponse(); + String deviceCode = param.getString("device_code"); + try { + // 调用ndc下发接口 + ndcAgvService.createChargingTaskToNDC(deviceCode); + } catch (Exception e) { + response.setStatus(400); + response.setMessage("下发充电失败:"+e.getMessage()); + return response; + } + response.setStatus(200); + response.setMessage("下发充电成功"); + log.info("ACS接收WMS下发充电任务-----输出参数{}", response); + return response; + } + + @Override + public CreateTaskResponse cancelCharge(JSONObject param) { + log.info("ACS接收WMS下发取消充电任务-----输入参数{}", param); + + CreateTaskResponse response = new CreateTaskResponse(); + String deviceCode = param.getString("device_code"); + try { + // 调用ndc取消充电接口 + ndcAgvService.cancelChargingTaskToNDC(deviceCode); + } catch (Exception e) { + response.setStatus(400); + response.setMessage("下发充电失败:"+e.getMessage()); + return response; + } + response.setStatus(200); + response.setMessage("下发充电成功"); + log.info("ACS接收WMS下发取消充电任务-----输出参数{}", response); + return response; + } + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java index 82fd015..16d6e61 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java @@ -2,6 +2,7 @@ package org.nl.system.service.quartz.task; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; @@ -10,6 +11,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.domain.Device; import org.nl.acs.device_driver.basedriver.pallet_dispenser.PalletDispenseDeviceDriver; +import org.nl.acs.device_driver.basedriver.weight_platform.WeightPlatformDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -89,11 +91,29 @@ public class AutoCreateInst { // 查询所有执行中的任务 List readyExTask = taskserver.findReadyExTask(); boolean is_like = readyExTask.stream() - .anyMatch(row -> row.getStart_device_code().equals("CZJT01") || row.getNext_device_code().equals("CZJT01")); + .anyMatch(row -> row.getStart_device_code().equals("CZJT01") + || row.getNext_device_code().equals("CZJT01") + || row.getNext_device_code().equals("CZJT03") + ); if (is_like) { continue; } + // 根据设备编码获取重量 + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + Device device = deviceAppService.findDeviceByCode(acsTask.getNext_device_code()); + if (ObjectUtil.isEmpty(device)) { + continue; + } + WeightPlatformDeviceDriver driver = (WeightPlatformDeviceDriver) device.getDeviceDriver(); + Integer weight = driver.getWeight(); + if (ObjectUtil.isEmpty(weight) || weight == 0) { + weight = driver.getWeight(); + } + if (weight > 500) { + continue; + } + // 向WMS申请是否可以创建指令 JSONObject paramTask = new JSONObject().fluentPut("device_code", acsTask.getNext_device_code()); HttpResponse httpResponse = acsToWmsService.checkTask(paramTask); @@ -109,11 +129,29 @@ public class AutoCreateInst { // 查询所有执行中的任务 List readyExTask = taskserver.findReadyExTask(); boolean is_like = readyExTask.stream() - .anyMatch(row -> row.getStart_device_code().equals("CZJT02") || row.getNext_device_code().equals("CZJT02")); + .anyMatch(row -> row.getStart_device_code().equals("CZJT02") + || row.getNext_device_code().equals("CZJT02") + || row.getNext_device_code().equals("CZJT04") + ); if (is_like) { continue; } + // 根据设备编码获取重量 + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + Device device = deviceAppService.findDeviceByCode(acsTask.getNext_device_code()); + if (ObjectUtil.isEmpty(device)) { + continue; + } + WeightPlatformDeviceDriver driver = (WeightPlatformDeviceDriver) device.getDeviceDriver(); + Integer weight = driver.getWeight(); + if (ObjectUtil.isEmpty(weight) || weight == 0) { + weight = driver.getWeight(); + } + if (weight > 500) { + continue; + } + // 向WMS申请是否可以创建指令 JSONObject paramTask = new JSONObject().fluentPut("device_code", acsTask.getNext_device_code()); HttpResponse httpResponse = acsToWmsService.checkTask(paramTask);