فهرست منبع

update 优化判断流程是否已结束

AprilWind 1 سال پیش
والد
کامیت
6b0b7382a6

+ 1 - 3
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java

@@ -17,7 +17,6 @@ import org.dromara.warm.flow.core.listener.GlobalListener;
 import org.dromara.warm.flow.core.listener.ListenerVariable;
 import org.dromara.warm.flow.core.service.InsService;
 import org.dromara.warm.flow.orm.entity.FlowInstance;
-import org.dromara.warm.flow.orm.entity.FlowTask;
 import org.dromara.workflow.common.ConditionalOnEnable;
 import org.dromara.workflow.common.constant.FlowConstant;
 import org.dromara.workflow.common.enums.TaskStatusEnum;
@@ -183,8 +182,7 @@ public class WorkflowGlobalListener implements GlobalListener {
             return flowStatus;
         } else {
             Long instanceId = instance.getId();
-            List<FlowTask> flowTasks = flwTaskService.selectByInstId(instanceId);
-            if (CollUtil.isEmpty(flowTasks)) {
+            if (flwTaskService.isTaskEnd(instanceId)) {
                 String status = BusinessStatusEnum.FINISH.getStatus();
                 // 更新流程状态为已完成
                 instanceService.updateStatus(instanceId, status);

+ 8 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@@ -165,6 +165,14 @@ public interface IFlwTaskService {
      */
     List<FlowTask> selectByInstId(Long instanceId);
 
+    /**
+     * 判断流程是否已结束(即该流程实例下是否还有未完成的任务)
+     *
+     * @param instanceId 流程实例ID
+     * @return true 表示任务已全部结束;false 表示仍有任务存在
+     */
+    boolean isTaskEnd(Long instanceId);
+
     /**
      * 任务操作
      *

+ 13 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -574,6 +574,19 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             .eq(FlowTask::getInstanceId, instanceId));
     }
 
+    /**
+     * 判断流程是否已结束(即该流程实例下是否还有未完成的任务)
+     *
+     * @param instanceId 流程实例ID
+     * @return true 表示任务已全部结束;false 表示仍有任务存在
+     */
+    @Override
+    public boolean isTaskEnd(Long instanceId) {
+        boolean exists = flowTaskMapper.exists(new LambdaQueryWrapper<FlowTask>()
+            .eq(FlowTask::getInstanceId, instanceId));
+        return !exists;
+    }
+
     /**
      * 任务操作
      *