Merge branch 'master' of https://gitee.com/youlaiorg/youlai-boot into feature/noticews

# Conflicts:
#	src/main/java/com/youlai/boot/platform/websocket/service/impl/WebsocketServiceImpl.java
#	src/main/java/com/youlai/boot/system/controller/NoticeController.java
#	src/main/java/com/youlai/boot/system/controller/NoticeStatusController.java
#	src/main/java/com/youlai/boot/system/converter/NoticeConverter.java
#	src/main/java/com/youlai/boot/system/converter/NoticeStatusConverter.java
#	src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java
#	src/main/java/com/youlai/boot/system/mapper/NoticeStatusMapper.java
#	src/main/java/com/youlai/boot/system/model/entity/Notice.java
#	src/main/java/com/youlai/boot/system/model/entity/NoticeStatus.java
#	src/main/java/com/youlai/boot/system/model/form/NoticeForm.java
#	src/main/java/com/youlai/boot/system/model/form/NoticeStatusForm.java
#	src/main/java/com/youlai/boot/system/model/query/NoticeQuery.java
#	src/main/java/com/youlai/boot/system/model/query/NoticeStatusQuery.java
#	src/main/java/com/youlai/boot/system/model/vo/NoticeStatusVO.java
#	src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java
#	src/main/java/com/youlai/boot/system/service/NoticeService.java
#	src/main/java/com/youlai/boot/system/service/NoticeStatusService.java
#	src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java
#	src/main/java/com/youlai/boot/system/service/impl/NoticeStatusServiceImpl.java
This commit is contained in:
Theo
2024-08-31 20:10:54 +08:00
252 changed files with 1338 additions and 1267 deletions

View File

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

View File

@@ -6,7 +6,7 @@
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-boot</artifactId> <artifactId>youlai-boot</artifactId>
<version>2.9.0</version> <version>2.10.0</version>
<description>基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。</description> <description>基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。</description>
<parent> <parent>

View File

