diff --git a/flow-engine-starter/src/main/java/com/codingapi/flow/AutoConfiguration.java b/flow-engine-starter/src/main/java/com/codingapi/flow/AutoConfiguration.java index c9fc8644..b8bf501d 100644 --- a/flow-engine-starter/src/main/java/com/codingapi/flow/AutoConfiguration.java +++ b/flow-engine-starter/src/main/java/com/codingapi/flow/AutoConfiguration.java @@ -2,8 +2,10 @@ import com.codingapi.flow.gateway.FlowOperatorGateway; import com.codingapi.flow.register.FlowRepositoryRegister; +import com.codingapi.flow.register.FlowScriptContextRegister; import com.codingapi.flow.repository.*; import com.codingapi.flow.runner.FlowDelayTaskRunner; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -15,6 +17,15 @@ public FlowDelayTaskRunner delayTaskRunner() { return new FlowDelayTaskRunner(); } + @Bean + public FlowScriptContextRegister flowScriptContextRegister( + ApplicationContext spring, + FlowOperatorGateway flowOperatorGateway, + FlowRecordRepository flowRecordRepository + ) { + return new FlowScriptContextRegister(spring, flowOperatorGateway,flowRecordRepository); + } + @Bean public FlowRepositoryRegister flowRepositoryRegister( WorkflowRepository workflowRepository, diff --git a/flow-engine-starter/src/main/java/com/codingapi/flow/register/FlowScriptContextRegister.java b/flow-engine-starter/src/main/java/com/codingapi/flow/register/FlowScriptContextRegister.java new file mode 100644 index 00000000..b4b0a4c6 --- /dev/null +++ b/flow-engine-starter/src/main/java/com/codingapi/flow/register/FlowScriptContextRegister.java @@ -0,0 +1,58 @@ +package com.codingapi.flow.register; + +import com.codingapi.flow.gateway.FlowOperatorGateway; +import com.codingapi.flow.operator.IFlowOperator; +import com.codingapi.flow.record.FlowRecord; +import com.codingapi.flow.repository.FlowRecordRepository; +import com.codingapi.flow.script.runtime.FlowScriptContext; +import com.codingapi.flow.script.runtime.IBeanFactory; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; + +import java.util.List; +import java.util.Map; + +@AllArgsConstructor +public class FlowScriptContextRegister implements InitializingBean { + + private final ApplicationContext spring; + private final FlowOperatorGateway flowOperatorGateway; + private final FlowRecordRepository flowRecordRepository; + + @Override + public void afterPropertiesSet() throws Exception { + FlowScriptContext.getInstance().setBeanFactory(new IBeanFactory() { + @Override + public T getBean(Class clazz) { + return spring.getBean(clazz); + } + + @Override + public T getBean(String name, Class clazz) { + return spring.getBean(name, clazz); + } + + @Override + public List getBeans(Class clazz) { + Map beans = spring.getBeansOfType(clazz); + return beans.values().stream().toList(); + } + + @Override + public FlowRecord getRecordById(long id) { + return flowRecordRepository.get(id); + } + + @Override + public IFlowOperator getOperatorById(long userId) { + return flowOperatorGateway.get(userId); + } + + @Override + public List findOperatorsByIds(List ids) { + return flowOperatorGateway.findByIds(ids); + } + }); + } +}