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

View File

@@ -6,16 +6,18 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 应用启动类
*
* @author Ray
* @since 0.0.1
*/
@SpringBootApplication
@ConfigurationPropertiesScan
@EnableScheduling
public class YouLaiBootApplication {
public class YouLaiApplication {
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.*;
/**
* MP数据权限注解
* 数据权限注解
*
* @author zc
* @since 2.0.0

View File

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

View File

@@ -16,7 +16,7 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Documented
@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.filter.JwtValidationFilter;
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 org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -45,7 +45,7 @@ public class SecurityConfig {
private final RedisTemplate<String, Object> redisTemplate;
private final CodeGenerator codeGenerator;
private final SecurityProperties securityProperties;
private final SysConfigService sysConfigService;
private final ConfigService configService;
@Bean
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);
// JWT 校验过滤器

View File

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

View File

@@ -7,10 +7,9 @@ import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.util.IPUtils;
import com.youlai.boot.system.model.entity.SysLog;
import com.youlai.boot.common.annotation.LogAnnotation;
import com.youlai.boot.system.model.entity.Log;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -32,15 +31,15 @@ import org.springframework.stereotype.Component;
@Slf4j
public class LogAspect {
private final SysLogService logService;
private final LogService logService;
private final HttpServletRequest request;
@Pointcut("@annotation(com.youlai.boot.common.annotation.LogAnnotation)")
@Pointcut("@annotation(com.youlai.boot.common.annotation.Log)")
public void logPointcut() {
}
@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();
Long userId = null;
@@ -55,7 +54,7 @@ public class LogAspect {
long executionTime = timer.interval();
// 创建日志记录
SysLog log = new SysLog();
Log log = new Log();
log.setModule(logAnnotation.module());
log.setContent(logAnnotation.value());
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.result.ResultCode;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -34,24 +34,24 @@ import java.util.concurrent.TimeUnit;
@Component
@Slf4j
@RequiredArgsConstructor
public class NoRepeatAspect {
public class RepeatSubmitAspect {
private final RedissonClient redissonClient;
/**
* 防重复提交切点
*/
@Pointcut("@annotation(noRepeat)")
public void preventDuplicateSubmitPointCut(NoRepeat noRepeat) {
@Pointcut("@annotation(repeatSubmit)")
public void preventDuplicateSubmitPointCut(RepeatSubmit repeatSubmit) {
log.info("定义防重复提交切点");
}
@Around("preventDuplicateSubmitPointCut(noRepeat)")
public Object doAround(ProceedingJoinPoint pjp, NoRepeat noRepeat) throws Throwable {
@Around("preventDuplicateSubmitPointCut(repeatSubmit)")
public Object doAround(ProceedingJoinPoint pjp, RepeatSubmit repeatSubmit) throws Throwable {
String resubmitLockKey = generateResubmitLockKey();
if (resubmitLockKey != null) {
int expire = noRepeat.expire(); // 防重提交锁过期时间
int expire = repeatSubmit.expire(); // 防重提交锁过期时间
RLock lock = redissonClient.getLock(resubmitLockKey);
boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败直接返回 false
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.util.IPUtils;
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.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@@ -27,11 +27,11 @@ import java.util.concurrent.TimeUnit;
public class RateLimiterFilter extends OncePerRequestFilter {
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.sysConfigService = sysConfigService;
this.configService = configService;
}
/**
@@ -48,7 +48,7 @@ public class RateLimiterFilter extends OncePerRequestFilter {
if (count == null || count == 1) {
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;
if(systemConfig != null){
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.system.model.dto.UserAuthInfo;
import com.youlai.boot.system.service.SysUserService;
import com.youlai.boot.system.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.userdetails.UserDetails;
@@ -21,7 +21,7 @@ import org.springframework.stereotype.Service;
@Slf4j
public class SysUserDetailsService implements UserDetailsService {
private final SysUserService sysUserService;
private final UserService userService;
/**
* 根据用户名获取用户信息
@@ -33,7 +33,7 @@ public class SysUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
UserAuthInfo userAuthInfo = sysUserService.getUserAuthInfo(username);
UserAuthInfo userAuthInfo = userService.getUserAuthInfo(username);
if (userAuthInfo == null) {
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.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.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.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -30,7 +30,7 @@ public class AuthController {
@Operation(summary = "登录")
@PostMapping("/login")
@LogAnnotation(value = "登录", module = LogModuleEnum.LOGIN)
@Log(value = "登录", module = LogModuleEnum.LOGIN)
public Result<LoginResult> login(
@Parameter(description = "用户名", example = "admin") @RequestParam String username,
@Parameter(description = "密码", example = "123456") @RequestParam String password
@@ -41,7 +41,7 @@ public class AuthController {
@Operation(summary = "注销")
@DeleteMapping("/logout")
@LogAnnotation(value = "注销", module = LogModuleEnum.LOGIN)
@Log(value = "注销", module = LogModuleEnum.LOGIN)
public Result<?> logout() {
authService.logout();
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.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.CaptchaUtil;
@@ -10,7 +10,7 @@ import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import com.youlai.boot.common.constant.SecurityConstants;
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.LoginResult;
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.infrastructure.file.service.FileService;
import com.youlai.boot.platform.file.service.FileService;
import com.youlai.boot.system.model.dto.FileInfo;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
@@ -30,7 +30,13 @@ public class FileController {
@PostMapping
@Operation(summary = "文件上传")
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
) {
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 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.io.FileUtil;
@@ -8,7 +8,7 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
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 jakarta.annotation.PostConstruct;
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.io.FileUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
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 io.minio.*;
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.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.config.property.GeneratorProperties;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.infrastructure.generator.service.GeneratorService;
import com.youlai.boot.infrastructure.generator.model.form.GenConfigForm;
import com.youlai.boot.platform.generator.service.GeneratorService;
import com.youlai.boot.platform.generator.model.form.GenConfigForm;
import com.youlai.boot.system.model.query.TablePageQuery;
import com.youlai.boot.system.model.vo.GeneratorPreviewVO;
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.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -41,7 +41,7 @@ public class GeneratorController {
@Operation(summary = "获取数据表分页列表")
@GetMapping("/table/page")
@LogAnnotation(value = "代码生成分页列表", module = LogModuleEnum.OTHER)
@Log(value = "代码生成分页列表", module = LogModuleEnum.OTHER)
public PageResult<TablePageVO> getTablePage(
TablePageQuery queryParams
) {
@@ -60,7 +60,7 @@ public class GeneratorController {
@Operation(summary = "保存代码生成配置")
@PostMapping("/{tableName}/config")
@LogAnnotation(value = "生成代码", module = LogModuleEnum.OTHER)
@Log(value = "生成代码", module = LogModuleEnum.OTHER)
public Result<?> saveGenConfig(@RequestBody GenConfigForm formData) {
generatorService.saveGenConfig(formData);
return Result.success();
@@ -77,7 +77,7 @@ public class GeneratorController {
@Operation(summary = "获取预览生成代码")
@GetMapping("/{tableName}/preview")
@LogAnnotation(value = "预览生成代码", module = LogModuleEnum.OTHER)
@Log(value = "预览生成代码", module = LogModuleEnum.OTHER)
public Result<List<GeneratorPreviewVO>> getTablePreviewData(@PathVariable String tableName) {
List<GeneratorPreviewVO> list = generatorService.getTablePreviewData(tableName);
return Result.success(list);
@@ -85,7 +85,7 @@ public class GeneratorController {
@Operation(summary = "下载代码")
@GetMapping("/{tableName}/download")
@LogAnnotation(value = "下载代码", module = LogModuleEnum.OTHER)
@Log(value = "下载代码", module = LogModuleEnum.OTHER)
public void downloadZip(HttpServletResponse response, @PathVariable String tableName) throws IOException {
String[] tableNames = tableName.split(",");
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.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.ColumnMetaData;
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.vo.TablePageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -13,7 +13,7 @@ import java.util.List;
@Mapper
public interface DatabaseMapper extends BaseMapper<SysDept> {
public interface DatabaseMapper extends BaseMapper<Dept> {
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.youlai.boot.infrastructure.generator.model.entity.GenConfig;
import com.youlai.boot.platform.generator.model.entity.GenConfig;
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.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig;
import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
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.*;

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.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.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.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.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.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.vo.GeneratorPreviewVO;
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.youlai.boot.infrastructure.generator.mapper.GenConfigMapper;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig;
import com.youlai.boot.infrastructure.generator.service.GenConfigService;
import com.youlai.boot.platform.generator.mapper.GenConfigMapper;
import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.platform.generator.service.GenConfigService;
import lombok.RequiredArgsConstructor;
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.youlai.boot.infrastructure.generator.mapper.GenFieldConfigMapper;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig;
import com.youlai.boot.infrastructure.generator.service.GenFieldConfigService;
import com.youlai.boot.platform.generator.mapper.GenFieldConfigMapper;
import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
import com.youlai.boot.platform.generator.service.GenFieldConfigService;
import lombok.RequiredArgsConstructor;
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.date.DateUtil;
@@ -11,26 +11,26 @@ import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.JavaTypeEnum;
import com.youlai.boot.common.enums.QueryTypeEnum;
import com.youlai.boot.config.property.GeneratorProperties;
import com.youlai.boot.infrastructure.generator.service.GenConfigService;
import com.youlai.boot.infrastructure.generator.service.GenFieldConfigService;
import com.youlai.boot.infrastructure.generator.service.GeneratorService;
import com.youlai.boot.platform.generator.service.GenConfigService;
import com.youlai.boot.platform.generator.service.GenFieldConfigService;
import com.youlai.boot.platform.generator.service.GeneratorService;
import com.youlai.boot.system.converter.GenConfigConverter;
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.TableMetaData;
import com.youlai.boot.infrastructure.generator.model.entity.GenConfig;
import com.youlai.boot.infrastructure.generator.model.entity.GenFieldConfig;
import com.youlai.boot.infrastructure.generator.model.form.GenConfigForm;
import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.platform.generator.model.entity.GenFieldConfig;
import com.youlai.boot.platform.generator.model.form.GenConfigForm;
import com.youlai.boot.system.model.query.TablePageQuery;
import com.youlai.boot.system.model.vo.GeneratorPreviewVO;
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 org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Value;
@@ -58,7 +58,7 @@ public class GeneratorServiceImpl implements GeneratorService {
private final GenConfigService genConfigService;
private final GenFieldConfigService genFieldConfigService;
private final GenConfigConverter genConfigConverter;
private final SysMenuService menuService;
private final MenuService menuService;
@Value("${spring.profiles.active}")
private String springProfilesActive;
@@ -112,7 +112,7 @@ public class GeneratorServiceImpl implements GeneratorService {
String entityName = StrUtil.toCamelCase(StrUtil.removePrefix(tableName, tableName.split("_")[0]));
genConfig.setEntityName(entityName);
String packageName = YouLaiBootApplication.class.getPackageName();
String packageName = YouLaiApplication.class.getPackageName();
genConfig.setPackageName(StrUtil.subBefore(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 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 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.infrastructure.mail.service.MailService;
import com.youlai.boot.platform.mail.service.MailService;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
@@ -37,7 +37,7 @@ public class MailServiceImpl implements MailService {
* @param text 邮件内容
*/
@Override
public boolean sendSimpleMail(String to, String subject, String text) {
public void sendMail(String to, String subject, String text) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(mailProperties.getFrom());
@@ -45,11 +45,8 @@ public class MailServiceImpl implements MailService {
message.setSubject(subject);
message.setText(text);
mailSender.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
log.error("发送邮件失败{}", e.getMessage());
return false;
}
}
@@ -62,7 +59,7 @@ public class MailServiceImpl implements MailService {
* @param filePath 附件路径
*/
@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();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
@@ -75,9 +72,8 @@ public class MailServiceImpl implements MailService {
helper.addAttachment(file.getFilename(), file);
mailSender.send(message);
return true;
} 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.CommonResponse;
@@ -9,7 +9,7 @@ import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
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 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 lombok.RequiredArgsConstructor;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.system.service;
package com.youlai.boot.platform.websocket.service;
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.service.WebsocketService;
import com.youlai.boot.platform.websocket.service.WebsocketService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.query.ConfigPageQuery;
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 jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
@@ -29,15 +29,15 @@ import org.springframework.security.access.prepost.PreAuthorize;
@RequiredArgsConstructor
@Tag(name = "10.系统配置")
@RequestMapping("/api/v1/config")
public class SysConfigController {
public class ConfigController {
private final SysConfigService sysConfigService;
private final ConfigService configService;
@GetMapping("/page")
@Operation(summary = "系统配置分页列表")
@PreAuthorize("@ss.hasPerm('sys:config:query')")
public PageResult<ConfigVO> page(@ParameterObject ConfigPageQuery configPageQuery) {
IPage<ConfigVO> result = sysConfigService.page(configPageQuery);
IPage<ConfigVO> result = configService.page(configPageQuery);
return PageResult.success(result);
}
@@ -45,7 +45,7 @@ public class SysConfigController {
@PostMapping
@PreAuthorize("@ss.hasPerm('sys:config:add')")
public Result<?> save(@RequestBody @Valid ConfigForm configForm) {
return Result.judge(sysConfigService.save(configForm));
return Result.judge(configService.save(configForm));
}
@Operation(summary = "获取系统配置表单数据")
@@ -53,7 +53,7 @@ public class SysConfigController {
public Result<ConfigForm> getConfigForm(
@Parameter(description = "系统配置ID") @PathVariable Long id
) {
ConfigForm formData = sysConfigService.getConfigFormData(id);
ConfigForm formData = configService.getConfigFormData(id);
return Result.success(formData);
}
@@ -61,21 +61,21 @@ public class SysConfigController {
@PatchMapping
@PreAuthorize("@ss.hasPerm('sys:config:refresh')")
public Result<ConfigForm> refreshCache() {
return Result.judge(sysConfigService.refreshCache());
return Result.judge(configService.refreshCache());
}
@PutMapping(value = "/{id}")
@Operation(summary = "修改系统配置")
@PreAuthorize("@ss.hasPerm('sys:config:update')")
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}")
@Operation(summary = "删除系统配置")
@PreAuthorize("@ss.hasPerm('sys:config:delete')")
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;
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.result.Result;
import com.youlai.boot.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery;
import com.youlai.boot.system.model.vo.DeptVO;
import com.youlai.boot.common.annotation.LogAnnotation;
import com.youlai.boot.system.service.SysDeptService;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.DeptService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
@@ -29,13 +29,13 @@ import java.util.List;
@RestController
@RequestMapping("/api/v1/dept")
@RequiredArgsConstructor
public class SysDeptController {
public class DeptController {
private final SysDeptService deptService;
private final DeptService deptService;
@Operation(summary = "部门列表")
@GetMapping
@LogAnnotation( value = "部门列表",module = LogModuleEnum.DEPT)
@Log( value = "部门列表",module = LogModuleEnum.DEPT)
public Result<List<DeptVO>> getDeptList(
DeptQuery queryParams
) {
@@ -53,7 +53,7 @@ public class SysDeptController {
@Operation(summary = "新增部门")
@PostMapping
@PreAuthorize("@ss.hasPerm('sys:dept:add')")
@NoRepeat
@RepeatSubmit
public Result<?> saveDept(
@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.system.model.query.DictPageQuery;
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.common.annotation.LogAnnotation;
import com.youlai.boot.system.service.SysDictService;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.DictService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
@@ -30,13 +30,13 @@ import java.util.List;
@RestController
@RequestMapping("/api/v1/dict")
@RequiredArgsConstructor
public class SysDictController {
public class DictController {
private final SysDictService dictService;
private final DictService dictService;
@Operation(summary = "字典分页列表")
@GetMapping("/page")
@LogAnnotation( value = "字典分页列表",module = LogModuleEnum.DICT)
@Log( value = "字典分页列表",module = LogModuleEnum.DICT)
public PageResult<DictPageVO> getDictPage(
DictPageQuery queryParams
) {
@@ -72,7 +72,7 @@ public class SysDictController {
@Operation(summary = "新增字典")
@PostMapping
@PreAuthorize("@ss.hasPerm('sys:dict:add')")
@NoRepeat
@RepeatSubmit
public Result<?> saveDict(@RequestBody DictForm formData) {
boolean result = dictService.saveDict(formData);
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.VisitStatsVO;
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.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,9 +28,9 @@ import java.util.List;
@RestController
@RequestMapping("/api/v1/logs")
@RequiredArgsConstructor
public class SysLogController {
public class LogController {
private final SysLogService logService;
private final LogService logService;
@Operation(summary = "日志分页列表")
@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.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.query.MenuQuery;
import com.youlai.boot.system.model.vo.MenuVO;
import com.youlai.boot.common.model.Option;
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.system.service.SysMenuService;
import com.youlai.boot.system.service.MenuService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -33,13 +33,13 @@ import java.util.Set;
@RequestMapping("/api/v1/menus")
@RequiredArgsConstructor
@Slf4j
public class SysMenuController {
public class MenuController {
private final SysMenuService menuService;
private final MenuService menuService;
@Operation(summary = "菜单列表")
@GetMapping
@LogAnnotation( value = "菜单列表",module = LogModuleEnum.MENU)
@Log( value = "菜单列表",module = LogModuleEnum.MENU)
public Result<List<MenuVO>> listMenus(MenuQuery queryParams) {
List<MenuVO> menuList = menuService.listMenus(queryParams);
return Result.success(menuList);
@@ -75,7 +75,7 @@ public class SysMenuController {
@Operation(summary = "新增菜单")
@PostMapping
@PreAuthorize("@ss.hasPerm('sys:menu:add')")
@NoRepeat
@RepeatSubmit
public Result<?> addMenu(@RequestBody MenuForm menuForm) {
boolean result = menuService.saveMenu(menuForm);
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.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.result.PageResult;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery;
import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.annotation.LogAnnotation;
import com.youlai.boot.system.service.SysRoleService;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.RoleService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
@@ -33,13 +33,13 @@ import java.util.List;
@RestController
@RequestMapping("/api/v1/roles")
@RequiredArgsConstructor
public class SysRoleController {
public class RoleController {
private final SysRoleService roleService;
private final RoleService roleService;
@Operation(summary = "角色分页列表")
@GetMapping("/page")
@LogAnnotation( value = "角色分页列表",module = LogModuleEnum.ROLE)
@Log( value = "角色分页列表",module = LogModuleEnum.ROLE)
public PageResult<RolePageVO> getRolePage(
RolePageQuery queryParams
) {
@@ -57,7 +57,7 @@ public class SysRoleController {
@Operation(summary = "新增角色")
@PostMapping
@PreAuthorize("@ss.hasPerm('sys:role:add')")
@NoRepeat
@RepeatSubmit
public Result<?> addRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = roleService.saveRole(roleForm);
return Result.judge(result);

View File

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

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.converter;
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.form.ConfigForm;
import org.mapstruct.Mapper;
@@ -15,9 +15,9 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
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;
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.form.DeptForm;
import org.mapstruct.Mapper;
@@ -14,10 +14,10 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
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;
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.form.DictForm;
import org.mapstruct.Mapper;
@@ -15,9 +15,9 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
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;
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.common.model.Option;
import com.youlai.boot.system.model.form.DictForm;
@@ -20,20 +20,20 @@ import java.util.List;
@Mapper(componentModel = "spring")
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);
List<SysDictItem> toEntity(List<DictForm.DictItem> dictItems);
DictItem toEntity(DictForm.DictItem dictItems);
List<DictItem> toEntity(List<DictForm.DictItem> dictItems);
DictForm.DictItem toDictItem(SysDictItem entity);
List<DictForm.DictItem> toDictItem(List<SysDictItem> entities);
DictForm.DictItem toDictItem(DictItem entity);
List<DictForm.DictItem> toDictItem(List<DictItem> entities);
@Mappings({
@Mapping(target = "value", source = "value"),
@Mapping(target = "label", source = "name")
})
Option<Long> toOption(SysDictItem dictItem);
List<Option<Long>> toOption(List<SysDictItem> dictItems);
Option<Long> toOption(DictItem dictItem);
List<Option<Long>> toOption(List<DictItem> dictItems);
}

View File

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

View File

@@ -1,6 +1,6 @@
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.form.MenuForm;
import org.mapstruct.Mapper;
@@ -15,12 +15,12 @@ import org.mapstruct.Mapping;
@Mapper(componentModel = "spring")
public interface MenuConverter {
MenuVO toVo(SysMenu entity);
MenuVO toVo(Menu entity);
@Mapping(target = "params", ignore = true)
MenuForm toForm(SysMenu entity);
MenuForm toForm(Menu entity);
@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;
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.common.model.Option;
import com.youlai.boot.system.model.form.RoleForm;
@@ -20,17 +20,17 @@ import java.util.List;
@Mapper(componentModel = "spring")
public interface RoleConverter {
Page<RolePageVO> toPageVo(Page<SysRole> page);
Page<RolePageVO> toPageVo(Page<Role> page);
@Mappings({
@Mapping(target = "value", source = "id"),
@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;
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.UserPageVO;
import com.youlai.boot.system.model.vo.UserProfileVO;
@@ -30,20 +30,20 @@ public interface UserConverter {
Page<UserPageVO> toPageVo(Page<UserBO> bo);
UserForm toForm(SysUser entity);
UserForm toForm(User entity);
@InheritInverseConfiguration(name = "toForm")
SysUser toEntity(UserForm entity);
User toEntity(UserForm entity);
@Mappings({
@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);
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.youlai.boot.common.base.BaseAnalysisEventListener;
import com.youlai.boot.system.model.entity.SysDept;
import com.youlai.boot.system.model.entity.SysRole;
import com.youlai.boot.system.model.entity.SysUser;
import com.youlai.boot.system.model.entity.SysUserRole;
import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.entity.UserRole;
import com.youlai.boot.common.base.IBaseEnum;
import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.common.enums.GenderEnum;
import com.youlai.boot.common.enums.StatusEnum;
import com.youlai.boot.system.converter.UserConverter;
import com.youlai.boot.system.model.dto.UserImportDTO;
import com.youlai.boot.system.service.SysDeptService;
import com.youlai.boot.system.service.SysRoleService;
import com.youlai.boot.system.service.SysUserRoleService;
import com.youlai.boot.system.service.SysUserService;
import com.youlai.boot.system.service.DeptService;
import com.youlai.boot.system.service.RoleService;
import com.youlai.boot.system.service.UserRoleService;
import com.youlai.boot.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -49,19 +49,19 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
// 导入返回信息
StringBuilder msg = new StringBuilder();
private final SysUserService userService;
private final UserService userService;
private final PasswordEncoder passwordEncoder;
private final UserConverter userConverter;
private final SysRoleService roleService;
private final SysUserRoleService userRoleService;
private final SysDeptService deptService;
private final RoleService roleService;
private final UserRoleService userRoleService;
private final DeptService deptService;
public UserImportListener() {
this.userService = SpringUtil.getBean(SysUserService.class);
this.userService = SpringUtil.getBean(UserService.class);
this.passwordEncoder = SpringUtil.getBean(PasswordEncoder.class);
this.roleService = SpringUtil.getBean(SysRoleService.class);
this.userRoleService = SpringUtil.getBean(SysUserRoleService.class);
this.deptService = SpringUtil.getBean(SysDeptService.class);
this.roleService = SpringUtil.getBean(RoleService.class);
this.userRoleService = SpringUtil.getBean(UserRoleService.class);
this.deptService = SpringUtil.getBean(DeptService.class);
this.userConverter = SpringUtil.getBean(UserConverter.class);
}
@@ -83,7 +83,7 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
if (StrUtil.isBlank(username)) {
validationMsg.append("用户名为空;");
} 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) {
validationMsg.append("用户名已存在;");
}
@@ -105,7 +105,7 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
if (validationMsg.isEmpty()) {
// 校验通过,持久化至数据库
SysUser entity = userConverter.toEntity(userImportDTO);
User entity = userConverter.toEntity(userImportDTO);
entity.setPassword(passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD)); // 默认密码
// 性别翻译
String genderLabel = userImportDTO.getGenderLabel();
@@ -119,19 +119,19 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
List<Long> roleIds = null;
if (StrUtil.isNotBlank(roleCodes)) {
roleIds = roleService.list(
new LambdaQueryWrapper<SysRole>()
.in(SysRole::getCode, (Object) roleCodes.split(","))
.eq(SysRole::getStatus, StatusEnum.ENABLE.getValue())
.select(SysRole::getId)
new LambdaQueryWrapper<Role>()
.in(Role::getCode, (Object) roleCodes.split(","))
.eq(Role::getStatus, StatusEnum.ENABLE.getValue())
.select(Role::getId)
).stream()
.map(SysRole::getId)
.map(Role::getId)
.collect(Collectors.toList());
}
// 部门解析
String deptCode = userImportDTO.getDeptCode();
if (StrUtil.isNotBlank(deptCode)) {
SysDept dept = deptService.getOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getCode, deptCode)
.select(SysDept::getId)
Dept dept = deptService.getOne(new LambdaQueryWrapper<Dept>().eq(Dept::getCode, deptCode)
.select(Dept::getId)
);
if (dept != null) {
entity.setDeptId(dept.getId());
@@ -144,8 +144,8 @@ public class UserImportListener extends BaseAnalysisEventListener<UserImportDTO>
validCount++;
// 保存用户角色关联
if (CollectionUtil.isNotEmpty(roleIds)) {
List<SysUserRole> userRoles = roleIds.stream()
.map(roleId -> new SysUserRole(entity.getId(), roleId))
List<UserRole> userRoles = roleIds.stream()
.map(roleId -> new UserRole(entity.getId(), roleId))
.collect(Collectors.toList());
userRoleService.saveBatch(userRoles);
}

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.mapper;
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;
/**
@@ -11,6 +11,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2024-7-29 11:41:04
*/
@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.toolkit.Constants;
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.Param;
@@ -12,9 +12,9 @@ import java.util.List;
@Mapper
public interface SysDeptMapper extends BaseMapper<SysDept> {
public interface DeptMapper extends BaseMapper<Dept> {
@DataPermission(deptIdColumnName = "id")
@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;
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;
/**
@@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2.9.0
*/
@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.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.vo.DictPageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -14,7 +14,7 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2.9.0
*/
@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.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.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO;
@@ -19,7 +19,7 @@ import java.util.List;
* @since 2.10.0
*/
@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.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 java.util.List;
@@ -16,7 +16,7 @@ import java.util.Set;
*/
@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;
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 java.util.Set;
@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.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 java.util.List;
@@ -15,7 +15,7 @@ import java.util.Set;
* @since 2022/6/4
*/
@Mapper
public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
/**
* 获取角色拥有的菜单ID集合

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.form.UserForm;
import com.youlai.boot.common.annotation.DataPermission;
@@ -20,7 +20,7 @@ import java.util.List;
* @since 2022/1/14
*/
@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;
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;
/**
@@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2022/1/15
*/
@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 = "系统配置")
@TableName("sys_config")
@Data
public class SysConfig extends BaseEntity {
public class Config extends BaseEntity {
@Schema(description = "配置名称")
private String configName;

View File

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

View File

@@ -1,5 +1,6 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity;
import lombok.Data;
@@ -9,8 +10,9 @@ import lombok.Data;
* @author haoxr
* @since 2022/12/17
*/
@TableName("sys_dict")
@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 com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
@@ -13,8 +14,9 @@ import lombok.Data;
* @author haoxr
* @since 2022/12/17
*/
@TableName("sys_dict_item")
@Data
public class SysDictItem implements Serializable {
public class DictItem implements Serializable {
/**
* 主键
*/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.query.ConfigPageQuery;
import com.youlai.boot.system.model.vo.ConfigVO;
@@ -13,7 +13,7 @@ import com.youlai.boot.system.model.vo.ConfigVO;
* @author Theo
* @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;
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.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery;
@@ -15,7 +15,7 @@ import java.util.List;
* @author haoxr
* @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;
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
* @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.service.IService;
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.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO;
@@ -16,7 +16,7 @@ import java.util.List;
* @author haoxr
* @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;
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.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO;
@@ -17,7 +17,7 @@ import java.util.List;
* @author Ray
* @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;
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.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.vo.MenuVO;
import com.youlai.boot.system.model.vo.RouteVO;
@@ -18,7 +18,7 @@ import java.util.Set;
* @author haoxr
* @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.youlai.boot.system.model.entity.SysRoleMenu;
import com.youlai.boot.system.model.entity.RoleMenu;
import java.util.List;
import java.util.Set;
@@ -13,7 +13,7 @@ import java.util.Set;
* @author haoxr
* @since 2.5.0
*/
public interface SysRoleMenuService extends IService<SysRoleMenu> {
public interface RoleMenuService extends IService<RoleMenu> {
/**
* 获取角色拥有的菜单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.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.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery;
@@ -18,7 +18,7 @@ import java.util.Set;
* @author haoxr
* @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.youlai.boot.system.model.entity.SysUserRole;
import com.youlai.boot.system.model.entity.UserRole;
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.system.model.dto.UserAuthInfo;
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.vo.UserInfoVO;
import com.youlai.boot.system.model.vo.UserPageVO;
@@ -21,7 +21,7 @@ import java.util.List;
* @author haoxr
* @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.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.system.converter.ConfigConverter;
import com.youlai.boot.system.mapper.SysConfigMapper;
import com.youlai.boot.system.model.entity.SysConfig;
import com.youlai.boot.system.mapper.ConfigMapper;
import com.youlai.boot.system.model.entity.Config;
import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery;
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 jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
@@ -32,9 +32,9 @@ import java.util.stream.Collectors;
*/
@Service
@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;
@@ -57,15 +57,15 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
*/
@Override
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();
LambdaQueryWrapper<SysConfig> query = new LambdaQueryWrapper<SysConfig>()
LambdaQueryWrapper<Config> query = new LambdaQueryWrapper<Config>()
.and(StringUtils.isNotBlank(keywords),
q -> q.like(SysConfig::getConfigKey, keywords)
q -> q.like(Config::getConfigKey, keywords)
.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);
}
@@ -78,11 +78,11 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override
public boolean save(ConfigForm configForm) {
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);
sysConfig.setCreateBy(SecurityUtils.getUserId());
return this.save(sysConfig);
Config config = configConverter.toEntity(configForm);
config.setCreateBy(SecurityUtils.getUserId());
return this.save(config);
}
/**
@@ -93,7 +93,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
*/
@Override
public ConfigForm getConfigFormData(Long id) {
SysConfig entity = this.getById(id);
Config entity = this.getById(id);
return configConverter.toForm(entity);
}
@@ -107,11 +107,11 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override
public boolean edit(Long id, ConfigForm configForm) {
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);
sysConfig.setUpdateBy(SecurityUtils.getUserId());
return this.updateById(sysConfig);
Config config = configConverter.toEntity(configForm);
config.setUpdateBy(SecurityUtils.getUserId());
return this.updateById(config);
}
/**
@@ -123,7 +123,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override
public boolean delete(Long id) {
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;
}
@@ -136,9 +136,9 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Override
public boolean refreshCache() {
redisTemplate.delete(RedisConstants.SYSTEM_CONFIG_KEY);
List<SysConfig> list = this.list();
List<Config> list = this.list();
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);
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.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.converter.DeptConverter;
import com.youlai.boot.system.mapper.SysDeptMapper;
import com.youlai.boot.system.model.entity.SysDept;
import com.youlai.boot.system.mapper.DeptMapper;
import com.youlai.boot.system.model.entity.Dept;
import com.youlai.boot.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery;
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.enums.StatusEnum;
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 org.springframework.stereotype.Service;
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
*/
@Service
@RequiredArgsConstructor
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService {
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
private final DeptConverter deptConverter;
@@ -47,11 +47,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
Integer status = queryParams.getStatus();
// 查询数据
List<SysDept> deptList = this.list(
new LambdaQueryWrapper<SysDept>()
.like(StrUtil.isNotBlank(keywords), SysDept::getName, keywords)
.eq(status != null, SysDept::getStatus, status)
.orderByAsc(SysDept::getSort)
List<Dept> deptList = this.list(
new LambdaQueryWrapper<Dept>()
.like(StrUtil.isNotBlank(keywords), Dept::getName, keywords)
.eq(status != null, Dept::getStatus, status)
.orderByAsc(Dept::getSort)
);
if (CollectionUtil.isEmpty(deptList)) {
@@ -60,11 +60,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
// 获取所有部门ID
Set<Long> deptIds = deptList.stream()
.map(SysDept::getId)
.map(Dept::getId)
.collect(Collectors.toSet());
// 获取父节点ID
Set<Long> parentIds = deptList.stream()
.map(SysDept::getParentId)
.map(Dept::getParentId)
.collect(Collectors.toSet());
// 获取根节点ID递归的起点即父节点ID中不包含在部门ID中的节点注意这里不能拿顶级部门 O 作为根节点因为部门筛选的时候 O 会被过滤掉
List<Long> rootIds = CollectionUtil.subtractToList(parentIds, deptIds);
@@ -82,7 +82,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
* @param deptList 部门列表
* @return 部门树形列表
*/
public List<DeptVO> recurDeptList(Long parentId, List<SysDept> deptList) {
public List<DeptVO> recurDeptList(Long parentId, List<Dept> deptList) {
return deptList.stream()
.filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> {
@@ -101,21 +101,21 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
@Override
public List<Option<Long>> listDeptOptions() {
List<SysDept> deptList = this.list(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getStatus, StatusEnum.ENABLE.getValue())
.select(SysDept::getId, SysDept::getParentId, SysDept::getName)
.orderByAsc(SysDept::getSort)
List<Dept> deptList = this.list(new LambdaQueryWrapper<Dept>()
.eq(Dept::getStatus, StatusEnum.ENABLE.getValue())
.select(Dept::getId, Dept::getParentId, Dept::getName)
.orderByAsc(Dept::getSort)
);
if (CollectionUtil.isEmpty(deptList)) {
return Collections.EMPTY_LIST;
}
Set<Long> deptIds = deptList.stream()
.map(SysDept::getId)
.map(Dept::getId)
.collect(Collectors.toSet());
Set<Long> parentIds = deptList.stream()
.map(SysDept::getParentId)
.map(Dept::getParentId)
.collect(Collectors.toSet());
List<Long> rootIds = CollectionUtil.subtractToList(parentIds, deptIds);
@@ -136,13 +136,13 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
public Long saveDept(DeptForm formData) {
// 校验部门名称是否存在
String code = formData.getCode();
long count = this.count(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getCode, code)
long count = this.count(new LambdaQueryWrapper<Dept>()
.eq(Dept::getCode, code)
);
Assert.isTrue(count == 0, "部门编号已存在");
// form->entity
SysDept entity = deptConverter.toEntity(formData);
Dept entity = deptConverter.toEntity(formData);
// 生成部门路径(tree_path)格式父节点tree_path + , + 父节点ID用于删除部门时级联删除子部门
String treePath = generateDeptTreePath(formData.getParentId());
@@ -164,7 +164,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
*/
@Override
public DeptForm getDeptForm(Long deptId) {
SysDept entity = this.getById(deptId);
Dept entity = this.getById(deptId);
return deptConverter.toForm(entity);
}
@@ -180,15 +180,15 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
public Long updateDept(Long deptId, DeptForm formData) {
// 校验部门名称/部门编号是否存在
String code = formData.getCode();
long count = this.count(new LambdaQueryWrapper<SysDept>()
.ne(SysDept::getId, deptId)
.eq(SysDept::getCode, code)
long count = this.count(new LambdaQueryWrapper<Dept>()
.ne(Dept::getId, deptId)
.eq(Dept::getCode, code)
);
Assert.isTrue(count == 0, "部门编号已存在");
// form->entity
SysDept entity = deptConverter.toEntity(formData);
Dept entity = deptConverter.toEntity(formData);
entity.setId(deptId);
// 生成部门路径(tree_path)格式父节点tree_path + , + 父节点ID用于删除部门时级联删除子部门
@@ -209,7 +209,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
* @param deptList 部门列表
* @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()
.filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> {
@@ -236,8 +236,8 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
if (StrUtil.isNotBlank(ids)) {
String[] menuIds = ids.split(SymbolConstant.COMMA);
for (String deptId : menuIds) {
this.remove(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getId, deptId)
this.remove(new LambdaQueryWrapper<Dept>()
.eq(Dept::getId, deptId)
.or()
.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)) {
treePath = String.valueOf(parentId);
} else {
SysDept parent = this.getById(parentId);
Dept parent = this.getById(parentId);
if (parent != null) {
treePath = parent.getTreePath() + SymbolConstant.COMMA + parent.getId();
}

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.mapper.SysDictItemMapper;
import com.youlai.boot.system.model.entity.SysDictItem;
import com.youlai.boot.system.service.SysDictItemService;
import com.youlai.boot.system.mapper.DictItemMapper;
import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.service.DictItemService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service;
*/
@Service
@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.youlai.boot.system.converter.DictConverter;
import com.youlai.boot.system.converter.DictItemConverter;
import com.youlai.boot.system.mapper.SysDictMapper;
import com.youlai.boot.system.model.entity.SysDict;
import com.youlai.boot.system.model.entity.SysDictItem;
import com.youlai.boot.system.mapper.DictMapper;
import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.service.SysDictItemService;
import com.youlai.boot.system.service.SysDictService;
import com.youlai.boot.system.service.DictItemService;
import com.youlai.boot.system.service.DictService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -32,9 +32,9 @@ import java.util.stream.Collectors;
*/
@Service
@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 DictItemConverter dictItemConverter;
@@ -61,11 +61,11 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override
public boolean saveDict(DictForm dictForm) {
// 保存字典
SysDict entity = dictConverter.toEntity(dictForm);
Dict entity = dictConverter.toEntity(dictForm);
// 校验 code 是否唯一
long count = this.count(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getCode, entity.getCode())
long count = this.count(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, entity.getCode())
);
Assert.isTrue(count == 0, "字典编码已存在");
@@ -73,7 +73,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
// 保存字典项
if (result) {
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()));
dictItemService.saveBatch(dictItems);
}
@@ -89,13 +89,13 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override
public DictForm getDictForm(Long id) {
// 获取字典
SysDict entity = this.getById(id);
Dict entity = this.getById(id);
Assert.isTrue(entity != null, "字典不存在");
DictForm dictForm = dictConverter.toForm(entity);
// 获取字典项集合
List<SysDictItem> dictItems = dictItemService.list(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictId, id)
List<DictItem> dictItems = dictItemService.list(new LambdaQueryWrapper<DictItem>()
.eq(DictItem::getDictId, id)
);
// 转换数据项
List<DictForm.DictItem> dictItemList = dictItemConverter.toDictItem(dictItems);
@@ -112,12 +112,12 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override
public boolean updateDict(Long id, DictForm dictForm) {
// 更新字典
SysDict entity = dictConverter.toEntity(dictForm);
Dict entity = dictConverter.toEntity(dictForm);
// 校验 code 是否唯一
long count = this.count(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getCode, entity.getCode())
.ne(SysDict::getId, id)
long count = this.count(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, entity.getCode())
.ne(Dict::getId, id)
);
Assert.isTrue(count == 0, "字典编码已存在");
@@ -126,21 +126,21 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
if (result) {
// 更新字典项
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>()
.eq(SysDictItem::getDictId, id)
List<DictItem> currentDictItemEntities = dictItemService.list(new LambdaQueryWrapper<DictItem>()
.eq(DictItem::getDictId, id)
);
// 获取当前数据库中存在的字典项ID集合
Set<Long> currentDictItemIds = currentDictItemEntities.stream()
.map(SysDictItem::getId)
.map(DictItem::getId)
.collect(Collectors.toSet());
// 获取新提交的字典项ID集合
Set<Long> newAttrIds = dictItems.stream()
.map(SysDictItem::getId)
.map(DictItem::getId)
.filter(Objects::nonNull)
.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())) {
// 更新现有字典项
dictItemService.updateById(dictItem);
@@ -187,8 +187,8 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
if (result) {
// 删除字典下的字典项
dictItemService.remove(
new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictId, id)
new LambdaQueryWrapper<DictItem>()
.eq(DictItem::getDictId, id)
);
}
}
@@ -202,9 +202,9 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
@Override
public List<Option<Long>> listDictItemsByCode(String code) {
// 根据字典编码获取字典ID
SysDict dict = this.getOne(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getCode, code)
.select(SysDict::getId)
Dict dict = this.getOne(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, code)
.select(Dict::getId)
.last("limit 1")
);
// 如果字典不存在则返回空集合
@@ -213,9 +213,9 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
}
// 获取字典项
List<SysDictItem> dictItems = dictItemService.list(
new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictId, dict.getId())
List<DictItem> dictItems = dictItemService.list(
new LambdaQueryWrapper<DictItem>()
.eq(DictItem::getDictId, dict.getId())
);
// 转换为 Option
@@ -227,9 +227,9 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
*/
@Override
public List<Option<String>> getDictList() {
return this.list(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getStatus, 1)
.select(SysDict::getName, SysDict::getCode)
return this.list(new LambdaQueryWrapper<Dict>()
.eq(Dict::getStatus, 1)
.select(Dict::getName, Dict::getCode)
).stream()
.map(dict -> new Option<>(dict.getCode(), dict.getName()))
.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.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.entity.SysLog;
import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO;
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 java.math.BigDecimal;
@@ -26,8 +26,8 @@ import java.util.stream.Collectors;
* @since 2.10.0
*/
@Service
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog>
implements SysLogService {
public class LogServiceImpl extends ServiceImpl<LogMapper, Log>
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.databind.ObjectMapper;
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.infrastructure.generator.model.entity.GenConfig;
import com.youlai.boot.system.model.entity.SysMenu;
import com.youlai.boot.platform.generator.model.entity.GenConfig;
import com.youlai.boot.system.model.entity.Menu;
import com.youlai.boot.system.model.form.MenuForm;
import com.youlai.boot.system.model.query.MenuQuery;
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.model.KeyValue;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.service.SysMenuService;
import com.youlai.boot.system.service.SysRoleMenuService;
import com.youlai.boot.system.service.MenuService;
import com.youlai.boot.system.service.RoleMenuService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cache.annotation.CacheEvict;
@@ -42,11 +42,11 @@ import java.util.stream.Collectors;
*/
@Service
@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 SysRoleMenuService roleMenuService;
private final RoleMenuService roleMenuService;
/**
@@ -56,18 +56,18 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
@Override
public List<MenuVO> listMenus(MenuQuery queryParams) {
List<SysMenu> menus = this.list(new LambdaQueryWrapper<SysMenu>()
.like(StrUtil.isNotBlank(queryParams.getKeywords()), SysMenu::getName, queryParams.getKeywords())
.orderByAsc(SysMenu::getSort)
List<Menu> menus = this.list(new LambdaQueryWrapper<Menu>()
.like(StrUtil.isNotBlank(queryParams.getKeywords()), Menu::getName, queryParams.getKeywords())
.orderByAsc(Menu::getSort)
);
// 获取所有菜单ID
Set<Long> menuIds = menus.stream()
.map(SysMenu::getId)
.map(Menu::getId)
.collect(Collectors.toSet());
// 获取所有父级ID
Set<Long> parentIds = menus.stream()
.map(SysMenu::getParentId)
.map(Menu::getParentId)
.collect(Collectors.toSet());
// 获取根节点ID递归的起点即父节点ID中不包含在部门ID中的节点注意这里不能拿顶级菜单 O 作为根节点因为菜单筛选的时候 O 会被过滤掉
@@ -88,7 +88,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* @param menuList 菜单列表
* @return 菜单列表
*/
private List<MenuVO> buildMenuTree(Long parentId, List<SysMenu> menuList) {
private List<MenuVO> buildMenuTree(Long parentId, List<Menu> menuList) {
return CollectionUtil.emptyIfNull(menuList)
.stream()
.filter(menu -> menu.getParentId().equals(parentId))
@@ -107,9 +107,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
@Override
public List<Option> listMenuOptions(boolean onlyParent) {
List<SysMenu> menuList = this.list(new LambdaQueryWrapper<SysMenu>()
.in(onlyParent, SysMenu::getType, MenuTypeEnum.CATALOG.getValue(), MenuTypeEnum.MENU.getValue())
.orderByAsc(SysMenu::getSort)
List<Menu> menuList = this.list(new LambdaQueryWrapper<Menu>()
.in(onlyParent, Menu::getType, MenuTypeEnum.CATALOG.getValue(), MenuTypeEnum.MENU.getValue())
.orderByAsc(Menu::getSort)
);
return buildMenuOptions(SystemConstants.ROOT_NODE_ID, menuList);
}
@@ -121,10 +121,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* @param menuList 菜单列表
* @return 菜单下拉列表
*/
private List<Option> buildMenuOptions(Long parentId, List<SysMenu> menuList) {
private List<Option> buildMenuOptions(Long parentId, List<Menu> menuList) {
List<Option> menuOptions = new ArrayList<>();
for (SysMenu menu : menuList) {
for (Menu menu : menuList) {
if (menu.getParentId().equals(parentId)) {
Option option = new Option(menu.getId(), menu.getName());
List<Option> subMenuOptions = buildMenuOptions(menu.getId(), menuList);
@@ -242,7 +242,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
menuForm.setComponent(null);
}
SysMenu entity = menuConverter.toEntity(menuForm);
Menu entity = menuConverter.toEntity(menuForm);
String treePath = generateMenuTreePath(menuForm.getParentId());
entity.setTreePath(treePath);
@@ -255,9 +255,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
entity.setParams(null);
}
if (menuType != MenuTypeEnum.BUTTON) {
Assert.isFalse(this.exists(new LambdaQueryWrapper<SysMenu>()
.eq(SysMenu::getRouteName, entity.getRouteName())
.ne(menuForm.getId() != null, SysMenu::getId, menuForm.getId())
Assert.isFalse(this.exists(new LambdaQueryWrapper<Menu>()
.eq(Menu::getRouteName, entity.getRouteName())
.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)) {
return String.valueOf(parentId);
} else {
SysMenu parent = this.getById(parentId);
Menu parent = this.getById(parentId);
return parent != null ? parent.getTreePath() + "," + parent.getId() : null;
}
}
@@ -297,9 +297,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
@CacheEvict(cacheNames = "menu", key = "'routes'")
public boolean updateMenuVisible(Long menuId, Integer visible) {
return this.update(new LambdaUpdateWrapper<SysMenu>()
.eq(SysMenu::getId, menuId)
.set(SysMenu::getVisible, visible)
return this.update(new LambdaUpdateWrapper<Menu>()
.eq(Menu::getId, menuId)
.set(Menu::getVisible, visible)
);
}
@@ -311,7 +311,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
@Override
public MenuForm getMenuForm(Long id) {
SysMenu entity = this.getById(id);
Menu entity = this.getById(id);
Assert.isTrue(entity != null, "菜单不存在");
MenuForm formData = menuConverter.toForm(entity);
// 路由参数字符串 {"id":"1","name":"张三"} 转换为 [{key:"id", value:"1"}, {key:"name", value:"张三"}]
@@ -347,8 +347,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
@CacheEvict(cacheNames = "menu", key = "'routes'")
public boolean deleteMenu(Long id) {
boolean result = this.remove(new LambdaQueryWrapper<SysMenu>()
.eq(SysMenu::getId, id)
boolean result = this.remove(new LambdaQueryWrapper<Menu>()
.eq(Menu::getId, id)
.or()
.apply("CONCAT (',',tree_path,',') LIKE CONCAT('%,',{0},',%')", id));
@@ -369,19 +369,19 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
@Override
public void saveMenu(Long parentMenuId, GenConfig genConfig) {
SysMenu parentMenu = this.getById(parentMenuId);
Menu parentMenu = this.getById(parentMenuId);
Assert.notNull(parentMenu, "上级菜单不存在");
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) {
return;
}
// 获取父级菜单子菜单最带的排序
SysMenu maxSortMenu = this.getOne(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, parentMenuId)
.orderByDesc(SysMenu::getSort)
Menu maxSortMenu = this.getOne(new LambdaQueryWrapper<Menu>().eq(Menu::getParentId, parentMenuId)
.orderByDesc(Menu::getSort)
.last("limit 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.setName(genConfig.getBusinessName());
@@ -414,7 +414,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
String[] perms = {"query", "add", "edit", "delete"};
for (int i = 0; i < actions.length; i++) {
SysMenu button = new SysMenu();
Menu button = new Menu();
button.setParentId(menu.getId());
button.setType(MenuTypeEnum.BUTTON);
button.setName(actions[i]);

View File

@@ -2,11 +2,11 @@ package com.youlai.boot.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
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.entity.SysRoleMenu;
import com.youlai.boot.system.model.entity.RoleMenu;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -26,7 +26,7 @@ import java.util.Set;
@Service
@RequiredArgsConstructor
@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;

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

View File

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

View File

@@ -1,5 +1,4 @@
server:
port: 8989
spring:
jackson:
@@ -147,11 +146,12 @@ springdoc:
path: /v3/api-docs
group-configs:
- group: '系统管理'
paths-to-match: '/**'
packages-to-scan: com.youlai.boot.system.controller
- group: '登录认证'
paths-to-match: '/**'
packages-to-scan: com.youlai.boot.infrastructure.auth.controller
paths-to-match: "/**"
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
# knife4j 接口文档配置

View File

@@ -1,6 +1,3 @@
server:
port: 8989
spring:
jackson:
## 默认序列化时间格式
@@ -130,9 +127,13 @@ springdoc:
api-docs:
path: /v3/api-docs
group-configs:
- group: 'default'
paths-to-match: '/**'
packages-to-scan: com.**.controller
- group: '系统管理'
paths-to-match: "/**"
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
# knife4j 接口文档配置

View File

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

View File

@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"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>

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