diff --git a/config/nacos/application-common.yml b/config/nacos/application-common.yml index b6a8e2f7..6c0dc878 100644 --- a/config/nacos/application-common.yml +++ b/config/nacos/application-common.yml @@ -207,7 +207,7 @@ mybatis-plus: mapUnderscoreToCamelCase: true # MyBatis 自动映射策略 # NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射 - autoMappingBehavior: PARTIAL + autoMappingBehavior: FULL # MyBatis 自动映射时未知列或未知属性处理策 # NONE:不做处理 WARNING:打印相关警告 FAILING:抛出异常和详细信息 autoMappingUnknownColumnBehavior: NONE @@ -300,3 +300,17 @@ seata: server-addr: ${spring.cloud.nacos.server-addr} group: ${spring.cloud.nacos.discovery.group} namespace: ${spring.profiles.active} + +# 多租户配置 +tenant: + # 是否开启 + enable: true + # 排除表 + excludes: + - sys_menu + - sys_tenant + - sys_tenant_package + - sys_role_dept + - sys_role_menu + - sys_user_post + - sys_user_role diff --git a/config/nacos/ruoyi-gateway.yml b/config/nacos/ruoyi-gateway.yml index 4f5a4828..7ebd80bd 100644 --- a/config/nacos/ruoyi-gateway.yml +++ b/config/nacos/ruoyi-gateway.yml @@ -26,6 +26,7 @@ security: - /auth/smsLogin - /auth/xcxLogin - /auth/register + - /auth/tenant/list - /resource/sms/code - /*/v3/api-docs - /csrf @@ -54,7 +55,7 @@ spring: - id: ruoyi-gen uri: lb://ruoyi-gen predicates: - - Path=/code/** + - Path=/tool/** filters: - StripPrefix=1 # 系统模块 diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java index 0e31ff40..4d335f80 100644 --- a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java @@ -3,6 +3,7 @@ package org.dromara.auth.controller; import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.auth.domain.convert.TenantVoConvert; import org.dromara.auth.domain.vo.LoginTenantVo; import org.dromara.auth.domain.vo.LoginVo; import org.dromara.auth.domain.vo.TenantListVo; @@ -12,14 +13,16 @@ import org.dromara.auth.form.RegisterBody; import org.dromara.auth.form.SmsLoginBody; import org.dromara.auth.service.SysLoginService; import org.dromara.common.core.domain.R; -import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.api.RemoteTenantService; import org.dromara.system.api.domain.vo.RemoteTenantVo; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.validation.constraints.NotBlank; @@ -104,7 +107,7 @@ public class TokenController { /** * 登出方法 */ - @DeleteMapping("logout") + @PostMapping("logout") public R logout() { sysLoginService.logout(); return R.ok(); @@ -128,7 +131,7 @@ public class TokenController { @GetMapping("/tenant/list") public R tenantList(HttpServletRequest request) throws Exception { List tenantList = remoteTenantService.queryList(); - List voList = MapstructUtils.convert(tenantList, TenantListVo.class); + List voList = TenantVoConvert.INSTANCE.convertList(tenantList); // 获取域名 String host = new URL(request.getRequestURL().toString()).getHost(); // 根据域名进行筛选 diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/domain/convert/TenantVoConvert.java b/ruoyi-auth/src/main/java/org/dromara/auth/domain/convert/TenantVoConvert.java new file mode 100644 index 00000000..5ced9b1b --- /dev/null +++ b/ruoyi-auth/src/main/java/org/dromara/auth/domain/convert/TenantVoConvert.java @@ -0,0 +1,35 @@ +package org.dromara.auth.domain.convert; + +import org.dromara.auth.domain.vo.TenantListVo; +import org.dromara.system.api.domain.vo.RemoteTenantVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 租户vo转换器 + * @author zhujie + */ +@Mapper +public interface TenantVoConvert { + + TenantVoConvert INSTANCE = Mappers.getMapper(TenantVoConvert.class); + + /** + * RemoteTenantVoToTenantListVo + * @param remoteTenantVo 待转换对象 + * @return 转换后对象 + */ + TenantListVo convert(RemoteTenantVo remoteTenantVo); + + /** + * RemoteTenantVoToTenantListVo + * @param remoteTenantVo 待转换对象 + * @return 转换后对象 + */ + List convertList(List remoteTenantVo); + + + +} diff --git a/ruoyi-common/ruoyi-common-idempotent/src/main/java/org/dromara/common/idempotent/aspectj/RepeatSubmitAspect.java b/ruoyi-common/ruoyi-common-idempotent/src/main/java/org/dromara/common/idempotent/aspectj/RepeatSubmitAspect.java index 3e21348e..310ffda7 100644 --- a/ruoyi-common/ruoyi-common-idempotent/src/main/java/org/dromara/common/idempotent/aspectj/RepeatSubmitAspect.java +++ b/ruoyi-common/ruoyi-common-idempotent/src/main/java/org/dromara/common/idempotent/aspectj/RepeatSubmitAspect.java @@ -3,7 +3,12 @@ package org.dromara.common.idempotent.aspectj; import cn.dev33.satoken.SaManager; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.SecureUtil; -import org.dromara.common.core.constant.Constants; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.JsonUtils; @@ -12,11 +17,6 @@ import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.redis.utils.RedisUtils; -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Before; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; @@ -55,7 +55,7 @@ public class RepeatSubmitAspect { submitKey = SecureUtil.md5(submitKey + ":" + nowParams); // 唯一标识(指定key + url + 消息头) - String cacheRepeatKey = Constants.REPEAT_SUBMIT_KEY + url + submitKey; + String cacheRepeatKey = GlobalConstants.REPEAT_SUBMIT_KEY + url + submitKey; String key = RedisUtils.getCacheObject(cacheRepeatKey); if (key == null) { RedisUtils.setCacheObject(cacheRepeatKey, "", Duration.ofMillis(interval)); diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java index 814ee21c..48b09e68 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LogEventListener.java @@ -1,7 +1,14 @@ package org.dromara.common.log.event; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.constant.Constants; import org.dromara.common.core.utils.BeanCopyUtils; +import org.dromara.common.core.utils.ServletUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.ip.AddressUtils; import org.dromara.system.api.RemoteLogService; import org.dromara.system.api.domain.bo.RemoteLogininforBo; import org.dromara.system.api.domain.bo.RemoteOperLogBo; @@ -9,12 +16,15 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; + /** * 异步调用日志服务 * * @author ruoyi */ @Component +@Slf4j public class LogEventListener { @DubboReference @@ -33,8 +43,46 @@ public class LogEventListener { @Async @EventListener public void saveLogininfor(LogininforEvent logininforEvent) { - RemoteLogininforBo sysLogininfor = BeanCopyUtils.copy(logininforEvent, RemoteLogininforBo.class); - remoteLogService.saveLogininfor(sysLogininfor); + HttpServletRequest request = logininforEvent.getRequest(); + final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); + final String ip = ServletUtils.getClientIP(request); + + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(getBlock(ip)); + s.append(address); + s.append(getBlock(logininforEvent.getUsername())); + s.append(getBlock(logininforEvent.getStatus())); + s.append(getBlock(logininforEvent.getMessage())); + // 打印信息到日志 + log.info(s.toString(), logininforEvent.getArgs()); + // 获取客户端操作系统 + String os = userAgent.getOs().getName(); + // 获取客户端浏览器 + String browser = userAgent.getBrowser().getName(); + // 封装对象 + RemoteLogininforBo logininfor = new RemoteLogininforBo(); + logininfor.setTenantId(logininforEvent.getTenantId()); + logininfor.setUserName(logininforEvent.getUsername()); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(logininforEvent.getMessage()); + // 日志状态 + if (StringUtils.equalsAny(logininforEvent.getStatus(), Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) { + logininfor.setStatus(Constants.SUCCESS); + } else if (Constants.LOGIN_FAIL.equals(logininforEvent.getStatus())) { + logininfor.setStatus(Constants.FAIL); + } + remoteLogService.saveLogininfor(logininfor); + } + + private String getBlock(Object msg) { + if (msg == null) { + msg = ""; + } + return "[" + msg + "]"; } } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/CreateAndUpdateMetaObjectHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/CreateAndUpdateMetaObjectHandler.java index ea1e7d0a..5ed320df 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/CreateAndUpdateMetaObjectHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/CreateAndUpdateMetaObjectHandler.java @@ -3,13 +3,12 @@ package org.dromara.common.mybatis.handler; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.web.domain.BaseEntity; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.api.model.LoginUser; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.reflection.MetaObject; import java.util.Date; @@ -31,12 +30,12 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { ? baseEntity.getCreateTime() : new Date(); baseEntity.setCreateTime(current); baseEntity.setUpdateTime(current); - String username = StringUtils.isNotBlank(baseEntity.getCreateBy()) - ? baseEntity.getCreateBy() : getLoginUsername(); + Long userId = ObjectUtil.isNotNull(baseEntity.getCreateBy()) + ? baseEntity.getCreateBy() : getLoginId(); // 当前已登录 且 创建人为空 则填充 - baseEntity.setCreateBy(username); + baseEntity.setCreateBy(userId); // 当前已登录 且 更新人为空 则填充 - baseEntity.setUpdateBy(username); + baseEntity.setUpdateBy(userId); } } catch (Exception e) { throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); @@ -51,10 +50,10 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { Date current = new Date(); // 更新时间填充(不管为不为空) baseEntity.setUpdateTime(current); - String username = getLoginUsername(); + Long userId = getLoginId(); // 当前已登录 更新人填充(不管为不为空) - if (StringUtils.isNotBlank(username)) { - baseEntity.setUpdateBy(username); + if (ObjectUtil.isNotNull(userId)) { + baseEntity.setUpdateBy(userId); } } } catch (Exception e) { @@ -65,7 +64,7 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { /** * 获取登录用户名 */ - private String getLoginUsername() { + private Long getLoginId() { LoginUser loginUser; try { loginUser = LoginHelper.getLoginUser(); @@ -73,7 +72,7 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { log.warn("自动注入警告 => 用户未登录"); return null; } - return ObjectUtil.isNotNull(loginUser) ? loginUser.getUsername() : null; + return ObjectUtil.isNotNull(loginUser) ? loginUser.getUserId() : null; } } diff --git a/ruoyi-common/ruoyi-common-satoken/pom.xml b/ruoyi-common/ruoyi-common-satoken/pom.xml index 14200d7e..0e416ed5 100644 --- a/ruoyi-common/ruoyi-common-satoken/pom.xml +++ b/ruoyi-common/ruoyi-common-satoken/pom.xml @@ -52,12 +52,6 @@ ruoyi-common-redis - - - cn.dev33 - sa-token-spring-boot-starter - - diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java index 8d435a36..afcff36c 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java @@ -1,7 +1,6 @@ package org.dromara.common.tenant.helper; import cn.dev33.satoken.context.SaHolder; -import cn.dev33.satoken.spring.SpringMVCUtil; import cn.hutool.core.convert.Convert; import com.alibaba.ttl.TransmittableThreadLocal; import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy; @@ -14,6 +13,7 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.satoken.utils.LoginHelper; +import org.springframework.web.context.request.RequestContextHolder; import java.util.function.Supplier; @@ -85,7 +85,7 @@ public class TenantHelper { * 如果为非web环境 那么只在当前线程内生效 */ public static void setDynamic(String tenantId) { - if (!SpringMVCUtil.isWeb()) { + if (!isWeb()) { TEMP_DYNAMIC_TENANT.set(tenantId); return; } @@ -100,7 +100,7 @@ public class TenantHelper { * 如果为非web环境 那么只在当前线程内生效 */ public static String getDynamic() { - if (!SpringMVCUtil.isWeb()) { + if (!isWeb()) { return TEMP_DYNAMIC_TENANT.get(); } String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); @@ -117,7 +117,7 @@ public class TenantHelper { * 清除动态租户 */ public static void clearDynamic() { - if (!SpringMVCUtil.isWeb()) { + if (!isWeb()) { TEMP_DYNAMIC_TENANT.remove(); return; } @@ -137,4 +137,11 @@ public class TenantHelper { return tenantId; } + /** + * 判断是否web环境 + */ + private static boolean isWeb() { + return RequestContextHolder.getRequestAttributes() != null; + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java index ca11ee98..9ef84b0f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java @@ -37,7 +37,7 @@ import java.util.List; @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/system/tenant") +@RequestMapping("/tenant") public class SysTenantController extends BaseController { private final ISysTenantService tenantService; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantPackageController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantPackageController.java index 585df02b..061f1947 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantPackageController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantPackageController.java @@ -34,7 +34,7 @@ import java.util.List; @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/system/tenant/package") +@RequestMapping("/tenant/package") public class SysTenantPackageController extends BaseController { private final ISysTenantPackageService tenantPackageService; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java deleted file mode 100644 index fca680a3..00000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.dromara.system.domain; - -import lombok.Data; - -/** - * 当前在线会话 - * - * @author Lion Li - */ - -@Data -public class SysUserOnline { - - /** - * 会话编号 - */ - private String tokenId; - - /** - * 部门名称 - */ - private String deptName; - - /** - * 用户名称 - */ - private String userName; - - /** - * 登录IP地址 - */ - private String ipaddr; - - /** - * 登录地址 - */ - private String loginLocation; - - /** - * 浏览器类型 - */ - private String browser; - - /** - * 操作系统 - */ - private String os; - - /** - * 登录时间 - */ - private Long loginTime; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java index b365a646..219e9888 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java @@ -127,6 +127,7 @@ public class RemoteUserServiceImpl implements RemoteUserService { */ private LoginUser buildLoginUser(SysUserVo userVo) { LoginUser loginUser = new LoginUser(); + loginUser.setTenantId(userVo.getTenantId()); loginUser.setUserId(userVo.getUserId()); loginUser.setDeptId(userVo.getDeptId()); loginUser.setUsername(userVo.getUserName()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDataScopeService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDataScopeService.java deleted file mode 100644 index 3f252f7e..00000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDataScopeService.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.dromara.system.service; - -/** - * 通用 数据权限 服务 - * - * @author Lion Li - */ -public interface ISysDataScopeService { - - /** - * 获取角色自定义权限 - * - * @param roleId 角色id - * @return 部门id组 - */ - String getRoleCustom(Long roleId); - - /** - * 获取部门及以下权限 - * - * @param deptId 部门id - * @return 部门id组 - */ - String getDeptAndChild(Long deptId); - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java deleted file mode 100644 index 6d5964f3..00000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.dromara.system.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.mybatis.helper.DataBaseHelper; -import org.dromara.system.domain.SysDept; -import org.dromara.system.domain.SysRoleDept; -import org.dromara.system.mapper.SysDeptMapper; -import org.dromara.system.mapper.SysRoleDeptMapper; -import org.dromara.system.service.ISysDataScopeService; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * 数据权限 实现 - *

