diff --git a/src/main/java/com/gaotao/common/utils/AgvClientUtil.java b/src/main/java/com/gaotao/common/utils/AgvClientUtil.java index afac4da..4aafd4f 100644 --- a/src/main/java/com/gaotao/common/utils/AgvClientUtil.java +++ b/src/main/java/com/gaotao/common/utils/AgvClientUtil.java @@ -20,12 +20,12 @@ public class AgvClientUtil { /** * -- GETTER -- - * 获取WCS基础URL + * 获取AGV基础URL * -- SETTER -- - * 设置WCS基础URL + * 设置AGV基础URL */ - @Value("${custom.wcs-url}") - private String wcsUrl; + @Value("${custom.agv-url}") + private String agvUrl; /** *1. 发送任务 - 创建APR搬运任务 @@ -36,7 +36,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData createTask(String taskId, List targets, String configId, Integer priority) { - String url = wcsUrl + "/rpc/createTask"; + String url = agvUrl + "/rpc/createTask"; Map request = new HashMap<>(); request.put("taskId", taskId); request.put("targets", targets); @@ -55,7 +55,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData continueTask(String taskId) { - String url = wcsUrl + "/rpc/continueTask"; + String url = agvUrl + "/rpc/continueTask"; Map request = new HashMap<>(); request.put("taskId", taskId); return HttpClientUtil.doPostByRaw(url, request); @@ -67,7 +67,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData cancelTask(String taskId) { - String url = wcsUrl + "/rpc/cancelTask"; + String url = agvUrl + "/rpc/cancelTask"; Map request = new HashMap<>(); request.put("taskId", taskId); return HttpClientUtil.doPostByRaw(url, request); @@ -81,7 +81,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData feedbackTask(String taskId, String deviceId, String targetPoint) { - String url = wcsUrl + "/feedbackTask"; + String url = agvUrl + "/feedbackTask"; Map request = new HashMap<>(); request.put("taskId", taskId); request.put("deviceId", deviceId); @@ -94,7 +94,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData getOnlineRobot() { - String url = wcsUrl + "/rpc/getOnlineRobot"; + String url = agvUrl + "/rpc/getOnlineRobot"; Map params = new HashMap<>(); return HttpClientUtil.doGet(url, params); } @@ -105,7 +105,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData getMapInfo(String mapName) { - String url = wcsUrl + "/rpc/getMapInfo"; + String url = agvUrl + "/rpc/getMapInfo"; Map params = new HashMap<>(); if (mapName != null) { params.put("mapName", mapName); @@ -118,7 +118,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData getAlarms() { - String url = wcsUrl + "/rpc/getAlarms"; + String url = agvUrl + "/rpc/getAlarms"; Map params = new HashMap<>(); return HttpClientUtil.doGet(url, params); } @@ -131,7 +131,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData applyTrafficCtlArea(String areaName, Integer type, String agvNo) { - String url = wcsUrl + "/applyTrafficCtlArea"; + String url = agvUrl + "/applyTrafficCtlArea"; Map request = new HashMap<>(); request.put("areaName", areaName); request.put("type", type); @@ -151,7 +151,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData applyDeviceArea(String deviceName, Integer type, String taskId, String action, String agvNo) { - String url = wcsUrl + "/applyDeviceArea"; + String url = agvUrl + "/applyDeviceArea"; Map request = new HashMap<>(); request.put("deviceName", deviceName); request.put("type", type); @@ -175,7 +175,7 @@ public class AgvClientUtil { * @return 响应结果 */ public ResponseData getMapStorage(List storageNames, List areaNames, List mapNames) { - String url = wcsUrl + "/getMapStorage"; + String url = agvUrl + "/getMapStorage"; Map request = new HashMap<>(); if (storageNames != null) { request.put("storageNames", storageNames); diff --git a/src/main/java/com/gaotao/common/utils/WcsClientUtil.java b/src/main/java/com/gaotao/common/utils/WcsClientUtil.java new file mode 100644 index 0000000..4970a28 --- /dev/null +++ b/src/main/java/com/gaotao/common/utils/WcsClientUtil.java @@ -0,0 +1,234 @@ +package com.gaotao.common.utils; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * WCS接口调用工具类 + * 基于WMS-WCS接口文档实现 + */ +@Setter +@Getter +@Component +public class WcsClientUtil { + + /** + * WCS基础URL + */ + @Value("${custom.wcs-url}") + private String wcsUrl; + + /** + * 1. 组盘信息下发 + * 原料、半成品、成品等入库信息(包括托盘及物料号,批号,幅宽,直径,重量,位置,是否机械臂分拣选等) + * @param palletInfo 托盘信息 + * @return 响应结果 + */ + public ResponseData sendPalletInfo(Map palletInfo) { + String url = wcsUrl + "/api/pallet/send"; + return HttpClientUtil.doPostByRaw(url, palletInfo); + } + + /** + * 2. 出库信息下发 + * 出库指令(出库单号,物料信息,数量,状态等) + * @param outboundOrder 出库单信息 + * @return 响应结果 + */ + public ResponseData sendOutboundOrder(Map outboundOrder) { + String url = wcsUrl + "/api/outbound/send"; + return HttpClientUtil.doPostByRaw(url, outboundOrder); + } + + /** + * 3. 取消出库信息下发 + * 是否继续执行出库,如库存不足是否继续执行出库需求 + * @param orderNo 出库单号 + * @param continueFlag 是否继续执行标志 + * @return 响应结果 + */ + public ResponseData cancelOutboundOrder(String orderNo, Boolean continueFlag) { + String url = wcsUrl + "/api/outbound/cancel"; + Map request = new HashMap<>(); + request.put("orderNo", orderNo); + request.put("continueFlag", continueFlag); + return HttpClientUtil.doPostByRaw(url, request); + } + + /** + * 4. PDA拣选完成下发 + * 人工拣选物料信息反馈给WCS + * @param pickingInfo 拣选信息 + * @return 响应结果 + */ + public ResponseData sendPdaPickingComplete(Map pickingInfo) { + String url = wcsUrl + "/api/picking/pda/complete"; + return HttpClientUtil.doPostByRaw(url, pickingInfo); + } + + /** + * 5. 单据优先级下发 + * 调整WCS单据任务顺序 + * @param orderNo 单据号 + * @param priority 优先级 + * @return 响应结果 + */ + public ResponseData updateOrderPriority(String orderNo, Integer priority) { + String url = wcsUrl + "/api/order/priority"; + Map request = new HashMap<>(); + request.put("orderNo", orderNo); + request.put("priority", priority); + return HttpClientUtil.doPostByRaw(url, request); + } + + /** + * 6. 物料状态更新下发 + * 物料状态下发WCS系统(待检验,待入库等库位变化) + * @param materialNo 物料号 + * @param status 物料状态 + * @param location 库位信息 + * @return 响应结果 + */ + public ResponseData updateMaterialStatus(String materialNo, String status, String location) { + String url = wcsUrl + "/api/material/status/update"; + Map request = new HashMap<>(); + request.put("materialNo", materialNo); + request.put("status", status); + request.put("location", location); + return HttpClientUtil.doPostByRaw(url, request); + } + + /** + * 7. 盘点任务下发 + * WMS下发盘点任务,WCS控制设备进行通道机完成盘点功能 + * @param inventoryTask 盘点任务信息 + * @return 响应结果 + */ + public ResponseData sendInventoryTask(Map inventoryTask) { + String url = wcsUrl + "/api/inventory/task/send"; + return HttpClientUtil.doPostByRaw(url, inventoryTask); + } + + /** + * 8. 盘点抽样出库需求 + * 财务指定托盘进行抽检 + * @param palletNo 托盘号 + * @param sampleInfo 抽样信息 + * @return 响应结果 + */ + public ResponseData sendInventorySampleOutbound(String palletNo, Map sampleInfo) { + String url = wcsUrl + "/api/inventory/sample/outbound"; + Map request = new HashMap<>(); + request.put("palletNo", palletNo); + request.putAll(sampleInfo); + return HttpClientUtil.doPostByRaw(url, request); + } + + /** + * 9. 盘点抽样回库指令 + * 抽检完成后PDA/电脑产生回库信息 + * @param palletNo 托盘号 + * @param returnInfo 回库信息 + * @return 响应结果 + */ + public ResponseData sendInventorySampleReturn(String palletNo, Map returnInfo) { + String url = wcsUrl + "/api/inventory/sample/return"; + Map request = new HashMap<>(); + request.put("palletNo", palletNo); + request.putAll(returnInfo); + return HttpClientUtil.doPostByRaw(url, request); + } + + /** + * 10. 盘点调整 + * 盘盈,盘亏下发WCS系统 + * @param adjustmentInfo 盘点调整信息 + * @return 响应结果 + */ + public ResponseData sendInventoryAdjustment(Map adjustmentInfo) { + String url = wcsUrl + "/api/inventory/adjustment"; + return HttpClientUtil.doPostByRaw(url, adjustmentInfo); + } + + /** + * 11. 库存对账接口 + * WMS查询立库货位信息进行系统对账 + * @param warehouseCode 仓库代码 + * @param locationCode 库位代码(可选) + * @return 响应结果 + */ + public ResponseData queryInventoryReconciliation(String warehouseCode, String locationCode) { + String url = wcsUrl + "/api/inventory/reconciliation"; + Map params = new HashMap<>(); + params.put("warehouseCode", warehouseCode); + if (locationCode != null) { + params.put("locationCode", locationCode); + } + return HttpClientUtil.doGet(url, params); + } + + // ========== WCS回调WMS的接口方法 ========== + + /** + * 入库信息反馈处理 + * 入库完成信息反馈 + * @param inboundFeedback 入库反馈信息 + * @return 处理结果 + */ + public ResponseData handleInboundFeedback(Map inboundFeedback) { + // 这里应该是处理WCS回调的入库反馈信息 + // 具体实现根据业务需求来定义 + ResponseData response = new ResponseData("入库反馈处理成功"); + response.setSuccess(true); + response.setCode("200"); + return response; + } + + /** + * 机械手拣货完成反馈处理 + * 机械手拣选物料信息反馈给WMS + * @param robotPickingFeedback 机械手拣货反馈信息 + * @return 处理结果 + */ + public ResponseData handleRobotPickingFeedback(Map robotPickingFeedback) { + // 这里应该是处理WCS回调的机械手拣货反馈信息 + ResponseData response = new ResponseData("机械手拣货反馈处理成功"); + response.setSuccess(true); + response.setCode("200"); + return response; + } + + /** + * 盘点反馈处理 + * 通道机盘点信息上传WMS + * @param inventoryFeedback 盘点反馈信息 + * @return 处理结果 + */ + public ResponseData handleInventoryFeedback(Map inventoryFeedback) { + // 这里应该是处理WCS回调的盘点反馈信息 + ResponseData response = new ResponseData("盘点反馈处理成功"); + response.setSuccess(true); + response.setCode("200"); + return response; + } + + /** + * 盘点抽样回库反馈处理 + * WCS回库完成反馈库位信息 + * @param sampleReturnFeedback 抽样回库反馈信息 + * @return 处理结果 + */ + public ResponseData handleSampleReturnFeedback(Map sampleReturnFeedback) { + // 这里应该是处理WCS回调的抽样回库反馈信息 + ResponseData response = new ResponseData("抽样回库反馈处理成功"); + response.setSuccess(true); + response.setCode("200"); + return response; + } +} \ No newline at end of file diff --git a/src/main/java/com/gaotao/config/ShiroConfig.java b/src/main/java/com/gaotao/config/ShiroConfig.java index c339b19..3298624 100644 --- a/src/main/java/com/gaotao/config/ShiroConfig.java +++ b/src/main/java/com/gaotao/config/ShiroConfig.java @@ -49,6 +49,7 @@ public class ShiroConfig { filterMap.put("/sysLanguageList/searchSysLanguage", "anon");//登录页面切换语言 filterMap.put("/sys/userSiteList", "anon");//登录页面选择工厂 filterMap.put("/api/wms/**", "anon");//wcs、rcs反馈信息 + filterMap.put("/api/test/**", "anon");//Redis测试接口 filterMap.put("/swagger/**", "anon"); filterMap.put("/v2/api-docs", "anon"); filterMap.put("/swagger-ui.html", "anon"); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4449ae4..13f35eb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -103,6 +103,7 @@ query: custom: ifs-url: 'https://cclifswebservice.ccldesign.com' wcs-url: 'http://wcs-server/api/receive' + agv-url: 'http://agv-server/api' # WMS消息队列配置 wms: