diff --git a/flyfish-user/src/main/java/com/flyfish/framework/controller/DepartmentController.java b/flyfish-user/src/main/java/com/flyfish/framework/controller/DepartmentController.java index 5d61adb..643102a 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/controller/DepartmentController.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/controller/DepartmentController.java @@ -10,6 +10,6 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/departments") -public class DepartmentController extends TreeController { +public class DepartmentController extends ReactiveTreeController { } diff --git a/flyfish-user/src/main/java/com/flyfish/framework/controller/PermissionController.java b/flyfish-user/src/main/java/com/flyfish/framework/controller/PermissionController.java index 40cc649..b70a957 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/controller/PermissionController.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/controller/PermissionController.java @@ -12,5 +12,5 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/permissions") -public class PermissionController extends TreeController { +public class PermissionController extends ReactiveTreeController { } diff --git a/flyfish-user/src/main/java/com/flyfish/framework/controller/UserController.java b/flyfish-user/src/main/java/com/flyfish/framework/controller/UserController.java index 62a304f..e19cf0d 100644 --- a/flyfish-user/src/main/java/com/flyfish/framework/controller/UserController.java +++ b/flyfish-user/src/main/java/com/flyfish/framework/controller/UserController.java @@ -63,7 +63,6 @@ public class UserController extends ReactiveBaseController { // 检查原密码 Assert.isTrue(passwordEncoder.matches(passwordDto.getOldPassword(), user.getPassword()), "原密码不正确!"); Assert.isTrue(!passwordEncoder.matches(passwordDto.getPassword(), user.getPassword()), "新密码和旧密码一致,输入个新的吧!"); - userContext.setUser(user); // 更新密码 User updating = new User(); updating.setId(user.getId()); diff --git a/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveBaseController.java b/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveBaseController.java index 35088ec..8a2b188 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveBaseController.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveBaseController.java @@ -5,7 +5,6 @@ import com.flyfish.framework.bean.Result; import com.flyfish.framework.bean.SyncVo; import com.flyfish.framework.configuration.annotations.PagedQuery; import com.flyfish.framework.configuration.annotations.ValidRequestBody; -import com.flyfish.framework.context.UserContext; import com.flyfish.framework.domain.base.Domain; import com.flyfish.framework.domain.base.Qo; import com.flyfish.framework.service.BaseReactiveService; @@ -27,8 +26,6 @@ public abstract class ReactiveBaseController> @Autowired protected BaseReactiveService reactiveService; - @Autowired - protected UserContext userContext; public > S getService() { return CastUtils.cast(reactiveService); diff --git a/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveTreeController.java b/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveTreeController.java new file mode 100644 index 0000000..15b8c29 --- /dev/null +++ b/flyfish-web/src/main/java/com/flyfish/framework/controller/ReactiveTreeController.java @@ -0,0 +1,66 @@ +package com.flyfish.framework.controller; + +import com.flyfish.framework.bean.Result; +import com.flyfish.framework.domain.base.Qo; +import com.flyfish.framework.domain.base.TreeDomain; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 支持树形解析的controller + * + * @param + * @param + */ +public abstract class ReactiveTreeController, Q extends Qo> extends ReactiveBaseController { + + /** + * 获取权限树 + * + * @return 结果 + */ + @GetMapping("tree") + public Mono>> getTree(Q qo) { + // 第一步,查询全部,并根据条件筛选 + return reactiveService.getList(qo) + .collectList() + .flatMap(filtered -> { + // 第二步,根据父id组成map + Map> group = filtered.stream() + .collect(Collectors.groupingBy(p -> StringUtils.defaultIfBlank(p.getParentId(), ""))); + // 第三步,筛选一级树深度 + return Flux.fromIterable(filtered) + .filter(item -> null != item && TreeDomain.ROOT.equals(item.getParentId())) + .collectList() + // 第四步,根据父id的map填充根tree + .map(topList -> applyChildren(topList, group)); + }) + .map(Result::accept); + } + + /** + * 递归赋值儿子们 + * + * @param children 儿子们 + * @param group 分组 + */ + @SuppressWarnings("all") + private List applyChildren(List children, Map> group) { + if (CollectionUtils.isNotEmpty(children)) { + children.forEach(child -> { + List treeNodes = group.getOrDefault(child.getId(), Collections.emptyList()); + child.setChildren(treeNodes); + applyChildren(treeNodes, group); + }); + } + return children; + } +}