diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 897ba00f..389d29cc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -41,7 +41,7 @@ public interface SaasBasicDictApi { * @return */ @PostMapping("api/dict/node-tree") - ApiResult getBasicDictNodeTree(@RequestBody + ApiResult> getBasicDictNodeTree( @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") DictTypeFiledEnum type); diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java index 17aaa9fc..dc255fb6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java @@ -4,6 +4,8 @@ import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import lombok.Data; +import javax.validation.constraints.NotNull; + /** * @author: chenwenjian * @date: 2023/9/6 15:46 @@ -17,9 +19,11 @@ public class BasicDictNodeReq { /** * 类型 */ + @NotNull(message = "type不能为空") @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") private DictTypeFiledEnum type; + @NotNull(message = "code不能为空") private String code; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 5d559efd..7ee0fe68 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -3,7 +3,10 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * @author: chenwenjian @@ -13,6 +16,9 @@ import lombok.Data; * @version: 1.0 */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class BasicDictQueryReq { private Long parentId; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java index a5a6f1a5..9197b020 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java @@ -16,6 +16,8 @@ public class BasicDictTreeResp { private Long id; + private Long parentId; + /** * 字典名称 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index e766f315..977009ab 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -33,7 +33,7 @@ public class SaasBasicDictController implements SaasBasicDictApi { } @Override - public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { return saasBasicDictService.getBasicDictNodeTree(type); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index c20343b8..4ce7e168 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.repository; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; @@ -35,4 +36,11 @@ public class SaasBasicDictDao extends ServiceImpl basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); } + + public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) { + SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue()) + .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .one(); + return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 6c9aeeeb..5b481ec3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -7,7 +7,6 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import java.util.List; -import cn.axzo.tyr.client.model.dict.request.*; /** * @author: chenwenjian @@ -19,7 +18,7 @@ import cn.axzo.tyr.client.model.dict.request.*; public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); - ApiResult getBasicDictNodeTree(DictTypeFiledEnum type); + ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type); ApiResult getById(Long id); ApiResult getBasicDictNode(BasicDictNodeReq req); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index e47e1551..3479a01e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -8,11 +8,16 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.service.SaasBasicDictService; +import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * @author: chenwenjian @@ -33,29 +38,67 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return ApiResult.ok(saasBasicDictDao.getBasicDictNodeList(req)); } + /** + * 获取节点树 + * @param type + * @return + */ @Override - public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { -// // 获取所有节点 -// List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); -// // 单侧树 -// if (Objects.nonNull(type)){ -// basicDictNodeList.stream().filter(new Predicate() { -// @Override -// public boolean test(BasicDictNodeResp b) { -// return b.getType().equals(type.getValue()); -// } -// }); -// } - return null; + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { + // 获取所有节点 + List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); + // 单侧树 + if (Objects.nonNull(type)){ + List unilateralTreeNodeList = basicDictNodeList.stream() + .filter(b -> b.getType().equals(type.getValue()) || b.getType().equals(DictTypeFiledEnum.WORKSPACE.getValue())) + .collect(Collectors.toList()); + return ApiResult.ok(constructDictTree(unilateralTreeNodeList)); + } + return ApiResult.ok(constructDictTree(basicDictNodeList)); } - public BasicDictTreeResp constructDictTree(List nodeList){ - return null; + /** + * 根据节点列表构建节点树 + * @param nodeList 节点列表 + * @return 节点树 + */ + public List constructDictTree(List nodeList) { + if (CollectionUtil.isEmpty(nodeList)) { + return null; + } + + ArrayList root = new ArrayList<>(); + LinkedHashMap map = new LinkedHashMap<>(); + + nodeList.forEach(node -> { + BasicDictTreeResp treeNode = BeanMapper.copyBean(node, BasicDictTreeResp.class); + map.put(node.getId(), treeNode); + if (node.getParentId() == 0){ + root.add(treeNode); + } + }); + map.values().forEach(treeNode -> { + BasicDictTreeResp parent = map.get(treeNode.getParentId()); + if (Objects.nonNull(parent)){ + if (Objects.isNull(parent.getChildren())){ + parent.setChildren(new ArrayList<>()); + } + parent.getChildren().add(treeNode); + } + }); + + return root; } + /** + * 获取节点详情 + * + * @param req type和code + * @return 一个字典节点 + */ @Override public ApiResult getBasicDictNode(BasicDictNodeReq req) { - return null; + return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req)); } @Override @@ -72,6 +115,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { public ApiResult updateStauts(BasicDictUpdateStatusReq req) { return null; } + @Override public ApiResult getById(Long id) { return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class));