hjl
2024-07-23 562699fa6d0c279fe0f4f81ce87c336a34a3fb91
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.Menu;
import com.ruoyi.admin.mapper.MenuMapper;
import com.ruoyi.admin.service.MenuService;
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-25
 */
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
 
    @Resource
    private RedisTemplate<Object, Object> redisTemplate;
 
    @Override
    public List<Menu> menuTree() {
        // redis缓存
        Map<Object, Object> regionList = redisTemplate.opsForHash().entries(RedisConstants.MENU_TREE);
        // 获取所有地区信息 省市区三级
        List<Menu> regions = getReginList(regionList);
        // 所有地区
        Map<String, Menu> courseTypeMap = regions.stream().
                collect(Collectors.toMap(region -> region.getMenuId().toString()
                        , region -> region));
        redisTemplate.opsForHash().putAll(RedisConstants.MENU_TREE, courseTypeMap);
        redisTemplate.expire(RedisConstants.MENU_TREE, 30, TimeUnit.MINUTES);
        // 生成map集合
        Map<Long, Menu> map = regions.stream().collect(Collectors.toMap(Menu::getMenuId, region -> region));
        // 存放无限级树
        List<Menu> treeData = new ArrayList<>();
        // 遍历地区集合
        regions.forEach(e -> {
            if (e.getParentId() == null || e.getParentId().equals(0L)) {
                treeData.add(e);
            } else {
                Menu region = map.get(e.getParentId());
                region.getChildren().add(e);
            }
        });
//        for (Menu region : treeData) {
//            List<Menu> children = region.getChildren();
//            for (Menu child : children) {
//                child.setChildren(new ArrayList<>());
//            }
//        }
        return treeData;
    }
 
    /**
     * 获取redis数据进行封装
     */
    private List<Menu> getReginList(Map<Object, Object> regionMap) {
        List<Menu> regions = new ArrayList<>();
        if (!regionMap.isEmpty()) {
            Collection<Object> values = regionMap.values();
            for (Object value : values) {
                regions.add((Menu) value);
            }
        } else {
            regions = this.list();
        }
        return regions;
    }
 
}