This commit is contained in:
2025-04-26 12:40:50 +08:00
parent 4b2bbdeb86
commit d7f1548d7e
189 changed files with 860 additions and 692 deletions
@@ -39,7 +39,8 @@ public class RedisConfiguration extends CachingConfigurerSupport {
*/ */
private static final String[] WHITELIST_STR = { private static final String[] WHITELIST_STR = {
"org.springframework", "org.springframework",
"cn.odboy.model", "cn.odboy.core.controller.*.dto",
"cn.odboy.core.dal.dataobject",
}; };
/** /**
-24
View File
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cutejava</artifactId>
<groupId>cn.odboy</groupId>
<version>1.3.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<properties>
<hutool.version>5.8.36</hutool.version>
</properties>
<artifactId>cutejava-domain</artifactId>
<name>模型模块</name>
<dependencies>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>cutejava-common</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
</project>
-37
View File
@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cutejava</artifactId>
<groupId>cn.odboy</groupId>
<version>1.3.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cutejava-job</artifactId>
<name>定时任务模块</name>
<dependencies>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>cutejava-tools</artifactId>
<version>1.3.1</version>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.10.1</version>
</dependency>
</dependencies>
</project>
-28
View File
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cutejava</artifactId>
<groupId>cn.odboy</groupId>
<version>1.3.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cutejava-pipline</artifactId>
<name>流水线模块</name>
<dependencies>
<!-- 工具包 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>cutejava-domain</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
</project>
-6
View File
@@ -17,12 +17,6 @@
<artifactId>cutejava-system</artifactId> <artifactId>cutejava-system</artifactId>
<version>1.3.1</version> <version>1.3.1</version>
</dependency> </dependency>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>cutejava-pipline</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies> </dependencies>
<!-- 打包 --> <!-- 打包 -->
@@ -1,7 +1,7 @@
package cn.odboy; package cn.odboy;
import cn.odboy.mybatis.util.CmdGenHelper; import cn.odboy.core.framework.mybatisplus.util.CmdGenHelper;
import java.util.List; import java.util.List;
/** /**
@@ -1,6 +1,6 @@
package cn.odboy.monitor; package cn.odboy.monitor;
import cn.odboy.application.system.service.DictService; import cn.odboy.core.service.system.DictService;
import cn.odboy.monitor.service.HealthCheckPointService; import cn.odboy.monitor.service.HealthCheckPointService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@@ -154,7 +154,7 @@ mybatis-plus:
id-type: auto id-type: auto
# 表名是否使用驼峰转下划线命名,只对表名生效 # 表名是否使用驼峰转下划线命名,只对表名生效
table-underline: true table-underline: true
# 是否控制台 print mybatis-plus 的 LOGO # 是否控制台 print mybatisplus-plus 的 LOGO
banner: true banner: true
app: app:
@@ -154,7 +154,7 @@ mybatis-plus:
id-type: auto id-type: auto
# 表名是否使用驼峰转下划线命名,只对表名生效 # 表名是否使用驼峰转下划线命名,只对表名生效
table-underline: true table-underline: true
# 是否控制台 print mybatis-plus 的 LOGO # 是否控制台 print mybatisplus-plus 的 LOGO
banner: true banner: true
app: app:
@@ -1,7 +1,7 @@
# 应用的拦截模块 # 应用的拦截模块
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印 # 自定义日志打印
logMessageFormat=cn.odboy.mybatis.context.CustomP6SpyLogger logMessageFormat=cn.odboy.core.framework.mybatisplus.context.CustomP6SpyLogger
# 日志输出到控制台 # 日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 日期格式 # 日期格式
@@ -1,6 +1,7 @@
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.context.PipelineManage; import cn.odboy.core.framework.flow.context.PipelineManager;
import cn.odboy.core.framework.flow.context.PipelineProcessManager;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@@ -8,11 +9,18 @@ import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class PipelineTests { public class PipelineTests {
@Autowired @Autowired
private PipelineManage pipelineManage; private PipelineManager pipelineManager;
@Autowired
private PipelineProcessManager pipelineProcessManager;
@Test @Test
public void contextLoads() { public void testPipelineManager() {
pipelineManage.execute(); pipelineManager.test();
}
@Test
public void testPipelineProcessManager() {
pipelineProcessManager.test();
} }
} }
+33 -1
View File
@@ -15,12 +15,14 @@
<jjwt.version>0.11.5</jjwt.version> <jjwt.version>0.11.5</jjwt.version>
<!-- oshi监控需要指定jna版本, 问题详见 https://github.com/oshi/oshi/issues/1040 --> <!-- oshi监控需要指定jna版本, 问题详见 https://github.com/oshi/oshi/issues/1040 -->
<jna.version>5.8.0</jna.version> <jna.version>5.8.0</jna.version>
<mail.version>1.4.7</mail.version>
<qiniu.version>7.9.3</qiniu.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>cn.odboy</groupId> <groupId>cn.odboy</groupId>
<artifactId>cutejava-job</artifactId> <artifactId>cutejava-common</artifactId>
<version>1.3.1</version> <version>1.3.1</version>
</dependency> </dependency>
@@ -59,5 +61,35 @@
<artifactId>oshi-core</artifactId> <artifactId>oshi-core</artifactId>
<version>6.6.5</version> <version>6.6.5</version>
</dependency> </dependency>
<!--邮件依赖-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>${mail.version}</version>
</dependency>
<!--七牛云存储-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>${qiniu.version}</version>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.10.1</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
@@ -1,4 +1,4 @@
package cn.odboy.constant; package cn.odboy.core.constant;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -1,4 +1,4 @@
package cn.odboy.constant; package cn.odboy.core.constant;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -1,4 +1,4 @@
package cn.odboy.constant; package cn.odboy.core.constant;
/** /**
* 验证码配置枚举 * 验证码配置枚举
@@ -1,4 +1,4 @@
package cn.odboy.constant; package cn.odboy.core.constant;
/** /**
* 关于缓存的Key集合 * 关于缓存的Key集合
@@ -1,4 +1,4 @@
package cn.odboy.constant; package cn.odboy.core.constant;
public interface TransferProtocolConst { public interface TransferProtocolConst {
String PREFIX_HTTP = "http://"; String PREFIX_HTTP = "http://";
@@ -1,13 +1,13 @@
package cn.odboy.application.job.rest; package cn.odboy.core.controller.job;
import cn.odboy.application.job.service.QuartzJobService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.context.SpringBeanHolder; import cn.odboy.context.SpringBeanHolder;
import cn.odboy.core.service.job.dto.QueryQuartzJobRequest;
import cn.odboy.core.service.job.dto.UpdateQuartzJobRequest;
import cn.odboy.core.dal.dataobject.job.QuartzJob;
import cn.odboy.core.dal.dataobject.job.QuartzLog;
import cn.odboy.core.service.job.QuartzJobService;
import cn.odboy.exception.BadRequestException; 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.QueryQuartzJobRequest;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,20 +1,20 @@
package cn.odboy.application.core.rest; package cn.odboy.core.controller.system;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.odboy.annotation.AnonymousPostMapping; import cn.odboy.annotation.AnonymousPostMapping;
import cn.odboy.constant.LoginCodeEnum; import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.application.core.context.TokenProvider; import cn.odboy.core.constant.LoginCodeEnum;
import cn.odboy.application.core.service.impl.UserDetailsServiceImpl;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.constant.SystemRedisKey; import cn.odboy.core.constant.SystemRedisKey;
import cn.odboy.config.AppProperties; import cn.odboy.core.framework.permission.util.SecurityHelper;
import cn.odboy.context.SecurityHelper; import cn.odboy.core.service.system.dto.UserJwtVo;
import cn.odboy.core.service.system.dto.UserLoginRequest;
import cn.odboy.core.dal.dataobject.system.UserInfoResponse;
import cn.odboy.core.framework.permission.TokenProvider;
import cn.odboy.core.service.system.impl.UserDetailsServiceImpl;
import cn.odboy.core.service.system.impl.UserOnlineServiceImpl;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.model.system.model.UserJwtVo;
import cn.odboy.model.system.request.UserLoginRequest;
import cn.odboy.model.system.response.UserInfoResponse;
import cn.odboy.redis.RedisHelper; import cn.odboy.redis.RedisHelper;
import cn.odboy.util.RsaEncryptUtil; import cn.odboy.util.RsaEncryptUtil;
import cn.odboy.util.StringUtil; import cn.odboy.util.StringUtil;
@@ -1,8 +1,8 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.tools.service.CaptchaService; import cn.odboy.core.constant.CaptchaBizEnum;
import cn.odboy.application.tools.service.EmailService; import cn.odboy.core.service.tools.CaptchaService;
import cn.odboy.constant.CaptchaBizEnum; import cn.odboy.core.service.tools.EmailService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -1,10 +1,10 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.system.service.DeptService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.model.system.domain.Dept; import cn.odboy.core.service.system.dto.CreateDeptRequest;
import cn.odboy.model.system.request.CreateDeptRequest; import cn.odboy.core.service.system.dto.QueryDeptRequest;
import cn.odboy.model.system.request.QueryDeptRequest; import cn.odboy.core.dal.dataobject.system.Dept;
import cn.odboy.core.service.system.DeptService;
import cn.odboy.util.PageUtil; import cn.odboy.util.PageUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,10 +1,10 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.system.service.DictService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.model.system.domain.Dict; import cn.odboy.core.service.system.dto.CreateDictRequest;
import cn.odboy.model.system.request.CreateDictRequest; import cn.odboy.core.service.system.dto.QueryDictRequest;
import cn.odboy.model.system.request.QueryDictRequest; import cn.odboy.core.dal.dataobject.system.Dict;
import cn.odboy.core.service.system.DictService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,10 +1,10 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.system.service.DictDetailService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.model.system.domain.DictDetail; import cn.odboy.core.service.system.dto.CreateDictDetailRequest;
import cn.odboy.model.system.request.CreateDictDetailRequest; import cn.odboy.core.service.system.dto.QueryDictDetailRequest;
import cn.odboy.model.system.request.QueryDictDetailRequest; import cn.odboy.core.dal.dataobject.system.DictDetail;
import cn.odboy.core.service.system.DictDetailService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,10 +1,10 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.system.service.JobService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.model.system.domain.Job; import cn.odboy.core.service.system.dto.CreateJobRequest;
import cn.odboy.model.system.request.CreateJobRequest; import cn.odboy.core.service.system.dto.QueryJobRequest;
import cn.odboy.model.system.request.QueryJobRequest; import cn.odboy.core.dal.dataobject.system.Job;
import cn.odboy.core.service.system.JobService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,13 +1,13 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.odboy.application.system.service.MenuService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.context.SecurityHelper; import cn.odboy.core.framework.permission.util.SecurityHelper;
import cn.odboy.core.service.system.dto.QueryMenuRequest;
import cn.odboy.core.dal.dataobject.system.Menu;
import cn.odboy.core.dal.dataobject.system.MenuResponse;
import cn.odboy.core.service.system.MenuService;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.model.system.domain.Menu;
import cn.odboy.model.system.request.QueryMenuRequest;
import cn.odboy.model.system.response.MenuResponse;
import cn.odboy.util.PageUtil; import cn.odboy.util.PageUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,6 +1,6 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.system.service.MonitorService; import cn.odboy.core.service.system.MonitorService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -1,8 +1,8 @@
package cn.odboy.application.core.rest; package cn.odboy.core.controller.system;
import cn.odboy.application.core.service.UserOnlineService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.model.system.model.UserOnlineVo; import cn.odboy.core.service.system.dto.UserOnlineVo;
import cn.odboy.core.service.system.UserOnlineService;
import cn.odboy.util.DesEncryptUtil; import cn.odboy.util.DesEncryptUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,13 +1,13 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.odboy.application.system.service.RoleService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.context.SecurityHelper; import cn.odboy.core.framework.permission.util.SecurityHelper;
import cn.odboy.core.service.system.dto.CreateRoleRequest;
import cn.odboy.core.service.system.dto.QueryRoleRequest;
import cn.odboy.core.dal.dataobject.system.Role;
import cn.odboy.core.service.system.RoleService;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.model.system.domain.Role;
import cn.odboy.model.system.request.CreateRoleRequest;
import cn.odboy.model.system.request.QueryRoleRequest;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,22 +1,22 @@
package cn.odboy.application.system.rest; package cn.odboy.core.controller.system;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.odboy.application.system.service.DataService;
import cn.odboy.application.system.service.DeptService;
import cn.odboy.application.system.service.RoleService;
import cn.odboy.application.system.service.UserService;
import cn.odboy.application.tools.service.CaptchaService;
import cn.odboy.base.MyMetaOption; import cn.odboy.base.MyMetaOption;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.config.AppProperties; import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.constant.CaptchaBizEnum; import cn.odboy.core.constant.CaptchaBizEnum;
import cn.odboy.context.SecurityHelper; import cn.odboy.core.framework.permission.util.SecurityHelper;
import cn.odboy.core.service.system.dto.QueryUserRequest;
import cn.odboy.core.dal.dataobject.system.Dept;
import cn.odboy.core.dal.dataobject.system.Role;
import cn.odboy.core.dal.dataobject.system.UpdateUserPasswordResponse;
import cn.odboy.core.dal.dataobject.system.User;
import cn.odboy.core.service.system.DataService;
import cn.odboy.core.service.system.DeptService;
import cn.odboy.core.service.system.RoleService;
import cn.odboy.core.service.system.UserService;
import cn.odboy.core.service.tools.CaptchaService;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.model.system.domain.Dept;
import cn.odboy.model.system.domain.Role;
import cn.odboy.model.system.domain.User;
import cn.odboy.model.system.request.QueryUserRequest;
import cn.odboy.model.system.response.UpdateUserPasswordResponse;
import cn.odboy.util.PageUtil; import cn.odboy.util.PageUtil;
import cn.odboy.util.RsaEncryptUtil; import cn.odboy.util.RsaEncryptUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -1,8 +1,8 @@
package cn.odboy.application.tools.rest; package cn.odboy.core.controller.tools;
import cn.odboy.application.tools.service.EmailService; import cn.odboy.core.service.tools.dto.SendEmailRequest;
import cn.odboy.model.tools.domain.EmailConfig; import cn.odboy.core.dal.dataobject.tools.EmailConfig;
import cn.odboy.model.tools.request.SendEmailRequest; import cn.odboy.core.service.tools.EmailService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -1,11 +1,11 @@
package cn.odboy.application.tools.rest; package cn.odboy.core.controller.tools;
import cn.odboy.application.tools.service.LocalStorageService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.constant.FileTypeEnum; import cn.odboy.constant.FileTypeEnum;
import cn.odboy.core.service.tools.dto.QueryLocalStorageRequest;
import cn.odboy.core.dal.dataobject.tools.LocalStorage;
import cn.odboy.core.service.tools.LocalStorageService;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.model.tools.domain.LocalStorage;
import cn.odboy.model.tools.request.QueryLocalStorageRequest;
import cn.odboy.util.FileUtil; import cn.odboy.util.FileUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@@ -1,11 +1,11 @@
package cn.odboy.application.tools.rest; package cn.odboy.core.controller.tools;
import cn.odboy.application.tools.service.QiniuConfigService;
import cn.odboy.application.tools.service.QiniuContentService;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.model.tools.domain.QiniuConfig; import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
import cn.odboy.model.tools.domain.QiniuContent; import cn.odboy.core.dal.dataobject.tools.QiniuConfig;
import cn.odboy.model.tools.request.QueryQiniuRequest; import cn.odboy.core.dal.dataobject.tools.QiniuContent;
import cn.odboy.core.service.tools.QiniuConfigService;
import cn.odboy.core.service.tools.QiniuContentService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -1,4 +1,4 @@
package cn.odboy.model.job.domain; package cn.odboy.core.dal.dataobject.job;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.FieldStrategy;
@@ -1,4 +1,4 @@
package cn.odboy.model.job.domain; package cn.odboy.core.dal.dataobject.job;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.annotation.JSONField;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.FieldStrategy;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.annotation.JSONField;
@@ -1,7 +1,7 @@
package cn.odboy.model.system.response; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import cn.odboy.model.system.model.MenuMetaVo; import cn.odboy.core.service.system.dto.MenuMetaVo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -1,7 +1,7 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import cn.odboy.constant.DataScopeEnum; import cn.odboy.core.constant.DataScopeEnum;
import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.response; package cn.odboy.core.dal.dataobject.system;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.odboy.model.system.domain; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
@@ -1,8 +1,8 @@
package cn.odboy.model.system.response; package cn.odboy.core.dal.dataobject.system;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import cn.odboy.model.system.model.RoleCodeVo; import cn.odboy.core.service.system.dto.RoleCodeVo;
import cn.odboy.model.system.model.SimpleUserVo; import cn.odboy.core.service.system.dto.SimpleUserVo;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.odboy.model.tools.domain; package cn.odboy.core.dal.dataobject.tools;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -1,4 +1,4 @@
package cn.odboy.model.tools.domain; package cn.odboy.core.dal.dataobject.tools;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
@@ -1,4 +1,4 @@
package cn.odboy.model.tools.domain; package cn.odboy.core.dal.dataobject.tools;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -1,4 +1,4 @@
package cn.odboy.model.tools.domain; package cn.odboy.core.dal.dataobject.tools;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -1,7 +1,7 @@
package cn.odboy.application.job.mapper; package cn.odboy.core.dal.mysql.job;
import cn.odboy.model.job.domain.QuartzJob; import cn.odboy.core.service.job.dto.QueryQuartzJobRequest;
import cn.odboy.model.job.request.QueryQuartzJobRequest; import cn.odboy.core.dal.dataobject.job.QuartzJob;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,7 +1,7 @@
package cn.odboy.application.job.mapper; package cn.odboy.core.dal.mysql.job;
import cn.odboy.model.job.domain.QuartzLog; import cn.odboy.core.service.job.dto.QueryQuartzJobRequest;
import cn.odboy.model.job.request.QueryQuartzJobRequest; import cn.odboy.core.dal.dataobject.job.QuartzLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Dept; import cn.odboy.core.service.system.dto.QueryDeptRequest;
import cn.odboy.model.system.request.QueryDeptRequest; import cn.odboy.core.dal.dataobject.system.Dept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.DictDetail; import cn.odboy.core.service.system.dto.QueryDictDetailRequest;
import cn.odboy.model.system.request.QueryDictDetailRequest; import cn.odboy.core.dal.dataobject.system.DictDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Dict; import cn.odboy.core.service.system.dto.QueryDictRequest;
import cn.odboy.model.system.request.QueryDictRequest; import cn.odboy.core.dal.dataobject.system.Dict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Job; import cn.odboy.core.service.system.dto.QueryJobRequest;
import cn.odboy.model.system.request.QueryJobRequest; import cn.odboy.core.dal.dataobject.system.Job;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Menu; import cn.odboy.core.service.system.dto.QueryMenuRequest;
import cn.odboy.model.system.request.QueryMenuRequest; import cn.odboy.core.dal.dataobject.system.Menu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -1,6 +1,6 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Dept; import cn.odboy.core.dal.dataobject.system.Dept;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Set; import java.util.Set;
@@ -8,6 +8,8 @@ import java.util.Set;
@Mapper @Mapper
public interface RoleDeptMapper { public interface RoleDeptMapper {
void insertBatchWithRoleId(@Param("depts") Set<Dept> depts, @Param("roleId") Long roleId); void insertBatchWithRoleId(@Param("depts") Set<Dept> depts, @Param("roleId") Long roleId);
void deleteByRoleId(@Param("roleId") Long roleId); void deleteByRoleId(@Param("roleId") Long roleId);
void deleteByRoleIds(@Param("roleIds") Set<Long> roleIds); void deleteByRoleIds(@Param("roleIds") Set<Long> roleIds);
} }
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Role; import cn.odboy.core.service.system.dto.QueryRoleRequest;
import cn.odboy.model.system.request.QueryRoleRequest; import cn.odboy.core.dal.dataobject.system.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -1,6 +1,6 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Menu; import cn.odboy.core.dal.dataobject.system.Menu;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Set; import java.util.Set;
@@ -9,6 +9,7 @@ import java.util.Set;
@Mapper @Mapper
public interface RoleMenuMapper { public interface RoleMenuMapper {
void insertBatchWithRoleId(@Param("menus") Set<Menu> menus, @Param("roleId") Long roleId); void insertBatchWithRoleId(@Param("menus") Set<Menu> menus, @Param("roleId") Long roleId);
void deleteByRoleId(@Param("roleId") Long roleId); void deleteByRoleId(@Param("roleId") Long roleId);
void deleteByRoleIds(@Param("roleIds") Set<Long> roleIds); void deleteByRoleIds(@Param("roleIds") Set<Long> roleIds);
@@ -1,6 +1,6 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Job; import cn.odboy.core.dal.dataobject.system.Job;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Set; import java.util.Set;
@@ -1,7 +1,7 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.User; import cn.odboy.core.service.system.dto.QueryUserRequest;
import cn.odboy.model.system.request.QueryUserRequest; import cn.odboy.core.dal.dataobject.system.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,6 +1,6 @@
package cn.odboy.application.system.mapper; package cn.odboy.core.dal.mysql.system;
import cn.odboy.model.system.domain.Role; import cn.odboy.core.dal.dataobject.system.Role;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Set; import java.util.Set;
@@ -1,6 +1,6 @@
package cn.odboy.application.tools.mapper; package cn.odboy.core.dal.mysql.tools;
import cn.odboy.model.tools.domain.EmailConfig; import cn.odboy.core.dal.dataobject.tools.EmailConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -1,7 +1,7 @@
package cn.odboy.application.tools.mapper; package cn.odboy.core.dal.mysql.tools;
import cn.odboy.model.tools.domain.LocalStorage; import cn.odboy.core.service.tools.dto.QueryLocalStorageRequest;
import cn.odboy.model.tools.request.QueryLocalStorageRequest; import cn.odboy.core.dal.dataobject.tools.LocalStorage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1,6 +1,6 @@
package cn.odboy.application.tools.mapper; package cn.odboy.core.dal.mysql.tools;
import cn.odboy.model.tools.domain.QiniuConfig; import cn.odboy.core.dal.dataobject.tools.QiniuConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -1,7 +1,7 @@
package cn.odboy.application.tools.mapper; package cn.odboy.core.dal.mysql.tools;
import cn.odboy.model.tools.domain.QiniuContent; import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
import cn.odboy.model.tools.request.QueryQiniuRequest; import cn.odboy.core.dal.dataobject.tools.QiniuContent;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,5 +12,6 @@ import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface QiniuContentMapper extends BaseMapper<QiniuContent> { public interface QiniuContentMapper extends BaseMapper<QiniuContent> {
QiniuContent getQiniuContentByName(@Param("name") String name); QiniuContent getQiniuContentByName(@Param("name") String name);
IPage<QiniuContent> queryQiniuContentPageByArgs(@Param("criteria") QueryQiniuRequest criteria, Page<Object> page); IPage<QiniuContent> queryQiniuContentPageByArgs(@Param("criteria") QueryQiniuRequest criteria, Page<Object> page);
} }
@@ -1,4 +1,4 @@
package cn.odboy.server; package cn.odboy.core.framework.doc;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.util.AnonTagUtil; import cn.odboy.util.AnonTagUtil;
@@ -1,11 +1,12 @@
package cn.odboy.context; package cn.odboy.core.framework.flow.context;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.odboy.context.SpringBeanHolder;
import cn.odboy.core.framework.flow.dto.PipelineNodeVo;
import cn.odboy.core.framework.flow.handler.SerialPipelineNodeHandler;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.handler.SerialPipelineNodeHandler;
import cn.odboy.model.pipeline.model.PipelineNodeVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
@@ -18,30 +19,42 @@ import java.util.List;
*/ */
@Slf4j @Slf4j
@Component @Component
public class PipelineManage { public class PipelineManager {
private static final PipelineTaskPool pipelineTaskPool = new PipelineTaskPool("DefaultPipelineTaskPool"); private static final PipelineTaskPool pipelineTaskPool = new PipelineTaskPool("DefaultPipelineTaskPool");
public void execute() { public void test() {
String pipelineId = IdUtil.objectId(); String pipelineId = IdUtil.objectId();
pipelineTaskPool.submitTask(pipelineId, () -> {
List<PipelineNodeVo> pipelineNodeVos = initialize(); List<PipelineNodeVo> pipelineNodeVos = initialize();
execute(pipelineId, pipelineNodeVos);
ThreadUtil.safeSleep(5000);
pipelineTaskPool.stopTaskForcibly(pipelineId);
ThreadUtil.safeSleep(1000000);
}
public void execute(String pipelineId, List<PipelineNodeVo> pipelineNodeVos) {
pipelineTaskPool.submitTask(pipelineId, () -> {
for (PipelineNodeVo pipelineNodeVo : pipelineNodeVos) { for (PipelineNodeVo pipelineNodeVo : pipelineNodeVos) {
executePipeline(pipelineId, pipelineNodeVo); executePipeline(pipelineId, pipelineNodeVo);
while ("running".equals(pipelineNodeVo.getExecuteStatus())) { // 要么成功,要么失败
boolean interrupted = Thread.currentThread().isInterrupted();
while (!interrupted && "running".equals(pipelineNodeVo.getExecuteStatus())) {
log.info("流水线执行中..."); log.info("流水线执行中...");
ThreadUtil.safeSleep(2000); ThreadUtil.safeSleep(2000);
} }
if (interrupted) {
log.info("流水线被中断...");
return;
}
} }
}); });
ThreadUtil.safeSleep(1000000);
} }
private void executePipeline(String pipelineId, PipelineNodeVo pipelineNodeVo) { private void executePipeline(String pipelineId, PipelineNodeVo pipelineNodeVo) {
String pipelineServiceName = String.format("pipeline:%s", pipelineNodeVo.getBizCode()); String pipelineServiceName = String.format("pipeline:%s", pipelineNodeVo.getBizCode());
SerialPipelineNodeHandler<Object, Object> pipelineNodeHandler = SpringBeanHolder.getBean(pipelineServiceName); SerialPipelineNodeHandler<Object, Object> pipelineNodeHandler = SpringBeanHolder.getBean(pipelineServiceName);
try { try {
Object o = pipelineNodeHandler.doProcess(pipelineId, null); Object o = pipelineNodeHandler.doProcess(pipelineId, pipelineNodeVo);
int i = 1 / 0;
log.info("运行结果, {}", o); log.info("运行结果, {}", o);
} catch (BadRequestException e) { } catch (BadRequestException e) {
log.error("运行流水线异常", e); log.error("运行流水线异常", e);
@@ -70,10 +83,10 @@ public class PipelineManage {
pipelineNodeVos.add(createReleaseBranchNodeVo); pipelineNodeVos.add(createReleaseBranchNodeVo);
PipelineNodeVo createReleaseBranchNodeVo1 = new PipelineNodeVo(); PipelineNodeVo createReleaseBranchNodeVo1 = new PipelineNodeVo();
createReleaseBranchNodeVo1.setName("初始化1"); createReleaseBranchNodeVo1.setName("代码构建");
createReleaseBranchNodeVo1.setClick(true); createReleaseBranchNodeVo1.setClick(true);
createReleaseBranchNodeVo1.setButtonList(null); createReleaseBranchNodeVo1.setButtonList(null);
createReleaseBranchNodeVo1.setBizCode("create_release_branch"); createReleaseBranchNodeVo1.setBizCode("build_code");
createReleaseBranchNodeVo1.setStartTimeMillis(DateTime.now().getTime()); createReleaseBranchNodeVo1.setStartTimeMillis(DateTime.now().getTime());
createReleaseBranchNodeVo1.setDurationMillis(0L); createReleaseBranchNodeVo1.setDurationMillis(0L);
createReleaseBranchNodeVo1.setExecuteStatus("running"); createReleaseBranchNodeVo1.setExecuteStatus("running");
@@ -0,0 +1,211 @@
package cn.odboy.core.framework.flow.context;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.IdUtil;
import cn.odboy.context.SpringBeanHolder;
import cn.odboy.core.framework.flow.dto.PipelineNodeVo;
import cn.odboy.core.framework.flow.handler.SerialPipelineNodeHandler;
import cn.odboy.exception.BadRequestException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* 流水线进程管理工具
*
* @author odboy
*/
@Slf4j
@Component
public class PipelineProcessManager {
// 使用ConcurrentHashMap保证线程安全
private final Map<String, Thread> runningTasks = new ConcurrentHashMap<>();
// 使用AtomicBoolean作为停止标志,保证原子性操作
private final Map<String, AtomicBoolean> stopFlags = new ConcurrentHashMap<>();
// 常量定义
private static final String PIPELINE_THREAD_PREFIX = "pipeline-";
private static final String PIPELINE_SERVICE_PREFIX = "pipeline:";
private static final String RUNNING_STATUS = "running";
private static final long DEFAULT_SLEEP_MS = 2000L;
/**
* 测试方法
*/
public void test() {
String pipelineId = IdUtil.objectId();
List<PipelineNodeVo> pipelineNodes = initialize();
execute(pipelineId, pipelineNodes);
ThreadUtil.safeSleep(5000);
stopForcibly(pipelineId);
ThreadUtil.safeSleep(1000000);
}
/**
* 执行流水线
*
* @param pipelineId 流水线ID
* @param pipelineNodes 流水线节点列表
*/
public void execute(String pipelineId, List<PipelineNodeVo> pipelineNodes) {
if (runningTasks.containsKey(pipelineId)) {
log.warn("Pipeline [{}] is already running", pipelineId);
return;
}
stopFlags.put(pipelineId, new AtomicBoolean(false));
Thread pipelineThread = new Thread(() -> processPipeline(pipelineId, pipelineNodes));
pipelineThread.setDaemon(true);
pipelineThread.setName(PIPELINE_THREAD_PREFIX + pipelineId);
runningTasks.put(pipelineId, pipelineThread);
pipelineThread.start();
}
/**
* 处理流水线任务
*/
private void processPipeline(String pipelineId, List<PipelineNodeVo> pipelineNodes) {
try {
for (PipelineNodeVo node : pipelineNodes) {
if (shouldStop(pipelineId)) {
log.info("Pipeline [{}] was interrupted", pipelineId);
return;
}
executePipelineNode(pipelineId, node);
while (!shouldStop(pipelineId) && RUNNING_STATUS.equals(node.getExecuteStatus())) {
log.debug("Pipeline [{}] is running...", pipelineId);
sleepInterruptibly(DEFAULT_SLEEP_MS, pipelineId);
}
if (shouldStop(pipelineId)) {
log.info("Pipeline [{}] was interrupted", pipelineId);
return;
}
}
} catch (Exception e) {
log.error("流水线异常", e);
} finally {
cleanup(pipelineId);
}
}
/**
* 检查是否应该停止
*/
private boolean shouldStop(String pipelineId) {
return Optional.ofNullable(stopFlags.get(pipelineId))
.map(AtomicBoolean::get)
.orElse(true);
}
/**
* 可中断的睡眠
*/
private void sleepInterruptibly(long millis, String pipelineId) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
log.info("Pipeline [{}] sleep interrupted", pipelineId);
Thread.currentThread().interrupt();
}
}
/**
* 清理资源
*/
private void cleanup(String pipelineId) {
runningTasks.remove(pipelineId);
stopFlags.remove(pipelineId);
log.info("Pipeline [{}] resources cleaned up", pipelineId);
}
/**
* 检查流水线是否在运行
*/
public boolean isRunning(String pipelineId) {
return Optional.ofNullable(runningTasks.get(pipelineId))
.map(Thread::isAlive)
.orElse(false);
}
/**
* 执行单个流水线节点
*/
private void executePipelineNode(String pipelineId, PipelineNodeVo node) {
String serviceName = PIPELINE_SERVICE_PREFIX + node.getBizCode();
SerialPipelineNodeHandler<Object, Object> handler = SpringBeanHolder.getBean(serviceName);
try {
Object result = handler.doProcess(pipelineId, node);
log.info("Pipeline [{}] node [{}] executed, result: {}", pipelineId, node.getName(), result);
} catch (BadRequestException e) {
handlePipelineError(pipelineId, "Business error in pipeline", e);
} catch (Exception e) {
handlePipelineError(pipelineId, "Unexpected error in pipeline", e);
}
}
/**
* 处理流水线错误
*/
private void handlePipelineError(String pipelineId, String message, Exception e) {
log.error(message, e);
if (isRunning(pipelineId)) {
stopForcibly(pipelineId);
}
}
/**
* 强制停止流水线
*/
public void stopForcibly(String pipelineId) {
Optional.ofNullable(stopFlags.get(pipelineId))
.ifPresent(flag -> flag.set(true));
Optional.ofNullable(runningTasks.get(pipelineId))
.ifPresent(thread -> {
try {
thread.interrupt();
} catch (SecurityException e) {
log.error("Failed to interrupt pipeline [{}]", pipelineId, e);
}
});
}
/**
* 初始化测试流水线节点
*/
public List<PipelineNodeVo> initialize() {
List<PipelineNodeVo> nodes = new ArrayList<>();
nodes.add(createNode("初始化", "create_release_branch"));
nodes.add(createNode("代码构建", "build_code"));
return nodes;
}
/**
* 创建流水线节点
*/
private PipelineNodeVo createNode(String name, String bizCode) {
PipelineNodeVo node = new PipelineNodeVo();
node.setName(name);
node.setClick(true);
node.setButtonList(null);
node.setBizCode(bizCode);
node.setStartTimeMillis(DateTime.now().getTime());
node.setDurationMillis(0L);
node.setExecuteStatus(RUNNING_STATUS);
node.setResultDesc(null);
return node;
}
}
@@ -1,4 +1,4 @@
package cn.odboy.context; package cn.odboy.core.framework.flow.context;
import java.util.Map; import java.util.Map;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
@@ -216,9 +216,22 @@ public class PipelineTaskPool {
if (running.compareAndSet(true, false)) { if (running.compareAndSet(true, false)) {
if (currentThread != null) { if (currentThread != null) {
// currentThread.interrupt();
// 暴力停止线程 // 暴力停止线程
currentThread.stop(); // currentThread.stop();
try {
/**
* Thread.interrupt只支持终止线程的阻塞状态(wait、join、sleep),
* 在阻塞出抛出InterruptedException异常,但是并不会终止运行的线程本身;
* 所以需要注意,此处彻底销毁本线程,需要通过共享变量方式;
*/
currentThread.interrupt();
currentThread.join();
} catch (InterruptedException e) {
currentThread.interrupt();
} catch (Exception e) {
// ignore
// currentThread.stop();
}
} }
return true; return true;
} }
@@ -1,4 +1,4 @@
package cn.odboy.model.pipeline.model; package cn.odboy.core.framework.flow.dto;
import cn.odboy.base.MyObject; import cn.odboy.base.MyObject;
import lombok.Data; import lombok.Data;
@@ -1,8 +1,8 @@
package cn.odboy.handler; package cn.odboy.core.framework.flow.handler;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.odboy.exception.BadRequestException;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import io.undertow.util.BadRequestException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@@ -71,6 +71,14 @@ public abstract class SerialPipelineNodeHandler<I, T> {
*/ */
protected abstract boolean isLocked(String pipelineId, I inputModel); protected abstract boolean isLocked(String pipelineId, I inputModel);
/**
* 当进程被中断时
*
* @param pipelineId 流水线id
* @param inputModel 输入参数
*/
protected abstract void onProcessInterrupted(String pipelineId, I inputModel);
/** /**
* 业务处理 * 业务处理
* *
@@ -80,17 +88,27 @@ public abstract class SerialPipelineNodeHandler<I, T> {
*/ */
public T doProcess(String pipelineId, I inputModel) throws BadRequestException { public T doProcess(String pipelineId, I inputModel) throws BadRequestException {
try { try {
if (Thread.currentThread().isInterrupted()) {
onProcessInterrupted(pipelineId, inputModel);
throw new InterruptedException("业务被中断");
}
preProcess(pipelineId, inputModel); preProcess(pipelineId, inputModel);
log.info("preProcess,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel)); log.info("preProcess,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel));
} catch (Exception e) { } catch (Exception e) {
preProcessException(pipelineId, inputModel, e); preProcessException(pipelineId, inputModel, e);
log.error("preProcessException,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel), e); log.error("preProcessException,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel), e);
throw new BadRequestException(e); throw new BadRequestException(e.getMessage());
}
if (Thread.currentThread().isInterrupted()) {
throw new BadRequestException("业务被中断");
} }
while (isLocked(pipelineId, inputModel)) { while (isLocked(pipelineId, inputModel)) {
ThreadUtil.safeSleep(2000); ThreadUtil.safeSleep(2000);
} }
try { try {
if (Thread.currentThread().isInterrupted()) {
throw new BadRequestException("业务被中断");
}
T processResult = process(pipelineId, inputModel); T processResult = process(pipelineId, inputModel);
log.info("process,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel)); log.info("process,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel));
try { try {
@@ -100,12 +118,12 @@ public abstract class SerialPipelineNodeHandler<I, T> {
} catch (Exception e) { } catch (Exception e) {
postProcessException(pipelineId, inputModel, processResult, e); postProcessException(pipelineId, inputModel, processResult, e);
log.error("postProcessException,pipelineId={},inputModel={},processResult={}", pipelineId, JSON.toJSONString(inputModel), JSON.toJSONString(processResult)); log.error("postProcessException,pipelineId={},inputModel={},processResult={}", pipelineId, JSON.toJSONString(inputModel), JSON.toJSONString(processResult));
throw new BadRequestException(e); throw new BadRequestException(e.getMessage());
} }
} catch (Exception e) { } catch (Exception e) {
processException(pipelineId, inputModel, e); processException(pipelineId, inputModel, e);
log.error("processException,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel), e); log.error("processException,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel), e);
throw new BadRequestException(e); throw new BadRequestException(e.getMessage());
} }
} }
} }
@@ -1,18 +1,18 @@
package cn.odboy.service; package cn.odboy.core.framework.flow.handler.impl;
import cn.odboy.handler.SerialPipelineNodeHandler; import cn.odboy.core.framework.flow.handler.SerialPipelineNodeHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Slf4j
@Service("pipeline:create_release_branch") @Service("pipeline:create_release_branch")
public class PipelineAppCreateReleaseBranchBiz extends SerialPipelineNodeHandler<Object, Object> { public class PipelineAppCreateReleaseBranchHandlerServiceImpl extends SerialPipelineNodeHandler<Object, Object> {
@Override @Override
public void preProcess(String pipelineId, Object inputModel) { public void preProcess(String pipelineId, Object inputModel) {
} }
@Override @Override
public void preProcessException(String pipelineId, Object inputModel, Exception e) { public void preProcessException(String pipelineId, Object inputModel, Exception e) {
} }
@Override @Override
@@ -22,21 +22,23 @@ public class PipelineAppCreateReleaseBranchBiz extends SerialPipelineNodeHandler
@Override @Override
public void processException(String pipelineId, Object inputModel, Exception e) { public void processException(String pipelineId, Object inputModel, Exception e) {
} }
@Override @Override
public void postProcess(String pipelineId, Object inputModel, Object processResult) { public void postProcess(String pipelineId, Object inputModel, Object processResult) {
} }
@Override @Override
public void postProcessException(String pipelineId, Object inputModel, Object processResult, Exception e) { public void postProcessException(String pipelineId, Object inputModel, Object processResult, Exception e) {
} }
@Override @Override
public boolean isLocked(String pipelineId, Object inputModel) { public boolean isLocked(String pipelineId, Object inputModel) {
return false; return false;
} }
@Override
protected void onProcessInterrupted(String pipelineId, Object inputModel) {
log.error("pipeline is stopping");
}
} }
@@ -1,6 +1,6 @@
package cn.odboy.mybatis.config; package cn.odboy.core.framework.mybatisplus.config;
import cn.odboy.mybatis.context.InsertBatchSqlInjector; import cn.odboy.core.framework.mybatisplus.context.InsertBatchSqlInjector;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
@@ -1,4 +1,4 @@
package cn.odboy.mybatis.config; package cn.odboy.core.framework.mybatisplus.config;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
@@ -1,4 +1,4 @@
package cn.odboy.mybatis.constant; package cn.odboy.core.framework.mybatisplus.constant;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -1,4 +1,4 @@
package cn.odboy.mybatis.constant; package cn.odboy.core.framework.mybatisplus.constant;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@@ -1,4 +1,4 @@
package cn.odboy.mybatis.constant; package cn.odboy.core.framework.mybatisplus.constant;
/** /**
* 动态查询 枚举 * 动态查询 枚举
@@ -1,4 +1,4 @@
package cn.odboy.mybatis.context; package cn.odboy.core.framework.mybatisplus.context;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy; import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.mybatis.context; package cn.odboy.core.framework.mybatisplus.context;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.AbstractMethod;
@@ -1,7 +1,7 @@
package cn.odboy.mybatis.context; package cn.odboy.core.framework.mybatisplus.context;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.odboy.context.SecurityHelper; import cn.odboy.core.framework.permission.util.SecurityHelper;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.mybatis.interfaces; package cn.odboy.core.framework.mybatisplus.interfaces;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.mybatis.interfaces; package cn.odboy.core.framework.mybatisplus.interfaces;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.mybatis.interfaces.impl; package cn.odboy.core.framework.mybatisplus.interfaces.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.base.PageResult; import cn.odboy.base.PageResult;
import cn.odboy.core.framework.mybatisplus.interfaces.EasyMapper;
import cn.odboy.core.framework.mybatisplus.util.MybatisHelper;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.mybatis.interfaces.EasyMapper;
import cn.odboy.mybatis.util.MybatisHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.mybatis.util; package cn.odboy.core.framework.mybatisplus.util;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.FastAutoGenerator;
@@ -1,11 +1,11 @@
package cn.odboy.mybatis.util; package cn.odboy.core.framework.mybatisplus.util;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.MyEntity; import cn.odboy.base.MyEntity;
import cn.odboy.core.framework.mybatisplus.constant.MpQuery;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.mybatis.constant.MpQuery;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -1,4 +1,4 @@
package cn.odboy.application.core.context; package cn.odboy.core.framework.permission;
import cn.odboy.exception.handler.ApiError; import cn.odboy.exception.handler.ApiError;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@@ -1,4 +1,4 @@
package cn.odboy.application.core.context; package cn.odboy.core.framework.permission;
import cn.odboy.exception.handler.ApiError; import cn.odboy.exception.handler.ApiError;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@@ -1,7 +1,7 @@
package cn.odboy.application.core.context; package cn.odboy.core.framework.permission;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
import cn.odboy.constant.RequestMethodEnum; import cn.odboy.constant.RequestMethodEnum;
import cn.odboy.core.service.system.impl.UserOnlineServiceImpl;
import cn.odboy.util.AnonTagUtil; import cn.odboy.util.AnonTagUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
@@ -1,6 +1,6 @@
package cn.odboy.application.core.context; package cn.odboy.core.framework.permission;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl; import cn.odboy.core.service.system.impl.UserOnlineServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -1,9 +1,9 @@
package cn.odboy.application.core.context; package cn.odboy.core.framework.permission;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.model.system.model.UserOnlineVo; import cn.odboy.core.service.system.dto.UserOnlineVo;
import cn.odboy.core.service.system.impl.UserOnlineServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
@@ -1,12 +1,12 @@
package cn.odboy.application.core.context; package cn.odboy.core.framework.permission;
import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.odboy.config.AppProperties; import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.constant.SystemRedisKey; import cn.odboy.core.constant.SystemRedisKey;
import cn.odboy.model.system.model.UserJwtVo; import cn.odboy.core.service.system.dto.UserJwtVo;
import cn.odboy.redis.RedisHelper; import cn.odboy.redis.RedisHelper;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.JwtBuilder;
@@ -1,5 +1,6 @@
package cn.odboy.context; package cn.odboy.core.framework.permission.config;
import cn.odboy.core.framework.permission.util.SecurityHelper;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
@@ -1,10 +1,11 @@
package cn.odboy.context; package cn.odboy.core.framework.permission.util;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.jwt.JWT; import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil; import cn.hutool.jwt.JWTUtil;
import cn.odboy.constant.DataScopeEnum;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.context.SpringBeanHolder;
import cn.odboy.core.constant.DataScopeEnum;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
@@ -1,11 +1,11 @@
package cn.odboy.config; package cn.odboy.core.framework.properties;
import cn.odboy.config.model.ContentRsaEncodeSettingModel; import cn.odboy.core.framework.properties.dto.ContentRsaEncodeSettingModel;
import cn.odboy.config.model.FileUploadSettingModel; import cn.odboy.core.framework.properties.dto.FileUploadSettingModel;
import cn.odboy.config.model.JwtAuthSettingModel; import cn.odboy.core.framework.properties.dto.JwtAuthSettingModel;
import cn.odboy.config.model.QuartzTaskThreadPoolSettingModel; import cn.odboy.core.framework.properties.dto.QuartzTaskThreadPoolSettingModel;
import cn.odboy.config.model.SwaggerApiDocSettingModel; import cn.odboy.core.framework.properties.dto.SwaggerApiDocSettingModel;
import cn.odboy.config.model.UserLoginSettingModel; import cn.odboy.core.framework.properties.dto.UserLoginSettingModel;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -1,6 +1,7 @@
package cn.odboy.config.model; package cn.odboy.core.framework.properties.dto;
import lombok.Data; import lombok.Data;
/** /**
* 密码加密传输,前端公钥加密,后端私钥解密 * 密码加密传输,前端公钥加密,后端私钥解密
*/ */
@@ -1,4 +1,4 @@
package cn.odboy.config.model; package cn.odboy.core.framework.properties.dto;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.odboy.config.model; package cn.odboy.core.framework.properties.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.odboy.config.model; package cn.odboy.core.framework.properties.dto;
import lombok.Data; import lombok.Data;
@@ -1,8 +1,8 @@
package cn.odboy.config.model; package cn.odboy.core.framework.properties.dto;
import lombok.Data; import lombok.Data;
/** /**
*
* @author odboy * @author odboy
* @date 2025-04-13 * @date 2025-04-13
*/ */
@@ -1,6 +1,6 @@
package cn.odboy.config.model; package cn.odboy.core.framework.properties.dto;
import cn.odboy.constant.LoginCodeEnum; import cn.odboy.core.constant.LoginCodeEnum;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.util.StringUtil; import cn.odboy.util.StringUtil;
import com.wf.captcha.ArithmeticCaptcha; import com.wf.captcha.ArithmeticCaptcha;

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