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