From 53bdb26a0ae994418e92d93aab23d6f5e7225f37 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 19 五月 2025 16:20:56 +0800
Subject: [PATCH] 产品

---
 src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 118 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
new file mode 100644
index 0000000..9825b39
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -0,0 +1,118 @@
+package com.ruoyi.basic.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.basic.mapper.ProductMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.service.IProductService;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {
+
+    private ProductMapper productMapper;
+
+    private ProductModelMapper productModelMapper;
+
+    @Override
+    public List<ProductTreeDto> selectProductList(ProductDto productDto) {
+        // 鏌ヨ鏍硅妭鐐癸紙parentId 涓� null锛�
+        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.isNull(Product::getParentId);
+
+        // 濡傛灉鏈変骇鍝佸悕绉版潯浠讹紝娣诲姞鍒版煡璇腑
+        if (productDto.getProductName() != null && !productDto.getProductName().isEmpty()) {
+            queryWrapper.like(Product::getProductName, productDto.getProductName());
+        }
+
+        // 鏌ヨ鏍硅妭鐐瑰垪琛�
+        List<Product> rootProducts = productMapper.selectList(queryWrapper);
+
+        // 杞崲涓烘爲鑺傜偣骞堕�掑綊鏋勫缓瀛愭爲
+        List<ProductTreeDto> tree = new ArrayList<>();
+        for (Product product : rootProducts) {
+            ProductTreeDto node = convertToTreeDto(product);
+            node.setChildren(buildChildrenNodes(product.getId()));
+            tree.add(node);
+        }
+        return tree;
+    }
+
+    // 閫掑綊鏋勫缓瀛愯妭鐐�
+    private List<ProductTreeDto> buildChildrenNodes(Long parentId) {
+        // 鏌ヨ褰撳墠鐖惰妭鐐圭殑瀛愯妭鐐�
+        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Product::getParentId, parentId);
+        List<Product> childProducts = productMapper.selectList(queryWrapper);
+
+        // 杞崲瀛愯妭鐐瑰苟閫掑綊鏋勫缓瀹冧滑鐨勫瓙鏍�
+        List<ProductTreeDto> children = new ArrayList<>();
+        for (Product child : childProducts) {
+            ProductTreeDto childNode = convertToTreeDto(child);
+            childNode.setChildren(buildChildrenNodes(child.getId()));
+            children.add(childNode);
+        }
+
+        return children;
+    }
+
+    // 灏� Product 杞崲涓� ProductTreeDto
+    private ProductTreeDto convertToTreeDto(Product product) {
+        ProductTreeDto dto = new ProductTreeDto();
+        BeanUtils.copyProperties(product, dto);
+        dto.setLabel(product.getProductName()); // 璁剧疆 label 涓轰骇鍝佸悕绉�
+        dto.setChildren(new ArrayList<>());
+        return dto;
+    }
+
+    @Override
+    public int addOrEditProduct(ProductDto productDto) {
+        if (productDto.getId() == null) {
+            // 鏂板浜у搧閫昏緫
+            if (productDto.getParentId() == null) {
+                // 鑻ユ湭鎸囧畾鐖惰妭鐐癸紝榛樿涓烘牴鑺傜偣锛坧arentId 璁句负 null锛�
+                productDto.setParentId(null);
+            } else {
+                // 妫�鏌ョ埗鑺傜偣鏄惁瀛樺湪锛堝彲閫夛紝鏍规嵁涓氬姟闇�姹傦級
+                Product parent = productMapper.selectById(productDto.getParentId());
+                if (parent == null) {
+                    throw new IllegalArgumentException("鐖惰妭鐐逛笉瀛樺湪锛屾棤娉曟坊鍔犲瓙浜у搧");
+                }
+            }
+            return productMapper.insert(productDto);
+        } else {
+            // 缂栬緫浜у搧閫昏緫
+            // 妫�鏌ヤ骇鍝佹槸鍚﹀瓨鍦紙鍙�夛紝鏍规嵁涓氬姟闇�姹傦級
+            Product existingProduct = productMapper.selectById(productDto.getId());
+            if (existingProduct == null) {
+                throw new IllegalArgumentException("瑕佺紪杈戠殑浜у搧涓嶅瓨鍦�");
+            }
+            return productMapper.updateById(productDto);
+        }
+    }
+
+    @Override
+    public int delProductByIds(Long[] ids) {
+        // 1. 鍒犻櫎瀛愯〃 product_model 涓叧鑱旂殑鏁版嵁
+        LambdaQueryWrapper<ProductModel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ProductModel::getProductId, ids);
+        productModelMapper.delete(queryWrapper);
+
+        // 2. 鍒犻櫎涓昏〃 product 鏁版嵁
+        int deleteCount = productMapper.deleteBatchIds(Arrays.asList(ids));
+
+        return deleteCount;
+    }
+
+}

--
Gitblit v1.9.3