feat(serial-number): 扩展序列号生成功能并优化批次号管理

- 为generateSerialNumber方法添加suffixLen参数支持可变长度后缀
- 在序列号服务中实现可配置长度的数字补零功能
- 移除组件出库控制器中的空批次号设置
- 在成本中心回退、生产回退和生产订单盈余控制器中实现序列号生成
- 将批次号生成逻辑重构为独立的genBatchNo方法
- 优化流处理中的lambda表达式格式化
- 统一操作类型常量的格式化表示
This commit is contained in:
曹鹏飞 2026-06-12 15:14:44 +08:00
parent 30741347d7
commit 5667b92cd4
6 changed files with 29 additions and 13 deletions

View File

@ -433,7 +433,6 @@ public class ComponentOutboundController extends BaseController {
.setFactoryNo(order.getFactoryNo())
.setWarehouseNo(item.getLgort())
.setNum(getNoScanOutQty(item))
.setBatchNo("")
.setBinNo(item.getLgobe())
.setMustScan(noScanningBaseControllerService.cannotOutNoScanning(item.getIdnrk(),order.getFactoryNo(),item.getLgort()))
)

View File

@ -231,7 +231,7 @@ public class InCostCenterBackController extends BaseController {
.setFactoryNo(order.getWerks())
.setWarehouseNo(order.getLgort())
.setNum(item.getLeft())
.setBatchNo("")
.setBatchNo(serialNumberControllerService.generateSerialNumber(46, 3))
.setBinNo(item.getLgpbe())
.setMustScan(noScanningBaseControllerService.existsQrCode(item.getMatnr()))
)

View File

@ -239,7 +239,7 @@ public class InProduceBackController extends BaseController {
.setFactoryNo(order.getDwerk())
.setWarehouseNo(order.getLgort2())
.setNum(item.getSqsl().subtract(item.getNum()))
.setBatchNo("")
.setBatchNo(serialNumberControllerService.generateSerialNumber(46, 3))
.setBinNo(item.getLgpbe())
.setMustScan(noScanningBaseControllerService.existsQrCode(item.getMatnr()))
)
@ -317,7 +317,10 @@ public class InProduceBackController extends BaseController {
.setLgort(ri.getWarehouseNo())
.setMenge(data.getNum())
.setMenge_T(item.getEnmng())
.setMeins(item.getMeins()), (e, i) -> { e.setMenge(e.getMenge().add(i.getMenge())); return e; });
.setMeins(item.getMeins()), (e, i) -> {
e.setMenge(e.getMenge().add(i.getMenge()));
return e;
});
if (StrUtil.isNotBlank(data.getSerialNo())) {
input2.put(item.getRspos(), data.getSerialNo());
}
@ -486,7 +489,7 @@ public class InProduceBackController extends BaseController {
);
Map<String, List<InMaterialScanRecord>> dmaps = records.stream().collect(Collectors.groupingBy(InMaterialScanRecord::getKey7));
OptRecordDTO optRecordDTO = new OptRecordDTO();
optRecordDTO.setOperationType((short)1)
optRecordDTO.setOperationType((short) 1)
.setOrderId(ticket.getNo());
optRecordService.add(optRecordDTO);
Zwm3a11VO vo = sapService.zwm3a11(new Zwm3a11QO()

View File

@ -137,9 +137,6 @@ public class InProduceOrderController extends BaseController {
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
produceOrderService.save(order);
String date = DateTimeUtil.format(LocalDate.now(), "yyMMdd");
stringRedisTemplate.opsForValue().setIfAbsent("index:batchNo:" + date, "0", 24 - LocalDateTime.now().getHour(), TimeUnit.HOURS);
String index = StrUtil.padPre(String.valueOf(stringRedisTemplate.opsForValue().increment("index:batchNo:" + date)), 4, "0");
WmsInProduceOrderItem parent = new WmsInProduceOrderItem()
.setId(IdUtil.getSnowflakeNextId())
.setOrderId(order.getId())
@ -151,7 +148,7 @@ public class InProduceOrderController extends BaseController {
.setFactoryNo(request.getPwerk())
.setWarehouseNo(request.getLgort())
.setOrderNum(request.getPsmng())
.setBatchNo(date + index)
.setBatchNo(genBatchNo())
.setSernr(request.getSernr())
.setWorkbenchNo(request.getWorkbenchNo())
.setModelNo(request.getModelNo());
@ -219,6 +216,14 @@ public class InProduceOrderController extends BaseController {
return ApiResult.success(order.getId());
}
private String genBatchNo() {
String date = DateTimeUtil.format(LocalDate.now(), "yyMMdd");
stringRedisTemplate.opsForValue()
.setIfAbsent("index:batchNo:" + date, "0", 24 - LocalDateTime.now().getHour(), TimeUnit.HOURS);
String index = StrUtil.padPre(String.valueOf(stringRedisTemplate.opsForValue().increment("index:batchNo:" + date)), 4, "0");
return date + index;
}
/**
* 搜索
* @param request 搜索参数
@ -441,7 +446,7 @@ public class InProduceOrderController extends BaseController {
.setFactoryNo(item.getFactoryNo())
.setWarehouseNo(item.getWarehouseNo())
.setNum(item.getNum())
.setBatchNo(NoUtil.getBatchNo(item.getBatchNo()))
.setBatchNo(genBatchNo())
.setBinNo(item.getBinNos())
.setMustScan(noScanningBaseControllerService.existsQrCode(item.getMaterialNo()))
)

View File

@ -425,7 +425,7 @@ public class InProduceOrderSurplusController extends BaseController {
.setFactoryNo(order.getDwerk())
.setWarehouseNo(order.getLgort2())
.setNum(item.getLeftNum())
.setBatchNo("")
.setBatchNo(serialNumberControllerService.generateSerialNumber(46, 3))
.setBinNo(item.getLgpbe())
.setMustScan(noScanningBaseControllerService.existsQrCode(item.getMatnr()))
)

View File

@ -24,7 +24,7 @@ public class BasdeSerialNumberControllerService {
maxAttempts = 5, // 最大重试次数包括第一次调用
backoff = @Backoff(delay = 1000) // 重试间隔1秒
)
public String generateSerialNumber(Integer businessType) {
public String generateSerialNumber(Integer businessType, Integer suffixLen) {
String currentDate = LocalDate.now().format(DATE_FORMATTER);
BasdeSerialNumber serialNumber = basdeSerialNumberService.lambdaQuery()
@ -43,6 +43,15 @@ public class BasdeSerialNumberControllerService {
serialNumber.setCurrentDateStr(currentDate);
basdeSerialNumberService.updateById(serialNumber);
// 格式化为4位数字不足补零
return serialNumber.getBusinessPrefixNumber() + currentDate + String.format("%04d", nextSerial);
return serialNumber.getBusinessPrefixNumber() + currentDate
+ StrUtil.padPre(String.valueOf(nextSerial), suffixLen, '0');
}
@Retryable(
maxAttempts = 5, // 最大重试次数包括第一次调用
backoff = @Backoff(delay = 1000) // 重试间隔1秒
)
public String generateSerialNumber(Integer businessType) {
return generateSerialNumber(businessType, 4);
}
}