From 5f2317e6fa4fcddf5e8336db12a4d348c19c4fe1 Mon Sep 17 00:00:00 2001 From: wangliwen Date: Fri, 22 Apr 2022 17:29:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E4=BB=A3=E5=8A=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=8A=20=E7=94=B3=E8=AF=B7=E6=97=B6=E7=9A=84=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activiti/service/ActTaskService.java | 133 ++++++++++-------- 1 file changed, 77 insertions(+), 56 deletions(-) diff --git a/renren-admin/src/main/java/io/renren/modules/activiti/service/ActTaskService.java b/renren-admin/src/main/java/io/renren/modules/activiti/service/ActTaskService.java index 7df33273..f5278c2e 100644 --- a/renren-admin/src/main/java/io/renren/modules/activiti/service/ActTaskService.java +++ b/renren-admin/src/main/java/io/renren/modules/activiti/service/ActTaskService.java @@ -8,9 +8,14 @@ import io.renren.common.page.PageData; import io.renren.common.service.impl.BaseServiceImpl; import io.renren.common.utils.MessageUtils; import io.renren.modules.activiti.dto.TaskDTO; +import io.renren.modules.processForm.dto.TAbilityApplicationDTO; +import io.renren.modules.processForm.service.TAbilityApplicationService; import io.renren.modules.security.user.SecurityUser; import io.renren.modules.sys.service.SysRoleUserService; -import org.activiti.engine.*; +import org.activiti.engine.HistoryService; +import org.activiti.engine.RepositoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; import org.activiti.engine.delegate.Expression; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.history.HistoricProcessInstance; @@ -30,6 +35,7 @@ import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskInfo; import org.activiti.engine.task.TaskQuery; import org.apache.commons.lang3.StringUtils; +import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -54,6 +60,9 @@ public class ActTaskService extends BaseServiceImpl { @Autowired private SysRoleUserService sysRoleUserService; + @Autowired + private TAbilityApplicationService tAbilityApplicationService; + /** * 根据参数获取当前运行的任务信息 * @@ -74,17 +83,17 @@ public class ActTaskService extends BaseServiceImpl { if (StringUtils.isNotEmpty(userId)) { taskQuery.taskAssignee(userId); } - if (StringUtils.isNotEmpty((String)params.get("taskName"))){ - taskQuery.taskNameLike("%"+(String)params.get("taskName")+"%"); + if (StringUtils.isNotEmpty((String) params.get("taskName"))) { + taskQuery.taskNameLike("%" + (String) params.get("taskName") + "%"); } - if(StringUtils.isNotEmpty((String)params.get("isRoleGroup"))&&"1".equals(params.get("isRoleGroup"))){ + if (StringUtils.isNotEmpty((String) params.get("isRoleGroup")) && "1".equals(params.get("isRoleGroup"))) { List listRoles = sysRoleUserService.getRoleIdList(SecurityUser.getUserId()); List listStr = new ArrayList<>(); - for(Long role : listRoles){ + for (Long role : listRoles) { listStr.add(role.toString()); } listStr.add(SecurityUser.getUserId().toString()); - if(!listStr.isEmpty()){ + if (!listStr.isEmpty()) { taskQuery.taskCandidateGroupIn(listStr); } else { return new PageData<>(new ArrayList<>(), 0); @@ -96,6 +105,13 @@ public class ActTaskService extends BaseServiceImpl { for (Task task : list) { TaskDTO dto = new TaskDTO(); this.convertTaskInfo(task, dto); + TAbilityApplicationDTO abilityApplicationDTO = + tAbilityApplicationService.get(Long.valueOf(dto.getBusinessKey())); + if (abilityApplicationDTO != null) { + ObjectMapper oMapper = new ObjectMapper(); + Map variables = oMapper.convertValue(abilityApplicationDTO, Map.class); + dto.setParams(variables); + } listDto.add(dto); } return new PageData<>(listDto, (int) taskQuery.count()); @@ -122,7 +138,7 @@ public class ActTaskService extends BaseServiceImpl { public void claimTask(String taskId) { String userId = SecurityUser.getUserId().toString(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - if(StringUtils.isNotEmpty(task.getAssignee())){ + if (StringUtils.isNotEmpty(task.getAssignee())) { throw new RenException(ErrorCode.TASK_CLIME_FAIL); } taskService.claim(taskId, userId); @@ -152,7 +168,7 @@ public class ActTaskService extends BaseServiceImpl { } } } - if(lstGroupId.isEmpty()){ + if (lstGroupId.isEmpty()) { throw new RenException(ErrorCode.UNCLAIM_ERROR_MESSAGE); } taskService.unclaim(taskId); @@ -167,10 +183,10 @@ public class ActTaskService extends BaseServiceImpl { public void completeTask(String taskId, String comment) { String userId = SecurityUser.getUserId().toString(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - if(StringUtils.isNotEmpty(task.getAssignee())){ + if (StringUtils.isNotEmpty(task.getAssignee())) { taskService.setAssignee(taskId, userId); } - if(StringUtils.isNotEmpty(comment)){ + if (StringUtils.isNotEmpty(comment)) { taskService.addComment(taskId, task.getProcessInstanceId(), comment); } taskService.complete(taskId); @@ -199,7 +215,7 @@ public class ActTaskService extends BaseServiceImpl { Map map = null; if (StringUtils.isNotBlank(variableName)) { Object value = taskService.getVariable(taskId, variableName); - if(null != value){ + if (null != value) { map = new HashMap<>(); map.put(variableName, value); } @@ -211,6 +227,7 @@ public class ActTaskService extends BaseServiceImpl { /** * 更新任务变量 + * * @param taskDTO */ public void updateTaskVariable(TaskDTO taskDTO) { @@ -220,21 +237,22 @@ public class ActTaskService extends BaseServiceImpl { /** * 根据任务ID判断是否为多实例任务 + * * @param taskId * @return */ private boolean isMultiInstance(String taskId) { boolean flag = false; - Task task=taskService.createTaskQuery().taskId(taskId).singleResult(); - if(task != null){ + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (task != null) { // 获取流程定义id - String processDefinitionId=task.getProcessDefinitionId(); - ProcessDefinitionEntity processDefinitionEntity=(ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); + String processDefinitionId = task.getProcessDefinitionId(); + ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); // 根据活动id获取活动实例 - ActivityImpl activityImpl=processDefinitionEntity.findActivity(task.getTaskDefinitionKey()); - if((activityImpl).getActivityBehavior() instanceof ParallelMultiInstanceBehavior){ - ParallelMultiInstanceBehavior behavior = (ParallelMultiInstanceBehavior)activityImpl.getActivityBehavior(); - if(behavior != null && behavior.getCollectionExpression() != null){ + ActivityImpl activityImpl = processDefinitionEntity.findActivity(task.getTaskDefinitionKey()); + if ((activityImpl).getActivityBehavior() instanceof ParallelMultiInstanceBehavior) { + ParallelMultiInstanceBehavior behavior = (ParallelMultiInstanceBehavior) activityImpl.getActivityBehavior(); + if (behavior != null && behavior.getCollectionExpression() != null) { flag = true; } } @@ -269,6 +287,7 @@ public class ActTaskService extends BaseServiceImpl { /** * 任务回退至上一用户任务节点 + * * @param taskId * @return */ @@ -276,16 +295,16 @@ public class ActTaskService extends BaseServiceImpl { public void doBackPreviousTask(String taskId, String comment) { Map variables = null; HistoricTaskInstance currTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult(); - if(this.isMultiInstance(taskId)){ + if (this.isMultiInstance(taskId)) { throw new RenException(ErrorCode.BACK_PROCESS_PARALLEL_ERROR); } ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(currTask.getProcessInstanceId()).singleResult(); ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService) .getDeployedProcessDefinition(currTask.getProcessDefinitionId()); ActivityImpl currActivity = processDefinitionEntity.findActivity(currTask.getTaskDefinitionKey()); - List canBackActivitys = new ArrayList<>(); + List canBackActivitys = new ArrayList<>(); this.getCanBackUpActivitys(currActivity, canBackActivitys); - if(canBackActivitys.isEmpty()) { + if (canBackActivitys.isEmpty()) { throw new RenException(ErrorCode.SUPERIOR_NOT_EXIST); } List originPvmTransitionList = new ArrayList(); @@ -299,28 +318,28 @@ public class ActTaskService extends BaseServiceImpl { .processInstanceId(processInstance.getId()) .finished().orderByHistoricActivityInstanceEndTime().desc().list(); List backActivitys = new ArrayList<>(); - for(HistoricActivityInstance historicActivityInstance: historicActivityInstances){ - for(ActivityImpl activity : canBackActivitys){ - if(historicActivityInstance.getActivityId().equals(activity.getId())){ + for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { + for (ActivityImpl activity : canBackActivitys) { + if (historicActivityInstance.getActivityId().equals(activity.getId())) { boolean flag = false; - for(ActivityImpl activity1 : backActivitys){ - if(activity.getId().equals(activity1.getId())){ + for (ActivityImpl activity1 : backActivitys) { + if (activity.getId().equals(activity1.getId())) { flag = true; break; } } - if(!flag){ + if (!flag) { backActivitys.add(activity); } } } } - if(backActivitys.isEmpty()){ + if (backActivitys.isEmpty()) { throw new RenException(ErrorCode.SUPERIOR_NOT_EXIST); } List transitionList = new ArrayList<>(); - for(ActivityImpl activity : backActivitys) { + for (ActivityImpl activity : backActivitys) { TransitionImpl transition = currActivity.createOutgoingTransition(IdWorker.get32UUID()); transition.setDestination(activity); transitionList.add(transition); @@ -331,8 +350,8 @@ public class ActTaskService extends BaseServiceImpl { .taskDefinitionKey(currTask.getTaskDefinitionKey()).list(); for (Task task : tasks) { String commentMode = MessageUtils.getMessage(ErrorCode.ROLLBACK_MESSAGE); - if(StringUtils.isNotEmpty(comment)){ - commentMode += "[" +comment+"]"; + if (StringUtils.isNotEmpty(comment)) { + commentMode += "[" + comment + "]"; } taskService.addComment(task.getId(), task.getProcessInstanceId(), commentMode); taskService.complete(task.getId(), variables); @@ -341,13 +360,13 @@ public class ActTaskService extends BaseServiceImpl { for (PvmTransition pvmTransition : originPvmTransitionList) { currActivity.getOutgoingTransitions().add(pvmTransition); } - for(ActivityImpl activity : backActivitys) { + for (ActivityImpl activity : backActivitys) { List incomingTransitions = activity.getIncomingTransitions(); Iterator iterator = incomingTransitions.iterator(); while (iterator.hasNext()) { PvmTransition pvmTransition = iterator.next(); - for(TransitionImpl transition : transitionList) { - if(transition.getId().equals(pvmTransition.getId())){ + for (TransitionImpl transition : transitionList) { + if (transition.getId().equals(pvmTransition.getId())) { iterator.remove(); } } @@ -357,13 +376,13 @@ public class ActTaskService extends BaseServiceImpl { private void getCanBackUpActivitys(ActivityImpl currActivity, List rtnList) { List incomingTransitions = currActivity.getIncomingTransitions(); - for(PvmTransition pvmTransition : incomingTransitions){ + for (PvmTransition pvmTransition : incomingTransitions) { TransitionImpl transitionImpl = (TransitionImpl) pvmTransition; ActivityImpl activityImpl = transitionImpl.getSource(); String type = (String) activityImpl.getProperty("type"); - if ("parallelGateway".equals(type)){ + if ("parallelGateway".equals(type)) { // 并行路线 - if(activityImpl.getOutgoingTransitions().size() > 1){ + if (activityImpl.getOutgoingTransitions().size() > 1) { throw new RenException(ErrorCode.BACK_PROCESS_HANDLEING_ERROR); } this.getCanBackUpActivitys(activityImpl, rtnList); @@ -373,8 +392,8 @@ public class ActTaskService extends BaseServiceImpl { rtnList.add(activityImpl); } else if ("exclusiveGateway".equals(type)) { this.getCanBackUpActivitys(activityImpl, rtnList); - } else if("inclusiveGateway".equals(type)) { - if(activityImpl.getOutgoingTransitions().size() > 1){ + } else if ("inclusiveGateway".equals(type)) { + if (activityImpl.getOutgoingTransitions().size() > 1) { return; } this.getCanBackUpActivitys(activityImpl, rtnList); @@ -384,13 +403,13 @@ public class ActTaskService extends BaseServiceImpl { @Transactional(rollbackFor = Exception.class) public void endProcess(String taskId, String comment) { - if(isMultiInstance(taskId)){ + if (isMultiInstance(taskId)) { throw new RenException(ErrorCode.END_PROCESS_PARALLEL_ERROR); } Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); List tasks = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()) .taskDefinitionKey(task.getTaskDefinitionKey()).list(); - if(tasks.size() > 1){ + if (tasks.size() > 1) { throw new RenException(ErrorCode.END_PROCESS_HANDLEING_ERROR); } ActivityImpl endActivity = findActivitiImpl(taskId, "end"); @@ -418,8 +437,8 @@ public class ActTaskService extends BaseServiceImpl { if (StringUtils.isNotEmpty(task.getOwner())) { taskService.resolveTask(task.getId()); } - String message =MessageUtils.getMessage(ErrorCode.END_PROCESS_MESSAGE); - comment = message + "["+ comment+ "]"; + String message = MessageUtils.getMessage(ErrorCode.END_PROCESS_MESSAGE); + comment = message + "[" + comment + "]"; taskService.addComment(task.getId(), task.getProcessInstanceId(), comment); taskService.complete(taskId); pointActivity.getIncomingTransitions().remove(newTransition); @@ -446,8 +465,8 @@ public class ActTaskService extends BaseServiceImpl { } if ("END".equals(activityId.toUpperCase())) { for (ActivityImpl activityImpl : processDefinition.getActivities()) { - String type = (String)activityImpl.getProperty("type"); - if("endEvent".equals(type)){ + String type = (String) activityImpl.getProperty("type"); + if ("endEvent".equals(type)) { return activityImpl; } } @@ -458,6 +477,7 @@ public class ActTaskService extends BaseServiceImpl { /** * 转换Task对象 + * * @param task * @param dto */ @@ -470,7 +490,7 @@ public class ActTaskService extends BaseServiceImpl { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); dto.setProcessDefinitionName(processDefinition.getName()); dto.setProcessDefinitionKey(processDefinition.getKey()); - HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); + HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); dto.setStartTime(processInstance.getStartTime()); dto.setBusinessKey(processInstance.getBusinessKey()); dto.setProcessInstanceId(task.getProcessInstanceId()); @@ -481,11 +501,12 @@ public class ActTaskService extends BaseServiceImpl { /** * 驳回至第一个用户任务 + * * @param taskId */ @Transactional(rollbackFor = Exception.class) public void backToFirst(String taskId, String comment) { - if(this.isMultiInstance(taskId)){ + if (this.isMultiInstance(taskId)) { throw new RenException(ErrorCode.REJECT_PROCESS_PARALLEL_ERROR); } Map variables = null; @@ -498,7 +519,7 @@ public class ActTaskService extends BaseServiceImpl { } List tasks = taskService.createTaskQuery().processInstanceId(currTask.getProcessInstanceId()) .taskDefinitionKey(currTask.getTaskDefinitionKey()).list(); - if(tasks.size() > 1){ + if (tasks.size() > 1) { throw new RenException(ErrorCode.REJECT_PROCESS_HANDLEING_ERROR); } ActivityImpl currActivity = processDefinitionEntity.findActivity(currTask.getTaskDefinitionKey()); @@ -523,8 +544,8 @@ public class ActTaskService extends BaseServiceImpl { variables = processInstance.getProcessVariables(); for (Task task : tasks) { String commentMode = MessageUtils.getMessage(ErrorCode.REJECT_MESSAGE); - if(StringUtils.isNotEmpty(comment)){ - commentMode += "[" + comment+"]"; + if (StringUtils.isNotEmpty(comment)) { + commentMode += "[" + comment + "]"; } taskService.addComment(task.getId(), task.getProcessInstanceId(), commentMode); taskService.complete(task.getId(), variables); @@ -537,18 +558,18 @@ public class ActTaskService extends BaseServiceImpl { } public void completeTaskByVariables(TaskDTO taskDTO) { - if(null != taskDTO.getParams()){ + if (null != taskDTO.getParams()) { Set keySet = taskDTO.getParams().keySet(); Iterator iterator = keySet.iterator(); - while(iterator.hasNext()){ - String key = (String)iterator.next(); - this.setTaskVariable(taskDTO.getTaskId(),key , taskDTO.getParams().get(key)); + while (iterator.hasNext()) { + String key = (String) iterator.next(); + this.setTaskVariable(taskDTO.getTaskId(), key, taskDTO.getParams().get(key)); } } this.completeTask(taskDTO.getTaskId(), taskDTO.getComment()); } - private void setTaskVariable(String taskId, String key, Object value){ + private void setTaskVariable(String taskId, String key, Object value) { TaskInfo taskInfo = taskService.createTaskQuery().taskId(taskId).singleResult(); runtimeService.setVariable(taskInfo.getExecutionId(), key, value); }