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 3831c66a4..c28b75200 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 @@ -7,13 +7,12 @@ import org.dromara.common.core.domain.R; 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.ActHistoryInfoVo; 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.*; -import java.util.List; +import java.util.Map; /** * 流程实例管理 控制层 @@ -65,7 +64,7 @@ public class ActProcessInstanceController extends BaseController { * @param processInstanceId 流程实例id */ @GetMapping("/getHistoryRecord/{processInstanceId}") - public R> getHistoryRecord(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { + public R> getHistoryRecord(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { return R.ok(iActProcessInstanceService.getHistoryRecord(processInstanceId)); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java new file mode 100644 index 000000000..763613165 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/GraphicInfoVo.java @@ -0,0 +1,47 @@ +package org.dromara.workflow.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 节点图形信息 + * + * @author may + */ +@Data +public class GraphicInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * x坐标 + */ + private double x; + + /** + * y坐标 + */ + private double y; + + /** + * 节点高度 + */ + private double height; + + /** + * 节点宽度 + */ + private double width; + + /** + * 节点id + */ + private String nodeId; + + /** + * 节点名称 + */ + private String nodeName; +} 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 faf0704a7..8b3afde7f 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 @@ -7,6 +7,7 @@ import org.dromara.workflow.domain.vo.ActHistoryInfoVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo; import java.util.List; +import java.util.Map; /** * 流程实例 服务层 @@ -44,5 +45,5 @@ public interface IActProcessInstanceService { * @param processInstanceId 流程实例id * @return 结果 */ - List getHistoryRecord(String processInstanceId); + Map getHistoryRecord(String processInstanceId); } 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 7344de83a..ea9229eae 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 @@ -16,10 +16,11 @@ import org.dromara.system.service.ISysUserService; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.vo.ActHistoryInfoVo; +import org.dromara.workflow.domain.vo.GraphicInfoVo; 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; +import org.flowable.bpmn.model.*; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; @@ -27,6 +28,7 @@ import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; +import org.flowable.engine.impl.util.ProcessDefinitionUtil; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstanceQuery; import org.flowable.engine.task.Comment; @@ -210,7 +212,8 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService * @param processInstanceId 流程实例id */ @Override - public List getHistoryRecord(String processInstanceId) { + public Map getHistoryRecord(String processInstanceId) { + Map map = new HashMap<>(); //查询任务办理记录 List list = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).orderByHistoricTaskInstanceEndTime().desc().list(); @@ -247,7 +250,23 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService List finishTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null); collect.addAll(waitingTask); collect.addAll(finishTask); - return collect; + //审批记录 + map.put("historyRecordList", collect); + BpmnModel bpmnModel = repositoryService.getBpmnModel(list.get(0).getProcessDefinitionId()); + List graphicInfoVos = new ArrayList<>(); + Collection flowElements = bpmnModel.getMainProcess().getFlowElements(); + for (FlowElement flowElement : flowElements) { + if (flowElement instanceof UserTask) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowElement.getId()); + GraphicInfoVo graphicInfoVo = BeanUtil.toBean(graphicInfo, GraphicInfoVo.class); + graphicInfoVo.setNodeId(flowElement.getId()); + graphicInfoVo.setNodeName(flowElement.getName()); + graphicInfoVos.add(graphicInfoVo); + } + } + //节点图形信息 + map.put("graphicInfoVos", graphicInfoVos); + return map; } /**