From ce382762f2fe843fe9b08757dc01483d08875e37 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Thu, 9 Jul 2026 14:52:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(bpm):=20ProcessEndListener=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E5=8F=8D=E5=B0=84=E8=B0=83=E7=94=A8=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 IBpmProcessEndCallback 接口,定义在 system-local-api 层 - TaskTaskServiceImpl 实现该接口,委托给内部 syncBusinessBpmStatus - ProcessEndListener 通过 getBean(接口) 替代反射 invoke,编译期可检查 - 去除无效的 try-catch,异常交由 Flowable 统一处理 - 从 ITaskTaskService 移除仅反射使用的 syncBusinessBpmStatus Co-Authored-By: Claude Opus 4.7 --- .../listener/execution/ProcessEndListener.java | 10 +++------- .../common/bpm/api/IBpmProcessEndCallback.java | 14 ++++++++++++++ .../modules/tasktask/service/ITaskTaskService.java | 1 - .../tasktask/service/impl/TaskTaskServiceImpl.java | 8 +++++++- 4 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/bpm/api/IBpmProcessEndCallback.java diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/ProcessEndListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/ProcessEndListener.java index faf1e3a..726a72a 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/ProcessEndListener.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/ProcessEndListener.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.ExecutionListener; +import org.jeecg.common.bpm.api.IBpmProcessEndCallback; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals; @@ -159,13 +160,8 @@ public class ProcessEndListener implements ExecutionListener{ } // 综合重算主表 bpmStatus(一个事项可能有多个流程,需根据所有流程状态综合判断) - try { - Object taskTaskService = SpringContextUtils.getBean("taskTaskServiceImpl"); - taskTaskService.getClass().getMethod("syncBusinessBpmStatus", String.class) - .invoke(taskTaskService, execution.getProcessInstanceId()); - } catch (Exception e) { - log.error("【督办-同步业务状态】综合重算主表状态失败, processInstanceId: {}", execution.getProcessInstanceId(), e); - } + IBpmProcessEndCallback callback = SpringContextUtils.getBean(IBpmProcessEndCallback.class); + callback.onProcessEnd(execution.getProcessInstanceId()); } } diff --git a/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/bpm/api/IBpmProcessEndCallback.java b/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/bpm/api/IBpmProcessEndCallback.java new file mode 100644 index 0000000..9557ab2 --- /dev/null +++ b/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/bpm/api/IBpmProcessEndCallback.java @@ -0,0 +1,14 @@ +package org.jeecg.common.bpm.api; + +/** + * 流程结束回调接口 + * 业务模块实现此接口以响应流程结束事件,BPM 模块通过接口注入解耦业务依赖 + */ +public interface IBpmProcessEndCallback { + + /** + * 流程实例结束时回调 + * @param processInstanceId Flowable 流程实例 ID + */ + void onProcessEnd(String processInstanceId); +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java index 30900bc..45ae72a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java @@ -22,5 +22,4 @@ public interface ITaskTaskService extends IService { boolean deletePendingTask(String taskId); boolean updateTitleAndDeadline(String taskId, String title, String requireFinishDate); String getBusinessStatusByBusinessId(String businessId); - void syncBusinessBpmStatus(String processInstanceId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java index ea4fdb7..62631e2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java @@ -11,6 +11,7 @@ import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.bpm.api.IBpmProcessEndCallback; import org.jeecg.modules.extbpm.process.exception.BpmException; import org.jeecg.modules.taskapprovalopinion.entity.TaskApprovalOpinion; import org.jeecg.modules.taskapprovalopinion.service.ITaskApprovalOpinionService; @@ -39,7 +40,7 @@ import java.util.*; */ @Slf4j @Service -public class TaskTaskServiceImpl extends ServiceImpl implements ITaskTaskService { +public class TaskTaskServiceImpl extends ServiceImpl implements ITaskTaskService, IBpmProcessEndCallback { @Autowired private BpmBaseExtApiImpl bpmBaseExtApiImpl; @Autowired @@ -364,4 +365,9 @@ public class TaskTaskServiceImpl extends ServiceImpl i log.info("【督办-同步业务状态】已更新主表状态, businessTablename: {}, businessId: {}, 新状态: {}", businessTablename, businessId, newStatus); } + + @Override + public void onProcessEnd(String processInstanceId) { + syncBusinessBpmStatus(processInstanceId); + } }