|
|
|
@ -3,6 +3,7 @@ package org.dromara.workflow.service.impl;
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
|
|
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteCompleteTask;
|
|
|
|
@ -19,12 +20,14 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通用 工作流服务实现
|
|
|
|
|
*
|
|
|
|
|
* @author may
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@ConditionalOnEnable
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Service
|
|
|
|
@ -139,7 +142,7 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|
|
|
|
* @param message 办理意见
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public boolean completeTask(Long taskId, String message) {
|
|
|
|
|
public boolean completeTaskIgnoreAuth(Long taskId, String message) {
|
|
|
|
|
CompleteTaskBo completeTask = new CompleteTaskBo();
|
|
|
|
|
completeTask.setTaskId(taskId);
|
|
|
|
|
completeTask.setMessage(message);
|
|
|
|
@ -148,4 +151,51 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|
|
|
|
return flwTaskService.completeTask(completeTask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【新增方法】根据业务ID获取当前活跃任务ID
|
|
|
|
|
* 用于润滑工单完成时获取正确的任务ID
|
|
|
|
|
*
|
|
|
|
|
* @param businessId 业务ID
|
|
|
|
|
* @return 当前活跃任务ID,如果没有找到返回null
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Long getCurrentActiveTaskId(String businessId) {
|
|
|
|
|
// 先获取流程实例ID
|
|
|
|
|
Long instanceId = getInstanceIdByBusinessId(businessId);
|
|
|
|
|
if (instanceId == null) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 通过流程实例ID获取当前活跃任务ID
|
|
|
|
|
return getCurrentTaskIdByInstanceId(instanceId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 【新增方法】根据流程实例ID获取当前活跃任务ID
|
|
|
|
|
*
|
|
|
|
|
* @param instanceId 流程实例ID
|
|
|
|
|
* @return 当前活跃任务ID,如果没有找到返回null
|
|
|
|
|
*/
|
|
|
|
|
@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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|