地区三级树Redis

1.用redis 缓存存取地区树

Redis部分
1)刷新缓存


封装返回实体
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class SysTree {
    private String value;
    private String label;
    private List<SysTree> children;
}

Service接口
/**
     * 刷新缓存
     */
    void refreshCache();

实现类
private String firstParentCode = "000000";
/**
     * 刷新缓存
     */
    @Override
    public void refreshCache() {
        //清空
        RedisUtils.clearAllDataCache(RedisUtils.getAreaCodeCacheKey(firstParentCode));
        RedisUtils.clearAllDataCache(RedisUtils.getAreaTreeCacheKey(firstParentCode));
        // 刷入
        RedisUtils.setDataCache(RedisUtils.getAreaTreeCacheKey(firstParentCode), getAreaCodeChildren(firstParentCode));
    }


/**
     * 获取子地区树
     *
     * @param parentCode
     * @return
     */
    private List<SysTree> getAreaCodeChildren(String parentCode) {
        List<DictAreaCode> dictAreaCodes = dictAreaCodeMapper.selectChildCodeListByParentCode(parentCode);
        List<SysTree> sysTreeList = new ArrayList<>();
        SysTree sysTree;
        if (!dictAreaCodes.isEmpty()) {
            for (DictAreaCode areaCode : dictAreaCodes) {
                sysTree = new SysTree();
                sysTree.setValue(areaCode.getAreaCode());
                sysTree.setLabel(areaCode.getAreaName());
                sysTree.setChildren(getAreaCodeChildren(areaCode.getAreaCode()));
                sysTreeList.add(sysTree);

                RedisUtils.clearAllDataCache(RedisUtils.getAreaCodeCacheKey(areaCode.getAreaCode()));
                RedisUtils.clearAllDataCache(RedisUtils.getAreaTreeCacheKey(areaCode.getAreaCode()));
                // 缓存树
                RedisUtils.setDataCache(RedisUtils.getAreaTreeCacheKey(areaCode.getAreaCode()), sysTree.getChildren());
                // 缓存当前地区数据
                RedisUtils.setDataCache(RedisUtils.getAreaCodeCacheKey(areaCode.getAreaCode()), areaCode);
            }
        }
        return sysTreeList;
    }
Mapper层查询地区字典表
 /**
     * 根据superCode进行查询
     *
     * @param parentCode
     * @return
     */
    List<DictAreaCode> selectChildCodeListByParentCode(String parentCode);
xml SQL语句
<select id="selectChildCodeListByParentCode" parameterType="String" resultMap="DictAreaCodeResult">
         select * from dict_area_code
        where parent_code = #{parentCode}
    </select>

上面把地区树存入缓存

2)返给前端页面接口

Service 接口
/**
     * 获取所有层级的deptid
     *
     * @return
     */
    List<SysTree> selectTree(String parentCode);
**实现类**
/***
     * 获取地区树
     * @param parentCode
     * @return
     */
    @Override
    public List<SysTree> selectTree(String parentCode) {
        if (StringUtils.isEmpty(parentCode)) {
            parentCode = firstParentCode;
        }
        List<SysTree> sysTreeList = RedisUtils.getDataCache(RedisUtils.getAreaTreeCacheKey(parentCode));
        if (sysTreeList == null) {
            sysTreeList = new ArrayList<>();
        }
        return sysTreeList;
    }
controller 层
 /**
     * 地区树形结构
     *
     * @return
     */
    @GetMapping("/selectTree")
    public AjaxResult selectTree(String parentCode) {
        return AjaxResult.success(dictAreaCodeService.selectTree(parentCode));
    }

RedisUtils 工具类

package cn.guangl.common.utils;

import cn.guangl.common.constant.RedisConstants;
import cn.guangl.common.core.redis.RedisCache;
import cn.guangl.common.utils.spring.SpringUtils;

import java.util.Collection;

/**
 * redis 工具类
 *
 * @author lhh
 */
public class RedisUtils {

    public static <T> void setDataCache(String key, T data) {
        SpringUtils.getBean(RedisCache.class).setCacheObject(key, data);
    }

    public static <T> T getDataCache(String key) {
        Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(key);
        if (StringUtils.isNotNull(cacheObj)) {
            T data = StringUtils.cast(cacheObj);
            return data;
        }
        return null;
    }

    public static void clearAllDataCache(String prefixKey) {
        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(prefixKey + "*");
        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
    }

    public static void clearDataCache(String key) {
        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(key);
        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
    }

    /**
     * 获取机构完整 key
     *
     * @param key
     * @return
     */
    public static String getDeptCacheKey(String key) {
        return RedisConstants.SYS_DEPT_KEY + key;
    }

    /**
     * 获取地区key
     *
     * @param key
     * @return
     */
    public static String getAreaCodeCacheKey(String key) {
        return RedisConstants.SYS_AREA_CODE_KEY + key;
    }

    public static String getAreaTreeCacheKey(String key) {
        return RedisConstants.SYS_AREA_TREE_KEY + key;
    }

}

常量类

/**
     * 地区编码缓存
     */
    public static final String SYS_AREA_CODE_KEY = "sys_area_code:";
    /**
     * 地区树缓存
     */
    public static final String SYS_AREA_TREE_KEY = "sys_area_tree:";

地区字典表见下片

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值