From f05b1d9f23447fbd6821d0250c93d2762ae664f5 Mon Sep 17 00:00:00 2001 From: hxh <762326930@qq.com> Date: Sat, 1 Jun 2024 01:50:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=97=A8=E6=88=B7?= =?UTF-8?q?=E7=99=BB=E9=99=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/kms/aspect/WebLogAspect.java | 162 ++++++++++++ .../controller/system/SysLoginController.java | 231 ++++++------------ .../com/kms/web/utils/WaterRequestUtil.java | 57 ++++- .../java/com/kms/web/utils/WaterResultV2.java | 25 ++ .../web/service/SysPermissionService.java | 7 + .../kms/system/service/SysMenuService.java | 35 --- 6 files changed, 306 insertions(+), 211 deletions(-) create mode 100644 shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java create mode 100644 shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java diff --git a/shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java b/shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java new file mode 100644 index 00000000..d98b3af2 --- /dev/null +++ b/shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java @@ -0,0 +1,162 @@ +package com.kms.aspect; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + + +/** + * 接口日志界面 + * + * @author hxh + **/ +@Aspect +@Component +@Slf4j +public class WebLogAspect implements EnvironmentAware, InitializingBean { + + private boolean printResponseEnable; + private Environment environment; + + /** + * 切点 + */ + @Pointcut("@within(org.springframework.web.bind.annotation.RestController) || @within(org.springframework.stereotype.Controller)") + public void webLog() { + } + + /** + * 环绕切面 + * + * @param joinPoint ProceedingJoinPoint + * @return 结果 + * @throws Throwable 异常 + */ + @Around("webLog()") + public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { + long startTime = System.currentTimeMillis(); + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (servletRequestAttributes == null) { + return joinPoint.proceed(); + } + HttpServletRequest request = servletRequestAttributes.getRequest(); + Class targetCls = joinPoint.getTarget().getClass(); + MethodSignature ms = (MethodSignature) joinPoint.getSignature(); + //获取目标方法上的注解指定的操作名称 + Method targetMethod = + targetCls.getDeclaredMethod( + ms.getName(), + ms.getParameterTypes()); + String uri = request.getRequestURI(); + String httpMethod = request.getMethod(); + Object requestParams = getRequestParameter(request, joinPoint); + log.info("[{}] \"{}\" begin, params:{}", httpMethod, uri, + JSON.toJSONString(requestParams)); + Object result; + try { + result = joinPoint.proceed(); + if (printResponseEnable) { + log.info("[{}] \"{}\" response:{}", httpMethod, uri, JSON.toJSONString(result)); + } + return result; + } catch (Throwable ex) { + log.error("[{}] \"{}\" error:{}", httpMethod, uri, ex.getMessage()); + throw ex; + } finally { + log.info("[{}] \"{}\" end, use time:{}ms", httpMethod, uri, System.currentTimeMillis() - startTime); + } + } + + /** + * 获取请求参数 + * + * @param request HttpServletRequest + * @param joinPoint JoinPoint + * @return 结果 + */ + private Object getRequestParameter(HttpServletRequest request, JoinPoint joinPoint) { + Object[] args = joinPoint.getArgs(); + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + Parameter[] parameters = method.getParameters(); + Map params = new HashMap<>(parameters.length); + //json数据 + for (int i = 0; i < parameters.length; i++) { + if (isFilterObject(args[i])) { + continue; + } + RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class); + if (requestBody != null) { + //一个接口只会有一个RequestBody + return args[i]; + } + } + //表单提交或url拼接 + Enumeration paramNames = request.getParameterNames(); + while (paramNames.hasMoreElements()) { + String key = paramNames.nextElement(); + params.put(key, request.getParameter(key)); + } + return !params.isEmpty() ? params : null; + } + + /** + * 是否需要过滤 + * + * @param obj Object + * @return true or false + */ + private boolean isFilterObject(final Object obj) { + if (obj == null) { + return true; + } + Class clazz = obj.getClass(); + if (clazz.isArray()) { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } else if (Collection.class.isAssignableFrom(clazz)) { + Collection collection = (Collection) obj; + for (Object o : collection) { + return o instanceof MultipartFile; + } + } else if (Map.class.isAssignableFrom(clazz)) { + Map map = (Map) obj; + for (Object o : map.entrySet()) { + Map.Entry entry = (Map.Entry) o; + return entry.getValue() instanceof MultipartFile; + } + } + return obj instanceof MultipartFile || obj instanceof HttpServletRequest || obj instanceof HttpServletResponse; + } + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + + @Override + public void afterPropertiesSet() { + printResponseEnable = environment.getProperty("sy.public.log-config.print-response", Boolean.class, false); + } +} diff --git a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java index b1b503ba..be1dc874 100644 --- a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java +++ b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java @@ -3,7 +3,6 @@ package com.kms.web.controller.system; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.kms.common.utils.UserUtils; @@ -12,11 +11,9 @@ import com.kms.framework.manager.factory.AsyncFactory; import com.kms.framework.web.service.SysPermissionService; import com.kms.framework.web.service.SysPermissionService.MenuDto; import com.kms.system.service.SysMenuService; -import com.kms.system.service.SysRoleMenuService; -import com.kms.system.service.SysRoleService; import com.kms.system.service.SysUserService; import com.kms.web.utils.WaterRequestUtil; -import com.kms.web.utils.WaterResult; +import com.kms.web.utils.WaterResultV2; import com.kms.web.utils.singleDomain.SingleMenu; import com.shuili.common.constant.Constants; import com.shuili.common.constant.YesOrNo; @@ -28,16 +25,17 @@ import com.shuili.common.core.domain.model.LoginBody; import com.shuili.common.core.redis.RedisCache; import com.shuili.common.enums.UserStatus; import com.shuili.common.exception.BaseException; -import com.shuili.common.exception.CustomException; import com.shuili.common.mybaitsplus.BeanToWrapper; import com.shuili.common.utils.StringUtils; import com.shuili.common.utils.password.PasswordUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; @@ -45,13 +43,11 @@ import org.springframework.web.servlet.view.RedirectView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Set; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 登录验证 @@ -167,11 +163,15 @@ public class SysLoginController extends BaseController { if (user == null) { return AjaxResult.error("用户未登录"); } - List menus = menuService.selectMenuTreeByUserId(user.getId(), permissionService.getUserMenuFromPortal(user.getId())); - return AjaxResult.success(menuService.buildMenus(menus)); + List portalMenus = permissionService.getUserMenuFromPortal(user.getId()); + if (CollectionUtil.isNotEmpty(portalMenus)) { + return AjaxResult.success(menuService.buildMenus(portalMenus)); + } else { + List menus = menuService.selectMenuTreeByUserId(user.getId()); + return AjaxResult.success(menuService.buildMenus(menus)); + } } - /** * 门户单点认证登录 * @@ -182,26 +182,68 @@ public class SysLoginController extends BaseController { HttpServletResponse response, @RequestParam(name = "page", required = false) String page, @RequestParam(name = "token") String token) throws IOException { - WaterResult waterResult; - CountDownLatch countDownLatch = new CountDownLatch(1); - try { - waterResult = waterRequestUtil.authUser(token); - } catch (Exception e) { - log.error(e.getMessage()); - throw new CustomException("登录失败"); + CompletableFuture> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(token)); + CompletableFuture userFuture = CompletableFuture.supplyAsync(() -> innerLogin(token)); + CompletableFuture.allOf(menusFuture, userFuture).join(); + List menus = menusFuture.join(); + SimpleUser simpleUser = userFuture.join(); + if (simpleUser == null) { + throw new BaseException("账号异常,登陆失败"); } - JSONObject jsonObject = JSONObject.parseObject(waterResult.getData()); - String user = jsonObject.getString("user"); - JSONObject userJsonObject = JSONObject.parseObject(user); - String uid = userJsonObject.getString("id"); + permissionService.setUserMenuFromPortal(simpleUser.getId(), menus); + + RedirectView redirectView = new RedirectView(redirect + "?token=" + simpleUser.getToken() + "&page=" + page); + return new ModelAndView(redirectView); + } + + private List portalMenu(String token) { + WaterResultV2> source = waterRequestUtil.getUserResource(token); + List sMenus = source.getData(); + return sMenus.stream().flatMap(item -> { + if (item.getChildren() != null) { + return Stream.concat(Stream.of(item), item.getChildren().stream()); + } else { + return Stream.of(item); + } + }).map(item -> MenuDto.builder() + .code(item.getCode()) + .visible(item.getVisible().equals("1") ? "0" : "1") + .seq(item.getSeq()) + .status(item.getStatus().equals("1") ? "0" : "1") + .build()).collect(Collectors.toList()); + } + + private SimpleUser innerLogin(String token) { + WaterResultV2 user = waterRequestUtil.authUser(token); + String uid = user.getData().getUser().getId(); QueryWrapper query = Wrappers.query(); query.eq("single_user_id", uid); List list = userService.list(query); if (CollectionUtil.isEmpty(list)) { - throw new CustomException("数据异常,登录失败"); + return null; } - AjaxResult ajax = AjaxResult.success(); SysUser sysUser = list.get(0); + try { + checkUser(sysUser); + } catch (Exception e) { + return null; + } + CompletableFuture loginFuture = CompletableFuture.runAsync(() -> StpUtil.login(sysUser.getId())); + CompletableFuture sectionFuture = CompletableFuture.runAsync(() -> StpUtil.getSession().set("jianwei-user", sysUser)); + CompletableFuture permissionFuture = CompletableFuture.runAsync(() -> permissionService.setUserPermissionFromPortal(sysUser.getId(), user.getData().getFunctionPerms())); + CompletableFuture.allOf(loginFuture, sectionFuture, permissionFuture).join(); + return new SimpleUser(sysUser.getId(), StpUtil.getTokenValue()); + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + private static class SimpleUser { + private String id; + private String token; + } + + private void checkUser(SysUser sysUser) { if (UserStatus.DELETED.getCode().equals(sysUser.getDelFlag())) { log.info(" :{} 已被删除.", sysUser.getUserName()); AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, "账户已删除")); @@ -211,143 +253,6 @@ public class SysLoginController extends BaseController { AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, "账户已停用")); throw new BaseException("对不起,您的账号:" + sysUser.getUserName() + " 已停用"); } - //异步执行菜单同步 - executorService.submit(new RolePerms(token, waterResult, countDownLatch, sysUser.getId())); - AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功")); - StpUtil.login(sysUser.getId()); - StpUtil.getSession().set("jianwei-user", sysUser); - String tokenValue = StpUtil.getTokenValue(); - userService.updateWithReids(sysUser); - ajax.put("token", tokenValue); - ajax.put("authorization", token); - try { - countDownLatch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } -// if(StringUtils.isEmpty(page)){ -// List menus = menuService.selectMenuTreeByUserId(sysUser.getId()); -// List routerVos = menuService.buildMenus(menus); -// StringBuffer stringBuffer = new StringBuffer(); -// for (RouterVo routerVo : routerVos) { -// stringBuffer.append("/"+routerVo.getPath()); -// List children = routerVo.getChildren(); -// if(CollectionUtil.isEmpty(children)){ -// continue; -// }else { -// RouterVo vo = children.get(0); -// List childrenTwo = vo.getChildren(); -// if(CollectionUtil.isEmpty(childrenTwo)){ -// -// } -// } -// } -// } - RedirectView redirectView = new RedirectView(redirect + "?token=" + tokenValue + "&page=" + page); - ModelAndView modelAndView = new ModelAndView(redirectView); - return modelAndView; - } - - @Autowired - SysRoleService sysRoleService; - @Autowired - SysRoleMenuService sysRoleMenuService; - @Autowired - SysMenuService sysMenuService; - - ExecutorService executorService = Executors.newFixedThreadPool(5); - - /** - * 根据用户token获取资源权限 - * - * @param - * @return - */ -// @GetMapping("/getSingleRotes/{token}") -// public AjaxResult getSingleRotes(@PathVariable String token){ -// WaterResult waterResult = waterRequestUtil.authUser(token); -// String data = waterResult.getData(); -// JSONObject jsonObject = JSONObject.parseObject(data); -// List functionPerms = jsonObject.getJSONArray("functionPerms").toJavaList(String.class); -// List roles = jsonObject.getJSONArray("roles").toJavaList(String.class); -// QueryWrapper query = Wrappers.query(); -// query.in("role_key",roles); -// List roleList = sysRoleService.list(query); -// QueryWrapper menuQueryWrapper = Wrappers.query(); -// menuQueryWrapper.in("perms",functionPerms); -// List menus = sysMenuService.list(menuQueryWrapper); - -// -// return AjaxResult.success(menuService.buildMenus(menus)); -// } - - class RolePerms implements Runnable { - - private final String token; - private final WaterResult waterResult; - private final CountDownLatch countDownLatch; - private final String userId; - - public RolePerms(String token, WaterResult waterResult, CountDownLatch countDownLatch, String userId) { - this.token = token; - this.waterResult = waterResult; - this.countDownLatch = countDownLatch; - this.userId = userId; - } - - @Override - @Transactional - public void run() { - try { - WaterResult result = waterRequestUtil.getUserResource(token); - List singleMenus = JSONObject.parseArray(result.getData(), SingleMenu.class); - List singleAllMenus = new ArrayList<>(); - setChildren(singleMenus, singleAllMenus); - String data = waterResult.getData(); - JSONObject datajson = JSONObject.parseObject(data); - List functionPerms = datajson.getJSONArray("functionPerms").toJavaList(String.class); - List menuCode = singleAllMenus.stream().map(item -> MenuDto.builder() - .code(item.getCode()) - .visible(item.getVisible().equals("1") ? "0" : "1") - .seq(item.getSeq()) - .status(item.getStatus().equals("1") ? "0" : "1") - .build()).distinct().collect(Collectors.toList()); - permissionService.setUserPermissionFromPortal(userId, functionPerms); - permissionService.setUserMenuFromPortal(userId, menuCode); - - } catch (Exception e) { - log.error("同步菜单权限失败:" + e.getMessage()); - throw e; - } finally { - countDownLatch.countDown(); - } - } - } - - - public static void setChildren(List singleMenus, List singleAllMenus) { - if (CollectionUtil.isNotEmpty(singleMenus)) { - for (SingleMenu singleMenu : singleMenus) { //剔除掉不符合的 - if (singleMenu.getVisible() != null && singleMenu.getStatus() != null) { - if (singleMenu.getStatus().equals("1")) { - singleAllMenus.add(singleMenu); - } - } - if (CollectionUtil.isNotEmpty(singleMenu.getChildren())) { - List children = singleMenu.getChildren(); - for (SingleMenu child : children) { - if (singleMenu.getVisible() != null && singleMenu.getStatus() != null) { - if (singleMenu.getStatus().equals("1")) { - singleAllMenus.add(child); - } - } - if (CollectionUtil.isNotEmpty(child.getChildren())) { - setChildren(child.getChildren(), singleAllMenus); - } - } - } - } - } } } diff --git a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java index fd4c8f6d..8515bc63 100644 --- a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java +++ b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java @@ -3,8 +3,12 @@ package com.kms.web.utils; import cn.hutool.core.util.IdUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.kms.web.utils.singleDomain.SingleMenu; import com.shuili.common.exception.CustomException; +import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -12,6 +16,7 @@ import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; +import java.util.List; @Component public class WaterRequestUtil { @@ -195,22 +200,38 @@ public class WaterRequestUtil { * @param authorization * @return */ - public WaterResult authUser(String authorization) { - log.info("--------请求统一门户用户验证,请求地址为:" + userUrl); + public WaterResultV2 authUser(String authorization) { + long startTime = System.currentTimeMillis(); + log.info("--------请求统一门户用户验证,请求地址为:{}", userUrl); HttpRequest get = createGet(userUrl, authUserServiceId, authUserAppsecret); String body; try (HttpResponse response = get.header("Authorization", authorization) .execute()) { body = response.body(); } - WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); + long endTime = System.currentTimeMillis(); + log.info("--------请求统一门户用户验证,耗时{}毫秒,返回结果为:{}", endTime - startTime, body); + WaterResultV2 waterResult = JSON.parseObject(body, new TypeReference>() { + }); isSuccess(waterResult); return waterResult; } + @Data + public static class WaterUser { + private WaterUserInfo user; + private List functionPerms; + + } + + @Data + public static class WaterUserInfo { + private String id; + } + public WaterResult getOrgPage() { - log.info("--------请求获取门户组织信息,请求地址为:" + orgUrl); + log.info("--------请求获取门户组织信息,请求地址为:{}", orgUrl); HashMap hashMap = new HashMap<>(); hashMap.put("page", 1); hashMap.put("size", 100); @@ -238,19 +259,20 @@ public class WaterRequestUtil { } - public WaterResult getUserResource(String authorization) { - log.info("--------请求获取门户角色信息,请求地址为:" + resourceUrl); - HashMap hashMap = new HashMap<>(); - hashMap.put("systemCode", systemCode); + public WaterResultV2> getUserResource(String authorization) { + //计算请求消耗的时间 + long startTime = System.currentTimeMillis(); + log.info("--------请求获取门户用户资源信息,请求地址为:{}", resourceUrl); HttpRequest get = createPost(resourceUrl + "?systemCode=" + systemCode, resourceServiceId, resourceAppsecret); -// HttpRequest get = createPost(resourceUrl,resourceServiceId,resourceAppsecret); get.header("Authorization", authorization); String body; try (HttpResponse response = get.execute()) { body = response.body(); } - log.info("--------请求获取门户用户资源信息,返回结果为:" + body); - WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); + long endTime = System.currentTimeMillis(); + log.info("--------请求获取门户用户资源信息,耗时{}毫秒,返回结果为:{}", endTime - startTime, body); + WaterResultV2> waterResult = JSON.parseObject(body, new TypeReference>>() { + }); isSuccess(waterResult); //{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1} return waterResult; @@ -258,7 +280,7 @@ public class WaterRequestUtil { public WaterResult getRolePage() { - log.info("--------请求获取门户角色信息,请求地址为:" + roleUrl); + log.info("--------请求获取门户角色信息,请求地址为:{}", roleUrl); HashMap hashMap = new HashMap<>(); hashMap.put("page", 1); hashMap.put("size", 100); @@ -277,7 +299,7 @@ public class WaterRequestUtil { public WaterResult usersPage() { - log.info("--------请求获取门户用户信息,请求地址为:" + usersUrl); + log.info("--------请求获取门户用户信息,请求地址为:{}", usersUrl); HashMap hashMap = new HashMap<>(); hashMap.put("page", 1); hashMap.put("size", 100); @@ -303,5 +325,14 @@ public class WaterRequestUtil { } } + private void isSuccess(WaterResultV2 waterResult) { + if (waterResult == null) { + throw new CustomException("请求异常"); + } + if (waterResult.getCode() != 200 || !waterResult.getSuccess()) { + throw new CustomException("请求失败,原因:" + waterResult.getMessage()); + } + } + } diff --git a/shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java b/shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java new file mode 100644 index 00000000..fbe1554b --- /dev/null +++ b/shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java @@ -0,0 +1,25 @@ +package com.kms.web.utils; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ClassName: WaterResultV2 + * @Description: TODO + * @Date: 2024/6/1 上午12:27 + * * + * @author: hxh + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WaterResultV2 { + private int code; + private String message; + private Boolean success; + private T data; + private String timestamp; + +} diff --git a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java index ac893838..95af1eb4 100644 --- a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java +++ b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java @@ -12,6 +12,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.function.Function; @@ -102,10 +103,16 @@ public class SysPermissionService { } public void setUserPermissionFromPortal(String userId, List perms) { + if (CollectionUtils.isEmpty(perms)) { + return; + } redisCache.setCacheObject(permsKey(userId), perms); } public void setUserMenuFromPortal(String userId, List menus) { + if (CollectionUtils.isEmpty(menus)) { + return; + } redisCache.setCacheObject(menusKey(userId), menus); } diff --git a/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java b/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java index 0e349f5c..5396c298 100644 --- a/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java +++ b/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java @@ -16,9 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * 菜单 业务层处理 @@ -103,39 +101,6 @@ public class SysMenuService extends BaseService { return getChildPerms(menus, "0"); } - public List selectMenuTreeByUserId(String userId, List menuList) { - List menus; - if ("1".equals(userId)) { - menus = menuMapper.selectMenuTreeAll(); - } else { - menus = menuMapper.selectMenuTreeByUserId(userId); - } - if (menus != null) { - return getChildPerms(unionMenu(menus, menuList), "0"); - } else { - return Collections.emptyList(); - } - } - - //菜单取并集 - private List unionMenu(List menuList, List menus) { - return Stream.concat(menuList.stream(), menus.stream()) - .collect(Collectors.toMap(SysMenu::getId, Function.identity(), (o1, o2) -> { - if (o1.getIsMain()) { - return o1; - } - if (o2.getIsMain()) { - return o2; - } - return o1; - })) - .values() - .stream() - .filter(item -> item.getStatus().equals("0")) - .collect(Collectors.toList()); - - } - /** * 根据角色ID查询菜单树信息 *