6 天以前 1e123568c2f561013f5636e45dc0db30b17a3517
src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -13,14 +13,18 @@
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.service.IProductService;
import com.ruoyi.basic.vo.ProductModelVo;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInventory;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
@@ -29,6 +33,8 @@
    private ProductMapper productMapper;
    private ProductModelMapper productModelMapper;
    private StockInventoryMapper stockInventoryMapper;
    @Override
    public List<ProductTreeDto> selectProductList(ProductDto productDto) {
@@ -131,15 +137,31 @@
    @Override
    public int delProductByIds(Long[] ids) {
        // 1. 删除子表 product_model 中关联的数据
        List<Long> idList = Arrays.asList(ids);
        // 1. 存在子分类时不允许删除,避免树结构出现孤儿节点
        LambdaQueryWrapper<Product> childWrapper = new LambdaQueryWrapper<>();
        childWrapper.in(Product::getParentId, idList);
        if (productMapper.selectCount(childWrapper) > 0) {
            throw new ServiceException("该产品下存在子分类,请先删除子分类");
        }
        // 2. 规格已被库存记录引用时不允许删除,避免历史数据断链
        LambdaQueryWrapper<ProductModel> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(ProductModel::getProductId, ids);
        productModelMapper.delete(queryWrapper);
        queryWrapper.in(ProductModel::getProductId, idList);
        List<ProductModel> models = productModelMapper.selectList(queryWrapper);
        if (!models.isEmpty()) {
            List<Long> modelIds = models.stream().map(ProductModel::getId).collect(Collectors.toList());
            LambdaQueryWrapper<StockInventory> stockWrapper = new LambdaQueryWrapper<>();
            stockWrapper.in(StockInventory::getProductModelId, modelIds);
            if (stockInventoryMapper.selectCount(stockWrapper) > 0) {
                throw new ServiceException("该产品规格已存在库存记录,不能删除");
            }
            productModelMapper.delete(queryWrapper);
        }
        // 2. 删除主表 product 数据
        int deleteCount = productMapper.deleteBatchIds(Arrays.asList(ids));
        return deleteCount;
        // 3. 删除主表 product 数据
        return productMapper.deleteBatchIds(idList);
    }
}