feat(workflow): 新增工作流任务处理相关功能

- 新增 completeTaskIgnoreAuth 方法,用于系统后台发起审批时忽略权限
- 新增 getCurrentActiveTaskId 方法,根据业务ID获取当前活跃任务ID
- 新增 getCurrentTaskIdByInstanceId 方法,根据流程实例ID获取当前活跃任务ID
- 修改 completeTask 方法名称为 completeTaskIgnoreAuth,系统后台发起审批 无用户信息 需要忽略权限(completeTask.getVariables().put("ignore", true);)
master
zch 1 week ago
parent df28ff1633
commit a65d398858

@ -85,4 +85,30 @@ public interface RemoteWorkflowService {
*/ */
boolean completeTask(RemoteCompleteTask completeTask); boolean completeTask(RemoteCompleteTask completeTask);
/**
*
*
* completeTask.getVariables().put("ignore", true);
*
* @param taskId ID
* @param message
*/
boolean completeTaskIgnoreAuth(Long taskId, String message);
/**
* IDID
* ID
*
* @param businessId ID
* @return IDnull
*/
Long getCurrentActiveTaskId(String businessId);
/**
* IDID
*
* @param instanceId ID
* @return IDnull
*/
Long getCurrentTaskIdByInstanceId(Long instanceId);
} }

@ -68,4 +68,19 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
return workflowService.completeTask(completeTask); return workflowService.completeTask(completeTask);
} }
@Override
public boolean completeTaskIgnoreAuth(Long taskId, String message) {
return workflowService.completeTaskIgnoreAuth(taskId, message);
}
@Override
public Long getCurrentActiveTaskId(String businessId) {
return workflowService.getCurrentActiveTaskId(businessId);
}
@Override
public Long getCurrentTaskIdByInstanceId(Long instanceId) {
return workflowService.getCurrentTaskIdByInstanceId(instanceId);
}
} }

@ -90,6 +90,23 @@ public interface WorkflowService {
* @param taskId ID * @param taskId ID
* @param message * @param message
*/ */
boolean completeTask(Long taskId, String message); boolean completeTaskIgnoreAuth(Long taskId, String message);
/**
* IDID
* ID
*
* @param businessId ID
* @return IDnull
*/
Long getCurrentActiveTaskId(String businessId);
/**
* IDID
*
* @param instanceId ID
* @return IDnull
*/
Long getCurrentTaskIdByInstanceId(Long instanceId);
} }

@ -3,6 +3,7 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteCompleteTask;
@ -19,12 +20,14 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
/** /**
* *
* *
* @author may * @author may
*/ */
@Slf4j
@ConditionalOnEnable @ConditionalOnEnable
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
@ -139,7 +142,7 @@ public class WorkflowServiceImpl implements WorkflowService {
* @param message * @param message
*/ */
@Override @Override
public boolean completeTask(Long taskId, String message) { public boolean completeTaskIgnoreAuth(Long taskId, String message) {
CompleteTaskBo completeTask = new CompleteTaskBo(); CompleteTaskBo completeTask = new CompleteTaskBo();
completeTask.setTaskId(taskId); completeTask.setTaskId(taskId);
completeTask.setMessage(message); completeTask.setMessage(message);
@ -148,4 +151,51 @@ public class WorkflowServiceImpl implements WorkflowService {
return flwTaskService.completeTask(completeTask); return flwTaskService.completeTask(completeTask);
} }
/**
* IDID
* ID
*
* @param businessId ID
* @return IDnull
*/
@Override
public Long getCurrentActiveTaskId(String businessId) {
// 先获取流程实例ID
Long instanceId = getInstanceIdByBusinessId(businessId);
if (instanceId == null) {
return null;
}
// 通过流程实例ID获取当前活跃任务ID
return getCurrentTaskIdByInstanceId(instanceId);
}
/**
* IDID
*
* @param instanceId ID
* @return IDnull
*/
@Override
public Long getCurrentTaskIdByInstanceId(Long instanceId) {
if (instanceId == null) {
return null;
}
try {
// 获取该流程实例下的所有活跃任务
List<org.dromara.warm.flow.orm.entity.FlowTask> activeTasks = flwTaskService.selectByInstId(instanceId);
// 过滤出当前活跃的任务del_flag=0
Optional<org.dromara.warm.flow.orm.entity.FlowTask> activeTask = activeTasks.stream()
.filter(task -> "0".equals(task.getDelFlag()))
.findFirst();
return activeTask.map(org.dromara.warm.flow.orm.entity.FlowTask::getId).orElse(null);
} catch (Exception e) {
log.error("获取当前活跃任务失败instanceId: {}", instanceId, e);
return null;
}
}
} }

Loading…
Cancel
Save