From 85e8688d298ee48b35b6a4d39fed26f587afb5f4 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Fri, 10 Jul 2026 15:13:22 +0800 Subject: [PATCH] =?UTF-8?q?yxk-20260710=20=E9=A6=96=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=E7=9A=84=E6=83=85=E5=86=B5=EF=BC=8C=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E7=94=A8=E6=88=B7=E5=86=99=E5=85=A5=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=84=8F=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/TaskCreatedAutoSubmitListener.java | 33 ++++++++++++++++--- .../process/service/IExtActBpmLogService.java | 8 +++++ .../service/impl/ExtActBpmLogServiceImpl.java | 30 +++++++++++++++++ .../impl/ExtActProcessServiceImpl.java | 15 +++++++++ 4 files changed, 82 insertions(+), 4 deletions(-) diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/TaskCreatedAutoSubmitListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/TaskCreatedAutoSubmitListener.java index 667bfc3..8f010ac 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/TaskCreatedAutoSubmitListener.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/TaskCreatedAutoSubmitListener.java @@ -33,6 +33,7 @@ import java.util.Map; public class TaskCreatedAutoSubmitListener implements TaskListener { private static final long serialVersionUID = 1L; + private static final String DEFAULT_START_APPROVAL_OPINION = "发起督办流程。"; private static ISysBaseAPI sysBaseAPI; private static IExtActBpmLogService extActBpmLogService; protected static RuntimeService runtimeService; @@ -72,6 +73,7 @@ public class TaskCreatedAutoSubmitListener implements TaskListener { } String applyUserId = (String)delegateTask.getVariable("applyUserId"); + String startApprovalOpinion = resolveStartApprovalOpinion(delegateTask); //设置任务处理人为发起人 taskService.setAssignee(delegateTask.getId(), applyUserId); //自动完成 @@ -79,7 +81,7 @@ public class TaskCreatedAutoSubmitListener implements TaskListener { //---------------------------------------------------------------------------- //记录审批日志 - String username = JwtUtil.getUserNameByToken(SpringContextUtils.getHttpServletRequest()); + String username = resolveUsername(applyUserId); LoginUser user = sysBaseAPI.getUserByName(username); String processInstanceId = delegateTask.getProcessInstanceId(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); @@ -94,16 +96,39 @@ public class TaskCreatedAutoSubmitListener implements TaskListener { bpmlog.setOpUserName(user.getRealname()); } bpmlog.setProcInstId(processInstanceId); - bpmlog.setRemarks("系统自动完成"); + bpmlog.setRemarks(startApprovalOpinion); bpmlog.setTaskDefKey(delegateTask.getTaskDefinitionKey()); bpmlog.setTaskId(delegateTask.getId()); bpmlog.setTaskName(delegateTask.getName()); extActBpmLogService.save(bpmlog); - // 首节点自动完成原本只写旧日志,这里同步补写新审批历史表用于页面展示。 - extActBpmLogService.saveSystemApprovalOpinion(bpmlog, delegateTask.getCreateTime()); + // 首节点由系统自动推进,但审批历史按发起人的审批动作展示。 + extActBpmLogService.saveStartApprovalOpinion(bpmlog, delegateTask.getCreateTime()); //---------------------------------------------------------------------------- } + private String resolveStartApprovalOpinion(DelegateTask delegateTask) { + Object opinion = delegateTask.getVariable("startApprovalOpinion"); + if (opinion != null) { + String text = String.valueOf(opinion).trim(); + if (text.length() > 0) { + return text; + } + } + return DEFAULT_START_APPROVAL_OPINION; + } + + private String resolveUsername(String applyUserId) { + try { + String username = JwtUtil.getUserNameByToken(SpringContextUtils.getHttpServletRequest()); + if (username != null && username.trim().length() > 0) { + return username; + } + } catch (Exception ignored) { + // 周期任务等非 Web 请求场景没有 request/token,使用流程发起人兜底。 + } + return applyUserId; + } + public RepositoryService getRepositoryService(){ return SpringContextUtils.getBean(RepositoryService.class); } diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/IExtActBpmLogService.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/IExtActBpmLogService.java index 00f7425..16b5fd4 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/IExtActBpmLogService.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/IExtActBpmLogService.java @@ -57,6 +57,14 @@ public interface IExtActBpmLogService extends IService { * @param startTime 任务创建时间 */ void saveSystemApprovalOpinion(ExtActBpmLog bpmLog, Date startTime); + + /** + * 将首节点自动完成的发起审批意见同步写入新审批历史表。 + * + * @param bpmLog 旧审批日志 + * @param startTime 任务创建时间 + */ + void saveStartApprovalOpinion(ExtActBpmLog bpmLog, Date startTime); /** diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java index 391d017..d1331d5 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java @@ -241,6 +241,36 @@ public class ExtActBpmLogServiceImpl extends ServiceImpl(); } + // 督办类发起弹窗传入的审批意见不落新字段,启动时提升为流程变量供首节点监听器读取。 + if(oConvertUtils.isNotEmpty(jsonData)){ + try { + Map submittedJsonData = JSONHelper.json2MapNoObj(jsonData); + if(submittedJsonData != null){ + Object startApprovalOpinion = submittedJsonData.get("startApprovalOpinion"); + if(oConvertUtils.isNotEmpty(startApprovalOpinion)){ + dataForm.put("startApprovalOpinion", startApprovalOpinion); + } + } + } catch (Exception parseException) { + log.warn("解析流程发起 jsonData 中的审批意见失败,跳过。flowCode={}, id={}", flowCode, id, parseException); + } + } + dataForm.put(WorkFlowGlobals.BPM_DATA_ID, id); dataForm.put(WorkFlowGlobals.BPM_FORM_CONTENT_URL, formUrl); if(oConvertUtils.isNotEmpty(formUrlMobile)){