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