hjl
2024-06-18 aaa3384609da2dfb7d6788a2a2b3d92a2bff0813
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.ruoyi.admin.service.impl;
 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.admin.entity.Region;
import com.ruoyi.admin.mapper.RegionMapper;
import com.ruoyi.admin.service.RegionService;
import com.ruoyi.common.core.constant.RedisConstants;
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;
 
/**
 * <p>
 * 省市区三级联动 服务实现类
 * </p>
 *
 * @author hjl
 * @since 2024-06-12
 */
@Service
public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements RegionService {
 
    @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;
    }
 
}