buhuazhen
3 天以前 87519f0df32a22a68df0941fb06dd2c34861fbe4
feat(product): 新增根据产品ID批量查询产品规格功能

- 在ProductModelService接口中添加selectModelListByProductIds方法
- 在ProductModelMapper接口及其XML中增加对应SQL查询实现,支持递归查找旗下所有子产品的规格
- 在ProductModelServiceImpl中实现selectModelListByProductIds方法调用Mapper接口
- 修改ProductController删除产品方法,改为先查询相关产品规格ID,再判断是否有关联销售/采购记录,避免误删
- 优化代码逻辑,使用stream流简化集合转换,提高代码可读性和健壮性
已修改5个文件
36 ■■■■■ 文件已修改
src/main/java/com/ruoyi/basic/controller/ProductController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/IProductModelService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/basic/ProductModelMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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("请传入要删除的ID");
        }
        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));
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);
}
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
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查询产品规格分页查询
     *
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>