From 411ceeafc0a33d3ef09f1121690940e4082ddfdb Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Tue, 12 Dec 2023 22:20:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.6.0=201.=20=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/sql/easy_retry_mysql.sql | 3 + .../persistence/mapper/WorkflowMapper.java | 19 ++++ .../mapper/WorkflowNodeMapper.java | 18 ++++ .../mapper/WorkflowTaskBatchMapper.java | 18 ++++ .../datasource/persistence/po/Workflow.java | 77 ++++++++++++++++ .../persistence/po/WorkflowNode.java | 91 +++++++++++++++++++ .../persistence/po/WorkflowTaskBatch.java | 81 +++++++++++++++++ .../resources/mysql/mapper/WorkflowMapper.xml | 19 ++++ .../mysql/mapper/WorkflowNodeMapper.xml | 22 +++++ .../mysql/mapper/WorkflowTaskBatchMapper.xml | 20 ++++ .../web/controller/WorkflowController.java | 56 ++++++++++++ .../web/model/request/WorkflowRequestVO.java | 65 +++++++++++++ .../server/web/service/WorkflowService.java | 13 +++ .../web/service/impl/WorkflowServiceImpl.java | 19 ++++ 14 files changed, 521 insertions(+) create mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowMapper.java create mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowNodeMapper.java create mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowTaskBatchMapper.java create mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/Workflow.java create mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowNode.java create mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowTaskBatch.java create mode 100644 easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowMapper.xml create mode 100644 easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowNodeMapper.xml create mode 100644 easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowTaskBatchMapper.xml create mode 100644 easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java create mode 100644 easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/WorkflowRequestVO.java create mode 100644 easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java create mode 100644 easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java diff --git a/doc/sql/easy_retry_mysql.sql b/doc/sql/easy_retry_mysql.sql index 0fbbdfd2..b7e70ffb 100644 --- a/doc/sql/easy_retry_mysql.sql +++ b/doc/sql/easy_retry_mysql.sql @@ -446,7 +446,10 @@ CREATE TABLE `workflow` `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `workflow_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '工作流状态 0、关闭、1、开启', + `trigger_type` tinyint(4) NOT NULL COMMENT '触发类型 1.CRON 表达式 2. 固定时间', + `trigger_interval` varchar(255) NOT NULL COMMENT '间隔时长', `execution_at` bigint(13) NOT NULL DEFAULT '0' COMMENT '任务执行时间', + `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', `flow_info` JSON NOT NULL COMMENT '流程信息', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowMapper.java new file mode 100644 index 00000000..4d727ad0 --- /dev/null +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowMapper.java @@ -0,0 +1,19 @@ +package com.aizuda.easy.retry.template.datasource.persistence.mapper; + +import com.aizuda.easy.retry.template.datasource.persistence.po.Workflow; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 工作流 Mapper 接口 + *

+ * + * @author xiaowoniu + * @since 2023-12-12 + * @since : 2.6.0 + */ +@Mapper +public interface WorkflowMapper extends BaseMapper { + +} diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowNodeMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowNodeMapper.java new file mode 100644 index 00000000..166f6b76 --- /dev/null +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowNodeMapper.java @@ -0,0 +1,18 @@ +package com.aizuda.easy.retry.template.datasource.persistence.mapper; + +import com.aizuda.easy.retry.template.datasource.persistence.po.WorkflowNode; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 工作流节点 Mapper 接口 + *

+ * + * @author xiaowoniu + * @since 2023-12-12 + */ +@Mapper +public interface WorkflowNodeMapper extends BaseMapper { + +} diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowTaskBatchMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowTaskBatchMapper.java new file mode 100644 index 00000000..931ccdcf --- /dev/null +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/WorkflowTaskBatchMapper.java @@ -0,0 +1,18 @@ +package com.aizuda.easy.retry.template.datasource.persistence.mapper; + +import com.aizuda.easy.retry.template.datasource.persistence.po.WorkflowTaskBatch; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 工作流批次 Mapper 接口 + *

+ * + * @author xiaowoniu + * @since 2023-12-12 + */ +@Mapper +public interface WorkflowTaskBatchMapper extends BaseMapper { + +} diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/Workflow.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/Workflow.java new file mode 100644 index 00000000..e60bc379 --- /dev/null +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/Workflow.java @@ -0,0 +1,77 @@ +package com.aizuda.easy.retry.template.datasource.persistence.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 工作流 + *

+ * + * @author : xiaowoniu + * @date : 2023-12-12 + * @since : 2.6.0 + */ +@Getter +@Setter +@TableName("workflow") +public class Workflow implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 命名空间id + */ + private String namespaceId; + + /** + * 组名称 + */ + private String groupName; + + /** + * 工作流状态 0、关闭、1、开启 + */ + private Byte workflowStatus; + + /** + * 任务执行时间 + */ + private Long executionAt; + + /** + * 流程信息 + */ + private String flowInfo; + + /** + * 创建时间 + */ + private LocalDateTime createDt; + + /** + * 修改时间 + */ + private LocalDateTime updateDt; + + /** + * 逻辑删除 1、删除 + */ + private Byte deleted; + + /** + * 扩展字段 + */ + private String extAttrs; +} diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowNode.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowNode.java new file mode 100644 index 00000000..581281de --- /dev/null +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowNode.java @@ -0,0 +1,91 @@ +package com.aizuda.easy.retry.template.datasource.persistence.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 工作流节点 + *

+ * + * @author xiaowoniu + * @since 2023-12-12 + */ +@Getter +@Setter +@TableName("workflow_node") +public class WorkflowNode implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 命名空间id + */ + private String namespaceId; + + /** + * 组名称 + */ + private String groupName; + + /** + * 任务信息id + */ + private Long jobId; + + /** + * 1、任务节点 2、条件节点 + */ + private Byte nodeType; + + /** + * 1、SpEl、2、Aviator 3、QL + */ + private Byte expressionType; + + /** + * 失败策略 1、跳过 2、阻塞 + */ + private Byte failStrategy; + + /** + * 工作流节点状态 0、关闭、1、开启 + */ + private Byte workflowNodeStatus; + + /** + * 节点表达式 + */ + private String nodeExpression; + + /** + * 创建时间 + */ + private LocalDateTime createDt; + + /** + * 修改时间 + */ + private LocalDateTime updateDt; + + /** + * 逻辑删除 1、删除 + */ + private Byte deleted; + + /** + * 扩展字段 + */ + private String extAttrs; +} diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowTaskBatch.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowTaskBatch.java new file mode 100644 index 00000000..3c673f53 --- /dev/null +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/WorkflowTaskBatch.java @@ -0,0 +1,81 @@ +package com.aizuda.easy.retry.template.datasource.persistence.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 工作流批次 + *

+ * + * @author xiaowoniu + * @since 2023-12-12 + */ +@Getter +@Setter +@TableName("workflow_task_batch") +public class WorkflowTaskBatch implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 命名空间id + */ + private String namespaceId; + + /** + * 组名称 + */ + private String groupName; + + /** + * 工作流任务id + */ + private Long workflowId; + + /** + * 任务批次状态 0、失败 1、成功 + */ + private Byte taskBatchStatus; + + /** + * 操作原因 + */ + private Byte operationReason; + + /** + * 任务执行时间 + */ + private Long executionAt; + + /** + * 创建时间 + */ + private LocalDateTime createDt; + + /** + * 修改时间 + */ + private LocalDateTime updateDt; + + /** + * 逻辑删除 1、删除 + */ + private Byte deleted; + + /** + * 扩展字段 + */ + private String extAttrs; +} diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowMapper.xml new file mode 100644 index 00000000..54ca9224 --- /dev/null +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowNodeMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowNodeMapper.xml new file mode 100644 index 00000000..f0d72eff --- /dev/null +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowNodeMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowTaskBatchMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowTaskBatchMapper.xml new file mode 100644 index 00000000..aeb41b51 --- /dev/null +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/WorkflowTaskBatchMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java new file mode 100644 index 00000000..68325704 --- /dev/null +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java @@ -0,0 +1,56 @@ +package com.aizuda.easy.retry.server.web.controller; + +import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO; +import com.aizuda.easy.retry.server.web.service.WorkflowService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author xiaowoniu + * @date 2023-12-12 21:50:46 + * @since 2.6.0 + */ +@RestController +@RequestMapping("/workflow") +@RequiredArgsConstructor +public class WorkflowController { + + private final WorkflowService workflowService; + + @Autowired + @PostMapping + public Boolean saveWorkflow(@RequestBody WorkflowRequestVO workflowRequestVO) { + return workflowService.saveWorkflow(workflowRequestVO); + } + + @PutMapping + public void updateWorkflow() { + + } + + @PostMapping("/start") + public void startWorkflow() { + + } + + @PostMapping("/stop") + public void stopWorkflow() { + + } + + @PostMapping("/pause") + public void pauseWorkflow() { + + } + + @PostMapping("/resume") + public void resumeWorkflow() { + + } + + public void getWorkflowDetail() { + + } + +} diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/WorkflowRequestVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/WorkflowRequestVO.java new file mode 100644 index 00000000..582793bd --- /dev/null +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/WorkflowRequestVO.java @@ -0,0 +1,65 @@ +package com.aizuda.easy.retry.server.web.model.request; + +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * @author xiaowoniu + * @date 2023-12-12 21:53:17 + * @since 2.6.0 + */ +@Data +public class WorkflowRequestVO { + + @NotBlank(message = "组名称不能为空") + @Pattern(regexp = "^[A-Za-z0-9_]{1,64}$", message = "仅支持长度为1~64字符且类型为数字、字母和下划线") + private String groupName; + + @NotBlank(message = "触发类型不能为空") + private Integer triggerType; + + @NotBlank(message = "触发间隔不能为空") + private String triggerInterval; + + @NotNull(message = "执行超时时间不能为空") + private Integer executorTimeout; + + @NotEmpty(message = "执行超时时间不能为空") + @Valid + private List nodeInfos; + + @Data + public static class NodeInfo { + + /** + * 条件节点表达式 + */ + private String nodeExpression; + + @NotNull(message = "节点类型不能为空") + private Integer nodeType; + + @NotNull(message = "任务ID不能为空") + private Long jobId; + + @NotNull(message = "表达式类型不能为空") + private Integer expressionType; + + @NotNull(message = "失败策略不能为空") + private Integer failStrategy; + + /** + * 子节点 + */ + private List childrenList; + + } + + +} diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java new file mode 100644 index 00000000..76b3c1be --- /dev/null +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java @@ -0,0 +1,13 @@ +package com.aizuda.easy.retry.server.web.service; + +import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO; + +/** + * @author xiaowoniu + * @date 2023-12-12 21:53:59 + * @since 2.6.0 + */ +public interface WorkflowService { + + boolean saveWorkflow(WorkflowRequestVO workflowRequestVO); +} diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java new file mode 100644 index 00000000..010d4399 --- /dev/null +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java @@ -0,0 +1,19 @@ +package com.aizuda.easy.retry.server.web.service.impl; + +import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO; +import com.aizuda.easy.retry.server.web.service.WorkflowService; +import org.springframework.stereotype.Service; + +/** + * @author xiaowoniu + * @date 2023-12-12 21:54:05 + * @since 2.6.0 + */ +@Service +public class WorkflowServiceImpl implements WorkflowService { + + @Override + public boolean saveWorkflow(WorkflowRequestVO workflowRequestVO) { + return false; + } +}