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 = {
"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>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>cutejava-pipline</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<!-- 打包 -->
@@ -1,7 +1,7 @@
package cn.odboy;
import cn.odboy.mybatis.util.CmdGenHelper;
import cn.odboy.core.framework.mybatisplus.util.CmdGenHelper;
import java.util.List;
/**
@@ -1,6 +1,6 @@
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -154,7 +154,7 @@ mybatis-plus:
id-type: auto
# 表名是否使用驼峰转下划线命名,只对表名生效
table-underline: true
# 是否控制台 print mybatis-plus 的 LOGO
# 是否控制台 print mybatisplus-plus 的 LOGO
banner: true
app:
@@ -154,7 +154,7 @@ mybatis-plus:
id-type: auto
# 表名是否使用驼峰转下划线命名,只对表名生效
table-underline: true
# 是否控制台 print mybatis-plus 的 LOGO
# 是否控制台 print mybatisplus-plus 的 LOGO
banner: true
app:
@@ -1,7 +1,7 @@
# 应用的拦截模块
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
# 日期格式
@@ -1,6 +1,7 @@
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@@ -8,11 +9,18 @@ import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class PipelineTests {
@Autowired
private PipelineManage pipelineManage;
private PipelineManager pipelineManager;
@Autowired
private PipelineProcessManager pipelineProcessManager;
@Test
public void contextLoads() {
pipelineManage.execute();
public void testPipelineManager() {
pipelineManager.test();
}
@Test
public void testPipelineProcessManager() {
pipelineProcessManager.test();
}
}
+33 -1
View File
@@ -15,12 +15,14 @@
<jjwt.version>0.11.5</jjwt.version>
<!-- oshi监控需要指定jna版本, 问题详见 https://github.com/oshi/oshi/issues/1040 -->
<jna.version>5.8.0</jna.version>
<mail.version>1.4.7</mail.version>
<qiniu.version>7.9.3</qiniu.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>cutejava-job</artifactId>
<artifactId>cutejava-common</artifactId>
<version>1.3.1</version>
</dependency>
@@ -59,5 +61,35 @@
<artifactId>oshi-core</artifactId>
<version>6.6.5</version>
</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>
</project>
@@ -1,4 +1,4 @@
package cn.odboy.constant;
package cn.odboy.core.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -1,4 +1,4 @@
package cn.odboy.constant;
package cn.odboy.core.constant;
import lombok.AllArgsConstructor;
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集合
@@ -1,4 +1,4 @@
package cn.odboy.constant;
package cn.odboy.core.constant;
public interface TransferProtocolConst {
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.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.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 io.swagger.annotations.Api;
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.util.IdUtil;
import cn.odboy.annotation.AnonymousPostMapping;
import cn.odboy.constant.LoginCodeEnum;
import cn.odboy.application.core.context.TokenProvider;
import cn.odboy.application.core.service.impl.UserDetailsServiceImpl;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.core.constant.LoginCodeEnum;
import cn.odboy.constant.SystemConst;
import cn.odboy.constant.SystemRedisKey;
import cn.odboy.config.AppProperties;
import cn.odboy.context.SecurityHelper;
import cn.odboy.core.constant.SystemRedisKey;
import cn.odboy.core.framework.permission.util.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.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.util.RsaEncryptUtil;
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.application.tools.service.EmailService;
import cn.odboy.constant.CaptchaBizEnum;
import cn.odboy.core.constant.CaptchaBizEnum;
import cn.odboy.core.service.tools.CaptchaService;
import cn.odboy.core.service.tools.EmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.model.system.domain.Dept;
import cn.odboy.model.system.request.CreateDeptRequest;
import cn.odboy.model.system.request.QueryDeptRequest;
import cn.odboy.core.service.system.dto.CreateDeptRequest;
import cn.odboy.core.service.system.dto.QueryDeptRequest;
import cn.odboy.core.dal.dataobject.system.Dept;
import cn.odboy.core.service.system.DeptService;
import cn.odboy.util.PageUtil;
import io.swagger.annotations.Api;
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.model.system.domain.Dict;
import cn.odboy.model.system.request.CreateDictRequest;
import cn.odboy.model.system.request.QueryDictRequest;
import cn.odboy.core.service.system.dto.CreateDictRequest;
import cn.odboy.core.service.system.dto.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 io.swagger.annotations.Api;
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.model.system.domain.DictDetail;
import cn.odboy.model.system.request.CreateDictDetailRequest;
import cn.odboy.model.system.request.QueryDictDetailRequest;
import cn.odboy.core.service.system.dto.CreateDictDetailRequest;
import cn.odboy.core.service.system.dto.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 io.swagger.annotations.Api;
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.model.system.domain.Job;
import cn.odboy.model.system.request.CreateJobRequest;
import cn.odboy.model.system.request.QueryJobRequest;
import cn.odboy.core.service.system.dto.CreateJobRequest;
import cn.odboy.core.service.system.dto.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 io.swagger.annotations.Api;
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.odboy.application.system.service.MenuService;
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.model.system.domain.Menu;
import cn.odboy.model.system.request.QueryMenuRequest;
import cn.odboy.model.system.response.MenuResponse;
import cn.odboy.util.PageUtil;
import io.swagger.annotations.Api;
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.ApiOperation;
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.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 io.swagger.annotations.Api;
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.odboy.application.system.service.RoleService;
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.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 io.swagger.annotations.Api;
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.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.PageResult;
import cn.odboy.config.AppProperties;
import cn.odboy.constant.CaptchaBizEnum;
import cn.odboy.context.SecurityHelper;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.core.constant.CaptchaBizEnum;
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.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.RsaEncryptUtil;
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.model.tools.domain.EmailConfig;
import cn.odboy.model.tools.request.SendEmailRequest;
import cn.odboy.core.service.tools.dto.SendEmailRequest;
import cn.odboy.core.dal.dataobject.tools.EmailConfig;
import cn.odboy.core.service.tools.EmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.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.model.tools.domain.LocalStorage;
import cn.odboy.model.tools.request.QueryLocalStorageRequest;
import cn.odboy.util.FileUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.model.tools.domain.QiniuConfig;
import cn.odboy.model.tools.domain.QiniuContent;
import cn.odboy.model.tools.request.QueryQiniuRequest;
import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
import cn.odboy.core.dal.dataobject.tools.QiniuConfig;
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 io.swagger.annotations.Api;
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 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 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 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 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 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 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 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.model.system.model.MenuMetaVo;
import cn.odboy.core.service.system.dto.MenuMetaVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
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.constant.DataScopeEnum;
import cn.odboy.core.constant.DataScopeEnum;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
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 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 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.model.system.model.RoleCodeVo;
import cn.odboy.model.system.model.SimpleUserVo;
import cn.odboy.core.service.system.dto.RoleCodeVo;
import cn.odboy.core.service.system.dto.SimpleUserVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
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 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.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 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 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.model.job.request.QueryQuartzJobRequest;
import cn.odboy.core.service.job.dto.QueryQuartzJobRequest;
import cn.odboy.core.dal.dataobject.job.QuartzJob;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.model.job.request.QueryQuartzJobRequest;
import cn.odboy.core.service.job.dto.QueryQuartzJobRequest;
import cn.odboy.core.dal.dataobject.job.QuartzLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.model.system.request.QueryDeptRequest;
import cn.odboy.core.service.system.dto.QueryDeptRequest;
import cn.odboy.core.dal.dataobject.system.Dept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
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.model.system.request.QueryDictDetailRequest;
import cn.odboy.core.service.system.dto.QueryDictDetailRequest;
import cn.odboy.core.dal.dataobject.system.DictDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.model.system.request.QueryDictRequest;
import cn.odboy.core.service.system.dto.QueryDictRequest;
import cn.odboy.core.dal.dataobject.system.Dict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.model.system.request.QueryJobRequest;
import cn.odboy.core.service.system.dto.QueryJobRequest;
import cn.odboy.core.dal.dataobject.system.Job;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.model.system.request.QueryMenuRequest;
import cn.odboy.core.service.system.dto.QueryMenuRequest;
import cn.odboy.core.dal.dataobject.system.Menu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
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.Param;
import java.util.Set;
@@ -8,6 +8,8 @@ import java.util.Set;
@Mapper
public interface RoleDeptMapper {
void insertBatchWithRoleId(@Param("depts") Set<Dept> depts, @Param("roleId") Long roleId);
void deleteByRoleId(@Param("roleId") Long roleId);
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.model.system.request.QueryRoleRequest;
import cn.odboy.core.service.system.dto.QueryRoleRequest;
import cn.odboy.core.dal.dataobject.system.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
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.Param;
import java.util.Set;
@@ -9,6 +9,7 @@ import java.util.Set;
@Mapper
public interface RoleMenuMapper {
void insertBatchWithRoleId(@Param("menus") Set<Menu> menus, @Param("roleId") Long roleId);
void deleteByRoleId(@Param("roleId") Long roleId);
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.Param;
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.model.system.request.QueryUserRequest;
import cn.odboy.core.service.system.dto.QueryUserRequest;
import cn.odboy.core.dal.dataobject.system.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.Param;
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 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.model.tools.request.QueryLocalStorageRequest;
import cn.odboy.core.service.tools.dto.QueryLocalStorageRequest;
import cn.odboy.core.dal.dataobject.tools.LocalStorage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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 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.model.tools.request.QueryQiniuRequest;
import cn.odboy.core.service.tools.dto.QueryQiniuRequest;
import cn.odboy.core.dal.dataobject.tools.QiniuContent;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,5 +12,6 @@ import org.apache.ibatis.annotations.Param;
@Mapper
public interface QiniuContentMapper extends BaseMapper<QiniuContent> {
QiniuContent getQiniuContentByName(@Param("name") String name);
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.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.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 cn.odboy.handler.SerialPipelineNodeHandler;
import cn.odboy.model.pipeline.model.PipelineNodeVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@@ -18,30 +19,42 @@ import java.util.List;
*/
@Slf4j
@Component
public class PipelineManage {
public class PipelineManager {
private static final PipelineTaskPool pipelineTaskPool = new PipelineTaskPool("DefaultPipelineTaskPool");
public void execute() {
public void test() {
String pipelineId = IdUtil.objectId();
pipelineTaskPool.submitTask(pipelineId, () -> {
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) {
executePipeline(pipelineId, pipelineNodeVo);
while ("running".equals(pipelineNodeVo.getExecuteStatus())) {
// 要么成功,要么失败
boolean interrupted = Thread.currentThread().isInterrupted();
while (!interrupted && "running".equals(pipelineNodeVo.getExecuteStatus())) {
log.info("流水线执行中...");
ThreadUtil.safeSleep(2000);
}
if (interrupted) {
log.info("流水线被中断...");
return;
}
}
});
ThreadUtil.safeSleep(1000000);
}
private void executePipeline(String pipelineId, PipelineNodeVo pipelineNodeVo) {
String pipelineServiceName = String.format("pipeline:%s", pipelineNodeVo.getBizCode());
SerialPipelineNodeHandler<Object, Object> pipelineNodeHandler = SpringBeanHolder.getBean(pipelineServiceName);
try {
Object o = pipelineNodeHandler.doProcess(pipelineId, null);
int i = 1 / 0;
Object o = pipelineNodeHandler.doProcess(pipelineId, pipelineNodeVo);
log.info("运行结果, {}", o);
} catch (BadRequestException e) {
log.error("运行流水线异常", e);
@@ -70,10 +83,10 @@ public class PipelineManage {
pipelineNodeVos.add(createReleaseBranchNodeVo);
PipelineNodeVo createReleaseBranchNodeVo1 = new PipelineNodeVo();
createReleaseBranchNodeVo1.setName("初始化1");
createReleaseBranchNodeVo1.setName("代码构建");
createReleaseBranchNodeVo1.setClick(true);
createReleaseBranchNodeVo1.setButtonList(null);
createReleaseBranchNodeVo1.setBizCode("create_release_branch");
createReleaseBranchNodeVo1.setBizCode("build_code");
createReleaseBranchNodeVo1.setStartTimeMillis(DateTime.now().getTime());
createReleaseBranchNodeVo1.setDurationMillis(0L);
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.concurrent.BlockingQueue;
@@ -216,9 +216,22 @@ public class PipelineTaskPool {
if (running.compareAndSet(true, false)) {
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;
}
@@ -1,4 +1,4 @@
package cn.odboy.model.pipeline.model;
package cn.odboy.core.framework.flow.dto;
import cn.odboy.base.MyObject;
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.odboy.exception.BadRequestException;
import com.alibaba.fastjson2.JSON;
import io.undertow.util.BadRequestException;
import lombok.extern.slf4j.Slf4j;
/**
@@ -71,6 +71,14 @@ public abstract class SerialPipelineNodeHandler<I, T> {
*/
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 {
try {
if (Thread.currentThread().isInterrupted()) {
onProcessInterrupted(pipelineId, inputModel);
throw new InterruptedException("业务被中断");
}
preProcess(pipelineId, inputModel);
log.info("preProcess,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel));
} catch (Exception e) {
preProcessException(pipelineId, 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)) {
ThreadUtil.safeSleep(2000);
}
try {
if (Thread.currentThread().isInterrupted()) {
throw new BadRequestException("业务被中断");
}
T processResult = process(pipelineId, inputModel);
log.info("process,pipelineId={},inputModel={}", pipelineId, JSON.toJSONString(inputModel));
try {
@@ -100,12 +118,12 @@ public abstract class SerialPipelineNodeHandler<I, T> {
} catch (Exception e) {
postProcessException(pipelineId, inputModel, processResult, e);
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) {
processException(pipelineId, 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;
@Slf4j
@Service("pipeline:create_release_branch")
public class PipelineAppCreateReleaseBranchBiz extends SerialPipelineNodeHandler<Object, Object> {
public class PipelineAppCreateReleaseBranchHandlerServiceImpl extends SerialPipelineNodeHandler<Object, Object> {
@Override
public void preProcess(String pipelineId, Object inputModel) {
}
@Override
public void preProcessException(String pipelineId, Object inputModel, Exception e) {
}
@Override
@@ -22,21 +22,23 @@ public class PipelineAppCreateReleaseBranchBiz extends SerialPipelineNodeHandler
@Override
public void processException(String pipelineId, Object inputModel, Exception e) {
}
@Override
public void postProcess(String pipelineId, Object inputModel, Object processResult) {
}
@Override
public void postProcessException(String pipelineId, Object inputModel, Object processResult, Exception e) {
}
@Override
public boolean isLocked(String pipelineId, Object inputModel) {
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.extension.plugins.MybatisPlusInterceptor;
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.properties.DruidStatProperties;
@@ -1,4 +1,4 @@
package cn.odboy.mybatis.constant;
package cn.odboy.core.framework.mybatisplus.constant;
import cn.odboy.exception.BadRequestException;
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.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 com.p6spy.engine.spy.appender.MessageFormattingStrategy;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* 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.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.odboy.context.SecurityHelper;
import cn.odboy.core.framework.permission.util.SecurityHelper;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* 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.collection.CollUtil;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.mybatis.interfaces;
package cn.odboy.core.framework.mybatisplus.interfaces;
import cn.odboy.base.PageResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* 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.collection.CollUtil;
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.mybatis.interfaces.EasyMapper;
import cn.odboy.mybatis.util.MybatisHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* 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.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.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.odboy.base.MyEntity;
import cn.odboy.core.framework.mybatisplus.constant.MpQuery;
import cn.odboy.exception.BadRequestException;
import cn.odboy.mybatis.constant.MpQuery;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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 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 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.core.service.system.impl.UserOnlineServiceImpl;
import cn.odboy.util.AnonTagUtil;
import lombok.RequiredArgsConstructor;
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 org.springframework.security.config.annotation.SecurityConfigurerAdapter;
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.odboy.application.core.service.impl.UserOnlineServiceImpl;
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 org.springframework.security.core.Authentication;
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.DateUtil;
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.SystemRedisKey;
import cn.odboy.model.system.model.UserJwtVo;
import cn.odboy.core.constant.SystemRedisKey;
import cn.odboy.core.service.system.dto.UserJwtVo;
import cn.odboy.redis.RedisHelper;
import io.jsonwebtoken.Claims;
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.stereotype.Service;
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.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import cn.odboy.constant.DataScopeEnum;
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.JSONArray;
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.config.model.FileUploadSettingModel;
import cn.odboy.config.model.JwtAuthSettingModel;
import cn.odboy.config.model.QuartzTaskThreadPoolSettingModel;
import cn.odboy.config.model.SwaggerApiDocSettingModel;
import cn.odboy.config.model.UserLoginSettingModel;
import cn.odboy.core.framework.properties.dto.ContentRsaEncodeSettingModel;
import cn.odboy.core.framework.properties.dto.FileUploadSettingModel;
import cn.odboy.core.framework.properties.dto.JwtAuthSettingModel;
import cn.odboy.core.framework.properties.dto.QuartzTaskThreadPoolSettingModel;
import cn.odboy.core.framework.properties.dto.SwaggerApiDocSettingModel;
import cn.odboy.core.framework.properties.dto.UserLoginSettingModel;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@@ -1,6 +1,7 @@
package cn.odboy.config.model;
package cn.odboy.core.framework.properties.dto;
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 lombok.Data;
@@ -1,4 +1,4 @@
package cn.odboy.config.model;
package cn.odboy.core.framework.properties.dto;
import lombok.Data;
@@ -1,8 +1,8 @@
package cn.odboy.config.model;
package cn.odboy.core.framework.properties.dto;
import lombok.Data;
/**
*
* @author odboy
* @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.util.StringUtil;
import com.wf.captcha.ArithmeticCaptcha;

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