From 0578c6c76f13e367b5dc7d0882efe3c69ca4cb0e Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 15 五月 2026 16:29:30 +0800
Subject: [PATCH] feat(customer): 添加客户银行代码字段并实现批量删除功能
---
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java | 72 ++++++++++++++++++++++++++++-------
1 files changed, 57 insertions(+), 15 deletions(-)
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java
index aad5c20..77f9c44 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.procurementrecord.utils.StockUtils;
@@ -16,16 +17,16 @@
import com.ruoyi.stock.mapper.StockInventoryCheckItemMapper;
import com.ruoyi.stock.mapper.StockInventoryCheckPlanMapper;
import com.ruoyi.stock.mapper.StockInventoryCheckProductMapper;
+import com.ruoyi.stock.mapper.WarehouseInfoMapper;
import com.ruoyi.stock.pojo.*;
import com.ruoyi.stock.service.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* <p>
@@ -48,6 +49,7 @@
private final StockUtils stockUtils;
private final StockInRecordService stockInRecordService;
private final StockOutRecordService stockOutRecordService;
+ private final WarehouseInfoMapper warehouseInfoMapper;
@Override
public IPage<StockInventoryCheckPlanDto> listPage(Page page, StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
@@ -60,6 +62,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public R start(Long id) {
StockInventoryCheckPlan stockInventoryCheckPlan = this.getById(id);
StockInventoryCheckPlanDto stockInventoryCheckPlanDto = new StockInventoryCheckPlanDto();
@@ -98,6 +101,7 @@
StockInventoryCheckItemDto stockInventoryCheckItemDto = new StockInventoryCheckItemDto();
stockInventoryCheckItemDto.setProductModelId(stockInventory.getProductModelId());
stockInventoryCheckItemDto.setBatchNo(stockInventory.getBatchNo());
+ stockInventoryCheckItemDto.setWarehouseInfoId(stockInventory.getWarehouseInfoId());
stockInventoryCheckItemDto.setSystemQuantity(stockInventory.getQualitity());
stockInventoryCheckItemDto.setModel(stockInventory.getModel());
stockInventoryCheckItemDto.setUnit(stockInventory.getUnit());
@@ -119,6 +123,8 @@
return R.fail("鐩樼偣鍗曚笉瀛樺湪");
}
for (StockInventoryCheckItem item : stockInventoryCheckPlanDto.getCheckItems()) {
+ //鏇存柊搴撳瓨閿佸畾鐘舵��
+ stockInventoryService.updateLocked(item.getProductModelId(),item.getBatchNo(), false);
if (item.getDifferenceQuantity() == null || item.getDifferenceQuantity().compareTo(BigDecimal.ZERO) == 0) {
continue;
}
@@ -130,17 +136,15 @@
if (item.getDifferenceQuantity().compareTo(BigDecimal.ZERO) > 0) {
stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_IN.getCode());
- StockInRecordDto stockInRecordDto = stockUtils.addStockWithBatchNo(stockInventoryDto.getProductModelId(), item.getDifferenceQuantity().abs (), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo());
+ StockInRecordDto stockInRecordDto = stockUtils.addStockWithBatchNo(stockInventoryDto.getProductModelId(), item.getDifferenceQuantity().abs (), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo(), resolveWarehouseInfoId(item.getProductModelId(), item.getBatchNo()));
//鐩存帴瀹℃牳閫氳繃
- stockInRecordService.batchApprove(Collections.singletonList(stockInRecordDto.getId()), 1);
+ stockInRecordService.batchApprove(Collections.singletonList(stockInRecordDto.getId()), 1, resolveWarehouseInfoId(item.getProductModelId(), item.getBatchNo()));
}else {
- stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_OUT.getCode());
- StockOutRecordDto stock = stockUtils.substractStock(stockInventoryDto.getProductModelId(), item.getDifferenceQuantity().abs(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo());
+ stockInventoryDto.setRecordType(StockOutQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_OUT.getCode());
+ StockOutRecordDto stock = stockUtils.substractStock(stockInventoryDto.getProductModelId(), item.getDifferenceQuantity().abs(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo(), resolveWarehouseInfoId(item.getProductModelId(), item.getBatchNo()));
//鐩存帴瀹℃牳閫氳繃
- stockOutRecordService.batchApprove(Collections.singletonList(stock.getId()), 1);
+ stockOutRecordService.batchApprove(Collections.singletonList(stock.getId()), 1,item.getWarehouseInfoId());
}
- //鏇存柊搴撳瓨閿佸畾鐘舵��
- stockInventoryService.updateLocked(stockInventoryDto.getProductModelId(),stockInventoryDto.getBatchNo(), true);
}
stockInventoryCheckItemMapper.updateById(stockInventoryCheckPlanDto.getCheckItems());
plan.setStatus(2);
@@ -150,6 +154,9 @@
@Override
public StockInventoryCheckPlanDto detail(Long id) {
+ //鏌ヨ浠撳簱
+ List<WarehouseInfo> warehouseInfos = warehouseInfoMapper.selectList(null);
+
StockInventoryCheckPlan byId = this.getById(id);
if (byId == null) {
return null;
@@ -170,6 +177,9 @@
List<StockInventoryCheckItem> checkItems = stockInventoryCheckItemMapper.selectList(
new LambdaQueryWrapper<StockInventoryCheckItem>()
.eq(StockInventoryCheckItem::getMainId, checkMain.getId()));
+ checkItems.stream().forEach(item -> {
+ item.setWarehouseName(warehouseInfos.stream().filter(warehouseInfo -> warehouseInfo.getId().equals(item.getWarehouseInfoId())).findFirst().get().getWarehouseName());
+ });
stockInventoryCheckPlanDto.setCheckItems(checkItems);
}
@@ -206,19 +216,41 @@
public R edit(StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
SysUser sysUser = sysUserMapper.selectUserById(stockInventoryCheckPlanDto.getCheckerId());
stockInventoryCheckPlanDto.setCheckerName(sysUser.getNickName());
- //璧嬪��
- //璁剧疆鐩樼偣鍟嗗搧鍏宠仈ID骞舵煡璇㈢郴缁熷簱瀛�
+ // 鏌ヨ鏁版嵁搴撲腑鐨勬棫鏁版嵁
+ List<StockInventoryCheckProduct> oldItems = stockInventoryCheckProductMapper.selectList(
+ new LambdaQueryWrapper<StockInventoryCheckProduct>()
+ .eq(StockInventoryCheckProduct::getInventoryCheckPlanId, stockInventoryCheckPlanDto.getId()));
+ // 璁剧疆鐩樼偣鍟嗗搧鍏宠仈 ID 骞舵煡璇㈢郴缁熷簱瀛�
stockInventoryCheckPlanDto.getItems().forEach(item -> {
item.setInventoryCheckPlanId(stockInventoryCheckPlanDto.getId());
- List<StockInventory> list = stockInventoryService.list(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, item.getProductModelId()));
+ // 鏌ヨ骞惰缃郴缁熷簱瀛�
+ List<StockInventory> list = stockInventoryService.list(
+ new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, item.getProductModelId()));
BigDecimal systemQty = list.stream()
.map(StockInventory::getQualitity)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
item.setSystemQuantity(systemQty);
+ // 濡傛灉鏃ф暟鎹腑涓嶅瓨鍦ㄨ ID锛岃鏄庢槸鏂板锛岄渶瑕佹竻绌� ID 璁╂暟鎹簱鑷姩鐢熸垚
+ boolean isExisting = oldItems.stream().anyMatch(old -> old.getId().equals(item.getId()));
+ if (!isExisting) {
+ item.setId(null);
+ }
});
- //鏇存柊鎴栨柊澧�
+ // 浣跨敤 insertOrUpdate 鎵归噺澶勭悊锛岃嚜鍔ㄥ尯鍒嗘柊澧炲拰鏇存柊
stockInventoryCheckProductMapper.insertOrUpdate(stockInventoryCheckPlanDto.getItems());
+ // 澶勭悊鍒犻櫎锛氭棫鏁版嵁涓湁浣嗘柊鏁版嵁涓病鏈夌殑椤�
+ Set<Long> newItemIds = stockInventoryCheckPlanDto.getItems().stream()
+ .map(StockInventoryCheckProduct::getId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ List<Long> toDeleteIds = oldItems.stream()
+ .map(StockInventoryCheckProduct::getId)
+ .filter(id -> !newItemIds.contains(id))
+ .collect(Collectors.toList());
+ if (!toDeleteIds.isEmpty()) {
+ stockInventoryCheckProductMapper.deleteByIds(toDeleteIds);
+ }
return R.ok(this.updateById(stockInventoryCheckPlanDto));
}
@@ -233,4 +265,14 @@
}
+ private Long resolveWarehouseInfoId(Long productModelId, String batchNo) {
+ List<StockInventory> inventories = stockInventoryService.list(new LambdaQueryWrapper<StockInventory>()
+ .eq(StockInventory::getProductModelId, productModelId)
+ .eq(batchNo != null, StockInventory::getBatchNo, batchNo)
+ .isNull(batchNo == null, StockInventory::getBatchNo));
+ if (inventories.isEmpty() || inventories.get(0).getWarehouseInfoId() == null) {
+ return 1L;
+ }
+ return inventories.get(0).getWarehouseInfoId();
+ }
}
--
Gitblit v1.9.3