From 0747c311434866e18e256f64f94b3ec966383447 Mon Sep 17 00:00:00 2001 From: btobab Date: Sun, 21 Sep 2025 12:52:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=B9=85=E6=9B=B4=E6=96=B0=EF=BC=8C?= =?UTF-8?q?=E5=AD=98=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api-tests/MyWmsController.http | 4 +- .../api-tests/TaskController.http | 6 +- .../controller/mywms/MyWmsController.java | 6 +- .../dto/response/mywms/OrderResponse.java | 28 ++ .../serviceImpl/StackerTaskServiceImpl.java | 2 +- .../controller/IMyWmsControllerService.java | 5 +- .../MyWmsControllerServiceImpl.java | 87 +++-- .../job_executor/WcsStackerTaskSender.java | 1 - .../.mvn/wrapper/MavenWrapperDownloader.java | 117 +++++++ .../.mvn/wrapper/maven-wrapper.properties | 18 + .../api-tests/MyWmsController.http | 48 +-- .../api-tests/TaskController.http | 60 ---- .../wms_serve_mengyang/pom.xml | 2 +- .../constant/enums/wms/AppConfigKeyEnums.java | 7 +- .../controller/mywms/MyWmsController.java | 33 +- .../dto/request/mywms/OrderInCancel.java | 15 + .../request/mywms/QueryStandStatusReq.java | 11 + ...t.java => WcsQueryStandStatusRequest.java} | 7 +- .../dto/response/mes/MesApiResponse.java | 5 +- .../dto/response/mywms/OrderResponse.java | 28 ++ .../wms_main/repository/http/HttpClient.java | 27 +- .../wms_main/service/api/IWcsApiService.java | 6 +- .../api/serviceImpl/WcsApiServiceImpl.java | 98 +++--- .../serviceImpl/StackerTaskServiceImpl.java | 206 ++++++------ .../controller/IMyWmsControllerService.java | 13 +- .../MyWmsControllerServiceImpl.java | 140 ++++++-- .../quartz_job/job_executor/MyInExecutor.java | 97 ++++++ .../job_executor/WcsStackerTaskSender.java | 11 +- .../src/main/resources/application.yml | 20 +- .../wms_web_mengyang/src/api/orderIn.js | 2 +- .../wms_web_mengyang/src/http/request.js | 4 +- .../wms_web_mengyang/src/layout/orderIn.vue | 175 ++-------- .../wms_web_mengyang/src/layout/orderOut.vue | 318 ++++-------------- .../wms_web_mengyang/src/router/index.js | 2 - 34 files changed, 838 insertions(+), 771 deletions(-) create mode 100644 202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java create mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/maven-wrapper.properties delete mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/TaskController.http create mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCancel.java create mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/QueryStandStatusReq.java rename 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/{WcsCanFeedRequest.java => WcsQueryStandStatusRequest.java} (55%) create mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java create mode 100644 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/MyInExecutor.java diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http index 4291a4f..6538bc2 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http @@ -8,7 +8,7 @@ Content-Type: application/json { "taskId": "testOrderId9", - "vehicleNo": "1001" + "vehicleNo": "1002" } ### 2. 出库订单接口 @@ -17,7 +17,7 @@ Content-Type: application/json { "taskId": "testOrderId1", - "vehicleNo": "1009" + "vehicleNo": "1002" } ### 3. 库存查询接口 - 仅按载具查询 diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http index b43cd83..d0d0e46 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http @@ -7,8 +7,8 @@ POST {{baseUrl}}/wms/task/wcsRequestVehicleIn Content-Type: application/json { - "origin": "R1", - "vehicleNo": "1001", + "origin": "CR", + "vehicleNo": "1002", "codeMessage": "test", "remark": "载具入库测试" } @@ -18,7 +18,7 @@ POST {{baseUrl}}/wms/task/sendTaskResult Content-Type: application/json { - "taskId": "1754999361391010000", + "taskId": "1756881794848010000", "taskStatus": 100, "vehicleNo": "1009", "destination": "CR", diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java index 7f55988..103d3d9 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java @@ -5,13 +5,13 @@ import com.wms_main.model.dto.request.mywms.OrderOutReq; import com.wms_main.model.dto.request.mywms.StockReq; import com.wms_main.model.dto.request.mywms.StockRespGoodsDetail; import com.wms_main.model.dto.response.mywms.MyWmsResponse; +import com.wms_main.model.dto.response.mywms.OrderResponse; import com.wms_main.service.controller.IMyWmsControllerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; -import org.springframework.web.bind.annotation.GetMapping; @RestController @ResponseBody @@ -24,12 +24,12 @@ public class MyWmsController { private final IMyWmsControllerService myWmsControllerService; @PostMapping("/orderIn") - public MyWmsResponse orderIn(@RequestBody OrderInReq request) { + public OrderResponse orderIn(@RequestBody OrderInReq request) { return myWmsControllerService.orderIn(request); } @PostMapping("/orderOut") - public MyWmsResponse orderOut(@RequestBody OrderOutReq request) { + public OrderResponse orderOut(@RequestBody OrderOutReq request) { return myWmsControllerService.orderOut(request); } diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java new file mode 100644 index 0000000..ae7bbb3 --- /dev/null +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java @@ -0,0 +1,28 @@ +package com.wms_main.model.dto.response.mywms; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class OrderResponse { + @JsonProperty("code") + private Integer code; + + @JsonProperty("message") + private String message; + + public static OrderResponse success() { + return new OrderResponse(0, "success"); + } + + public static OrderResponse error(String message) { + return new OrderResponse(999, message); + } +} diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java index 7160e94..999952e 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java @@ -505,6 +505,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .set(TAppLocation::getVehicleId, "") .eq(TAppLocation::getLocationId, thisVehicle.getLocationId()) .eq(TAppLocation::getVehicleId, vehicleId)); + appCommon.updateWorkingLocations(thisVehicle.getLocationId(), 0); // 更新载具信息 thisVehicle.setVehicleStatus(WmsVehicleStatusEnums.OUT.getCode()); thisVehicle.setLocationId(""); @@ -514,7 +515,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .set(TAppStock::getStockStatus, WmsStockStatusEnums.OUTED.getCode()) .set(TAppStock::getLocationId, "") .eq(TAppStock::getVehicleId, vehicleId)); - appCommon.updateWorkingLocations(thisVehicle.getLocationId(), 0); agvLockService.releaseAllInboundPortLocks("CR"); // 当前载具的任务列表 List thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId); diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java index d3cf1a8..5159d76 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java @@ -5,13 +5,14 @@ import com.wms_main.model.dto.request.mywms.OrderOutReq; import com.wms_main.model.dto.request.mywms.StockReq; import com.wms_main.model.dto.request.mywms.StockRespGoodsDetail; import com.wms_main.model.dto.response.mywms.MyWmsResponse; +import com.wms_main.model.dto.response.mywms.OrderResponse; import java.util.List; public interface IMyWmsControllerService { - MyWmsResponse orderIn(OrderInReq request); + OrderResponse orderIn(OrderInReq request); - MyWmsResponse orderOut(OrderOutReq request); + OrderResponse orderOut(OrderOutReq request); MyWmsResponse> stock(StockReq request); diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java index 678f2a9..e9e1242 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java @@ -1,9 +1,8 @@ package com.wms_main.service.controller.serviceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.wms_main.app.AppCommon; import com.wms_main.constant.enums.wms.OrderStatusEnum; +import com.wms_main.constant.enums.wms.WmsLocationOccupyStatusEnums; import com.wms_main.constant.enums.wms.WmsStockStatusEnums; import com.wms_main.dao.ITAppLocationService; import com.wms_main.dao.ITAppOrderInService; @@ -12,6 +11,7 @@ import com.wms_main.dao.ITAppStockService; import com.wms_main.model.dto.request.mywms.*; import com.wms_main.model.dto.request.wcs.WcsCanFeedRequest; import com.wms_main.model.dto.response.mywms.MyWmsResponse; +import com.wms_main.model.dto.response.mywms.OrderResponse; import com.wms_main.model.dto.response.wcs.WcsApiResponse; import com.wms_main.model.dto.response.wcs.WcsCanFeedResponse; import com.wms_main.model.po.TAppLocation; @@ -22,7 +22,6 @@ import com.wms_main.repository.utils.StringUtils; import com.wms_main.repository.utils.UUIDUtils; import com.wms_main.service.api.IWcsApiService; import com.wms_main.service.business.IAgvLockService; -import com.wms_main.service.business.IStackerTaskService; import com.wms_main.service.controller.IMyWmsControllerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -40,26 +39,30 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { private final ITAppOrderOutService appOrderOutService; private final ITAppStockService appStockService; private final ITAppLocationService appLocationService; - private final IStackerTaskService stackerTaskService; private final IAgvLockService agvLockService; private final IWcsApiService wcsApiService; - private final AppCommon appCommon; - private static final String L_TEMP_FLAG = "temp"; @Override - public MyWmsResponse orderIn(OrderInReq request) { + public OrderResponse orderIn(OrderInReq request) { try { - if (request == null) return MyWmsResponse.error("参数错误", null); + if (request == null) + return OrderResponse.error("参数错误"); if (!request.isValid()) { - return MyWmsResponse.error("参数错误", null); + return OrderResponse.error("参数错误"); } // 校验是否存在相同的入库单 List withTaskId = appOrderInService.getWithTaskId(request.getTaskId()); if (withTaskId == null) { - return MyWmsResponse.error("数据服务异常,请稍后重试", null); + return OrderResponse.error("数据服务异常,请稍后重试"); } if (!withTaskId.isEmpty()) { - return MyWmsResponse.error("入库单已存在,请勿重复推送", null); + return OrderResponse.error("入库单已存在,请勿重复推送"); + } + Boolean isDup = appStockService + .exists(new LambdaQueryWrapper().eq(TAppStock::getVehicleId, request.getVehicleNo()) + .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())); + if (isDup) { + return OrderResponse.error("库存重复,托盘号: " + request.getVehicleNo()); } TAppOrderIn orderIn = new TAppOrderIn(); orderIn.setRecordId(UUIDUtils.getNewUUID()); @@ -71,37 +74,37 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { orderIn.setCreateTime(LocalDateTime.now()); orderIn.setUpdateTime(LocalDateTime.now()); if (!appOrderInService.save(orderIn)) { - return MyWmsResponse.error("入库单保存失败,请稍后再试", null); + return OrderResponse.error("入库单保存失败,请稍后再试"); } - return MyWmsResponse.success(); + return OrderResponse.success(); } catch (Exception e) { - return MyWmsResponse.error("入库单添加异常", null); + return OrderResponse.error("入库单添加异常"); } } @Override - public MyWmsResponse orderOut(OrderOutReq request) { + public OrderResponse orderOut(OrderOutReq request) { try { - if (request == null || StringUtils.isEmpty(request.getTaskId()) || StringUtils.isEmpty(request.getVehicleNo())) { - return MyWmsResponse.error("参数错误", null); + if (request == null || StringUtils.isEmpty(request.getTaskId()) + || StringUtils.isEmpty(request.getVehicleNo())) { + return OrderResponse.error("参数错误"); } - + List orderOutCheckList = appOrderOutService.getWithTaskId(request.getTaskId()); if (orderOutCheckList == null) { - return MyWmsResponse.error("数据服务异常,请稍后重试", null); + return OrderResponse.error("数据服务异常,请稍后重试"); } if (!orderOutCheckList.isEmpty()) { - return MyWmsResponse.error("出库单已存在,请勿重复推送", null); + return OrderResponse.error("出库单已存在,请勿重复推送"); } List vehicleStocks = appStockService.list( - new LambdaQueryWrapper() - .eq(TAppStock::getVehicleId, request.getVehicleNo()) - .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode()) - ); + new LambdaQueryWrapper() + .eq(TAppStock::getVehicleId, request.getVehicleNo()) + .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())); if (vehicleStocks == null || vehicleStocks.isEmpty()) { - return MyWmsResponse.error("载具号" + request.getVehicleNo() + "无库存记录", null); + return OrderResponse.error("载具号" + request.getVehicleNo() + "无库存记录"); } TAppOrderOut orderOut = new TAppOrderOut(); @@ -113,18 +116,19 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { orderOut.setUpdateTime(LocalDateTime.now()); if (!appOrderOutService.save(orderOut)) { - return MyWmsResponse.error("出库单保存失败,请稍后再试", null); + return OrderResponse.error("出库单保存失败,请稍后再试"); } - return MyWmsResponse.success(); + return OrderResponse.success(); } catch (Exception e) { log.error("出库任务添加失败", e); - return MyWmsResponse.error("出库任务添加失败,请稍后再试", null); + return OrderResponse.error("出库任务添加失败,请稍后再试"); } } @Override public MyWmsResponse> stock(StockReq request) { - if (request == null || request.empty()) return MyWmsResponse.error("参数错误", null); + if (request == null || request.empty()) + return MyWmsResponse.error("参数错误", null); List stocks = new ArrayList<>(); Map vehicleStockMap = new HashMap<>(); if (request.getDetails() == null || request.getDetails().isEmpty()) { @@ -133,9 +137,10 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { for (StockReqGoodsDetail stockReqGoodsDetail : request.getDetails()) { List stockList = appStockService.list( new LambdaQueryWrapper() - .eq(StringUtils.isNotEmpty(stockReqGoodsDetail.getVehicleNo()), TAppStock::getVehicleId, stockReqGoodsDetail.getVehicleNo()) - .eq(StringUtils.isNotEmpty(stockReqGoodsDetail.getLocationId()), TAppStock::getLocationId, stockReqGoodsDetail.getLocationId()) - ); + .eq(StringUtils.isNotEmpty(stockReqGoodsDetail.getVehicleNo()), TAppStock::getVehicleId, + stockReqGoodsDetail.getVehicleNo()) + .eq(StringUtils.isNotEmpty(stockReqGoodsDetail.getLocationId()), + TAppStock::getLocationId, stockReqGoodsDetail.getLocationId())); if (stockList != null && !stockList.isEmpty()) { for (TAppStock stock : stockList) { if (!vehicleStockMap.containsKey(stock.getVehicleId())) { @@ -165,34 +170,28 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { public MyWmsResponse queryCanFeed() { try { // 1. 检查库位是否足够 - TAppLocation location = stackerTaskService.requestOneLocation(null, L_TEMP_FLAG); - if (location == null || StringUtils.isEmpty(location.getLocationId())) { + if (!appLocationService.exists(new LambdaQueryWrapper().eq(TAppLocation::getIsOccupy, + WmsLocationOccupyStatusEnums.EMPTY.getCode()))) { return MyWmsResponse.error("无剩余可用库位", false); } - // 释放预占的库位 - appLocationService.update(new LambdaUpdateWrapper() - .eq(TAppLocation::getLocationId, location.getLocationId()) - .set(TAppLocation::getIsOccupy, 0) - .set(TAppLocation::getVehicleId, "")); - appCommon.updateWorkingLocations(location.getLocationId(), 0); - + // 2. 调用wcs.canFeed检查wcs状态 WcsApiResponse wcsResponse = wcsApiService.canFeed(new WcsCanFeedRequest("CR")); if (wcsResponse == null || wcsResponse.getData() == null) { return MyWmsResponse.error("WCS系统查询失败", false); } - + Boolean wcsAllow = wcsResponse.getData().isAllowAction(); if (!wcsAllow) { return MyWmsResponse.error("WCS系统不允许入库", false); } - + // 3. 检查agvLock服务获取wms状态 Boolean wmsAllow = agvLockService.canFeedToInboundPort("CR"); if (!wmsAllow) { return MyWmsResponse.error("入库口锁定中", false); } - + return MyWmsResponse.success(true); } catch (Exception e) { return MyWmsResponse.error("系统异常,请稍后重试", false); diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java index 1bcb834..1b30e02 100644 --- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java +++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java @@ -6,7 +6,6 @@ import com.wms_main.constant.enums.wcs.WcsApiResponseCodeEnums; import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums; import com.wms_main.constant.enums.wcs.WcsStackerTaskTypeEnums; import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums; -import com.wms_main.constant.enums.wms.WmsTaskTypeEnums; import com.wms_main.dao.ITAppTaskService; import com.wms_main.dao.ITAppWcsTaskService; import com.wms_main.model.bo.wcs.WcsStackerTask; diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/MavenWrapperDownloader.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..b405834 --- /dev/null +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} \ No newline at end of file diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/maven-wrapper.properties b/202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..f0df336 --- /dev/null +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar \ No newline at end of file diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/MyWmsController.http b/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/MyWmsController.http index 7b227eb..f219dc8 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/MyWmsController.http +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/MyWmsController.http @@ -7,8 +7,8 @@ POST {{baseUrl}}/mywms/orderIn Content-Type: application/json { - "taskId": "testOrderId2", - "vehicleNo": "1006" + "taskId": "testOrderId1", + "vehicleNo": "1003" } ### 2. 出库订单接口 @@ -17,40 +17,42 @@ Content-Type: application/json { "taskId": "testOrderId3", - "vehicleNo": "1007" + "vehicleNo": "1001" } -### 3. 库存查询接口 - 仅按载具查询 -POST {{baseUrl}}/mywms/stock +### 3. 发送任务结果 - 任务完成 +POST {{baseUrl}}/wms/task/sendTaskResult Content-Type: application/json { - "requestId": "testOrderId1", - "details": [ - { - "vehicleNo": "1005" - } - ] + "taskId": "1757666162511010000", + "taskStatus": 100, + "vehicleNo": "1007", + "destination": "C1", + "message": "任务执行成功" } -### 4. 库存查询接口 - 仅按库位查询 -POST {{baseUrl}}/mywms/stock +### 4. 检查是否允许投料 +POST {{baseUrl}}/mywms/agvNotify Content-Type: application/json { - "requestId": "testOrderId2", - "details": [ - { - "locationId": "A01-01-01-02" - } - ] + "standType": 1 } -### 5. 检查是否允许投料 -GET {{baseUrl}}/mywms/allowFeed - ### 5. 检查是否允许出库 -GET {{baseUrl}}/mywms/allowOut +POST {{baseUrl}}/mywms/agvDone + +### 6. 检查是否允许出库 +GET {{baseUrl}}/mywms/test + +### 7. 取消任务 +POST {{baseUrl}}/mywms/cancelOrderIn +Content-Type: application/json + +{ + "vehicleNo": "1003" +} ### 测试数据说明 # 1. orderIn: 入库订单接口,需要taskId和vehicleNo diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/TaskController.http b/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/TaskController.http deleted file mode 100644 index 2e55c9c..0000000 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/TaskController.http +++ /dev/null @@ -1,60 +0,0 @@ -### TaskController接口测试 - WMS任务控制接口 -### 基础配置 -@baseUrl = http://localhost:12315 - -### 1. WCS请求载具入库 -POST {{baseUrl}}/wms/task/wcsRequestVehicleIn -Content-Type: application/json - -{ - "origin": "R1", - "vehicleNo": "1006", - "codeMessage": "test", - "remark": "载具入库测试" -} - -### 2. 发送任务结果 - 任务完成 -POST {{baseUrl}}/wms/task/sendTaskResult -Content-Type: application/json - -{ - "taskId": "1754997816795010000", - "taskStatus": 100, - "vehicleNo": "1007", - "destination": "C1", - "message": "任务执行成功" -} - -### 测试数据说明 -# 1. wcsRequestVehicleIn: WCS请求载具入库 -# - origin: 点位(必填) -# - vehicleNo: 载具信息(必填) -# - codeMessage: 条码信息(可选) -# - remark: 备注(可选) - -# 2. sendTaskResult: WCS反馈任务执行结果 -# - taskId: 任务ID(必填) -# - taskStatus: 任务状态(必填) -# * 0: 等待执行 -# * 1: 执行中 -# * 2: 执行完成 -# * 3: 执行失败 -# - vehicleNo: 载具号(必填) -# - destination: 终点(可选) -# - message: 信息(可选) - -### 响应格式说明 -# wcsRequestVehicleIn返回WcsVehicleInResponse: -# { -# "success": true, -# "code": "SUCCESS", -# "message": "请求成功", -# "data": {} -# } - -# sendTaskResult返回BaseWcsApiResponse: -# { -# "success": true, -# "code": "SUCCESS", -# "message": "任务结果接收成功" -# } \ No newline at end of file diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/pom.xml b/202504-Wms-MengYang-tp/wms_serve_mengyang/pom.xml index a999ade..202b023 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/pom.xml +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/pom.xml @@ -141,7 +141,7 @@ - wms-box-server + wms-tp-server org.springframework.boot diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java index c774be6..2be5f16 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java @@ -12,8 +12,6 @@ public enum AppConfigKeyEnums { WCS_STACKER_TASK_URL("WcsStackerTaskUrl", "发送堆垛机任务地址"), WCS_PICK_TASK_URL("WcsPickTaskUrl", "发送拣选任务地址"), WCS_CANCEL_PICK_TASK_URL("WcsCancelPickTaskUrl", "发送取消拣选任务地址"), - WCS_CAN_FEED_URL("wcsCanFeedUrl", "查询wcs是否可上料"), - WCS_CAN_OUT_URL("wcsCanOutUrl", "wcsCanOutUrl"), WCS_RELEASE_BOX_URL("WcsReleaseBoxUrl", "发送释放站台箱子地址"), STAND_CAPACITY("StandCapacity", "站台容量"), IMAGE_IP("ImageIp", "图片存放ip"), @@ -22,8 +20,9 @@ public enum AppConfigKeyEnums { MES_GET_GOODS_URL("MesGetGoodsUrl", "获取物料信息地址"), ERP_GET_VEHICLENO_DATA("ErpGetVehicleNoData", "根据托盘号查询简单生产入库单"), WMS_ORDER_IN_CALLBACK("WmsOrderInCallback", "WMS接受的入库执行后回调地址"), - WMS_ORDER_OUT_CALLBACK("WmsOrderOutCallback", "WMS接受的出库执行后回调地址"); - + WMS_ORDER_OUT_CALLBACK("WmsOrderOutCallback", "WMS接受的出库执行后回调地址"), + WCS_QUERY_STAND_STATUS_URL("wcsQueryStandStatus", "查询AGV是否可取货"), + WCS_AGV_DONE("wcsAGVDone", "AGV取货完成通知"); private final String key; private final String desc; diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java index f77ce30..28916fc 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java @@ -1,16 +1,22 @@ package com.wms_main.controller.mywms; +import com.wms_main.model.dto.request.mywms.OrderInCancel; import com.wms_main.model.dto.request.mywms.OrderInReq; import com.wms_main.model.dto.request.mywms.OrderOutReq; +import com.wms_main.model.dto.request.mywms.QueryStandStatusReq; import com.wms_main.model.dto.request.mywms.StockReq; import com.wms_main.model.dto.request.mywms.StockRespGoodsDetail; import com.wms_main.model.dto.response.mywms.MyWmsResponse; +import com.wms_main.model.dto.response.mywms.OrderResponse; import com.wms_main.service.controller.IMyWmsControllerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.GetMapping; @RestController @ResponseBody @@ -23,12 +29,12 @@ public class MyWmsController { private final IMyWmsControllerService myWmsControllerService; @PostMapping("/orderIn") - public MyWmsResponse orderIn(@RequestBody OrderInReq request) { + public OrderResponse orderIn(@RequestBody OrderInReq request) { return myWmsControllerService.orderIn(request); } @PostMapping("/orderOut") - public MyWmsResponse orderOut(@RequestBody OrderOutReq request) { + public OrderResponse orderOut(@RequestBody OrderOutReq request) { return myWmsControllerService.orderOut(request); } @@ -37,13 +43,24 @@ public class MyWmsController { return myWmsControllerService.stock(request); } - @GetMapping("/allowFeed") - public MyWmsResponse canFeed() { - return myWmsControllerService.queryCanFeed(); + @PostMapping("/agvNotify") + public MyWmsResponse agvNotify(@RequestBody QueryStandStatusReq request) { + return myWmsControllerService.queryStandStatus(request); } - @GetMapping("/allowOut") - public MyWmsResponse canOut() { - return myWmsControllerService.queryCanOut(); + @PostMapping("/agvDone") + public MyWmsResponse agvDone() { + return myWmsControllerService.agvDone(); + } + + @PostMapping("/cancelOrderIn") + public String cancelOrderIn(@RequestBody OrderInCancel request) { + return myWmsControllerService.cancelOrderIn(request); + } + + + @GetMapping("/test") + public String test() { + return "success"; } } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCancel.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCancel.java new file mode 100644 index 0000000..2775a35 --- /dev/null +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCancel.java @@ -0,0 +1,15 @@ +package com.wms_main.model.dto.request.mywms; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class OrderInCancel { + @JsonProperty("vehicleNo") + private String vehicleNo; +} diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/QueryStandStatusReq.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/QueryStandStatusReq.java new file mode 100644 index 0000000..a1f28be --- /dev/null +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/QueryStandStatusReq.java @@ -0,0 +1,11 @@ +package com.wms_main.model.dto.request.mywms; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter +public class QueryStandStatusReq { + @JsonProperty("standType") + private Integer standType; +} diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsCanFeedRequest.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsQueryStandStatusRequest.java similarity index 55% rename from 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsCanFeedRequest.java rename to 202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsQueryStandStatusRequest.java index 6aef3a3..eb20fd6 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsCanFeedRequest.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsQueryStandStatusRequest.java @@ -1,13 +1,16 @@ package com.wms_main.model.dto.request.wcs; +import com.fasterxml.jackson.annotation.JsonProperty; + import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor -public class WcsCanFeedRequest { +public class WcsQueryStandStatusRequest { /** * 入库口编号(默认为单一入库口) */ - private String inboundPort; + @JsonProperty("standType") + private Integer standType; } \ No newline at end of file diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java index d8b7703..e47229f 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java @@ -17,7 +17,10 @@ public class MesApiResponse { @JsonProperty("message") private String message; + @JsonProperty("data") + private Boolean data; + public static MesApiResponse error(String msg) { - return new MesApiResponse(999, msg); + return new MesApiResponse(999, msg, false); } } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java new file mode 100644 index 0000000..ae7bbb3 --- /dev/null +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mywms/OrderResponse.java @@ -0,0 +1,28 @@ +package com.wms_main.model.dto.response.mywms; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class OrderResponse { + @JsonProperty("code") + private Integer code; + + @JsonProperty("message") + private String message; + + public static OrderResponse success() { + return new OrderResponse(0, "success"); + } + + public static OrderResponse error(String message) { + return new OrderResponse(999, message); + } +} diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/repository/http/HttpClient.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/repository/http/HttpClient.java index ca9d25e..65cdf1c 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/repository/http/HttpClient.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/repository/http/HttpClient.java @@ -29,6 +29,7 @@ public class HttpClient { /** * 发送一个 Get 请求 + * * @param request 请求数据 * @return 响应数据 */ @@ -36,14 +37,14 @@ public class HttpClient { log.info("请求信息{}", StringUtils.objectToString(request)); HttpResponse response = new HttpResponse(); String url = request.getUrl(); - if(StringUtils.isEmpty(url)) { + if (StringUtils.isEmpty(url)) { // 请求地址没传 response.setSuccess(false); response.setResponseCode(999); response.setException(new Exception("请求地址为空")); return response; } - if(StringUtils.isNotEmpty(request.getData())) { + if (StringUtils.isNotEmpty(request.getData())) { url += request.getData(); } response.setRequestUrl(url); @@ -52,7 +53,7 @@ public class HttpClient { CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpGet getRequest = new HttpGet(url + request.getData()); // 设置请求头 - for(Map.Entry entry : request.getHeader().entrySet()){ + for (Map.Entry entry : request.getHeader().entrySet()) { getRequest.setHeader(entry.getKey(), entry.getValue()); } RequestConfig requestConfig = RequestConfig.custom() @@ -87,9 +88,9 @@ public class HttpClient { } } - /** * 发送一个 Post 请求 + * * @param request 请求数据 * @return 响应数据 */ @@ -97,14 +98,14 @@ public class HttpClient { log.info("请求信息{}", StringUtils.objectToString(request)); HttpResponse response = new HttpResponse(); String url = request.getUrl(); - if(StringUtils.isEmpty(url)) { + if (StringUtils.isEmpty(url)) { // 请求地址没传 response.setSuccess(false); response.setResponseCode(999); response.setException(new Exception("请求地址为空")); return response; } - if(StringUtils.isEmpty(request.getData())) { + if (StringUtils.isEmpty(request.getData())) { request.setData("{}"); } response.setRequestUrl(url); @@ -113,11 +114,12 @@ public class HttpClient { CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpPost postRequest = new HttpPost(url); postRequest.setHeader("Content-Type", request.getContentType()); - postRequest.setHeader("Authorization", request.getToken()); + postRequest.setHeader("Expect", "100-continue"); + // postRequest.setHeader("Authorization", request.getToken()); // 设置请求头 - for(Map.Entry entry : request.getHeader().entrySet()){ - postRequest.setHeader(entry.getKey(), entry.getValue()); - } + // for(Map.Entry entry : request.getHeader().entrySet()){ + // postRequest.setHeader(entry.getKey(), entry.getValue()); + // } postRequest.setEntity(new StringEntity(request.getData())); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(request.getTimeout()) @@ -153,6 +155,7 @@ public class HttpClient { /** * 发送一个 delete 请求 + * * @param request 请求数据 * @return 响应数据 */ @@ -160,14 +163,14 @@ public class HttpClient { log.info("请求信息{}", StringUtils.objectToString(request)); HttpResponse response = new HttpResponse(); String url = request.getUrl(); - if(StringUtils.isEmpty(url)) { + if (StringUtils.isEmpty(url)) { // 请求地址没传 response.setSuccess(false); response.setResponseCode(999); response.setException(new Exception("请求地址为空")); return response; } - if(!StringUtils.isEmpty(request.getData())) { + if (!StringUtils.isEmpty(request.getData())) { url += request.getData(); } response.setRequestUrl(url); diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java index d0e330f..fded93d 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java @@ -2,8 +2,8 @@ package com.wms_main.service.api; import com.wms_main.model.bo.wcs.WcsPickTask; import com.wms_main.model.bo.wcs.WcsStackerTask; -import com.wms_main.model.dto.request.wcs.WcsCanFeedRequest; import com.wms_main.model.dto.request.wcs.WcsPickTaskRequest; +import com.wms_main.model.dto.request.wcs.WcsQueryStandStatusRequest; import com.wms_main.model.dto.request.wcs.WcsReleaseBoxRequest; import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest; import com.wms_main.model.dto.response.wcs.BaseWcsApiResponse; @@ -47,7 +47,7 @@ public interface IWcsApiService { * @param request 查询请求信息 * @return 查询结果 */ - WcsApiResponse canFeed(WcsCanFeedRequest request); + WcsApiResponse queryStandStatus(WcsQueryStandStatusRequest request); - WcsApiResponse canOut(WcsCanFeedRequest request); + BaseWcsApiResponse agvDone(); } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/WcsApiServiceImpl.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/WcsApiServiceImpl.java index 24a5e86..13cfc5a 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/WcsApiServiceImpl.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/WcsApiServiceImpl.java @@ -4,8 +4,8 @@ import com.wms_main.app.AppCommon; import com.wms_main.constant.enums.wms.AppConfigKeyEnums; import com.wms_main.model.bo.wcs.WcsPickTask; import com.wms_main.model.bo.wcs.WcsStackerTask; -import com.wms_main.model.dto.request.wcs.WcsCanFeedRequest; import com.wms_main.model.dto.request.wcs.WcsPickTaskRequest; +import com.wms_main.model.dto.request.wcs.WcsQueryStandStatusRequest; import com.wms_main.model.dto.request.wcs.WcsReleaseBoxRequest; import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest; import com.wms_main.model.dto.response.wcs.BaseWcsApiResponse; @@ -19,8 +19,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; - /** * Wcs接口服务实现 */ @@ -33,32 +31,36 @@ public class WcsApiServiceImpl implements IWcsApiService { /** * 发送堆垛机任务 + * * @param request 任务请求 * @return 响应结果 */ @Override public WcsApiResponse sendWcsStackerTask(WcsStackerTaskRequest request) { // 设置http请求 - HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_STACKER_TASK_URL.getKey()), request); - // HttpResponse httpResponse = httpClient.httpPost(httpRequest); - // if (httpResponse != null && httpResponse.isSuccess()) { - // WcsApiResponse response = new WcsApiResponse<>(); - // response = httpResponse.getData(response.getClass().asSubclass(WcsApiResponse.class)); - // return response; - // } - // TODO success -> error - return WcsApiResponse.success("请求未获得响应信息。", null); + HttpRequest httpRequest = HttpRequest + .postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_STACKER_TASK_URL.getKey()), request); + HttpResponse httpResponse = httpClient.httpPost(httpRequest); + if (httpResponse != null && httpResponse.isSuccess()) { + WcsApiResponse response = new WcsApiResponse<>(); + response = httpResponse.getData(response.getClass().asSubclass(WcsApiResponse.class)); + return response; + } + return WcsApiResponse.error("请求未获得响应信息。", null); + // return WcsApiResponse.success("请求未获得响应信息。", null); } /** * 发送拣选任务 + * * @param request 任务请求 * @return 响应结果 */ @Override public WcsApiResponse sendPickTask(WcsPickTaskRequest request) { // 设置http请求 - HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_PICK_TASK_URL.getKey()), request); + HttpRequest httpRequest = HttpRequest + .postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_PICK_TASK_URL.getKey()), request); HttpResponse httpResponse = httpClient.httpPost(httpRequest); if (httpResponse != null && httpResponse.isSuccess()) { WcsApiResponse response = new WcsApiResponse<>(); @@ -70,13 +72,15 @@ public class WcsApiServiceImpl implements IWcsApiService { /** * 发送释放载具请求 + * * @param request 释放请求信息 * @return 响应结果 */ @Override public BaseWcsApiResponse releaseBox(WcsReleaseBoxRequest request) { // 设置http请求 - HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_RELEASE_BOX_URL.getKey()), request); + HttpRequest httpRequest = HttpRequest + .postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_RELEASE_BOX_URL.getKey()), request); HttpResponse httpResponse = httpClient.httpPost(httpRequest); if (httpResponse != null && httpResponse.isSuccess()) { return httpResponse.getData(BaseWcsApiResponse.class); @@ -86,13 +90,15 @@ public class WcsApiServiceImpl implements IWcsApiService { /** * 取消拣选任务请求 + * * @param request 取消请求信息 * @return 响应结果 */ @Override public WcsApiResponse cancelPickTask(WcsPickTaskRequest request) { // 设置http请求 - HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_CANCEL_PICK_TASK_URL.getKey()), request); + HttpRequest httpRequest = HttpRequest + .postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_CANCEL_PICK_TASK_URL.getKey()), request); HttpResponse httpResponse = httpClient.httpPost(httpRequest); if (httpResponse != null && httpResponse.isSuccess()) { WcsApiResponse response = new WcsApiResponse<>(); @@ -104,47 +110,39 @@ public class WcsApiServiceImpl implements IWcsApiService { /** * 查询WCS系统是否可上料 + * * @param request 查询请求信息 * @return 查询结果 */ @Override - public WcsApiResponse canFeed(WcsCanFeedRequest request) { - HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_CAN_FEED_URL.getKey()), request); -// HttpResponse httpResponse = httpClient.httpPost(httpRequest); -// if (httpResponse != null && httpResponse.isSuccess()) { -// WcsApiResponse response = new WcsApiResponse<>(); -// response = httpResponse.getData(response.getClass().asSubclass(WcsApiResponse.class)); -// return response; -// } - // TODO error -> success -// return WcsApiResponse.error("请求未获得响应信息。", null); - WcsCanFeedResponse wcsCanFeedResponse = new WcsCanFeedResponse(); - wcsCanFeedResponse.setResponseTime(LocalDateTime.now()); - wcsCanFeedResponse.setMsg("success"); - wcsCanFeedResponse.setAllowAction(true); - return WcsApiResponse.success("成功", wcsCanFeedResponse); + public WcsApiResponse queryStandStatus(WcsQueryStandStatusRequest request) { + HttpRequest httpRequest = HttpRequest.postInstanceOf( + appCommon.getConfigByKey(AppConfigKeyEnums.WCS_QUERY_STAND_STATUS_URL.getKey()), request); + HttpResponse httpResponse = httpClient.httpPost(httpRequest); + if (httpResponse != null && httpResponse.isSuccess()) { + WcsApiResponse response = new WcsApiResponse<>(); + response = httpResponse.getData(response.getClass().asSubclass(WcsApiResponse.class)); + return response; + } + return WcsApiResponse.error("请求未获得响应信息。", null); + // WcsCanFeedResponse wcsCanFeedResponse = new WcsCanFeedResponse(); + // wcsCanFeedResponse.setResponseTime(LocalDateTime.now()); + // wcsCanFeedResponse.setMsg("success"); + // wcsCanFeedResponse.setAllowAction(true); + // return WcsApiResponse.success("成功", wcsCanFeedResponse); } - /** - * 查询WCS系统是否可出库 - * @param request 查询请求信息 - * @return 查询结果 - */ @Override - public WcsApiResponse canOut(WcsCanFeedRequest request) { - HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_CAN_OUT_URL.getKey()), request); -// HttpResponse httpResponse = httpClient.httpPost(httpRequest); -// if (httpResponse != null && httpResponse.isSuccess()) { -// WcsApiResponse response = new WcsApiResponse<>(); -// response = httpResponse.getData(response.getClass().asSubclass(WcsApiResponse.class)); -// return response; -// } - // TODO error -> success -// return WcsApiResponse.error("请求未获得响应信息。", null); - WcsCanFeedResponse wcsCanFeedResponse = new WcsCanFeedResponse(); - wcsCanFeedResponse.setResponseTime(LocalDateTime.now()); - wcsCanFeedResponse.setMsg("success"); - wcsCanFeedResponse.setAllowAction(true); - return WcsApiResponse.success("成功", wcsCanFeedResponse); + public BaseWcsApiResponse agvDone() { + HttpRequest httpRequest = HttpRequest.postInstanceOf( + appCommon.getConfigByKey(AppConfigKeyEnums.WCS_AGV_DONE.getKey()), null); + HttpResponse httpResponse = httpClient.httpPost(httpRequest); + if (httpResponse != null && httpResponse.isSuccess()) { + BaseWcsApiResponse response = new BaseWcsApiResponse(); + response = httpResponse.getData(response.getClass().asSubclass(BaseWcsApiResponse.class)); + return response; + } + return BaseWcsApiResponse.error("请求未获得响应信息。"); + // return WcsApiResponse.success("成功", true); } } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java index cac2469..cf894a8 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/business/serviceImpl/StackerTaskServiceImpl.java @@ -9,6 +9,7 @@ import com.wms_main.constant.enums.wms.*; import com.wms_main.dao.*; import com.wms_main.model.dto.request.mywms.OrderInCBReq; import com.wms_main.model.dto.request.mywms.OrderOutCBReq; +import com.wms_main.model.dto.response.mes.MesApiResponse; import com.wms_main.model.po.*; import com.wms_main.repository.utils.ConvertUtils; import com.wms_main.repository.utils.StringUtils; @@ -25,7 +26,6 @@ import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; - /** * 服务实现 */ @@ -92,9 +92,9 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .set(TAppTask::getWcsTaskId, wcsTask.getWcsTaskId()) .set(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.EXECUTED.getCode()) .eq(TAppTask::getVehicleId, wcsTask.getVehicleId()) - .eq(TAppTask::getTaskType, ConvertUtils.convertStackerTaskTypeFromWcsToWms(wcsTask.getWcsTaskType())) - .eq(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.WAIT.getCode()) - ); + .eq(TAppTask::getTaskType, + ConvertUtils.convertStackerTaskTypeFromWcsToWms(wcsTask.getWcsTaskType())) + .eq(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.WAIT.getCode())); } /** @@ -131,33 +131,36 @@ public class StackerTaskServiceImpl implements IStackerTaskService { // 查询库位 List locationList = appLocationService.list(queryWrapper); List candidateLocationList = locationList.stream().filter(item -> { - boolean filterResult = item.getIsWorking() == 0 && item.getIsLock() == 0 && item.getIsOccupy() == 0; - if (locationFilter != null) { - if (locationFilter.getLRow() != null) { - filterResult = filterResult && Objects.equals(item.getLRow(), locationFilter.getLRow()); - } - if (locationFilter.getLCol() != null) { - filterResult = filterResult && Objects.equals(item.getLCol(), locationFilter.getLCol()); - } - if (locationFilter.getLLayer() != null) { - filterResult = filterResult && Objects.equals(item.getLLayer(), locationFilter.getLLayer()); - } - } - return filterResult; - }).sorted(Comparator.comparingInt(TAppLocation::getLDepth).reversed()) + boolean filterResult = item.getIsWorking() == 0 && item.getIsLock() == 0 && item.getIsOccupy() == 0; + if (locationFilter != null) { + if (locationFilter.getLRow() != null) { + filterResult = filterResult && Objects.equals(item.getLRow(), locationFilter.getLRow()); + } + if (locationFilter.getLCol() != null) { + filterResult = filterResult && Objects.equals(item.getLCol(), locationFilter.getLCol()); + } + if (locationFilter.getLLayer() != null) { + filterResult = filterResult && Objects.equals(item.getLLayer(), locationFilter.getLLayer()); + } + } + return filterResult; + }).sorted(Comparator.comparingInt(TAppLocation::getLDepth).reversed()) .sorted(Comparator.comparingInt(location -> location.getLCol() + location.getLLayer())) .toList(); // 判断是否输入了subArea if (locationFilter != null && StringUtils.isNotEmpty(locationFilter.getSubArea())) { // 对candidateLocationList进行排序 - List firstList = candidateLocationList.stream().filter(item -> item.getSubArea().equals(locationFilter.getSubArea())).toList(); - List lastList = candidateLocationList.stream().filter(item -> !item.getSubArea().equals(locationFilter.getSubArea())).toList(); + List firstList = candidateLocationList.stream() + .filter(item -> item.getSubArea().equals(locationFilter.getSubArea())).toList(); + List lastList = candidateLocationList.stream() + .filter(item -> !item.getSubArea().equals(locationFilter.getSubArea())).toList(); candidateLocationList = new ArrayList<>(firstList);// 先添加符合subArea的库位 candidateLocationList.addAll(lastList);// 再添加不符合subArea的库位 } // 找一个空闲的库位 for (TAppLocation candidateLocation : candidateLocationList) { - if (candidateLocation.getIsWorking() == 1 || candidateLocation.getIsLock() == 1 || candidateLocation.getIsOccupy() == 1) { + if (candidateLocation.getIsWorking() == 1 || candidateLocation.getIsLock() == 1 + || candidateLocation.getIsOccupy() == 1) { continue; } if (isMaxDepthAvailable(locationList, candidateLocation)) { @@ -167,8 +170,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .set(TAppLocation::getIsOccupy, 1) .set(TAppLocation::getVehicleId, requestVehicleId) .eq(TAppLocation::getLocationId, candidateLocation.getLocationId()) - .eq(TAppLocation::getIsOccupy, 0) - )) { + .eq(TAppLocation::getIsOccupy, 0))) { // 当前库位可用 targetLocation = candidateLocation; break; @@ -193,31 +195,37 @@ public class StackerTaskServiceImpl implements IStackerTaskService { /** * 获取一个堆垛机库的空库位 + * * @param equipmentId 设备号 * @return 返回的库位信息 */ @Override public TAppLocation getEmptyLocation(Integer equipmentId, WmsLocationTypeEnums type) { - if(equipmentId == null) return null; + if (equipmentId == null) + return null; List allLocations = appLocationService.getAllLocation(equipmentId); - if(allLocations == null || allLocations.isEmpty()) return null; + if (allLocations == null || allLocations.isEmpty()) + return null; for (TAppLocation location : allLocations) { - if(location.getIsOccupy() != 0 || location.getIsLock() != 0 || location.getIsWorking() != 0){ + if (location.getIsOccupy() != 0 || location.getIsLock() != 0 || location.getIsWorking() != 0) { continue; // 不可用货位 } - if(type != null && !type.getCode().equals(location.getLocationType())) { + if (type != null && !type.getCode().equals(location.getLocationType())) { continue; } - // 检查内侧深度是否可用 + // 检查内侧深度是否可用 Integer lDepth = location.getLDepth(); - if(lDepth != null && lDepth.compareTo(1) > 0) { + if (lDepth != null && lDepth.compareTo(1) > 0) { boolean canUse = true; - for(int i = lDepth - 1; i > 0; i--) { + for (int i = lDepth - 1; i > 0; i--) { int checkDepth = i; - List sameColLocations = allLocations.stream().filter(item -> - item.getLRow().equals(location.getLRow()) && item.getLCol().equals(location.getLCol()) - && item.getLLayer().equals(location.getLLayer()) && item.getLDepth().equals(checkDepth)).toList(); - if(sameColLocations.isEmpty()) { + List sameColLocations = allLocations.stream() + .filter(item -> item.getLRow().equals(location.getLRow()) + && item.getLCol().equals(location.getLCol()) + && item.getLLayer().equals(location.getLLayer()) + && item.getLDepth().equals(checkDepth)) + .toList(); + if (sameColLocations.isEmpty()) { continue; // 库位不存在可能 } TAppLocation sameColLocationsFirst = sameColLocations.getFirst(); @@ -225,26 +233,26 @@ public class StackerTaskServiceImpl implements IStackerTaskService { TAppStock checkIsHaveStock = new TAppStock(); checkIsHaveStock.setLocationId(sameColLocationsFirst.getLocationId()); List checkStockIsHaveStockResult = appStockService.getWithEntity(checkIsHaveStock); - if(checkStockIsHaveStockResult == null) { + if (checkStockIsHaveStockResult == null) { canUse = false; // 数据库查询失败,库位直接不可用 break; } - if(!checkStockIsHaveStockResult.isEmpty()) { + if (!checkStockIsHaveStockResult.isEmpty()) { canUse = false; // 库位有库存,不可用 break; } // 校验是否存在出入库任务 Boolean existsTaskWithLocation = appWcsTaskService.existsTaskWithLocation(location.getLocationId()); - if(existsTaskWithLocation == null) { + if (existsTaskWithLocation == null) { canUse = false; break; } - if(existsTaskWithLocation) { + if (existsTaskWithLocation) { canUse = false; // 库位有任务,不可用 break; } } - if(!canUse) { + if (!canUse) { continue; // 不可用 } return location; @@ -273,11 +281,12 @@ public class StackerTaskServiceImpl implements IStackerTaskService { return false; } // 查询到排列层对应的库位列表 - List diffDepthLocationList = appLocationList.stream().filter(item -> - Objects.equals(item.getLRow(), appLocation.getLRow()) && + List diffDepthLocationList = appLocationList.stream() + .filter(item -> Objects.equals(item.getLRow(), appLocation.getLRow()) && Objects.equals(item.getLCol(), appLocation.getLCol()) && Objects.equals(item.getLLayer(), appLocation.getLLayer()) && - !Objects.equals(item.getLDepth(), appLocation.getLDepth())).toList(); + !Objects.equals(item.getLDepth(), appLocation.getLDepth())) + .toList(); // 结果 boolean result = true; for (TAppLocation diffDepthLocation : diffDepthLocationList) { @@ -324,20 +333,24 @@ public class StackerTaskServiceImpl implements IStackerTaskService { // 查找到所有的入库任务列表---非暂存和完成状态。 List inTasks = appTaskService.list(new LambdaQueryWrapper() .eq(TAppTask::getTaskType, WmsTaskTypeEnums.IN.getCode()) - .notIn(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.FINISH.getCode(), WmsStackerTaskStatusEnums.TEMP.getCode())); + .notIn(TAppTask::getTaskStatus, WmsStackerTaskStatusEnums.FINISH.getCode(), + WmsStackerTaskStatusEnums.TEMP.getCode())); if (inTasks == null || inTasks.isEmpty()) { for (TAppLocation appLocation : emptyLocationList) { if (equipCountMap.containsKey(appLocation.getEquipmentId())) { - equipCountMap.replace(appLocation.getEquipmentId(), equipCountMap.get(appLocation.getEquipmentId()) + 1); + equipCountMap.replace(appLocation.getEquipmentId(), + equipCountMap.get(appLocation.getEquipmentId()) + 1); } } } else { for (TAppTask inTask : inTasks) { if (StringUtils.isNotEmpty(inTask.getDestination())) { // 当前目标库位的设备号 - TAppLocation destinationEquipmentId = appCommon.getInstantLocationByLocationId(inTask.getDestination()); + TAppLocation destinationEquipmentId = appCommon + .getInstantLocationByLocationId(inTask.getDestination()); if (equipCountMap.containsKey(destinationEquipmentId.getEquipmentId())) { - equipCountMap.replace(destinationEquipmentId.getEquipmentId(), equipCountMap.get(destinationEquipmentId.getEquipmentId()) + 1); + equipCountMap.replace(destinationEquipmentId.getEquipmentId(), + equipCountMap.get(destinationEquipmentId.getEquipmentId()) + 1); } } } @@ -352,7 +365,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .toList(); } - /** * 实现 * @@ -393,28 +405,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .eq(TAppStock::getVehicleId, orderIn.getVehicleNo())); } - OrderInCBReq orderInCBReq = new OrderInCBReq(); - orderInCBReq.setTaskId(orderIn.getOrderId()); - orderInCBReq.setVehicleNo(wmsTask.getVehicleId()); - orderInCBReq.setLocationId(wmsTask.getDestination()); - orderInCBReq.setResult(OrderInCBEnums.COMPLETE.getCode()); - orderInCBReq.setResultMessage("入库完成"); - - // int times = 0; - // MesApiResponse response = null; - // do { - // Thread.sleep(15000L * times); - // response = externalApiService.invokeOrderInCB(orderInCBReq); - // times++; - // } while (response.getCode() != 0 && times <= 10); - // if (response.getCode() != 0) { - // log.error("[wms]上报失败"); - // } else { - // log.info("[wms]上报成功"); - // } - if (!appOrderInService.removeById(orderIn.getRecordId())) { - log.info("整箱入库完成删除入库单失败,任务:{},原因:删除入库单失败", wmsTask.getTaskId()); - } TAppVehicle vehicle = new TAppVehicle(); vehicle.setVehicleId(wmsTask.getVehicleId()); vehicle.setVehicleStatus(WmsVehicleStatusEnums.ON.getCode()); @@ -432,6 +422,32 @@ public class StackerTaskServiceImpl implements IStackerTaskService { if (!appTaskBakService.save(wmsTask.of())) { log.info("备份入库任务失败,任务:{}", wmsTask.getTaskId()); } + if (!appOrderInService.removeById(orderIn.getRecordId())) { + log.info("整箱入库完成删除入库单失败,任务:{},原因:删除入库单失败", wmsTask.getTaskId()); + } + + OrderInCBReq orderInCBReq = new OrderInCBReq(); + orderInCBReq.setTaskId(orderIn.getOrderId()); + orderInCBReq.setVehicleNo(wmsTask.getVehicleId()); + orderInCBReq.setLocationId(wmsTask.getDestination()); + orderInCBReq.setResult(OrderInCBEnums.COMPLETE.getCode()); + orderInCBReq.setResultMessage("入库完成"); + + int times = 0; + MesApiResponse response = null; + do { + if (times > 5) { + break; + } + Thread.sleep(15000L * times); + response = externalApiService.invokeOrderInCB(orderInCBReq); + times++; + } while (response.getCode() != 0); + if (response.getCode() != 0) { + log.error("[wms]上报失败"); + } else { + log.info("[wms]上报成功"); + } } } @@ -449,16 +465,14 @@ public class StackerTaskServiceImpl implements IStackerTaskService { appStockService.update(new LambdaUpdateWrapper() .in(TAppStock::getStockId, thisVehicleStocks.stream().map(TAppStock::getStockId).toList()) .set(TAppStock::getLocationId, wmsTask.getDestination()) - .set(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode()) - ); + .set(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())); appLocationService.update(new LambdaUpdateWrapper() .eq(TAppLocation::getLocationId, wmsTask.getOrigin()) .set(TAppLocation::getIsOccupy, WmsLocationOccupyStatusEnums.EMPTY.getCode()) .set(TAppLocation::getVehicleId, "")); appVehicleService.update(new LambdaUpdateWrapper() .eq(TAppVehicle::getVehicleId, wmsTask.getVehicleId()) - .set(TAppVehicle::getLocationId, wmsTask.getDestination()) - ); + .set(TAppVehicle::getLocationId, wmsTask.getDestination())); appCommon.updateWorkingLocations(wmsTask.getDestination(), 0); appCommon.updateWorkingLocations(wmsTask.getOrigin(), 0); appTaskService.removeById(wmsTask.getTaskId()); @@ -482,7 +496,8 @@ public class StackerTaskServiceImpl implements IStackerTaskService { // 5. 添加出库记录 // 根据载具号map一下 Map> vehicleIdToTaskMap = stackerOutTasks.stream() - .filter(outTask -> Objects.equals(outTask.getTaskType(), WmsTaskTypeEnums.OUT.getCode()) && Objects.equals(outTask.getTaskStatus(), WmsStackerTaskStatusEnums.FINISH.getCode())) + .filter(outTask -> Objects.equals(outTask.getTaskType(), WmsTaskTypeEnums.OUT.getCode()) + && Objects.equals(outTask.getTaskStatus(), WmsStackerTaskStatusEnums.FINISH.getCode())) .collect(Collectors.groupingBy(TAppTask::getVehicleId)); for (String vehicleId : vehicleIdToTaskMap.keySet()) { // 查询当前载具的数据 @@ -506,6 +521,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .eq(TAppLocation::getLocationId, thisVehicle.getLocationId()) .eq(TAppLocation::getVehicleId, vehicleId)); // 更新载具信息 + appCommon.updateWorkingLocations(thisVehicle.getLocationId(), 0); thisVehicle.setVehicleStatus(WmsVehicleStatusEnums.OUT.getCode()); thisVehicle.setLocationId(""); appVehicleService.updateById(thisVehicle); @@ -514,7 +530,6 @@ public class StackerTaskServiceImpl implements IStackerTaskService { .set(TAppStock::getStockStatus, WmsStockStatusEnums.OUTED.getCode()) .set(TAppStock::getLocationId, "") .eq(TAppStock::getVehicleId, vehicleId)); - appCommon.updateWorkingLocations(thisVehicle.getLocationId(), 0); agvLockService.releaseStationLocks("C1", WmsTaskTypeEnums.OUT.getCode()); // 当前载具的任务列表 List thisVehicleOutTasks = vehicleIdToTaskMap.get(vehicleId); @@ -539,26 +554,29 @@ public class StackerTaskServiceImpl implements IStackerTaskService { appOrderOutService.removeBatchByIds(orderOuts); } } - // for (TAppOrderOut orderOut : orderOuts) { - // OrderOutCBReq orderOutCBReq = new OrderOutCBReq(); - // orderOutCBReq.setTaskId(orderOut.getOrderId()); - // orderOutCBReq.setVehicleNo(vehicleId); - // orderOutCBReq.setResult(OrderOutCBEnums.COMPLETE.getCode()); - // orderOutCBReq.setResultMessage("出库完成"); + for (TAppOrderOut orderOut : orderOuts) { + OrderOutCBReq orderOutCBReq = new OrderOutCBReq(); + orderOutCBReq.setTaskId(orderOut.getOrderId()); + orderOutCBReq.setVehicleNo(vehicleId); + orderOutCBReq.setResult(OrderOutCBEnums.COMPLETE.getCode()); + orderOutCBReq.setResultMessage("出库完成"); - // int times = 0; - // MesApiResponse response = null; - // do { - // response = externalApiService.invokeOrderOutCB(orderOutCBReq); - // times++; - // Thread.sleep(15000L * times); - // } while (response.getCode() != 0 && times <= 10); - // if (response.getCode() != 0) { - // log.error("[WMS]上报失败"); - // } else { - // log.info("[WMS]上报成功"); - // } - // } + int times = 0; + MesApiResponse response = null; + do { + if (times > 5) { + break; + } + response = externalApiService.invokeOrderOutCB(orderOutCBReq); + times++; + Thread.sleep(15000L * times); + } while (response.getCode() != 0); + if (response.getCode() != 0) { + log.error("[WMS]上报失败"); + } else { + log.info("[WMS]上报成功"); + } + } } } } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java index d3cf1a8..e16e48e 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/IMyWmsControllerService.java @@ -1,21 +1,26 @@ package com.wms_main.service.controller; +import com.wms_main.model.dto.request.mywms.OrderInCancel; import com.wms_main.model.dto.request.mywms.OrderInReq; import com.wms_main.model.dto.request.mywms.OrderOutReq; +import com.wms_main.model.dto.request.mywms.QueryStandStatusReq; import com.wms_main.model.dto.request.mywms.StockReq; import com.wms_main.model.dto.request.mywms.StockRespGoodsDetail; import com.wms_main.model.dto.response.mywms.MyWmsResponse; +import com.wms_main.model.dto.response.mywms.OrderResponse; import java.util.List; public interface IMyWmsControllerService { - MyWmsResponse orderIn(OrderInReq request); + OrderResponse orderIn(OrderInReq request); - MyWmsResponse orderOut(OrderOutReq request); + OrderResponse orderOut(OrderOutReq request); MyWmsResponse> stock(StockReq request); - MyWmsResponse queryCanFeed(); + MyWmsResponse queryStandStatus(QueryStandStatusReq request); - MyWmsResponse queryCanOut(); + String cancelOrderIn(OrderInCancel request); + + MyWmsResponse agvDone(); } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java index 867dff7..169e757 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java @@ -1,19 +1,32 @@ package com.wms_main.service.controller.serviceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.wms_main.app.AppCommon; +import com.wms_main.constant.enums.wcs.WcsApiResponseCodeEnums; import com.wms_main.constant.enums.wms.OrderStatusEnum; +import com.wms_main.constant.enums.wms.WmsLocationOccupyStatusEnums; import com.wms_main.constant.enums.wms.WmsStockStatusEnums; +import com.wms_main.constant.enums.wms.WmsTaskTypeEnums; +import com.wms_main.dao.ITAppLocationService; import com.wms_main.dao.ITAppOrderInService; import com.wms_main.dao.ITAppOrderOutService; import com.wms_main.dao.ITAppStockService; +import com.wms_main.dao.ITAppTaskService; +import com.wms_main.dao.ITAppWcsTaskService; import com.wms_main.model.dto.request.mywms.*; -import com.wms_main.model.dto.request.wcs.WcsCanFeedRequest; +import com.wms_main.model.dto.request.wcs.WcsQueryStandStatusRequest; import com.wms_main.model.dto.response.mywms.MyWmsResponse; +import com.wms_main.model.dto.response.mywms.OrderResponse; +import com.wms_main.model.dto.response.wcs.BaseWcsApiResponse; import com.wms_main.model.dto.response.wcs.WcsApiResponse; import com.wms_main.model.dto.response.wcs.WcsCanFeedResponse; +import com.wms_main.model.po.TAppLocation; import com.wms_main.model.po.TAppOrderIn; import com.wms_main.model.po.TAppOrderOut; import com.wms_main.model.po.TAppStock; +import com.wms_main.model.po.TAppTask; +import com.wms_main.model.po.TAppWcsTask; import com.wms_main.repository.utils.StringUtils; import com.wms_main.repository.utils.UUIDUtils; import com.wms_main.service.api.IWcsApiService; @@ -36,14 +49,18 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { private final ITAppStockService appStockService; private final IAgvLockService agvLockService; private final IWcsApiService wcsApiService; + private final ITAppTaskService appTaskService; + private final ITAppWcsTaskService appWcsTaskService; + private final ITAppLocationService appLocationService; + private final AppCommon appCommon; @Override - public MyWmsResponse orderIn(OrderInReq request) { + public OrderResponse orderIn(OrderInReq request) { try { if (request == null) - return MyWmsResponse.error("参数错误", null); + return OrderResponse.error("参数错误"); if (!request.isValid()) { - return MyWmsResponse.error("参数错误", null); + return OrderResponse.error("参数错误"); } // 检查入库口是否可用 @@ -51,16 +68,22 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { boolean canFeed = agvLockService.canFeedToInboundPort(inboundPort); if (!canFeed) { String portStatus = agvLockService.getInboundPortStatus(inboundPort); - return MyWmsResponse.error("入库口当前" + portStatus + ",无法生成入库订单,请稍后重试", null); + return OrderResponse.error("入库口当前" + portStatus + ",无法生成入库订单,请稍后重试"); } // 校验是否存在相同的入库单 List withTaskId = appOrderInService.getWithTaskId(request.getTaskId()); if (withTaskId == null) { - return MyWmsResponse.error("数据服务异常,请稍后重试", null); + return OrderResponse.error("数据服务异常,请稍后重试"); } if (!withTaskId.isEmpty()) { - return MyWmsResponse.error("入库单已存在,请勿重复推送", null); + return OrderResponse.error("入库单已存在,请勿重复推送"); + } + Boolean isDup = appStockService + .exists(new LambdaQueryWrapper().eq(TAppStock::getVehicleId, request.getVehicleNo()) + .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())); + if (isDup) { + return OrderResponse.error("库存重复,托盘号: " + request.getVehicleNo()); } TAppOrderIn orderIn = new TAppOrderIn(); orderIn.setRecordId(UUIDUtils.getNewUUID()); @@ -72,28 +95,28 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { orderIn.setCreateTime(LocalDateTime.now()); orderIn.setUpdateTime(LocalDateTime.now()); if (!appOrderInService.save(orderIn)) { - return MyWmsResponse.error("入库单保存失败,请稍后再试", null); + return OrderResponse.error("入库单保存失败,请稍后再试"); } - return MyWmsResponse.success(); + return OrderResponse.success(); } catch (Exception e) { - return MyWmsResponse.error("入库单添加异常", null); + return OrderResponse.error("入库单添加异常"); } } @Override - public MyWmsResponse orderOut(OrderOutReq request) { + public OrderResponse orderOut(OrderOutReq request) { try { if (request == null || StringUtils.isEmpty(request.getTaskId()) || StringUtils.isEmpty(request.getVehicleNo())) { - return MyWmsResponse.error("参数错误", null); + return OrderResponse.error("参数错误"); } List orderOutCheckList = appOrderOutService.getWithTaskId(request.getTaskId()); if (orderOutCheckList == null) { - return MyWmsResponse.error("数据服务异常,请稍后重试", null); + return OrderResponse.error("数据服务异常,请稍后重试"); } if (!orderOutCheckList.isEmpty()) { - return MyWmsResponse.error("出库单已存在,请勿重复推送", null); + return OrderResponse.error("出库单已存在,请勿重复推送"); } List vehicleStocks = appStockService.list( @@ -102,7 +125,7 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())); if (vehicleStocks == null || vehicleStocks.isEmpty()) { - return MyWmsResponse.error("载具号" + request.getVehicleNo() + "无库存记录", null); + return OrderResponse.error("载具号" + request.getVehicleNo() + "无库存记录"); } TAppOrderOut orderOut = new TAppOrderOut(); @@ -113,12 +136,12 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { orderOut.setCreateTime(LocalDateTime.now()); orderOut.setUpdateTime(LocalDateTime.now()); if (!appOrderOutService.save(orderOut)) { - return MyWmsResponse.error("出库单保存失败,请稍后再试", null); + return OrderResponse.error("出库单保存失败,请稍后再试"); } - return MyWmsResponse.success(); + return OrderResponse.success(); } catch (Exception e) { log.error("出库任务添加失败", e); - return MyWmsResponse.error("出库任务添加失败,请稍后再试", null); + return OrderResponse.error("出库任务添加失败,请稍后再试"); } } @@ -164,17 +187,27 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { } @Override - public MyWmsResponse queryCanFeed() { + public MyWmsResponse queryStandStatus(QueryStandStatusReq request) { + if (Objects.equals(request.getStandType(), WmsTaskTypeEnums.IN.getCode())) { + return queryStandStatusIn(request); + } else if (Objects.equals(request.getStandType(), WmsTaskTypeEnums.OUT.getCode())) { + return queryStandStatusOut(request); + } else { + return MyWmsResponse.error("WCS系统不允许AGV上料或取货", false); + } + } + + private MyWmsResponse queryStandStatusIn(QueryStandStatusReq request) { try { - // TODO canFeed - WcsApiResponse wcsResponse = wcsApiService.canFeed(new WcsCanFeedRequest("R1")); + WcsApiResponse wcsResponse = wcsApiService + .queryStandStatus(new WcsQueryStandStatusRequest(request.getStandType())); if (wcsResponse == null || wcsResponse.getData() == null) { return MyWmsResponse.error("WCS系统查询失败", false); } Boolean wcsAllow = wcsResponse.getData().isAllowAction(); if (!wcsAllow) { - return MyWmsResponse.error("WCS系统不允许入库", false); + return MyWmsResponse.error("WCS系统不允许AGV上料", false); } Boolean wmsAllow = agvLockService.canFeedToInboundPort("R1"); @@ -187,19 +220,18 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { } } - @Override - public MyWmsResponse queryCanOut() { + private MyWmsResponse queryStandStatusOut(QueryStandStatusReq request) { try { // 1. 调用wcs.canFeed检查wcs状态 (使用R1口) - // TODO canFeed - WcsApiResponse wcsResponse = wcsApiService.canFeed(new WcsCanFeedRequest("R1")); + WcsApiResponse wcsResponse = wcsApiService + .queryStandStatus(new WcsQueryStandStatusRequest(request.getStandType())); if (wcsResponse == null || wcsResponse.getData() == null) { return MyWmsResponse.error("WCS系统查询失败", false); } Boolean wcsAllow = wcsResponse.getData().isAllowAction(); if (!wcsAllow) { - return MyWmsResponse.error("WCS系统不允许出库", false); + return MyWmsResponse.error("WCS系统不允许AGV取货", false); } // 2. 检查agvLock服务获取wms状态 (使用R1口) @@ -213,4 +245,58 @@ public class MyWmsControllerServiceImpl implements IMyWmsControllerService { return MyWmsResponse.error("系统异常,请稍后重试", false); } } + + @Override + public MyWmsResponse agvDone() { + try { + BaseWcsApiResponse wcsResponse = wcsApiService.agvDone(); + if (wcsResponse == null) { + return MyWmsResponse.error("WCS系统查询失败", null); + } + if (!Objects.equals(wcsResponse.getCode(), WcsApiResponseCodeEnums.SUCCESS.getCode())) { + return MyWmsResponse.error("WCS系统重置信号失败", null); + } + return MyWmsResponse.success(null); + } catch (Exception e) { + return MyWmsResponse.error("系统异常,请稍后重试", null); + } + } + + @Override + public String cancelOrderIn(OrderInCancel request) { + String vehicleNo = request.getVehicleNo(); + if (!appOrderInService.remove(new LambdaQueryWrapper().eq(StringUtils.isNotEmpty(vehicleNo), + TAppOrderIn::getVehicleNo, vehicleNo))) { + log.info("fail to delete orderIn, vehicleNo: " + vehicleNo); + } + if (!appTaskService.remove(new LambdaQueryWrapper().eq(StringUtils.isNotEmpty(vehicleNo), + TAppTask::getVehicleId, vehicleNo))) { + log.info("fail to delete wmsTask, vehicleNo: " + vehicleNo); + } + if (!appWcsTaskService.remove(new LambdaQueryWrapper().eq(StringUtils.isNotEmpty(vehicleNo), + TAppWcsTask::getVehicleId, vehicleNo))) { + log.info("fail to delete wcsTask, vehicleNo: " + vehicleNo); + } + List locationList = appLocationService.list( + new LambdaQueryWrapper().eq(StringUtils.isNotEmpty(vehicleNo), TAppLocation::getVehicleId, + vehicleNo)); + TAppLocation location = null; + if (locationList != null && locationList.size() > 0) { + location = locationList.getFirst(); + } + if (location != null && !appStockService.exists(new LambdaQueryWrapper().eq(StringUtils.isNotEmpty(vehicleNo), + TAppStock::getVehicleId, vehicleNo).eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode()))) { + if (!appLocationService.update( + new LambdaUpdateWrapper().eq(TAppLocation::getLocationId, location.getLocationId()) + .set(TAppLocation::getIsOccupy, WmsLocationOccupyStatusEnums.EMPTY.getCode()) + .set(TAppLocation::getVehicleId, ""))) { + log.info("fail to update location, vehicleNo: {}, location: {}", vehicleNo, location.getLocationId()); + } + appCommon.updateWorkingLocations(location.getLocationId(), 0); + return "成功清理"; + } else { + return "该载具已在库中,无法清除库位信息 / 库位表中无数据"; + } + + } } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/MyInExecutor.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/MyInExecutor.java new file mode 100644 index 0000000..0364ec2 --- /dev/null +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/MyInExecutor.java @@ -0,0 +1,97 @@ +package com.wms_main.service.quartz_job.job_executor; + +import java.time.LocalDateTime; +import java.util.List; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.wms_main.constant.enums.wms.OrderStatusEnum; +import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums; +import com.wms_main.constant.enums.wms.WmsTaskTypeEnums; +import com.wms_main.dao.ITAppOrderInService; +import com.wms_main.dao.ITAppTaskService; +import com.wms_main.model.po.TAppLocation; +import com.wms_main.model.po.TAppOrderIn; +import com.wms_main.model.po.TAppTask; +import com.wms_main.repository.utils.UUIDUtils; +import com.wms_main.service.business.IStackerTaskService; + +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.PersistJobDataAfterExecution; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@PersistJobDataAfterExecution +// 以下注解用于实现fixed_delay +@DisallowConcurrentExecution +@RequiredArgsConstructor +public class MyInExecutor implements Job { + private final ITAppOrderInService appOrderInService; + private final IStackerTaskService stackerTaskService; + private final ITAppTaskService appWmsTaskService; + + private static String ORIGIN = "R1"; + + @Override + public void execute(JobExecutionContext context) { + processInOrders(); + } + + private void processInOrders() { + List orders = appOrderInService.list( + new LambdaQueryWrapper() + .eq(TAppOrderIn::getOrderStatus, OrderStatusEnum.CREATE.getCode())); + orders.forEach(this::processSingleOrder); + } + + private void processSingleOrder(TAppOrderIn orderIn) { + if (orderIn == null) { + return; + } + /* 查找可用库位 */ + TAppLocation useLocation = stackerTaskService.requestOneLocation(null, orderIn.getVehicleNo()); + if (useLocation == null) { + log.error("暂没有可以直接使用的库位,因为存在互锁的库位,请等待当前任务都执行完成后再试"); + return; + } + TAppTask newInTask = appWmsTaskService.getOne(new LambdaQueryWrapper() + .eq(TAppTask::getVehicleId, orderIn.getVehicleNo()) + .eq(TAppTask::getTaskType, WmsTaskTypeEnums.IN.getCode())); + if (newInTask != null) { + newInTask.setTaskStatus(WmsStackerTaskStatusEnums.WAIT.getCode()); + newInTask.setDestination(useLocation.getLocationId()); + newInTask.setTaskGroup(orderIn.getOrderId()); + if (!appWmsTaskService.updateById(newInTask)) { + log.error("生成任务失败,无法插入新的入库任务"); + return; + } + } else { + newInTask = new TAppTask(); + newInTask.setTaskId(UUIDUtils.getNewUUID()); + newInTask.setTaskGroup(orderIn.getOrderId()); + newInTask.setTaskType(WmsTaskTypeEnums.IN.getCode()); + newInTask.setTaskStatus(WmsStackerTaskStatusEnums.WAIT.getCode()); + newInTask.setOrigin(ORIGIN); + newInTask.setDestination(useLocation.getLocationId()); + newInTask.setCreateTime(LocalDateTime.now()); + newInTask.setOpUser("wcs"); + newInTask.setVehicleId(orderIn.getVehicleNo()); + newInTask.setTaskPriority(1); + + if (!appWmsTaskService.save(newInTask)) { + log.error("生成任务失败,无法插入新的入库任务"); + return; + } + } + appOrderInService.update( + new LambdaUpdateWrapper() + .eq(TAppOrderIn::getRecordId, orderIn.getRecordId()) + .set(TAppOrderIn::getOrderStatus, OrderStatusEnum.RUNNING.getCode()) + .set(TAppOrderIn::getUpdateTime, LocalDateTime.now())); + return; + } +} diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java index 9add53a..ac46969 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java @@ -6,7 +6,6 @@ import com.wms_main.constant.enums.wcs.WcsApiResponseCodeEnums; import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums; import com.wms_main.constant.enums.wcs.WcsStackerTaskTypeEnums; import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums; -import com.wms_main.constant.enums.wms.WmsTaskTypeEnums; import com.wms_main.dao.ITAppTaskService; import com.wms_main.dao.ITAppWcsTaskService; import com.wms_main.model.bo.wcs.WcsStackerTask; @@ -74,8 +73,14 @@ public class WcsStackerTaskSender implements Job { waitSendWcsTaskList.sort((task1, task2) -> Integer.compare(task2.getTaskPriority(), task1.getTaskPriority())); // 发送任务 TAppWcsTask wcsTask = waitSendWcsTaskList.getFirst(); + Boolean wmsAllow = false; if (wcsTask.getWcsTaskType().equals(WcsStackerTaskTypeEnums.OUT.getCode())) { - Boolean wmsAllow = agvLockService.canFeedToInboundPort(wcsTask.getDestination()); + wmsAllow = agvLockService.canFeedToOutboundPort(wcsTask.getDestination()); + } else if (wcsTask.getWcsTaskType().equals(WcsStackerTaskTypeEnums.IN.getCode())) { + wmsAllow = agvLockService.canFeedToInboundPort(wcsTask.getOrigin()); + } + if (wcsTask.getWcsTaskType().equals(WcsStackerTaskTypeEnums.OUT.getCode()) + || wcsTask.getWcsTaskType().equals(WcsStackerTaskTypeEnums.IN.getCode())) { if (!wmsAllow) { return; } @@ -105,7 +110,7 @@ public class WcsStackerTaskSender implements Job { if (wcsTask.getWcsTaskType().equals(WcsStackerTaskTypeEnums.OUT.getCode())) { try { - agvLockService.lockInboundPort("AGV", wcsTask.getDestination()); + agvLockService.lockOutboundPort("AGV", wcsTask.getDestination()); } catch (Exception e) { log.error("任务发送成功后锁定{}口失败,任务ID: {}", wcsTask.getDestination(), wcsTask.getWcsTaskId()); } diff --git a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/resources/application.yml b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/resources/application.yml index 098dae3..b2a9989 100644 --- a/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/resources/application.yml +++ b/202504-Wms-MengYang-tp/wms_serve_mengyang/src/main/resources/application.yml @@ -5,13 +5,13 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver # 本地 - url: jdbc:mysql://localhost:3306/wms_mengyang_tp?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true - username: root - password: root + # url: jdbc:mysql://localhost:3306/wms_mengyang_tp?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true + # username: root + # password: root # 服务器 -# url: jdbc:mysql://10.18.58.21:3306/wms_yachi_nantong?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true -# username: user -# password: user + url: jdbc:mysql://localhost:3306/wms_mengyang_tp?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true + username: user + password: user profiles: active: online @@ -33,10 +33,10 @@ mybatis-plus: configuration: map-underscore-to-camel-case: true # 开启驼峰映射 cache-enabled: false # 是否开启二级缓存 - global-config: - db-config: - id-type: assign_id - update-strategy: not_null + # global-config: + # db-config: + # id-type: assign_id + # update-strategy: not_null logging: config: classpath:logback-spring.xml diff --git a/202504-Wms-MengYang-tp/wms_web_mengyang/src/api/orderIn.js b/202504-Wms-MengYang-tp/wms_web_mengyang/src/api/orderIn.js index a9d3c49..3ece045 100644 --- a/202504-Wms-MengYang-tp/wms_web_mengyang/src/api/orderIn.js +++ b/202504-Wms-MengYang-tp/wms_web_mengyang/src/api/orderIn.js @@ -2,7 +2,7 @@ import request from "@/http/request"; const submitOrderInForm = (params) => { return request({ - url: '/ycwms/orderIn', + url: '/mywms/orderIn', method: 'post', data: params }) diff --git a/202504-Wms-MengYang-tp/wms_web_mengyang/src/http/request.js b/202504-Wms-MengYang-tp/wms_web_mengyang/src/http/request.js index eb582e2..1578b72 100644 --- a/202504-Wms-MengYang-tp/wms_web_mengyang/src/http/request.js +++ b/202504-Wms-MengYang-tp/wms_web_mengyang/src/http/request.js @@ -1,8 +1,8 @@ import axios from 'axios' const request = axios.create({ - baseURL: 'http://10.18.58.21:12315', - // baseURL: 'http://localhost:12315', + // baseURL: 'http://10.18.58.21:12315', + baseURL: 'http://localhost:12315', timeout: 5000 }) diff --git a/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderIn.vue b/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderIn.vue index 028b0dc..45cc694 100644 --- a/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderIn.vue +++ b/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderIn.vue @@ -7,86 +7,20 @@ - - - - - - - - - - - - - + + + -
- 物料明细 -
-
- 添加物料 - 清空物料 -
-
- 提交入库单 -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - +
+ 操作区域 +
+ 提交入库单
@@ -301,28 +235,19 @@ import {errorBox} from '@/utils/myMessageBox.js' import {labelPosition} from '@/constant/form' import {submitOrderInForm, getOrderIns, updateOrderIn, deleteOrderIn} from '@/api/orderIn.js' -// 生成订单号方法 -const generateOrderId = () => { - const now = new Date() - const year = now.getFullYear() - const month = String(now.getMonth() + 1).padStart(2, '0') - const day = String(now.getDate()).padStart(2, '0') - const hours = String(now.getHours()).padStart(2, '0') - const minutes = String(now.getMinutes()).padStart(2, '0') - const seconds = String(now.getSeconds()).padStart(2, '0') - const milliseconds = String(now.getMilliseconds()).padStart(3, '0') - return `baokai${year}${month}${day}${hours}${minutes}${seconds}${milliseconds}` +// 生成UUID方法 +const generateUUID = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = Math.random() * 16 | 0 + const v = c === 'x' ? r : (r & 0x3 | 0x8) + return v.toString(16) + }) } // 表单数据 const orderInFormRef = ref() const orderInForm = reactive({ - orderId: generateOrderId(), - vehicleNo: '', - vehicleSize: '', - inStand: '', - clientId: 'WMS', - goodsDetail: [] + vehicleNo: '' }) // 添加响应式变量 @@ -346,15 +271,11 @@ const queryForm = reactive({ // 表单规则 const rules = reactive({ - vehicleNo: [{required: true, message: '请输入料箱号', trigger: 'blur'}], - vehicleSize: [{required: true, message: '请输入料箱尺寸', trigger: 'blur'}], - inStand: [{required: true, message: '请输入入库站台', trigger: 'blur'}], + vehicleNo: [{required: true, message: '请输入托盘号', trigger: 'blur'}] }) // 引用DOM元素 const vehicleNoRef = ref() -const vehicleSizeRef = ref() -const inStandRef = ref() // 响应结果对话框 const responseDialogVisible = ref(false) @@ -385,79 +306,33 @@ const resizeHeight = () => { maxHeight.value = window.innerHeight * 0.4 } -// 处理回车事件 -const handleEnter = (nextField) => { - const refMap = { - 'vehicleNo': vehicleNoRef, - 'vehicleSize': vehicleSizeRef, - 'inStand': inStandRef - } - if (refMap[nextField]) { - refMap[nextField].value.focus() - } -} -// 添加物料明细 -const addGoodsDetail = () => { - orderInForm.goodsDetail.push({ - goodsId: '', - goodsName: '', - batch: '', - goodsType: '', - specification: '', - quantity: 1, - goodsDesc: '' - }) -} - -// 移除物料明细 -const removeGoodsDetail = (index) => { - orderInForm.goodsDetail.splice(index, 1) -} - -// 清空物料明细 -const clearGoodsDetail = () => { - orderInForm.goodsDetail = [] -} - -// 重置表单(添加重置表单的方法,包括重新生成订单号) +// 重置表单 const resetOrderInForm = () => { - orderInForm.orderId = generateOrderId() orderInForm.vehicleNo = '' - orderInForm.vehicleSize = '' - orderInForm.inStand = '' - orderInForm.goodsDetail = [] } // 提交入库单 const submitOrderIn = () => { orderInFormRef.value.validate((valid) => { if (valid) { - if (orderInForm.goodsDetail.length === 0) { - errorBox('请至少添加一条物料明细') - return - } - - // 检查所有物料明细是否填写完整 - for (let i = 0; i < orderInForm.goodsDetail.length; i++) { - const item = orderInForm.goodsDetail[i] - if (!item.goodsId || !item.goodsName || !item.batch || !item.goodsType || !item.specification || !item.quantity) { - errorBox(`第${i + 1}行物料明细填写不完整,请检查`) - return - } + // 构建新的请求体 + const requestData = { + taskId: generateUUID(), + vehicleNo: orderInForm.vehicleNo } // 发送请求 loading.open() - submitOrderInForm(orderInForm) + submitOrderInForm(requestData) .then(res => { responseResult.value = res.data responseDialogVisible.value = true if (res.data.code === 0) { ElMessage.success('入库单提交成功') - // 提交成功后重置表单,生成新的订单号 + // 提交成功后重置表单 resetOrderInForm() } else { errorBox(`入库单提交失败: ${res.data.message}`) @@ -626,7 +501,7 @@ const deleteOrderInRecord = (row) => { box-sizing: border-box; } -.main-area, .goods-detail-area, .query-area, .query-result-area { +.main-area, .submit-area, .query-area, .query-result-area { width: 100%; margin-bottom: 20px; padding: 15px; diff --git a/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderOut.vue b/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderOut.vue index 262c449..06f8db4 100644 --- a/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderOut.vue +++ b/202504-Wms-MengYang-tp/wms_web_mengyang/src/layout/orderOut.vue @@ -3,67 +3,28 @@
- 物料查询 - - - - - + 出库单信息 + + + + + - - - - - - - - - - - - 查询 - 重置 -
-
- 查询结果 -
-
-

库位: {{ locationItem.location }} | 托盘号: {{ locationItem.vehicleNo }}

-
- - - - - - - - - - - - - - -
-
- 出库 - 已选择 {{ getTotalSelectedCount() }} 项 +
+ 操作区域 +
+ 提交出库单
+
{{ responseResult }}