- * 注意: 此Service内不允许调用标注`数据权限`注解的方法 - * 例如: deptMapper.selectList 此 selectList 方法标注了`数据权限`注解 会出现循环解析的问题 - * - * @author Lion Li - */ -@RequiredArgsConstructor -@Service("sdss") -public class SysDataScopeServiceImpl implements ISysDataScopeService { - - private final SysRoleDeptMapper roleDeptMapper; - private final SysDeptMapper deptMapper; - - @Override - public String getRoleCustom(Long roleId) { - List list = roleDeptMapper.selectList( - new LambdaQueryWrapper() - .select(SysRoleDept::getDeptId) - .eq(SysRoleDept::getRoleId, roleId)); - if (CollUtil.isNotEmpty(list)) { - return StreamUtils.join(list, rd -> Convert.toStr(rd.getDeptId())); - } - return null; - } - - @Override - public String getDeptAndChild(Long deptId) { - List deptList = deptMapper.selectList(new LambdaQueryWrapper() - .select(SysDept::getDeptId) - .apply(DataBaseHelper.findInSet(deptId, "ancestors"))); - List ids = StreamUtils.toList(deptList, SysDept::getDeptId); - ids.add(deptId); - List list = deptMapper.selectList(new LambdaQueryWrapper() - .select(SysDept::getDeptId) - .in(SysDept::getDeptId, ids)); - if (CollUtil.isNotEmpty(list)) { - return StreamUtils.join(list, d -> Convert.toStr(d.getDeptId())); - } - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java index 074000e3..74b1bf07 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java @@ -1,6 +1,5 @@ package org.dromara.system.service.impl; -import cn.dev33.satoken.context.SaHolder; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -8,13 +7,9 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; -import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -36,7 +31,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * 字典 业务层处理 @@ -45,7 +39,7 @@ import java.util.stream.Collectors; */ @RequiredArgsConstructor @Service -public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService { +public class SysDictTypeServiceImpl implements ISysDictTypeService { private final SysDictTypeMapper baseMapper; private final SysDictDataMapper dictDataMapper; @@ -209,60 +203,4 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService return !exist; } - /** - * 根据字典类型和字典值获取字典标签 - * - * @param dictType 字典类型 - * @param dictValue 字典值 - * @param separator 分隔符 - * @return 字典标签 - */ - @SuppressWarnings("unchecked cast") - @Override - public String getDictLabel(String dictType, String dictValue, String separator) { - // 优先从本地缓存获取 - List datas = (List) SaHolder.getStorage().get(CacheConstants.SYS_DICT_KEY + dictType); - if (ObjectUtil.isNull(datas)) { - datas = SpringUtils.getAopProxy(this).selectDictDataByType(dictType); - SaHolder.getStorage().set(CacheConstants.SYS_DICT_KEY + dictType, datas); - } - - Map map = StreamUtils.toMap(datas, SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel); - if (StringUtils.containsAny(dictValue, separator)) { - return Arrays.stream(dictValue.split(separator)) - .map(v -> map.getOrDefault(v, StringUtils.EMPTY)) - .collect(Collectors.joining(separator)); - } else { - return map.getOrDefault(dictValue, StringUtils.EMPTY); - } - } - - /** - * 根据字典类型和字典标签获取字典值 - * - * @param dictType 字典类型 - * @param dictLabel 字典标签 - * @param separator 分隔符 - * @return 字典值 - */ - @SuppressWarnings("unchecked cast") - @Override - public String getDictValue(String dictType, String dictLabel, String separator) { - // 优先从本地缓存获取 - List datas = (List) SaHolder.getStorage().get(CacheConstants.SYS_DICT_KEY + dictType); - if (ObjectUtil.isNull(datas)) { - datas = SpringUtils.getAopProxy(this).selectDictDataByType(dictType); - SaHolder.getStorage().set(CacheConstants.SYS_DICT_KEY + dictType, datas); - } - - Map map = StreamUtils.toMap(datas, SysDictDataVo::getDictLabel, SysDictDataVo::getDictValue); - if (StringUtils.containsAny(dictLabel, separator)) { - return Arrays.stream(dictLabel.split(separator)) - .map(l -> map.getOrDefault(l, StringUtils.EMPTY)) - .collect(Collectors.joining(separator)); - } else { - return map.getOrDefault(dictLabel, StringUtils.EMPTY); - } - } - } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java index aec97a96..ebea956f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java @@ -1,17 +1,11 @@ package org.dromara.system.service.impl; -import cn.hutool.http.useragent.UserAgent; -import cn.hutool.http.useragent.UserAgentUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.constant.Constants; import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.core.utils.ip.AddressUtils; -import org.dromara.common.log.event.LogininforEvent; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.SysLogininfor; @@ -19,11 +13,8 @@ import org.dromara.system.domain.bo.SysLogininforBo; import org.dromara.system.domain.vo.SysLogininforVo; import org.dromara.system.mapper.SysLogininforMapper; import org.dromara.system.service.ISysLogininforService; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import javax.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -41,49 +32,6 @@ public class SysLogininforServiceImpl implements ISysLogininforService { private final SysLogininforMapper baseMapper; - /** - * 记录登录信息 - * - * @param logininforEvent 登录事件 - */ - @Async - @EventListener - public void recordLogininfor(LogininforEvent logininforEvent) { - HttpServletRequest request = logininforEvent.getRequest(); - final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); - final String ip = ServletUtils.getClientIP(request); - - String address = AddressUtils.getRealAddressByIP(ip); - StringBuilder s = new StringBuilder(); - s.append(getBlock(ip)); - s.append(address); - s.append(getBlock(logininforEvent.getUsername())); - s.append(getBlock(logininforEvent.getStatus())); - s.append(getBlock(logininforEvent.getMessage())); - // 打印信息到日志 - log.info(s.toString(), logininforEvent.getArgs()); - // 获取客户端操作系统 - String os = userAgent.getOs().getName(); - // 获取客户端浏览器 - String browser = userAgent.getBrowser().getName(); - // 封装对象 - SysLogininforBo logininfor = new SysLogininforBo(); - logininfor.setTenantId(logininforEvent.getTenantId()); - logininfor.setUserName(logininforEvent.getUsername()); - logininfor.setIpaddr(ip); - logininfor.setLoginLocation(address); - logininfor.setBrowser(browser); - logininfor.setOs(os); - logininfor.setMsg(logininforEvent.getMessage()); - // 日志状态 - if (StringUtils.equalsAny(logininforEvent.getStatus(), Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) { - logininfor.setStatus(Constants.SUCCESS); - } else if (Constants.LOGIN_FAIL.equals(logininforEvent.getStatus())) { - logininfor.setStatus(Constants.FAIL); - } - // 插入数据 - insertLogininfor(logininfor); - } private String getBlock(Object msg) { if (msg == null) {