@@ -327,7 +327,7 @@ INSERT INTO `sys_menu` VALUES (110, 0, '0', '路由参数', 2, NULL, '/route-par
INSERT INTO `sys_menu` VALUES (111, 110, '0,110', '参数(type=1)', 1, NULL, 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, '2024-05-26 21:59:24', '2024-05-26 21:59:37', '{\"type\": \"1\"}'); INSERT INTO `sys_menu` VALUES (111, 110, '0,110', '参数(type=1)', 1, NULL, 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, '2024-05-26 21:59:24', '2024-05-26 21:59:37', '{\"type\": \"1\"}');
INSERT INTO `sys_menu` VALUES (112, 110, '0,110', '参数(type=2)', 1, NULL, 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, '2024-05-26 21:46:55', '2024-05-26 21:59:45', '{\"type\": \"2\"}'); INSERT INTO `sys_menu` VALUES (112, 110, '0,110', '参数(type=2)', 1, NULL, 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, '2024-05-26 21:46:55', '2024-05-26 21:59:45', '{\"type\": \"2\"}');
INSERT INTO `sys_menu` VALUES (117, 1, '0,1', '系统日志', 1, 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 6, 'document', NULL, '2024-06-28 07:43:16', '2024-06-28 07:43:16', NULL); INSERT INTO `sys_menu` VALUES (117, 1, '0,1', '系统日志', 1, 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 6, 'document', NULL, '2024-06-28 07:43:16', '2024-06-28 07:43:16', NULL);
INSERT INTO `sys_menu` VALUES (118, 0, '0', '系统工具', 2, NULL, '/tool', 'Layout', NULL, 0, 1, 1, 2, 'menu', NULL, '2024-07-13 08:41:07', '2024-07-13 08:41:07', NULL); INSERT INTO `sys_menu` VALUES (118, 0, '0', '系统工具', 2, NULL, '/generator', 'Layout', NULL, 0, 1, 1, 2, 'menu', NULL, '2024-07-13 08:41:07', '2024-07-13 08:41:07', NULL);
INSERT INTO `sys_menu` VALUES (119, 118, '0,118', '代码生成(Alpha)', 1, 'Generator', 'generator', 'generator/index', NULL, 0, 1, 1, 1, 'code', NULL, '2024-07-13 08:44:51', '2024-07-13 08:44:51', NULL); INSERT INTO `sys_menu` VALUES (119, 118, '0,118', '代码生成(Alpha)', 1, 'Generator', 'generator', 'generator/index', NULL, 0, 1, 1, 1, 'code', NULL, '2024-07-13 08:44:51', '2024-07-13 08:44:51', NULL);
INSERT INTO `sys_menu` VALUES (120, 1, '0,1', '系统配置', 1, 'Config', 'config', 'system/config/index', NULL, 0, 1, 1, 7, 'setting', NULL, '2024-07-30 16:29:24', '2024-07-30 16:29:32', NULL); INSERT INTO `sys_menu` VALUES (120, 1, '0,1', '系统配置', 1, 'Config', 'config', 'system/config/index', NULL, 0, 1, 1, 7, 'setting', NULL, '2024-07-30 16:29:24', '2024-07-30 16:29:32', NULL);
INSERT INTO `sys_menu` VALUES (121, 120, '0,1,120', '查询系统配置', 4, NULL, '', NULL, 'sys:config:query', 0, 1, 1, 1, '', NULL, '2024-07-30 16:29:54', '2024-07-30 16:29:54', NULL); INSERT INTO `sys_menu` VALUES (121, 120, '0,1,120', '查询系统配置', 4, NULL, '', NULL, 'sys:config:query', 0, 1, 1, 1, '', NULL, '2024-07-30 16:29:54', '2024-07-30 16:29:54', NULL);

View File

@@ -216,7 +216,7 @@ INSERT INTO `sys_menu` VALUES (110, 0, '0', '路由参数', 2, NULL, '/route-par
INSERT INTO `sys_menu` VALUES (111, 110, '0,110', '参数(type=1)', 1, NULL, 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, '2024-05-26 21:59:24', '2024-05-26 21:59:37', '{\"type\": \"1\"}'); INSERT INTO `sys_menu` VALUES (111, 110, '0,110', '参数(type=1)', 1, NULL, 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, '2024-05-26 21:59:24', '2024-05-26 21:59:37', '{\"type\": \"1\"}');
INSERT INTO `sys_menu` VALUES (112, 110, '0,110', '参数(type=2)', 1, NULL, 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, '2024-05-26 21:46:55', '2024-05-26 21:59:45', '{\"type\": \"2\"}'); INSERT INTO `sys_menu` VALUES (112, 110, '0,110', '参数(type=2)', 1, NULL, 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, '2024-05-26 21:46:55', '2024-05-26 21:59:45', '{\"type\": \"2\"}');
INSERT INTO `sys_menu` VALUES (117, 1, '0,1', '系统日志', 1, 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 6, 'document', NULL, '2024-06-28 07:43:16', '2024-06-28 07:43:16', NULL); INSERT INTO `sys_menu` VALUES (117, 1, '0,1', '系统日志', 1, 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 6, 'document', NULL, '2024-06-28 07:43:16', '2024-06-28 07:43:16', NULL);
INSERT INTO `sys_menu` VALUES (118, 0, '0', '系统工具', 2, NULL, '/tool', 'Layout', NULL, 0, 1, 1, 2, 'menu', NULL, '2024-07-13 08:41:07', '2024-07-13 08:41:07', NULL); INSERT INTO `sys_menu` VALUES (118, 0, '0', '系统工具', 2, NULL, '/generator', 'Layout', NULL, 0, 1, 1, 2, 'menu', NULL, '2024-07-13 08:41:07', '2024-07-13 08:41:07', NULL);
INSERT INTO `sys_menu` VALUES (119, 118, '0,118', '代码生成(Alpha)', 1, 'Generator', 'generator', 'generator/index', NULL, 0, 1, 1, 1, 'code', NULL, '2024-07-13 08:44:51', '2024-07-13 08:44:51', NULL); INSERT INTO `sys_menu` VALUES (119, 118, '0,118', '代码生成(Alpha)', 1, 'Generator', 'generator', 'generator/index', NULL, 0, 1, 1, 1, 'code', NULL, '2024-07-13 08:44:51', '2024-07-13 08:44:51', NULL);
-- ---------------------------- -- ----------------------------

View File

@@ -1,15 +1,23 @@
package com.youlai.system; package com.youlai.boot;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 应用启动类
*
* @author Ray
* @since 0.0.1
*/
@SpringBootApplication @SpringBootApplication
@ConfigurationPropertiesScan @ConfigurationPropertiesScan
@EnableScheduling @EnableScheduling
public class SystemApplication { public class YouLaiApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(SystemApplication.class, args); SpringApplication.run(YouLaiApplication.class, args);
} }
} }

View File

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

View File

