diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java index 287c3b7d6..2194022f1 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WorkflowUserController.java @@ -46,4 +46,14 @@ public class WorkflowUserController extends BaseController { public R> getWorkflowDeleteMultiInstanceList(@PathVariable String taskId) { return R.ok(iWorkflowUserService.getWorkflowDeleteMultiInstanceList(taskId)); } + + /** + * 按照用户id查询用户 + * + * @param userIds 用户id + */ + @GetMapping("/getUserListByIds/{userIds}") + public R> getUserListByIds(@PathVariable List userIds) { + return R.ok(iWorkflowUserService.getUserListByIds(userIds)); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java index 52f8ec287..fad9d903d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java @@ -135,4 +135,9 @@ public class TaskVo { * 参与者 */ private ParticipantVo participantVo; + + /** + * 是否会签 + */ + private Boolean multiInstance; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java index c70be04d4..d13247af7 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWorkflowUserService.java @@ -29,4 +29,12 @@ public interface IWorkflowUserService { * @return 结果 */ List getWorkflowDeleteMultiInstanceList(String taskId); + + /** + * 按照用户id查询用户 + * + * @param userIds 用户id + * @return 结果 + */ + List getUserListByIds(List userIds); } 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 7ba500e5b..637c2b502 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 @@ -267,6 +267,15 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } actHistoryInfoVoList.add(actHistoryInfoVo); } + List collect = new ArrayList<>(); + //待办理 + List waitingTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null); + //已办理 + List finishTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null); + collect.addAll(waitingTask); + collect.addAll(finishTask); + //审批记录 + map.put("historyRecordList", collect); List nodeInfoList = new ArrayList<>(); Map> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); for (Map.Entry> entry : groupByKey.entrySet()) { @@ -275,6 +284,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService if (StringUtils.isNotBlank(nickName)) { actHistoryInfoVo.setNickName(nickName); } + actHistoryInfoVoList.stream().filter(e -> e.getTaskDefinitionKey().equals(entry.getKey()) && e.getEndTime() != null).findFirst() + .ifPresent(e -> { + actHistoryInfoVo.setStatus("已处理"); + actHistoryInfoVo.setStartTime(e.getStartTime()); + }); actHistoryInfoVoList.stream().filter(e -> e.getTaskDefinitionKey().equals(entry.getKey()) && e.getEndTime() == null).findFirst() .ifPresent(e -> { actHistoryInfoVo.setStatus("待处理"); @@ -286,15 +300,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService } //节点信息 map.put("nodeListInfo", nodeInfoList); - List collect = new ArrayList<>(); - //待办理 - List waitingTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null); - //已办理 - List finishTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null); - collect.addAll(waitingTask); - collect.addAll(finishTask); - //审批记录 - map.put("historyRecordList", collect); BpmnModel bpmnModel = repositoryService.getBpmnModel(list.get(0).getProcessDefinitionId()); List graphicInfoVos = new ArrayList<>(); Collection flowElements = bpmnModel.getMainProcess().getFlowElements(); @@ -443,7 +448,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService 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() + ":撤销申请"); + taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getUsername() + ":撤销申请"); } HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); List nodeIds = StreamUtils.toList(taskList, Task::getTaskDefinitionKey); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 4c44954af..2d081c189 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -197,6 +197,7 @@ public class ActTaskServiceImpl implements IActTaskService { } taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); + taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); list.add(taskVo); } long count = query.count(); @@ -239,6 +240,7 @@ public class ActTaskServiceImpl implements IActTaskService { } taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); + taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); list.add(taskVo); } long count = query.count(); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java index a2e888f2b..6781ed185 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java @@ -60,19 +60,20 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { throw new ServiceException("任务不存在"); } MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); + if (multiInstance == null) { + return TableDataInfo.build(); + } LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); //检索条件 queryWrapper.eq(StringUtils.isNotEmpty(sysUserMultiBo.getDeptId()), SysUser::getDeptId, sysUserMultiBo.getDeptId()); queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode()); - if (multiInstance != null) { - if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List assigneeList = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); - queryWrapper.notIn(CollectionUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList); - } else { - List list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); - List userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee())); - queryWrapper.notIn(CollectionUtil.isNotEmpty(userIds), SysUser::getUserId, userIds); - } + if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { + List assigneeList = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); + queryWrapper.notIn(CollectionUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList); + } else { + List list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); + List userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee())); + queryWrapper.notIn(CollectionUtil.isNotEmpty(userIds), SysUser::getUserId, userIds); } queryWrapper.like(StringUtils.isNotEmpty(sysUserMultiBo.getUserName()), SysUser::getUserName, sysUserMultiBo.getUserName()); queryWrapper.like(StringUtils.isNotEmpty(sysUserMultiBo.getNickName()), SysUser::getNickName, sysUserMultiBo.getNickName()); @@ -172,4 +173,27 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { page.setRecords(records); return page; } + + /** + * 按照用户id查询用户 + * + * @param userIds 用户id + */ + @Override + public List getUserListByIds(List userIds) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + //检索条件 + queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode()); + queryWrapper.in(SysUser::getUserId, userIds); + List sysUserVos = sysUserMapper.selectVoList(queryWrapper); + List collectDeptId = sysUserVos.stream().map(SysUserVo::getDeptId).filter(Objects::nonNull).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(collectDeptId)) { + return sysUserVos; + } + List sysDeptList = sysDeptMapper.selectVoBatchIds(collectDeptId); + sysUserVos.forEach(e -> { + sysDeptList.stream().filter(d -> d.getDeptId().equals(e.getDeptId())).findFirst().ifPresent(e::setDept); + }); + return sysUserVos; + } }