From 50dff8130e8604b793483f84fbfb7c7091e5a865 Mon Sep 17 00:00:00 2001 From: liyuqi Date: Tue, 3 Jun 2025 11:12:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug:=201.=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=A7=BB=E5=BA=93bug,=20=E7=A9=BA=E7=9B=98=E5=8F=AA?= =?UTF-8?q?=E6=9C=891=E6=B7=B1=E5=BA=A6,=20=E4=B8=8D=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E7=A7=BB=E5=BA=93=E9=97=AE=E9=A2=98;=20=E7=A9=BA=E6=89=98?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E6=8C=89=E7=85=A7=E6=B7=B1=E5=BA=A6,=20?= =?UTF-8?q?=E5=B1=82=E6=95=B0,=20=E5=88=97=E6=95=B0,=20=E6=8E=92=E6=95=B0?= =?UTF-8?q?=E4=BE=9D=E6=AC=A1=E5=8D=87=E5=BA=8F=E6=8E=92=E5=BA=8F,=20?= =?UTF-8?q?=E4=BB=8E=E8=80=8C=E9=81=BF=E5=85=8D=E7=A7=BB=E5=BA=93=E6=93=8D?= =?UTF-8?q?=E4=BD=9C;=20=E6=88=90=E5=93=81=E7=A7=BB=E5=BA=93=E5=AF=BB?= =?UTF-8?q?=E6=89=BE=E5=BA=93=E4=BD=8D=E6=97=B6=E4=BF=AE=E6=94=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E7=94=A8=E5=8F=82=E6=95=B0=E4=B8=BA=E6=88=90?= =?UTF-8?q?=E5=93=81=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/wms/WmsLocationTypeEnums.java | 9 ++++ .../controller/ycwms/YcwmsController.java | 2 +- .../utils/LocationIdComparator.java | 53 +++++++++++++++++++ .../YcwmsControllerServiceImpl.java | 52 ++++++++++-------- .../job_executor/WcsStackerTaskSender.java | 15 ++++-- .../job_executor/YcOutExecutor.java | 2 + wms_web_nantong_yachi/src/layout/orderIn.vue | 47 ++++++++++++++-- 7 files changed, 148 insertions(+), 32 deletions(-) create mode 100644 wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/LocationIdComparator.java diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/constant/enums/wms/WmsLocationTypeEnums.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/constant/enums/wms/WmsLocationTypeEnums.java index 79dacbc..e5047e3 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/constant/enums/wms/WmsLocationTypeEnums.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/constant/enums/wms/WmsLocationTypeEnums.java @@ -15,4 +15,13 @@ public enum WmsLocationTypeEnums { TYPE_PRODUCT(3, "成品"); private final Integer code; private final String desc; + + public static WmsLocationTypeEnums getEnum(Integer code) { + for (WmsLocationTypeEnums e : WmsLocationTypeEnums.values()) { + if (e.getCode().equals(code)) { + return e; + } + } + return null; + } } \ No newline at end of file diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/controller/ycwms/YcwmsController.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/controller/ycwms/YcwmsController.java index 05d7151..8e88035 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/controller/ycwms/YcwmsController.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/controller/ycwms/YcwmsController.java @@ -57,7 +57,7 @@ public class YcwmsController { public YcwmsResponse getOutLocation(@RequestBody OrderOutReq request) { String outLoc = ycwmsControllerService.getLocByGoodsId(request.getGoodsId()); if (StringUtils.isEmpty(outLoc)) { - return YcwmsResponse.error("查询为空", null); + return YcwmsResponse.error("查询库存为空", null); } else { return YcwmsResponse.success(outLoc); } diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/LocationIdComparator.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/LocationIdComparator.java new file mode 100644 index 0000000..d85dceb --- /dev/null +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/repository/utils/LocationIdComparator.java @@ -0,0 +1,53 @@ +package com.wms_main.repository.utils; +import com.wms_main.model.po.TAppStock; +import java.util.Comparator; + +public class LocationIdComparator implements Comparator { + @Override + public int compare(TAppStock s1, TAppStock s2) { + int[] parts1 = parseLocationId(s1.getLocationId()); + int[] parts2 = parseLocationId(s2.getLocationId()); + + // 1. 深度排序 (最后一部分) + int cmp = Integer.compare(parts1[3], parts2[3]); + if (cmp != 0) return cmp; + + // 2. 层数排序 (第三部分) + cmp = Integer.compare(parts1[2], parts2[2]); + if (cmp != 0) return cmp; + + // 3. 列排序 (第二部分) + cmp = Integer.compare(parts1[1], parts2[1]); + if (cmp != 0) return cmp; + + // 4. 排排序 (第一部分) + return Integer.compare(parts1[0], parts2[0]); + } + + private int[] parseLocationId(String locationId) { + // 处理可能的空值 + if (locationId == null || locationId.isEmpty()) return new int[4]; + + String[] parts = locationId.split("-"); + int[] result = new int[4]; + + try { + // 处理第一部分(如"A03" -> 提取数字3) + if (parts.length > 0) { + String p1 = parts[0].replaceAll("\\D", ""); + result[0] = p1.isEmpty() ? 0 : Integer.parseInt(p1); + } + + // 处理第二、三、四部分 + for (int i = 1; i <= 3; i++) { + if (parts.length > i) { + result[i] = Integer.parseInt(parts[i]); + } + } + } catch (NumberFormatException e) { + // 处理格式异常 + } + + return result; + } +} diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java index 6e0a566..30e41b4 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/controller/serviceImpl/YcwmsControllerServiceImpl.java @@ -153,21 +153,26 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService { if(!orderOutCheckList.isEmpty()) { return YcwmsResponse.error("出库单已存在,请勿重复推送", null); } - TAppOrderOut orderOut = new TAppOrderOut(); - orderOut.setRecordId(UUIDUtils.getNewUUID()); - orderOut.setOrderId(request.getOrderId()); - orderOut.setGoodsId(request.getGoodsId()); - orderOut.setBatch(request.getBatch()); - orderOut.setSpecification(request.getSpecification()); - orderOut.setQuantity(request.getQuantity()); - orderOut.setOrderStatus(OrderStatusEnum.CREATE.getCode()); - orderOut.setCreateTime(LocalDateTime.now()); - orderOut.setUpdateTime(LocalDateTime.now()); - orderOut.setRemark(request.getClientId()); - if(!appOrderOutService.save(orderOut)) { - return YcwmsResponse.error("出库单保存失败,请稍后再试", null); + String outPoint = getLocByGoodsId(request.getGoodsId()); + if (StringUtils.isEmpty(outPoint)) { + return YcwmsResponse.error("库存不足", null); + } else { + TAppOrderOut orderOut = new TAppOrderOut(); + orderOut.setRecordId(UUIDUtils.getNewUUID()); + orderOut.setOrderId(request.getOrderId()); + orderOut.setGoodsId(request.getGoodsId()); + orderOut.setBatch(request.getBatch()); + orderOut.setSpecification(request.getSpecification()); + orderOut.setQuantity(request.getQuantity()); + orderOut.setOrderStatus(OrderStatusEnum.CREATE.getCode()); + orderOut.setCreateTime(LocalDateTime.now()); + orderOut.setUpdateTime(LocalDateTime.now()); + orderOut.setRemark(request.getClientId()); + if(!appOrderOutService.save(orderOut)) { + return YcwmsResponse.error("出库单保存失败,请稍后再试", null); + } + return YcwmsResponse.success(outPoint); } - return YcwmsResponse.success(getLocByGoodsId(request.getGoodsId())); } @Override @@ -335,20 +340,21 @@ public class YcwmsControllerServiceImpl implements IYcwmsControllerService { @Override public String getLocByGoodsId(String goodsId) { + List stocks = null; if (goodsId.length() < 3) { - return switch (goodsId) { - case "0" -> "LK-3"; - case "1" -> "LK-4"; - case "2" -> "LK-5"; - case "3" -> "LK-6"; - case "4" -> "LK-7"; - default -> ""; - }; + stocks = appStockService.list( + new LambdaQueryWrapper() + .eq(TAppStock::getGoodsId, goodsId) + ); } else { - List stocks = appStockService.list( + stocks = appStockService.list( new LambdaQueryWrapper() .eq(TAppStock::getVehicleId, goodsId) ); + } + if (stocks == null || stocks.isEmpty()) { + return ""; + } else { return ConvertUtils.convertDestinationToPoint(stocks.getFirst().getBarCode()); } } diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java index f0b0acb..a1cab86 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/WcsStackerTaskSender.java @@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.OrderStatusEnum; -import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums; -import com.wms_main.constant.enums.wms.WmsStockStatusEnums; -import com.wms_main.constant.enums.wms.WmsVehicleStatusEnums; +import com.wms_main.constant.enums.wms.*; import com.wms_main.dao.*; import com.wms_main.model.bo.wcs.WcsStackerTask; import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest; @@ -54,6 +51,8 @@ public class WcsStackerTaskSender implements Job { private final ITAppVehicleService appVehicleService; + private final ITAppLocationService appLocationService; + /** * 运行定时任务 * 向Wcs发送堆垛机任务 @@ -68,6 +67,12 @@ public class WcsStackerTaskSender implements Job { .eq(TAppWcsTask::getWcsTaskType, WcsStackerTaskTypeEnums.OUT.getCode())); for (TAppWcsTask wcsTask : appWcsTasks) { String locationId = wcsTask.getOrigin(); + TAppLocation loc = appLocationService.list( + new LambdaQueryWrapper() + .eq(TAppLocation::getLocationId, locationId) + ).getFirst(); + Integer locType = loc.getLocationType(); + WmsLocationTypeEnums locEnum = WmsLocationTypeEnums.getEnum(locType); String[] str_lst = locationId.split("-"); Integer equipmentId = appWcsTaskService.getEquipmentByLocation(locationId); Integer depth = appWcsTaskService.getDepthByLocation(locationId); @@ -120,7 +125,7 @@ public class WcsStackerTaskSender implements Job { .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OK.getCode())); // 若有库存 if (preStocks != null && !preStocks.isEmpty()) { - TAppLocation preLocation = stackerTaskService.getEmptyLocation(equipmentId, null); + TAppLocation preLocation = stackerTaskService.getEmptyLocation(equipmentId, locEnum); WcsStackerTaskRequest request = new WcsStackerTaskRequest(); request.setTaskId(UUIDUtils.getNewUUID()); diff --git a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java index 6a9655a..f731055 100644 --- a/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java +++ b/wms_serve_nantong_yachi/src/main/java/com/wms_main/service/quartz_job/job_executor/YcOutExecutor.java @@ -15,6 +15,7 @@ import com.wms_main.dao.ITAppWcsTaskService; import com.wms_main.model.po.TAppOrderOut; import com.wms_main.model.po.TAppStock; import com.wms_main.model.po.TAppWcsTask; +import com.wms_main.repository.utils.LocationIdComparator; import com.wms_main.repository.utils.StringUtils; import com.wms_main.repository.utils.UUIDUtils; import lombok.RequiredArgsConstructor; @@ -84,6 +85,7 @@ public class YcOutExecutor implements Job { stock.setGoodsId(orderOut.getGoodsId()); stock.setSled(orderOut.getSpecification()); List stockList = stockService.getWithEntity(stock); + stockList.sort(new LocationIdComparator()); // 提取所有相关库存的载具号 List vehicleIds = stockList.stream().map(TAppStock::getVehicleId).distinct().toList(); List outStockList = new ArrayList(); diff --git a/wms_web_nantong_yachi/src/layout/orderIn.vue b/wms_web_nantong_yachi/src/layout/orderIn.vue index 45bc612..028b0dc 100644 --- a/wms_web_nantong_yachi/src/layout/orderIn.vue +++ b/wms_web_nantong_yachi/src/layout/orderIn.vue @@ -199,7 +199,7 @@ - + @@ -288,12 +294,12 @@