update 优化 liteflow 整体上下文用法优化

This commit is contained in:
疯狂的狮子Li
2026-07-07 15:48:48 +08:00
parent 543037885d
commit 44a9bd1006
21 changed files with 30 additions and 23 deletions
@@ -14,7 +14,7 @@ public class ContextRequiredComponent extends NodeComponent {
@Override
public void process() {
if (getRequestData() == null) {
if (getFirstContextBean() == null) {
throw new ServiceException("LiteFlow 上下文不能为空");
}
}
@@ -27,8 +27,8 @@ public class FailComponent extends NodeComponent {
* @return 失败提示
*/
private String getFailMessage() {
Object requestData = getRequestData();
if (requestData instanceof FailMessageProvider provider) {
Object context = getFirstContextBean();
if (context instanceof FailMessageProvider provider) {
String message = provider.getFailMessage();
if (StringUtils.isNotBlank(message)) {
return message;
@@ -4,6 +4,7 @@ import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.flow.LiteflowResponse;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
@@ -12,19 +13,25 @@ import org.dromara.common.core.utils.SpringUtils;
*
* @author Lion Li
*/
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LiteFlowUtils {
/**
* 执行 LiteFlow 链路,并按业务异常语义透传失败原因。
* 执行 LiteFlow 链路,并按 contextBean 语义透传业务上下文和失败原因。
*
* @param chainId 链路标识
* @param context 链路上下文
*/
public static void execute(String chainId, Object context) {
LiteflowResponse response = SpringUtils.getBean(FlowExecutor.class).execute2Resp(chainId, context);
if (context == null) {
throw new ServiceException("LiteFlow 上下文不能为空");
}
LiteflowResponse response = SpringUtils.getBean(FlowExecutor.class).execute2Resp(chainId, null, context);
if (!response.isSuccess()) {
Exception cause = response.getCause();
log.error("LiteFlow 链路执行失败 chainId={} requestId={} message={} steps={}",
chainId, response.getRequestId(), response.getMessage(), response.getExecuteStepStrWithTime(), cause);
if (cause instanceof RuntimeException runtimeException) {
throw runtimeException;
}
@@ -41,7 +41,7 @@ public class CompleteAutoPassComponent extends NodeComponent {
@Override
public void process() {
CompleteTaskContext context = getRequestData();
CompleteTaskContext context = getContextBean(CompleteTaskContext.class);
FlowTask flowTask = context.getFlowTask();
autoPass(flowTask.getId(), context.getFlowParams(), flowTask.getInstanceId());
}
@@ -31,7 +31,7 @@ public class CompleteExecuteComponent extends NodeComponent {
@Override
public void process() {
CompleteTaskContext context = getRequestData();
CompleteTaskContext context = getContextBean(CompleteTaskContext.class);
CompleteTaskBo completeTaskBo = context.getCompleteTaskBo();
Map<String, Object> variables = completeTaskBo.getVariables();
FlowParams flowParams = FlowParams.build()
@@ -16,7 +16,7 @@ public class CompleteNeedAutoPassComponent extends NodeBooleanComponent {
@Override
public boolean processBoolean() {
CompleteTaskContext context = getRequestData();
CompleteTaskContext context = getContextBean(CompleteTaskContext.class);
return Boolean.TRUE.equals(context.getAutoPass());
}
@@ -41,7 +41,7 @@ public class CompletePrepareComponent extends NodeComponent {
@Override
public void process() {
CompleteTaskContext context = getRequestData();
CompleteTaskContext context = getContextBean(CompleteTaskContext.class);
CompleteTaskBo completeTaskBo = context.getCompleteTaskBo();
FlowTask flowTask = flowTaskMapper.selectById(completeTaskBo.getTaskId());
if (ObjectUtil.isNull(flowTask)) {
@@ -34,7 +34,7 @@ public class InstanceDeleteEventComponent extends NodeComponent {
@Override
public void process() {
InstanceDeleteContext context = getRequestData();
InstanceDeleteContext context = getContextBean(InstanceDeleteContext.class);
String userId = LoginHelper.getUserIdStr();
context.getFlowInstances().forEach(flowInstance -> {
if (!LoginHelper.isSuperAdmin() && !flowInstance.getCreateBy().equals(userId)) {
@@ -30,7 +30,7 @@ public class InstanceDeleteExecuteComponent extends NodeComponent {
@Override
public void process() {
InstanceDeleteContext context = getRequestData();
InstanceDeleteContext context = getContextBean(InstanceDeleteContext.class);
if (!context.isHistory()) {
context.setResult(insService.remove(context.getDeleteInstanceIds()));
return;
@@ -17,7 +17,7 @@ public class InstanceDeleteExistsComponent extends NodeBooleanComponent {
@Override
public boolean processBoolean() {
InstanceDeleteContext context = getRequestData();
InstanceDeleteContext context = getContextBean(InstanceDeleteContext.class);
return CollUtil.isNotEmpty(context.getFlowInstances());
}
@@ -30,7 +30,7 @@ public class InstanceDeleteLoadComponent extends NodeComponent {
@Override
public void process() {
InstanceDeleteContext context = getRequestData();
InstanceDeleteContext context = getContextBean(InstanceDeleteContext.class);
List<FlowInstance> flowInstances;
if (CollUtil.isNotEmpty(context.getBusinessIds())) {
flowInstances = flowInstanceMapper.selectList(QueryBuilder.lambda(FlowInstance.class)
@@ -22,7 +22,7 @@ public class TaskOpExecuteComponent extends NodeComponent {
@Override
public void process() {
TaskOperationContext context = getRequestData();
TaskOperationContext context = getContextBean(TaskOperationContext.class);
Long taskId = context.getTaskOperationBo().getTaskId();
boolean result = false;
switch (context.getOperation()) {
@@ -30,7 +30,7 @@ public class TaskOpLoadComponent extends NodeComponent {
@Override
public void process() {
TaskOperationContext context = getRequestData();
TaskOperationContext context = getContextBean(TaskOperationContext.class);
Task task = taskService.getById(context.getTaskOperationBo().getTaskId());
if (ObjectUtil.isNull(task)) {
throw new ServiceException("任务不存在!");
@@ -17,7 +17,7 @@ public class TaskOpNeedNotifyComponent extends NodeBooleanComponent {
@Override
public boolean processBoolean() {
TaskOperationContext context = getRequestData();
TaskOperationContext context = getContextBean(TaskOperationContext.class);
return context.isResult() && CollUtil.isNotEmpty(context.getTaskOperationBo().getMessageType());
}
@@ -32,7 +32,7 @@ public class TaskOpNotifyComponent extends NodeComponent {
@Override
public void process() {
TaskOperationContext context = getRequestData();
TaskOperationContext context = getContextBean(TaskOperationContext.class);
TaskOperationBo bo = context.getTaskOperationBo();
List<Long> userIdList = new ArrayList<>();
if (StringUtils.isNotBlank(bo.getUserId())) {
@@ -28,7 +28,7 @@ public class TaskOpPrepareComponent extends NodeComponent {
@Override
public void process() {
TaskOperationContext context = getRequestData();
TaskOperationContext context = getContextBean(TaskOperationContext.class);
TaskOperationEnum op = TaskOperationEnum.getByCode(context.getTaskOperation());
if (op == null) {
log.error("Invalid operation type:{} ", context.getTaskOperation());
@@ -36,7 +36,7 @@ public class StartExecuteComponent extends NodeComponent {
@Override
public void process() {
StartProcessContext context = getRequestData();
StartProcessContext context = getContextBean(StartProcessContext.class);
FlowParams flowParams = FlowParams.build()
.handler(context.getStartProcessBo().getHandler())
.flowCode(context.getStartProcessBo().getFlowCode())
@@ -17,7 +17,7 @@ public class StartExistsComponent extends NodeBooleanComponent {
@Override
public boolean processBoolean() {
StartProcessContext context = getRequestData();
StartProcessContext context = getContextBean(StartProcessContext.class);
return ObjectUtil.isNotNull(context.getExistingInstance());
}
@@ -28,7 +28,7 @@ public class StartPrepareInstanceComponent extends NodeComponent {
@Override
public void process() {
StartProcessContext context = getRequestData();
StartProcessContext context = getContextBean(StartProcessContext.class);
Definition definition = FlowEngine.defService().getPublishByFlowCode(context.getStartProcessBo().getFlowCode());
if (ObjectUtil.isNull(definition)) {
throw new ServiceException("流程【" + context.getStartProcessBo().getFlowCode() + "】未发布,请先在流程设计器中发布流程定义");
@@ -30,7 +30,7 @@ public class StartPrepareRequestComponent extends NodeComponent {
@Override
public void process() {
StartProcessContext context = getRequestData();
StartProcessContext context = getContextBean(StartProcessContext.class);
String businessId = context.getStartProcessBo().getBusinessId();
if (StringUtils.isBlank(businessId)) {
throw new ServiceException("启动工作流时必须包含业务ID");
@@ -34,7 +34,7 @@ public class StartResumeComponent extends NodeComponent {
@Override
public void process() {
StartProcessContext context = getRequestData();
StartProcessContext context = getContextBean(StartProcessContext.class);
BusinessStatusEnum.checkStartStatus(context.getExistingInstance().getFlowStatus());
List<Task> taskList = taskService.list(new FlowTask().setInstanceId(context.getExistingInstance().getId()));
if (CollUtil.isEmpty(taskList)) {