From 9a14e906427ff401b49037c3033ca25b10a66f4b Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期二, 12 三月 2024 22:09:17 +0800 Subject: [PATCH] fix 修复驳回查询当前任务错误 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 252 ++++++++++++++++++++++++++------------------------ 1 files changed, 132 insertions(+), 120 deletions(-) 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 653b733..b623eab 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 @@ -3,7 +3,6 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -23,18 +22,21 @@ import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.MultiInstanceVo; import org.dromara.workflow.domain.vo.TaskVo; +import org.dromara.workflow.domain.vo.VariableVo; import org.dromara.workflow.domain.vo.WfCopy; -import org.dromara.workflow.flowable.strategy.FlowEventStrategy; import org.dromara.workflow.flowable.cmd.*; +import org.dromara.workflow.flowable.strategy.FlowEventStrategy; import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler; import org.dromara.workflow.mapper.ActTaskMapper; import org.dromara.workflow.service.IActTaskService; +import org.dromara.workflow.utils.QueryUtils; import org.dromara.workflow.utils.WorkflowUtils; import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.*; import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; import org.flowable.engine.impl.persistence.entity.ExecutionEntity; @@ -42,8 +44,8 @@ import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; -import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.flowable.task.service.impl.persistence.entity.TaskEntity; +import org.flowable.variable.api.persistence.entity.VariableInstance; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -51,8 +53,7 @@ import java.util.*; import java.util.stream.Collectors; -import static org.dromara.workflow.common.constant.FlowConstant.FLOWABLE_SKIP_EXPRESSION_ENABLED; -import static org.dromara.workflow.common.constant.FlowConstant.INITIATOR; +import static org.dromara.workflow.common.constant.FlowConstant.*; /** * 浠诲姟 鏈嶅姟灞傚疄鐜� @@ -84,17 +85,17 @@ throw new ServiceException("鍚姩宸ヤ綔娴佹椂蹇呴』鍖呭惈涓氬姟ID"); } // 鍒ゆ柇褰撳墠涓氬姟鏄惁鍚姩杩囨祦绋� - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); + HistoricProcessInstanceQuery query = QueryUtils.hisInstanceQuery(); + HistoricProcessInstance historicProcessInstance = query.processInstanceBusinessKey(startProcessBo.getBusinessKey()).singleResult(); if (ObjectUtil.isNotEmpty(historicProcessInstance)) { BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus()); } - TaskQuery taskQuery = taskService.createTaskQuery(); - List<Task> taskResult = taskQuery.processInstanceBusinessKey(startProcessBo.getBusinessKey()).taskTenantId(TenantHelper.getTenantId()).list(); + List<Task> taskResult = QueryUtils.taskQuery().processInstanceBusinessKey(startProcessBo.getBusinessKey()).list(); if (CollUtil.isNotEmpty(taskResult)) { if (CollUtil.isNotEmpty(startProcessBo.getVariables())) { taskService.setVariables(taskResult.get(0).getId(), startProcessBo.getVariables()); } - map.put("processInstanceId", taskResult.get(0).getProcessInstanceId()); + map.put(PROCESS_INSTANCE_ID, taskResult.get(0).getProcessInstanceId()); map.put("taskId", taskResult.get(0).getId()); return map; } @@ -109,21 +110,26 @@ variables.put(INITIATOR, (String.valueOf(LoginHelper.getUserId()))); ProcessInstance pi; try { - pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); + if (TenantHelper.isEnable()) { + pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); + } else { + pi = runtimeService.startProcessInstanceByKey(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables); + } } catch (FlowableObjectNotFoundException e) { throw new ServiceException("鎵句笉鍒板綋鍓嶃��" + startProcessBo.getProcessKey() + "銆戞祦绋嬪畾涔夛紒"); } // 灏嗘祦绋嬪畾涔夊悕绉� 浣滀负 娴佺▼瀹炰緥鍚嶇О runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName()); // 鐢宠浜烘墽琛屾祦绋� - List<Task> taskList = taskService.createTaskQuery().processInstanceId(pi.getId()).taskTenantId(TenantHelper.getTenantId()).list(); + List<Task> taskList = QueryUtils.taskQuery(pi.getId()).list(); if (taskList.size() > 1) { throw new ServiceException("璇锋鏌ユ祦绋嬬涓�涓幆鑺傛槸鍚︿负鐢宠浜猴紒"); } runtimeService.updateBusinessStatus(pi.getProcessInstanceId(), BusinessStatusEnum.DRAFT.getStatus()); taskService.setAssignee(taskList.get(0).getId(), LoginHelper.getUserId().toString()); - taskService.setVariable(taskList.get(0).getId(), "processInstanceId", pi.getProcessInstanceId()); + taskService.setVariable(taskList.get(0).getId(), PROCESS_INSTANCE_ID, pi.getProcessInstanceId()); + taskService.setVariable(taskList.get(0).getId(), BUSINESS_KEY, pi.getBusinessKey()); map.put("processInstanceId", pi.getProcessInstanceId()); map.put("taskId", taskList.get(0).getId()); return map; @@ -140,8 +146,8 @@ try { List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles(); String userId = String.valueOf(LoginHelper.getUserId()); - TaskQuery taskQuery = taskService.createTaskQuery(); - taskQuery.taskId(completeTaskBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId); + TaskQuery taskQuery = QueryUtils.taskQuery(); + taskQuery.taskId(completeTaskBo.getTaskId()).taskCandidateOrAssigned(userId); if (CollUtil.isNotEmpty(roles)) { List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); taskQuery.taskCandidateGroupIn(groupIds); @@ -153,7 +159,7 @@ if (task.isSuspended()) { throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); } - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); + ProcessInstance processInstance = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); //鍔炵悊濮旀墭浠诲姟 if (ObjectUtil.isNotEmpty(task.getDelegationState()) && FlowConstant.PENDING.equals(task.getDelegationState().name())) { taskService.resolveTask(completeTaskBo.getTaskId()); @@ -181,13 +187,13 @@ //鍔炵悊鎰忚 taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "鍚屾剰" : completeTaskBo.getMessage()); //鍔炵悊浠诲姟 + taskService.setAssignee(task.getId(),userId); if (CollUtil.isNotEmpty(completeTaskBo.getVariables())) { taskService.complete(completeTaskBo.getTaskId(), completeTaskBo.getVariables()); } else { taskService.complete(completeTaskBo.getTaskId()); } - ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()) - .processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); + ProcessInstance pi = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); if (pi == null) { UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); managementService.executeCommand(updateBusinessStatusCmd); @@ -195,13 +201,13 @@ processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.FINISH.getStatus(), false); } } else { - List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); + List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) { TaskEntity newTask = WorkflowUtils.createNewTask(task); taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), LoginHelper.getLoginUser().getNickname() + "銆愭妱閫併�戠粰" + String.join(",", StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserName))); taskService.complete(newTask.getId()); - List<Task> taskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); + List<Task> taskList = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); WorkflowUtils.createCopyTask(taskList, StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserId)); } sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(), null); @@ -231,19 +237,18 @@ * @param taskBo 鍙傛暟 */ @Override - public TableDataInfo<TaskVo> getTaskWaitByPage(TaskBo taskBo) { - PageQuery pageQuery = new PageQuery(); - pageQuery.setPageNum(taskBo.getPageNum()); - pageQuery.setPageSize(taskBo.getPageSize()); + public TableDataInfo<TaskVo> getPageByTaskWait(TaskBo taskBo, PageQuery pageQuery) { QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>(); List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles(); + List<String> roleIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); String userId = String.valueOf(LoginHelper.getUserId()); queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus()); - queryWrapper.eq("t.tenant_id_", TenantHelper.getTenantId()); + queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId()); queryWrapper.and(w1 -> w1.eq("t.assignee_", userId) .or(w2 -> w2.isNull("t.assignee_") - .and(w3 -> w3.eq("t.user_id_", userId).or().in("t.group_id_", StreamUtils.toList(roles, RoleDTO::getRoleId)))) + .apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' " + + "and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN " + getInParam(roleIds) + " ) ))", userId)) ); if (StringUtils.isNotBlank(taskBo.getName())) { queryWrapper.like("t.name_", taskBo.getName()); @@ -265,14 +270,27 @@ return new TableDataInfo<>(taskList, page.getTotal()); } + private String getInParam(List<String> param) { + StringBuilder sb = new StringBuilder(); + sb.append("("); + for (int i = 0; i < param.size(); i++) { + sb.append("'").append(param.get(i)).append("'"); + if (i != param.size() - 1) { + sb.append(","); + } + } + sb.append(")"); + return sb.toString(); + } + /** * 鏌ヨ褰撳墠绉熸埛鎵�鏈夊緟鍔炰换鍔� * * @param taskBo 鍙傛暟 */ @Override - public TableDataInfo<TaskVo> getAllTaskWaitByPage(TaskBo taskBo) { - TaskQuery query = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()); + public TableDataInfo<TaskVo> getPageByAllTaskWait(TaskBo taskBo, PageQuery pageQuery) { + TaskQuery query = QueryUtils.taskQuery(); if (StringUtils.isNotBlank(taskBo.getName())) { query.taskNameLike("%" + taskBo.getName() + "%"); } @@ -283,11 +301,11 @@ query.processDefinitionKey(taskBo.getProcessDefinitionKey()); } query.orderByTaskCreateTime().desc(); - List<Task> taskList = query.listPage(taskBo.getPageNum(), taskBo.getPageSize()); + List<Task> taskList = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); List<ProcessInstance> processInstanceList = null; if (CollUtil.isNotEmpty(taskList)) { Set<String> processInstanceIds = StreamUtils.toSet(taskList, Task::getProcessInstanceId); - processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIds).list(); + processInstanceList = QueryUtils.instanceQuery(processInstanceIds).list(); } List<TaskVo> list = new ArrayList<>(); for (Task task : taskList) { @@ -315,40 +333,20 @@ * @param taskBo 鍙傛暟 */ @Override - public TableDataInfo<TaskVo> getTaskFinishByPage(TaskBo taskBo) { + public TableDataInfo<TaskVo> getPageByTaskFinish(TaskBo taskBo, PageQuery pageQuery) { String userId = String.valueOf(LoginHelper.getUserId()); - HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId).taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); - if (StringUtils.isNotBlank(taskBo.getName())) { - query.taskNameLike("%" + taskBo.getName() + "%"); + QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(taskBo.getName()), "t.name_", taskBo.getName()); + queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName()); + queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey()); + queryWrapper.eq("t.assignee_", userId); + Page<TaskVo> page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); + + List<TaskVo> taskList = page.getRecords(); + for (TaskVo task : taskList) { + task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) { - query.processDefinitionNameLike("%" + taskBo.getProcessDefinitionName() + "%"); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { - query.processDefinitionKey(taskBo.getProcessDefinitionKey()); - } - List<HistoricTaskInstance> taskInstanceList = query.listPage(taskBo.getPageNum(), taskBo.getPageSize()); - List<HistoricProcessInstance> historicProcessInstanceList = null; - if (CollUtil.isNotEmpty(taskInstanceList)) { - Set<String> processInstanceIds = StreamUtils.toSet(taskInstanceList, HistoricTaskInstance::getProcessInstanceId); - historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceIds(processInstanceIds).list(); - } - List<TaskVo> list = new ArrayList<>(); - for (HistoricTaskInstance task : taskInstanceList) { - TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); - if (CollUtil.isNotEmpty(historicProcessInstanceList)) { - historicProcessInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> { - taskVo.setBusinessStatus(e.getBusinessStatus()); - taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus())); - taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey()); - taskVo.setProcessDefinitionName(e.getProcessDefinitionName()); - }); - } - taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); - list.add(taskVo); - } - long count = query.count(); - return new TableDataInfo<>(list, count); + return new TableDataInfo<>(taskList, page.getTotal()); } /** @@ -357,10 +355,7 @@ * @param taskBo 鍙傛暟 */ @Override - public TableDataInfo<TaskVo> getTaskCopyByPage(TaskBo taskBo) { - PageQuery pageQuery = new PageQuery(); - pageQuery.setPageNum(taskBo.getPageNum()); - pageQuery.setPageSize(taskBo.getPageSize()); + public TableDataInfo<TaskVo> getPageByTaskCopy(TaskBo taskBo, PageQuery pageQuery) { QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>(); String userId = String.valueOf(LoginHelper.getUserId()); if (StringUtils.isNotBlank(taskBo.getName())) { @@ -378,7 +373,6 @@ List<TaskVo> taskList = page.getRecords(); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); } return new TableDataInfo<>(taskList, page.getTotal()); } @@ -389,39 +383,18 @@ * @param taskBo 鍙傛暟 */ @Override - public TableDataInfo<TaskVo> getAllTaskFinishByPage(TaskBo taskBo) { - HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); - if (StringUtils.isNotBlank(taskBo.getName())) { - query.taskNameLike("%" + taskBo.getName() + "%"); + public TableDataInfo<TaskVo> getPageByAllTaskFinish(TaskBo taskBo, PageQuery pageQuery) { + QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(taskBo.getName()), "t.name_", taskBo.getName()); + queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName()); + queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey()); + Page<TaskVo> page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); + + List<TaskVo> taskList = page.getRecords(); + for (TaskVo task : taskList) { + task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) { - query.processDefinitionNameLike("%" + taskBo.getProcessDefinitionName() + "%"); - } - if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { - query.processDefinitionKey(taskBo.getProcessDefinitionKey()); - } - List<HistoricTaskInstance> taskInstanceList = query.listPage(taskBo.getPageNum(), taskBo.getPageSize()); - List<HistoricProcessInstance> historicProcessInstanceList = null; - if (CollUtil.isNotEmpty(taskInstanceList)) { - Set<String> processInstanceIds = StreamUtils.toSet(taskInstanceList, HistoricTaskInstance::getProcessInstanceId); - historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceIds(processInstanceIds).list(); - } - List<TaskVo> list = new ArrayList<>(); - for (HistoricTaskInstance task : taskInstanceList) { - TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); - if (CollUtil.isNotEmpty(historicProcessInstanceList)) { - historicProcessInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> { - taskVo.setBusinessStatus(e.getBusinessStatus()); - taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus())); - taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey()); - taskVo.setProcessDefinitionName(e.getProcessDefinitionName()); - }); - } - taskVo.setAssignee(Convert.toLong(task.getAssignee())); - list.add(taskVo); - } - long count = query.count(); - return new TableDataInfo<>(list, count); + return new TableDataInfo<>(taskList, page.getTotal()); } /** @@ -432,7 +405,8 @@ @Override @Transactional(rollbackFor = Exception.class) public boolean delegateTask(DelegateBo delegateBo) { - TaskEntity task = (TaskEntity) taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(delegateBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + TaskQuery query = QueryUtils.taskQuery(); + TaskEntity task = (TaskEntity) query.taskId(delegateBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -461,7 +435,8 @@ @Override @Transactional(rollbackFor = Exception.class) public boolean terminationTask(TerminationBo terminationBo) { - Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(terminationBo.getTaskId()).singleResult(); + TaskQuery query = QueryUtils.taskQuery(); + Task task = query.taskId(terminationBo.getTaskId()).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); @@ -469,10 +444,9 @@ if (task.isSuspended()) { throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); } - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); - if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.TERMINATION.getStatus().equals(historicProcessInstance.getBusinessStatus())) { - throw new ServiceException("璇ュ崟鎹凡缁堟锛�"); - } + HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus()); try { if (StringUtils.isBlank(terminationBo.getComment())) { terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "缁堟浜嗙敵璇�"); @@ -480,15 +454,15 @@ terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "缁堟浜嗙敵璇凤細" + terminationBo.getComment()); } taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment()); - List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); + List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); if (CollectionUtil.isNotEmpty(list)) { List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); if (CollectionUtil.isNotEmpty(subTasks)) { subTasks.forEach(e -> taskService.deleteTask(e.getId())); } + runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus()); runtimeService.deleteProcessInstance(task.getProcessInstanceId(), StrUtil.EMPTY); } - runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey()); if (processHandler != null) { processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false); @@ -506,7 +480,8 @@ */ @Override public boolean transferTask(TransmitBo transmitBo) { - Task task = taskService.createTaskQuery().taskId(transmitBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + Task task = QueryUtils.taskQuery().taskId(transmitBo.getTaskId()) + .taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -532,9 +507,8 @@ */ @Override public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) { - TaskQuery taskQuery = taskService.createTaskQuery(); + TaskQuery taskQuery = QueryUtils.taskQuery(); taskQuery.taskId(addMultiBo.getTaskId()); - taskQuery.taskTenantId(TenantHelper.getTenantId()); if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); } @@ -581,9 +555,8 @@ */ @Override public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) { - TaskQuery taskQuery = taskService.createTaskQuery(); + TaskQuery taskQuery = QueryUtils.taskQuery(); taskQuery.taskId(deleteMultiBo.getTaskId()); - taskQuery.taskTenantId(TenantHelper.getTenantId()); if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); } @@ -633,7 +606,8 @@ @Override @Transactional(rollbackFor = Exception.class) public String backProcess(BackProcessBo backProcessBo) { - Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult(); + TaskQuery query = QueryUtils.taskQuery(); + Task task = query.taskId(backProcessBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -642,18 +616,16 @@ } try { String processInstanceId = task.getProcessInstanceId(); - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); + ProcessInstance processInstance = QueryUtils.instanceQuery(task.getProcessInstanceId()).singleResult(); //鑾峰彇骞惰缃戝叧鎵ц鍚庝繚鐣欑殑鎵ц瀹炰緥鏁版嵁 ExecutionChildByExecutionIdCmd childByExecutionIdCmd = new ExecutionChildByExecutionIdCmd(task.getExecutionId()); List<ExecutionEntity> executionEntities = managementService.executeCommand(childByExecutionIdCmd); //鏍¢獙鍗曟嵁 - if (BusinessStatusEnum.BACK.getStatus().equals(processInstance.getBusinessStatus())) { - throw new ServiceException("璇ュ崟鎹凡閫�鍥烇紒"); - } + BusinessStatusEnum.checkBackStatus(processInstance.getBusinessStatus()); //鍒ゆ柇鏄惁鏈夊涓换鍔� - List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); + List<Task> taskList = QueryUtils.taskQuery(processInstanceId).list(); //鐢宠浜鸿妭鐐� - HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); + HistoricTaskInstance historicTaskInstance = QueryUtils.hisTaskInstanceQuery(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); String backTaskDefinitionKey = historicTaskInstance.getTaskDefinitionKey(); taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.BACK.getStatus(), StringUtils.isNotBlank(backProcessBo.getMessage()) ? backProcessBo.getMessage() : "閫�鍥�"); if (taskList.size() > 1) { @@ -663,7 +635,7 @@ //褰撳墠鍗曚釜鑺傜偣椹冲洖鍗曚釜鑺傜偣 runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey).changeState(); } - List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); + List<Task> list = QueryUtils.taskQuery(processInstanceId).list(); for (Task t : list) { taskService.setAssignee(t.getId(), historicTaskInstance.getAssignee()); } @@ -696,7 +668,7 @@ @Transactional(rollbackFor = Exception.class) public boolean updateAssignee(String[] taskIds, String userId) { try { - List<Task> list = taskService.createTaskQuery().taskIds(Arrays.asList(taskIds)).taskTenantId(TenantHelper.getTenantId()).list(); + List<Task> list = QueryUtils.taskQuery().taskIds(Arrays.asList(taskIds)).list(); for (Task task : list) { taskService.setAssignee(task.getId(), userId); } @@ -705,4 +677,44 @@ } return true; } + + /** + * 鏌ヨ娴佺▼鍙橀噺 + * + * @param taskId 浠诲姟id + */ + @Override + public List<VariableVo> getInstanceVariable(String taskId) { + List<VariableVo> variableVoList = new ArrayList<>(); + Map<String, VariableInstance> variableInstances = taskService.getVariableInstances(taskId); + if (CollectionUtil.isNotEmpty(variableInstances)) { + for (Map.Entry<String, VariableInstance> entry : variableInstances.entrySet()) { + VariableVo variableVo = new VariableVo(); + variableVo.setKey(entry.getKey()); + variableVo.setValue(entry.getValue().getValue().toString()); + variableVoList.add(variableVo); + } + } + return variableVoList; + } + + /** + * 鑾峰彇鍙┏鍥炲緱浠诲姟鑺傜偣 + * + * @param processInstanceId 娴佺▼瀹炰緥id + */ + @Override + public Set<TaskVo> getTaskNodeList(String processInstanceId) { + Set<TaskVo> list = new HashSet<>(); + List<HistoricTaskInstance> historicTaskInstances = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list(); + for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) { + if (historicTaskInstance.getEndTime() != null) { + TaskVo taskVo = new TaskVo(); + taskVo.setName(historicTaskInstance.getName()); + taskVo.setTaskDefinitionKey(historicTaskInstance.getTaskDefinitionKey()); + list.add(taskVo); + } + } + return list; + } } -- Gitblit v1.9.3