From c94ab7a91bfb3015d929a94837f3a45289e8bbf1 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 03 四月 2026 11:51:49 +0800
Subject: [PATCH] feat:采购/库存入库添加批号
---
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 63 +++++++++++++++++++++++++++++--
1 files changed, 58 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index b9a065e..0e66a5c 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -37,9 +37,12 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* <p>
@@ -76,6 +79,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
+ List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null);
//鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
StockInRecordDto stockInRecordDto = new StockInRecordDto();
stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
@@ -87,19 +91,65 @@
stockInRecordDto.setLockedQuantity(stockInventoryDto.getLockedQuantity());
stockInRecordDto.setApproveStatus(0);
stockInRecordDto.setType("0");
+ if (stockInventoryDto.getBatchNo() == null || stockInventoryDto.getBatchNo().isEmpty()) {
+ String batchNo;
+ // 鑾峰彇褰撳墠鏈堜唤锛堜袱浣嶏級
+ LocalDate now = LocalDate.now();
+ String monthFlag = now.format(DateTimeFormatter.ofPattern("MM"));
+
+ // 鑾峰彇褰撳墠鏈堜唤鐨勬渶澶ф祦姘村彿
+ int maxSeq = getCurrentMonthMaxSeq(stockInventoryDto, monthFlag, stockInventoryList);
+
+ // 鏂版祦姘村彿 = 鏈�澶ф祦姘村彿 + 1
+ int newSeq = maxSeq + 1;
+ String seqStr = String.format("%03d", newSeq);
+
+ // 缁勮batchNo
+ batchNo = stockInventoryDto.getMaterialCode() + stockInventoryDto.getModel() + "P" + monthFlag + seqStr;
+ stockInRecordDto.setBatchNo(batchNo);
+ } else {
+ stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo());
+ }
Long id = stockInRecordService.add(stockInRecordDto);
LoginUser loginUser = SecurityUtils.getLoginUser();
if (id != null) {
try {
- addApproveByPurchase(loginUser, stockInRecordDto,id);
+ addApproveByPurchase(loginUser, stockInRecordDto, id);
} catch (Exception e) {
- e.printStackTrace();
+ throw new RuntimeException(e.getMessage());
}
}
return true;
}
- public void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto,Long id) throws Exception {
+ /**
+ * 鏌ヨ褰撳墠鏈堜唤宸插瓨鍦ㄧ殑鏈�澶ф祦姘村彿
+ */
+ private static int getCurrentMonthMaxSeq(StockInventoryDto dto, String monthFlag, List<StockInventory> existingList) {
+ int maxSeq = 0;
+
+ String prefix = dto.getMaterialCode() + dto.getModel() + "P" + monthFlag;
+
+ // 姝e垯鍖归厤锛氬墠缂� + 3浣嶆暟瀛�
+ Pattern pattern = Pattern.compile(Pattern.quote(prefix) + "(\\d{3})");
+
+ for (StockInventory item : existingList) {
+ String batchNo = item.getBatchNo();
+ if (batchNo == null) continue;
+
+ Matcher matcher = pattern.matcher(batchNo);
+ if (matcher.find()) {
+ int seq = Integer.parseInt(matcher.group(1));
+ if (seq > maxSeq) {
+ maxSeq = seq;
+ }
+ }
+ }
+
+ return maxSeq;
+ }
+
+ public void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto, Long id) throws Exception {
ApproveProcessVO approveProcessVO = new ApproveProcessVO();
approveProcessVO.setApproveType(9);
approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
@@ -123,6 +173,7 @@
StockInventory oldStockInventory = stockInventoryMapper.selectOne(
new QueryWrapper<StockInventory>().lambda()
.eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())
+ .eq(StockInventory::getBatchNo, stockInRecord.getBatchNo())
);
if (ObjectUtils.isEmpty(oldStockInventory)) {
@@ -134,12 +185,14 @@
newStockInventory.setRemark(stockInRecord.getRemark());
newStockInventory.setLockedQuantity(stockInRecord.getLockedQuantity());
newStockInventory.setWarnNum(stockInRecord.getWarnNum());
+ newStockInventory.setBatchNo(stockInRecord.getBatchNo());
stockInventoryMapper.insert(newStockInventory);
} else {
// 瀛樺湪鍒欐洿鏂�
LambdaUpdateWrapper<StockInventory> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper
.eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())
+ .eq(StockInventory::getBatchNo, stockInRecord.getBatchNo())
.setSql(stockInRecord.getStockInNum() != null,
"qualitity = qualitity + " + stockInRecord.getStockInNum())
.setSql(true, "version = version + 1")
@@ -179,7 +232,7 @@
newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
stockInventoryMapper.insert(newStockInventory);
- }else {
+ } else {
stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
}
return true;
@@ -209,7 +262,7 @@
// 鏌ヨ浜у搧瑙勬牸鍚�
ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId());
Product product = productMapper.selectById(productModel.getProductId());
- throw new RuntimeException(product.getProductName()+"/"+productModel.getModel() + "搴撳瓨涓嶈冻鏃犳硶鍑哄簱");
+ throw new RuntimeException(product.getProductName() + "/" + productModel.getModel() + "搴撳瓨涓嶈冻鏃犳硶鍑哄簱");
}
stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
--
Gitblit v1.9.3