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

@@ -1,15 +1,23 @@
package com.youlai.system;
package com.youlai.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 应用启动类
*
* @author Ray
* @since 0.0.1
*/
@SpringBootApplication
@ConfigurationPropertiesScan
@EnableScheduling
public class SystemApplication {
public class YouLaiApplication {
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.*;
/**
* MP数据权限注解
* 数据权限注解
*
* @author zc
* @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.*;
@@ -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

@@ -1,4 +1,4 @@
package com.youlai.system.plugin.norepeat.annotation;
package com.youlai.boot.common.annotation;
import java.lang.annotation.*;
@@ -16,7 +16,7 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Documented
@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;
@@ -8,7 +8,7 @@ import com.alibaba.excel.event.AnalysisEventListener;
* @author haoxr
* @since 2023/03/01
*/
public abstract class MyAnalysisEventListener<T> extends AnalysisEventListener<T> {
public abstract class BaseAnalysisEventListener<T> extends AnalysisEventListener<T> {
private String msg;
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.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;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.base;
package com.youlai.boot.common.base;
import lombok.Data;
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;

View File

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

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.constant;
package com.youlai.boot.common.constant;
/**
* 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 验证码类型枚举

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;
/**

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.fasterxml.jackson.annotation.JsonCreator;
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.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 lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.enums;
package com.youlai.boot.common.enums;
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 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.youlai.system.common.base.IBaseEnum;
import com.youlai.boot.common.base.IBaseEnum;
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.fasterxml.jackson.annotation.JsonCreator;
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.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;
/**

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 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 com.fasterxml.jackson.core.JsonProcessingException;
import com.youlai.system.common.result.Result;
import com.youlai.system.common.result.ResultCode;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.common.result.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.TypeMismatchException;
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 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 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 lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.common.result;
package com.youlai.boot.common.result;
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.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.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.youlai.system.plugin.easyexcel.MyAnalysisEventListener;
import com.youlai.boot.common.base.BaseAnalysisEventListener;
import java.io.InputStream;
@@ -13,7 +13,7 @@ import java.io.InputStream;
*/
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();
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 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 com.youlai.system.common.result.Result;
import com.youlai.system.common.result.ResultCode;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.common.result.ResultCode;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
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.MathGenerator;
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.context.annotation.Bean;
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.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.context.annotation.Bean;
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.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.youlai.system.plugin.mybatis.handler.MyDataPermissionHandler;
import com.youlai.system.plugin.mybatis.handler.MyMetaObjectHandler;
import com.youlai.boot.core.handler.MyDataPermissionHandler;
import com.youlai.boot.core.handler.MyMetaObjectHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.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.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.core.collection.CollectionUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.config.property.SecurityProperties;
import com.youlai.system.filter.RedisRateLimiterFilter;
import com.youlai.system.security.exception.MyAccessDeniedHandler;
import com.youlai.system.security.exception.MyAuthenticationEntryPoint;
import com.youlai.system.filter.JwtValidationFilter;
import com.youlai.system.filter.CaptchaValidationFilter;
import com.youlai.system.service.SysConfigService;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.config.property.SecurityProperties;
import com.youlai.boot.core.filter.RateLimiterFilter;
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.ConfigService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -45,9 +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 {
@@ -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);
// 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.OpenAPI;
@@ -68,7 +68,7 @@ public class SwaggerConfig {
if (openApi.getPaths() != null) {
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;
}
// 接口添加鉴权参数

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.databind.ObjectMapper;
@@ -21,9 +21,7 @@ import org.springframework.validation.beanvalidation.SpringConstraintValidatorFa
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.TimeZone;
/**
* 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.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.event.UserConnectionEvent;
import com.youlai.system.service.WebsocketService;
import groovy.lang.Lazy;
import lombok.RequiredArgsConstructor;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.system.event.UserConnectionEvent;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Configuration;
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 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 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 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.map.MapUtil;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.config.property;
package com.youlai.boot.config.property;
import lombok.Data;
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 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.TimeInterval;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.util.IPUtils;
import com.youlai.system.model.entity.SysLog;
import com.youlai.system.plugin.syslog.annotation.LogAnnotation;
import com.youlai.system.security.util.SecurityUtils;
import com.youlai.system.service.SysLogService;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.util.IPUtils;
import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.core.security.util.SecurityUtils;
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.system.plugin.syslog.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

@@ -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.jwt.JWTUtil;
import cn.hutool.jwt.RegisteredPayload;
import com.youlai.system.common.constant.RedisConstants;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.exception.BusinessException;
import com.youlai.system.common.result.ResultCode;
import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit;
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.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 DuplicateSubmitAspect {
public class RepeatSubmitAspect {
private final RedissonClient redissonClient;
/**
* 防重复提交切点
*/
@Pointcut("@annotation(preventRepeatSubmit)")
public void preventDuplicateSubmitPointCut(PreventRepeatSubmit preventRepeatSubmit) {
@Pointcut("@annotation(repeatSubmit)")
public void preventDuplicateSubmitPointCut(RepeatSubmit repeatSubmit) {
log.info("定义防重复提交切点");
}
@Around("preventDuplicateSubmitPointCut(preventRepeatSubmit)")
public Object doAround(ProceedingJoinPoint pjp, PreventRepeatSubmit preventRepeatSubmit) throws Throwable {
@Around("preventDuplicateSubmitPointCut(repeatSubmit)")
public Object doAround(ProceedingJoinPoint pjp, RepeatSubmit repeatSubmit) throws Throwable {
String resubmitLockKey = generateResubmitLockKey();
if (resubmitLockKey != null) {
int expire = preventRepeatSubmit.expire(); // 防重提交锁过期时间
int expire = repeatSubmit.expire(); // 防重提交锁过期时间
RLock lock = redissonClient.getLock(resubmitLockKey);
boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败直接返回 false
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.system.common.result.ResultCode;
import com.youlai.system.service.SysConfigService;
import com.youlai.system.util.IPUtils;
import com.youlai.system.util.ResponseUtils;
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.ConfigService;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@@ -24,14 +24,14 @@ import java.util.concurrent.TimeUnit;
* @since 2024/08/10 14:38
*/
@Slf4j
public class RedisRateLimiterFilter extends OncePerRequestFilter {
public class RateLimiterFilter extends OncePerRequestFilter {
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.sysConfigService = sysConfigService;
this.configService = configService;
}
/**
@@ -48,7 +48,7 @@ public class RedisRateLimiterFilter 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

@@ -1,4 +1,4 @@
package com.youlai.system.filter;
package com.youlai.boot.core.filter;
import jakarta.servlet.http.HttpServletRequest;
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 com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler;
import com.youlai.system.plugin.mybatis.annotation.DataPermission;
import com.youlai.system.common.base.IBaseEnum;
import com.youlai.system.enums.DataScopeEnum;
import com.youlai.system.security.util.SecurityUtils;
import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.boot.common.base.IBaseEnum;
import com.youlai.boot.common.enums.DataScopeEnum;
import com.youlai.boot.core.security.util.SecurityUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
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 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.system.util.ResponseUtils;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.util.ResponseUtils;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
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.system.util.ResponseUtils;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.util.ResponseUtils;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.core.AuthenticationException;
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.core.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.common.result.ResultCode;
import com.youlai.system.util.ResponseUtils;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.util.ResponseUtils;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
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.json.JSONObject;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.common.result.ResultCode;
import com.youlai.system.security.util.JwtUtils;
import com.youlai.system.util.ResponseUtils;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.core.security.util.JwtUtils;
import com.youlai.boot.common.util.ResponseUtils;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
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.util.ObjectUtil;
import com.youlai.system.model.dto.UserAuthInfo;
import com.youlai.boot.system.model.dto.UserAuthInfo;
import lombok.Data;
import lombok.Getter;
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.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.security.util.SecurityUtils;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.core.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.system.model.dto.UserAuthInfo;
import com.youlai.system.service.SysUserService;
import com.youlai.boot.core.security.model.SysUserDetails;
import com.youlai.boot.system.model.dto.UserAuthInfo;
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,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.date.DateUtil;
@@ -6,8 +6,8 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.JwtClaimConstants;
import com.youlai.system.security.model.SysUserDetails;
import com.youlai.boot.common.constant.JwtClaimConstants;
import com.youlai.boot.core.security.model.SysUserDetails;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
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.util.StrUtil;
import com.youlai.system.common.constant.SystemConstants;
import com.youlai.system.security.model.SysUserDetails;
import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.core.security.model.SysUserDetails;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
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.system.common.result.Result;
import com.youlai.system.model.dto.CaptchaResult;
import com.youlai.system.model.dto.LoginResult;
import com.youlai.system.plugin.syslog.annotation.LogAnnotation;
import com.youlai.system.service.AuthService;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result;
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.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,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.system.model.dto.LoginResult;
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.system.service.impl;
package com.youlai.boot.platform.auth.service.impl;
import cn.hutool.captcha.AbstractCaptcha;
import cn.hutool.captcha.CaptchaUtil;
@@ -8,13 +8,13 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.enums.CaptchaTypeEnum;
import com.youlai.system.model.dto.CaptchaResult;
import com.youlai.system.model.dto.LoginResult;
import com.youlai.system.config.property.CaptchaProperties;
import com.youlai.system.service.AuthService;
import com.youlai.system.security.util.JwtUtils;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.enums.CaptchaTypeEnum;
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;
import com.youlai.boot.core.security.util.JwtUtils;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
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.system.model.dto.FileInfo;
import com.youlai.system.service.OssService;
import com.youlai.boot.common.result.Result;
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;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -25,15 +25,21 @@ import org.springframework.web.multipart.MultipartFile;
@RequiredArgsConstructor
public class FileController {
private final OssService ossService;
private final FileService fileService;
@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 = ossService.uploadFile(file);
FileInfo fileInfo = fileService.uploadFile(file);
return Result.success(fileInfo);
}
@@ -43,7 +49,7 @@ public class FileController {
public Result<?> deleteFile(
@Parameter(description = "文件路径") @RequestParam String filePath
) {
boolean result = ossService.deleteFile(filePath);
boolean result = fileService.deleteFile(filePath);
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;
/**
@@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
* @author haoxr
* @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.io.FileUtil;
@@ -8,8 +8,8 @@ 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.system.model.dto.FileInfo;
import com.youlai.system.service.OssService;
import com.youlai.boot.platform.file.service.FileService;
import com.youlai.boot.system.model.dto.FileInfo;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@@ -33,7 +33,7 @@ import java.time.LocalDateTime;
@ConfigurationProperties(prefix = "oss.aliyun")
@RequiredArgsConstructor
@Data
public class AliyunOssService implements OssService {
public class AliyunFileService implements FileService {
/**
* 服务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.io.FileUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.youlai.system.model.dto.FileInfo;
import com.youlai.system.service.OssService;
import com.youlai.boot.platform.file.service.FileService;
import com.youlai.boot.system.model.dto.FileInfo;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
@@ -36,7 +36,7 @@ import java.time.LocalDateTime;
@ConfigurationProperties(prefix = "oss.minio")
@RequiredArgsConstructor
@Data
public class MinioOssService implements OssService {
public class MinioFileService implements FileService {
/**
* 服务Endpoint
@@ -102,7 +102,8 @@ public class MinioOssService implements OssService {
// 返回文件路径
String fileUrl;
if (StrUtil.isBlank(customDomain)) { // 未配置自定义域名
// 未配置自定义域名
if (StrUtil.isBlank(customDomain)) {
GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
.bucket(bucketName).object(fileName)
.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.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.config.property.GeneratorProperties;
import com.youlai.system.enums.LogModuleEnum;
import com.youlai.system.model.form.GenConfigForm;
import com.youlai.system.model.query.TablePageQuery;
import com.youlai.system.model.vo.GeneratorPreviewVO;
import com.youlai.system.model.vo.TablePageVO;
import com.youlai.system.plugin.syslog.annotation.LogAnnotation;
import com.youlai.system.service.GeneratorService;
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.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.Log;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -18,7 +18,6 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriUtils;
import java.io.IOException;
import java.net.URLEncoder;
@@ -42,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
) {
@@ -61,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();
@@ -78,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);
@@ -86,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,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.extension.plugins.pagination.Page;
import com.youlai.system.model.bo.ColumnMetaData;
import com.youlai.system.model.bo.TableMetaData;
import com.youlai.system.model.entity.SysDept;
import com.youlai.system.model.query.TablePageQuery;
import com.youlai.system.model.vo.TablePageVO;
import com.youlai.boot.system.model.bo.ColumnMetaData;
import com.youlai.boot.system.model.bo.TableMetaData;
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;
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);
List<ColumnMetaData> getTableColumns(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.youlai.system.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.system.mapper;
package com.youlai.boot.platform.generator.mapper;
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;
/**

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.youlai.system.common.base.BaseEntity;
import com.youlai.boot.common.base.BaseEntity;
import lombok.Getter;
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.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.system.common.base.BaseEntity;
import com.youlai.system.enums.FormTypeEnum;
import com.youlai.system.enums.QueryTypeEnum;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.common.enums.FormTypeEnum;
import com.youlai.boot.common.enums.QueryTypeEnum;
import lombok.Getter;
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.system.enums.QueryTypeEnum;
import com.youlai.boot.common.enums.FormTypeEnum;
import com.youlai.boot.common.enums.QueryTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
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.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.youlai.system.model.entity.GenConfig;
import com.youlai.system.model.entity.GenFieldConfig;
import com.youlai.boot.platform.generator.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.youlai.system.model.form.GenConfigForm;
import com.youlai.system.model.query.TablePageQuery;
import com.youlai.system.model.vo.GeneratorPreviewVO;
import com.youlai.system.model.vo.TablePageVO;
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 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.youlai.system.mapper.GenConfigMapper;
import com.youlai.system.model.entity.GenConfig;
import com.youlai.system.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.system.service.impl;
package com.youlai.boot.platform.generator.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.system.mapper.GenFieldConfigMapper;
import com.youlai.system.model.entity.GenFieldConfig;
import com.youlai.system.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.system.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.system.SystemApplication;
import com.youlai.system.config.property.GeneratorProperties;
import com.youlai.system.converter.GenConfigConverter;
import com.youlai.system.enums.FormTypeEnum;
import com.youlai.system.enums.JavaTypeEnum;
import com.youlai.system.enums.QueryTypeEnum;
import com.youlai.system.exception.BusinessException;
import com.youlai.system.mapper.DatabaseMapper;
import com.youlai.system.model.bo.ColumnMetaData;
import com.youlai.system.model.bo.TableMetaData;
import com.youlai.system.model.entity.GenConfig;
import com.youlai.system.model.entity.GenFieldConfig;
import com.youlai.system.model.form.GenConfigForm;
import com.youlai.system.model.query.TablePageQuery;
import com.youlai.system.model.vo.GeneratorPreviewVO;
import com.youlai.system.model.vo.TablePageVO;
import com.youlai.system.service.GeneratorService;
import com.youlai.system.service.GenConfigService;
import com.youlai.system.service.GenFieldConfigService;
import com.youlai.system.service.SysMenuService;
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.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.platform.generator.mapper.DatabaseMapper;
import com.youlai.boot.system.model.bo.ColumnMetaData;
import com.youlai.boot.system.model.bo.TableMetaData;
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.MenuService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Value;
@@ -40,7 +40,6 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipOutputStream;
@@ -59,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;
@@ -113,7 +112,7 @@ public class GeneratorServiceImpl implements GeneratorService {
String entityName = StrUtil.toCamelCase(StrUtil.removePrefix(tableName, tableName.split("_")[0]));
genConfig.setEntityName(entityName);
String packageName = SystemApplication.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.system.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.system.service.impl.mail;
package com.youlai.boot.platform.mail.service.impl;
import com.youlai.system.config.property.MailProperties;
import com.youlai.system.service.MailService;
import com.youlai.boot.config.property.MailProperties;
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.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.CommonResponse;
@@ -8,8 +8,8 @@ import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.youlai.system.config.property.AliyunSmsProperties;
import com.youlai.system.service.SmsService;
import com.youlai.boot.config.property.AliyunSmsProperties;
import com.youlai.boot.platform.sms.service.SmsService;
import lombok.RequiredArgsConstructor;
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.extern.slf4j.Slf4j;
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;

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.model.dto.ChatMessage;

View File

@@ -1,12 +1,12 @@
package com.youlai.system.controller;
package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.model.form.ConfigForm;
import com.youlai.system.model.query.ConfigPageQuery;
import com.youlai.system.model.vo.ConfigVO;
import com.youlai.system.service.SysConfigService;
import com.youlai.boot.common.result.PageResult;
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.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.system.controller;
package com.youlai.boot.system.controller;
import com.youlai.system.enums.LogModuleEnum;
import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit;
import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.Result;
import com.youlai.system.model.form.DeptForm;
import com.youlai.system.model.query.DeptQuery;
import com.youlai.system.model.vo.DeptVO;
import com.youlai.system.plugin.syslog.annotation.LogAnnotation;
import com.youlai.system.service.SysDeptService;
import com.youlai.boot.common.enums.LogModuleEnum;
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.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')")
@PreventRepeatSubmit
@RepeatSubmit
public Result<?> saveDept(
@Valid @RequestBody DeptForm formData
) {

View File

@@ -1,16 +1,16 @@
package com.youlai.system.controller;
package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.enums.LogModuleEnum;
import com.youlai.system.model.query.DictPageQuery;
import com.youlai.system.model.vo.DictPageVO;
import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit;
import com.youlai.system.model.form.DictForm;
import com.youlai.system.plugin.syslog.annotation.LogAnnotation;
import com.youlai.system.service.SysDictService;
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.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.RepeatSubmit;
import com.youlai.boot.system.model.form.DictForm;
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')")
@PreventRepeatSubmit
@RepeatSubmit
public Result<?> saveDict(@RequestBody DictForm formData) {
boolean result = dictService.saveDict(formData);
return Result.judge(result);

View File

@@ -1,13 +1,13 @@
package com.youlai.system.controller;
package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.model.query.LogPageQuery;
import com.youlai.system.model.vo.LogPageVO;
import com.youlai.system.model.vo.VisitStatsVO;
import com.youlai.system.model.vo.VisitTrendVO;
import com.youlai.system.service.SysLogService;
import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result;
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.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")

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