From f16bf325804fb3bc6ab883693a96a374b3c63188 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 18 六月 2026 17:41:50 +0800
Subject: [PATCH] 不合格库存批号自动生成
---
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 83 ++++++++++++++++++++++++++++++-----------
1 files changed, 61 insertions(+), 22 deletions(-)
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
index 4b0a36e..d738db1 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -31,6 +31,7 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
@@ -90,25 +91,23 @@
}
@Override
+ public List<StockUninventoryDto> getWasteByModelId(Long productModelId) {
+ return stockUninventoryMapper.getWasteByModelId(productModelId);
+ }
+
+ @Override
@Transactional(rollbackFor = Exception.class)
public Integer addStockUninventory(StockUninventoryDto stockUninventoryDto) {
String inventoryType = resolveInventoryType(stockUninventoryDto);
stockUninventoryDto.setType(inventoryType);
- LambdaQueryWrapper<StockUninventory> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId());
- wrapper.eq(StockUninventory::getType, inventoryType);
- if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) {
- stockUninventoryDto.setBatchNo(null);
- wrapper.isNull(StockUninventory::getBatchNo);
- } else {
- wrapper.eq(StockUninventory::getBatchNo, stockUninventoryDto.getBatchNo());
- }
+ String batchNo = resolveOrGenerateBatchNo(stockUninventoryDto.getBatchNo(), stockUninventoryDto.getProductModelId());
+ stockUninventoryDto.setBatchNo(batchNo);
//鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
StockInRecordDto stockInRecordDto = new StockInRecordDto();
stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId());
stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType());
stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity());
- stockInRecordDto.setBatchNo(stockUninventoryDto.getBatchNo());
+ stockInRecordDto.setBatchNo(batchNo);
stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
if (UNQUALIFIED_TYPE.equals(inventoryType)) {
stockInRecordDto.setType("1");
@@ -127,6 +126,8 @@
public Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto) {
String inventoryType = resolveInventoryType(stockUninventoryDto);
stockUninventoryDto.setType(inventoryType);
+ String batchNo = resolveOutboundBatchNo(stockUninventoryDto.getProductModelId(), inventoryType, stockUninventoryDto.getBatchNo());
+ stockUninventoryDto.setBatchNo(batchNo);
// 鏂板鍑哄簱璁板綍
StockOutRecordDto stockOutRecordDto = new StockOutRecordDto();
@@ -134,12 +135,18 @@
stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType());
stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity());
stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
- stockOutRecordDto.setBatchNo(stockUninventoryDto.getBatchNo());
+ stockOutRecordDto.setBatchNo(batchNo);
stockOutRecordDto.setType("1");
stockOutRecordService.add(stockOutRecordDto);
- StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda()
+ LambdaQueryWrapper<StockUninventory> queryWrapper = new QueryWrapper<StockUninventory>().lambda()
.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())
- .eq(StockUninventory::getType, inventoryType));
+ .eq(StockUninventory::getType, inventoryType);
+ if (StringUtils.isEmpty(batchNo)) {
+ queryWrapper.isNull(StockUninventory::getBatchNo);
+ } else {
+ queryWrapper.eq(StockUninventory::getBatchNo, batchNo);
+ }
+ StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(queryWrapper);
if (ObjectUtils.isEmpty(oldStockInventory)) {
throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
}else {
@@ -151,19 +158,22 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Integer addStockInRecordOnly(StockUninventoryDto stockUninventoryDto) {
- stockUninventoryDto.setType(resolveInventoryType(stockUninventoryDto));
+ String inventoryType = resolveInventoryType(stockUninventoryDto);
+ stockUninventoryDto.setType(inventoryType);
StockInRecordDto stockInRecordDto = new StockInRecordDto();
stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId());
stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType());
stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity());
- String batchNo = StringUtils.trim(stockUninventoryDto.getBatchNo());
- if (StringUtils.isEmpty(batchNo)) {
- batchNo = generateAutoBatchNo(stockUninventoryDto.getProductModelId());
- }
+ String batchNo = resolveOrGenerateBatchNo(stockUninventoryDto.getBatchNo(), stockUninventoryDto.getProductModelId());
stockInRecordDto.setBatchNo(batchNo);
stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
- stockInRecordDto.setType("1");
+ if (UNQUALIFIED_TYPE.equals(inventoryType)) {
+ stockInRecordDto.setType("1");
+ } else {
+ stockInRecordDto.setType("2");
+ }
stockInRecordDto.setRemark(stockUninventoryDto.getRemark());
+ stockInRecordDto.setSource(stockUninventoryDto.getSource());
stockInRecordService.add(stockInRecordDto);
return 1;
}
@@ -173,13 +183,15 @@
public Integer addStockOutRecordOnly(StockUninventoryDto stockUninventoryDto) {
String inventoryType = resolveInventoryType(stockUninventoryDto);
stockUninventoryDto.setType(inventoryType);
+ String batchNo = resolveOutboundBatchNo(stockUninventoryDto.getProductModelId(), inventoryType, stockUninventoryDto.getBatchNo());
+ stockUninventoryDto.setBatchNo(batchNo);
LambdaQueryWrapper<StockUninventory> eq = new LambdaQueryWrapper<>();
eq.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId());
eq.eq(StockUninventory::getType, inventoryType);
- if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) {
+ if (StringUtils.isEmpty(batchNo)) {
eq.isNull(StockUninventory::getBatchNo);
} else {
- eq.eq(StockUninventory::getBatchNo, stockUninventoryDto.getBatchNo());
+ eq.eq(StockUninventory::getBatchNo, batchNo);
}
StockUninventory stockUninventory = stockUninventoryMapper.selectOne(eq);
if (stockUninventory == null) {
@@ -205,7 +217,7 @@
stockOutRecordDto.setRecordId(stockUninventoryDto.getRecordId());
stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType());
stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity());
- stockOutRecordDto.setBatchNo(stockUninventoryDto.getBatchNo());
+ stockOutRecordDto.setBatchNo(batchNo);
stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
stockOutRecordDto.setType("1");
stockOutRecordDto.setRemark(stockUninventoryDto.getRemark());
@@ -322,6 +334,33 @@
return maxSequence;
}
+ private String resolveOrGenerateBatchNo(String batchNo, Long productModelId) {
+ String normalizedBatchNo = StringUtils.trim(batchNo);
+ if (StringUtils.isNotEmpty(normalizedBatchNo)) {
+ return normalizedBatchNo;
+ }
+ return generateAutoBatchNo(productModelId);
+ }
+
+ private String resolveOutboundBatchNo(Long productModelId, String inventoryType, String batchNo) {
+ String normalizedBatchNo = StringUtils.trim(batchNo);
+ if (StringUtils.isNotEmpty(normalizedBatchNo)) {
+ return normalizedBatchNo;
+ }
+ List<StockUninventory> stockUninventoryList = stockUninventoryMapper.selectList(
+ Wrappers.<StockUninventory>lambdaQuery()
+ .eq(StockUninventory::getProductModelId, productModelId)
+ .eq(StockUninventory::getType, inventoryType)
+ .orderByDesc(StockUninventory::getId));
+ if (CollectionUtils.isEmpty(stockUninventoryList)) {
+ throw new BaseException("搴撳瓨璁板綍涓嶅瓨鍦�");
+ }
+ if (stockUninventoryList.size() == 1) {
+ return stockUninventoryList.get(0).getBatchNo();
+ }
+ throw new BaseException("褰撳墠浜у搧瑙勬牸瀛樺湪澶氫釜鎵规锛岃鍏堥�夋嫨鎵瑰彿鍚庡啀鍑哄簱");
+ }
+
private int parseSequence(String batchNo, String prefix) {
if (StringUtils.isEmpty(batchNo) || StringUtils.isEmpty(prefix) || !batchNo.startsWith(prefix)) {
return 0;
--
Gitblit v1.9.3