| | |
| | | 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); |
| | | } |
| | | }); |
| | | 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; |
| | | } |
| | | |
| | | } |