diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java index 27e1ea97f..36603f13e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java @@ -8,6 +8,7 @@ import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.OrderSequence; import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.bean.BeanUtils; +import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.oms.domain.businessDeliveryDetailsLink.entity.BusinessDeliveryDetailsLink; import com.mhd.oms.domain.businessDeliveryDetailsLink.repository.facade.IBusinessDeliveryDetailsLinkService; @@ -38,6 +39,8 @@ import com.mhd.oms.domain.reservationInventoryAdjustmentRecord.repository.mapper import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory; import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper; import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper; +import com.mhd.oms.domain.reserveStockInOrder.repository.mapper.ReserveStockInOrderMapper; +import com.mhd.oms.domain.reserveStockOutOrder.repository.mapper.ReserveStockOutOrderMapper; import com.mhd.system.api.SystemServiceFeign; import com.mhd.system.api.WmsServiceFeign; import com.mhd.system.api.domain.*; @@ -50,6 +53,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -96,6 +100,8 @@ public class ExecutionStockOutOrderDomainService { private ReservationMaterialInventoryMapper reservationMaterialInventoryMapper; @Autowired private ReservationStockInOrderMapper stockInOrderMapper; + @Autowired + private ReserveStockOutOrderMapper reserveStockOutOrderMapper; /** * 分页查询出库单列表 */ @@ -103,14 +109,74 @@ public class ExecutionStockOutOrderDomainService { return stockOutOrderService.queryList(stockOutOrderDO); } - + /** + * 从单号列表中提取最大序号 + * 单号格式: 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; + } /** * 新增出库单 */ @Transactional(rollbackFor = Exception.class) public Boolean insert(ExecutionStockOutOrderDO stockOutOrderDO) { - if (stockOutOrderDO.getOutOrderNumber() == null) { - 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.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } + if (prefix == null || prefix.isEmpty()) { + prefix = "CK"; + } + 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 = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount); + int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length()); + String seq = String.format("%03d", maxSeq + 1); + stockOutOrderDO.setOutOrderNumber(datePrefix + seq); + stockOutOrderDO.setBusinessOrderNo(datePrefix + seq); + } else { + //历史累加: 前缀 + 历史最大序号+1 + List orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount); + int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length()); + String seq = String.format("%03d", maxSeq + 1); + stockOutOrderDO.setOutOrderNumber(prefix + seq); + stockOutOrderDO.setBusinessOrderNo(prefix + seq); } // 与 update / batchInsert 一致:前端传计划数量为 quantity,非 outboundQuantity setMaterialDetailInfo(stockOutOrderDO); @@ -147,8 +213,40 @@ public class ExecutionStockOutOrderDomainService { @Transactional(rollbackFor = Exception.class) public Boolean batchInsert(List stockOutOrderDOList) { for (ExecutionStockOutOrderDO stockOutOrderDO : stockOutOrderDOList){ - if (StringUtils.isBlank(stockOutOrderDO.getOutOrderNumber())){ - 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.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } + if (prefix == null || prefix.isEmpty()) { + prefix = "CK"; + } + 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 = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount); + int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length()); + String seq = String.format("%03d", maxSeq + 1); + stockOutOrderDO.setOutOrderNumber(datePrefix + seq); + stockOutOrderDO.setBusinessOrderNo(datePrefix + seq); + } else { + //历史累加: 前缀 + 历史最大序号+1 + List orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount); + int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length()); + String seq = String.format("%03d", maxSeq + 1); + stockOutOrderDO.setOutOrderNumber(prefix + seq); + stockOutOrderDO.setBusinessOrderNo(prefix + seq); } //设置物料信息 setMaterialDetailInfo(stockOutOrderDO); diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java index c6ac2e315..7462af1e1 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java @@ -167,9 +167,12 @@ public class ReservationStockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); @@ -241,9 +244,12 @@ public class ReservationStockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); @@ -498,9 +504,12 @@ public class ReservationStockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); @@ -660,9 +669,12 @@ public class ReservationStockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderDomainService.java index 848c37cf6..62a1dda20 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderDomainService.java @@ -133,9 +133,12 @@ public class ReserveStockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); @@ -194,9 +197,12 @@ public class ReserveStockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); 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 4571696e6..d25fac96d 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 @@ -248,9 +248,12 @@ public class StockOutOrderDomainService { //仓库信息 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(); + String prefix = warehouseFeignPO.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } if (prefix == null || prefix.isEmpty()) { - prefix = "RK"; + prefix = "CK"; } Long organizationId = stockOutOrderDO.getOrganizationId(); Long warehouseIdForCount = stockOutOrderDO.getWarehouseId(); @@ -297,8 +300,38 @@ public class StockOutOrderDomainService { @Transactional(rollbackFor = Exception.class) public Boolean batchInsert(List stockOutOrderDOList) { for (StockOutOrderDO stockOutOrderDO : stockOutOrderDOList){ - if (StringUtils.isBlank(stockOutOrderDO.getOutOrderNumber())){ - 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.getOutOrderNoPrefix(); + if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) { + prefix = warehouseFeignPO.getSampleOutOrderNoPrefix(); + } + if (prefix == null || prefix.isEmpty()) { + prefix = "CK"; + } + 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);