From ce3b0a6cf31d2accfb657748b97585e64994724b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 24 六月 2026 13:41:52 +0800
Subject: [PATCH] 销售台账详细信息中加上退货数量字段

---
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml               |    9 ++++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                 |   10 ++--
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java     |   19 ++-------
 src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java |   47 +++++++++--------------
 4 files changed, 36 insertions(+), 49 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 6d45432..9efcc89 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -7,20 +7,13 @@
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.procurementrecord.service.ProcurementRecordService;
-import com.ruoyi.procurementrecord.utils.StockUtils;
-import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto;
-import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
-import java.math.BigDecimal;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * 浜у搧淇℃伅Controller
@@ -34,9 +27,6 @@
 public class SalesLedgerProductController extends BaseController
 {
     private final ISalesLedgerProductService salesLedgerProductService;
-    private final ProcurementRecordService procurementRecordService;
-    private final StockUtils stockUtils;
-    private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
 
 
     /**
@@ -45,26 +35,25 @@
     @GetMapping("/list")
     public AjaxResult list(SalesLedgerProduct salesLedgerProduct) {
         List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
-        if (CollUtil.isEmpty(list)) {
-            return AjaxResult.success(list);
-        }
-        List<Long> productIds = list.stream().map(SalesLedgerProduct::getProductModelId).collect(Collectors.toList());
-        List<SimpleReturnOrderGroupDto> groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds);
-        Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getProductModelId, item -> item.getSumReturnQuantity()));
-
-        list.forEach(item -> {
-            if (item.getApproveStatus() != 2) {
-                if (item.getHasSufficientStock() == 0) {
-                    item.setApproveStatus(0);
-                } else {
-                    item.setApproveStatus(1);
+        if (CollUtil.isNotEmpty(list)) {
+            list.forEach(item -> {
+                if (item.getApproveStatus() != 2) {
+                    if (item.getHasSufficientStock() == 0) {
+                        item.setApproveStatus(0);
+                    } else {
+                        item.setApproveStatus(1);
+                    }
                 }
-            }
-            // 缁熻閫�璐ф暟閲�
-            BigDecimal returnQuality = returnOrderGroupDtoMap.getOrDefault(item.getProductModelId(), BigDecimal.ZERO);
-            item.setReturnQuality(returnQuality);
-            item.setAvailableQuality(item.getQuantity().subtract(returnQuality));
-        });
+                java.math.BigDecimal returnQuantity = item.getReturnQuantity() == null
+                        ? java.math.BigDecimal.ZERO
+                        : item.getReturnQuantity();
+                java.math.BigDecimal quantity = item.getQuantity() == null
+                        ? java.math.BigDecimal.ZERO
+                        : item.getQuantity();
+                item.setReturnQuantity(returnQuantity);
+                item.setAvailableQuality(quantity.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 d9f8eff..4aa9ff5 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -164,11 +164,7 @@
     @TableField(exist = false)
     private Integer hasSufficientStock;
 
-    // 閫�璐ф暟閲�
-    @TableField(exist = false)
-    private BigDecimal returnQuality;
-
-    // 鍙敤鏁伴噺  quantity - returnQuality
+    // 鍙敤鏁伴噺  quantity - returnQuantity
     @TableField(exist = false)
     private BigDecimal availableQuality;
     @Schema(description = "鍒涘缓鐢ㄦ埛")
@@ -187,6 +183,10 @@
     private BigDecimal noQuantity;
 
     @TableField(exist = false)
+    @Schema(description = "閫�璐ф暟閲�")
+    private BigDecimal returnQuantity;
+
+    @TableField(exist = false)
     @Schema(description = "瀹℃壒涓暟閲�")
     private BigDecimal pendingApprovalQuantity;
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index b3a7727..751739c 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -38,8 +38,6 @@
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto;
-import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.sales.dto.*;
 import com.ruoyi.sales.mapper.CommonFileMapper;
@@ -121,9 +119,6 @@
     @Autowired
     private ProductionProductMainService productionProductMainService;
     @Autowired
-    private PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
-    ;
-    @Autowired
     private SysUserMapper sysUserMapper;
 
     @Override
@@ -148,17 +143,11 @@
         productWrapper.eq(SalesLedgerProduct::getType, type.getCode());
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(productWrapper);
         if (type.equals(SaleEnum.PURCHASE)) {
-            // 鏌ヨ閫�璐т俊鎭�
-            List<Long> productIds = salesLedgerProducts.stream().map(SalesLedgerProduct::getProductModelId).collect(Collectors.toList());
-            List<SimpleReturnOrderGroupDto> groupListByProductIds = new ArrayList<>();
-            if(CollectionUtils.isNotEmpty(productIds)){
-                groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds);
-            }
-            Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getProductModelId, SimpleReturnOrderGroupDto::getSumReturnQuantity));
             salesLedgerProducts.forEach(item -> {
-                BigDecimal returnQuality = returnOrderGroupDtoMap.getOrDefault(item.getProductModelId(), BigDecimal.ZERO);
-                item.setReturnQuality(returnQuality);
-                item.setAvailableQuality(item.getQuantity().subtract(returnQuality));
+                BigDecimal returnQuantity = item.getReturnQuantity() == null ? BigDecimal.ZERO : item.getReturnQuantity();
+                item.setReturnQuantity(returnQuantity);
+                BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : item.getQuantity();
+                item.setAvailableQuality(quantity.subtract(returnQuantity));
             });
         }
         return salesLedgerProducts;
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index ec5cca2..b39b720 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -34,6 +34,7 @@
         ELSE 0
         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(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 '寰呭彂璐�'
@@ -113,6 +114,14 @@
            ))
         GROUP BY si.sales_ledger_product_id
         ) t5 ON t5.sales_ledger_product_id = T1.id
+        LEFT JOIN (
+        SELECT si.sales_ledger_product_id, IFNULL(SUM(rsp.num), 0) AS return_quantity
+        FROM return_management rm
+        INNER JOIN return_sale_product rsp ON rm.id = rsp.return_management_id
+        INNER JOIN shipping_info si ON rm.shipping_id = si.id
+        WHERE rm.status = 1
+        GROUP BY si.sales_ledger_product_id
+        ) t6 ON t6.sales_ledger_product_id = T1.id
         left join product_model pm ON T1.product_model_id = pm.id
         left join product p ON pm.product_id = p.id
         <where>

--
Gitblit v1.9.3