123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package ${package}.${moduleName}.service.impl;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import ${package}.${moduleName}.entity.${ClassName}Entity;
- import ${package}.${moduleName}.mapper.${ClassName}Mapper;
- import ${package}.${moduleName}.service.${ClassName}Service;
- import lombok.RequiredArgsConstructor;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- /**
- * ${tableComment} Service实现类
- *
- * @author ${author}
- * @date ${datetime}
- */
- @Service
- @RequiredArgsConstructor
- public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}Entity> implements ${ClassName}Service {
- /**
- * 构建树形结构数据
- * @param wrapper 查询条件
- * @return 树形结构数据
- */
- @Override
- public List<${ClassName}Entity> buildTree(LambdaQueryWrapper<${ClassName}Entity> wrapper) {
- // 查询所有数据
- List<${ClassName}Entity> allList = list(wrapper);
-
- if (CollUtil.isEmpty(allList)) {
- return new ArrayList<>();
- }
- // 按父ID分组
- Map<${pk.attrType}, List<${ClassName}Entity>> groupByParent = allList.stream()
- .collect(Collectors.groupingBy(item -> {
- // 假设有parentId字段,如果没有请根据实际情况调整
- return item.getParentId() != null ? item.getParentId() : 0L;
- }));
- // 构建树形结构
- return buildTreeRecursive(groupByParent, 0L);
- }
- /**
- * 递归构建树形结构
- * @param groupByParent 按父ID分组的数据
- * @param parentId 父ID
- * @return 树形结构数据
- */
- private List<${ClassName}Entity> buildTreeRecursive(Map<${pk.attrType}, List<${ClassName}Entity>> groupByParent, ${pk.attrType} parentId) {
- List<${ClassName}Entity> children = groupByParent.get(parentId);
- if (CollUtil.isEmpty(children)) {
- return new ArrayList<>();
- }
- children.forEach(child -> {
- List<${ClassName}Entity> subChildren = buildTreeRecursive(groupByParent, child.get${str.capitalizeFirst($pk.attrName)}());
- child.setChildren(subChildren);
- child.setHasChildren(!CollUtil.isEmpty(subChildren));
- });
- return children;
- }
- /**
- * 获取所有父级节点
- * @return 父级节点列表
- */
- @Override
- public List<${ClassName}Entity> getParentNodes() {
- LambdaQueryWrapper<${ClassName}Entity> wrapper = Wrappers.lambdaQuery();
- // 查询所有父级节点(parentId为null或0的节点)
- wrapper.and(w -> w.isNull(${ClassName}Entity::getParentId).or().eq(${ClassName}Entity::getParentId, 0));
- wrapper.orderByAsc(${ClassName}Entity::getSort); // 假设有sort字段用于排序
- return list(wrapper);
- }
- /**
- * 根据父ID获取子节点
- * @param parentId 父级ID
- * @return 子节点列表
- */
- @Override
- public List<${ClassName}Entity> getChildrenByParentId(${pk.attrType} parentId) {
- LambdaQueryWrapper<${ClassName}Entity> wrapper = Wrappers.lambdaQuery();
- wrapper.eq(${ClassName}Entity::getParentId, parentId);
- wrapper.orderByAsc(${ClassName}Entity::getSort); // 假设有sort字段用于排序
- return list(wrapper);
- }
- /**
- * 递归删除节点及其子节点
- * @param ids 要删除的节点ID列表
- * @return 删除结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public boolean removeBatchByIds(List<${pk.attrType}> ids) {
- if (CollUtil.isEmpty(ids)) {
- return true;
- }
- // 获取所有要删除的ID(包括子节点)
- List<${pk.attrType}> allDeleteIds = new ArrayList<>(ids);
-
- for (${pk.attrType} id : ids) {
- List<${pk.attrType}> childIds = getChildIdsRecursive(id);
- allDeleteIds.addAll(childIds);
- }
- // 去重
- allDeleteIds = allDeleteIds.stream().distinct().collect(Collectors.toList());
- // 批量删除
- return super.removeBatchByIds(allDeleteIds);
- }
- /**
- * 递归获取所有子节点ID
- * @param parentId 父节点ID
- * @return 子节点ID列表
- */
- private List<${pk.attrType}> getChildIdsRecursive(${pk.attrType} parentId) {
- List<${pk.attrType}> childIds = new ArrayList<>();
-
- LambdaQueryWrapper<${ClassName}Entity> wrapper = Wrappers.lambdaQuery();
- wrapper.eq(${ClassName}Entity::getParentId, parentId);
- wrapper.select(${ClassName}Entity::get${str.capitalizeFirst($pk.attrName)});
-
- List<${ClassName}Entity> children = list(wrapper);
-
- for (${ClassName}Entity child : children) {
- ${pk.attrType} childId = child.get${str.capitalizeFirst($pk.attrName)}();
- childIds.add(childId);
- // 递归获取子节点的子节点
- childIds.addAll(getChildIdsRecursive(childId));
- }
-
- return childIds;
- }
- }
|