From f227c35fb4030719f35af54eb2c530d62c19211e Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sat, 1 Jul 2023 14:46:05 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E6=92=A4=E9=94=80?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=94=B3=E8=AF=B7=EF=BC=8C=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E4=BA=BA=E5=8D=95=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/domain/vo/ActHistoryInfoVo.java | 5 +- .../workflow/domain/vo/ProcessInstanceVo.java | 6 ++ .../impl/ActProcessInstanceServiceImpl.java | 65 +++++++++++-------- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java index 093e65945..87d2ad2dd 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ActHistoryInfoVo.java @@ -1,6 +1,8 @@ package org.dromara.workflow.domain.vo; import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import java.io.Serial; import java.io.Serializable; @@ -51,11 +53,12 @@ public class ActHistoryInfoVo implements Serializable { /** * 办理人id */ - private String assignee; + private Long assignee; /** * 办理人名称 */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assignee") private String nickName; /** 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 index e3b17c4b1..3917f4f51 100644 --- 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 @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * 流程实例视图 @@ -86,4 +87,9 @@ public class ProcessInstanceVo implements Serializable { * 流程状态 */ private String businessStatusName; + + /** + * 待办任务集合 + */ + private List taskVoList; } 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 2ec1607e9..938ad8c21 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 @@ -13,8 +13,6 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysUserService; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.enums.BusinessStatusEnum; import org.dromara.workflow.domain.bo.ProcessInstanceBo; @@ -22,6 +20,7 @@ import org.dromara.workflow.domain.bo.ProcessInvalidBo; 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.domain.vo.TaskVo; import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; import org.dromara.workflow.service.IActProcessInstanceService; import org.flowable.bpmn.model.*; @@ -62,7 +61,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService private final RepositoryService repositoryService; private final RuntimeService runtimeService; private final HistoryService historyService; - private final ISysUserService iSysUserService; private final TaskService taskService; @Value("${flowable.activity-font-name}") @@ -249,18 +247,14 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); + } + try { + actHistoryInfoVo.setAssignee(StringUtils.isNotBlank(historicTaskInstance.getAssignee()) ? Long.valueOf(historicTaskInstance.getAssignee()) : null); + } catch (NumberFormatException ignored) { + } actHistoryInfoVoList.add(actHistoryInfoVo); } - //翻译人员名称 - if (CollUtil.isNotEmpty(actHistoryInfoVoList)) { - actHistoryInfoVoList.forEach(e -> { - if (StringUtils.isNotBlank(e.getAssignee())) { - SysUserVo sysUserVo = iSysUserService.selectUserById(Long.valueOf(e.getAssignee())); - e.setNickName(ObjectUtil.isNotEmpty(sysUserVo) ? sysUserVo.getNickName() : ""); - } - }); - } List nodeInfoList = new ArrayList<>(); Map> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); for (Map.Entry> entry : groupByKey.entrySet()) { @@ -421,25 +415,28 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService @Override @Transactional(rollbackFor = Exception.class) public boolean cancelProcessApply(String processInstanceId) { - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() - .processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult(); - if (ObjectUtil.isNull(processInstance)) { - throw new ServiceException("您不是流程发起人,撤销失败!"); - } - if (processInstance.isSuspended()) { - throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); - } - BusinessStatusEnum.checkStatus(processInstance.getBusinessStatus()); - List taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list(); - for (Task task : taskList) { - taskService.addComment(task.getId(), processInstanceId, "申请人撤销申请"); - } try { - HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().finished().list().get(0); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult(); + if (ObjectUtil.isNull(processInstance)) { + throw new ServiceException("您不是流程发起人,撤销失败!"); + } + if (processInstance.isSuspended()) { + throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); + } + BusinessStatusEnum.checkStatus(processInstance.getBusinessStatus()); + List taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list(); + for (Task task : taskList) { + taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId())); + taskService.addComment(task.getId(), processInstanceId, LoginHelper.getUsername() + ":撤销申请"); + } + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); List nodeIds = StreamUtils.toList(taskList, Task::getTaskDefinitionKey); runtimeService.createChangeActivityStateBuilder() .processInstanceId(processInstanceId) .moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState(); + Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list().get(0); + taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee()); runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); return true; } catch (Exception e) { @@ -465,10 +462,26 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService if (StringUtils.isNotBlank(processInstanceBo.getBusinessKey())) { query.processInstanceBusinessKey(processInstanceBo.getBusinessKey()); } + if (StringUtils.isNotBlank(processInstanceBo.getCategoryCode())) { + query.processInstanceBusinessKey(processInstanceBo.getCategoryCode()); + } + query.orderByProcessInstanceStartTime().desc(); List historicProcessInstanceList = query.listPage(processInstanceBo.getPageNum(), processInstanceBo.getPageSize()); + List taskVoList = new ArrayList<>(); + if (CollUtil.isNotEmpty(historicProcessInstanceList)) { + List processInstanceIds = StreamUtils.toList(historicProcessInstanceList, HistoricProcessInstance::getId); + List taskList = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).taskTenantId(TenantHelper.getTenantId()).list(); + for (Task task : taskList) { + taskVoList.add(BeanUtil.toBean(task, TaskVo.class)); + } + } for (HistoricProcessInstance processInstance : historicProcessInstanceList) { ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class); processInstanceVo.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(processInstance.getBusinessStatus())); + if (CollUtil.isNotEmpty(taskVoList)) { + List collect = taskVoList.stream().filter(e -> e.getProcessInstanceId().equals(processInstance.getId())).collect(Collectors.toList()); + processInstanceVo.setTaskVoList(CollUtil.isNotEmpty(collect) ? collect : Collections.emptyList()); + } list.add(processInstanceVo); } long count = query.count();