From f07971067039ba85f55363f652ac56798d65b9a2 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Thu, 8 Jan 2026 14:26:49 +0800 Subject: [PATCH] =?UTF-8?q?2026-01-08=20=E9=94=80=E5=94=AE=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E8=A3=85=E7=AE=B1=E9=A1=B5=E9=9D=A2=E7=9A=84=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E8=A3=85=E7=AE=B1,=E7=AE=B1=E5=8F=B7=E7=9A=84?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4=E4=B8=BA?= =?UTF-8?q?"=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E5=8F=B7"+=E4=B8=89?= =?UTF-8?q?=E4=BD=8D=E6=B5=81=E6=B0=B4=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/BoxForNotificationMapper.java | 12 +++++ .../boxManage/entity/SoReceiveBoxesDto.java | 13 +++++ .../impl/BoxForNotificationServiceImpl.java | 54 +++++++++++++++++-- .../boxManage/BoxForNotificationMapper.xml | 21 +++++++- 4 files changed, 94 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gaotao/modules/boxManage/dao/BoxForNotificationMapper.java b/src/main/java/com/gaotao/modules/boxManage/dao/BoxForNotificationMapper.java index c4754cb..c97a58e 100644 --- a/src/main/java/com/gaotao/modules/boxManage/dao/BoxForNotificationMapper.java +++ b/src/main/java/com/gaotao/modules/boxManage/dao/BoxForNotificationMapper.java @@ -21,6 +21,18 @@ public interface BoxForNotificationMapper { void newSoReceiveBoxesData(SoReceiveBoxesData data); + /** + * 查询指定订单号下已有的所有箱号 + * 用于生成新箱号时断号取号 + */ + List getExistingBoxNosByOrderNo(@Param("site") String site, @Param("buNo") String buNo, @Param("orderNo") String orderNo); + + /** + * 查询以指定销售订单号为前缀的所有箱号 + * 用于生成新箱号时断号取号 + */ + List getExistingBoxNosBySaleOrderNo(@Param("site") String site, @Param("buNo") String buNo, @Param("saleOrderNo") String saleOrderNo); + List searchBoxRollDetail(SoReceiveBoxesData data); SoReceiveBoxesData searchBoxData(SoReceiveBoxesData data); diff --git a/src/main/java/com/gaotao/modules/boxManage/entity/SoReceiveBoxesDto.java b/src/main/java/com/gaotao/modules/boxManage/entity/SoReceiveBoxesDto.java index 67f989d..16435c1 100644 --- a/src/main/java/com/gaotao/modules/boxManage/entity/SoReceiveBoxesDto.java +++ b/src/main/java/com/gaotao/modules/boxManage/entity/SoReceiveBoxesDto.java @@ -85,6 +85,11 @@ public class SoReceiveBoxesDto { */ private Integer stdPackingQty; + /** + * 销售订单号,用于生成箱号 + */ + private String saleOrderNo; + public Integer getId() { return id; } @@ -212,4 +217,12 @@ public class SoReceiveBoxesDto { public void setStdPackingQty(Integer stdPackingQty) { this.stdPackingQty = stdPackingQty; } + + public String getSaleOrderNo() { + return saleOrderNo; + } + + public void setSaleOrderNo(String saleOrderNo) { + this.saleOrderNo = saleOrderNo; + } } \ No newline at end of file diff --git a/src/main/java/com/gaotao/modules/boxManage/service/impl/BoxForNotificationServiceImpl.java b/src/main/java/com/gaotao/modules/boxManage/service/impl/BoxForNotificationServiceImpl.java index ef151cb..f1f49a4 100644 --- a/src/main/java/com/gaotao/modules/boxManage/service/impl/BoxForNotificationServiceImpl.java +++ b/src/main/java/com/gaotao/modules/boxManage/service/impl/BoxForNotificationServiceImpl.java @@ -47,13 +47,57 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService @Override public String newSoReceiveBoxesData(SoReceiveBoxesData inData){ - TransNoControl transNo = transNoService.getTransNo(inData.getSite(),"BOX",inData.getBuNo()); - if(transNo == null){ - throw new RuntimeException("箱号生成失败,请联系管理员!"); + // 生成箱号:销售订单号 + 三位流水号,支持断号取号 + String saleOrderNo = inData.getSaleOrderNo(); + if (saleOrderNo == null || saleOrderNo.isEmpty()) { + throw new RuntimeException("销售订单号不能为空!"); } - inData.setBoxNo(transNo.getNewTransNo()); + + // 查询以该销售订单号为前缀的所有箱号(用于断号取号) + List existingBoxNos = boxForNotificationMapper.getExistingBoxNosBySaleOrderNo( + inData.getSite(), inData.getBuNo(), saleOrderNo); + + // 生成新的箱号(断号取号),使用销售订单号作为前缀 + String newBoxNo = generateBoxNoWithGapFilling(saleOrderNo, existingBoxNos); + inData.setBoxNo(newBoxNo); boxForNotificationMapper.newSoReceiveBoxesData(inData); - return transNo.getNewTransNo(); + return newBoxNo; + } + + /** + * 生成箱号,支持断号取号 + * 格式:订单号 + 三位流水号(001-999) + * 例如:已有AAA001和AAA003,下次生成AAA002 + */ + private String generateBoxNoWithGapFilling(String orderNo, List existingBoxNos) { + // 提取已使用的流水号 + java.util.Set usedSeqNos = new java.util.HashSet<>(); + String prefix = orderNo; + + for (String boxNo : existingBoxNos) { + if (boxNo != null && boxNo.startsWith(prefix) && boxNo.length() == prefix.length() + 3) { + try { + String seqStr = boxNo.substring(prefix.length()); + int seqNo = Integer.parseInt(seqStr); + usedSeqNos.add(seqNo); + } catch (NumberFormatException e) { + // 忽略非数字后缀的箱号 + } + } + } + + // 找到第一个未使用的流水号(断号取号) + int newSeqNo = 1; + while (usedSeqNos.contains(newSeqNo) && newSeqNo <= 999) { + newSeqNo++; + } + + if (newSeqNo > 999) { + throw new RuntimeException("箱号流水号已达到上限999,无法继续生成!"); + } + + // 生成三位流水号 + return prefix + String.format("%03d", newSeqNo); } @Override diff --git a/src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml b/src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml index c1b63eb..ac7a3de 100644 --- a/src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml +++ b/src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml @@ -54,9 +54,28 @@ version,WareHouseID,bu_no) values (#{site},#{boxNo},#{orderNo},#{status},#{rollsQty},#{boxType},'Y',GetDate(),#{createdBy}, 0,#{wareHouseID},#{buNo}) - + + + + + +