|
|
@@ -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);
|
|
|
}
|
|
|
|
|
|
}
|