jinpengyong
2023-09-25 0ce9ec32e0731ef2d7fd61c1da43f9ffd09cca6e
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.moral.api.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.SysArea;
import com.moral.api.mapper.SysAreaMapper;
import com.moral.api.service.SysAreaService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
 
/**
 * <p>
 * 系统区域表 服务实现类
 * </p>
 *
 * @author moral
 * @since 2021-04-07
 */
@Service
@Slf4j
public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea> implements SysAreaService {
 
    @Autowired
    SysAreaMapper sysAreaMapper;
 
    @Autowired
    RedisTemplate redisTemplate;
 
    @Override
    public List<SysArea> querySysArea() {
        List<SysArea> sysAreas = redisTemplate.opsForList().range("sysArea", 0, -1);
        if (ObjectUtils.isEmpty(sysAreas)) {
            sysAreas = querySysAreaFromDB();
        }
        return sysAreas;
    }
 
    @Override
    public SysArea select(Integer code) {
        QueryWrapper<SysArea> wrapper = new QueryWrapper<>();
        wrapper.eq("area_code",code);
        SysArea sysArea = sysAreaMapper.selectOne(wrapper);
        return sysArea;
    }
 
    /**
     * 查询除了乡镇以外的地区
     *
     * @return
     */
    @Override
    public List<SysArea> queryCity() {
        //取出所有地区
        List<SysArea> sysAreas = sysAreaMapper.selectList(null);
        //创建Map key为地区码 value为地区对象 供组装使用
        Map<Integer, SysArea> areaMap = new HashMap<>();
        for (SysArea sysArea : sysAreas) {
            areaMap.put(sysArea.getAreaCode(), sysArea);
            sysArea.setChildren(new ArrayList<>());//初始化children集合
        }
        //遍历所有城市,判断是否有父城市,如果有则添加到父城市中。
        int i=0;
        for (SysArea sysArea : sysAreas) {
            Integer parentCode = sysArea.getParentCode();
            String s = sysArea.getAreaCode().toString();
            if (!parentCode.equals(0)) {
                if (s.length()>7){
                    continue;
                }
                SysArea parentArea = areaMap.get(parentCode);
                if (ObjectUtils.isEmpty(parentArea)){
                    continue;
                }
                List<SysArea> children = parentArea.getChildren();
                children.add(sysArea);
//                parentArea.getChildren().add(sysArea);
            }
        }
        //移除集合中非父顶级城市
        sysAreas.removeIf(new Predicate<SysArea>() {
            @Override
            public boolean test(SysArea sysArea) {
                if (sysArea.getParentCode().equals(0))
                    return false;
                return true;
            }
        });
        return sysAreas;
    }
 
    @Override
    public List<SysArea> selectCode(Integer code) {
        QueryWrapper<SysArea> wrapper = new QueryWrapper<>();
        wrapper.eq("parent_code",code);
        List<SysArea> sysAreas = sysAreaMapper.selectList(wrapper);
        return sysAreas;
 
    }
 
 
    private List<SysArea> querySysAreaFromDB() {
        //取出所有地区
        List<SysArea> sysAreas = sysAreaMapper.selectList(null);
        //创建Map key为地区码 value为地区对象 供组装使用
        Map<Integer, SysArea> areaMap = new HashMap<>();
        for (SysArea sysArea : sysAreas) {
            areaMap.put(sysArea.getAreaCode(), sysArea);
            sysArea.setChildren(new ArrayList<>());//初始化children集合
        }
        //遍历所有城市,判断是否有父城市,如果有则添加到父城市中。
        for (SysArea sysArea : sysAreas) {
            Integer parentCode = sysArea.getParentCode();
            if (!parentCode.equals(0)) {
                SysArea parentArea = areaMap.get(parentCode);
                if (ObjectUtils.isEmpty(parentArea)){
                    continue;
                }
                List<SysArea> children = parentArea.getChildren();
                children.add(sysArea);
//                parentArea.getChildren().add(sysArea);
 
            }
        }
        //移除集合中非父顶级城市
        sysAreas.removeIf(new Predicate<SysArea>() {
            @Override
            public boolean test(SysArea sysArea) {
                if (sysArea.getParentCode().equals(0))
                    return false;
                return true;
            }
        });
        //存入缓存
        redisTemplate.opsForList().rightPushAll("sysArea",sysAreas);
 
        return sysAreas;
    }
 
 
}