@@ -1,6 +1,6 @@
package com.youlai.system.plugin.syslog.annotation; package com.youlai.boot.common.annotation;
import com.youlai.system.enums.LogModuleEnum; import com.youlai.boot.common.enums.LogModuleEnum;
import java.lang.annotation.*; import java.lang.annotation.*;
@@ -13,7 +13,7 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Documented @Documented
public @interface LogAnnotation { public @interface Log {
String value() default ""; String value() default "";

View File

@@ -1,4 +1,4 @@
package com.youlai.system.plugin.norepeat.annotation; package com.youlai.boot.common.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;
@@ -16,7 +16,7 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
@Inherited @Inherited
public @interface PreventRepeatSubmit { public @interface RepeatSubmit {
/** /**
* 锁过期时间 * 锁过期时间

View File

@@ -1,4 +1,4 @@
package com.youlai.system.plugin.easyexcel; package com.youlai.boot.common.base;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
@@ -8,7 +8,7 @@ import com.alibaba.excel.event.AnalysisEventListener;
* @author haoxr * @author haoxr
* @since 2023/03/01 * @since 2023/03/01
*/ */
public abstract class MyAnalysisEventListener<T> extends AnalysisEventListener<T> { public abstract class BaseAnalysisEventListener<T> extends AnalysisEventListener<T> {
private String msg; private String msg;
public abstract String getMsg(); public abstract String getMsg();

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.base; package com.youlai.boot.common.base;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.base; package com.youlai.boot.common.base;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.base; package com.youlai.boot.common.base;
import lombok.Data; import lombok.Data;
import lombok.ToString; import lombok.ToString;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.base; package com.youlai.boot.common.base;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.constant; package com.youlai.boot.common.constant;
/** /**
* JWT Claims声明常量 * JWT Claims声明常量

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.constant; package com.youlai.boot.common.constant;
/** /**
* Redis Key常量 * Redis Key常量

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.constant; package com.youlai.boot.common.constant;
/** /**
* 缓存常量 * 缓存常量

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.constant; package com.youlai.boot.common.constant;
/** /**
* 符号和特殊符号常用类 * 符号和特殊符号常用类

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.constant; package com.youlai.boot.common.constant;
/** /**
* 系统常量 * 系统常量

View File

@@ -1,4 +1,4 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
/** /**
* EasyCaptcha 验证码类型枚举 * EasyCaptcha 验证码类型枚举

View File

@@ -1,4 +1,4 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
/** /**
* 联系方式类型 * 联系方式类型

View File

@@ -1,6 +1,6 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import lombok.Getter; import lombok.Getter;
/** /**

View File

@@ -1,9 +1,9 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue; import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@@ -1,6 +1,6 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter; import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import lombok.Getter; import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue; import com.baomidou.mybatisplus.annotation.EnumValue;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import lombok.Getter; import lombok.Getter;
/** /**

View File

@@ -1,9 +1,9 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue; import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@@ -1,6 +1,6 @@
package com.youlai.system.enums; package com.youlai.boot.common.enums;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import lombok.Getter; import lombok.Getter;
/** /**

View File

@@ -1,6 +1,6 @@
package com.youlai.system.exception; package com.youlai.boot.common.exception;
import com.youlai.system.common.result.IResultCode; import com.youlai.boot.common.result.IResultCode;
import lombok.Getter; import lombok.Getter;
import org.slf4j.helpers.MessageFormatter; import org.slf4j.helpers.MessageFormatter;

View File

@@ -1,9 +1,9 @@
package com.youlai.system.exception; package com.youlai.boot.common.exception;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.youlai.system.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.system.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.TypeMismatchException; import org.springframework.beans.TypeMismatchException;
import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.context.support.DefaultMessageSourceResolvable;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.model; package com.youlai.boot.common.model;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.model; package com.youlai.boot.common.model;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.result; package com.youlai.boot.common.result;
/** /**
* 响应码接口 * 响应码接口

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.result; package com.youlai.boot.common.result;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.result; package com.youlai.boot.common.result;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.result; package com.youlai.boot.common.result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@@ -1,5 +1,5 @@
package com.youlai.system.util; package com.youlai.boot.common.util;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.util; package com.youlai.boot.common.util;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.youlai.system.plugin.easyexcel.MyAnalysisEventListener; import com.youlai.boot.common.base.BaseAnalysisEventListener;
import java.io.InputStream; import java.io.InputStream;
@@ -13,7 +13,7 @@ import java.io.InputStream;
*/ */
public class ExcelUtils { public class ExcelUtils {
public static <T> String importExcel(InputStream is, Class clazz, MyAnalysisEventListener<T> listener) { public static <T> String importExcel(InputStream is, Class clazz, BaseAnalysisEventListener<T> listener) {
EasyExcel.read(is, clazz, listener).sheet().doRead(); EasyExcel.read(is, clazz, listener).sheet().doRead();
return listener.getMsg(); return listener.getMsg();
} }

View File

@@ -1,4 +1,4 @@
package com.youlai.system.util; package com.youlai.boot.common.util;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;

View File

@@ -1,8 +1,8 @@
package com.youlai.system.util; package com.youlai.boot.common.util;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.youlai.system.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.system.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;

View File

@@ -1,9 +1,9 @@
package com.youlai.system.config; package com.youlai.boot.config;
import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.captcha.generator.MathGenerator; import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator; import cn.hutool.captcha.generator.RandomGenerator;
import com.youlai.system.config.property.CaptchaProperties; import com.youlai.boot.config.property.CaptchaProperties;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config; package com.youlai.boot.config;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

View File

@@ -1,6 +1,6 @@
package com.youlai.system.config; package com.youlai.boot.config;
import com.youlai.system.config.property.MailProperties; import com.youlai.boot.config.property.MailProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;

View File

@@ -1,12 +1,12 @@
package com.youlai.system.config; package com.youlai.boot.config;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.youlai.system.plugin.mybatis.handler.MyDataPermissionHandler; import com.youlai.boot.core.handler.MyDataPermissionHandler;
import com.youlai.system.plugin.mybatis.handler.MyMetaObjectHandler; import com.youlai.boot.core.handler.MyMetaObjectHandler;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config; package com.youlai.boot.config;
import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config; package com.youlai.boot.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;

View File

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

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config; package com.youlai.boot.config;
import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
@@ -68,7 +68,7 @@ public class SwaggerConfig {
if (openApi.getPaths() != null) { if (openApi.getPaths() != null) {
openApi.getPaths().forEach((s, pathItem) -> { openApi.getPaths().forEach((s, pathItem) -> {
// 登录接口/验证码不需要添加鉴权参数 // 登录接口/验证码不需要添加鉴权参数
if (s.equals("/api/v1/auth/login") || s.equals("/api/v1/auth/captcha")) { if ("/api/v1/auth/login".equals(s) || "/api/v1/auth/captcha".equals(s)) {
return; return;
} }
// 接口添加鉴权参数 // 接口添加鉴权参数

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config; package com.youlai.boot.config;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@@ -21,9 +21,7 @@ import org.springframework.validation.beanvalidation.SpringConstraintValidatorFa
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.math.BigInteger; import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.List; import java.util.List;
import java.util.TimeZone;
/** /**
* WebMvc 自动装配配置 * WebMvc 自动装配配置

View File

@@ -1,16 +1,12 @@
package com.youlai.system.config; package com.youlai.boot.config;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.jwt.JWTPayload; import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.system.event.UserConnectionEvent; import com.youlai.boot.system.event.UserConnectionEvent;
import com.youlai.system.service.WebsocketService;
import groovy.lang.Lazy;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config; package com.youlai.boot.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config.property; package com.youlai.boot.config.property;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config.property; package com.youlai.boot.config.property;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config.property; package com.youlai.boot.config.property;
import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config.property; package com.youlai.boot.config.property;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config.property; package com.youlai.boot.config.property;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
package com.youlai.system.filter; package com.youlai.boot.core.filter;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -1,12 +1,12 @@
package com.youlai.system.plugin.mybatis.handler; package com.youlai.boot.core.handler;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler; import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler;
import com.youlai.system.plugin.mybatis.annotation.DataPermission; import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.boot.common.base.IBaseEnum;
import com.youlai.system.enums.DataScopeEnum; import com.youlai.boot.common.enums.DataScopeEnum;
import com.youlai.system.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.plugin.mybatis.handler; package com.youlai.boot.core.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.MetaObject;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.security.exception; package com.youlai.boot.core.security.exception;
import com.youlai.system.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import com.youlai.system.util.ResponseUtils; import com.youlai.boot.common.util.ResponseUtils;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.security.exception; package com.youlai.boot.core.security.exception;
import com.youlai.system.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import com.youlai.system.util.ResponseUtils; import com.youlai.boot.common.util.ResponseUtils;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.AuthenticationEntryPoint;

View File

@@ -1,10 +1,10 @@
package com.youlai.system.filter; package com.youlai.boot.core.security.filter;
import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.system.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import com.youlai.system.util.ResponseUtils; import com.youlai.boot.common.util.ResponseUtils;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;

View File

@@ -1,14 +1,14 @@
package com.youlai.system.filter; package com.youlai.boot.core.security.filter;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWT; import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload; import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.system.common.result.ResultCode; import com.youlai.boot.common.result.ResultCode;
import com.youlai.system.security.util.JwtUtils; import com.youlai.boot.core.security.util.JwtUtils;
import com.youlai.system.util.ResponseUtils; import com.youlai.boot.common.util.ResponseUtils;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;

View File

@@ -1,8 +1,8 @@
package com.youlai.system.security.model; package com.youlai.boot.core.security.model;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.youlai.system.model.dto.UserAuthInfo; import com.youlai.boot.system.model.dto.UserAuthInfo;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@@ -1,9 +1,9 @@
package com.youlai.system.security.service; package com.youlai.boot.core.security.service;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.system.security.util.SecurityUtils; import com.youlai.boot.core.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;

View File

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

View File

@@ -1,4 +1,4 @@
package com.youlai.system.security.util; package com.youlai.boot.core.security.util;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
@@ -6,8 +6,8 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWTPayload; import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.JwtClaimConstants; import com.youlai.boot.common.constant.JwtClaimConstants;
import com.youlai.system.security.model.SysUserDetails; import com.youlai.boot.core.security.model.SysUserDetails;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;

View File

@@ -1,9 +1,9 @@
package com.youlai.system.security.util; package com.youlai.boot.core.security.util;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SystemConstants; import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.system.security.model.SysUserDetails; import com.youlai.boot.core.security.model.SysUserDetails;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;

View File

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

View File

@@ -1,7 +1,7 @@
package com.youlai.system.service; package com.youlai.boot.platform.auth.service;
import com.youlai.system.model.dto.CaptchaResult; import com.youlai.boot.system.model.dto.CaptchaResult;
import com.youlai.system.model.dto.LoginResult; import com.youlai.boot.system.model.dto.LoginResult;
/** /**
* 认证服务接口 * 认证服务接口

View File

@@ -1,4 +1,4 @@
package com.youlai.system.service.impl; package com.youlai.boot.platform.auth.service.impl;
import cn.hutool.captcha.AbstractCaptcha; import cn.hutool.captcha.AbstractCaptcha;
import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.CaptchaUtil;
@@ -8,13 +8,13 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWTPayload; import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.system.enums.CaptchaTypeEnum; import com.youlai.boot.common.enums.CaptchaTypeEnum;
import com.youlai.system.model.dto.CaptchaResult; import com.youlai.boot.platform.auth.service.AuthService;
import com.youlai.system.model.dto.LoginResult; import com.youlai.boot.system.model.dto.CaptchaResult;
import com.youlai.system.config.property.CaptchaProperties; import com.youlai.boot.system.model.dto.LoginResult;
import com.youlai.system.service.AuthService; import com.youlai.boot.config.property.CaptchaProperties;
import com.youlai.system.security.util.JwtUtils; import com.youlai.boot.core.security.util.JwtUtils;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -1,8 +1,8 @@
package com.youlai.system.controller; package com.youlai.boot.platform.file.controller;
import com.youlai.system.common.result.Result; import com.youlai.boot.common.result.Result;
import com.youlai.system.model.dto.FileInfo; import com.youlai.boot.platform.file.service.FileService;
import com.youlai.system.service.OssService; import com.youlai.boot.system.model.dto.FileInfo;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
@@ -25,15 +25,21 @@ import org.springframework.web.multipart.MultipartFile;
@RequiredArgsConstructor @RequiredArgsConstructor
public class FileController { public class FileController {
private final OssService ossService; private final FileService fileService;
@PostMapping @PostMapping
@Operation(summary = "文件上传") @Operation(summary = "文件上传")
public Result<FileInfo> uploadFile( public Result<FileInfo> uploadFile(
@Parameter(name = "file", description = "表单文件对象", required = true, in = ParameterIn.DEFAULT, schema = @Schema(name = "file", format = "binary")) @Parameter(
name = "file",
description = "表单文件对象",
required = true,
in = ParameterIn.DEFAULT,
schema = @Schema(name = "file", format = "binary")
)
@RequestPart(value = "file") MultipartFile file @RequestPart(value = "file") MultipartFile file
) { ) {
FileInfo fileInfo = ossService.uploadFile(file); FileInfo fileInfo = fileService.uploadFile(file);
return Result.success(fileInfo); return Result.success(fileInfo);
} }
@@ -43,7 +49,7 @@ public class FileController {
public Result<?> deleteFile( public Result<?> deleteFile(
@Parameter(description = "文件路径") @RequestParam String filePath @Parameter(description = "文件路径") @RequestParam String filePath
) { ) {
boolean result = ossService.deleteFile(filePath); boolean result = fileService.deleteFile(filePath);
return Result.judge(result); return Result.judge(result);
} }
} }

View File

@@ -1,6 +1,6 @@
package com.youlai.system.service; package com.youlai.boot.platform.file.service;
import com.youlai.system.model.dto.FileInfo; import com.youlai.boot.system.model.dto.FileInfo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
/** /**
@@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
* @author haoxr * @author haoxr
* @since 2022/11/19 * @since 2022/11/19
*/ */
public interface OssService { public interface FileService {
/** /**
* 上传文件 * 上传文件

View File

@@ -1,4 +1,4 @@
package com.youlai.system.service.impl.oss; package com.youlai.boot.platform.file.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
@@ -8,8 +8,8 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectRequest;
import com.youlai.system.model.dto.FileInfo; import com.youlai.boot.platform.file.service.FileService;
import com.youlai.system.service.OssService; import com.youlai.boot.system.model.dto.FileInfo;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -33,7 +33,7 @@ import java.time.LocalDateTime;
@ConfigurationProperties(prefix = "oss.aliyun") @ConfigurationProperties(prefix = "oss.aliyun")
@RequiredArgsConstructor @RequiredArgsConstructor
@Data @Data
public class AliyunOssService implements OssService { public class AliyunFileService implements FileService {
/** /**
* 服务Endpoint * 服务Endpoint
*/ */

View File

@@ -1,12 +1,12 @@
package com.youlai.system.service.impl.oss; package com.youlai.boot.platform.file.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.model.dto.FileInfo; import com.youlai.boot.platform.file.service.FileService;
import com.youlai.system.service.OssService; import com.youlai.boot.system.model.dto.FileInfo;
import io.minio.*; import io.minio.*;
import io.minio.errors.*; import io.minio.errors.*;
import io.minio.http.Method; import io.minio.http.Method;
@@ -36,7 +36,7 @@ import java.time.LocalDateTime;
@ConfigurationProperties(prefix = "oss.minio") @ConfigurationProperties(prefix = "oss.minio")
@RequiredArgsConstructor @RequiredArgsConstructor
@Data @Data
public class MinioOssService implements OssService { public class MinioFileService implements FileService {
/** /**
* 服务Endpoint * 服务Endpoint
@@ -102,7 +102,8 @@ public class MinioOssService implements OssService {
// 返回文件路径 // 返回文件路径
String fileUrl; String fileUrl;
if (StrUtil.isBlank(customDomain)) { // 未配置自定义域名 // 未配置自定义域名
if (StrUtil.isBlank(customDomain)) {
GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder() GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
.bucket(bucketName).object(fileName) .bucket(bucketName).object(fileName)
.method(Method.GET) .method(Method.GET)

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,8 +1,8 @@
package com.youlai.system.model.entity; package com.youlai.boot.platform.generator.model.entity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.youlai.system.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;

View File

@@ -1,13 +1,12 @@
package com.youlai.system.model.entity; package com.youlai.boot.platform.generator.model.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.system.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import com.youlai.system.enums.FormTypeEnum; import com.youlai.boot.common.enums.FormTypeEnum;
import com.youlai.system.enums.QueryTypeEnum; import com.youlai.boot.common.enums.QueryTypeEnum;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.model.form; package com.youlai.boot.platform.generator.model.form;
import com.youlai.system.enums.FormTypeEnum; import com.youlai.boot.common.enums.FormTypeEnum;
import com.youlai.system.enums.QueryTypeEnum; import com.youlai.boot.common.enums.QueryTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
package com.youlai.system.controller; package com.youlai.boot.platform.websocket.controller;
import com.youlai.system.model.dto.ChatMessage; import com.youlai.boot.system.model.dto.ChatMessage;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.handler.annotation.DestinationVariable; import org.springframework.messaging.handler.annotation.DestinationVariable;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.service; package com.youlai.boot.platform.websocket.service;
import java.util.Set; import java.util.Set;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.service.impl; package com.youlai.boot.platform.websocket.service.impl;
import com.youlai.system.event.UserConnectionEvent; import com.youlai.system.event.UserConnectionEvent;
import com.youlai.system.model.dto.ChatMessage; import com.youlai.system.model.dto.ChatMessage;

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