From f129e82efcb750227470db49beea8430cbcfb494 Mon Sep 17 00:00:00 2001
From: nidayehaishinidaye
Date: Tue, 27 May 2025 21:53:41 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E5=8E=86=E5=8F=B2=E7=89=88=E6=9C=AC=E5=B1=95=E7=A4=BA=E5=B9=B6?=
=?UTF-8?q?=E5=88=87=E6=8D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/WorkflowHistoryMapper.java | 15 +++
.../persistence/po/WorkflowHistory.java | 112 ++++++++++++++++++
.../web/controller/WorkflowController.java | 24 ++++
.../server/web/service/WorkflowService.java | 5 +
.../web/service/impl/WorkflowServiceImpl.java | 44 ++++++-
5 files changed, 196 insertions(+), 4 deletions(-)
create mode 100644 snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/mapper/WorkflowHistoryMapper.java
create mode 100644 snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/WorkflowHistory.java
diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/mapper/WorkflowHistoryMapper.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/mapper/WorkflowHistoryMapper.java
new file mode 100644
index 000000000..12edfbf1a
--- /dev/null
+++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/mapper/WorkflowHistoryMapper.java
@@ -0,0 +1,15 @@
+package com.aizuda.snailjob.template.datasource.persistence.mapper;
+
+import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * @author zjw
+ * @description: TODO
+ * @date 2025/05/19
+ */
+@Mapper
+public interface WorkflowHistoryMapper extends BaseMapper {
+}
diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/WorkflowHistory.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/WorkflowHistory.java
new file mode 100644
index 000000000..6cd82e168
--- /dev/null
+++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/WorkflowHistory.java
@@ -0,0 +1,112 @@
+package com.aizuda.snailjob.template.datasource.persistence.po;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * * 工作流履历表
+ *
+ *
+ * @author : xiaowoniu
+ * @date : 2023-12-12
+ * @since : 2.6.0
+ */
+@Data
+@TableName("sj_workflow_history")
+@EqualsAndHashCode(callSuper=true)
+public class WorkflowHistory extends CreateUpdateDt{
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 工作流名称
+ */
+ private String workflowName;
+
+ /**
+ * 命名空间id
+ */
+ private String namespaceId;
+
+ /**
+ * 组名称
+ */
+ private String groupName;
+
+ /**
+ * 触发类型
+ */
+ private Integer triggerType;
+
+ /**
+ * 阻塞策略
+ */
+ private Integer blockStrategy;
+
+ /**
+ * 触发间隔
+ */
+ private String triggerInterval;
+
+ /**
+ * 执行超时时间
+ */
+ private Integer executorTimeout;
+
+ /**
+ * 工作流状态 0、关闭、1、开启
+ */
+ private Integer workflowStatus;
+
+ /**
+ * 任务执行时间
+ */
+ private Long nextTriggerAt;
+
+ /**
+ * 流程信息
+ */
+ private String flowInfo;
+
+ /**
+ * bucket
+ */
+ private Integer bucketIndex;
+
+ /**
+ * 描述
+ */
+ private String description;
+
+ /**
+ * 工作流上下文
+ */
+ private String wfContext;
+
+ /**
+ * 版本号
+ */
+ private Integer version;
+
+ /**
+ * 扩展字段
+ */
+ private String extAttrs;
+
+ /**
+ * 逻辑删除 1、删除
+ */
+ private Integer deleted;
+
+ /**
+ * 通知告警场景配置id列表
+ */
+ private String notifyIds;
+}
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java
index b033b8317..b3906a4a4 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java
@@ -12,6 +12,7 @@ import com.aizuda.snailjob.server.common.vo.WorkflowResponseVO;
import com.aizuda.snailjob.server.web.service.WorkflowService;
import com.aizuda.snailjob.server.web.util.ExportUtils;
import com.aizuda.snailjob.server.web.util.ImportUtils;
+import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowHistory;
import jakarta.validation.constraints.NotEmpty;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
@@ -48,6 +49,29 @@ public class WorkflowController {
return workflowService.listPage(queryVO);
}
+ /***
+ * 获取当前id历史版本
+ * @param id
+ * @return
+ */
+ @GetMapping("/history/{id}")
+ @LoginRequired(role = RoleEnum.USER)
+ public List historyVos(@PathVariable("id") Long id) {
+ return workflowService.getWorkflowHistory(id);
+ }
+
+ /***
+ * 获取当前id历史版本 详细
+ * @param id
+ * @param version
+ * @return
+ */
+ @GetMapping("/historyDetail/{id}")
+ @LoginRequired(role = RoleEnum.USER)
+ public WorkflowDetailResponseVO historyDetail(@PathVariable("id") Long id, @RequestParam("version") String version) {
+ return workflowService.getWorkflowHistoryDetail(id,version);
+ }
+
@PutMapping
@LoginRequired(role = RoleEnum.USER)
public Boolean updateWorkflow(@RequestBody @Validated WorkflowRequestVO workflowRequestVO) {
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java
index 918efb2bf..6f72458ab 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java
@@ -6,6 +6,7 @@ import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.*;
import com.aizuda.snailjob.server.common.vo.WorkflowDetailResponseVO;
import com.aizuda.snailjob.server.common.vo.WorkflowResponseVO;
+import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowHistory;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
@@ -42,4 +43,8 @@ public interface WorkflowService {
);
Boolean deleteByIds(Set ids);
+
+ List getWorkflowHistory(Long id);
+
+ WorkflowDetailResponseVO getWorkflowHistoryDetail(Long id, String version);
}
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java
index 026a7780c..1352e454e 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java
@@ -42,10 +42,7 @@ import com.aizuda.snailjob.server.web.service.handler.GroupHandler;
import com.aizuda.snailjob.server.common.handler.WorkflowHandler;
import com.aizuda.snailjob.server.web.util.UserSessionUtils;
import com.aizuda.snailjob.template.datasource.access.AccessTemplate;
-import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
-import com.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper;
-import com.aizuda.snailjob.template.datasource.persistence.mapper.WorkflowMapper;
-import com.aizuda.snailjob.template.datasource.persistence.mapper.WorkflowNodeMapper;
+import com.aizuda.snailjob.template.datasource.persistence.mapper.*;
import com.aizuda.snailjob.template.datasource.persistence.po.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
@@ -58,6 +55,7 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -78,6 +76,7 @@ import java.util.stream.Collectors;
public class WorkflowServiceImpl implements WorkflowService {
private final WorkflowMapper workflowMapper;
+ private final WorkflowHistoryMapper workflowHistoryMapper;
private final WorkflowNodeMapper workflowNodeMapper;
private final SystemProperties systemProperties;
private final WorkflowHandler workflowHandler;
@@ -147,6 +146,14 @@ public class WorkflowServiceImpl implements WorkflowService {
workflow.setVersion(null);
workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph)));
Assert.isTrue(1 == workflowMapper.updateById(workflow), () -> new SnailJobServerException("Failed to save workflow graph"));
+
+ //准备数据到履历表add 20250519
+ WorkflowHistory history = new WorkflowHistory();
+ Workflow workflow1 = workflowMapper.selectById(workflow.getId());
+ BeanUtils.copyProperties(workflow1, history);
+
+ Assert.isTrue(1 == workflowHistoryMapper.insert(history), () -> new SnailJobServerException("Failed to save workflowHistory graph"));
+
return true;
}
@@ -235,6 +242,14 @@ public class WorkflowServiceImpl implements WorkflowService {
.eq(Workflow::getVersion, version)) > 0,
() -> new SnailJobServerException("Update failed"));
+ //工作流表更新后插入履历表
+ //准备数据到履历表add 20250520
+ WorkflowHistory history = new WorkflowHistory();
+ Workflow workflow1 = workflowMapper.selectById(workflow.getId());
+ BeanUtils.copyProperties(workflow1, history);
+
+ Assert.isTrue(1 == workflowHistoryMapper.insert(history), () -> new SnailJobServerException("Failed to save workflowHistory graph"));
+
return Boolean.TRUE;
}
@@ -377,6 +392,27 @@ public class WorkflowServiceImpl implements WorkflowService {
return Boolean.TRUE;
}
+ @Override
+ public List getWorkflowHistory(Long id) {
+ return workflowHistoryMapper.selectList(new LambdaQueryWrapper().eq(WorkflowHistory::getId, id));
+ }
+
+ @Override
+ public WorkflowDetailResponseVO getWorkflowHistoryDetail(Long id, String version) {
+ WorkflowHistory workflowHistory = workflowHistoryMapper.selectOne(
+ new LambdaQueryWrapper()
+ .eq(WorkflowHistory::getId, id)
+ .eq(WorkflowHistory::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId())
+ .eq(WorkflowHistory::getVersion, version)
+ );
+ if (Objects.isNull(workflowHistory)) {
+ return null;
+ }
+ Workflow workflow = new Workflow();
+ BeanUtils.copyProperties(workflowHistory, workflow);
+ return doGetWorkflowDetail(workflow);
+ }
+
private void batchSaveWorkflowTask(final List workflowRequestVOList, final String namespaceId) {
Set groupNameSet = StreamUtils.toSet(workflowRequestVOList, WorkflowRequestVO::getGroupName);