工作流增加历史版本展示并切换
This commit is contained in:
parent
6ce6485da9
commit
24d92743e9
@ -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<WorkflowHistory> {
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 工作流履历表
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
}
|
@ -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.service.WorkflowService;
|
||||||
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
||||||
import com.aizuda.snailjob.server.web.util.ImportUtils;
|
import com.aizuda.snailjob.server.web.util.ImportUtils;
|
||||||
|
import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowHistory;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
@ -48,6 +49,29 @@ public class WorkflowController {
|
|||||||
return workflowService.listPage(queryVO);
|
return workflowService.listPage(queryVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 获取当前id历史版本
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/history/{id}")
|
||||||
|
@LoginRequired(role = RoleEnum.USER)
|
||||||
|
public List<WorkflowHistory> 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
|
@PutMapping
|
||||||
@LoginRequired(role = RoleEnum.USER)
|
@LoginRequired(role = RoleEnum.USER)
|
||||||
public Boolean updateWorkflow(@RequestBody @Validated WorkflowRequestVO workflowRequestVO) {
|
public Boolean updateWorkflow(@RequestBody @Validated WorkflowRequestVO workflowRequestVO) {
|
||||||
|
@ -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.web.model.request.*;
|
||||||
import com.aizuda.snailjob.server.common.vo.WorkflowDetailResponseVO;
|
import com.aizuda.snailjob.server.common.vo.WorkflowDetailResponseVO;
|
||||||
import com.aizuda.snailjob.server.common.vo.WorkflowResponseVO;
|
import com.aizuda.snailjob.server.common.vo.WorkflowResponseVO;
|
||||||
|
import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowHistory;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
|
||||||
@ -42,4 +43,8 @@ public interface WorkflowService {
|
|||||||
);
|
);
|
||||||
|
|
||||||
Boolean deleteByIds(Set<Long> ids);
|
Boolean deleteByIds(Set<Long> ids);
|
||||||
|
|
||||||
|
List<WorkflowHistory> getWorkflowHistory(Long id);
|
||||||
|
|
||||||
|
WorkflowDetailResponseVO getWorkflowHistoryDetail(Long id, String version);
|
||||||
}
|
}
|
||||||
|
@ -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.common.handler.WorkflowHandler;
|
||||||
import com.aizuda.snailjob.server.web.util.UserSessionUtils;
|
import com.aizuda.snailjob.server.web.util.UserSessionUtils;
|
||||||
import com.aizuda.snailjob.template.datasource.access.AccessTemplate;
|
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.*;
|
||||||
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.po.*;
|
import com.aizuda.snailjob.template.datasource.persistence.po.*;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||||
@ -58,6 +55,7 @@ import lombok.Getter;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -78,6 +76,7 @@ import java.util.stream.Collectors;
|
|||||||
public class WorkflowServiceImpl implements WorkflowService {
|
public class WorkflowServiceImpl implements WorkflowService {
|
||||||
|
|
||||||
private final WorkflowMapper workflowMapper;
|
private final WorkflowMapper workflowMapper;
|
||||||
|
private final WorkflowHistoryMapper workflowHistoryMapper;
|
||||||
private final WorkflowNodeMapper workflowNodeMapper;
|
private final WorkflowNodeMapper workflowNodeMapper;
|
||||||
private final SystemProperties systemProperties;
|
private final SystemProperties systemProperties;
|
||||||
private final WorkflowHandler workflowHandler;
|
private final WorkflowHandler workflowHandler;
|
||||||
@ -147,6 +146,14 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
workflow.setVersion(null);
|
workflow.setVersion(null);
|
||||||
workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph)));
|
workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph)));
|
||||||
Assert.isTrue(1 == workflowMapper.updateById(workflow), () -> new SnailJobServerException("Failed to save workflow 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,6 +242,14 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
.eq(Workflow::getVersion, version)) > 0,
|
.eq(Workflow::getVersion, version)) > 0,
|
||||||
() -> new SnailJobServerException("Update failed"));
|
() -> 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;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,6 +392,27 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WorkflowHistory> getWorkflowHistory(Long id) {
|
||||||
|
return workflowHistoryMapper.selectList(new LambdaQueryWrapper<WorkflowHistory>().eq(WorkflowHistory::getId, id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkflowDetailResponseVO getWorkflowHistoryDetail(Long id, String version) {
|
||||||
|
WorkflowHistory workflowHistory = workflowHistoryMapper.selectOne(
|
||||||
|
new LambdaQueryWrapper<WorkflowHistory>()
|
||||||
|
.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<WorkflowRequestVO> workflowRequestVOList, final String namespaceId) {
|
private void batchSaveWorkflowTask(final List<WorkflowRequestVO> workflowRequestVOList, final String namespaceId) {
|
||||||
|
|
||||||
Set<String> groupNameSet = StreamUtils.toSet(workflowRequestVOList, WorkflowRequestVO::getGroupName);
|
Set<String> groupNameSet = StreamUtils.toSet(workflowRequestVOList, WorkflowRequestVO::getGroupName);
|
||||||
|
Loading…
Reference in New Issue
Block a user