xiangpei
2025-03-03 ddb766143ae7d04eb193d6f93719582e9f72296c
获取前置节点,执行id相同时只取最近一个
3个文件已修改
107 ■■■■ 已修改文件
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flowable/src/main/java/com/ycl/service/common/TaskCommonService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
start/src/main/resources/application-prod.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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())) {
flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
@@ -182,6 +182,7 @@
                        formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
                        formDetailVO.setUserTask((UserTask) incomingFlow.getSourceFlowElement());
                        defKeys.add(formDetailVO);
                        continue;
                    } else {
                        beforeNodeInfo(incomingFlow.getSourceFlowElement(), defKeys);
                    }
@@ -199,6 +200,7 @@
                        formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
                        formDetailVO.setUserTask((UserTask) incomingFlow.getSourceFlowElement());
                        defKeys.add(formDetailVO);
                        continue;
                    } else {
                        beforeNodeInfo(incomingFlow.getSourceFlowElement(), defKeys);
                    }
start/src/main/resources/application-prod.yml
@@ -18,13 +18,13 @@
    # redis 配置
    redis:
        # 地址
        host: 192.168.16.237
        host: 42.193.1.25
        # 端口,默认为6379
        port: 6379
        # 数据库索引
        database: 2
        # 密码
        password: Redis@r
        password: ycl2018
        # 连接超时时间
        timeout: 10s
        lettuce:
@@ -43,7 +43,7 @@
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://192.168.16.237:3306/project_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                url: jdbc:mysql://221.237.224.33:8066/project_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                username: root
                password: Mysql@my
            # 从库数据源