From f90a37fa86568c94b5ed9be14942e7e234db016e Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 27 一月 2026 17:48:24 +0800
Subject: [PATCH] refactor(stock): 删除getStockQuantity方法
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 9 +++-
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 10 ----
src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java | 4 ++
src/main/resources/mapper/stock/StockInventoryMapper.xml | 5 ++
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 26 ++++++------
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 52 ++++++++++++--------------
6 files changed, 54 insertions(+), 52 deletions(-)
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index 3b48ec4..cb5d600 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -51,6 +51,7 @@
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.staff.mapper.StaffOnJobMapper;
import com.ruoyi.staff.pojo.StaffOnJob;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -123,6 +124,7 @@
private SysUserMapper sysUserMapper;
@Autowired
private SysUserDeptMapper sysUserDeptMapper;
+ private StockInventoryMapper stockInventoryMapper;
@Override
public HomeBusinessDto business() {
@@ -135,7 +137,7 @@
salesLedgerLambdaQueryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶�
.lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(salesLedgerLambdaQueryWrapper);
- if(!CollectionUtils.isEmpty(salesLedgers)){
+ if (!CollectionUtils.isEmpty(salesLedgers)) {
// 鍚堣鍚堝悓閲戦
BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
.filter(Objects::nonNull)
@@ -157,7 +159,7 @@
.lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
// 鎵ц鏌ヨ骞惰绠楁�诲拰
List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper);
- if(!CollectionUtils.isEmpty(purchaseLedgers)){
+ if (!CollectionUtils.isEmpty(purchaseLedgers)) {
LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2)
.in(SalesLedgerProduct::getSalesLedgerId, purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList()));
@@ -193,17 +195,9 @@
// .filter(Objects::nonNull)
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// BigDecimal stock = stockAmount.add(customStockAmount).subtract(outboundAmount);
- IPage<ProductModel> productModelIPage = productModelMapper.listPageProductModel(new Page<>(1, -1), new ProductModel());
- if(!CollectionUtils.isEmpty(productModelIPage.getRecords())){
- //鑾峰彇瑙勬牸id
- List<Long> modelIds = productModelIPage.getRecords().stream().map(ProductModel::getId).collect(Collectors.toList());
- BigDecimal stockQuantityTotal = modelIds.stream()
- .map(stockUtils::getStockQuantity)
- .map(map -> map.get("stockQuantity"))
- .filter(Objects::nonNull)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- homeBusinessDto.setInventoryNum(stockQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
- }
+ BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
+ homeBusinessDto.setInventoryNum(stockQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
+
// 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺
LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -253,9 +247,9 @@
BigDecimal subtract = weekContractAmount.subtract(lastYearWeekContractAmount);
String weekYny = "";
// 鍛ㄥ悓姣�
- if(subtract.compareTo(BigDecimal.ZERO) == 0 || lastYearWeekContractAmount.compareTo(BigDecimal.ZERO) == 0){
+ if (subtract.compareTo(BigDecimal.ZERO) == 0 || lastYearWeekContractAmount.compareTo(BigDecimal.ZERO) == 0) {
weekYny = "0.00";
- }else{
+ } else {
weekYny = String.format("%.2f", subtract.divide(lastYearWeekContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
}
@@ -278,9 +272,9 @@
BigDecimal subtract1 = todayContractAmount.subtract(lastYearYesterdayContractAmount); // 淇敼锛氫娇鐢� todayContractAmount 鑰屼笉鏄� yesterdayContractAmount
// 鏃ョ幆姣�
String chain = "";
- if(subtract1.compareTo(BigDecimal.ZERO) == 0 || lastYearYesterdayContractAmount.compareTo(BigDecimal.ZERO) == 0){
+ if (subtract1.compareTo(BigDecimal.ZERO) == 0 || lastYearYesterdayContractAmount.compareTo(BigDecimal.ZERO) == 0) {
chain = "0.00";
- }else{
+ } else {
chain = String.format("%.2f", subtract1.divide(lastYearYesterdayContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
}
@@ -294,14 +288,14 @@
Map<String, BigDecimal> collect = salesLedgers.stream().collect(Collectors.groupingBy(SalesLedger::getCustomerName, Collectors.reducing(BigDecimal.ZERO,
SalesLedger::getContractAmount, BigDecimal::add)));
List<MapDto> mapDtos = new ArrayList<>();
- collect.forEach((k,v)->{
+ collect.forEach((k, v) -> {
MapDto mapDto = new MapDto();
mapDto.setName(k);
// 淇敼锛氬皢閲戦鍊间繚鐣欎袱浣嶅皬鏁�
mapDto.setValue(v.setScale(2, RoundingMode.HALF_UP).toString());
- if(contractAmount.compareTo(new BigDecimal(0)) == 0){
+ if (contractAmount.compareTo(new BigDecimal(0)) == 0) {
mapDto.setRate("0");
- }else{
+ } else {
mapDto.setRate(String.format("%.2f", v.divide(contractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))));
}
mapDtos.add(mapDto);
@@ -347,7 +341,7 @@
.filter(inspect -> inspect.getInspectType().equals(1))
.map(QualityInspect::getQuantity)
.reduce(BigDecimal.ZERO, BigDecimal::add);
- processNum= processNum.add(reduce1);
+ processNum = processNum.add(reduce1);
BigDecimal reduce2 = monthInspects.stream()
.filter(inspect -> inspect.getInspectType().equals(2))
.map(QualityInspect::getQuantity)
@@ -402,7 +396,7 @@
.ne(ApproveProcess::getApproveStatus, 2);
// .eq(ApproveProcess::getTenantId, loginUser.getTenantId());
List<ApproveProcess> approveProcesses = approveProcessMapper.selectList(approveProcessLambdaQueryWrapper);
- if(CollectionUtils.isEmpty(approveProcesses)){
+ if (CollectionUtils.isEmpty(approveProcesses)) {
approveProcesses = new ArrayList<>();
}
// // 鏌ヨ鏈鐢ㄥ姵淇濊褰�
@@ -426,7 +420,6 @@
}
/**
- *
* @param type 1-鍛� 2-鏈� 3-瀛e害
* @return
*/
@@ -435,7 +428,7 @@
LocalDate today = LocalDate.now();
LocalDate startDate = null;
LocalDate endDate = null;
- switch (type){
+ switch (type) {
case 1:
// 鑾峰彇鏈懆鍛ㄤ竴
startDate = today.with(DayOfWeek.MONDAY);
@@ -493,6 +486,7 @@
return statisticsReceivablePayableDto;
}
+
public static <T> BigDecimal sumAmount(List<T> list, java.util.function.Function<T, BigDecimal> amountExtractor) {
return list.stream()
// 鎻愬彇閲戦鏃讹紝灏唍ull鏇挎崲涓築igDecimal.ZERO
@@ -500,6 +494,7 @@
// 绱姞锛屽垵濮嬪�间负0锛岄伩鍏嶇┖娴侀棶棰�
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
+
@Autowired
private DeviceRepairMapper deviceRepairMapper;
@@ -542,9 +537,10 @@
productionProgressDto.setTotalOrderCount(totalCount);
productionProgressDto.setCompletedOrderCount(count);
productionProgressDto.setUncompletedOrderCount(count2);
- productionProgressDto.setPartialCompletedOrderCount(totalCount-count-count2);
+ productionProgressDto.setPartialCompletedOrderCount(totalCount - count - count2);
return productionProgressDto;
}
+
@Override
public ProductionTurnoverDto workInProcessTurnover() {
ProductionTurnoverDto productionTurnoverDto = new ProductionTurnoverDto();
@@ -557,15 +553,15 @@
.map(ProductWorkOrder::getPlanQuantity)
.mapToLong(BigDecimal::longValue)
.sum();
- if (sum == 0)return null;
+ if (sum == 0) return null;
productionTurnoverDto.setTotalOrderCount(sum);//鎬诲湪鍒跺搧鏁伴噺
- productionTurnoverDto.setAverageTurnoverDays(BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(ChronoUnit.DAYS.between(LocalDateTime.now().minusMonths(1), LocalDateTime.now())),2,RoundingMode.HALF_UP));
+ productionTurnoverDto.setAverageTurnoverDays(BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(ChronoUnit.DAYS.between(LocalDateTime.now().minusMonths(1), LocalDateTime.now())), 2, RoundingMode.HALF_UP));
long completeQuantity = productWorkOrders.stream()
.filter(productWorkOrder -> productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) >= 0)
.map(ProductWorkOrder::getCompleteQuantity)
.mapToLong(BigDecimal::longValue)
.sum();
- productionTurnoverDto.setTurnoverEfficiency(BigDecimal.valueOf(completeQuantity).divide(BigDecimal.valueOf(sum),2,RoundingMode.HALF_UP));
+ productionTurnoverDto.setTurnoverEfficiency(BigDecimal.valueOf(completeQuantity).divide(BigDecimal.valueOf(sum), 2, RoundingMode.HALF_UP));
Map<String, List<ProductWorkOrderDto>> map = productWorkOrders.stream()
.filter(productWorkOrder -> productWorkOrder.getPlanQuantity().compareTo(productWorkOrder.getCompleteQuantity()) > 0)
.collect(Collectors.groupingBy(ProductWorkOrderDto::getProcessName));
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 2ae9406..a42e43b 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -29,19 +29,19 @@
private final StockInRecordService stockInRecordService;
// 鑾峰彇鍟嗗搧鍏ュ簱鏁伴噺,鍑哄簱鏁伴噺,鍓╀綑搴撳瓨
- public Map<String, BigDecimal> getStockQuantity(Long productModelId) {
- // 鍏ュ簱鏁伴噺
- BigDecimal sumQuantity = procurementRecordMapper.getSumQuantity(productModelId);
- // 鍑哄簱鏁伴噺
- BigDecimal outQuantity = procurementRecordOutMapper.getSumQuantity(productModelId);
- // 鍓╀綑搴撳瓨
- BigDecimal stockQuantity = outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity);
- Map<String, BigDecimal> stockMap = new HashMap<>();
- stockMap.put("inboundNum", sumQuantity);
- stockMap.put("outboundNum", outQuantity);
- stockMap.put("stockQuantity", stockQuantity);
- return stockMap;
- }
+// public Map<String, BigDecimal> getStockQuantity(Long productModelId) {
+// // 鍏ュ簱鏁伴噺
+// BigDecimal sumQuantity = procurementRecordMapper.getSumQuantity(productModelId);
+// // 鍑哄簱鏁伴噺
+// BigDecimal outQuantity = procurementRecordOutMapper.getSumQuantity(productModelId);
+// // 鍓╀綑搴撳瓨
+// BigDecimal stockQuantity = outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity);
+// Map<String, BigDecimal> stockMap = new HashMap<>();
+// stockMap.put("inboundNum", sumQuantity);
+// stockMap.put("outboundNum", outQuantity);
+// stockMap.put("stockQuantity", stockQuantity);
+// return stockMap;
+// }
/**
* 涓嶅悎鏍煎叆搴�
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 804c630..8be62c1 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -142,15 +142,7 @@
productStructureDtos.add(productStructureDto);
}
for (ProductStructureDto productStructureDto : productStructureDtos) {
- ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId());
- Product product = productMapper.selectById(productModel1.getProductId());
- BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity");
- if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) {
- throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹负0");
- }
- if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) {
- throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹笉瓒�");
- }
+
ProductionProductInput productionProductInput = new ProductionProductInput();
productionProductInput.setProductModelId(productStructureDto.getProductModelId());
productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 55333a5..c0c53ca 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -28,6 +28,8 @@
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInventory;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -85,6 +87,8 @@
@Autowired
private ProductStructureMapper productStructureMapper;
+ @Autowired
+ private StockInventoryMapper stockInventoryMapper;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -491,10 +495,11 @@
int count = 0;
StringBuilder stringBuffer = new StringBuilder();
for (ProductStructureDto productStructureDto : productStructureDtos) {
- BigDecimal stockQuantity = stockUtils.getStockQuantity(productStructureDto.getProductModelId()).get("stockQuantity");
+ StockInventory stockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, productStructureDto.getProductModelId()));
+
//鎵�闇�鏁伴噺
BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
- BigDecimal subtract =stockQuantity.subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+ BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
count++;
stringBuffer.append(productStructureDto.getProductName())
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
index d37e367..7450a7c 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
@@ -10,6 +10,7 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
import java.util.List;
/**
@@ -35,4 +36,7 @@
IPage<StockInRecordDto> stockInventoryPage(@Param("ew") StockInventoryDto stockInventoryDto, Page page);
IPage<StockInventoryDto> stockInAndOutRecord(@Param("ew") StockInventoryDto stockInventoryDto, Page page);
+
+ BigDecimal selectTotal();
+
}
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 3cf81dc..49b4aa8 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -62,6 +62,7 @@
si.version,
(si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity,
pm.model,
+ si.remark,
pm.unit,
p.product_name
from stock_inventory si
@@ -183,5 +184,9 @@
pm.unit,
p.product_name
</select>
+ <select id="selectTotal" resultType="java.math.BigDecimal">
+ select sum(qualitity)
+ from stock_inventory
+ </select>
</mapper>
--
Gitblit v1.9.3