feat(serial-number): 添加物料批次号生成功能
- 在BasdeSerialNumber实体中添加desc字段用于存储物料编号 - 新增generateInventoryInBatchNo方法支持按物料号生成唯一批次号 - 集成重试机制确保批次号生成的可靠性 - 将库存入库、生产回退和生产订单盈余流程中的序列号生成改为使用物料相关批次号 - 批次号格式包含前缀、日期和递增序列以确保唯一性
This commit is contained in:
parent
20357115be
commit
775f066d92
|
|
@ -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()))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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()))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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()))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue