diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeDomain.java b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeDomain.java index 5dd1748..d9ed037 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeDomain.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeDomain.java @@ -15,6 +15,9 @@ public abstract class TreeDomain> extends AuditDomain { // 父id,顶级是0 private String parentId; + // 冗余的父ids,方便查询 + private List parentIds; + // 深度,遍历标识 private Integer depth; diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeQo.java b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeQo.java index 585a097..cfae550 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeQo.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/TreeQo.java @@ -3,6 +3,8 @@ package com.flyfish.framework.domain.base; import com.flyfish.framework.builder.CriteriaBuilder; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.data.mongodb.core.query.Criteria; import java.util.List; @@ -19,9 +21,17 @@ public class TreeQo extends NameLikeQo { private List parentIds; + private Boolean recursive; + @Override public CriteriaBuilder criteriaBuilder() { - return super.criteriaBuilder() - .with("depth", "parentId").with("parentIds", "parentId", CriteriaBuilder.Builders.IN); + CriteriaBuilder builder = super.criteriaBuilder().with("depth"); + if (BooleanUtils.isTrue(recursive)) { + builder.with("parentId", "parentIds", Criteria::is) + .with("parentIds", "parentIds", Criteria::is); + } else { + builder.with("parentId").with("parentIds", "parentId", CriteriaBuilder.Builders.IN); + } + return builder; } } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/controller/reactive/ReactiveTreeController.java b/flyfish-web/src/main/java/com/flyfish/framework/controller/reactive/ReactiveTreeController.java index cbb319c..8ea28dc 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/controller/reactive/ReactiveTreeController.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/controller/reactive/ReactiveTreeController.java @@ -1,8 +1,8 @@ package com.flyfish.framework.controller.reactive; import com.flyfish.framework.bean.Result; -import com.flyfish.framework.domain.base.Qo; import com.flyfish.framework.domain.base.TreeDomain; +import com.flyfish.framework.domain.base.TreeQo; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.GetMapping; @@ -20,7 +20,7 @@ import java.util.stream.Collectors; * @param * @param */ -public abstract class ReactiveTreeController, Q extends Qo> extends ReactiveBaseController { +public abstract class ReactiveTreeController, Q extends TreeQo> extends ReactiveBaseController { /** * 获取权限树 @@ -29,6 +29,7 @@ public abstract class ReactiveTreeController, Q extends */ @GetMapping("tree") public Mono>> getTree(Q qo) { + qo.setRecursive(true); // 第一步,查询全部,并根据条件筛选 return reactiveService.getList(qo) .collectList()