Skip to content

v1.2.5-beta(20250716) ​

  • 重构:字典加载器相关类的包结构和接口定义,优化动态字典加载逻辑

    1. 新增 DynamicDictLoader 接口,专用于动态字典处理,规范动态字典加载流程。

    2. 以UserOptionDictLoader.java为例,其他相关类依照新接口实现同步调整,具体变动包括:

      • 类继承自 DynamicDictLoader,替换原有 DictLoader 接口;

      • 实现 getTypeCode() 与 getTypeName() 等新接口方法,统一字典类型标识与名称的获取方式;

      • 优化 loadDict() 方法,简化动态字典的缓存与回源逻辑,提升性能和易读性;

      • 代码层面将部分依赖 DynamicDictEnum 的调用方式进行标准化。

    3. 更新 DynamicDictEnum 枚举类,移除 typeCode 的 dynamic_ 前缀,由 DynamicDictLoader 接口自动拼接。

java
@Component
@RequiredArgsConstructor
public class UserOptionDictLoader implements DictLoader {
public class UserOptionDictLoader implements DynamicDictLoader {

    private final RedisCache redisCache;

    private final SysUserService sysUserService;

    @Override
    public DynamicDictEnum getDynamicTypeCode() {
        return DynamicDictEnum.DYNAMIC_USER_OPTIONS;
    }

    @Override
    public String getTypeCode() {
        return DynamicDictEnum.DYNAMIC_USER_OPTIONS.getTypeCode();
    }

    @Override
    public String getTypeName() {
        return DynamicDictEnum.DYNAMIC_USER_OPTIONS.getName();
    }

    @Override
    public Map<String, List<DictVO>> loadDict() {
        String key = getDynamicTypeCode().getTypeCode();
        String name = getDynamicTypeCode().getName();
        String key = getDynamicTypeCode();
        String name = getTypeName();
        if (redisCache.hasHashKey(key)) {
            return Map.of(key, redisCache.getDictByType(key));
        }

        DictVO dictVO;
        List<DictVO> list = new ArrayList<>();
        List<UserOptionVO> userOptions = sysUserService.getUserOptions();
        for (int i = 0; i < userOptions.size(); i++) {
            UserOptionVO option = userOptions.get(i);
            dictVO = DictVO.builder().id(option.getId().toString()).codeName(option.getNickname()).alias(option.getUsername()).sort(i + 1).sysDictTypeCode(key)
                    .sysDictTypeName(name).callbackShowStyle("primary").isDynamic(true).isLock("F").isShow("T").build();
            list.add(dictVO);
        }
        redisCache.setDict(key, list);
        return Map.of(key, list);
    }

    @Override
    public List<DictVO> getDict(String typeCode) {
        return loadDict().get(typeCode);
    }

}
java
@Getter
@RequiredArgsConstructor
public enum DynamicDictEnum {

    // @formatter:off
    DYNAMIC_USER_OPTIONS("dynamic_user_options", "用户信息");
    DYNAMIC_USER_OPTIONS("user_options", "用户信息");
    // @formatter:on
    private final String typeCode; // 类型代码

    private final String name; // 名称

}