upd: 编码规范

This commit is contained in:
2025-03-29 01:56:31 +08:00
parent 9fe74ca1ea
commit 69562356ad
156 changed files with 585 additions and 420 deletions
@@ -1,6 +1,11 @@
package cn.odboy.annotation;
import java.lang.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 用于标记匿名访问方法
@@ -3,8 +3,11 @@ package cn.odboy.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler
@@ -3,8 +3,11 @@ package cn.odboy.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation for mapping HTTP {@code GET} requests onto specific handler
@@ -3,8 +3,11 @@ package cn.odboy.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler
@@ -3,8 +3,11 @@ package cn.odboy.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation for mapping HTTP {@code POST} requests onto specific handler
@@ -3,8 +3,11 @@ package cn.odboy.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation for mapping HTTP {@code PUT} requests onto specific handler
@@ -10,7 +10,6 @@ import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;
import java.lang.reflect.Field;
import java.sql.Timestamp;
@@ -11,7 +11,6 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.format.annotation.DateTimeFormat;
import java.lang.reflect.Field;
import java.sql.Timestamp;
@@ -15,8 +15,11 @@
*/
package cn.odboy.base;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.Map;
/**
@@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@@ -4,7 +4,6 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
/**
@@ -1,9 +1,7 @@
package cn.odboy.context;
import cn.odboy.util.SecurityUtil;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -19,7 +17,7 @@ public class AuthorityConfig {
*/
public Boolean check(String... permissions) {
// 获取当前用户的所有权限
List<String> roleList = SecurityUtil.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
List<String> roleList = SecurityHelper.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
// 判断当前用户的所有权限是否包含接口上定义的权限
return roleList.contains("admin") || Arrays.stream(permissions).anyMatch(roleList::contains);
}
@@ -20,7 +20,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -2,7 +2,6 @@ package cn.odboy.context;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
@@ -13,13 +13,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.util;
package cn.odboy.context;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.script.ScriptRuntimeException;
import cn.odboy.exception.BadRequestException;
import org.springframework.stereotype.Component;
import javax.script.*;
import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleScriptContext;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
@@ -33,7 +39,7 @@ import java.util.Set;
* @date 2023-12-05
*/
@Component
public class ScriptUtil {
public class ScriptHelper {
private static final String FUNCTION_TAG = "function";
private final ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
@@ -44,7 +50,7 @@ public class ScriptUtil {
public Object evalObj(String script, Object compareObj) {
try {
if (script.contains(FUNCTION_TAG)) {
throw new RuntimeException("script格式异常");
throw new BadRequestException("script格式异常");
}
// 构建一个不同的脚本上下文
ScriptContext newContext = new SimpleScriptContext();
@@ -55,7 +61,7 @@ public class ScriptUtil {
Set<Map.Entry<String, Object>> entries = filedNameValueMap.entrySet();
long count = entries.stream().filter(f -> f.getValue() != null).count();
if (count == 0) {
throw new RuntimeException("比较对象中没有有效值");
throw new BadRequestException("比较对象中没有有效值");
}
Bindings engineScope = engine.createBindings();
entries.forEach(f -> {
@@ -79,7 +85,7 @@ public class ScriptUtil {
*/
public Object evalFunction(String script, String functionName, Object... args) {
if (!script.contains(FUNCTION_TAG)) {
throw new RuntimeException("script格式异常");
throw new BadRequestException("script格式异常");
}
try {
// 执行脚本
@@ -1,11 +1,10 @@
package cn.odboy.util;
package cn.odboy.context;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import cn.odboy.constant.DataScopeEnum;
import cn.odboy.constant.SystemConst;
import cn.odboy.context.SpringBeanHolder;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
@@ -15,7 +14,6 @@ import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Objects;
@@ -25,7 +23,7 @@ import java.util.Objects;
*/
@Slf4j
@Component
public class SecurityUtil {
public class SecurityHelper {
/**
* 获取当前登录的用户
*
@@ -7,7 +7,6 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -2,7 +2,6 @@ package cn.odboy.exception;
import lombok.Getter;
import org.springframework.http.HttpStatus;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
/**
@@ -4,7 +4,7 @@ import lombok.Data;
@Data
public class ApiError {
public final class ApiError {
private Integer status = 400;
private Long timestamp;
@@ -14,13 +14,13 @@ public class ApiError {
timestamp = System.currentTimeMillis();
}
public static ApiError error(String message) {
public static ApiError error(final String message) {
ApiError apiError = new ApiError();
apiError.setMessage(message);
return apiError;
}
public static ApiError error(Integer status, String message) {
public static ApiError error(final Integer status, final String message) {
ApiError apiError = new ApiError();
apiError.setStatus(status);
apiError.setMessage(message);
@@ -13,7 +13,6 @@ import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import static org.springframework.http.HttpStatus.NOT_FOUND;
@Slf4j
@@ -9,8 +9,12 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -1,5 +1,6 @@
package cn.odboy.mybatis.constant;
import cn.odboy.exception.BadRequestException;
import lombok.extern.slf4j.Slf4j;
/**
@@ -94,10 +95,10 @@ public enum DataTypeEnum {
try {
Class<?> aClass = Class.forName(dataTypeEnum.getDriver());
if (null == aClass) {
throw new RuntimeException("Unable to get driver instance for jdbcUrl: " + jdbcUrl);
throw new BadRequestException("Unable to get driver instance for jdbcUrl: " + jdbcUrl);
}
} catch (ClassNotFoundException e) {
throw new RuntimeException("Unable to get driver instance: " + jdbcUrl);
throw new BadRequestException("Unable to get driver instance: " + jdbcUrl);
}
return dataTypeEnum;
}
@@ -22,7 +22,6 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import org.apache.ibatis.session.Configuration;
import java.util.List;
/**
@@ -1,11 +1,10 @@
package cn.odboy.mybatis.context;
import cn.hutool.core.date.DateTime;
import cn.odboy.util.SecurityUtil;
import cn.odboy.context.SecurityHelper;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
@Component
@@ -19,7 +18,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
/* 操作人 */
String username = "System";
try {
username = SecurityUtil.getCurrentUsername();
username = SecurityHelper.getCurrentUsername();
} catch (Exception ignored) {
}
this.strictInsertFill(metaObject, "createBy", String.class, username);
@@ -33,7 +32,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
/* 操作人 */
String username = "System";
try {
username = SecurityUtil.getCurrentUsername();
username = SecurityHelper.getCurrentUsername();
} catch (Exception ignored) {
}
this.strictUpdateFill(metaObject, "updateBy", String.class, username);
@@ -30,7 +30,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.ibatis.binding.MapperMethod;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@@ -17,7 +17,12 @@ package cn.odboy.mybatis.util;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.IDbQuery;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
@@ -26,7 +31,6 @@ import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import lombok.Data;
import java.sql.Types;
import java.util.Collections;
import java.util.List;
@@ -12,11 +12,14 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -2,7 +2,6 @@ package cn.odboy.redis;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONFactory;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.MurmurHash3;
@@ -24,7 +23,6 @@ import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.HashMap;
@@ -1,4 +1,4 @@
package cn.odboy.util;
package cn.odboy.redis;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
@@ -7,22 +7,32 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.core.ConvertingCursor;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisConnectionUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
@SuppressWarnings({"unchecked", "all"})
public class RedisUtil {
private static final Logger log = LoggerFactory.getLogger(RedisUtil.class);
public class RedisHelper {
private static final Logger log = LoggerFactory.getLogger(RedisHelper.class);
private RedisTemplate<Object, Object> redisTemplate;
public RedisUtil(RedisTemplate<Object, Object> redisTemplate) {
public RedisHelper(RedisTemplate<Object, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
this.redisTemplate.setKeySerializer(new StringRedisSerializer());
this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
@@ -15,7 +15,6 @@ import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -5,7 +5,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.MultipartConfigElement;
import java.io.File;
@@ -13,14 +13,17 @@ import org.springframework.util.ReflectionUtils;
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.*;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider;
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
@@ -1,14 +1,17 @@
package cn.odboy.thread;
import com.alibaba.ttl.TtlRunnable;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -17,34 +20,8 @@ import java.util.concurrent.atomic.AtomicInteger;
@EnableAsync
@Configuration
public class AsyncExecutor implements AsyncConfigurer {
public static int corePoolSize;
public static int maxPoolSize;
public static int keepAliveSeconds;
public static int queueCapacity;
@Value("${task.pool.core-pool-size}")
public void setCorePoolSize(int corePoolSize) {
AsyncExecutor.corePoolSize = corePoolSize;
}
@Value("${task.pool.max-pool-size}")
public void setMaxPoolSize(int maxPoolSize) {
AsyncExecutor.maxPoolSize = maxPoolSize;
}
@Value("${task.pool.keep-alive-seconds}")
public void setKeepAliveSeconds(int keepAliveSeconds) {
AsyncExecutor.keepAliveSeconds = keepAliveSeconds;
}
@Value("${task.pool.queue-capacity}")
public void setQueueCapacity(int queueCapacity) {
AsyncExecutor.queueCapacity = queueCapacity;
}
@Autowired
private AsyncTaskProperties properties;
/**
* 自定义线程池,用法 @Async
@@ -56,8 +33,8 @@ public class AsyncExecutor implements AsyncConfigurer {
// 自定义工厂
ThreadFactory factory = r -> new Thread(r, "default-async-" + new AtomicInteger(1).getAndIncrement());
// 自定义线程池
return new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveSeconds,
TimeUnit.SECONDS, new ArrayBlockingQueue<>(queueCapacity), factory,
return new ThreadPoolExecutor(properties.getCorePoolSize(), properties.getMaxPoolSize(), properties.getKeepAliveSeconds(),
TimeUnit.SECONDS, new ArrayBlockingQueue<>(properties.getQueueCapacity()), factory,
new ThreadPoolExecutor.CallerRunsPolicy());
}
@@ -68,11 +45,11 @@ public class AsyncExecutor implements AsyncConfigurer {
public ThreadPoolTaskExecutor taskAsync() {
// 用法 private ThreadPoolTaskExecutor taskExecutor
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(AsyncExecutor.corePoolSize);
executor.setMaxPoolSize(AsyncExecutor.maxPoolSize);
executor.setQueueCapacity(AsyncExecutor.queueCapacity);
executor.setCorePoolSize(properties.getCorePoolSize());
executor.setMaxPoolSize(properties.getMaxPoolSize());
executor.setQueueCapacity(properties.getQueueCapacity());
executor.setThreadNamePrefix("task-async-");
executor.setKeepAliveSeconds(AsyncExecutor.keepAliveSeconds);
executor.setKeepAliveSeconds(properties.getKeepAliveSeconds());
// DiscardOldestPolicy,抛弃最早的任务,将新任务加入队列。
// AbortPolicy,拒绝执行新任务,并抛出异常。
// CallerRunsPolicy,交由调用者线程执行新任务,如果调用者线程已关闭,则抛弃任务。
@@ -0,0 +1,15 @@
package cn.odboy.thread;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "task.pool")
public class AsyncTaskProperties {
private int corePoolSize;
private int maxPoolSize;
private int keepAliveSeconds;
private int queueCapacity;
}
@@ -7,13 +7,18 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* 匿名标记工具
*/
public class AnonTagUtil {
public final class AnonTagUtil {
/**
* 获取匿名标记的URL
@@ -21,10 +26,10 @@ public class AnonTagUtil {
* @param applicationContext /
* @return /
*/
public static Map<String, Set<String>> getAnonymousUrl(ApplicationContext applicationContext) {
public static Map<String, Set<String>> getAnonymousUrl(final ApplicationContext applicationContext) {
RequestMappingHandlerMapping requestMappingHandlerMapping = (RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods();
Map<String, Set<String>> anonymousUrls = new HashMap<>(8);
Map<String, java.util.Set<String>> anonymousUrls = new HashMap<>(8);
// 获取匿名标记
Set<String> get = new HashSet<>();
Set<String> post = new HashSet<>();
@@ -77,7 +82,7 @@ public class AnonTagUtil {
* @param applicationContext /
* @return /
*/
public static Set<String> getAllAnonymousUrl(ApplicationContext applicationContext) {
public static Set<String> getAllAnonymousUrl(final ApplicationContext applicationContext) {
Set<String> allUrl = new HashSet<>();
Map<String, Set<String>> anonymousUrls = getAnonymousUrl(applicationContext);
for (String key : anonymousUrls.keySet()) {
@@ -17,7 +17,6 @@ package cn.odboy.util;
import cn.hutool.core.codec.Base64Encoder;
import cn.hutool.core.util.IdUtil;
import java.nio.charset.StandardCharsets;
/**
@@ -26,7 +25,7 @@ import java.nio.charset.StandardCharsets;
* @author odboy
* @date 2022-11-16
*/
public class Base64SecretUtil {
public final class Base64SecretUtil {
private Base64SecretUtil() {
}
@@ -6,7 +6,7 @@ import java.math.RoundingMode;
/**
* 计算类
*/
public class BigDecimalUtil {
public final class BigDecimalUtil {
/**
* 将对象转换为 BigDecimal
@@ -3,7 +3,6 @@ package cn.odboy.util;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -12,7 +11,7 @@ import java.net.UnknownHostException;
* 浏览器 相关
*/
@Slf4j
public class BrowserUtil {
public final class BrowserUtil {
private static final String UNKNOWN = "unknown";
/**
@@ -7,7 +7,7 @@ import java.util.List;
/**
* 类 相关
*/
public class ClassUtil {
public final class ClassUtil {
@SuppressWarnings({"unchecked", "all"})
public static List<Field> getAllFields(Class clazz, List<Field> fields) {
if (clazz != null) {
@@ -5,7 +5,7 @@ import java.io.Closeable;
/**
* 用于关闭各种连接,缺啥补啥
*/
public class CloseUtil {
public final class CloseUtil {
public static void close(Closeable closeable) {
if (null != closeable) {
@@ -17,11 +17,15 @@ package cn.odboy.util;
import cn.odboy.base.MyMetaOption;
import com.alibaba.fastjson2.JSON;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -32,7 +36,7 @@ import java.util.stream.Collectors;
* @author odboy
* @date 2022-11-09
*/
public class CollUtil extends cn.hutool.core.collection.CollUtil {
public final class CollUtil extends cn.hutool.core.collection.CollUtil {
private static <T, K> Predicate<T> distinctPredicate(Function<? super T, ? extends K> keyMapper) {
Map<Object, Boolean> map = new HashMap<>(3);
return (t) -> null == map.putIfAbsent(keyMapper.apply(t), true);
@@ -10,7 +10,7 @@ import java.nio.charset.StandardCharsets;
/**
* DES加密
*/
public class DesEncryptUtil {
public final class DesEncryptUtil {
private static final String STR_PARAM = "Passw0rd";
private static final IvParameterSpec IV = new IvParameterSpec(STR_PARAM.getBytes(StandardCharsets.UTF_8));
@@ -11,11 +11,14 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.text.DecimalFormat;
@@ -25,14 +28,16 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.odboy.constant.SystemConst.*;
import static cn.odboy.constant.SystemConst.SYMBOL_ADD;
import static cn.odboy.constant.SystemConst.SYMBOL_AT;
import static cn.odboy.constant.SystemConst.SYMBOL_EQUAL;
import static cn.odboy.constant.SystemConst.SYMBOL_SUBTRACT;
/**
* File工具类,扩展 hutool 工具包
*/
@Slf4j
public class FileUtil extends cn.hutool.core.io.FileUtil {
public final class FileUtil extends cn.hutool.core.io.FileUtil {
/**
* 系统临时目录
@@ -3,7 +3,6 @@ package cn.odboy.util;
import cn.odboy.context.SpringBeanHolder;
import net.dreamlu.mica.ip2region.core.Ip2regionSearcher;
import net.dreamlu.mica.ip2region.core.IpInfo;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
@@ -11,7 +10,7 @@ import java.util.Enumeration;
/**
* IP地址 相关
*/
public class IpUtil {
public final class IpUtil {
/**
* 注入bean
*/
@@ -17,7 +17,6 @@ package cn.odboy.util;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import java.util.List;
import java.util.Map;
@@ -27,7 +26,7 @@ import java.util.Map;
* @author odboy
* @date 2024-10-01
*/
public class JsonUtil {
public final class JsonUtil {
public static <K, V> Map<K, V> toMap(String jsonStr, Class<K> kClass, Class<V> vClass) {
return JSON.parseObject(jsonStr, new TypeReference<Map<K, V>>() {
});
@@ -17,7 +17,6 @@ package cn.odboy.util;
import cn.hutool.core.date.DateTime;
import cn.odboy.base.MyEntity;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
@@ -29,7 +28,7 @@ import java.util.stream.Collectors;
* @author odboy
* @date 2024-10-01
*/
public class ListUtil {
public final class ListUtil {
/**
* 根据对象T的属性去重
*
@@ -21,7 +21,7 @@ package cn.odboy.util;
* @author odboy
* @date 2025-01-13
*/
public class LogFmtUtil {
public final class LogFmtUtil {
/**
* 替换字符串中的占位符 {} 为传入的参数
*
@@ -4,14 +4,13 @@ import cn.odboy.base.PageResult;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.Collections;
import java.util.List;
/**
* 分页工具
*/
public class PageUtil extends cn.hutool.core.util.PageUtil {
public final class PageUtil extends cn.hutool.core.util.PageUtil {
/**
* List 分页
@@ -1,10 +1,14 @@
package cn.odboy.util;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.*;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
@@ -13,7 +17,7 @@ import java.security.spec.X509EncodedKeySpec;
/**
* Rsa 工具类,公钥私钥生成,加解密
*/
public class RsaEncryptUtil {
public final class RsaEncryptUtil {
private static final String SRC = "123456";
@@ -1,11 +1,11 @@
package cn.odboy.util;
import cn.odboy.exception.BadRequestException;
import cn.odboy.mybatis.constant.DataTypeEnum;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.common.collect.Lists;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import javax.sql.DataSource;
import java.io.BufferedReader;
import java.io.File;
@@ -19,7 +19,7 @@ import java.sql.Statement;
import java.util.List;
@Slf4j
public class SqlUtil {
public final class SqlUtil {
/**
* 获取数据源
*
@@ -34,12 +34,12 @@ public class SqlUtil {
try {
className = DriverManager.getDriver(jdbcUrl.trim()).getClass().getName();
} catch (SQLException e) {
throw new RuntimeException("Get class name error: =" + jdbcUrl);
throw new BadRequestException("Get class name error: =" + jdbcUrl);
}
if (StringUtils.isEmpty(className)) {
DataTypeEnum dataTypeEnum = DataTypeEnum.urlOf(jdbcUrl);
if (null == dataTypeEnum) {
throw new RuntimeException("Not supported data type: jdbcUrl=" + jdbcUrl);
throw new BadRequestException("Not supported data type: jdbcUrl=" + jdbcUrl);
}
druidDataSource.setDriverClassName(dataTypeEnum.getDriver());
} else {
@@ -67,7 +67,7 @@ public class SqlUtil {
}
} catch (Exception e) {
log.error("create connection error, jdbcUrl: {}", jdbcUrl);
throw new RuntimeException("create connection error, jdbcUrl: " + jdbcUrl);
throw new BadRequestException("create connection error, jdbcUrl: " + jdbcUrl);
} finally {
CloseUtil.close(connection);
}
@@ -1,7 +1,6 @@
package cn.odboy.util;
import lombok.extern.slf4j.Slf4j;
import java.util.Calendar;
import java.util.Date;
@@ -9,7 +8,7 @@ import java.util.Date;
* 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
*/
@Slf4j
public class StringUtil extends org.apache.commons.lang3.StringUtils {
public final class StringUtil extends org.apache.commons.lang3.StringUtils {
private static final char SEPARATOR = '_';
@@ -27,7 +27,7 @@ import java.util.Set;
* @author odboy
* @date 2025-01-15
*/
public class ValidationUtil {
public final class ValidationUtil {
private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
public static <T> void validate(T object) {
@@ -4,8 +4,11 @@ import cn.odboy.websocket.dto.WebSocketMsgDto;
import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -46,7 +45,7 @@ public class QuartzJob extends MyEntity {
@ApiModelProperty(value = "cron表达式")
private String cronExpression;
@ApiModelProperty(value = "状态,暂时或启动")
@ApiModelProperty(value = "状态:暂停或启动")
private Boolean isPause = false;
@ApiModelProperty(value = "负责人")
@@ -1,11 +1,14 @@
package cn.odboy.model.job.domain;
import cn.odboy.base.MyObject;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp;
@Data
@@ -2,7 +2,6 @@ package cn.odboy.model.job.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@@ -0,0 +1,30 @@
package cn.odboy.model.job.request;
import cn.odboy.base.MyObject;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@EqualsAndHashCode(callSuper = false)
public class UpdateQuartzJobRequest extends MyObject {
@NotNull
private Long id;
private String uuid;
private String jobName;
@NotBlank
private String beanName;
@NotBlank
private String methodName;
private String params;
@NotBlank
private String cronExpression;
private Boolean isPause = false;
private String personInCharge;
private String email;
private String subTask;
private Boolean pauseAfterFailure;
@NotBlank
private String description;
}
@@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Objects;
@@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
@@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Objects;
@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -2,7 +2,6 @@ package cn.odboy.model.system.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
@@ -3,7 +3,6 @@ package cn.odboy.model.system.request;
import cn.odboy.base.MyObject;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -4,7 +4,6 @@ import cn.odboy.base.MyObject;
import cn.odboy.model.system.domain.Dict;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -3,7 +3,6 @@ package cn.odboy.model.system.request;
import cn.odboy.base.MyObject;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
@Data
@@ -3,7 +3,6 @@ package cn.odboy.model.system.request;
import cn.odboy.base.MyObject;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -4,7 +4,6 @@ import cn.odboy.base.MyObject;
import cn.odboy.model.system.domain.Dept;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Set;
@@ -2,7 +2,6 @@ package cn.odboy.model.system.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@@ -3,7 +3,6 @@ package cn.odboy.model.system.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Timestamp;
import java.util.List;
@@ -2,7 +2,6 @@ package cn.odboy.model.system.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@@ -2,7 +2,6 @@ package cn.odboy.model.system.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@@ -3,7 +3,6 @@ package cn.odboy.model.system.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
@Getter
@@ -4,7 +4,6 @@ import cn.odboy.base.MyObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.List;
@@ -4,7 +4,6 @@ import cn.odboy.base.MyObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Set;
@Data
@@ -4,7 +4,6 @@ import cn.odboy.base.MyObject;
import cn.odboy.model.system.dto.RoleCodeDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
@@ -1,11 +1,14 @@
package cn.odboy.model.tools.domain;
import cn.odboy.base.MyObject;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp;
/**
@@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@@ -2,7 +2,6 @@ package cn.odboy.model.tools.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@@ -2,7 +2,6 @@ package cn.odboy.model.tools.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@@ -1,14 +1,13 @@
package cn.odboy.application.job.config;
import cn.odboy.application.job.context.QuartzManage;
import cn.odboy.application.job.mapper.QuartzJobMapper;
import cn.odboy.application.job.util.QuartzManage;
import cn.odboy.model.job.domain.QuartzJob;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@@ -1,4 +1,4 @@
package cn.odboy.application.job.util;
package cn.odboy.application.job.context;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.extra.template.Template;
@@ -12,13 +12,12 @@ import cn.odboy.context.SpringBeanHolder;
import cn.odboy.model.job.domain.QuartzJob;
import cn.odboy.model.job.domain.QuartzLog;
import cn.odboy.model.tools.dto.EmailDto;
import cn.odboy.util.RedisUtil;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -39,7 +38,7 @@ public class ExecutionJob extends QuartzJobBean {
// 获取spring bean
QuartzLogMapper quartzLogMapper = SpringBeanHolder.getBean(QuartzLogMapper.class);
QuartzJobService quartzJobService = SpringBeanHolder.getBean(QuartzJobService.class);
RedisUtil redisUtil = SpringBeanHolder.getBean(RedisUtil.class);
RedisHelper redisHelper = SpringBeanHolder.getBean(RedisHelper.class);
String uuid = quartzJob.getUuid();
@@ -59,7 +58,7 @@ public class ExecutionJob extends QuartzJobBean {
long times = System.currentTimeMillis() - startTime;
quartzLog.setTime(times);
if (StringUtil.isNotBlank(uuid)) {
redisUtil.set(uuid, true);
redisHelper.set(uuid, true);
}
// 任务状态
quartzLog.setIsSuccess(true);
@@ -72,7 +71,7 @@ public class ExecutionJob extends QuartzJobBean {
}
} catch (Exception e) {
if (StringUtil.isNotBlank(uuid)) {
redisUtil.set(uuid, false);
redisHelper.set(uuid, false);
}
log.error("任务执行失败,任务名称:{}", quartzJob.getJobName(), e);
long times = System.currentTimeMillis() - startTime;
@@ -1,12 +1,21 @@
package cn.odboy.application.job.util;
package cn.odboy.application.job.context;
import cn.odboy.exception.BadRequestException;
import cn.odboy.model.job.domain.QuartzJob;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.ObjectAlreadyExistsException;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
@@ -1,10 +1,9 @@
package cn.odboy.application.job.util;
package cn.odboy.application.job.context;
import cn.odboy.context.SpringBeanHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Method;
import java.util.concurrent.Callable;
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
@@ -6,6 +6,7 @@ import cn.odboy.context.SpringBeanHolder;
import cn.odboy.exception.BadRequestException;
import cn.odboy.model.job.domain.QuartzJob;
import cn.odboy.model.job.domain.QuartzLog;
import cn.odboy.model.job.request.UpdateQuartzJobRequest;
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -16,8 +17,14 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Set;
@@ -79,7 +86,7 @@ public class QuartzJobController {
@ApiOperation("修改定时任务")
@PutMapping
@PreAuthorize("@el.check('timing:edit')")
public ResponseEntity<Object> updateQuartzJob(@Validated(QuartzJob.Update.class) @RequestBody QuartzJob resources) {
public ResponseEntity<Object> updateQuartzJob(@Validated(QuartzJob.Update.class) @RequestBody UpdateQuartzJobRequest resources) {
// 验证Bean是不是合法的,合法的定时任务 Bean 需要用 @Service 定义
checkBean(resources.getBeanName());
quartzJobService.updateJob(resources);
@@ -3,10 +3,10 @@ package cn.odboy.application.job.service;
import cn.odboy.base.PageResult;
import cn.odboy.model.job.domain.QuartzJob;
import cn.odboy.model.job.domain.QuartzLog;
import cn.odboy.model.job.request.UpdateQuartzJobRequest;
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@@ -61,7 +61,7 @@ public interface QuartzJobService extends IService<QuartzJob> {
*
* @param resources /
*/
void updateJob(QuartzJob resources);
void updateJob(UpdateQuartzJobRequest resources);
/**
* 删除任务
@@ -1,19 +1,21 @@
package cn.odboy.application.job.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.odboy.application.job.context.QuartzManage;
import cn.odboy.application.job.mapper.QuartzJobMapper;
import cn.odboy.application.job.mapper.QuartzLogMapper;
import cn.odboy.application.job.service.QuartzJobService;
import cn.odboy.application.job.util.QuartzManage;
import cn.odboy.base.PageResult;
import cn.odboy.exception.BadRequestException;
import cn.odboy.model.job.domain.QuartzJob;
import cn.odboy.model.job.domain.QuartzLog;
import cn.odboy.model.job.request.UpdateQuartzJobRequest;
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.FileUtil;
import cn.odboy.util.PageUtil;
import cn.odboy.util.RedisUtil;
import cn.odboy.util.StringUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -21,10 +23,14 @@ import lombok.RequiredArgsConstructor;
import org.quartz.CronExpression;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@RequiredArgsConstructor
@Service(value = "quartzJobService")
@@ -33,7 +39,7 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
private final QuartzJobMapper quartzJobMapper;
private final QuartzLogMapper quartzLogMapper;
private final QuartzManage quartzManage;
private final RedisUtil redisUtil;
private final RedisHelper redisHelper;
@Override
public PageResult<QuartzJob> queryJobPage(QuartzJobQueryCriteria criteria, Page<Object> page) {
@@ -67,7 +73,7 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
@Override
@Transactional(rollbackFor = Exception.class)
public void updateJob(QuartzJob resources) {
public void updateJob(UpdateQuartzJobRequest resources) {
if (!CronExpression.isValidExpression(resources.getCronExpression())) {
throw new BadRequestException("cron表达式格式错误");
}
@@ -77,8 +83,9 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
throw new BadRequestException("子任务中不能添加当前任务ID");
}
}
saveOrUpdate(resources);
quartzManage.updateJobCron(resources);
QuartzJob quartzJob = BeanUtil.copyProperties(resources, QuartzJob.class);
saveOrUpdate(quartzJob);
quartzManage.updateJobCron(quartzJob);
}
@Override
@@ -125,14 +132,14 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
// 执行任务
executionJob(quartzJob);
// 获取执行状态,如果执行失败则停止后面的子任务执行
Boolean result = redisUtil.get(uuid, Boolean.class);
Boolean result = redisHelper.get(uuid, Boolean.class);
while (result == null) {
// 休眠5秒,再次获取子任务执行情况
Thread.sleep(5000);
result = redisUtil.get(uuid, Boolean.class);
result = redisHelper.get(uuid, Boolean.class);
}
if (!result) {
redisUtil.del(uuid);
redisHelper.del(uuid);
break;
}
}
@@ -7,7 +7,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import java.net.UnknownHostException;
@Slf4j
@@ -2,7 +2,6 @@ package cn.odboy;
import cn.odboy.mybatis.util.CmdGenHelper;
import java.util.List;
/**
@@ -2,7 +2,6 @@ package cn.odboy.util;
import lombok.SneakyThrows;
import org.junit.jupiter.api.Test;
import static cn.odboy.util.DesEncryptUtil.desDecrypt;
import static cn.odboy.util.DesEncryptUtil.desEncrypt;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -2,8 +2,10 @@ package cn.odboy.util;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockMultipartFile;
import static cn.odboy.util.FileUtil.*;
import static cn.odboy.util.FileUtil.getPrefix;
import static cn.odboy.util.FileUtil.getSize;
import static cn.odboy.util.FileUtil.getSuffix;
import static cn.odboy.util.FileUtil.toFile;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class FileUtilTest {

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