diff --git a/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/DictApi.java b/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/DictApi.java index 82089c9af..581fb4a2e 100644 --- a/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/DictApi.java +++ b/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/DictApi.java @@ -25,6 +25,7 @@ package cn.stylefeng.roses.kernel.dict.api; import cn.stylefeng.roses.kernel.dict.api.pojo.DictDetail; +import cn.stylefeng.roses.kernel.dict.api.pojo.DictTreeDto; import cn.stylefeng.roses.kernel.dict.api.pojo.SimpleDictUpdateParam; import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict; @@ -101,4 +102,14 @@ public interface DictApi { */ void simpleEditDict(SimpleDictUpdateParam simpleDictUpdateParam); + /** + * 构建一个完整的字典树 + *

+ * 包含字典的类型和字典底下的详情信息 + * + * @author fengshuonan + * @since 2023/11/15 18:55 + */ + List buildDictTreeStructure(); + } diff --git a/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/pojo/DictTreeDto.java b/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/pojo/DictTreeDto.java new file mode 100644 index 000000000..f36757d5f --- /dev/null +++ b/kernel-s-dict/dict-api/src/main/java/cn/stylefeng/roses/kernel/dict/api/pojo/DictTreeDto.java @@ -0,0 +1,31 @@ +package cn.stylefeng.roses.kernel.dict.api.pojo; + +import lombok.Data; + +import java.util.List; + +/** + * 字典值 + * + * @author fengshuonan + * @since 2023/11/15 18:44 + */ +@Data +public class DictTreeDto { + + /** + * 字典的名称 + */ + private String dictLabel; + + /** + * 字典的编码 + */ + private String dictValue; + + /** + * 字典的子集 + */ + private List children; + +} diff --git a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/controller/CommonDictController.java b/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/controller/CommonDictController.java index 5f5dee721..9bd922857 100644 --- a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/controller/CommonDictController.java +++ b/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/controller/CommonDictController.java @@ -24,6 +24,7 @@ */ package cn.stylefeng.roses.kernel.dict.modular.controller; +import cn.stylefeng.roses.kernel.dict.api.pojo.DictTreeDto; import cn.stylefeng.roses.kernel.dict.modular.service.DictService; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; @@ -32,6 +33,7 @@ import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.List; /** * 字典通用接口 @@ -57,4 +59,15 @@ public class CommonDictController { return new SuccessResponseData<>(this.dictService.getPinyin(name)); } + /** + * 获取所有的字典类型树 + * + * @author fengshuonan + * @since 2023/11/15 19:08 + */ + @GetResource(name = "获取所有的字典类型树", path = "/dictType/dictTreeBuild") + public ResponseData> dictTreeBuild() { + return new SuccessResponseData<>(dictService.buildDictTreeStructure()); + } + } diff --git a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/service/impl/DictServiceImpl.java b/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/service/impl/DictServiceImpl.java index 58e6529cf..339e2f949 100644 --- a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/service/impl/DictServiceImpl.java +++ b/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/service/impl/DictServiceImpl.java @@ -25,11 +25,13 @@ package cn.stylefeng.roses.kernel.dict.modular.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.dict.api.exception.DictException; import cn.stylefeng.roses.kernel.dict.api.exception.enums.DictExceptionEnum; import cn.stylefeng.roses.kernel.dict.api.pojo.DictDetail; +import cn.stylefeng.roses.kernel.dict.api.pojo.DictTreeDto; import cn.stylefeng.roses.kernel.dict.api.pojo.SimpleDictUpdateParam; import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict; import cn.stylefeng.roses.kernel.dict.modular.entity.SysDictType; @@ -54,7 +56,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** @@ -324,6 +328,58 @@ public class DictServiceImpl extends ServiceImpl implements this.edit(dictRequest); } + @Override + public List buildDictTreeStructure() { + + // 获取所有字典类型 + LambdaQueryWrapper dictTypeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dictTypeLambdaQueryWrapper.select(SysDictType::getDictTypeCode, SysDictType::getDictTypeName); + dictTypeLambdaQueryWrapper.orderByAsc(SysDictType::getDictTypeSort); + List dictTypeList = this.dictTypeService.list(dictTypeLambdaQueryWrapper); + + // 获取所有字典信息 + LambdaQueryWrapper sysDictLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysDictLambdaQueryWrapper.select(SysDict::getDictCode, SysDict::getDictName, SysDict::getDictTypeId); + sysDictLambdaQueryWrapper.orderByAsc(SysDict::getDictSort); + List dictList = this.list(sysDictLambdaQueryWrapper); + + // 构建字典类型基本信息 + Map dictTypeMap = new HashMap<>(); + for (SysDictType sysDictType : dictTypeList) { + DictTreeDto dictTreeDto = new DictTreeDto(); + dictTreeDto.setDictLabel(sysDictType.getDictTypeName()); + dictTreeDto.setDictValue(sysDictType.getDictTypeCode()); + dictTypeMap.put(sysDictType.getDictTypeId(), dictTreeDto); + } + + // 遍历所有字典,把字典信息装配到字典类型信息里 + for (SysDict sysDict : dictList) { + Long dictTypeId = sysDict.getDictTypeId(); + if (ObjectUtil.isNotEmpty(dictTypeId)) { + continue; + } + DictTreeDto dictTreeDto = dictTypeMap.get(dictTypeId); + if (dictTreeDto == null) { + continue; + } + + List children = dictTreeDto.getChildren(); + if (ObjectUtil.isEmpty(children)) { + children = new ArrayList<>(); + } + + DictTreeDto dictValue = new DictTreeDto(); + dictValue.setDictLabel(sysDict.getDictName()); + dictValue.setDictValue(sysDict.getDictCode()); + + children.add(dictValue); + dictTreeDto.setChildren(children); + } + + // map转化为树形结构 + return ListUtil.list(true, dictTypeMap.values()); + } + @Override public String getPinyin(String name) { if (ObjectUtil.isNotEmpty(name)) {