diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/controller/ActTaskController.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/controller/ActTaskController.java index 23e43f6..4d34245 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/controller/ActTaskController.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/controller/ActTaskController.java @@ -520,30 +520,30 @@ public class ActTaskController { Result> result = new Result<>(); Map map = new HashMap<>(); - // 1. 判断流程是否已结束 - boolean finished = false; - String endTime = null; - List startAndEndlist = activitiService.getActHiActinstStartAndEnd(procInstId); - if (startAndEndlist != null) { - for (ActHiActinstDTO m : startAndEndlist) { - if ("endEvent".equals(m.getActType())) { - finished = true; - endTime = m.getEndTime() != null - ? DateUtils.formatDate(m.getEndTime(), "YYYY-MM-dd HH:mm:ss") : null; - break; - } - } - } + // 通过运行时查询判断流程是否活跃,而非通过 ACT_HI_ACTINST 的 endEvent + // 原因:并行内嵌子流程(subProcess)各自有 endEvent,其中一个子流程结束时会写入 endEvent 记录, + // 通过 ACT_HI_ACTINST 查询会被误判为整个流程已结束 + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceId(procInstId).singleResult(); - map.put("finished", finished); - - if (finished) { - // 流程已结束:返回结束时间 - map.put("endTime", endTime); + if (processInstance == null) { + // 流程已结束 + map.put("finished", true); map.put("currentTasks", Collections.emptyList()); + + String endTime = null; + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(procInstId).singleResult(); + if (historicProcessInstance != null && historicProcessInstance.getEndTime() != null) { + endTime = DateUtils.formatDate(historicProcessInstance.getEndTime(), "YYYY-MM-dd HH:mm:ss"); + } + map.put("endTime", endTime); log.info("【流程-当前节点查询】流程已结束, procInstId: {}, endTime: {}", procInstId, endTime); } else { - // 流程未结束:查询所有活跃任务(支持会签/并行分支等多任务场景) + // 流程进行中:查询所有活跃任务(支持会签/并行分支/内嵌子流程等多任务场景) + map.put("finished", false); + map.put("endTime", null); + List activeTasks = taskService.createTaskQuery() .processInstanceId(procInstId).active().list(); @@ -581,7 +581,6 @@ public class ActTaskController { } map.put("currentTasks", taskList); - map.put("endTime", null); log.info("【流程-当前节点查询】查询成功, procInstId: {}, 活跃任务数: {}", procInstId, taskList.size()); }