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