From 401510af482a05aa777db983791f8e7594edaec2 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 08 七月 2025 13:53:55 +0800 Subject: [PATCH] 新增迭代 --- ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 60 insertions(+), 0 deletions(-) diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java index ba857bc..2fe4a05 100644 --- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java +++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java @@ -1,14 +1,74 @@ package com.ruoyi.goods.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.RedisConstants; import com.ruoyi.goods.domain.Region; import com.ruoyi.goods.mapper.RegionMapper; import com.ruoyi.goods.service.IRegionService; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; @Service public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService { + @Resource + private RedisTemplate<Object, Object> redisTemplate; + + @Override + public List<Region> addressTree() { + // redis缓存 + Map<Object, Object> regionList = redisTemplate.opsForHash().entries(RedisConstants.ADDRESS_TREE); + // 获取所有地区信息 省市区三级 + List<Region> regions = getReginList(regionList); + // 所有地区 + Map<String, Region> courseTypeMap = regions.stream(). + collect(Collectors.toMap(region -> region.getId().toString() + , region -> region)); + redisTemplate.opsForHash().putAll(RedisConstants.ADDRESS_TREE, courseTypeMap); + redisTemplate.expire(RedisConstants.ADDRESS_TREE, 30, TimeUnit.MINUTES); + // 生成map集合 + Map<Integer, Region> map = regions.stream().collect(Collectors.toMap(Region::getId, region -> region)); + // 存放无限级树 + List<Region> treeData = new ArrayList<>(); + // 遍历地区集合 + regions.forEach(e -> { + if (e.getParentId() == null || e.getParentId().equals(0)) { + treeData.add(e); + } else { + Region region = map.get(e.getParentId()); + region.getChildren().add(e); + } + }); + for (Region region : treeData) { + List<Region> children = region.getChildren(); + for (Region child : children) { + child.setChildren(new ArrayList<>()); + } + } + return treeData; + } + + /** + * 获取redis数据进行封装 + */ + private List<Region> getReginList(Map<Object, Object> regionMap) { + List<Region> regions = new ArrayList<>(); + if (!regionMap.isEmpty()) { + Collection<Object> values = regionMap.values(); + for (Object value : values) { + regions.add((Region) value); + } + } else { + regions = this.list(); + } + return regions; + } } -- Gitblit v1.7.1