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}) - + + + + + +