From 87519f0df32a22a68df0941fb06dd2c34861fbe4 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期二, 07 四月 2026 14:32:17 +0800
Subject: [PATCH] feat(product): 新增根据产品ID批量查询产品规格功能

---
 src/main/resources/mapper/basic/ProductModelMapper.xml                  |   18 ++++++++++++++++++
 src/main/java/com/ruoyi/basic/controller/ProductController.java         |    7 +++++--
 src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java            |    3 +++
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java |    6 ++++++
 src/main/java/com/ruoyi/basic/service/IProductModelService.java         |    2 ++
 5 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/controller/ProductController.java b/src/main/java/com/ruoyi/basic/controller/ProductController.java
index 252ab4d..5a08b10 100644
--- a/src/main/java/com/ruoyi/basic/controller/ProductController.java
+++ b/src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
 import com.ruoyi.basic.dto.ProductDto;
 import com.ruoyi.basic.dto.ProductModelDto;
 import com.ruoyi.basic.dto.ProductModelExportDto;
@@ -27,6 +28,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -81,11 +83,12 @@
         if (ids == null || ids.length == 0) {
             return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
         }
+        List<ProductModel> productModels = productModelService.selectModelListByProductIds(Lists.newArrayList(ids));
         // 妫�鏌ユ槸鍚︽湁閿�鍞晢鍝佽褰曞叧鑱旇浜у搧
         LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(SalesLedgerProduct::getProductId, ids);
+        queryWrapper.in(SalesLedgerProduct::getProductModelId, productModels.stream().map(ProductModel::getId).collect(Collectors.toList()));
         List<SalesLedgerProduct> salesLedgerProductList = salesLedgerProductService.list(queryWrapper);
-        if (salesLedgerProductList.size() > 0) {
+        if (!salesLedgerProductList.isEmpty()) {
             return AjaxResult.error("璇ヤ骇鍝佸瓨鍦ㄩ攢鍞�/閲囪喘璁板綍锛屼笉鑳藉垹闄�");
         }
         return toAjax(productService.delProductByIds(ids));
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
index bddcca4..9e34897 100644
--- a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -7,6 +7,7 @@
 import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
 import org.apache.ibatis.annotations.Param;
 
+import javax.validation.constraints.NotNull;
 import java.util.List;
 import java.util.Map;
 
@@ -26,4 +27,6 @@
     ProductModel selectLatestRecord();
 
     List<Map<String, Object>> getProductAndModelList();
+
+    List<ProductModel> selectModelListByProductIds(@NotNull @Param("ids") List<Long> ids);
 }
diff --git a/src/main/java/com/ruoyi/basic/service/IProductModelService.java b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
index dd268d6..149c091 100644
--- a/src/main/java/com/ruoyi/basic/service/IProductModelService.java
+++ b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
@@ -26,6 +26,8 @@
 
     List<ProductModel> selectModelList(ProductDto productDto);
 
+    List<ProductModel> selectModelListByProductIds(List<Long> ids);
+
     /**
      * 鏍规嵁id鏌ヨ浜у搧瑙勬牸鍒嗛〉鏌ヨ
      * @param page
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index 9382134..75bd333 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -25,6 +25,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.validation.constraints.NotNull;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -73,6 +74,11 @@
         return productModelMapper.selectList(queryWrapper);
     }
 
+    @Override
+    public List<ProductModel> selectModelListByProductIds(@NotNull List<Long> ids) {
+        return productModelMapper.selectModelListByProductIds(ids);
+    }
+
     /**
      * 鏍规嵁id鏌ヨ浜у搧瑙勬牸鍒嗛〉鏌ヨ
      *
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
index 317f5d9..2f84ce8 100644
--- a/src/main/resources/mapper/basic/ProductModelMapper.xml
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -106,5 +106,23 @@
         left join product p on p.id = pm.product_id
         order by p.id,pm.id desc
     </select>
+    <select id="selectModelListByProductIds" resultType="com.ruoyi.basic.pojo.ProductModel">
+        WITH RECURSIVE tree AS (
+        SELECT id
+        FROM product
+        WHERE id in <foreach item="id" collection="ids" open="(" separator="," close=")">
+            #{id}
+        </foreach>
 
+        UNION ALL
+
+        SELECT p.id
+        FROM product p
+        INNER JOIN tree t ON p.parent_id = t.id
+        )
+        SELECT t1.*
+        FROM product_model t1
+        INNER JOIN product t2 ON t1.product_id = t2.id
+        INNER JOIN tree t ON t2.id = t.id;
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3