refactor: 目录结构调整和代码优化

This commit is contained in:
ray
2024-08-31 14:59:40 +08:00
parent f9e9dbcedd
commit 5a3694f2af
112 changed files with 644 additions and 572 deletions

View File

@@ -43,46 +43,61 @@
``` ```
youlai-boot youlai-boot
├── sql # SQL脚本 ├── sql # SQL脚本
├── mysql5 # MySQL5 脚本 ├── mysql5 # MySQL5 脚本
── mysql8 # MySQL8 脚本 ── mysql8 # MySQL8 脚本
├── src # 源码目录 ├── src # 源码目录
├── common # 公共模块 ├── common # 公共模块
├── config # 自动装配配置 │ │ ├── annotation # 注解定义
├── CorsConfig # 跨域共享配置 ├── base # 基础类
├── MybatisConfig # Mybatis 自动装配配置 ├── constant # 常量
├── RedisCacheConfig # Redis 缓存自动装配配置 ├── enums # 枚举类型
├── RedisConfig # Redis 自动装配配置 ├── exception # 异常处理
├── SecurityConfig # Spring Security 自动装配配置 ├── model # 数据模型
├── SwaggerConfig # API 接口文档配置 ├── result # 结果封装
── WebMvcConfig # WebMvc 配置 ── util # 工具类
├── WebSocketConfig # WebSocket 自动装配配置 ├── config # 自动装配配置
├── XxlJobConfig # XXL-JOB 自动装配配置 ├── CorsConfig # 跨域共享配置
├── controller # 控制层 │ │ ├── MybatisConfig # Mybatis 自动装配配置
├── converter # MapStruct 转换器 │ │ ├── RedisCacheConfig # Redis 缓存自动装配配置
├── filter # 过滤器 │ │ ├── RedisConfig # Redis 自动装配配置
├── RequestLogFilter # 请求日志过滤器 ├── SecurityConfig # Spring Security 自动装配配置
├── VerifyCodeFilter # 验证码过滤器 ├── SwaggerConfig # API 接口文档配置
├── model # 模型层 │ │ ├── WebMvcConfig # WebMvc 配置
├── bo # 业务对象 ├── WebSocketConfig # WebSocket 自动装配配置
── dto # 数据传输对象 ── XxlJobConfig # XXL-JOB 自动装配配置
├── entity # 实体对象 ├── core # 核心功能模块
├── form # 表单对象 ├── aspect # 切面
├── query # 查询参数对象 ├── LogAspect # 日志切面
── vo # 视图对象 ── RepeatSubmitAspect # 防重提交切面
├── mapper # 数据库访问层 │ │ ├── filter # 过滤器
├── plugin # 插件(可选) │ │ ├── RateLimiterFilter # 限流过滤器
── captcha # 验证码插件,用于生成验证码 ── RequestLogFilter # 请求日志过滤器
├── dupsubmit # 防重提交插件,用于防止表单重复提交 ├── handler # 处理器
├── mybatis # Mybatis 插件,数据权限、字段填充 ├── MyDataPermissionHandler # 数据权限处理器
── easyexcel # EasyExcel 插件Excel 文件的读写 ── MyMetaObjectHandler # 元对象字段填充处理器
── xxljob # XXL-JOB 插件,分布式任务调度和执行 ── security # Security 安全中心
├── security # Spring Security 安全配置和扩展 ├── platform # 平台基础设施模块
├── util # 工具类 ├── auth # 授权
├── JwtUtils # JWT 工具类,用于生成和解析 JWT ├── file # 文件处理
├── SecurityUtils # Spring Security 工具类,用于获取当前登录用户 ├── generator # 代码生成器
├── service # 业务逻辑层 │ │ ├── mail # 邮件处理
│ │ └── sms # 短信处理
│ ├── system # 系统模块
│ │ ├── controller # 控制层
│ │ ├── converter # MapStruct 转换器
│ │ ├── event # 事件处理
│ │ ├── handler # 处理器
│ │ ├── listener # 监听器
│ │ ├── model # 模型层
│ │ │ ├── bo # 业务对象
│ │ │ ├── dto # 数据传输对象
│ │ │ ├── entity # 实体对象
│ │ │ ├── form # 表单对象
│ │ │ ├── query # 查询参数对象
│ │ │ └── vo # 视图对象
│ │ ├── mapper # 数据库访问层
│ │ └── service # 业务逻辑层
│ └── YouLaiApplication # 启动类
└── end └── end
``` ```
@@ -111,7 +126,7 @@ youlai-boot
3. **启动项目** 3. **启动项目**
执行 [SystemApplication.java](src/main/java/com/youlai/system/SystemApplication.java) 的 main 方法完成后端项目启动; 执行 [SystemApplication.java](src/main/java/com/youlai/boot/YouLaiApplication.java) 的 main 方法完成后端项目启动;
访问接口文档地址 [http://localhost:8989/doc.html](http://localhost:8989/doc.html) 验证项目启动是否成功。 访问接口文档地址 [http://localhost:8989/doc.html](http://localhost:8989/doc.html) 验证项目启动是否成功。

View File

@@ -6,16 +6,18 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
/** /**
* 应用启动类
* *
* @author Ray * @author Ray
* @since 0.0.1
*/ */
@SpringBootApplication @SpringBootApplication
@ConfigurationPropertiesScan @ConfigurationPropertiesScan
@EnableScheduling @EnableScheduling
public class YouLaiBootApplication { public class YouLaiApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(YouLaiBootApplication.class, args); SpringApplication.run(YouLaiApplication.class, args);
} }
} }

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.common.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;
/** /**
* MP数据权限注解 * 数据权限注解
* *
* @author zc * @author zc
* @since 2.0.0 * @since 2.0.0

View File

@@ -13,7 +13,7 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Documented @Documented
public @interface LogAnnotation { public @interface Log {
String value() default ""; String value() default "";

View File

@@ -16,7 +16,7 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
@Inherited @Inherited
public @interface NoRepeat { public @interface RepeatSubmit {
/** /**
* 锁过期时间 * 锁过期时间

View File

@@ -9,7 +9,7 @@ import com.youlai.boot.core.security.exception.MyAccessDeniedHandler;
import com.youlai.boot.core.security.exception.MyAuthenticationEntryPoint; import com.youlai.boot.core.security.exception.MyAuthenticationEntryPoint;
import com.youlai.boot.core.security.filter.JwtValidationFilter; import com.youlai.boot.core.security.filter.JwtValidationFilter;
import com.youlai.boot.core.security.filter.CaptchaValidationFilter; import com.youlai.boot.core.security.filter.CaptchaValidationFilter;
import com.youlai.boot.system.service.SysConfigService; import com.youlai.boot.system.service.ConfigService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -45,7 +45,7 @@ public class SecurityConfig {
private final RedisTemplate<String, Object> redisTemplate; private final RedisTemplate<String, Object> redisTemplate;
private final CodeGenerator codeGenerator; private final CodeGenerator codeGenerator;
private final SecurityProperties securityProperties; private final SecurityProperties securityProperties;
private final SysConfigService sysConfigService; private final ConfigService configService;
@Bean @Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
@@ -66,7 +66,7 @@ public class SecurityConfig {
; ;
// 限流过滤器 // 限流过滤器
http.addFilterBefore(new RateLimiterFilter(redisTemplate, sysConfigService), UsernamePasswordAuthenticationFilter.class); http.addFilterBefore(new RateLimiterFilter(redisTemplate, configService), UsernamePasswordAuthenticationFilter.class);
// 验证码校验过滤器 // 验证码校验过滤器
http.addFilterBefore(new CaptchaValidationFilter(redisTemplate, codeGenerator), UsernamePasswordAuthenticationFilter.class); http.addFilterBefore(new CaptchaValidationFilter(redisTemplate, codeGenerator), UsernamePasswordAuthenticationFilter.class);
// JWT 校验过滤器 // JWT 校验过滤器

View File

@@ -5,7 +5,6 @@ import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import com.youlai.boot.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.system.event.UserConnectionEvent; import com.youlai.boot.system.event.UserConnectionEvent;
import com.youlai.boot.system.service.WebsocketService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;

View File

@@ -7,10 +7,9 @@ import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.http.useragent.UserAgentUtil;
import com.youlai.boot.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.util.IPUtils; import com.youlai.boot.common.util.IPUtils;
import com.youlai.boot.system.model.entity.SysLog; import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.common.annotation.LogAnnotation;
import com.youlai.boot.core.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import com.youlai.boot.system.service.SysLogService; import com.youlai.boot.system.service.LogService;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -32,15 +31,15 @@ import org.springframework.stereotype.Component;
@Slf4j @Slf4j
public class LogAspect { public class LogAspect {
private final SysLogService logService; private final LogService logService;
private final HttpServletRequest request; private final HttpServletRequest request;
@Pointcut("@annotation(com.youlai.boot.common.annotation.LogAnnotation)") @Pointcut("@annotation(com.youlai.boot.common.annotation.Log)")
public void logPointcut() { public void logPointcut() {
} }
@Around("logPointcut() && @annotation(logAnnotation)") @Around("logPointcut() && @annotation(logAnnotation)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint, LogAnnotation logAnnotation) throws Throwable { public Object logExecutionTime(ProceedingJoinPoint joinPoint, com.youlai.boot.common.annotation.Log logAnnotation) throws Throwable {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
Long userId = null; Long userId = null;
@@ -55,7 +54,7 @@ public class LogAspect {
long executionTime = timer.interval(); long executionTime = timer.interval();
// 创建日志记录 // 创建日志记录
SysLog log = new SysLog(); Log log = new Log();
log.setModule(logAnnotation.module()); log.setModule(logAnnotation.module());
log.setContent(logAnnotation.value()); log.setContent(logAnnotation.value());
log.setRequestUri(requestURI); log.setRequestUri(requestURI);

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.exception.BusinessException; import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.common.annotation.NoRepeat; import com.youlai.boot.common.annotation.RepeatSubmit;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -34,24 +34,24 @@ import java.util.concurrent.TimeUnit;
@Component @Component
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class NoRepeatAspect { public class RepeatSubmitAspect {
private final RedissonClient redissonClient; private final RedissonClient redissonClient;
/** /**
* 防重复提交切点 * 防重复提交切点
*/ */
@Pointcut("@annotation(noRepeat)") @Pointcut("@annotation(repeatSubmit)")
public void preventDuplicateSubmitPointCut(NoRepeat noRepeat) { public void preventDuplicateSubmitPointCut(RepeatSubmit repeatSubmit) {
log.info("定义防重复提交切点"); log.info("定义防重复提交切点");
} }
@Around("preventDuplicateSubmitPointCut(noRepeat)") @Around("preventDuplicateSubmitPointCut(repeatSubmit)")
public Object doAround(ProceedingJoinPoint pjp, NoRepeat noRepeat) throws Throwable { public Object doAround(ProceedingJoinPoint pjp, RepeatSubmit repeatSubmit) throws Throwable {
String resubmitLockKey = generateResubmitLockKey(); String resubmitLockKey = generateResubmitLockKey();
if (resubmitLockKey != null) { if (resubmitLockKey != null) {
int expire = noRepeat.expire(); // 防重提交锁过期时间 int expire = repeatSubmit.expire(); // 防重提交锁过期时间
RLock lock = redissonClient.getLock(resubmitLockKey); RLock lock = redissonClient.getLock(resubmitLockKey);
boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败直接返回 false boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败直接返回 false
if (!lockResult) { if (!lockResult) {

View File

@@ -4,7 +4,7 @@ import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.util.IPUtils; import com.youlai.boot.common.util.IPUtils;
import com.youlai.boot.common.util.ResponseUtils; import com.youlai.boot.common.util.ResponseUtils;
import com.youlai.boot.system.service.SysConfigService; import com.youlai.boot.system.service.ConfigService;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@@ -27,11 +27,11 @@ import java.util.concurrent.TimeUnit;
public class RateLimiterFilter extends OncePerRequestFilter { public class RateLimiterFilter extends OncePerRequestFilter {
private final RedisTemplate<String, Object> redisTemplate; private final RedisTemplate<String, Object> redisTemplate;
private final SysConfigService sysConfigService; private final ConfigService configService;
public RateLimiterFilter(RedisTemplate<String, Object> redisTemplate, SysConfigService sysConfigService) { public RateLimiterFilter(RedisTemplate<String, Object> redisTemplate, ConfigService configService) {
this.redisTemplate = redisTemplate; this.redisTemplate = redisTemplate;
this.sysConfigService = sysConfigService; this.configService = configService;
} }
/** /**
@@ -48,7 +48,7 @@ public class RateLimiterFilter extends OncePerRequestFilter {
if (count == null || count == 1) { if (count == null || count == 1) {
redisTemplate.expire(key,1, TimeUnit.SECONDS); redisTemplate.expire(key,1, TimeUnit.SECONDS);
} }
Object systemConfig = sysConfigService.getSystemConfig(RedisConstants.IP_QPS_THRESHOLD_LIMIT_KEY); Object systemConfig = configService.getSystemConfig(RedisConstants.IP_QPS_THRESHOLD_LIMIT_KEY);
long limit = 10; long limit = 10;
if(systemConfig != null){ if(systemConfig != null){
limit = Long.parseLong(systemConfig.toString()); limit = Long.parseLong(systemConfig.toString());

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.core.security.service;
import com.youlai.boot.core.security.model.SysUserDetails; import com.youlai.boot.core.security.model.SysUserDetails;
import com.youlai.boot.system.model.dto.UserAuthInfo; import com.youlai.boot.system.model.dto.UserAuthInfo;
import com.youlai.boot.system.service.SysUserService; import com.youlai.boot.system.service.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
@@ -21,7 +21,7 @@ import org.springframework.stereotype.Service;
@Slf4j @Slf4j
public class SysUserDetailsService implements UserDetailsService { public class SysUserDetailsService implements UserDetailsService {
private final SysUserService sysUserService; private final UserService userService;
/** /**
* 根据用户名获取用户信息 * 根据用户名获取用户信息
@@ -33,7 +33,7 @@ public class SysUserDetailsService implements UserDetailsService {
@Override @Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try { try {
UserAuthInfo userAuthInfo = sysUserService.getUserAuthInfo(username); UserAuthInfo userAuthInfo = userService.getUserAuthInfo(username);
if (userAuthInfo == null) { if (userAuthInfo == null) {
throw new UsernameNotFoundException(username); throw new UsernameNotFoundException(username);
} }

View File

@@ -1,11 +1,11 @@
package com.youlai.boot.infrastructure.auth.controller; package com.youlai.boot.platform.auth.controller;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.infrastructure.auth.service.AuthService; import com.youlai.boot.platform.auth.service.AuthService;
import com.youlai.boot.system.model.dto.CaptchaResult; import com.youlai.boot.system.model.dto.CaptchaResult;
import com.youlai.boot.system.model.dto.LoginResult; import com.youlai.boot.system.model.dto.LoginResult;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -30,7 +30,7 @@ public class AuthController {
@Operation(summary = "登录") @Operation(summary = "登录")
@PostMapping("/login") @PostMapping("/login")
@LogAnnotation(value = "登录", module = LogModuleEnum.LOGIN) @Log(value = "登录", module = LogModuleEnum.LOGIN)
public Result<LoginResult> login( public Result<LoginResult> login(
@Parameter(description = "用户名", example = "admin") @RequestParam String username, @Parameter(description = "用户名", example = "admin") @RequestParam String username,
@Parameter(description = "密码", example = "123456") @RequestParam String password @Parameter(description = "密码", example = "123456") @RequestParam String password
@@ -41,7 +41,7 @@ public class AuthController {
@Operation(summary = "注销") @Operation(summary = "注销")
@DeleteMapping("/logout") @DeleteMapping("/logout")
@LogAnnotation(value = "注销", module = LogModuleEnum.LOGIN) @Log(value = "注销", module = LogModuleEnum.LOGIN)
public Result<?> logout() { public Result<?> logout() {
authService.logout(); authService.logout();
return Result.success(); return Result.success();

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.auth.service; package com.youlai.boot.platform.auth.service;
import com.youlai.boot.system.model.dto.CaptchaResult; import com.youlai.boot.system.model.dto.CaptchaResult;
import com.youlai.boot.system.model.dto.LoginResult; import com.youlai.boot.system.model.dto.LoginResult;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.auth.service.impl; package com.youlai.boot.platform.auth.service.impl;
import cn.hutool.captcha.AbstractCaptcha; import cn.hutool.captcha.AbstractCaptcha;
import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.CaptchaUtil;
@@ -10,7 +10,7 @@ import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import com.youlai.boot.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.enums.CaptchaTypeEnum; import com.youlai.boot.common.enums.CaptchaTypeEnum;
import com.youlai.boot.infrastructure.auth.service.AuthService; import com.youlai.boot.platform.auth.service.AuthService;
import com.youlai.boot.system.model.dto.CaptchaResult; import com.youlai.boot.system.model.dto.CaptchaResult;
import com.youlai.boot.system.model.dto.LoginResult; import com.youlai.boot.system.model.dto.LoginResult;
import com.youlai.boot.config.property.CaptchaProperties; import com.youlai.boot.config.property.CaptchaProperties;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.file.controller; package com.youlai.boot.platform.file.controller;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.infrastructure.file.service.FileService; import com.youlai.boot.platform.file.service.FileService;
import com.youlai.boot.system.model.dto.FileInfo; import com.youlai.boot.system.model.dto.FileInfo;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.enums.ParameterIn;
@@ -30,7 +30,13 @@ public class FileController {
@PostMapping @PostMapping
@Operation(summary = "文件上传") @Operation(summary = "文件上传")
public Result<FileInfo> uploadFile( public Result<FileInfo> uploadFile(
@Parameter(name = "file", description = "表单文件对象", required = true, in = ParameterIn.DEFAULT, schema = @Schema(name = "file", format = "binary")) @Parameter(
name = "file",
description = "表单文件对象",
required = true,
in = ParameterIn.DEFAULT,
schema = @Schema(name = "file", format = "binary")
)
@RequestPart(value = "file") MultipartFile file @RequestPart(value = "file") MultipartFile file
) { ) {
FileInfo fileInfo = fileService.uploadFile(file); FileInfo fileInfo = fileService.uploadFile(file);

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.file.service; package com.youlai.boot.platform.file.service;
import com.youlai.boot.system.model.dto.FileInfo; import com.youlai.boot.system.model.dto.FileInfo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.file.service.impl; package com.youlai.boot.platform.file.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
@@ -8,7 +8,7 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectRequest;
import com.youlai.boot.infrastructure.file.service.FileService; import com.youlai.boot.platform.file.service.FileService;
import com.youlai.boot.system.model.dto.FileInfo; import com.youlai.boot.system.model.dto.FileInfo;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.Data; import lombok.Data;

View File

@@ -1,11 +1,11 @@
package com.youlai.boot.infrastructure.file.service.impl; package com.youlai.boot.platform.file.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.boot.infrastructure.file.service.FileService; import com.youlai.boot.platform.file.service.FileService;
import com.youlai.boot.system.model.dto.FileInfo; import com.youlai.boot.system.model.dto.FileInfo;
import io.minio.*; import io.minio.*;
import io.minio.errors.*; import io.minio.errors.*;

View File

@@ -1,16 +1,16 @@
package com.youlai.boot.infrastructure.generator.controller; package com.youlai.boot.platform.generator.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.config.property.GeneratorProperties; import com.youlai.boot.config.property.GeneratorProperties;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.infrastructure.generator.service.GeneratorService; import com.youlai.boot.platform.generator.service.GeneratorService;
import com.youlai.boot.infrastructure.generator.model.form.GenConfigForm; import com.youlai.boot.platform.generator.model.form.GenConfigForm;
import com.youlai.boot.system.model.query.TablePageQuery; import com.youlai.boot.system.model.query.TablePageQuery;
import com.youlai.boot.system.model.vo.GeneratorPreviewVO; import com.youlai.boot.system.model.vo.GeneratorPreviewVO;
import com.youlai.boot.system.model.vo.TablePageVO; import com.youlai.boot.system.model.vo.TablePageVO;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -41,7 +41,7 @@ public class GeneratorController {
@Operation(summary = "获取数据表分页列表") @Operation(summary = "获取数据表分页列表")
@GetMapping("/table/page") @GetMapping("/table/page")
@LogAnnotation(value = "代码生成分页列表", module = LogModuleEnum.OTHER) @Log(value = "代码生成分页列表", module = LogModuleEnum.OTHER)
public PageResult<TablePageVO> getTablePage( public PageResult<TablePageVO> getTablePage(
TablePageQuery queryParams TablePageQuery queryParams
) { ) {
@@ -60,7 +60,7 @@ public class GeneratorController {
@Operation(summary = "保存代码生成配置") @Operation(summary = "保存代码生成配置")
@PostMapping("/{tableName}/config") @PostMapping("/{tableName}/config")
@LogAnnotation(value = "生成代码", module = LogModuleEnum.OTHER) @Log(value = "生成代码", module = LogModuleEnum.OTHER)
public Result<?> saveGenConfig(@RequestBody GenConfigForm formData) { public Result<?> saveGenConfig(@RequestBody GenConfigForm formData) {
generatorService.saveGenConfig(formData); generatorService.saveGenConfig(formData);
return Result.success(); return Result.success();
@@ -77,7 +77,7 @@ public class GeneratorController {
@Operation(summary = "获取预览生成代码") @Operation(summary = "获取预览生成代码")
@GetMapping("/{tableName}/preview") @GetMapping("/{tableName}/preview")
@LogAnnotation(value = "预览生成代码", module = LogModuleEnum.OTHER) @Log(value = "预览生成代码", module = LogModuleEnum.OTHER)
public Result<List<GeneratorPreviewVO>> getTablePreviewData(@PathVariable String tableName) { public Result<List<GeneratorPreviewVO>> getTablePreviewData(@PathVariable String tableName) {
List<GeneratorPreviewVO> list = generatorService.getTablePreviewData(tableName); List<GeneratorPreviewVO> list = generatorService.getTablePreviewData(tableName);
return Result.success(list); return Result.success(list);
@@ -85,7 +85,7 @@ public class GeneratorController {
@Operation(summary = "下载代码") @Operation(summary = "下载代码")
@GetMapping("/{tableName}/download") @GetMapping("/{tableName}/download")
@LogAnnotation(value = "下载代码", module = LogModuleEnum.OTHER) @Log(value = "下载代码", module = LogModuleEnum.OTHER)
public void downloadZip(HttpServletResponse response, @PathVariable String tableName) throws IOException { public void downloadZip(HttpServletResponse response, @PathVariable String tableName) throws IOException {
String[] tableNames = tableName.split(","); String[] tableNames = tableName.split(",");
byte[] data = generatorService.downloadCode(tableNames); byte[] data = generatorService.downloadCode(tableNames);

View File

@@ -1,10 +1,10 @@
package com.youlai.boot.infrastructure.generator.mapper; package com.youlai.boot.platform.generator.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.ColumnMetaData; import com.youlai.boot.system.model.bo.ColumnMetaData;
import com.youlai.boot.system.model.bo.TableMetaData; import com.youlai.boot.system.model.bo.TableMetaData;
import com.youlai.boot.system.model.entity.SysDept; import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.system.model.query.TablePageQuery; import com.youlai.boot.system.model.query.TablePageQuery;
import com.youlai.boot.system.model.vo.TablePageVO; import com.youlai.boot.system.model.vo.TablePageVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -13,7 +13,7 @@ import java.util.List;
@Mapper @Mapper
public interface DatabaseMapper extends BaseMapper<SysDept> { public interface DatabaseMapper extends BaseMapper<Dept> {
Page<TablePageVO> getTablePage(Page<TablePageVO> page, TablePageQuery queryParams); Page<TablePageVO> getTablePage(Page<TablePageVO> page, TablePageQuery queryParams);

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.generator.mapper; package com.youlai.boot.platform.generator.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.generator.mapper; package com.youlai.boot.platform.generator.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig; import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.generator.model.entity; package com.youlai.boot.platform.generator.model.entity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.generator.model.entity; package com.youlai.boot.platform.generator.model.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.generator.model.form; package com.youlai.boot.platform.generator.model.form;
import com.youlai.boot.common.enums.FormTypeEnum; import com.youlai.boot.common.enums.FormTypeEnum;
import com.youlai.boot.common.enums.QueryTypeEnum; import com.youlai.boot.common.enums.QueryTypeEnum;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.generator.service; package com.youlai.boot.platform.generator.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
/** /**
* 代码生成配置接口 * 代码生成配置接口

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.generator.service; package com.youlai.boot.platform.generator.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig; import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
/** /**
* 代码生成配置接口 * 代码生成配置接口

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.generator.service; package com.youlai.boot.platform.generator.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.infrastructure.generator.model.form.GenConfigForm; import com.youlai.boot.platform.generator.model.form.GenConfigForm;
import com.youlai.boot.system.model.query.TablePageQuery; import com.youlai.boot.system.model.query.TablePageQuery;
import com.youlai.boot.system.model.vo.GeneratorPreviewVO; import com.youlai.boot.system.model.vo.GeneratorPreviewVO;
import com.youlai.boot.system.model.vo.TablePageVO; import com.youlai.boot.system.model.vo.TablePageVO;

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.infrastructure.generator.service.impl; package com.youlai.boot.platform.generator.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.infrastructure.generator.mapper.GenConfigMapper; import com.youlai.boot.platform.generator.mapper.GenConfigMapper;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.infrastructure.generator.service.GenConfigService; import com.youlai.boot.platform.generator.service.GenConfigService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.infrastructure.generator.service.impl; package com.youlai.boot.platform.generator.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.infrastructure.generator.mapper.GenFieldConfigMapper; import com.youlai.boot.platform.generator.mapper.GenFieldConfigMapper;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig; import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
import com.youlai.boot.infrastructure.generator.service.GenFieldConfigService; import com.youlai.boot.platform.generator.service.GenFieldConfigService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.generator.service.impl; package com.youlai.boot.platform.generator.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
@@ -11,26 +11,26 @@ import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil; import cn.hutool.extra.template.TemplateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.YouLaiBootApplication; import com.youlai.boot.YouLaiApplication;
import com.youlai.boot.common.enums.FormTypeEnum; import com.youlai.boot.common.enums.FormTypeEnum;
import com.youlai.boot.common.enums.JavaTypeEnum; import com.youlai.boot.common.enums.JavaTypeEnum;
import com.youlai.boot.common.enums.QueryTypeEnum; import com.youlai.boot.common.enums.QueryTypeEnum;
import com.youlai.boot.config.property.GeneratorProperties; import com.youlai.boot.config.property.GeneratorProperties;
import com.youlai.boot.infrastructure.generator.service.GenConfigService; import com.youlai.boot.platform.generator.service.GenConfigService;
import com.youlai.boot.infrastructure.generator.service.GenFieldConfigService; import com.youlai.boot.platform.generator.service.GenFieldConfigService;
import com.youlai.boot.infrastructure.generator.service.GeneratorService; import com.youlai.boot.platform.generator.service.GeneratorService;
import com.youlai.boot.system.converter.GenConfigConverter; import com.youlai.boot.system.converter.GenConfigConverter;
import com.youlai.boot.common.exception.BusinessException; import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.infrastructure.generator.mapper.DatabaseMapper; import com.youlai.boot.platform.generator.mapper.DatabaseMapper;
import com.youlai.boot.system.model.bo.ColumnMetaData; import com.youlai.boot.system.model.bo.ColumnMetaData;
import com.youlai.boot.system.model.bo.TableMetaData; import com.youlai.boot.system.model.bo.TableMetaData;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig; import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
import com.youlai.boot.infrastructure.generator.model.form.GenConfigForm; import com.youlai.boot.platform.generator.model.form.GenConfigForm;
import com.youlai.boot.system.model.query.TablePageQuery; import com.youlai.boot.system.model.query.TablePageQuery;
import com.youlai.boot.system.model.vo.GeneratorPreviewVO; import com.youlai.boot.system.model.vo.GeneratorPreviewVO;
import com.youlai.boot.system.model.vo.TablePageVO; import com.youlai.boot.system.model.vo.TablePageVO;
import com.youlai.boot.system.service.SysMenuService; import com.youlai.boot.system.service.MenuService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@@ -58,7 +58,7 @@ public class GeneratorServiceImpl implements GeneratorService {
private final GenConfigService genConfigService; private final GenConfigService genConfigService;
private final GenFieldConfigService genFieldConfigService; private final GenFieldConfigService genFieldConfigService;
private final GenConfigConverter genConfigConverter; private final GenConfigConverter genConfigConverter;
private final SysMenuService menuService; private final MenuService menuService;
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String springProfilesActive; private String springProfilesActive;
@@ -112,7 +112,7 @@ public class GeneratorServiceImpl implements GeneratorService {
String entityName = StrUtil.toCamelCase(StrUtil.removePrefix(tableName, tableName.split("_")[0])); String entityName = StrUtil.toCamelCase(StrUtil.removePrefix(tableName, tableName.split("_")[0]));
genConfig.setEntityName(entityName); genConfig.setEntityName(entityName);
String packageName = YouLaiBootApplication.class.getPackageName(); String packageName = YouLaiApplication.class.getPackageName();
genConfig.setPackageName(StrUtil.subBefore(packageName, ".", true)); genConfig.setPackageName(StrUtil.subBefore(packageName, ".", true));
genConfig.setModuleName(StrUtil.subAfter(packageName, ".", true)); genConfig.setModuleName(StrUtil.subAfter(packageName, ".", true));

View File

@@ -0,0 +1,14 @@
package com.youlai.boot.platform.mail.controller;
import org.springframework.web.bind.annotation.*;
/**
* 邮件控制层
*
* @author Ray
* @since 2.10.0
*/
@RestController
public class MailController {
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.mail.service; package com.youlai.boot.platform.mail.service;
/** /**
* 邮件服务接口层 * 邮件服务接口层
@@ -16,7 +16,7 @@ public interface MailService {
* @param subject 邮件主题 * @param subject 邮件主题
* @param text 邮件内容 * @param text 邮件内容
*/ */
boolean sendSimpleMail(String to, String subject, String text) ; void sendMail(String to, String subject, String text) ;
/** /**
* 发送带附件的邮件 * 发送带附件的邮件
@@ -26,6 +26,6 @@ public interface MailService {
* @param text 邮件内容 * @param text 邮件内容
* @param filePath 附件路径 * @param filePath 附件路径
*/ */
boolean sendMailWithAttachment(String to, String subject, String text, String filePath); void sendMailWithAttachment(String to, String subject, String text, String filePath);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.infrastructure.mail.service.impl; package com.youlai.boot.platform.mail.service.impl;
import com.youlai.boot.config.property.MailProperties; import com.youlai.boot.config.property.MailProperties;
import com.youlai.boot.infrastructure.mail.service.MailService; import com.youlai.boot.platform.mail.service.MailService;
import jakarta.mail.MessagingException; import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -37,7 +37,7 @@ public class MailServiceImpl implements MailService {
* @param text 邮件内容 * @param text 邮件内容
*/ */
@Override @Override
public boolean sendSimpleMail(String to, String subject, String text) { public void sendMail(String to, String subject, String text) {
try { try {
SimpleMailMessage message = new SimpleMailMessage(); SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(mailProperties.getFrom()); message.setFrom(mailProperties.getFrom());
@@ -45,11 +45,8 @@ public class MailServiceImpl implements MailService {
message.setSubject(subject); message.setSubject(subject);
message.setText(text); message.setText(text);
mailSender.send(message); mailSender.send(message);
return true;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
log.error("发送邮件失败{}", e.getMessage()); log.error("发送邮件失败{}", e.getMessage());
return false;
} }
} }
@@ -62,7 +59,7 @@ public class MailServiceImpl implements MailService {
* @param filePath 附件路径 * @param filePath 附件路径
*/ */
@Override @Override
public boolean sendMailWithAttachment(String to, String subject, String text, String filePath) { public void sendMailWithAttachment(String to, String subject, String text, String filePath) {
MimeMessage message = mailSender.createMimeMessage(); MimeMessage message = mailSender.createMimeMessage();
try { try {
MimeMessageHelper helper = new MimeMessageHelper(message, true); MimeMessageHelper helper = new MimeMessageHelper(message, true);
@@ -75,9 +72,8 @@ public class MailServiceImpl implements MailService {
helper.addAttachment(file.getFilename(), file); helper.addAttachment(file.getFilename(), file);
mailSender.send(message); mailSender.send(message);
return true;
} catch (MessagingException e) { } catch (MessagingException e) {
return false; log.error("发送邮件失败{}", e.getMessage());
} }
} }
} }

View File

@@ -0,0 +1,22 @@
package com.youlai.boot.platform.sms.controller;
import com.youlai.boot.platform.sms.service.SmsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 短信控制层
*
* @author Ray
* @since 2.10.0
*/
public class SmsController {
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.sms.service; package com.youlai.boot.platform.sms.service;
/** /**
* 短信服务接口层 * 短信服务接口层

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.infrastructure.sms.service.impl; package com.youlai.boot.platform.sms.service.impl;
import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse; import com.aliyuncs.CommonResponse;
@@ -9,7 +9,7 @@ import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType; import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.DefaultProfile;
import com.youlai.boot.config.property.AliyunSmsProperties; import com.youlai.boot.config.property.AliyunSmsProperties;
import com.youlai.boot.infrastructure.sms.service.SmsService; import com.youlai.boot.platform.sms.service.SmsService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.controller; package com.youlai.boot.platform.websocket.controller;
import com.youlai.boot.system.model.dto.ChatMessage; import com.youlai.boot.system.model.dto.ChatMessage;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.service; package com.youlai.boot.platform.websocket.service;
public interface WebsocketService { public interface WebsocketService {

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.service.impl; package com.youlai.boot.platform.websocket.service.impl;
import com.youlai.boot.system.event.UserConnectionEvent; import com.youlai.boot.system.event.UserConnectionEvent;
import com.youlai.boot.system.service.WebsocketService; import com.youlai.boot.platform.websocket.service.WebsocketService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;

View File

@@ -6,7 +6,7 @@ import com.youlai.boot.common.result.Result;
import com.youlai.boot.system.model.form.ConfigForm; import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery; import com.youlai.boot.system.model.query.ConfigPageQuery;
import com.youlai.boot.system.model.vo.ConfigVO; import com.youlai.boot.system.model.vo.ConfigVO;
import com.youlai.boot.system.service.SysConfigService; import com.youlai.boot.system.service.ConfigService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -29,15 +29,15 @@ import org.springframework.security.access.prepost.PreAuthorize;
@RequiredArgsConstructor @RequiredArgsConstructor
@Tag(name = "10.系统配置") @Tag(name = "10.系统配置")
@RequestMapping("/api/v1/config") @RequestMapping("/api/v1/config")
public class SysConfigController { public class ConfigController {
private final SysConfigService sysConfigService; private final ConfigService configService;
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "系统配置分页列表") @Operation(summary = "系统配置分页列表")
@PreAuthorize("@ss.hasPerm('sys:config:query')") @PreAuthorize("@ss.hasPerm('sys:config:query')")
public PageResult<ConfigVO> page(@ParameterObject ConfigPageQuery configPageQuery) { public PageResult<ConfigVO> page(@ParameterObject ConfigPageQuery configPageQuery) {
IPage<ConfigVO> result = sysConfigService.page(configPageQuery); IPage<ConfigVO> result = configService.page(configPageQuery);
return PageResult.success(result); return PageResult.success(result);
} }
@@ -45,7 +45,7 @@ public class SysConfigController {
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:config:add')") @PreAuthorize("@ss.hasPerm('sys:config:add')")
public Result<?> save(@RequestBody @Valid ConfigForm configForm) { public Result<?> save(@RequestBody @Valid ConfigForm configForm) {
return Result.judge(sysConfigService.save(configForm)); return Result.judge(configService.save(configForm));
} }
@Operation(summary = "获取系统配置表单数据") @Operation(summary = "获取系统配置表单数据")
@@ -53,7 +53,7 @@ public class SysConfigController {
public Result<ConfigForm> getConfigForm( public Result<ConfigForm> getConfigForm(
@Parameter(description = "系统配置ID") @PathVariable Long id @Parameter(description = "系统配置ID") @PathVariable Long id
) { ) {
ConfigForm formData = sysConfigService.getConfigFormData(id); ConfigForm formData = configService.getConfigFormData(id);
return Result.success(formData); return Result.success(formData);
} }
@@ -61,21 +61,21 @@ public class SysConfigController {
@PatchMapping @PatchMapping
@PreAuthorize("@ss.hasPerm('sys:config:refresh')") @PreAuthorize("@ss.hasPerm('sys:config:refresh')")
public Result<ConfigForm> refreshCache() { public Result<ConfigForm> refreshCache() {
return Result.judge(sysConfigService.refreshCache()); return Result.judge(configService.refreshCache());
} }
@PutMapping(value = "/{id}") @PutMapping(value = "/{id}")
@Operation(summary = "修改系统配置") @Operation(summary = "修改系统配置")
@PreAuthorize("@ss.hasPerm('sys:config:update')") @PreAuthorize("@ss.hasPerm('sys:config:update')")
public Result<?> update(@Valid @PathVariable Long id, @RequestBody ConfigForm configForm) { public Result<?> update(@Valid @PathVariable Long id, @RequestBody ConfigForm configForm) {
return Result.judge(sysConfigService.edit(id, configForm)); return Result.judge(configService.edit(id, configForm));
} }
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Operation(summary = "删除系统配置") @Operation(summary = "删除系统配置")
@PreAuthorize("@ss.hasPerm('sys:config:delete')") @PreAuthorize("@ss.hasPerm('sys:config:delete')")
public Result<?> delete(@PathVariable Long id) { public Result<?> delete(@PathVariable Long id) {
return Result.judge(sysConfigService.delete(id)); return Result.judge(configService.delete(id));
} }
} }

View File

@@ -1,14 +1,14 @@
package com.youlai.boot.system.controller; package com.youlai.boot.system.controller;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.annotation.NoRepeat; import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.system.model.form.DeptForm; import com.youlai.boot.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery; import com.youlai.boot.system.model.query.DeptQuery;
import com.youlai.boot.system.model.vo.DeptVO; import com.youlai.boot.system.model.vo.DeptVO;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.SysDeptService; import com.youlai.boot.system.service.DeptService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -29,13 +29,13 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/api/v1/dept") @RequestMapping("/api/v1/dept")
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysDeptController { public class DeptController {
private final SysDeptService deptService; private final DeptService deptService;
@Operation(summary = "部门列表") @Operation(summary = "部门列表")
@GetMapping @GetMapping
@LogAnnotation( value = "部门列表",module = LogModuleEnum.DEPT) @Log( value = "部门列表",module = LogModuleEnum.DEPT)
public Result<List<DeptVO>> getDeptList( public Result<List<DeptVO>> getDeptList(
DeptQuery queryParams DeptQuery queryParams
) { ) {
@@ -53,7 +53,7 @@ public class SysDeptController {
@Operation(summary = "新增部门") @Operation(summary = "新增部门")
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:dept:add')") @PreAuthorize("@ss.hasPerm('sys:dept:add')")
@NoRepeat @RepeatSubmit
public Result<?> saveDept( public Result<?> saveDept(
@Valid @RequestBody DeptForm formData @Valid @RequestBody DeptForm formData
) { ) {

View File

@@ -7,10 +7,10 @@ import com.youlai.boot.common.result.Result;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.annotation.NoRepeat; import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.SysDictService; import com.youlai.boot.system.service.DictService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -30,13 +30,13 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/api/v1/dict") @RequestMapping("/api/v1/dict")
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysDictController { public class DictController {
private final SysDictService dictService; private final DictService dictService;
@Operation(summary = "字典分页列表") @Operation(summary = "字典分页列表")
@GetMapping("/page") @GetMapping("/page")
@LogAnnotation( value = "字典分页列表",module = LogModuleEnum.DICT) @Log( value = "字典分页列表",module = LogModuleEnum.DICT)
public PageResult<DictPageVO> getDictPage( public PageResult<DictPageVO> getDictPage(
DictPageQuery queryParams DictPageQuery queryParams
) { ) {
@@ -72,7 +72,7 @@ public class SysDictController {
@Operation(summary = "新增字典") @Operation(summary = "新增字典")
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:dict:add')") @PreAuthorize("@ss.hasPerm('sys:dict:add')")
@NoRepeat @RepeatSubmit
public Result<?> saveDict(@RequestBody DictForm formData) { public Result<?> saveDict(@RequestBody DictForm formData) {
boolean result = dictService.saveDict(formData); boolean result = dictService.saveDict(formData);
return Result.judge(result); return Result.judge(result);

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO; import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO; import com.youlai.boot.system.model.vo.VisitStatsVO;
import com.youlai.boot.system.model.vo.VisitTrendVO; import com.youlai.boot.system.model.vo.VisitTrendVO;
import com.youlai.boot.system.service.SysLogService; import com.youlai.boot.system.service.LogService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,9 +28,9 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/api/v1/logs") @RequestMapping("/api/v1/logs")
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysLogController { public class LogController {
private final SysLogService logService; private final LogService logService;
@Operation(summary = "日志分页列表") @Operation(summary = "日志分页列表")
@GetMapping("/page") @GetMapping("/page")

View File

@@ -2,15 +2,15 @@ package com.youlai.boot.system.controller;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.annotation.NoRepeat; import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.system.model.form.MenuForm; import com.youlai.boot.system.model.form.MenuForm;
import com.youlai.boot.system.model.query.MenuQuery; import com.youlai.boot.system.model.query.MenuQuery;
import com.youlai.boot.system.model.vo.MenuVO; import com.youlai.boot.system.model.vo.MenuVO;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.vo.RouteVO; import com.youlai.boot.system.model.vo.RouteVO;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.core.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import com.youlai.boot.system.service.SysMenuService; import com.youlai.boot.system.service.MenuService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -33,13 +33,13 @@ import java.util.Set;
@RequestMapping("/api/v1/menus") @RequestMapping("/api/v1/menus")
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class SysMenuController { public class MenuController {
private final SysMenuService menuService; private final MenuService menuService;
@Operation(summary = "菜单列表") @Operation(summary = "菜单列表")
@GetMapping @GetMapping
@LogAnnotation( value = "菜单列表",module = LogModuleEnum.MENU) @Log( value = "菜单列表",module = LogModuleEnum.MENU)
public Result<List<MenuVO>> listMenus(MenuQuery queryParams) { public Result<List<MenuVO>> listMenus(MenuQuery queryParams) {
List<MenuVO> menuList = menuService.listMenus(queryParams); List<MenuVO> menuList = menuService.listMenus(queryParams);
return Result.success(menuList); return Result.success(menuList);
@@ -75,7 +75,7 @@ public class SysMenuController {
@Operation(summary = "新增菜单") @Operation(summary = "新增菜单")
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:menu:add')") @PreAuthorize("@ss.hasPerm('sys:menu:add')")
@NoRepeat @RepeatSubmit
public Result<?> addMenu(@RequestBody MenuForm menuForm) { public Result<?> addMenu(@RequestBody MenuForm menuForm) {
boolean result = menuService.saveMenu(menuForm); boolean result = menuService.saveMenu(menuForm);
return Result.judge(result); return Result.judge(result);

View File

@@ -2,15 +2,15 @@ package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.annotation.NoRepeat; import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.boot.system.model.form.RoleForm; import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery; import com.youlai.boot.system.model.query.RolePageQuery;
import com.youlai.boot.system.model.vo.RolePageVO; import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.SysRoleService; import com.youlai.boot.system.service.RoleService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -33,13 +33,13 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/api/v1/roles") @RequestMapping("/api/v1/roles")
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysRoleController { public class RoleController {
private final SysRoleService roleService; private final RoleService roleService;
@Operation(summary = "角色分页列表") @Operation(summary = "角色分页列表")
@GetMapping("/page") @GetMapping("/page")
@LogAnnotation( value = "角色分页列表",module = LogModuleEnum.ROLE) @Log( value = "角色分页列表",module = LogModuleEnum.ROLE)
public PageResult<RolePageVO> getRolePage( public PageResult<RolePageVO> getRolePage(
RolePageQuery queryParams RolePageQuery queryParams
) { ) {
@@ -57,7 +57,7 @@ public class SysRoleController {
@Operation(summary = "新增角色") @Operation(summary = "新增角色")
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:role:add')") @PreAuthorize("@ss.hasPerm('sys:role:add')")
@NoRepeat @RepeatSubmit
public Result<?> addRole(@Valid @RequestBody RoleForm roleForm) { public Result<?> addRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = roleService.saveRole(roleForm); boolean result = roleService.saveRole(roleForm);
return Result.judge(result); return Result.judge(result);

View File

@@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.ExcelWriter;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.form.*; import com.youlai.boot.system.model.form.*;
import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result; import com.youlai.boot.common.result.Result;
@@ -13,15 +14,14 @@ import com.youlai.boot.core.security.util.SecurityUtils;
import com.youlai.boot.common.util.ExcelUtils; import com.youlai.boot.common.util.ExcelUtils;
import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.system.model.dto.UserImportDTO; import com.youlai.boot.system.model.dto.UserImportDTO;
import com.youlai.boot.common.annotation.NoRepeat; import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.system.listener.UserImportListener; import com.youlai.boot.system.listener.UserImportListener;
import com.youlai.boot.system.model.entity.SysUser;
import com.youlai.boot.system.model.query.UserPageQuery; import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.dto.UserExportDTO; import com.youlai.boot.system.model.dto.UserExportDTO;
import com.youlai.boot.system.model.vo.UserInfoVO; import com.youlai.boot.system.model.vo.UserInfoVO;
import com.youlai.boot.system.model.vo.UserPageVO; import com.youlai.boot.system.model.vo.UserPageVO;
import com.youlai.boot.common.annotation.LogAnnotation; import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.SysUserService; import com.youlai.boot.system.service.UserService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -52,13 +52,13 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/api/v1/users") @RequestMapping("/api/v1/users")
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysUserController { public class UserController {
private final SysUserService userService; private final UserService userService;
@Operation(summary = "用户分页列表") @Operation(summary = "用户分页列表")
@GetMapping("/page") @GetMapping("/page")
@LogAnnotation(value = "用户分页列表", module = LogModuleEnum.USER) @Log(value = "用户分页列表", module = LogModuleEnum.USER)
public PageResult<UserPageVO> listPagedUsers( public PageResult<UserPageVO> listPagedUsers(
UserPageQuery queryParams UserPageQuery queryParams
) { ) {
@@ -69,7 +69,7 @@ public class SysUserController {
@Operation(summary = "新增用户") @Operation(summary = "新增用户")
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:user:add')") @PreAuthorize("@ss.hasPerm('sys:user:add')")
@NoRepeat @RepeatSubmit
public Result<?> saveUser( public Result<?> saveUser(
@RequestBody @Valid UserForm userForm @RequestBody @Valid UserForm userForm
) { ) {
@@ -112,9 +112,9 @@ public class SysUserController {
@Parameter(description = "用户ID") @PathVariable Long userId, @Parameter(description = "用户ID") @PathVariable Long userId,
@Parameter(description = "用户状态(1:启用;0:禁用)") @RequestParam Integer status @Parameter(description = "用户状态(1:启用;0:禁用)") @RequestParam Integer status
) { ) {
boolean result = userService.update(new LambdaUpdateWrapper<SysUser>() boolean result = userService.update(new LambdaUpdateWrapper<User>()
.eq(SysUser::getId, userId) .eq(User::getId, userId)
.set(SysUser::getStatus, status) .set(User::getStatus, status)
); );
return Result.judge(result); return Result.judge(result);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysConfig; import com.youlai.boot.system.model.entity.Config;
import com.youlai.boot.system.model.vo.ConfigVO; import com.youlai.boot.system.model.vo.ConfigVO;
import com.youlai.boot.system.model.form.ConfigForm; import com.youlai.boot.system.model.form.ConfigForm;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@@ -15,9 +15,9 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface ConfigConverter { public interface ConfigConverter {
Page<ConfigVO> toPageVo(Page<SysConfig> page); Page<ConfigVO> toPageVo(Page<Config> page);
SysConfig toEntity(ConfigForm configForm); Config toEntity(ConfigForm configForm);
ConfigForm toForm(SysConfig entity); ConfigForm toForm(Config entity);
} }

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.youlai.boot.system.model.entity.SysDept; import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.system.model.vo.DeptVO; import com.youlai.boot.system.model.vo.DeptVO;
import com.youlai.boot.system.model.form.DeptForm; import com.youlai.boot.system.model.form.DeptForm;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@@ -14,10 +14,10 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DeptConverter { public interface DeptConverter {
DeptForm toForm(SysDept entity); DeptForm toForm(Dept entity);
DeptVO toVo(SysDept entity); DeptVO toVo(Dept entity);
SysDept toEntity(DeptForm deptForm); Dept toEntity(DeptForm deptForm);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysDict; import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@@ -15,9 +15,9 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DictConverter { public interface DictConverter {
Page<DictPageVO> toPageVo(Page<SysDict> page); Page<DictPageVO> toPageVo(Page<Dict> page);
DictForm toForm(SysDict entity); DictForm toForm(Dict entity);
SysDict toEntity(DictForm entity); Dict toEntity(DictForm entity);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysDictItem; import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
@@ -20,20 +20,20 @@ import java.util.List;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DictItemConverter { public interface DictItemConverter {
Page<DictPageVO> toPageVo(Page<SysDictItem> page); Page<DictPageVO> toPageVo(Page<DictItem> page);
DictForm toForm(SysDictItem entity); DictForm toForm(DictItem entity);
SysDictItem toEntity(DictForm.DictItem dictItems); DictItem toEntity(DictForm.DictItem dictItems);
List<SysDictItem> toEntity(List<DictForm.DictItem> dictItems); List<DictItem> toEntity(List<DictForm.DictItem> dictItems);
DictForm.DictItem toDictItem(SysDictItem entity); DictForm.DictItem toDictItem(DictItem entity);
List<DictForm.DictItem> toDictItem(List<SysDictItem> entities); List<DictForm.DictItem> toDictItem(List<DictItem> entities);
@Mappings({ @Mappings({
@Mapping(target = "value", source = "value"), @Mapping(target = "value", source = "value"),
@Mapping(target = "label", source = "name") @Mapping(target = "label", source = "name")
}) })
Option<Long> toOption(SysDictItem dictItem); Option<Long> toOption(DictItem dictItem);
List<Option<Long>> toOption(List<SysDictItem> dictItems); List<Option<Long>> toOption(List<DictItem> dictItems);
} }

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig; import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
import com.youlai.boot.infrastructure.generator.model.form.GenConfigForm; import com.youlai.boot.platform.generator.model.form.GenConfigForm;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.youlai.boot.system.model.entity.SysMenu; import com.youlai.boot.system.model.entity.Menu;
import com.youlai.boot.system.model.vo.MenuVO; import com.youlai.boot.system.model.vo.MenuVO;
import com.youlai.boot.system.model.form.MenuForm; import com.youlai.boot.system.model.form.MenuForm;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@@ -15,12 +15,12 @@ import org.mapstruct.Mapping;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface MenuConverter { public interface MenuConverter {
MenuVO toVo(SysMenu entity); MenuVO toVo(Menu entity);
@Mapping(target = "params", ignore = true) @Mapping(target = "params", ignore = true)
MenuForm toForm(SysMenu entity); MenuForm toForm(Menu entity);
@Mapping(target = "params", ignore = true) @Mapping(target = "params", ignore = true)
SysMenu toEntity(MenuForm menuForm); Menu toEntity(MenuForm menuForm);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysRole; import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.system.model.vo.RolePageVO; import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.form.RoleForm; import com.youlai.boot.system.model.form.RoleForm;
@@ -20,17 +20,17 @@ import java.util.List;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface RoleConverter { public interface RoleConverter {
Page<RolePageVO> toPageVo(Page<SysRole> page); Page<RolePageVO> toPageVo(Page<Role> page);
@Mappings({ @Mappings({
@Mapping(target = "value", source = "id"), @Mapping(target = "value", source = "id"),
@Mapping(target = "label", source = "name") @Mapping(target = "label", source = "name")
}) })
Option<Long> entity2Option(SysRole role); Option<Long> entity2Option(Role role);
List<Option<Long>> entities2Options(List<SysRole> roles); List<Option<Long>> entities2Options(List<Role> roles);
SysRole toEntity(RoleForm roleForm); Role toEntity(RoleForm roleForm);
RoleForm toForm(SysRole entity); RoleForm toForm(Role entity);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.converter; package com.youlai.boot.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.vo.UserInfoVO; import com.youlai.boot.system.model.vo.UserInfoVO;
import com.youlai.boot.system.model.vo.UserPageVO; import com.youlai.boot.system.model.vo.UserPageVO;
import com.youlai.boot.system.model.vo.UserProfileVO; import com.youlai.boot.system.model.vo.UserProfileVO;
@@ -30,20 +30,20 @@ public interface UserConverter {
Page<UserPageVO> toPageVo(Page<UserBO> bo); Page<UserPageVO> toPageVo(Page<UserBO> bo);
UserForm toForm(SysUser entity); UserForm toForm(User entity);
@InheritInverseConfiguration(name = "toForm") @InheritInverseConfiguration(name = "toForm")
SysUser toEntity(UserForm entity); User toEntity(UserForm entity);
@Mappings({ @Mappings({
@Mapping(target = "userId", source = "id") @Mapping(target = "userId", source = "id")
}) })
UserInfoVO toUserInfoVo(SysUser entity); UserInfoVO toUserInfoVo(User entity);
SysUser toEntity(UserImportDTO vo); User toEntity(UserImportDTO vo);
UserProfileVO toProfileVO(UserBO bo); UserProfileVO toProfileVO(UserBO bo);
SysUser toEntity(UserProfileForm formData); User toEntity(UserProfileForm formData);
} }

View File

@@ -8,20 +8,20 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.youlai.boot.common.base.BaseAnalysisEventListener; import com.youlai.boot.common.base.BaseAnalysisEventListener;
import com.youlai.boot.system.model.entity.SysDept; import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.system.model.entity.SysRole; import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.entity.SysUserRole; import com.youlai.boot.system.model.entity.UserRole;
import com.youlai.boot.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import com.youlai.boot.common.constant.SystemConstants; import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.common.enums.GenderEnum; import com.youlai.boot.common.enums.GenderEnum;
import com.youlai.boot.common.enums.StatusEnum; import com.youlai.boot.common.enums.StatusEnum;
import com.youlai.boot.system.converter.UserConverter; import com.youlai.boot.system.converter.UserConverter;
import com.youlai.boot.system.model.dto.UserImportDTO; import com.youlai.boot.system.model.dto.UserImportDTO;
import com.youlai.boot.system.service.SysDeptService; import com.youlai.boot.system.service.DeptService;
import com.youlai.boot.system.service.SysRoleService; import com.youlai.boot.system.service.RoleService;
import com.youlai.boot.system.service.SysUserRoleService; import com.youlai.boot.system.service.UserRoleService;
import com.youlai.boot.system.service.SysUserService; import com.youlai.boot.system.service.UserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -49,19 +49,19 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
// 导入返回信息 // 导入返回信息
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
private final SysUserService userService; private final UserService userService;
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final UserConverter userConverter; private final UserConverter userConverter;
private final SysRoleService roleService; private final RoleService roleService;
private final SysUserRoleService userRoleService; private final UserRoleService userRoleService;
private final SysDeptService deptService; private final DeptService deptService;
public UserImportListener() { public UserImportListener() {
this.userService = SpringUtil.getBean(SysUserService.class); this.userService = SpringUtil.getBean(UserService.class);
this.passwordEncoder = SpringUtil.getBean(PasswordEncoder.class); this.passwordEncoder = SpringUtil.getBean(PasswordEncoder.class);
this.roleService = SpringUtil.getBean(SysRoleService.class); this.roleService = SpringUtil.getBean(RoleService.class);
this.userRoleService = SpringUtil.getBean(SysUserRoleService.class); this.userRoleService = SpringUtil.getBean(UserRoleService.class);
this.deptService = SpringUtil.getBean(SysDeptService.class); this.deptService = SpringUtil.getBean(DeptService.class);
this.userConverter = SpringUtil.getBean(UserConverter.class); this.userConverter = SpringUtil.getBean(UserConverter.class);
} }
@@ -83,7 +83,7 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
if (StrUtil.isBlank(username)) { if (StrUtil.isBlank(username)) {
validationMsg.append("用户名为空;"); validationMsg.append("用户名为空;");
} else { } else {
long count = userService.count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username)); long count = userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
if (count > 0) { if (count > 0) {
validationMsg.append("用户名已存在;"); validationMsg.append("用户名已存在;");
} }
@@ -105,7 +105,7 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
if (validationMsg.isEmpty()) { if (validationMsg.isEmpty()) {
// 校验通过,持久化至数据库 // 校验通过,持久化至数据库
SysUser entity = userConverter.toEntity(userImportDTO); User entity = userConverter.toEntity(userImportDTO);
entity.setPassword(passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD)); // 默认密码 entity.setPassword(passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD)); // 默认密码
// 性别翻译 // 性别翻译
String genderLabel = userImportDTO.getGenderLabel(); String genderLabel = userImportDTO.getGenderLabel();
@@ -119,19 +119,19 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
List<Long> roleIds = null; List<Long> roleIds = null;
if (StrUtil.isNotBlank(roleCodes)) { if (StrUtil.isNotBlank(roleCodes)) {
roleIds = roleService.list( roleIds = roleService.list(
new LambdaQueryWrapper<SysRole>() new LambdaQueryWrapper<Role>()
.in(SysRole::getCode, (Object) roleCodes.split(",")) .in(Role::getCode, (Object) roleCodes.split(","))
.eq(SysRole::getStatus, StatusEnum.ENABLE.getValue()) .eq(Role::getStatus, StatusEnum.ENABLE.getValue())
.select(SysRole::getId) .select(Role::getId)
).stream() ).stream()
.map(SysRole::getId) .map(Role::getId)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
// 部门解析 // 部门解析
String deptCode = userImportDTO.getDeptCode(); String deptCode = userImportDTO.getDeptCode();
if (StrUtil.isNotBlank(deptCode)) { if (StrUtil.isNotBlank(deptCode)) {
SysDept dept = deptService.getOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getCode, deptCode) Dept dept = deptService.getOne(new LambdaQueryWrapper<Dept>().eq(Dept::getCode, deptCode)
.select(SysDept::getId) .select(Dept::getId)
); );
if (dept != null) { if (dept != null) {
entity.setDeptId(dept.getId()); entity.setDeptId(dept.getId());
@@ -144,8 +144,8 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
validCount++; validCount++;
// 保存用户角色关联 // 保存用户角色关联
if (CollectionUtil.isNotEmpty(roleIds)) { if (CollectionUtil.isNotEmpty(roleIds)) {
List<SysUserRole> userRoles = roleIds.stream() List<UserRole> userRoles = roleIds.stream()
.map(roleId -> new SysUserRole(entity.getId(), roleId)) .map(roleId -> new UserRole(entity.getId(), roleId))
.collect(Collectors.toList()); .collect(Collectors.toList());
userRoleService.saveBatch(userRoles); userRoleService.saveBatch(userRoles);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.mapper; package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.system.model.entity.SysConfig; import com.youlai.boot.system.model.entity.Config;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
@@ -11,6 +11,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2024-7-29 11:41:04 * @since 2024-7-29 11:41:04
*/ */
@Mapper @Mapper
public interface SysConfigMapper extends BaseMapper<SysConfig> { public interface ConfigMapper extends BaseMapper<Config> {
} }

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.youlai.boot.common.annotation.DataPermission; import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.boot.system.model.entity.SysDept; import com.youlai.boot.system.model.entity.Dept;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -12,9 +12,9 @@ import java.util.List;
@Mapper @Mapper
public interface SysDeptMapper extends BaseMapper<SysDept> { public interface DeptMapper extends BaseMapper<Dept> {
@DataPermission(deptIdColumnName = "id") @DataPermission(deptIdColumnName = "id")
@Override @Override
List<SysDept> selectList(@Param(Constants.WRAPPER) Wrapper<SysDept> queryWrapper); List<Dept> selectList(@Param(Constants.WRAPPER) Wrapper<Dept> queryWrapper);
} }

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.mapper; package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.system.model.entity.SysDictItem; import com.youlai.boot.system.model.entity.DictItem;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
@@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2.9.0 * @since 2.9.0
*/ */
@Mapper @Mapper
public interface SysDictItemMapper extends BaseMapper<SysDictItem> { public interface DictItemMapper extends BaseMapper<DictItem> {
} }

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysDict; import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -14,7 +14,7 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2.9.0 * @since 2.9.0
*/ */
@Mapper @Mapper
public interface SysDictMapper extends BaseMapper<SysDict> { public interface DictMapper extends BaseMapper<Dict> {
/** /**
* 字典分页列表 * 字典分页列表

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.VisitCount; import com.youlai.boot.system.model.bo.VisitCount;
import com.youlai.boot.system.model.entity.SysLog; import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery; import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO; import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO; import com.youlai.boot.system.model.vo.VisitStatsVO;
@@ -19,7 +19,7 @@ import java.util.List;
* @since 2.10.0 * @since 2.10.0
*/ */
@Mapper @Mapper
public interface SysLogMapper extends BaseMapper<SysLog> { public interface LogMapper extends BaseMapper<Log> {
/** /**
* 获取日志分页列表 * 获取日志分页列表

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.system.model.bo.RouteBO; import com.youlai.boot.system.model.bo.RouteBO;
import com.youlai.boot.system.model.entity.SysMenu; import com.youlai.boot.system.model.entity.Menu;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@@ -16,7 +16,7 @@ import java.util.Set;
*/ */
@Mapper @Mapper
public interface SysMenuMapper extends BaseMapper<SysMenu> { public interface MenuMapper extends BaseMapper<Menu> {
/** /**
* 获取菜单路由列表 * 获取菜单路由列表

View File

@@ -1,13 +1,13 @@
package com.youlai.boot.system.mapper; package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.system.model.entity.SysRole; import com.youlai.boot.system.model.entity.Role;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.Set; import java.util.Set;
@Mapper @Mapper
public interface SysRoleMapper extends BaseMapper<SysRole> { public interface RoleMapper extends BaseMapper<Role> {
/** /**

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.system.model.bo.RolePermsBO; import com.youlai.boot.system.model.bo.RolePermsBO;
import com.youlai.boot.system.model.entity.SysRoleMenu; import com.youlai.boot.system.model.entity.RoleMenu;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@@ -15,7 +15,7 @@ import java.util.Set;
* @since 2022/6/4 * @since 2022/6/4
*/ */
@Mapper @Mapper
public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> { public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
/** /**
* 获取角色拥有的菜单ID集合 * 获取角色拥有的菜单ID集合

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.UserBO; import com.youlai.boot.system.model.bo.UserBO;
import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.query.UserPageQuery; import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.form.UserForm; import com.youlai.boot.system.model.form.UserForm;
import com.youlai.boot.common.annotation.DataPermission; import com.youlai.boot.common.annotation.DataPermission;
@@ -20,7 +20,7 @@ import java.util.List;
* @since 2022/1/14 * @since 2022/1/14
*/ */
@Mapper @Mapper
public interface SysUserMapper extends BaseMapper<SysUser> { public interface UserMapper extends BaseMapper<User> {
/** /**
* 获取用户分页列表 * 获取用户分页列表

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.mapper; package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.system.model.entity.SysUserRole; import com.youlai.boot.system.model.entity.UserRole;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
@@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2022/1/15 * @since 2022/1/15
*/ */
@Mapper @Mapper
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> { public interface UserRoleMapper extends BaseMapper<UserRole> {
/** /**
* 获取角色绑定的用户数 * 获取角色绑定的用户数

View File

@@ -14,7 +14,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "系统配置") @Schema(description = "系统配置")
@TableName("sys_config") @TableName("sys_config")
@Data @Data
public class SysConfig extends BaseEntity { public class Config extends BaseEntity {
@Schema(description = "配置名称") @Schema(description = "配置名称")
private String configName; private String configName;

View File

@@ -1,18 +1,20 @@
package com.youlai.boot.system.model.entity; package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
/** /**
* 部门 实体 * 部门实体
* *
* @author Ray * @author Ray
* @since 2024/06/23 * @since 2024/06/23
*/ */
@TableName("sys_dept")
@Getter @Getter
@Setter @Setter
public class SysDept extends BaseEntity { public class Dept extends BaseEntity {
/** /**
* 部门名称 * 部门名称

View File

@@ -1,5 +1,6 @@
package com.youlai.boot.system.model.entity; package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import lombok.Data; import lombok.Data;
@@ -9,8 +10,9 @@ import lombok.Data;
* @author haoxr * @author haoxr
* @since 2022/12/17 * @since 2022/12/17
*/ */
@TableName("sys_dict")
@Data @Data
public class SysDict extends BaseEntity { public class Dict extends BaseEntity {
/** /**
* 类型名称 * 类型名称

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable; import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
/** /**
@@ -13,8 +14,9 @@ import lombok.Data;
* @author haoxr * @author haoxr
* @since 2022/12/17 * @since 2022/12/17
*/ */
@TableName("sys_dict_item")
@Data @Data
public class SysDictItem implements Serializable { public class DictItem implements Serializable {
/** /**
* 主键 * 主键
*/ */

View File

@@ -14,8 +14,9 @@ import lombok.Data;
* @author Ray * @author Ray
* @since 2.10.0 * @since 2.10.0
*/ */
@TableName("sys_log")
@Data @Data
public class SysLog implements Serializable { public class Log implements Serializable {
/** /**
* 主键 * 主键
*/ */

View File

@@ -9,14 +9,15 @@ import lombok.Setter;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
* 菜单 实体 * 菜单实体
* *
* @author Ray * @author Ray
* @since 2023/3/6 * @since 2023/3/6
*/ */
@TableName("sys_menu")
@Getter @Getter
@Setter @Setter
public class SysMenu { public class Menu {
/** /**
* 菜单ID * 菜单ID
*/ */

View File

@@ -1,18 +1,20 @@
package com.youlai.boot.system.model.entity; package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
/** /**
* 角色 实体 * 角色实体
* *
* @author Ray * @author Ray
* @since 2024/6/23 * @since 2024/6/23
*/ */
@TableName("sys_role")
@Getter @Getter
@Setter @Setter
public class SysRole extends BaseEntity { public class Role extends BaseEntity {
/** /**
* 角色名称 * 角色名称

View File

@@ -1,6 +1,7 @@
package com.youlai.boot.system.model.entity; package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -9,10 +10,11 @@ import lombok.NoArgsConstructor;
/** /**
* 角色和菜单关联表 * 角色和菜单关联表
*/ */
@TableName("sys_role_menu")
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class SysRoleMenu { public class RoleMenu {
/** /**
* 角色ID * 角色ID
*/ */

View File

@@ -1,15 +1,17 @@
package com.youlai.boot.system.model.entity; package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
/** /**
* 用户 实体 * 用户实体
*/ */
@TableName("sys_user")
@Getter @Getter
@Setter @Setter
public class SysUser extends BaseEntity { public class User extends BaseEntity {
/** /**
* 用户名 * 用户名

View File

@@ -1,6 +1,7 @@
package com.youlai.boot.system.model.entity; package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -12,10 +13,11 @@ import lombok.NoArgsConstructor;
* @author haoxr * @author haoxr
* @since 2022/12/17 * @since 2022/12/17
*/ */
@TableName("sys_user_role")
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class SysUserRole { public class UserRole {
/** /**
* 用户ID * 用户ID
*/ */

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.SysConfig; import com.youlai.boot.system.model.entity.Config;
import com.youlai.boot.system.model.form.ConfigForm; import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery; import com.youlai.boot.system.model.query.ConfigPageQuery;
import com.youlai.boot.system.model.vo.ConfigVO; import com.youlai.boot.system.model.vo.ConfigVO;
@@ -13,7 +13,7 @@ import com.youlai.boot.system.model.vo.ConfigVO;
* @author Theo * @author Theo
* @since 2024-07-29 11:17:26 * @since 2024-07-29 11:17:26
*/ */
public interface SysConfigService extends IService<SysConfig> { public interface ConfigService extends IService<Config> {
/** /**
* 分页查询系统配置 * 分页查询系统配置

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.service; package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.SysDept; import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.form.DeptForm; import com.youlai.boot.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery; import com.youlai.boot.system.model.query.DeptQuery;
@@ -15,7 +15,7 @@ import java.util.List;
* @author haoxr * @author haoxr
* @since 2021/8/22 * @since 2021/8/22
*/ */
public interface SysDeptService extends IService<SysDept> { public interface DeptService extends IService<Dept> {
/** /**
* 部门列表 * 部门列表
* *

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.service; package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.SysDictItem; import com.youlai.boot.system.model.entity.DictItem;
/** /**
* 字典项 接口 * 字典项 接口
@@ -9,6 +9,6 @@ import com.youlai.boot.system.model.entity.SysDictItem;
* @author Ray Hao * @author Ray Hao
* @since 2023/3/4 * @since 2023/3/4
*/ */
public interface SysDictItemService extends IService<SysDictItem> { public interface DictItemService extends IService<DictItem> {
} }

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.SysDict; import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
@@ -16,7 +16,7 @@ import java.util.List;
* @author haoxr * @author haoxr
* @since 2022/10/12 * @since 2022/10/12
*/ */
public interface SysDictService extends IService<SysDict> { public interface DictService extends IService<Dict> {
/** /**
* 字典分页列表 * 字典分页列表

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.service; package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysLog; import com.youlai.boot.system.model.entity.Log;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.query.LogPageQuery; import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO; import com.youlai.boot.system.model.vo.LogPageVO;
@@ -17,7 +17,7 @@ import java.util.List;
* @author Ray * @author Ray
* @since 2.10.0 * @since 2.10.0
*/ */
public interface SysLogService extends IService<SysLog> { public interface LogService extends IService<Log> {
/** /**
* 获取日志分页列表 * 获取日志分页列表

View File

@@ -1,10 +1,10 @@
package com.youlai.boot.system.service; package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.system.model.form.MenuForm; import com.youlai.boot.system.model.form.MenuForm;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.SysMenu; import com.youlai.boot.system.model.entity.Menu;
import com.youlai.boot.system.model.query.MenuQuery; import com.youlai.boot.system.model.query.MenuQuery;
import com.youlai.boot.system.model.vo.MenuVO; import com.youlai.boot.system.model.vo.MenuVO;
import com.youlai.boot.system.model.vo.RouteVO; import com.youlai.boot.system.model.vo.RouteVO;
@@ -18,7 +18,7 @@ import java.util.Set;
* @author haoxr * @author haoxr
* @since 2020/11/06 * @since 2020/11/06
*/ */
public interface SysMenuService extends IService<SysMenu> { public interface MenuService extends IService<Menu> {
/** /**
* 获取菜单表格列表 * 获取菜单表格列表

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.SysRoleMenu; import com.youlai.boot.system.model.entity.RoleMenu;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -13,7 +13,7 @@ import java.util.Set;
* @author haoxr * @author haoxr
* @since 2.5.0 * @since 2.5.0
*/ */
public interface SysRoleMenuService extends IService<SysRoleMenu> { public interface RoleMenuService extends IService<RoleMenu> {
/** /**
* 获取角色拥有的菜单ID集合 * 获取角色拥有的菜单ID集合

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.SysRole; import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.form.RoleForm; import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery; import com.youlai.boot.system.model.query.RolePageQuery;
@@ -18,7 +18,7 @@ import java.util.Set;
* @author haoxr * @author haoxr
* @since 2022/6/3 * @since 2022/6/3
*/ */
public interface SysRoleService extends IService<SysRole> { public interface RoleService extends IService<Role> {
/** /**
* 角色分页列表 * 角色分页列表

View File

@@ -2,11 +2,11 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.SysUserRole; import com.youlai.boot.system.model.entity.UserRole;
import java.util.List; import java.util.List;
public interface SysUserRoleService extends IService<SysUserRole> { public interface UserRoleService extends IService<UserRole> {
/** /**
* 保存用户角色 * 保存用户角色

View File

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.common.enums.ContactType; import com.youlai.boot.common.enums.ContactType;
import com.youlai.boot.system.model.dto.UserAuthInfo; import com.youlai.boot.system.model.dto.UserAuthInfo;
import com.youlai.boot.system.model.dto.UserExportDTO; import com.youlai.boot.system.model.dto.UserExportDTO;
import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.query.UserPageQuery; import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.vo.UserInfoVO; import com.youlai.boot.system.model.vo.UserInfoVO;
import com.youlai.boot.system.model.vo.UserPageVO; import com.youlai.boot.system.model.vo.UserPageVO;
@@ -21,7 +21,7 @@ import java.util.List;
* @author haoxr * @author haoxr
* @since 2022/1/14 * @since 2022/1/14
*/ */
public interface SysUserService extends IService<SysUser> { public interface UserService extends IService<User> {
/** /**
* 用户分页列表 * 用户分页列表

View File

@@ -6,12 +6,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.common.constant.RedisConstants; import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.system.converter.ConfigConverter; import com.youlai.boot.system.converter.ConfigConverter;
import com.youlai.boot.system.mapper.SysConfigMapper; import com.youlai.boot.system.mapper.ConfigMapper;
import com.youlai.boot.system.model.entity.SysConfig; import com.youlai.boot.system.model.entity.Config;
import com.youlai.boot.system.model.form.ConfigForm; import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery; import com.youlai.boot.system.model.query.ConfigPageQuery;
import com.youlai.boot.system.model.vo.ConfigVO; import com.youlai.boot.system.model.vo.ConfigVO;
import com.youlai.boot.system.service.SysConfigService; import com.youlai.boot.system.service.ConfigService;
import com.youlai.boot.core.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -32,9 +32,9 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService { public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> implements ConfigService {
private final SysConfigMapper sysConfigMapper; private final ConfigMapper configMapper;
private final ConfigConverter configConverter; private final ConfigConverter configConverter;
@@ -57,15 +57,15 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
*/ */
@Override @Override
public IPage<ConfigVO> page(ConfigPageQuery configPageQuery) { public IPage<ConfigVO> page(ConfigPageQuery configPageQuery) {
Page<SysConfig> page = new Page<>(configPageQuery.getPageNum(), configPageQuery.getPageSize()); Page<Config> page = new Page<>(configPageQuery.getPageNum(), configPageQuery.getPageSize());
String keywords = configPageQuery.getKeywords(); String keywords = configPageQuery.getKeywords();
LambdaQueryWrapper<SysConfig> query = new LambdaQueryWrapper<SysConfig>() LambdaQueryWrapper<Config> query = new LambdaQueryWrapper<Config>()
.and(StringUtils.isNotBlank(keywords), .and(StringUtils.isNotBlank(keywords),
q -> q.like(SysConfig::getConfigKey, keywords) q -> q.like(Config::getConfigKey, keywords)
.or() .or()
.like(SysConfig::getConfigName, keywords) .like(Config::getConfigName, keywords)
); );
Page<SysConfig> pageList = this.page(page, query); Page<Config> pageList = this.page(page, query);
return configConverter.toPageVo(pageList); return configConverter.toPageVo(pageList);
} }
@@ -78,11 +78,11 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override @Override
public boolean save(ConfigForm configForm) { public boolean save(ConfigForm configForm) {
Assert.isTrue( Assert.isTrue(
super.count(new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getConfigKey, configForm.getConfigKey())) == 0, super.count(new LambdaQueryWrapper<Config>().eq(Config::getConfigKey, configForm.getConfigKey())) == 0,
"配置键已存在"); "配置键已存在");
SysConfig sysConfig = configConverter.toEntity(configForm); Config config = configConverter.toEntity(configForm);
sysConfig.setCreateBy(SecurityUtils.getUserId()); config.setCreateBy(SecurityUtils.getUserId());
return this.save(sysConfig); return this.save(config);
} }
/** /**
@@ -93,7 +93,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
*/ */
@Override @Override
public ConfigForm getConfigFormData(Long id) { public ConfigForm getConfigFormData(Long id) {
SysConfig entity = this.getById(id); Config entity = this.getById(id);
return configConverter.toForm(entity); return configConverter.toForm(entity);
} }
@@ -107,11 +107,11 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override @Override
public boolean edit(Long id, ConfigForm configForm) { public boolean edit(Long id, ConfigForm configForm) {
Assert.isTrue( Assert.isTrue(
super.count(new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getConfigKey, configForm.getConfigKey()).ne(SysConfig::getId, id)) == 0, super.count(new LambdaQueryWrapper<Config>().eq(Config::getConfigKey, configForm.getConfigKey()).ne(Config::getId, id)) == 0,
"配置键已存在"); "配置键已存在");
SysConfig sysConfig = configConverter.toEntity(configForm); Config config = configConverter.toEntity(configForm);
sysConfig.setUpdateBy(SecurityUtils.getUserId()); config.setUpdateBy(SecurityUtils.getUserId());
return this.updateById(sysConfig); return this.updateById(config);
} }
/** /**
@@ -123,7 +123,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override @Override
public boolean delete(Long id) { public boolean delete(Long id) {
if (id != null) { if (id != null) {
return super.remove(new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getId,id)); return super.remove(new LambdaQueryWrapper<Config>().eq(Config::getId,id));
} }
return false; return false;
} }
@@ -136,9 +136,9 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override @Override
public boolean refreshCache() { public boolean refreshCache() {
redisTemplate.delete(RedisConstants.SYSTEM_CONFIG_KEY); redisTemplate.delete(RedisConstants.SYSTEM_CONFIG_KEY);
List<SysConfig> list = this.list(); List<Config> list = this.list();
if (list != null) { if (list != null) {
Map<String, String> map = list.stream().collect(Collectors.toMap(SysConfig::getConfigKey, SysConfig::getConfigValue)); Map<String, String> map = list.stream().collect(Collectors.toMap(Config::getConfigKey, Config::getConfigValue));
redisTemplate.opsForHash().putAll(RedisConstants.SYSTEM_CONFIG_KEY, map); redisTemplate.opsForHash().putAll(RedisConstants.SYSTEM_CONFIG_KEY, map);
return true; return true;
} }

View File

@@ -6,8 +6,8 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.converter.DeptConverter; import com.youlai.boot.system.converter.DeptConverter;
import com.youlai.boot.system.mapper.SysDeptMapper; import com.youlai.boot.system.mapper.DeptMapper;
import com.youlai.boot.system.model.entity.SysDept; import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.system.model.form.DeptForm; import com.youlai.boot.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery; import com.youlai.boot.system.model.query.DeptQuery;
import com.youlai.boot.system.model.vo.DeptVO; import com.youlai.boot.system.model.vo.DeptVO;
@@ -15,7 +15,7 @@ import com.youlai.boot.common.constant.SymbolConstant;
import com.youlai.boot.common.constant.SystemConstants; import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.common.enums.StatusEnum; import com.youlai.boot.common.enums.StatusEnum;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.service.SysDeptService; import com.youlai.boot.system.service.DeptService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService { public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
private final DeptConverter deptConverter; private final DeptConverter deptConverter;
@@ -47,11 +47,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
Integer status = queryParams.getStatus(); Integer status = queryParams.getStatus();
// 查询数据 // 查询数据
List<SysDept> deptList = this.list( List<Dept> deptList = this.list(
new LambdaQueryWrapper<SysDept>() new LambdaQueryWrapper<Dept>()
.like(StrUtil.isNotBlank(keywords), SysDept::getName, keywords) .like(StrUtil.isNotBlank(keywords), Dept::getName, keywords)
.eq(status != null, SysDept::getStatus, status) .eq(status != null, Dept::getStatus, status)
.orderByAsc(SysDept::getSort) .orderByAsc(Dept::getSort)
); );
if (CollectionUtil.isEmpty(deptList)) { if (CollectionUtil.isEmpty(deptList)) {
@@ -60,11 +60,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
// 获取所有部门ID // 获取所有部门ID
Set<Long> deptIds = deptList.stream() Set<Long> deptIds = deptList.stream()
.map(SysDept::getId) .map(Dept::getId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 获取父节点ID // 获取父节点ID
Set<Long> parentIds = deptList.stream() Set<Long> parentIds = deptList.stream()
.map(SysDept::getParentId) .map(Dept::getParentId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 获取根节点ID递归的起点即父节点ID中不包含在部门ID中的节点注意这里不能拿顶级部门 O 作为根节点因为部门筛选的时候 O 会被过滤掉 // 获取根节点ID递归的起点即父节点ID中不包含在部门ID中的节点注意这里不能拿顶级部门 O 作为根节点因为部门筛选的时候 O 会被过滤掉
List<Long> rootIds = CollectionUtil.subtractToList(parentIds, deptIds); List<Long> rootIds = CollectionUtil.subtractToList(parentIds, deptIds);
@@ -82,7 +82,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
* @param deptList 部门列表 * @param deptList 部门列表
* @return 部门树形列表 * @return 部门树形列表
*/ */
public List<DeptVO> recurDeptList(Long parentId, List<SysDept> deptList) { public List<DeptVO> recurDeptList(Long parentId, List<Dept> deptList) {
return deptList.stream() return deptList.stream()
.filter(dept -> dept.getParentId().equals(parentId)) .filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> { .map(dept -> {
@@ -101,21 +101,21 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
@Override @Override
public List<Option<Long>> listDeptOptions() { public List<Option<Long>> listDeptOptions() {
List<SysDept> deptList = this.list(new LambdaQueryWrapper<SysDept>() List<Dept> deptList = this.list(new LambdaQueryWrapper<Dept>()
.eq(SysDept::getStatus, StatusEnum.ENABLE.getValue()) .eq(Dept::getStatus, StatusEnum.ENABLE.getValue())
.select(SysDept::getId, SysDept::getParentId, SysDept::getName) .select(Dept::getId, Dept::getParentId, Dept::getName)
.orderByAsc(SysDept::getSort) .orderByAsc(Dept::getSort)
); );
if (CollectionUtil.isEmpty(deptList)) { if (CollectionUtil.isEmpty(deptList)) {
return Collections.EMPTY_LIST; return Collections.EMPTY_LIST;
} }
Set<Long> deptIds = deptList.stream() Set<Long> deptIds = deptList.stream()
.map(SysDept::getId) .map(Dept::getId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
Set<Long> parentIds = deptList.stream() Set<Long> parentIds = deptList.stream()
.map(SysDept::getParentId) .map(Dept::getParentId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
List<Long> rootIds = CollectionUtil.subtractToList(parentIds, deptIds); List<Long> rootIds = CollectionUtil.subtractToList(parentIds, deptIds);
@@ -136,13 +136,13 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
public Long saveDept(DeptForm formData) { public Long saveDept(DeptForm formData) {
// 校验部门名称是否存在 // 校验部门名称是否存在
String code = formData.getCode(); String code = formData.getCode();
long count = this.count(new LambdaQueryWrapper<SysDept>() long count = this.count(new LambdaQueryWrapper<Dept>()
.eq(SysDept::getCode, code) .eq(Dept::getCode, code)
); );
Assert.isTrue(count == 0, "部门编号已存在"); Assert.isTrue(count == 0, "部门编号已存在");
// form->entity // form->entity
SysDept entity = deptConverter.toEntity(formData); Dept entity = deptConverter.toEntity(formData);
// 生成部门路径(tree_path)格式父节点tree_path + , + 父节点ID用于删除部门时级联删除子部门 // 生成部门路径(tree_path)格式父节点tree_path + , + 父节点ID用于删除部门时级联删除子部门
String treePath = generateDeptTreePath(formData.getParentId()); String treePath = generateDeptTreePath(formData.getParentId());
@@ -164,7 +164,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
*/ */
@Override @Override
public DeptForm getDeptForm(Long deptId) { public DeptForm getDeptForm(Long deptId) {
SysDept entity = this.getById(deptId); Dept entity = this.getById(deptId);
return deptConverter.toForm(entity); return deptConverter.toForm(entity);
} }
@@ -180,15 +180,15 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
public Long updateDept(Long deptId, DeptForm formData) { public Long updateDept(Long deptId, DeptForm formData) {
// 校验部门名称/部门编号是否存在 // 校验部门名称/部门编号是否存在
String code = formData.getCode(); String code = formData.getCode();
long count = this.count(new LambdaQueryWrapper<SysDept>() long count = this.count(new LambdaQueryWrapper<Dept>()
.ne(SysDept::getId, deptId) .ne(Dept::getId, deptId)
.eq(SysDept::getCode, code) .eq(Dept::getCode, code)
); );
Assert.isTrue(count == 0, "部门编号已存在"); Assert.isTrue(count == 0, "部门编号已存在");
// form->entity // form->entity
SysDept entity = deptConverter.toEntity(formData); Dept entity = deptConverter.toEntity(formData);
entity.setId(deptId); entity.setId(deptId);
// 生成部门路径(tree_path)格式父节点tree_path + , + 父节点ID用于删除部门时级联删除子部门 // 生成部门路径(tree_path)格式父节点tree_path + , + 父节点ID用于删除部门时级联删除子部门
@@ -209,7 +209,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
* @param deptList 部门列表 * @param deptList 部门列表
* @return 部门表格层级列表 * @return 部门表格层级列表
*/ */
public static List<Option<Long>> recurDeptTreeOptions(long parentId, List<SysDept> deptList) { public static List<Option<Long>> recurDeptTreeOptions(long parentId, List<Dept> deptList) {
return CollectionUtil.emptyIfNull(deptList).stream() return CollectionUtil.emptyIfNull(deptList).stream()
.filter(dept -> dept.getParentId().equals(parentId)) .filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> { .map(dept -> {
@@ -236,8 +236,8 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
if (StrUtil.isNotBlank(ids)) { if (StrUtil.isNotBlank(ids)) {
String[] menuIds = ids.split(SymbolConstant.COMMA); String[] menuIds = ids.split(SymbolConstant.COMMA);
for (String deptId : menuIds) { for (String deptId : menuIds) {
this.remove(new LambdaQueryWrapper<SysDept>() this.remove(new LambdaQueryWrapper<Dept>()
.eq(SysDept::getId, deptId) .eq(Dept::getId, deptId)
.or() .or()
.apply("CONCAT (',',tree_path,',') LIKE CONCAT('%,',{0},',%')", deptId)); .apply("CONCAT (',',tree_path,',') LIKE CONCAT('%,',{0},',%')", deptId));
} }
@@ -257,7 +257,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
if (SystemConstants.ROOT_NODE_ID.equals(parentId)) { if (SystemConstants.ROOT_NODE_ID.equals(parentId)) {
treePath = String.valueOf(parentId); treePath = String.valueOf(parentId);
} else { } else {
SysDept parent = this.getById(parentId); Dept parent = this.getById(parentId);
if (parent != null) { if (parent != null) {
treePath = parent.getTreePath() + SymbolConstant.COMMA + parent.getId(); treePath = parent.getTreePath() + SymbolConstant.COMMA + parent.getId();
} }

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.system.service.impl; package com.youlai.boot.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.mapper.SysDictItemMapper; import com.youlai.boot.system.mapper.DictItemMapper;
import com.youlai.boot.system.model.entity.SysDictItem; import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.service.SysDictItemService; import com.youlai.boot.system.service.DictItemService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDictItem> implements SysDictItemService { public class DictItemServiceImpl extends ServiceImpl<DictItemMapper, DictItem> implements DictItemService {
} }

View File

@@ -8,15 +8,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.converter.DictConverter; import com.youlai.boot.system.converter.DictConverter;
import com.youlai.boot.system.converter.DictItemConverter; import com.youlai.boot.system.converter.DictItemConverter;
import com.youlai.boot.system.mapper.SysDictMapper; import com.youlai.boot.system.mapper.DictMapper;
import com.youlai.boot.system.model.entity.SysDict; import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.entity.SysDictItem; import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.service.SysDictItemService; import com.youlai.boot.system.service.DictItemService;
import com.youlai.boot.system.service.SysDictService; import com.youlai.boot.system.service.DictService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -32,9 +32,9 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> implements SysDictService { public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
private final SysDictItemService dictItemService; private final DictItemService dictItemService;
private final DictConverter dictConverter; private final DictConverter dictConverter;
private final DictItemConverter dictItemConverter; private final DictItemConverter dictItemConverter;
@@ -61,11 +61,11 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override @Override
public boolean saveDict(DictForm dictForm) { public boolean saveDict(DictForm dictForm) {
// 保存字典 // 保存字典
SysDict entity = dictConverter.toEntity(dictForm); Dict entity = dictConverter.toEntity(dictForm);
// 校验 code 是否唯一 // 校验 code 是否唯一
long count = this.count(new LambdaQueryWrapper<SysDict>() long count = this.count(new LambdaQueryWrapper<Dict>()
.eq(SysDict::getCode, entity.getCode()) .eq(Dict::getCode, entity.getCode())
); );
Assert.isTrue(count == 0, "字典编码已存在"); Assert.isTrue(count == 0, "字典编码已存在");
@@ -73,7 +73,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
// 保存字典项 // 保存字典项
if (result) { if (result) {
List<DictForm.DictItem> dictFormDictItems = dictForm.getDictItems(); List<DictForm.DictItem> dictFormDictItems = dictForm.getDictItems();
List<SysDictItem> dictItems = dictItemConverter.toEntity(dictFormDictItems); List<DictItem> dictItems = dictItemConverter.toEntity(dictFormDictItems);
dictItems.forEach(dictItem -> dictItem.setDictId(entity.getId())); dictItems.forEach(dictItem -> dictItem.setDictId(entity.getId()));
dictItemService.saveBatch(dictItems); dictItemService.saveBatch(dictItems);
} }
@@ -89,13 +89,13 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override @Override
public DictForm getDictForm(Long id) { public DictForm getDictForm(Long id) {
// 获取字典 // 获取字典
SysDict entity = this.getById(id); Dict entity = this.getById(id);
Assert.isTrue(entity != null, "字典不存在"); Assert.isTrue(entity != null, "字典不存在");
DictForm dictForm = dictConverter.toForm(entity); DictForm dictForm = dictConverter.toForm(entity);
// 获取字典项集合 // 获取字典项集合
List<SysDictItem> dictItems = dictItemService.list(new LambdaQueryWrapper<SysDictItem>() List<DictItem> dictItems = dictItemService.list(new LambdaQueryWrapper<DictItem>()
.eq(SysDictItem::getDictId, id) .eq(DictItem::getDictId, id)
); );
// 转换数据项 // 转换数据项
List<DictForm.DictItem> dictItemList = dictItemConverter.toDictItem(dictItems); List<DictForm.DictItem> dictItemList = dictItemConverter.toDictItem(dictItems);
@@ -112,12 +112,12 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override @Override
public boolean updateDict(Long id, DictForm dictForm) { public boolean updateDict(Long id, DictForm dictForm) {
// 更新字典 // 更新字典
SysDict entity = dictConverter.toEntity(dictForm); Dict entity = dictConverter.toEntity(dictForm);
// 校验 code 是否唯一 // 校验 code 是否唯一
long count = this.count(new LambdaQueryWrapper<SysDict>() long count = this.count(new LambdaQueryWrapper<Dict>()
.eq(SysDict::getCode, entity.getCode()) .eq(Dict::getCode, entity.getCode())
.ne(SysDict::getId, id) .ne(Dict::getId, id)
); );
Assert.isTrue(count == 0, "字典编码已存在"); Assert.isTrue(count == 0, "字典编码已存在");
@@ -126,21 +126,21 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
if (result) { if (result) {
// 更新字典项 // 更新字典项
List<DictForm.DictItem> dictFormDictItems = dictForm.getDictItems(); List<DictForm.DictItem> dictFormDictItems = dictForm.getDictItems();
List<SysDictItem> dictItems = dictItemConverter.toEntity(dictFormDictItems); List<DictItem> dictItems = dictItemConverter.toEntity(dictFormDictItems);
// 获取当前数据库中的字典项 // 获取当前数据库中的字典项
List<SysDictItem> currentDictItemEntities = dictItemService.list(new LambdaQueryWrapper<SysDictItem>() List<DictItem> currentDictItemEntities = dictItemService.list(new LambdaQueryWrapper<DictItem>()
.eq(SysDictItem::getDictId, id) .eq(DictItem::getDictId, id)
); );
// 获取当前数据库中存在的字典项ID集合 // 获取当前数据库中存在的字典项ID集合
Set<Long> currentDictItemIds = currentDictItemEntities.stream() Set<Long> currentDictItemIds = currentDictItemEntities.stream()
.map(SysDictItem::getId) .map(DictItem::getId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 获取新提交的字典项ID集合 // 获取新提交的字典项ID集合
Set<Long> newAttrIds = dictItems.stream() Set<Long> newAttrIds = dictItems.stream()
.map(SysDictItem::getId) .map(DictItem::getId)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
@@ -154,7 +154,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
} }
// 更新或新增字典项 // 更新或新增字典项
for (SysDictItem dictItem : dictItems) { for (DictItem dictItem : dictItems) {
if (dictItem.getId() != null && currentDictItemIds.contains(dictItem.getId())) { if (dictItem.getId() != null && currentDictItemIds.contains(dictItem.getId())) {
// 更新现有字典项 // 更新现有字典项
dictItemService.updateById(dictItem); dictItemService.updateById(dictItem);
@@ -187,8 +187,8 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
if (result) { if (result) {
// 删除字典下的字典项 // 删除字典下的字典项
dictItemService.remove( dictItemService.remove(
new LambdaQueryWrapper<SysDictItem>() new LambdaQueryWrapper<DictItem>()
.eq(SysDictItem::getDictId, id) .eq(DictItem::getDictId, id)
); );
} }
} }
@@ -202,9 +202,9 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override @Override
public List<Option<Long>> listDictItemsByCode(String code) { public List<Option<Long>> listDictItemsByCode(String code) {
// 根据字典编码获取字典ID // 根据字典编码获取字典ID
SysDict dict = this.getOne(new LambdaQueryWrapper<SysDict>() Dict dict = this.getOne(new LambdaQueryWrapper<Dict>()
.eq(SysDict::getCode, code) .eq(Dict::getCode, code)
.select(SysDict::getId) .select(Dict::getId)
.last("limit 1") .last("limit 1")
); );
// 如果字典不存在则返回空集合 // 如果字典不存在则返回空集合
@@ -213,9 +213,9 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
} }
// 获取字典项 // 获取字典项
List<SysDictItem> dictItems = dictItemService.list( List<DictItem> dictItems = dictItemService.list(
new LambdaQueryWrapper<SysDictItem>() new LambdaQueryWrapper<DictItem>()
.eq(SysDictItem::getDictId, dict.getId()) .eq(DictItem::getDictId, dict.getId())
); );
// 转换为 Option // 转换为 Option
@@ -227,9 +227,9 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
*/ */
@Override @Override
public List<Option<String>> getDictList() { public List<Option<String>> getDictList() {
return this.list(new LambdaQueryWrapper<SysDict>() return this.list(new LambdaQueryWrapper<Dict>()
.eq(SysDict::getStatus, 1) .eq(Dict::getStatus, 1)
.select(SysDict::getName, SysDict::getCode) .select(Dict::getName, Dict::getCode)
).stream() ).stream()
.map(dict -> new Option<>(dict.getCode(), dict.getName())) .map(dict -> new Option<>(dict.getCode(), dict.getName()))
.toList(); .toList();

View File

@@ -2,14 +2,14 @@ package com.youlai.boot.system.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.mapper.SysLogMapper; import com.youlai.boot.system.mapper.LogMapper;
import com.youlai.boot.system.model.bo.VisitCount; import com.youlai.boot.system.model.bo.VisitCount;
import com.youlai.boot.system.model.entity.SysLog; import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery; import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO; import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO; import com.youlai.boot.system.model.vo.VisitStatsVO;
import com.youlai.boot.system.model.vo.VisitTrendVO; import com.youlai.boot.system.model.vo.VisitTrendVO;
import com.youlai.boot.system.service.SysLogService; import com.youlai.boot.system.service.LogService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -26,8 +26,8 @@ import java.util.stream.Collectors;
* @since 2.10.0 * @since 2.10.0
*/ */
@Service @Service
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> public class LogServiceImpl extends ServiceImpl<LogMapper, Log>
implements SysLogService { implements LogService {
/** /**
* 获取日志分页列表 * 获取日志分页列表

View File

@@ -11,10 +11,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.youlai.boot.system.converter.MenuConverter; import com.youlai.boot.system.converter.MenuConverter;
import com.youlai.boot.system.mapper.SysMenuMapper; import com.youlai.boot.system.mapper.MenuMapper;
import com.youlai.boot.system.model.bo.RouteBO; import com.youlai.boot.system.model.bo.RouteBO;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig; import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.system.model.entity.SysMenu; import com.youlai.boot.system.model.entity.Menu;
import com.youlai.boot.system.model.form.MenuForm; import com.youlai.boot.system.model.form.MenuForm;
import com.youlai.boot.system.model.query.MenuQuery; import com.youlai.boot.system.model.query.MenuQuery;
import com.youlai.boot.system.model.vo.MenuVO; import com.youlai.boot.system.model.vo.MenuVO;
@@ -24,8 +24,8 @@ import com.youlai.boot.common.enums.MenuTypeEnum;
import com.youlai.boot.common.enums.StatusEnum; import com.youlai.boot.common.enums.StatusEnum;
import com.youlai.boot.common.model.KeyValue; import com.youlai.boot.common.model.KeyValue;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.service.SysMenuService; import com.youlai.boot.system.service.MenuService;
import com.youlai.boot.system.service.SysRoleMenuService; import com.youlai.boot.system.service.RoleMenuService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
@@ -42,11 +42,11 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService { public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
private final MenuConverter menuConverter; private final MenuConverter menuConverter;
private final SysRoleMenuService roleMenuService; private final RoleMenuService roleMenuService;
/** /**
@@ -56,18 +56,18 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
@Override @Override
public List<MenuVO> listMenus(MenuQuery queryParams) { public List<MenuVO> listMenus(MenuQuery queryParams) {
List<SysMenu> menus = this.list(new LambdaQueryWrapper<SysMenu>() List<Menu> menus = this.list(new LambdaQueryWrapper<Menu>()
.like(StrUtil.isNotBlank(queryParams.getKeywords()), SysMenu::getName, queryParams.getKeywords()) .like(StrUtil.isNotBlank(queryParams.getKeywords()), Menu::getName, queryParams.getKeywords())
.orderByAsc(SysMenu::getSort) .orderByAsc(Menu::getSort)
); );
// 获取所有菜单ID // 获取所有菜单ID
Set<Long> menuIds = menus.stream() Set<Long> menuIds = menus.stream()
.map(SysMenu::getId) .map(Menu::getId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 获取所有父级ID // 获取所有父级ID
Set<Long> parentIds = menus.stream() Set<Long> parentIds = menus.stream()
.map(SysMenu::getParentId) .map(Menu::getParentId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 获取根节点ID递归的起点即父节点ID中不包含在部门ID中的节点注意这里不能拿顶级菜单 O 作为根节点因为菜单筛选的时候 O 会被过滤掉 // 获取根节点ID递归的起点即父节点ID中不包含在部门ID中的节点注意这里不能拿顶级菜单 O 作为根节点因为菜单筛选的时候 O 会被过滤掉
@@ -88,7 +88,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* @param menuList 菜单列表 * @param menuList 菜单列表
* @return 菜单列表 * @return 菜单列表
*/ */
private List<MenuVO> buildMenuTree(Long parentId, List<SysMenu> menuList) { private List<MenuVO> buildMenuTree(Long parentId, List<Menu> menuList) {
return CollectionUtil.emptyIfNull(menuList) return CollectionUtil.emptyIfNull(menuList)
.stream() .stream()
.filter(menu -> menu.getParentId().equals(parentId)) .filter(menu -> menu.getParentId().equals(parentId))
@@ -107,9 +107,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
@Override @Override
public List<Option> listMenuOptions(boolean onlyParent) { public List<Option> listMenuOptions(boolean onlyParent) {
List<SysMenu> menuList = this.list(new LambdaQueryWrapper<SysMenu>() List<Menu> menuList = this.list(new LambdaQueryWrapper<Menu>()
.in(onlyParent, SysMenu::getType, MenuTypeEnum.CATALOG.getValue(), MenuTypeEnum.MENU.getValue()) .in(onlyParent, Menu::getType, MenuTypeEnum.CATALOG.getValue(), MenuTypeEnum.MENU.getValue())
.orderByAsc(SysMenu::getSort) .orderByAsc(Menu::getSort)
); );
return buildMenuOptions(SystemConstants.ROOT_NODE_ID, menuList); return buildMenuOptions(SystemConstants.ROOT_NODE_ID, menuList);
} }
@@ -121,10 +121,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* @param menuList 菜单列表 * @param menuList 菜单列表
* @return 菜单下拉列表 * @return 菜单下拉列表
*/ */
private List<Option> buildMenuOptions(Long parentId, List<SysMenu> menuList) { private List<Option> buildMenuOptions(Long parentId, List<Menu> menuList) {
List<Option> menuOptions = new ArrayList<>(); List<Option> menuOptions = new ArrayList<>();
for (SysMenu menu : menuList) { for (Menu menu : menuList) {
if (menu.getParentId().equals(parentId)) { if (menu.getParentId().equals(parentId)) {
Option option = new Option(menu.getId(), menu.getName()); Option option = new Option(menu.getId(), menu.getName());
List<Option> subMenuOptions = buildMenuOptions(menu.getId(), menuList); List<Option> subMenuOptions = buildMenuOptions(menu.getId(), menuList);
@@ -242,7 +242,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
menuForm.setComponent(null); menuForm.setComponent(null);
} }
SysMenu entity = menuConverter.toEntity(menuForm); Menu entity = menuConverter.toEntity(menuForm);
String treePath = generateMenuTreePath(menuForm.getParentId()); String treePath = generateMenuTreePath(menuForm.getParentId());
entity.setTreePath(treePath); entity.setTreePath(treePath);
@@ -255,9 +255,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
entity.setParams(null); entity.setParams(null);
} }
if (menuType != MenuTypeEnum.BUTTON) { if (menuType != MenuTypeEnum.BUTTON) {
Assert.isFalse(this.exists(new LambdaQueryWrapper<SysMenu>() Assert.isFalse(this.exists(new LambdaQueryWrapper<Menu>()
.eq(SysMenu::getRouteName, entity.getRouteName()) .eq(Menu::getRouteName, entity.getRouteName())
.ne(menuForm.getId() != null, SysMenu::getId, menuForm.getId()) .ne(menuForm.getId() != null, Menu::getId, menuForm.getId())
), "路由名称已存在"); ), "路由名称已存在");
} }
@@ -281,7 +281,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
if (SystemConstants.ROOT_NODE_ID.equals(parentId)) { if (SystemConstants.ROOT_NODE_ID.equals(parentId)) {
return String.valueOf(parentId); return String.valueOf(parentId);
} else { } else {
SysMenu parent = this.getById(parentId); Menu parent = this.getById(parentId);
return parent != null ? parent.getTreePath() + "," + parent.getId() : null; return parent != null ? parent.getTreePath() + "," + parent.getId() : null;
} }
} }
@@ -297,9 +297,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override @Override
@CacheEvict(cacheNames = "menu", key = "'routes'") @CacheEvict(cacheNames = "menu", key = "'routes'")
public boolean updateMenuVisible(Long menuId, Integer visible) { public boolean updateMenuVisible(Long menuId, Integer visible) {
return this.update(new LambdaUpdateWrapper<SysMenu>() return this.update(new LambdaUpdateWrapper<Menu>()
.eq(SysMenu::getId, menuId) .eq(Menu::getId, menuId)
.set(SysMenu::getVisible, visible) .set(Menu::getVisible, visible)
); );
} }
@@ -311,7 +311,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
@Override @Override
public MenuForm getMenuForm(Long id) { public MenuForm getMenuForm(Long id) {
SysMenu entity = this.getById(id); Menu entity = this.getById(id);
Assert.isTrue(entity != null, "菜单不存在"); Assert.isTrue(entity != null, "菜单不存在");
MenuForm formData = menuConverter.toForm(entity); MenuForm formData = menuConverter.toForm(entity);
// 路由参数字符串 {"id":"1","name":"张三"} 转换为 [{key:"id", value:"1"}, {key:"name", value:"张三"}] // 路由参数字符串 {"id":"1","name":"张三"} 转换为 [{key:"id", value:"1"}, {key:"name", value:"张三"}]
@@ -347,8 +347,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override @Override
@CacheEvict(cacheNames = "menu", key = "'routes'") @CacheEvict(cacheNames = "menu", key = "'routes'")
public boolean deleteMenu(Long id) { public boolean deleteMenu(Long id) {
boolean result = this.remove(new LambdaQueryWrapper<SysMenu>() boolean result = this.remove(new LambdaQueryWrapper<Menu>()
.eq(SysMenu::getId, id) .eq(Menu::getId, id)
.or() .or()
.apply("CONCAT (',',tree_path,',') LIKE CONCAT('%,',{0},',%')", id)); .apply("CONCAT (',',tree_path,',') LIKE CONCAT('%,',{0},',%')", id));
@@ -369,19 +369,19 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
@Override @Override
public void saveMenu(Long parentMenuId, GenConfig genConfig) { public void saveMenu(Long parentMenuId, GenConfig genConfig) {
SysMenu parentMenu = this.getById(parentMenuId); Menu parentMenu = this.getById(parentMenuId);
Assert.notNull(parentMenu, "上级菜单不存在"); Assert.notNull(parentMenu, "上级菜单不存在");
String entityName = genConfig.getEntityName(); String entityName = genConfig.getEntityName();
long count = this.count(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getRouteName, entityName)); long count = this.count(new LambdaQueryWrapper<Menu>().eq(Menu::getRouteName, entityName));
if (count > 0) { if (count > 0) {
return; return;
} }
// 获取父级菜单子菜单最带的排序 // 获取父级菜单子菜单最带的排序
SysMenu maxSortMenu = this.getOne(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, parentMenuId) Menu maxSortMenu = this.getOne(new LambdaQueryWrapper<Menu>().eq(Menu::getParentId, parentMenuId)
.orderByDesc(SysMenu::getSort) .orderByDesc(Menu::getSort)
.last("limit 1") .last("limit 1")
); );
int sort = 1; int sort = 1;
@@ -390,7 +390,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
} }
SysMenu menu = new SysMenu(); Menu menu = new Menu();
menu.setParentId(parentMenuId); menu.setParentId(parentMenuId);
menu.setName(genConfig.getBusinessName()); menu.setName(genConfig.getBusinessName());
@@ -414,7 +414,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
String[] perms = {"query", "add", "edit", "delete"}; String[] perms = {"query", "add", "edit", "delete"};
for (int i = 0; i < actions.length; i++) { for (int i = 0; i < actions.length; i++) {
SysMenu button = new SysMenu(); Menu button = new Menu();
button.setParentId(menu.getId()); button.setParentId(menu.getId());
button.setType(MenuTypeEnum.BUTTON); button.setType(MenuTypeEnum.BUTTON);
button.setName(actions[i]); button.setName(actions[i]);

View File

@@ -2,11 +2,11 @@ package com.youlai.boot.system.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.mapper.SysRoleMenuMapper; import com.youlai.boot.system.mapper.RoleMenuMapper;
import com.youlai.boot.system.model.bo.RolePermsBO; import com.youlai.boot.system.model.bo.RolePermsBO;
import com.youlai.boot.system.model.entity.SysRoleMenu; import com.youlai.boot.system.model.entity.RoleMenu;
import com.youlai.boot.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.system.service.SysRoleMenuService; import com.youlai.boot.system.service.RoleMenuService;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -26,7 +26,7 @@ import java.util.Set;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRoleMenu> implements SysRoleMenuService { public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService {
private final RedisTemplate<String, Object> redisTemplate; private final RedisTemplate<String, Object> redisTemplate;

View File

@@ -8,18 +8,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.converter.RoleConverter; import com.youlai.boot.system.converter.RoleConverter;
import com.youlai.boot.system.mapper.SysRoleMapper; import com.youlai.boot.system.mapper.RoleMapper;
import com.youlai.boot.system.model.entity.SysRole; import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.system.model.entity.SysRoleMenu; import com.youlai.boot.system.model.entity.RoleMenu;
import com.youlai.boot.system.model.form.RoleForm; import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery; import com.youlai.boot.system.model.query.RolePageQuery;
import com.youlai.boot.system.model.vo.RolePageVO; import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.constant.SystemConstants; import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.core.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import com.youlai.boot.system.service.SysRoleMenuService; import com.youlai.boot.system.service.RoleMenuService;
import com.youlai.boot.system.service.SysRoleService; import com.youlai.boot.system.service.RoleService;
import com.youlai.boot.system.service.SysUserRoleService; import com.youlai.boot.system.service.UserRoleService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -37,10 +37,10 @@ import java.util.Set;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService { public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
private final SysRoleMenuService roleMenuService; private final RoleMenuService roleMenuService;
private final SysUserRoleService userRoleService; private final UserRoleService userRoleService;
private final RoleConverter roleConverter; private final RoleConverter roleConverter;
/** /**
@@ -57,15 +57,15 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
String keywords = queryParams.getKeywords(); String keywords = queryParams.getKeywords();
// 查询数据 // 查询数据
Page<SysRole> rolePage = this.page(new Page<>(pageNum, pageSize), Page<Role> rolePage = this.page(new Page<>(pageNum, pageSize),
new LambdaQueryWrapper<SysRole>() new LambdaQueryWrapper<Role>()
.and(StrUtil.isNotBlank(keywords), .and(StrUtil.isNotBlank(keywords),
wrapper -> wrapper ->
wrapper.like(StrUtil.isNotBlank(keywords), SysRole::getName, keywords) wrapper.like(StrUtil.isNotBlank(keywords), Role::getName, keywords)
.or() .or()
.like(StrUtil.isNotBlank(keywords), SysRole::getCode, keywords) .like(StrUtil.isNotBlank(keywords), Role::getCode, keywords)
) )
.ne(!SecurityUtils.isRoot(), SysRole::getCode, SystemConstants.ROOT_ROLE_CODE) // 非超级管理员不显示超级管理员角色 .ne(!SecurityUtils.isRoot(), Role::getCode, SystemConstants.ROOT_ROLE_CODE) // 非超级管理员不显示超级管理员角色
); );
// 实体转换 // 实体转换
@@ -80,10 +80,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
@Override @Override
public List<Option<Long>> listRoleOptions() { public List<Option<Long>> listRoleOptions() {
// 查询数据 // 查询数据
List<SysRole> roleList = this.list(new LambdaQueryWrapper<SysRole>() List<Role> roleList = this.list(new LambdaQueryWrapper<Role>()
.ne(!SecurityUtils.isRoot(), SysRole::getCode, SystemConstants.ROOT_ROLE_CODE) .ne(!SecurityUtils.isRoot(), Role::getCode, SystemConstants.ROOT_ROLE_CODE)
.select(SysRole::getId, SysRole::getName) .select(Role::getId, Role::getName)
.orderByAsc(SysRole::getSort) .orderByAsc(Role::getSort)
); );
// 实体转换 // 实体转换
@@ -102,22 +102,22 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
Long roleId = roleForm.getId(); Long roleId = roleForm.getId();
// 编辑角色时判断角色是否存在 // 编辑角色时判断角色是否存在
SysRole oldRole = null; Role oldRole = null;
if (roleId != null) { if (roleId != null) {
oldRole = this.getById(roleId); oldRole = this.getById(roleId);
Assert.isTrue(oldRole != null, "角色不存在"); Assert.isTrue(oldRole != null, "角色不存在");
} }
String roleCode = roleForm.getCode(); String roleCode = roleForm.getCode();
long count = this.count(new LambdaQueryWrapper<SysRole>() long count = this.count(new LambdaQueryWrapper<Role>()
.ne(roleId != null, SysRole::getId, roleId) .ne(roleId != null, Role::getId, roleId)
.and(wrapper -> .and(wrapper ->
wrapper.eq(SysRole::getCode, roleCode).or().eq(SysRole::getName, roleForm.getName()) wrapper.eq(Role::getCode, roleCode).or().eq(Role::getName, roleForm.getName())
)); ));
Assert.isTrue(count == 0, "角色名称或角色编码已存在,请修改后重试!"); Assert.isTrue(count == 0, "角色名称或角色编码已存在,请修改后重试!");
// 实体转换 // 实体转换
SysRole role = roleConverter.toEntity(roleForm); Role role = roleConverter.toEntity(roleForm);
boolean result = this.saveOrUpdate(role); boolean result = this.saveOrUpdate(role);
if (result) { if (result) {
@@ -141,7 +141,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
*/ */
@Override @Override
public RoleForm getRoleForm(Long roleId) { public RoleForm getRoleForm(Long roleId) {
SysRole entity = this.getById(roleId); Role entity = this.getById(roleId);
return roleConverter.toForm(entity); return roleConverter.toForm(entity);
} }
@@ -155,7 +155,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
@Override @Override
public boolean updateRoleStatus(Long roleId, Integer status) { public boolean updateRoleStatus(Long roleId, Integer status) {
SysRole role = this.getById(roleId); Role role = this.getById(roleId);
Assert.isTrue(role != null, "角色不存在"); Assert.isTrue(role != null, "角色不存在");
role.setStatus(status); role.setStatus(status);
@@ -181,7 +181,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
.toList(); .toList();
for (Long roleId : roleIds) { for (Long roleId : roleIds) {
SysRole role = this.getById(roleId); Role role = this.getById(roleId);
Assert.isTrue(role != null, "角色不存在"); Assert.isTrue(role != null, "角色不存在");
// 判断角色是否被用户关联 // 判断角色是否被用户关联
@@ -219,19 +219,19 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
@Transactional @Transactional
@CacheEvict(cacheNames = "menu", key = "'routes'") @CacheEvict(cacheNames = "menu", key = "'routes'")
public boolean assignMenusToRole(Long roleId, List<Long> menuIds) { public boolean assignMenusToRole(Long roleId, List<Long> menuIds) {
SysRole role = this.getById(roleId); Role role = this.getById(roleId);
Assert.isTrue(role != null, "角色不存在"); Assert.isTrue(role != null, "角色不存在");
// 删除角色菜单 // 删除角色菜单
roleMenuService.remove( roleMenuService.remove(
new LambdaQueryWrapper<SysRoleMenu>() new LambdaQueryWrapper<RoleMenu>()
.eq(SysRoleMenu::getRoleId, roleId) .eq(RoleMenu::getRoleId, roleId)
); );
// 新增角色菜单 // 新增角色菜单
if (CollectionUtil.isNotEmpty(menuIds)) { if (CollectionUtil.isNotEmpty(menuIds)) {
List<SysRoleMenu> roleMenus = menuIds List<RoleMenu> roleMenus = menuIds
.stream() .stream()
.map(menuId -> new SysRoleMenu(roleId, menuId)) .map(menuId -> new RoleMenu(roleId, menuId))
.toList(); .toList();
roleMenuService.saveBatch(roleMenus); roleMenuService.saveBatch(roleMenus);
} }

View File

@@ -3,16 +3,16 @@ package com.youlai.boot.system.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.mapper.SysUserRoleMapper; import com.youlai.boot.system.mapper.UserRoleMapper;
import com.youlai.boot.system.model.entity.SysUserRole; import com.youlai.boot.system.model.entity.UserRole;
import com.youlai.boot.system.service.SysUserRoleService; import com.youlai.boot.system.service.UserRoleService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService { public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {
/** /**
* 保存用户角色 * 保存用户角色
@@ -29,10 +29,10 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
} }
// 用户原角色ID集合 // 用户原角色ID集合
List<Long> userRoleIds = this.list(new LambdaQueryWrapper<SysUserRole>() List<Long> userRoleIds = this.list(new LambdaQueryWrapper<UserRole>()
.eq(SysUserRole::getUserId, userId)) .eq(UserRole::getUserId, userId))
.stream() .stream()
.map(SysUserRole::getRoleId) .map(UserRole::getRoleId)
.collect(Collectors.toList()); .collect(Collectors.toList());
// 新增用户角色 // 新增用户角色
@@ -45,9 +45,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
List<SysUserRole> saveUserRoles = saveRoleIds List<UserRole> saveUserRoles = saveRoleIds
.stream() .stream()
.map(roleId -> new SysUserRole(userId, roleId)) .map(roleId -> new UserRole(userId, roleId))
.collect(Collectors.toList()); .collect(Collectors.toList());
this.saveBatch(saveUserRoles); this.saveBatch(saveUserRoles);
@@ -58,9 +58,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(removeRoleIds)) { if (CollectionUtil.isNotEmpty(removeRoleIds)) {
this.remove(new LambdaQueryWrapper<SysUserRole>() this.remove(new LambdaQueryWrapper<UserRole>()
.eq(SysUserRole::getUserId, userId) .eq(UserRole::getUserId, userId)
.in(SysUserRole::getRoleId, removeRoleIds) .in(UserRole::getRoleId, removeRoleIds)
); );
} }
} }

View File

@@ -11,27 +11,27 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.common.constant.RedisConstants; import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SystemConstants; import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.common.enums.ContactType; import com.youlai.boot.common.enums.ContactType;
import com.youlai.boot.infrastructure.mail.service.MailService; import com.youlai.boot.platform.mail.service.MailService;
import com.youlai.boot.infrastructure.sms.service.SmsService; import com.youlai.boot.platform.sms.service.SmsService;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.form.*; import com.youlai.boot.system.model.form.*;
import com.youlai.boot.config.property.AliyunSmsProperties; import com.youlai.boot.config.property.AliyunSmsProperties;
import com.youlai.boot.system.converter.UserConverter; import com.youlai.boot.system.converter.UserConverter;
import com.youlai.boot.common.exception.BusinessException; import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.system.model.vo.UserProfileVO; import com.youlai.boot.system.model.vo.UserProfileVO;
import com.youlai.boot.core.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import com.youlai.boot.system.mapper.SysUserMapper; import com.youlai.boot.system.mapper.UserMapper;
import com.youlai.boot.system.model.dto.UserAuthInfo; import com.youlai.boot.system.model.dto.UserAuthInfo;
import com.youlai.boot.system.model.bo.UserBO; import com.youlai.boot.system.model.bo.UserBO;
import com.youlai.boot.system.model.entity.SysUser;
import com.youlai.boot.system.model.query.UserPageQuery; import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.dto.UserExportDTO; import com.youlai.boot.system.model.dto.UserExportDTO;
import com.youlai.boot.system.model.vo.UserInfoVO; import com.youlai.boot.system.model.vo.UserInfoVO;
import com.youlai.boot.system.model.vo.UserPageVO; import com.youlai.boot.system.model.vo.UserPageVO;
import com.youlai.boot.core.security.service.PermissionService; import com.youlai.boot.core.security.service.PermissionService;
import com.youlai.boot.system.service.SysRoleMenuService; import com.youlai.boot.system.service.RoleMenuService;
import com.youlai.boot.system.service.SysRoleService; import com.youlai.boot.system.service.RoleService;
import com.youlai.boot.system.service.SysUserRoleService; import com.youlai.boot.system.service.UserRoleService;
import com.youlai.boot.system.service.SysUserService; import com.youlai.boot.system.service.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -52,17 +52,17 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService { public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final SysUserRoleService userRoleService; private final UserRoleService userRoleService;
private final UserConverter userConverter; private final UserConverter userConverter;
private final SysRoleMenuService roleMenuService; private final RoleMenuService roleMenuService;
private final SysRoleService roleService; private final RoleService roleService;
private final PermissionService permissionService; private final PermissionService permissionService;
@@ -116,11 +116,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String username = userForm.getUsername(); String username = userForm.getUsername();
long count = this.count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username)); long count = this.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
Assert.isTrue(count == 0, "用户名已存在"); Assert.isTrue(count == 0, "用户名已存在");
// 实体转换 form->entity // 实体转换 form->entity
SysUser entity = userConverter.toEntity(userForm); User entity = userConverter.toEntity(userForm);
// 设置默认加密密码 // 设置默认加密密码
String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD); String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD);
@@ -149,14 +149,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String username = userForm.getUsername(); String username = userForm.getUsername();
long count = this.count(new LambdaQueryWrapper<SysUser>() long count = this.count(new LambdaQueryWrapper<User>()
.eq(SysUser::getUsername, username) .eq(User::getUsername, username)
.ne(SysUser::getId, userId) .ne(User::getId, userId)
); );
Assert.isTrue(count == 0, "用户名已存在"); Assert.isTrue(count == 0, "用户名已存在");
// form -> entity // form -> entity
SysUser entity = userConverter.toEntity(userForm); User entity = userConverter.toEntity(userForm);
// 修改用户 // 修改用户
boolean result = this.updateById(entity); boolean result = this.updateById(entity);
@@ -231,13 +231,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String username = SecurityUtils.getUsername(); String username = SecurityUtils.getUsername();
// 获取登录用户基础信息 // 获取登录用户基础信息
SysUser user = this.getOne(new LambdaQueryWrapper<SysUser>() User user = this.getOne(new LambdaQueryWrapper<User>()
.eq(SysUser::getUsername, username) .eq(User::getUsername, username)
.select( .select(
SysUser::getId, User::getId,
SysUser::getUsername, User::getUsername,
SysUser::getNickname, User::getNickname,
SysUser::getAvatar User::getAvatar
) )
); );
// entity->VO // entity->VO
@@ -276,7 +276,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override @Override
public boolean updateUserProfile(UserProfileForm formData) { public boolean updateUserProfile(UserProfileForm formData) {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
SysUser entity = userConverter.toEntity(formData); User entity = userConverter.toEntity(formData);
entity.setId(userId); entity.setId(userId);
return this.updateById(entity); return this.updateById(entity);
} }
@@ -292,7 +292,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override @Override
public boolean changePassword(Long userId, PasswordChangeForm data) { public boolean changePassword(Long userId, PasswordChangeForm data) {
SysUser user = this.getById(userId); User user = this.getById(userId);
if (user == null) { if (user == null) {
throw new BusinessException("用户不存在"); throw new BusinessException("用户不存在");
} }
@@ -309,9 +309,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
} }
String newPassword = data.getNewPassword(); String newPassword = data.getNewPassword();
return this.update(new LambdaUpdateWrapper<SysUser>() return this.update(new LambdaUpdateWrapper<User>()
.eq(SysUser::getId, userId) .eq(User::getId, userId)
.set(SysUser::getPassword, passwordEncoder.encode(newPassword)) .set(User::getPassword, passwordEncoder.encode(newPassword))
); );
} }
@@ -324,9 +324,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
*/ */
@Override @Override
public boolean resetPassword(Long userId, String password) { public boolean resetPassword(Long userId, String password) {
return this.update(new LambdaUpdateWrapper<SysUser>() return this.update(new LambdaUpdateWrapper<User>()
.eq(SysUser::getId, userId) .eq(User::getId, userId)
.set(SysUser::getPassword, passwordEncoder.encode(password)) .set(User::getPassword, passwordEncoder.encode(password))
); );
} }
@@ -353,7 +353,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
verificationCodePrefix = RedisConstants.MOBILE_VERIFICATION_CODE_PREFIX; verificationCodePrefix = RedisConstants.MOBILE_VERIFICATION_CODE_PREFIX;
break; break;
case EMAIL: case EMAIL:
mailService.sendSimpleMail(contact, "验证码", "您的验证码是:" + code); mailService.sendMail(contact, "验证码", "您的验证码是:" + code);
verificationCodePrefix = RedisConstants.EMAIL_VERIFICATION_CODE_PREFIX; verificationCodePrefix = RedisConstants.EMAIL_VERIFICATION_CODE_PREFIX;
break; break;
default: default:
@@ -373,7 +373,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override @Override
public boolean bindMobile(MobileBindingForm data) { public boolean bindMobile(MobileBindingForm data) {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
SysUser user = this.getById(userId); User user = this.getById(userId);
if (user == null) { if (user == null) {
throw new BusinessException("用户不存在"); throw new BusinessException("用户不存在");
} }
@@ -386,9 +386,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
throw new BusinessException("验证码错误"); throw new BusinessException("验证码错误");
} }
// 更新手机号码 // 更新手机号码
return this.update(new LambdaUpdateWrapper<SysUser>() return this.update(new LambdaUpdateWrapper<User>()
.eq(SysUser::getId, userId) .eq(User::getId, userId)
.set(SysUser::getMobile, contact) .set(User::getMobile, contact)
); );
} }
@@ -401,7 +401,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override @Override
public boolean bindEmail(EmailChangeForm data) { public boolean bindEmail(EmailChangeForm data) {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
SysUser user = this.getById(userId); User user = this.getById(userId);
if (user == null) { if (user == null) {
throw new BusinessException("用户不存在"); throw new BusinessException("用户不存在");
} }
@@ -414,9 +414,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
throw new BusinessException("验证码错误"); throw new BusinessException("验证码错误");
} }
// 更新邮箱 // 更新邮箱
return this.update(new LambdaUpdateWrapper<SysUser>() return this.update(new LambdaUpdateWrapper<User>()
.eq(SysUser::getId, userId) .eq(User::getId, userId)
.set(SysUser::getEmail, email) .set(User::getEmail, email)
); );
} }
} }

View File

@@ -1,5 +1,4 @@
server:
port: 8989
spring: spring:
jackson: jackson:
@@ -147,11 +146,12 @@ springdoc:
path: /v3/api-docs path: /v3/api-docs
group-configs: group-configs:
- group: '系统管理' - group: '系统管理'
paths-to-match: '/**' paths-to-match: "/**"
packages-to-scan: com.youlai.boot.system.controller packages-to-scan:
- group: '登录认证' - com.youlai.boot.system.controller
paths-to-match: '/**' - com.youlai.boot.platform.auth.controller
packages-to-scan: com.youlai.boot.infrastructure.auth.controller - com.youlai.boot.platform.file.controller
- com.youlai.boot.platform.generator.controller
default-flat-param-object: true default-flat-param-object: true
# knife4j 接口文档配置 # knife4j 接口文档配置

View File

@@ -1,6 +1,3 @@
server:
port: 8989
spring: spring:
jackson: jackson:
## 默认序列化时间格式 ## 默认序列化时间格式
@@ -130,9 +127,13 @@ springdoc:
api-docs: api-docs:
path: /v3/api-docs path: /v3/api-docs
group-configs: group-configs:
- group: 'default' - group: '系统管理'
paths-to-match: '/**' paths-to-match: "/**"
packages-to-scan: com.**.controller packages-to-scan:
- com.youlai.boot.system.controller
- com.youlai.boot.platform.auth.controller
- com.youlai.boot.platform.file.controller
- com.youlai.boot.platform.generator.controller
default-flat-param-object: true default-flat-param-object: true
# knife4j 接口文档配置 # knife4j 接口文档配置

View File

@@ -1,3 +1,5 @@
server:
port: 8989
spring: spring:
main: main:
allow-circular-references: true allow-circular-references: true

View File

@@ -2,6 +2,6 @@
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.system.mapper.SysDeptMapper"> <mapper namespace="com.youlai.boot.system.mapper.ConfigMapper">
</mapper> </mapper>

Some files were not shown because too many files have changed in this diff Show More