From 6a0818350a0832de28d970a122752dcbcabc9c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Sat, 8 Aug 2026 16:41:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=BA=93=E5=8D=95=E6=8C=89=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=94=9F=E6=88=90;=E6=89=A7=E8=A1=8C=E5=8D=95?= =?UTF-8?q?=E5=9B=9E=E6=98=BE=E9=80=9A=E7=9F=A5=E5=8D=95=E5=A4=87=E6=B3=A8?= =?UTF-8?q?;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/ExecutionStockInOrder.java | 3 + .../po/ExecutionStockInOrderPO.java | 2 + .../todo/ExecutionStockInOrderDO.java | 2 + .../todo/ExecutionStockInOrderDTO.java | 2 + .../mapper/StockOutOrderMapper.java | 8 +++ .../service/StockOutOrderDomainService.java | 72 +++++++++++++++++-- .../stockOutOrder/StockOutOrderMapper.xml | 49 +++++++++++++ 7 files changed, 132 insertions(+), 6 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/entity/ExecutionStockInOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/entity/ExecutionStockInOrder.java index bd785b871..a632a9046 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/entity/ExecutionStockInOrder.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/entity/ExecutionStockInOrder.java @@ -456,4 +456,7 @@ public class ExecutionStockInOrder extends BaseVOEntity { @ApiModelProperty("业务计价方式") private String businessPriceWay; + + @ApiModelProperty("通知单备注") + private String noticeRemark; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/po/ExecutionStockInOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/po/ExecutionStockInOrderPO.java index 626c06a69..304015586 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/po/ExecutionStockInOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/po/ExecutionStockInOrderPO.java @@ -480,4 +480,6 @@ public class ExecutionStockInOrderPO extends BaseVOEntity { @ApiModelProperty("业务计价方式") private String businessPriceWay; private String khdm; + @ApiModelProperty("通知单备注") + private String noticeRemark; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDO.java index 63062b7b0..9da4e4dd7 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDO.java @@ -511,4 +511,6 @@ public class ExecutionStockInOrderDO extends BaseVOEntity { @ApiModelProperty("业务计价方式") private String businessPriceWay; + @ApiModelProperty("通知单备注") + private String noticeRemark; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDTO.java index f3b3977d4..2957ed604 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/todo/ExecutionStockInOrderDTO.java @@ -508,4 +508,6 @@ public class ExecutionStockInOrderDTO extends ExecutionStockInOrderBaseDTO { @ApiModelProperty("业务计价方式") private String businessPriceWay; + @ApiModelProperty("通知单备注") + private String noticeRemark; } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java index 53b9dc775..6cb3b57b1 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java @@ -46,4 +46,12 @@ public interface StockOutOrderMapper extends BaseMapper { public String getOpWhLoc(@Param("id") Long id); public String getInLotNo(@Param("inOrderNumber") String inOrderNumber, @Param("baseId") Long baseId); + + /** + * 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(用于取最大序号+1,防止删单后单号重复) + * 包含: reserve_stock_in_order, reservation_stock_in_order, execution_stock_in_order, WMS stock_in_order + */ + List getMaxStockOutOrderByPrefixAndOrgAndWarehouse(@Param("prefix") String prefix, + @Param("organizationId") Long organizationId, + @Param("warehouseId") Long warehouseId); } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java index a29ab5be1..4571696e6 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java @@ -17,10 +17,7 @@ import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.OmsServiceFeign; import com.mhd.system.api.SystemServiceFeign; -import com.mhd.system.api.domain.BatchDetailFeignPO; -import com.mhd.system.api.domain.DeliveryDetailsLink; -import com.mhd.system.api.domain.ElectronicSignatureSyncDTO; -import com.mhd.system.api.domain.PackDetailFeignPO; +import com.mhd.system.api.domain.*; import com.mhd.system.api.model.LoginUser; import com.mhd.wms.application.service.handoverTaskOrder.HandoverTaskOrderApplicationService; import com.mhd.wms.application.service.pickingOrder.PickingOrderApplicationService; @@ -91,6 +88,7 @@ import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO; import com.mhd.wms.domain.stockInOrder.service.StockInOrderDomainService; import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder; import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService; +import com.mhd.wms.domain.stockOutOrder.repository.mapper.StockOutOrderMapper; import com.mhd.wms.domain.stockOutOrder.repository.po.StockOutOrderPO; import com.mhd.wms.domain.stockOutOrder.repository.todo.StockOutOrderDO; import com.mhd.wms.domain.waveOrder.factorys.WaveOrderServiceFactory; @@ -171,6 +169,8 @@ public class StockOutOrderDomainService { @Autowired private StockInOrderMapper stockInOrderMapper; @Autowired + private StockOutOrderMapper stockOutOrderMapper; + @Autowired private PickingOrderApplicationService pickingOrderApplicationService; @Autowired private HandoverTaskOrderApplicationService handoverTaskOrderApplicationService; @@ -201,7 +201,35 @@ public class StockOutOrderDomainService { } - + /** + * 从单号列表中提取最大序号 + * 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001) + * 即使中间有删单,也能保证序号递增不重复 + * + * @param orderNumbers 匹配的单号列表 + * @param prefixLength 前缀长度(序号从该位置开始截取) + * @return 最大序号值,列表为空时返回0 + */ + private int extractMaxSequenceNumber(List orderNumbers, int prefixLength) { + if (orderNumbers == null || orderNumbers.isEmpty()) { + return 0; + } + int maxSeq = 0; + for (String orderNumber : orderNumbers) { + if (orderNumber != null && orderNumber.length() > prefixLength) { + try { + String seqStr = orderNumber.substring(prefixLength); + int seq = Integer.parseInt(seqStr); + if (seq > maxSeq) { + maxSeq = seq; + } + } catch (NumberFormatException e) { + // 序号部分非数字,跳过 + } + } + } + return maxSeq; + } /** @@ -209,7 +237,39 @@ public class StockOutOrderDomainService { */ @Transactional(rollbackFor = Exception.class) public Boolean insert(StockOutOrderDO stockOutOrderDO) { - stockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK")); +// stockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK")); + + //设置单号 + Long warehouseId = stockOutOrderDO.getWarehouseId(); + AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId); + if (!"200".equals(String.valueOf(ajaxResult.get("code")))) { + throw new ServiceException("获取仓库信息失败"); + } + //仓库信息 + WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class); + String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule(); + String prefix = warehouseFeignPO.getInOrderNoPrefix(); + if (prefix == null || prefix.isEmpty()) { + prefix = "RK"; + } + Long organizationId = stockOutOrderDO.getOrganizationId(); + Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); + if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) { + //日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1 + String dateStr = new SimpleDateFormat("yyMMdd").format(new Date()); + String datePrefix = prefix + dateStr; + List orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount); + int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length()); + String seq = String.format("%03d", maxSeq + 1); + stockOutOrderDO.setOutOrderNumber(datePrefix + seq); + } else { + //历史累加: 前缀 + 历史最大序号+1 + List orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount); + int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length()); + String seq = String.format("%03d", maxSeq + 1); + stockOutOrderDO.setOutOrderNumber(prefix + seq); + } + //设置物料信息 //setMaterialDetailInfo(stockOutOrderDO); //统计种类 diff --git a/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml b/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml index 139d25dd3..8babfe003 100644 --- a/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml @@ -526,4 +526,53 @@ + + + \ No newline at end of file