From 03403ba333c3c0b7e6b0ae6895a5481edbfb5d08 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 02 七月 2026 14:40:39 +0800
Subject: [PATCH] 采购台账,可用数量为实际入库数量。存在采购质检部分合格入库情况。只有可用数量大于0进行采购退货操作

---
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                 |    1 
 src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java         |    2 +
 src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java            |    2 +
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java |    5 ++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                   |    4 ++
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java    |   10 +++++
 src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml                  |   40 ++++++++++++++++++++
 src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java   |   11 ++++-
 src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml            |    7 ++-
 9 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 58216c1..3b20e8f 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -118,6 +118,16 @@
     }
 
     /**
+     * 鏌ヨ閲囪喘閫�璐у彲閫夐噰璐彴璐�
+     */
+    @GetMapping("/returnableList")
+    public TableDataInfo returnableList(PurchaseLedger purchaseLedger) {
+        startPage();
+        List<PurchaseLedger> list = purchaseLedgerService.selectReturnablePurchaseLedgerList(purchaseLedger);
+        return getDataTable(list);
+    }
+
+    /**
      * 瀵煎嚭閲囪喘鍙拌处鍒楄〃
      */
     @Log(title = "閲囪喘鍙拌处", businessType = BusinessType.EXPORT)
diff --git a/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java b/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
index 8d5ab54..feba849 100644
--- a/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
+++ b/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
@@ -23,6 +23,8 @@
 
     IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, @Param("c") PurchaseLedgerDto purchaseLedger);
 
+    List<PurchaseLedger> selectReturnablePurchaseLedgerList(@Param("c") PurchaseLedger purchaseLedger);
+
     List<IncomeExpenseAnalysisDto> selectPurchaseStats(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("dateFormat") String dateFormat);
 
     BigDecimal selectTotalPurchaseAmount(@Param("startDate") String startDate, @Param("endDate") String endDate);
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index 4b91b89..78e86a1 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -23,6 +23,8 @@
 
     List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger);
 
+    List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger);
+
     int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception;
 
     R batchInsertPurchaseSteps(List<Long> ids);
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index ddb0118..4f08f69 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -136,6 +136,11 @@
     }
 
     @Override
+    public List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger) {
+        return purchaseLedgerMapper.selectReturnablePurchaseLedgerList(purchaseLedger);
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
         PurchaseLedger purchaseLedger = new PurchaseLedger();
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 9efcc89..cc31974 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -47,11 +47,16 @@
                 java.math.BigDecimal returnQuantity = item.getReturnQuantity() == null
                         ? java.math.BigDecimal.ZERO
                         : item.getReturnQuantity();
-                java.math.BigDecimal quantity = item.getQuantity() == null
+                item.setReturnQuantity(returnQuantity);
+                java.math.BigDecimal availableQuality = item.getQuantity() == null
                         ? java.math.BigDecimal.ZERO
                         : item.getQuantity();
-                item.setReturnQuantity(returnQuantity);
-                item.setAvailableQuality(quantity.subtract(returnQuantity));
+                if (item.getType() != null && item.getType() == 2) {
+                    availableQuality = item.getApprovedStockInNum() == null
+                            ? java.math.BigDecimal.ZERO
+                            : item.getApprovedStockInNum();
+                }
+                item.setAvailableQuality(availableQuality.subtract(returnQuantity));
             });
         }
         return AjaxResult.success(list);
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 4aa9ff5..734cdf1 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -187,6 +187,10 @@
     private BigDecimal returnQuantity;
 
     @TableField(exist = false)
+    @Schema(description = "宸插鏍稿叆搴撴暟閲�")
+    private BigDecimal approvedStockInNum;
+
+    @TableField(exist = false)
     @Schema(description = "瀹℃壒涓暟閲�")
     private BigDecimal pendingApprovalQuantity;
 }
diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index 60d6f4a..8b94eb7 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -139,6 +139,46 @@
         ORDER BY result.entry_date DESC
     </select>
 
+    <select id="selectReturnablePurchaseLedgerList" resultType="com.ruoyi.purchase.pojo.PurchaseLedger">
+        SELECT DISTINCT pl.*
+        FROM purchase_ledger pl
+        WHERE 1 = 1
+        <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
+            AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%')
+        </if>
+        <if test="c.supplierId != null">
+            AND pl.supplier_id = #{c.supplierId}
+        </if>
+        <if test="c.approvalStatus != null">
+            AND pl.approval_status = #{c.approvalStatus}
+        </if>
+        AND EXISTS (
+            SELECT 1
+            FROM stock_in_record sir
+            LEFT JOIN quality_inspect qi
+                ON sir.record_type = '10'
+               AND sir.record_id = qi.id
+            LEFT JOIN sales_ledger_product slp
+                ON slp.sales_ledger_id = pl.id
+               AND slp.product_model_id = sir.product_model_id
+               AND slp.type = 2
+            LEFT JOIN (
+                SELECT stock_in_record_id, SUM(return_quantity) AS total_return_num
+                FROM purchase_return_order_products
+                GROUP BY stock_in_record_id
+            ) rs ON rs.stock_in_record_id = sir.id
+            WHERE sir.approval_status = 1
+              AND sir.record_type IN ('7','10')
+              AND (
+                  (sir.record_type = '7' AND sir.record_id = pl.id)
+                  OR (sir.record_type = '10' AND qi.purchase_ledger_id = pl.id)
+              )
+              AND slp.id IS NOT NULL
+              AND GREATEST(sir.stock_in_num - COALESCE(rs.total_return_num, 0), 0) > 0
+        )
+        ORDER BY pl.entry_date DESC
+    </select>
+
     <select id="selectTotalPurchaseAmount" resultType="java.math.BigDecimal">
         SELECT IFNULL(SUM(contract_amount), 0)
         FROM purchase_ledger
diff --git a/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml b/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
index 2f782ff..a5314fd 100644
--- a/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -106,7 +106,10 @@
             LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
             LEFT JOIN purchase_ledger pl
             ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
-            LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
+            LEFT JOIN sales_ledger_product slp
+                ON pl.id = slp.sales_ledger_id
+               AND slp.product_model_id = sir.product_model_id
+               AND slp.type = 2
             LEFT JOIN (
                 SELECT
                     stock_in_record_id,
@@ -116,7 +119,7 @@
                 WHERE 1=1
                 GROUP BY stock_in_record_id
             ) rs ON rs.stock_in_record_id = sir.id
-        WHERE sir.approval_status = 1 AND slp.type = 2
+        WHERE sir.approval_status = 1
         AND sir.record_type IN ('7','10')
          and pl.id = #{purchaseLedgerId}
     </select>
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 8787706..2d3be6a 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -35,6 +35,7 @@
         END as has_sufficient_stock,
         (IFNULL(T1.quantity, 0) - IFNULL(t3.shipped_quantity, 0) - IFNULL(t5.pending_approval_quantity, 0)) as no_quantity,
         IFNULL(t6.return_quantity, 0) as return_quantity,
+        IFNULL(t4.approved_stock_in_num, 0) as approved_stock_in_num,
         IFNULL(t5.pending_approval_quantity, 0) as pending_approval_quantity,
         CASE
          WHEN IFNULL(t3.shipped_quantity, 0) = 0 AND IFNULL(t5.pending_approval_quantity, 0) = 0 THEN '寰呭彂璐�'

--
Gitblit v1.9.3