> getModelTenantIds() {
log.info("查询模型的租户集合getTenantIds");
return success(bpmnProcessModelService.getTenantIds());
}
diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java
index 5343fc609..0c6b6e763 100644
--- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java
+++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java
@@ -7,7 +7,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
/**
- * TODO
+ * 根据参数动态实例化可用 Bean
*
* @author wangli
* @since 2024/6/11 21:26
@@ -16,16 +16,13 @@ import org.springframework.context.annotation.Configuration;
public class StarterFeignClientConfiguration {
@Configuration(proxyBeanMethods = false)
- @ConditionalOnProperty(prefix = "workflow.engine.starter", value = "manageable", havingValue = "true", matchIfMissing = true)
@EnableFeignClients(clients = WorkflowCoreService.class)
public static class WorkflowCoreServiceClient {
-
}
@Configuration(proxyBeanMethods = false)
- @ConditionalOnProperty(prefix = "workflow.engine.starter", value = "manageable", havingValue = "false")
+ @ConditionalOnProperty(prefix = "workflow.engine.starter", value = "manageable", havingValue = "true")
@EnableFeignClients(clients = WorkflowManageService.class)
public static class WorkflowManageServiceClient {
-
}
}
diff --git a/workflow-engine-support/pom.xml b/workflow-engine-support/pom.xml
index 6a40185c4..25007a6f7 100644
--- a/workflow-engine-support/pom.xml
+++ b/workflow-engine-support/pom.xml
@@ -15,9 +15,30 @@
com.github.javaparser
javaparser-core
-
- cn.axzo.workflow
- workflow-engine-spring-boot-starter
-
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.3.0
+
+
+ run-custom-code
+ process-classes
+
+ java
+
+
+ cn.axzo.workflow.support.api.CodeGenerator
+
+
+
+ compile
+
+
+
+
+
+
diff --git a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java
new file mode 100644
index 000000000..3f3861f92
--- /dev/null
+++ b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CodeGenerator.java
@@ -0,0 +1,17 @@
+package cn.axzo.workflow.support.api;
+
+/**
+ * Maven plugin execution entrance
+ *
+ * @author wangli
+ * @since 2024/6/12 10:56
+ */
+public class CodeGenerator {
+
+ public static void main(String[] args) throws Exception {
+
+ CoreServiceCodeGeneration.generate();
+ ManageServiceCodeGeneration.generate();
+
+ }
+}
diff --git a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGenerator.java b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGeneration.java
similarity index 83%
rename from workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGenerator.java
rename to workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGeneration.java
index c56d3127b..c313d1728 100644
--- a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGenerator.java
+++ b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/CoreServiceCodeGeneration.java
@@ -1,9 +1,5 @@
package cn.axzo.workflow.support.api;
-import cn.axzo.workflow.client.config.WorkflowEngineClientAutoConfiguration;
-import cn.axzo.workflow.common.annotation.Manageable;
-import cn.axzo.workflow.starter.WorkflowEngineStarterAutoConfiguration;
-import cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration;
import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.ImportDeclaration;
@@ -24,10 +20,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
import com.github.javaparser.printer.DefaultPrettyPrinter;
import com.github.javaparser.printer.Printer;
-import com.github.javaparser.utils.CodeGenerationUtils;
import com.github.javaparser.utils.SourceRoot;
-import lombok.SneakyThrows;
-import org.springframework.cloud.openfeign.FeignClient;
import java.io.FileWriter;
import java.io.IOException;
@@ -42,21 +35,19 @@ import java.util.Optional;
* @author wangli
* @since 2024/6/7 17:14
*/
-public class CoreServiceCodeGenerator {
+public class CoreServiceCodeGeneration {
- @SneakyThrows
- public static void main(String[] args) {
+ public static void generate() throws Exception {
String newClassName = "WorkflowCoreService";
- CompilationUnit originFile = parseOriginFile(newClassName);
-
+// CompilationUnit originFile = parseOriginFile(newClassName);
CompilationUnit testGeneric = genericCode("cn.axzo.workflow.starter.api", newClassName);
writeToStarter(testGeneric, newClassName);
}
- @SneakyThrows
- private static CompilationUnit parseOriginFile(String newClassName) {
- Path sourceCodeRoot = CodeGenerationUtils.mavenModuleRoot(WorkflowEngineStarterAutoConfiguration.class).resolve("src/main/java/cn/axzo/workflow/starter/api/");
+ private static CompilationUnit parseOriginFile(String newClassName) throws Exception {
+ String projectRootDir = System.getProperty("user.dir");
+ Path sourceCodeRoot = Paths.get(projectRootDir, "/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/");
SourceRoot sourceRoot = new SourceRoot(sourceCodeRoot);
sourceRoot.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8);
Printer printer = new DefaultPrettyPrinter();
@@ -84,7 +75,7 @@ public class CoreServiceCodeGenerator {
}
}
- public static CompilationUnit genericCode(String pkg, String newClassName) {
+ private static CompilationUnit genericCode(String pkg, String newClassName) throws Exception {
CompilationUnit cu = new CompilationUnit(pkg);
ClassOrInterfaceDeclaration interfaceDeclaration = setCommon(cu, newClassName);
@@ -97,13 +88,13 @@ public class CoreServiceCodeGenerator {
MethodDeclaration sync = createDefaultMethod("sync", interfaceDeclaration);
sync.setJavadocComment("强制使用‘同步’模式调用该方法,请在调用真实方法前调用该方法\r\n" +
"\r\n" +
- "workflowCoreService.sync().createProcessInstance();\r\n" +
+ " workflowCoreService.sync().createProcessInstance();\r\n" +
"");
MethodDeclaration async = createDefaultMethod("async", interfaceDeclaration);
sync.setJavadocComment("强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法\r\n" +
"\r\n" +
- "workflowCoreService.async().createProcessInstance();\r\n" +
+ " workflowCoreService.async().createProcessInstance();\r\n" +
"");
}
@@ -129,9 +120,9 @@ public class CoreServiceCodeGenerator {
return methodDeclaration;
}
- @SneakyThrows
- private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) {
- Path sourceCodeRoot = CodeGenerationUtils.mavenModuleRoot(WorkflowEngineClientAutoConfiguration.class).resolve("src/main/java/cn/axzo/workflow/client/feign/");
+ private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) throws Exception {
+ String projectRootDir = System.getProperty("user.dir");
+ Path sourceCodeRoot = Paths.get(projectRootDir, "/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/");
SourceRoot sourceRoot = new SourceRoot(sourceCodeRoot);
sourceRoot.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8);
Printer printer = new DefaultPrettyPrinter();
@@ -141,13 +132,13 @@ public class CoreServiceCodeGenerator {
List compilationUnits = sourceRoot.getCompilationUnits();
NodeList> targetMethods = interfaceDeclaration.getMembers();
for (CompilationUnit apiCU : compilationUnits) {
- if (!apiCU.getPrimaryType().filter(e -> e.getAnnotationByClass(Manageable.class).isPresent()).isPresent()) {
+ if (!apiCU.getPrimaryType().filter(e -> e.getAnnotationByName("Manageable").isPresent()).isPresent()) {
addImports(apiCU, cu);
// 类上含有 @Manageable,不进行解析
String interfaceName = apiCU.getPrimaryTypeName().get();
List methods = apiCU.getInterfaceByName(interfaceName).get().findAll(MethodDeclaration.class);
for (MethodDeclaration method : methods) {
- if (!method.getAnnotationByClass(Manageable.class).isPresent()) {
+ if (!method.getAnnotationByName("Manageable").isPresent()) {
MethodDeclaration methodDeclaration = method.clone();
methodDeclaration.setType(changeReturnType(methodDeclaration.getType()));
targetMethods.add(methodDeclaration);
@@ -177,10 +168,10 @@ public class CoreServiceCodeGenerator {
private static ClassOrInterfaceDeclaration setCommon(CompilationUnit cu, String newClassName) {
ClassOrInterfaceDeclaration classOrInterfaceDeclaration = cu.addInterface(newClassName).setPublic(true);
classOrInterfaceDeclaration.setJavadocComment("Workflow Engine Starter Core Service");
- classOrInterfaceDeclaration.addAndGetAnnotation(FeignClient.class)
- .addPair("name", new StringLiteralExpr("workflow-engine-starter"))
+ classOrInterfaceDeclaration.addAndGetAnnotation("FeignClient")
+ .addPair("name", new StringLiteralExpr("workflow-engine-starter-core"))
.addPair("url", new StringLiteralExpr("${axzo.service.workflow-engine:workflow-engine:8080}"))
- .addPair("configuration", new ClassExpr(new ClassOrInterfaceType(null, WorkflowEngineStarterFeignConfiguration.class.getSimpleName())));
+ .addPair("configuration", new ClassExpr(new ClassOrInterfaceType("WorkflowEngineStarterFeignConfiguration")));
cu.addImport("cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration", false, false);
cu.addImport("cn.axzo.workflow.common.util.ThreadUtil", false, false);
cu.addImport("cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC", true, false);
diff --git a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGenerator.java b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGeneration.java
similarity index 73%
rename from workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGenerator.java
rename to workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGeneration.java
index 00fb79bcb..ffa4a7831 100644
--- a/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGenerator.java
+++ b/workflow-engine-support/src/main/java/cn/axzo/workflow/support/api/ManageServiceCodeGeneration.java
@@ -1,8 +1,5 @@
package cn.axzo.workflow.support.api;
-import cn.axzo.workflow.client.config.WorkflowEngineClientAutoConfiguration;
-import cn.axzo.workflow.common.annotation.Manageable;
-import cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration;
import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.ImportDeclaration;
@@ -23,10 +20,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
import com.github.javaparser.printer.DefaultPrettyPrinter;
import com.github.javaparser.printer.Printer;
-import com.github.javaparser.utils.CodeGenerationUtils;
import com.github.javaparser.utils.SourceRoot;
-import lombok.SneakyThrows;
-import org.springframework.cloud.openfeign.FeignClient;
import java.io.FileWriter;
import java.io.IOException;
@@ -40,9 +34,9 @@ import java.util.List;
* @author wangli
* @since 2024/6/11 17:38
*/
-public class ManageServiceCodeGenerator {
- @SneakyThrows
- public static void main(String[] args) {
+public class ManageServiceCodeGeneration {
+
+ public static void generate() throws Exception {
String newClassName = "WorkflowManageService";
CompilationUnit testGeneric = genericCode("cn.axzo.workflow.starter.api", newClassName);
@@ -60,7 +54,7 @@ public class ManageServiceCodeGenerator {
}
}
- public static CompilationUnit genericCode(String pkg, String newClassName) {
+ private static CompilationUnit genericCode(String pkg, String newClassName) throws Exception {
CompilationUnit cu = new CompilationUnit(pkg);
ClassOrInterfaceDeclaration interfaceDeclaration = setCommon(cu, newClassName);
@@ -73,20 +67,20 @@ public class ManageServiceCodeGenerator {
MethodDeclaration sync = createDefaultMethod("sync", interfaceDeclaration);
sync.setJavadocComment("强制使用‘同步’模式调用该方法,请在调用真实方法前调用该方法\r\n" +
"\r\n" +
- "workflowCoreService.sync().createProcessInstance();\r\n" +
+ " workflowManageService.sync().getTenantIds();\r\n" +
"");
MethodDeclaration async = createDefaultMethod("async", interfaceDeclaration);
- sync.setJavadocComment("强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法\r\n" +
+ async.setJavadocComment("强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法\r\n" +
"\r\n" +
- "workflowCoreService.async().createProcessInstance();\r\n" +
+ " workflowManageService.async().getTenantIds();\r\n" +
"");
}
private static MethodDeclaration createDefaultMethod(String methodName, ClassOrInterfaceDeclaration interfaceDeclaration) {
// 将sync方法添加到WorkflowCoreService类中
MethodDeclaration methodDeclaration = interfaceDeclaration.addMethod(methodName, Modifier.Keyword.DEFAULT);
- methodDeclaration.setType(new ClassOrInterfaceType("WorkflowCoreService"));
+ methodDeclaration.setType(new ClassOrInterfaceType("WorkflowManageService"));
// 创建方法体
BlockStmt methodBody = new BlockStmt();
@@ -105,9 +99,9 @@ public class ManageServiceCodeGenerator {
return methodDeclaration;
}
- @SneakyThrows
- private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) {
- Path sourceCodeRoot = CodeGenerationUtils.mavenModuleRoot(WorkflowEngineClientAutoConfiguration.class).resolve("src/main/java/cn/axzo/workflow/client/feign/");
+ private static void addMethods(ClassOrInterfaceDeclaration interfaceDeclaration, CompilationUnit cu) throws Exception {
+ String projectRootDir = System.getProperty("user.dir");
+ Path sourceCodeRoot = Paths.get(projectRootDir, "/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/");
SourceRoot sourceRoot = new SourceRoot(sourceCodeRoot);
sourceRoot.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8);
Printer printer = new DefaultPrettyPrinter();
@@ -117,18 +111,30 @@ public class ManageServiceCodeGenerator {
List compilationUnits = sourceRoot.getCompilationUnits();
NodeList> targetMethods = interfaceDeclaration.getMembers();
for (CompilationUnit apiCU : compilationUnits) {
- if (!apiCU.getPrimaryType().filter(e -> e.getAnnotationByClass(Manageable.class).isPresent()).isPresent()) {
+ // 如果类上包含 @Manageable 注解,则直接将所有方法解析进新目标接口中
+ if (apiCU.getPrimaryType().filter(e -> e.getAnnotationByName("Manageable").isPresent()).isPresent()) {
addImports(apiCU, cu);
// 类上含有 @Manageable,不进行解析
- String interfaceName = apiCU.getPrimaryTypeName().get();
- List methods = apiCU.getInterfaceByName(interfaceName).get().findAll(MethodDeclaration.class);
- for (MethodDeclaration method : methods) {
- if (!method.getAnnotationByClass(Manageable.class).isPresent()) {
- MethodDeclaration methodDeclaration = method.clone();
- methodDeclaration.setType(changeReturnType(methodDeclaration.getType()));
- targetMethods.add(methodDeclaration);
- }
- }
+ addMethod0(apiCU, targetMethods, false);
+ } else {
+ addImports(apiCU, cu);
+ addMethod0(apiCU, targetMethods, true);
+ }
+ }
+ }
+
+ private static void addMethod0(CompilationUnit apiCU, NodeList> targetMethods, boolean containAnnotation) {
+ String interfaceName = apiCU.getPrimaryTypeName().get();
+ List methods = apiCU.getInterfaceByName(interfaceName).get().findAll(MethodDeclaration.class);
+ for (MethodDeclaration method : methods) {
+ if (containAnnotation && method.getAnnotationByName("Manageable").isPresent()) {
+ MethodDeclaration methodDeclaration = method.clone();
+ methodDeclaration.setType(changeReturnType(methodDeclaration.getType()));
+ targetMethods.add(methodDeclaration);
+ } else if (!containAnnotation && !method.getAnnotationByName("Manageable").isPresent()) {
+ MethodDeclaration methodDeclaration = method.clone();
+ methodDeclaration.setType(changeReturnType(methodDeclaration.getType()));
+ targetMethods.add(methodDeclaration);
}
}
}
@@ -153,10 +159,10 @@ public class ManageServiceCodeGenerator {
private static ClassOrInterfaceDeclaration setCommon(CompilationUnit cu, String newClassName) {
ClassOrInterfaceDeclaration classOrInterfaceDeclaration = cu.addInterface(newClassName).setPublic(true);
classOrInterfaceDeclaration.setJavadocComment("Workflow Engine Starter Management Service");
- classOrInterfaceDeclaration.addAndGetAnnotation(FeignClient.class)
- .addPair("name", new StringLiteralExpr("workflow-engine-starter"))
+ classOrInterfaceDeclaration.addAndGetAnnotation("FeignClient")
+ .addPair("name", new StringLiteralExpr("workflow-engine-starter-manage"))
.addPair("url", new StringLiteralExpr("${axzo.service.workflow-engine:workflow-engine:8080}"))
- .addPair("configuration", new ClassExpr(new ClassOrInterfaceType(null, WorkflowEngineStarterFeignConfiguration.class.getSimpleName())));
+ .addPair("configuration", new ClassExpr(new ClassOrInterfaceType("WorkflowEngineStarterFeignConfiguration")));
cu.addImport("cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration", false, false);
cu.addImport("cn.axzo.workflow.common.util.ThreadUtil", false, false);
cu.addImport("cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC", true, false);