| | |
| | | .processInstanceId(procInsId) |
| | | .finished() |
| | | .list(); |
| | | listFinished = this.distinctHisActivity(listFinished); |
| | | |
| | | //扩展 获取这个流程实例的监控信息 key:TaskId value:实体类 |
| | | Map<String, ProcessCoding> processCodingMap = new LambdaQueryChainWrapper<>(processCodingMapper) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据任务key去重历史任务,相同情况下取最新的一条 |
| | | * |
| | | * @param hisTaskList |
| | | * @return |
| | | */ |
| | | private List<HistoricActivityInstance> distinctHisActivity(List<HistoricActivityInstance> hisTaskList) { |
| | | Map<String, HistoricActivityInstance> uniqueTasks = new HashMap<>(); |
| | | for (HistoricActivityInstance task : hisTaskList) { |
| | | String taskDefinitionKey = task.getActivityId(); |
| | | HistoricActivityInstance existingTask = uniqueTasks.get(taskDefinitionKey); |
| | | |
| | | // 如果任务key重复(可能被驳回过,重新提交导致key重复),取最近的一条 |
| | | if (existingTask == null || task.getStartTime().after(existingTask.getStartTime())) { |
| | | uniqueTasks.put(taskDefinitionKey, task); |
| | | } |
| | | } |
| | | // 最终去重后的任务列表 |
| | | return new ArrayList<>(uniqueTasks.values()); |
| | | } |
| | | |
| | | /** |
| | | * 查询当前任务的表单数据 |
| | | * |
| | | * @param taskId |
| | |
| | | HistoricTaskInstance historicTaskInstance = hisTaskList.get(0); |
| | | Map<String, Object> parameters = historicTaskInstance.getProcessVariables(); |
| | | String processInsId = historicTaskInstance.getProcessInstanceId(); |
| | | List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, historicTaskInstance.getFormKey(), historicTaskInstance.getName(), historicTaskInstance.getProcessDefinitionId(), historicTaskInstance.getTaskDefinitionKey(), Boolean.FALSE); |
| | | // 判断前置任务是不是和当前任务为同一个executeId |
| | | // 判断当前任务是否被挂起中 |
| | | String finalProcessInsId = processInsId; |
| | | List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, |
| | | historicTaskInstance.getFormKey(), |
| | | historicTaskInstance.getName(), |
| | | historicTaskInstance.getProcessDefinitionId(), |
| | | historicTaskInstance.getTaskDefinitionKey(), |
| | | Boolean.TRUE, Boolean.FALSE); |
| | | |
| | | |
| | | String finalProcessInsId = processInsId; |
| | | List<DoFormDetailVO> vos = beforeNodes.stream() |
| | | .filter(FormDetailVO::getCurrent) |
| | | .map(node -> { |
| | | if (node.getCurrent()) { |
| | | if (processLogService.taskIsHangup(taskId, finalProcessInsId)) { |
| | | node.setTaskStatus(TaskStatusEnum.HANGUP); |
| | | } |
| | | } |
| | | // 判断任务是否存在特殊操作(如跳过、转办等),需要在前端展示出来 |
| | | ProcessLogQuery query = new ProcessLogQuery(); |
| | | query.setTaskId(node.getTaskId()); |
| | | query.setTaskId(taskId); |
| | | query.setProcessInsId(finalProcessInsId); |
| | | Result result = processLogService.projectProcessLogList(query); |
| | | List<ProcessLogVO> logList = (List<ProcessLogVO>) result.get("data"); |
| | |
| | | BeanUtils.copyProperties(node, vo); |
| | | if (CollectionUtils.isNotEmpty(logList)) { |
| | | vo.setEvents(logList); |
| | | } |
| | | // 根据日志判断当前任务的状态 |
| | | if (logList.stream().anyMatch(log -> ProcessLogEventTypeEnum.FINISHED.equals(log.getEventType()))) { |
| | | vo.setTaskStatus(TaskStatusEnum.FINISHED); |
| | | } else if (logList.stream().anyMatch(log -> ProcessLogEventTypeEnum.JUMP.equals(log.getEventType()))) { |
| | | vo.setTaskStatus(TaskStatusEnum.JUMP); |
| | | } else if (processLogService.taskIsWait(taskId, processInsId)) { |
| | | vo.setTaskStatus(TaskStatusEnum.WAIT); |
| | | } else if (processLogService.taskIsHangup(taskId, processInsId)) { |
| | | vo.setTaskStatus(TaskStatusEnum.HANGUP); |
| | | } |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | |
| | | if (CollectionUtils.isNotEmpty(hisTaskList) && Objects.nonNull(hisTaskList.get(0))) { |
| | | parameters = hisTaskList.get(0).getProcessVariables(); |
| | | processInsId = hisTaskList.get(0).getProcessInstanceId(); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, hisTaskList.get(0).getFormKey(), hisTaskList.get(0).getName(), hisTaskList.get(0).getProcessDefinitionId(), hisTaskList.get(0).getTaskDefinitionKey(), Boolean.FALSE); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, |
| | | hisTaskList.get(0).getFormKey(), |
| | | hisTaskList.get(0).getName(), |
| | | hisTaskList.get(0).getProcessDefinitionId(), |
| | | hisTaskList.get(0).getTaskDefinitionKey(), |
| | | Boolean.FALSE, Boolean.TRUE); |
| | | } else { |
| | | parameters = taskService.getVariables(taskId); |
| | | processInsId = task.getProcessInstanceId(); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.FALSE); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, |
| | | task.getFormKey(), |
| | | task.getName(), |
| | | task.getProcessDefinitionId(), |
| | | task.getTaskDefinitionKey(), |
| | | Boolean.FALSE, Boolean.TRUE); |
| | | } |
| | | // 判断前置任务是不是和当前任务为同一个executeId |
| | | // 判断当前任务是否被挂起中 |
| | |
| | | } |
| | | HistoricTaskInstance hisTask = hisTasks.get(0); |
| | | parameters = historicProcessInstance.getProcessVariables(); |
| | | List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, hisTask.getFormKey(), hisTask.getName(), hisTask.getProcessDefinitionId(), hisTask.getTaskDefinitionKey(), Boolean.TRUE); |
| | | List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, |
| | | hisTask.getFormKey(), |
| | | hisTask.getName(), |
| | | hisTask.getProcessDefinitionId(), |
| | | hisTask.getTaskDefinitionKey(), |
| | | Boolean.TRUE, Boolean.TRUE); |
| | | List<FormDetailVO> dataList = new ArrayList<>(2); |
| | | Map<String, List<FormDetailVO>> map = new HashMap<>(2); |
| | | beforeNodes.stream().forEach(node -> { |
| | |
| | | Task task = taskService.createTaskQuery().taskId(taskId).processInstanceId(processInsId).singleResult(); |
| | | List<FormDetailVO> beforeNodes = new ArrayList<>(); |
| | | if (Objects.nonNull(task)) { |
| | | beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.TRUE); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, |
| | | task.getFormKey(), |
| | | task.getName(), |
| | | task.getProcessDefinitionId(), |
| | | task.getTaskDefinitionKey(), |
| | | Boolean.TRUE, Boolean.TRUE); |
| | | } else { |
| | | List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery() |
| | | .taskId(taskId) |
| | |
| | | throw new RuntimeException("该任务不存在"); |
| | | } |
| | | HistoricTaskInstance hisTask = hisTasks.get(0); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, hisTask.getFormKey(), hisTask.getName(), hisTask.getProcessDefinitionId(), hisTask.getTaskDefinitionKey(), Boolean.TRUE); |
| | | beforeNodes = this.getBeforeNodeForm(parameters, |
| | | hisTask.getFormKey(), |
| | | hisTask.getName(), |
| | | hisTask.getProcessDefinitionId(), |
| | | hisTask.getTaskDefinitionKey(), |
| | | Boolean.TRUE, Boolean.TRUE); |
| | | } |
| | | List<FormDetailVO> dataList = new ArrayList<>(2); |
| | | Map<String, List<FormDetailVO>> map = new HashMap<>(2); |
| | |
| | | * @param taskName 任务 |
| | | * @param processDefId 流程定义id |
| | | * @param processDefKey 流程实例id |
| | | * @param disableInput 是否禁用已经有值的输入项 |
| | | * @return |
| | | */ |
| | | private List<FormDetailVO> getBeforeNodeForm(Map<String, Object> parameters, String formKey, String taskName, String processDefId, String processDefKey, Boolean currentNeedData) { |
| | | private List<FormDetailVO> getBeforeNodeForm(Map<String, Object> parameters, |
| | | String formKey, |
| | | String taskName, |
| | | String processDefId, |
| | | String processDefKey, |
| | | Boolean currentNeedData, |
| | | Boolean disableInput) { |
| | | |
| | | // 这里只需要查自身以及上一个节点(如果并行的有多个)的表单数据 |
| | | List<FormDetailVO> beforeNodes = taskCommonService.getBeforeNodeDefInfo(processDefId, processDefKey, sysFormService, Boolean.TRUE); |
| | |
| | | |
| | | if(CollectionUtils.isNotEmpty(oldFields)) { |
| | | // 设置已填写的表单为禁用状态 |
| | | for (JSONObject oldField : oldFields) { |
| | | JSONObject options = oldField.getJSONObject("options"); |
| | | options.put("disabled", true); |
| | | if (disableInput) { |
| | | for (JSONObject oldField : oldFields) { |
| | | JSONObject options = oldField.getJSONObject("options"); |
| | | options.put("disabled", true); |
| | | } |
| | | } |
| | | formJson.put(ProcessConstants.WIDGET_LIST, oldFields); |
| | | newP.put(ProcessConstants.TASK_FORM_KEY, formJson); |