From 5b56f8bd84a9426562fd98f4d62f96933ac05131 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Mon, 6 Jul 2026 14:14:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(bpm):=20=E6=96=B0=E5=A2=9E=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=BD=93=E5=89=8D=E8=8A=82=E7=82=B9=E5=8F=8A=E5=8A=9E?= =?UTF-8?q?=E7=90=86=E4=BA=BA=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持获取流程实例当前活跃任务列表,包含节点名称、任务ID、开始时间、办理人实名及部门信息,兼容会签/并行分支多任务场景。 Co-Authored-By: Claude Opus 4.7 --- .../bpm/controller/ActTaskController.java | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) 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 da666c3..23e43f6 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 @@ -19,6 +19,7 @@ import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.Process; import org.flowable.common.engine.api.FlowableException; import org.flowable.engine.*; +import org.flowable.idm.api.User; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; @@ -508,10 +509,91 @@ public class ActTaskController { return result; } + /** + * 查询流程当前节点及办理人信息(轻量接口,供列表页按钮快速查看) + * + * @param procInstId 流程实例ID + * @return finished: 是否已结束, endTime: 结束时间, currentTasks: 当前活跃任务列表(节点名+办理人+开始时间) + */ + @GetMapping(value = "/currentNodeInfo") + public Result> getCurrentNodeInfo(@RequestParam(name = "procInstId", required = true) String procInstId) { + 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; + } + } + } + + map.put("finished", finished); + + if (finished) { + // 流程已结束:返回结束时间 + map.put("endTime", endTime); + map.put("currentTasks", Collections.emptyList()); + log.info("【流程-当前节点查询】流程已结束, procInstId: {}, endTime: {}", procInstId, endTime); + } else { + // 流程未结束:查询所有活跃任务(支持会签/并行分支等多任务场景) + List activeTasks = taskService.createTaskQuery() + .processInstanceId(procInstId).active().list(); + + List> taskList = new ArrayList<>(); + if (activeTasks != null && !activeTasks.isEmpty()) { + for (Task task : activeTasks) { + Map taskInfo = new HashMap<>(); + taskInfo.put("taskId", task.getId()); + taskInfo.put("taskName", task.getName()); + taskInfo.put("taskDefinitionKey", task.getTaskDefinitionKey()); + taskInfo.put("startTime", task.getCreateTime() != null + ? DateUtils.formatDate(task.getCreateTime(), "YYYY-MM-dd HH:mm:ss") : null); + + // 查询办理人 + String assignee = task.getAssignee(); + if (oConvertUtils.isNotEmpty(assignee)) { + taskInfo.put("assignee", assignee); + LoginUser user = sysBaseAPI.getUserByName(assignee); + taskInfo.put("assigneeName", user != null ? user.getRealname() : assignee); + List deptNames = sysBaseAPI.getDepartNamesByUsername(assignee); + taskInfo.put("deptNames", deptNames != null ? deptNames : Collections.emptyList()); + } else { + taskInfo.put("assignee", ""); + taskInfo.put("assigneeName", "待签收"); + taskInfo.put("deptNames", Collections.emptyList()); + } + taskList.add(taskInfo); + } + } else { + // 没有活跃任务但流程未结束(极端情况,如定时器等待中) + Map emptyTask = new HashMap<>(); + emptyTask.put("taskName", "等待中(无活跃用户任务)"); + emptyTask.put("assigneeName", "系统自动处理"); + taskList.add(emptyTask); + } + + map.put("currentTasks", taskList); + map.put("endTime", null); + log.info("【流程-当前节点查询】查询成功, procInstId: {}, 活跃任务数: {}", procInstId, taskList.size()); + } + + result.setResult(map); + result.setSuccess(true); + return result; + } + /** * 获取退回的上个节点 - * + * * @param task * @param histListNode * @return