From 23e8f3896a37b67d5d96fe10afcb3213bb73aad4 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 20 一月 2026 16:25:32 +0800
Subject: [PATCH] feat(sales): 添加销售台账产品库存判断功能
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 45 +++++++++++++++++++++++++++++++++++++++++++++
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java | 4 ++++
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java | 7 +++++++
3 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 17ecdc6..79e6cb5 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.domain.R;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
@@ -140,4 +141,10 @@
}
return toAjax(salesLedgerProductService.deleteSalesLedgerProductByIds(ids));
}
+
+ //鏍规嵁浜у搧id鑾峰彇bom鍒ゆ柇搴撳瓨鏄惁鍏呰冻
+ @GetMapping("/judgmentInventory")
+ public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
+ return salesLedgerProductService.judgmentInventory(salesLedgerProduct);
+ }
}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
index b8fd0fa..47e0616 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.R;
import com.ruoyi.sales.dto.SalesLedgerProductDto;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
@@ -27,4 +28,7 @@
IPage<SalesLedgerProductDto> listPage(Page page, SalesLedgerProductDto salesLedgerProduct);
IPage<SalesLedgerProductDto> listPagePurchaseLedger(Page page, SalesLedgerProductDto salesLedgerProduct);
+
+ R judgmentInventory(SalesLedgerProduct salesLedgerProduct);
+
}
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 270f256..4a9b51f 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -8,6 +8,9 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
@@ -31,6 +34,7 @@
import java.lang.reflect.Field;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -70,6 +74,13 @@
private ProductionProductOutputMapper productionProductOutputMapper;
private ProductionProductInputMapper productionProductInputMapper;
private QualityInspectMapper qualityInspectMapper;
+
+ private StockUtils stockUtils;
+
+
+
+ @Autowired
+ private ProductStructureMapper productStructureMapper;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -478,4 +489,38 @@
throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
}
}
+ @Override
+ public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
+ //鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
+ ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()).orderByDesc(ProcessRoute::getCreateTime).last("LIMIT 1"));
+ if (processRoute == null) {
+ return R.fail("璇峰厛璁剧疆宸ヨ壓璺嚎");
+ }
+ List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
+ if (productStructureDtos.isEmpty()) {
+ return R.fail("璇峰厛璁剧疆浜у搧缁撴瀯");
+ }
+ int count = 0;
+ StringBuilder stringBuffer = new StringBuilder();
+ for (ProductStructureDto productStructureDto : productStructureDtos) {
+ BigDecimal stockQuantity = stockUtils.getStockQuantity(productStructureDto.getProductModelId()).get("stockQuantity");
+ //鎵�闇�鏁伴噺
+ BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
+ BigDecimal subtract =stockQuantity.subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+ if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
+ count++;
+ stringBuffer.append(productStructureDto.getProductName())
+ .append("-")
+ .append(productStructureDto.getModel())
+ .append("搴撳瓨涓嶈冻锛屽皯")
+ .append(subtract)
+ .append(System.lineSeparator());
+ }
+ }
+ if (count>0) {
+ return R.fail(stringBuffer.toString());
+ }else {
+ return R.ok();
+ }
+ }
}
--
Gitblit v1.9.3