xiangpei
2025-03-03 ddb766143ae7d04eb193d6f93719582e9f72296c
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -1268,10 +1268,12 @@
        // 判断前置任务是不是和当前任务为同一个executeId
        // 判断当前任务是否被挂起中
        String finalProcessInsId = processInsId;
        beforeNodes = beforeNodes.stream().filter(node -> {
        List<FormDetailVO> dataList = new ArrayList<>(2);
        Map<String, List<FormDetailVO>> map = new HashMap<>(2);
        beforeNodes.stream().forEach(node -> {
            if (node.getCurrent()) {
                return Boolean.TRUE;
            }
                dataList.add(node);
            } else {
            List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
                    .processInstanceId(finalProcessInsId)
                    .finished()
@@ -1279,9 +1281,23 @@
                    .orderByTaskCreateTime()
                    .desc()
                    .list();
            return CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0));
        }).collect(Collectors.toList());
        List<DoFormDetailVO> vos = beforeNodes.stream().map(node -> {
                if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
                    List<FormDetailVO> l = map.get(beforeTasks.get(0));
                    if (CollectionUtils.isEmpty(l)) {
                        map.put(beforeTasks.get(0).getExecutionId(), Arrays.asList(node));
                    } else {
                        l.add(node);
                    }
                }
            }
        });
        for (String key : map.keySet()) {
            if (StringUtils.isNotBlank(key)) {
                // 同一执行器上只取最近的一个
                dataList.add(map.get(key).get(0));
            }
        }
        List<DoFormDetailVO> vos = dataList.stream().map(node -> {
            if (node.getCurrent()) {
                if (processLogService.taskIsHangup(taskId, finalProcessInsId)) {
                    node.setTaskStatus(TaskStatusEnum.HANGUP);
@@ -1310,19 +1326,48 @@
        Map<String, Object> parameters = new HashMap<>();
        if (Objects.isNull(task)) {
            // 如果为空,可能是任务已经结束
            HistoricTaskInstance hisTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).includeProcessVariables().singleResult();
            if (Objects.isNull(hisTask)) {
            List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
                    .taskId(taskId)
                    .finished()
                    .includeProcessVariables()
                    .orderByTaskCreateTime()
                    .desc()
                    .list();
            if (CollectionUtils.isNotEmpty(hisTasks) && Objects.isNull(hisTasks.get(0))) {
                throw new RuntimeException("该任务不存在");
            }
            HistoricTaskInstance hisTask = hisTasks.get(0);
            parameters = hisTask.getProcessVariables();
            List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, hisTask.getFormKey(), hisTask.getName(), hisTask.getProcessDefinitionId(), hisTask.getTaskDefinitionKey(), Boolean.TRUE);
            List<FormDetailVO> dataList = beforeNodes.stream().filter(node -> {
            List<FormDetailVO> dataList = new ArrayList<>(2);
            Map<String, List<FormDetailVO>> map = new HashMap<>(2);
            beforeNodes.stream().forEach(node -> {
                if (node.getCurrent()) {
                    return Boolean.TRUE;
                    dataList.add(node);
                } else {
                    List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
                            .processInstanceId(hisTask.getProcessInstanceId())
                            .finished()
                            .taskDefinitionKey(node.getBeforeNodeDefId())
                            .orderByTaskCreateTime()
                            .desc()
                            .list();
                    if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
                        List<FormDetailVO> l = map.get(beforeTasks.get(0));
                        if (CollectionUtils.isEmpty(l)) {
                            map.put(beforeTasks.get(0).getExecutionId(), Arrays.asList(node));
                        } else {
                            l.add(node);
                }
                HistoricTaskInstance beforeTask = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisTask.getProcessInstanceId()).finished().taskDefinitionKey(node.getBeforeNodeDefId()).singleResult();
                return Objects.nonNull(beforeTask);
            }).collect(Collectors.toList());
                    }
                }
            });
            for (String key : map.keySet()) {
                if (StringUtils.isNotBlank(key)) {
                    // 同一执行器上只取最近的一个
                    dataList.add(map.get(key).get(0));
                }
            }
            List<DoFormDetailVO> vos = dataList.stream().map(node -> {
                if (node.getCurrent()) {
                    if (processLogService.taskIsHangup(taskId, hisTask.getProcessInstanceId())) {
@@ -1346,19 +1391,35 @@
        } else {
            parameters = taskService.getVariables(taskId);
            List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.TRUE);
            List<FormDetailVO> dataList = beforeNodes.stream().filter(node -> {
            List<FormDetailVO> dataList = new ArrayList<>(2);
            Map<String, List<FormDetailVO>> map = new HashMap<>(2);
            beforeNodes.stream().forEach(node -> {
                if (node.getCurrent()) {
                    return Boolean.TRUE;
                }
                List<HistoricTaskInstance> beforeTaskList = historyService.createHistoricTaskInstanceQuery()
                    dataList.add(node);
                } else {
                    List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
                        .processInstanceId(task.getProcessInstanceId())
                        .finished()
                        .taskDefinitionKey(node.getBeforeNodeDefId())
                        .orderByTaskCreateTime()
                        .desc()
                        .list();
                return CollectionUtils.isNotEmpty(beforeTaskList) && Objects.nonNull(beforeTaskList.get(0));
            }).collect(Collectors.toList());
                    if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
                        List<FormDetailVO> l = map.get(beforeTasks.get(0));
                        if (CollectionUtils.isEmpty(l)) {
                            map.put(beforeTasks.get(0).getExecutionId(), Arrays.asList(node));
                        } else {
                            l.add(node);
                        }
                    }
                }
            });
            for (String key : map.keySet()) {
                if (StringUtils.isNotBlank(key)) {
                    // 同一执行器上只取最近的一个
                    dataList.add(map.get(key).get(0));
                }
            }
            List<DoFormDetailVO> vos = dataList.stream().map(node -> {
                if (node.getCurrent()) {
                    if (processLogService.taskIsHangup(taskId, task.getProcessInstanceId())) {