package com.ruoyi.warehouse.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.ProductTreeDto; import com.ruoyi.basic.pojo.Product; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.warehouse.dto.DocumentClassificationDto; import com.ruoyi.warehouse.dto.DocumentClassificationTreeDto; import com.ruoyi.warehouse.dto.DocumentationDto; import com.ruoyi.warehouse.mapper.DocumentationMapper; import com.ruoyi.warehouse.pojo.DocumentClassification; import com.ruoyi.warehouse.pojo.Documentation; import com.ruoyi.warehouse.service.DocumentClassificationService; import com.ruoyi.warehouse.mapper.DocumentClassificationMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * @author 86151 * @description 针对表【document_classification(文档分类表)】的数据库操作Service实现 * @createDate 2025-08-15 10:44:23 */ @Service public class DocumentClassificationServiceImpl extends ServiceImpl implements DocumentClassificationService{ @Autowired private DocumentationMapper documentationMapper; @Autowired private DocumentClassificationMapper documentClassificationMapper; @Override public boolean deleteByIds(List ids) { List list = documentClassificationMapper.selectList(new LambdaQueryWrapper().in(DocumentClassification::getId, ids)); for (DocumentClassification documentClassification : list) { //如果每项的父id为空,说明是根节点,需要删除文档信息表中的数据 List documentationDtos = documentationMapper.listByDocumentClassificationId(documentClassification.getId()); if (CollectionUtils.isNotEmpty(documentationDtos)){ throw new RuntimeException("存在文档信息,不能删除"); } documentClassificationMapper.deleteById(documentClassification.getId()); } return true; } @Override public List selectDocumentClassificationList(DocumentClassificationDto documentClassificationDto) { // 查询根节点(parentId 为 null) LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.isNull(DocumentClassification::getParentId); if (documentClassificationDto.getCategory() != null && !documentClassificationDto.getCategory().isEmpty()) { queryWrapper.like(DocumentClassification::getCategory, documentClassificationDto.getCategory()); } // 查询根节点列表 List rootList = baseMapper.selectList(queryWrapper); // 转换为树节点并递归构建子树 List tree = new ArrayList<>(); for (DocumentClassification documentClassification : rootList) { DocumentClassificationTreeDto node = convertToTreeDto(documentClassification); node.setChildren(buildDocumentChildrenNodes(documentClassification.getId())); tree.add(node); } return tree; } // 递归构建子节点 private List buildDocumentChildrenNodes(Long parentId) { // 查询当前父节点的子节点 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DocumentClassification::getParentId, parentId); List childList = baseMapper.selectList(queryWrapper); // 转换子节点并递归构建它们的子树 List children = new ArrayList<>(); for (DocumentClassification child : childList) { DocumentClassificationTreeDto childNode = convertToTreeDto(child); childNode.setChildren(buildDocumentChildrenNodes(child.getId())); children.add(childNode); } return children; } // 将 DocumentClassification 转换为 DocumentClassificationTreeDto private DocumentClassificationTreeDto convertToTreeDto(DocumentClassification documentClassification) { DocumentClassificationTreeDto dto = new DocumentClassificationTreeDto(); BeanUtils.copyProperties(documentClassification, dto); dto.setCategory(documentClassification.getCategory()); // 设置 label 为产品名称 dto.setChildren(new ArrayList<>()); return dto; } }