From 775f066d92621b5cd506b2b16738acaeeb0fbb96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 12 Jun 2026 15:52:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(serial-number):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=89=B9=E6=AC=A1=E5=8F=B7=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在BasdeSerialNumber实体中添加desc字段用于存储物料编号 - 新增generateInventoryInBatchNo方法支持按物料号生成唯一批次号 - 集成重试机制确保批次号生成的可靠性 - 将库存入库、生产回退和生产订单盈余流程中的序列号生成改为使用物料相关批次号 - 批次号格式包含前缀、日期和递增序列以确保唯一性 --- .../InCostCenterBackController.java | 2 +- .../controller/InProduceBackController.java | 2 +- .../InProduceOrderSurplusController.java | 2 +- .../BasdeSerialNumberControllerService.java | 32 +++++++++++++++++++ .../repository/entity/BasdeSerialNumber.java | 8 ++--- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java index 3305e902..06bf7d9d 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java @@ -231,7 +231,7 @@ public class InCostCenterBackController extends BaseController { .setFactoryNo(order.getWerks()) .setWarehouseNo(order.getLgort()) .setNum(item.getLeft()) - .setBatchNo(serialNumberControllerService.generateSerialNumber(46, 3)) + .setBatchNo(serialNumberControllerService.generateInventoryInBatchNo(item.getMatnr())) .setBinNo(item.getLgpbe()) .setMustScan(noScanningBaseControllerService.existsQrCode(item.getMatnr())) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java index 3c686b59..ed30ca12 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java @@ -239,7 +239,7 @@ public class InProduceBackController extends BaseController { .setFactoryNo(order.getDwerk()) .setWarehouseNo(order.getLgort2()) .setNum(item.getSqsl().subtract(item.getNum())) - .setBatchNo(serialNumberControllerService.generateSerialNumber(46, 3)) + .setBatchNo(serialNumberControllerService.generateInventoryInBatchNo(item.getMatnr())) .setBinNo(item.getLgpbe()) .setMustScan(noScanningBaseControllerService.existsQrCode(item.getMatnr())) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java index 7dbd0851..6c349aef 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java @@ -425,7 +425,7 @@ public class InProduceOrderSurplusController extends BaseController { .setFactoryNo(order.getDwerk()) .setWarehouseNo(order.getLgort2()) .setNum(item.getLeftNum()) - .setBatchNo(serialNumberControllerService.generateSerialNumber(46, 3)) + .setBatchNo(serialNumberControllerService.generateInventoryInBatchNo(item.getMatnr())) .setBinNo(item.getLgpbe()) .setMustScan(noScanningBaseControllerService.existsQrCode(item.getMatnr())) ) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java index 30118545..a31ff781 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java @@ -54,4 +54,36 @@ public class BasdeSerialNumberControllerService { public String generateSerialNumber(Integer businessType) { return generateSerialNumber(businessType, 4); } + + @Retryable( + maxAttempts = 5, // 最大重试次数(包括第一次调用) + backoff = @Backoff(delay = 1000) // 重试间隔1秒 + ) + public String generateInventoryInBatchNo(String materialNo) { + String currentDate = LocalDate.now().format(DATE_FORMATTER); + + BasdeSerialNumber serialNumber = basdeSerialNumberService.lambdaQuery() + .eq(BasdeSerialNumber::getDesc, materialNo) + .one(); + + if (Objects.isNull(serialNumber)) { + serialNumber = new BasdeSerialNumber() + .setDesc(materialNo) + .setMaxSerial(0) + .setBusinessPrefixNumber("9") + .setVersion(0); + basdeSerialNumberService.save(serialNumber); + } + int nextSerial = 0; + if (StrUtil.equals(currentDate, serialNumber.getCurrentDateStr())) { + nextSerial = serialNumber.getMaxSerial(); + } + nextSerial = nextSerial + 1; + serialNumber.setMaxSerial(nextSerial); + serialNumber.setCurrentDateStr(currentDate); + basdeSerialNumberService.updateById(serialNumber); + // 格式化为4位数字,不足补零 + return serialNumber.getBusinessPrefixNumber() + currentDate + + StrUtil.padPre(String.valueOf(nextSerial), 3, '0'); + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/BasdeSerialNumber.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/BasdeSerialNumber.java index 60e25efd..2ac8dc46 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/BasdeSerialNumber.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/BasdeSerialNumber.java @@ -1,9 +1,6 @@ package com.nflg.wms.repository.entity; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.Version; +import com.baomidou.mybatisplus.annotation.*; import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; @@ -58,4 +55,7 @@ public class BasdeSerialNumber implements Serializable { * 业务单号的前缀 */ private String businessPrefixNumber; + + @TableField(value = "\"desc\"") + private String desc; }