From 11643253a0ab6b78f549e9ccb05e7ca5cb44da44 Mon Sep 17 00:00:00 2001 From: songgaoshuai <1742057357@qq.com> Date: Fri, 9 Jun 2023 12:32:06 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E8=BF=90=E8=A1=8C=E4=B8=AD=EF=BC=8C=E5=B7=B2?= =?UTF-8?q?=E7=BB=93=E6=9D=9F=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActProcessInstanceController.java | 26 +++++- .../workflow/domain/bo/ProcessInstanceBo.java | 36 +++++++++ .../workflow/domain/vo/ProcessInstanceVo.java | 79 +++++++++++++++++++ .../service/IActProcessInstanceService.java | 19 +++++ .../impl/ActProcessInstanceServiceImpl.java | 66 +++++++++++++++- 5 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java index 4467277dc..42f33eb9b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java @@ -3,7 +3,10 @@ package org.dromara.workflow.controller; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.workflow.domain.bo.ProcessInstanceBo; +import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.service.IActProcessInstanceService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -21,6 +24,26 @@ public class ActProcessInstanceController extends BaseController { private final IActProcessInstanceService iActProcessInstanceService; + /** + * 分页查询正在运行的流程实例 + * + * @param processInstanceBo 参数 + */ + @GetMapping("/getProcessInstanceRunningByPage") + public TableDataInfo getProcessInstanceRunningByPage(ProcessInstanceBo processInstanceBo) { + return iActProcessInstanceService.getProcessInstanceRunningByPage(processInstanceBo); + } + + /** + * 分页查询已结束的流程实例 + * + * @param processInstanceBo 参数 + */ + @GetMapping("/getProcessInstanceFinishByPage") + public TableDataInfo getProcessInstanceFinishByPage(ProcessInstanceBo processInstanceBo) { + return iActProcessInstanceService.getProcessInstanceFinishByPage(processInstanceBo); + } + /** * 通过流程实例id获取历史流程图 * @@ -28,8 +51,7 @@ public class ActProcessInstanceController extends BaseController { * @param response 响应 */ @GetMapping("/getHistoryProcessImage/{processInstanceId}") - public void getHistoryProcessImage(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId, - HttpServletResponse response) { + public void getHistoryProcessImage(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId, HttpServletResponse response) { iActProcessInstanceService.getHistoryProcessImage(processInstanceId, response); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java new file mode 100644 index 000000000..0e404243f --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInstanceBo.java @@ -0,0 +1,36 @@ +package org.dromara.workflow.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.workflow.common.PageEntity; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程实例请求对象 + * + * @author may + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ProcessInstanceBo extends PageEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 流程名称 + */ + private String name; + + /** + * 任务发起人 + */ + private String startUserId; + + /** + * 业务id + */ + private String businessKey; +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java new file mode 100644 index 000000000..0b36a1622 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java @@ -0,0 +1,79 @@ +package org.dromara.workflow.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 流程实例视图 + * + * @author may + */ +@Data +public class ProcessInstanceVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 流程实例id + */ + private String id; + + /** + * 流程定义id + */ + private String processDefinitionId; + + /** + * 流程定义名称 + */ + private String processDefinitionName; + + /** + * 流程定义key + */ + private String processDefinitionKey; + + /** + * 流程定义版本 + */ + private String processDefinitionVersion; + + /** + * 部署id + */ + private String deploymentId; + + /** + * 业务id + */ + private String businessKey; + + /** + * 是否挂起 + */ + private boolean isSuspended; + + /** + * 租户id + */ + private String tenantId; + + /** + * 启动时间 + */ + private Date startTime; + + /** + * 结束时间 + */ + private Date endTime; + + /** + * 启动人id + */ + private String startUserId; +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java index 737bed639..0d9450a93 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java @@ -1,6 +1,9 @@ package org.dromara.workflow.service; import jakarta.servlet.http.HttpServletResponse; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.workflow.domain.bo.ProcessInstanceBo; +import org.dromara.workflow.domain.vo.ProcessInstanceVo; /** * 流程实例 服务层 @@ -15,4 +18,20 @@ public interface IActProcessInstanceService { * @param response 响应 */ void getHistoryProcessImage(String processInstanceId, HttpServletResponse response); + + /** + * 分页查询正在运行的流程实例 + * + * @param processInstanceBo 参数 + * @return 结果 + */ + TableDataInfo getProcessInstanceRunningByPage(ProcessInstanceBo processInstanceBo); + + /** + * 分页查询已结束的流程实例 + * + * @param processInstanceBo 参数 + * @return 结果 + */ + TableDataInfo getProcessInstanceFinishByPage(ProcessInstanceBo processInstanceBo); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index a54437d86..080302321 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -1,10 +1,16 @@ package org.dromara.workflow.service.impl; +import cn.hutool.core.bean.BeanUtil; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.apache.commons.io.IOUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.workflow.common.constant.FlowConstant; +import org.dromara.workflow.domain.bo.ProcessInstanceBo; +import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; import org.dromara.workflow.service.IActProcessInstanceService; import org.flowable.bpmn.model.BpmnModel; @@ -13,7 +19,9 @@ import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.runtime.ProcessInstanceQuery; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -23,7 +31,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * 流程实例 服务层实现 @@ -48,6 +55,61 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService @Value("${flowable.annotation-font-name}") private String annotationFontName; + /** + * 分页查询正在运行的流程实例 + * + * @param processInstanceBo 参数 + */ + @Override + public TableDataInfo getProcessInstanceRunningByPage(ProcessInstanceBo processInstanceBo) { + List list = new ArrayList<>(); + ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery(); + query.processInstanceTenantId(TenantHelper.getTenantId()); + if (StringUtils.isNotBlank(processInstanceBo.getName())) { + query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%"); + } + if (StringUtils.isNotBlank(processInstanceBo.getStartUserId())) { + query.startedBy(processInstanceBo.getStartUserId()); + } + if (StringUtils.isNotBlank(processInstanceBo.getBusinessKey())) { + query.processInstanceBusinessKey(processInstanceBo.getBusinessKey()); + } + List processInstances = query.listPage(processInstanceBo.getPageNum(), processInstanceBo.getPageSize()); + for (ProcessInstance processInstance : processInstances) { + list.add(BeanUtil.toBean(processInstance, ProcessInstanceVo.class)); + } + long count = query.count(); + return new TableDataInfo<>(list, count); + } + + /** + * 分页查询已结束的流程实例 + * + * @param processInstanceBo 参数 + */ + @Override + public TableDataInfo getProcessInstanceFinishByPage(ProcessInstanceBo processInstanceBo) { + List list = new ArrayList<>(); + HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().finished() + .orderByProcessInstanceEndTime().desc(); + query.processInstanceTenantId(TenantHelper.getTenantId()); + if (StringUtils.isNotEmpty(processInstanceBo.getName())) { + query.processInstanceNameLike(processInstanceBo.getName()); + } + if (StringUtils.isNotEmpty(processInstanceBo.getStartUserId())) { + query.startedBy(processInstanceBo.getStartUserId()); + } + if (StringUtils.isNotBlank(processInstanceBo.getBusinessKey())) { + query.processInstanceBusinessKey(processInstanceBo.getBusinessKey()); + } + List historicProcessInstances = query.listPage(processInstanceBo.getPageNum(), processInstanceBo.getPageSize()); + for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) { + list.add(BeanUtil.toBean(historicProcessInstance, ProcessInstanceVo.class)); + } + long count = query.count(); + return new TableDataInfo<>(list, count); + } + /** * 通过流程实例id获取历史流程图 * @@ -98,7 +160,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } List highLightedNodeList = new ArrayList<>(); //运行中的节点 - List redNodeCollect = highLightedNodes.stream().filter(e -> e.contains(Color.RED.toString())).collect(Collectors.toList()); + List redNodeCollect = highLightedNodes.stream().filter(e -> e.contains(Color.RED.toString())).toList(); //排除与运行中相同的节点 for (String nodeId : highLightedNodes) { if (!nodeId.contains(Color.RED.toString()) && !redNodeCollect.contains(Color.RED + nodeId)) {