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