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; /** *

* 菜单权限表 服务实现类 *

* * @author hjl * @since 2024-06-25 */ @Service public class MenuServiceImpl extends ServiceImpl implements MenuService { @Resource private RedisTemplate redisTemplate; @Override public List menuTree() { // redis缓存 Map regionList = redisTemplate.opsForHash().entries(RedisConstants.MENU_TREE); // 获取所有地区信息 省市区三级 List regions = getReginList(regionList); // 所有地区 Map 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 map = regions.stream().collect(Collectors.toMap(Menu::getMenuId, region -> region)); // 存放无限级树 List 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 children = region.getChildren(); // for (Menu child : children) { // child.setChildren(new ArrayList<>()); // } // } return treeData; } /** * 获取redis数据进行封装 */ private List getReginList(Map regionMap) { List regions = new ArrayList<>(); if (!regionMap.isEmpty()) { Collection values = regionMap.values(); for (Object value : values) { regions.add((Menu) value); } } else { regions = this.list(); } return regions; } }