|  | @@ -1,15 +1,20 @@
 | 
	
		
			
				|  |  |  package thyyxxk.webserver.service.settings;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import cn.hutool.json.JSONUtil;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import thyyxxk.webserver.dao.his.settings.MenuSettingsDao;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.entity.login.UserInfo;
 | 
	
		
			
				|  |  |  import thyyxxk.webserver.entity.settings.IntergrationMenu;
 | 
	
		
			
				|  |  |  import thyyxxk.webserver.service.RedisServer;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.service.redislike.RedisLikeService;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.utils.TokenUtil;
 | 
	
		
			
				|  |  |  import thyyxxk.webserver.utils.TreeUtil;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import javax.annotation.PostConstruct;
 | 
	
		
			
				|  |  |  import java.util.ArrayList;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  @Slf4j
 | 
	
	
		
			
				|  | @@ -17,10 +22,12 @@ public class MenuSettingsService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private final MenuSettingsDao dao;
 | 
	
		
			
				|  |  |      private final RedisServer redisServer;
 | 
	
		
			
				|  |  | +    private final RedisLikeService redisLikeService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public MenuSettingsService(MenuSettingsDao dao, RedisServer redisServer) {
 | 
	
		
			
				|  |  | +    public MenuSettingsService(MenuSettingsDao dao, RedisServer redisServer, RedisLikeService redisLikeService) {
 | 
	
		
			
				|  |  |          this.dao = dao;
 | 
	
		
			
				|  |  |          this.redisServer = redisServer;
 | 
	
		
			
				|  |  | +        this.redisLikeService = redisLikeService;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @PostConstruct
 | 
	
	
		
			
				|  | @@ -29,11 +36,61 @@ public class MenuSettingsService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public List<IntergrationMenu> getMenuSettings() {
 | 
	
		
			
				|  |  | -        return TreeUtil.ObjectTree(dao.getAll(), "id", "parentId");
 | 
	
		
			
				|  |  | +        return dao.getAll();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public List<IntergrationMenu> getRedisMenuByCode(String code) {
 | 
	
		
			
				|  |  | -        return new ArrayList<>();
 | 
	
		
			
				|  |  | +    public List<IntergrationMenu> getUserMenu() {
 | 
	
		
			
				|  |  | +        return getRedisMenuByCode(TokenUtil.getInstance().getTokenUserId());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<IntergrationMenu> menuListByTree(List<IntergrationMenu> list) {
 | 
	
		
			
				|  |  | +        return TreeUtil.ObjectTree(list, (parent, child) -> {
 | 
	
		
			
				|  |  | +            if (parent == null) {
 | 
	
		
			
				|  |  | +                child.setCompletePath(child.getPath());
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                child.setCompletePath(parent.getCompletePath() + "/" + child.getPath());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<IntergrationMenu> findParentMenus(List<IntergrationMenu> list, IntergrationMenu item) {
 | 
	
		
			
				|  |  | +        List<IntergrationMenu> result = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (IntergrationMenu menu : list) {
 | 
	
		
			
				|  |  | +            if (menu.getId().equals(item.getParentId())) {
 | 
	
		
			
				|  |  | +                result.add(menu);
 | 
	
		
			
				|  |  | +                if (menu.getParentId() != null) {
 | 
	
		
			
				|  |  | +                    result.addAll(findParentMenus(list, menu));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                return result;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<IntergrationMenu> getRedisMenuByCode(String code) {
 | 
	
		
			
				|  |  | +        UserInfo userInfo = redisLikeService.getUserInfoByCode(code);
 | 
	
		
			
				|  |  | +        List<IntergrationMenu> menuList = redisServer.getData("IntergrationPlatformMenu", (key) -> getMenuSettings());
 | 
	
		
			
				|  |  | +        if (userInfo.getRoles().contains(1)) {
 | 
	
		
			
				|  |  | +            return menuListByTree(menuList);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<IntergrationMenu> passRule = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (IntergrationMenu item : menuList) {
 | 
	
		
			
				|  |  | +            if (item.getMetaPassRule()) {
 | 
	
		
			
				|  |  | +                passRule.add(item);
 | 
	
		
			
				|  |  | +                passRule.addAll(findParentMenus(menuList, item));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (IntergrationMenu item : menuList) {
 | 
	
		
			
				|  |  | +            if (userInfo.getMenuId().contains(item.getId())) {
 | 
	
		
			
				|  |  | +                passRule.add(item);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        passRule = passRule.stream().distinct().collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return menuListByTree(passRule);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |