diff --git a/README.md b/README.md
index 8091762a3777bcba0afa50958f319166ce53120a..cb4632fd27561de756107d5fd5ca66a7a2946e0b 100644
--- a/README.md
+++ b/README.md
@@ -19,10 +19,11 @@ coderMaker 立足于低代码平台,致力于解决软件开发过程中的效
0. 所建即所得,文档即代码的代码生成服务理念
1. 提供便捷且所建即所得的代码生成服务
2. 提供便捷的sql脚本(支持分库分表)生成服务
-3. 提供一键式的数据库e-r图生成服务
+3. 提供一键式的数据库e-r图生成服务,以及从plantUML-er图中解析还原到sql脚本的能力
4. 提供基于springboot,cola,dubbo应用框架和架构下的应用级代码生成服务
5. 提供基于plantuml类图的dynamic-ddd模块级的代码生成服务
6. 支持基于数据库表的代码生成和支持plantuml领域文档的代码生成服务
+7. 支持基于数据库表+DDD+plantUML类图文档+plantUML调用时序文档的代码生成服务
#### 软件架构
1. 整个项目分为多个工程模块
@@ -59,13 +60,80 @@ codemaker-cola:基于cola应用框架生成的代码会放在这里
#### 版本变更
-1. 实现codermaker-core代码生成功能 1.0.0
-2. 实现数据库表sql生成功能 1.0.0
-3. 实现数据库表e-r图生成功能 1.0.1
-4. 实现代码生成极速模式 1.0.2
-5. 实现dubbo应用的代码生成 1.0.3,详情见changeList文件
-6. 实现ddd业务模型的代码生成 1.0.4,详情见changeList文件
-7. 实现springboot,cola,dubbo+ddd的代码生成 1.1.0,详情见changeList文件
+##### 版本-1.0.0
+
+简介: 实现codermaker-core代码生成功能
+
+##### 版本-1.0.1
+简介: 实现数据库表e-r图生成功能
+
+##### 版本-1.0.2
+简介: 实现代码生成极速模式
+
+##### 版本-1.0.3
+简介: 实现dubbo应用的代码生成
+
+##### 版本-1.0.4
+简介: 实现ddd业务模型的代码生成
+
+1. 基于plantUML文档生成代码,基于ddd思想和模式生成模块级的代码内容
+2. 增加makeddd接口,支持生成dynamicddd模块的代码
+3. 引入支持ddd代码生成的配置(projecttemplate-dynamicddd.properties)和代码模板(template/dynamicddd)
+4. codemaker-core模块resources目录增加ddd-plantuml目录存放plantUML类图
+5. 支持ddd的一些模式代码生成:实体模式,值对象模式,聚合根模式,工厂模式,仓库模式,防腐层模式,服务模式,模块模式,CQE模式,领域网关
+6. 产出部分公共代码生成服务方法
+7. 优化代码生成核心链路代码模型,针对ddd代码生成做了分层处理
+8. 修复若干其他bug
+
+##### 版本-0.0.2
+简介: 本次版本新增codemaker-dberparse模块,支持plantuml er图解析为sql ddl create语句,已集成到codemaker-dbops
+ 模块中。
+##### 版本-1.1.0
+简介: 实现springboot,cola,dubbo+ddd的代码生成
+
+1. 支持cola应用架构代码生成,增加cola应用的template代码模板
+2. 增加基于plantuml类图的领域服务代码生成接口
+ /getproject/valueobject
+ /getproject/msgbody
+ /getproject/gataway
+ /getproject/acladapter
+ /getproject/command
+ /getproject/executor
+ /getproject/factory
+ /getproject/dtoboconvert
+ /getproject/voboconvert
+ /getproject/doboconvert
+3. 精简不同应用框架的代码生成配置
+ 在每个应用框架配置下增加dubbo.domain.plantuml配置项,配置plantuml类图文件名称,支持基于类图-ddd的代码生成
+ 如果不配置则不能借助plantuml类图生成基于领域服务ddd的代码,而是生成基于数据库表的常规代码
+ 去除以下三个配置,集中到application.properties文件中
+ *.global.package
+ *.global.author
+ *.global.applicationName
+
+4. 在springboot,cola,dubbo的代码模板目录下增加ddd元素的tempalte代码模板
+5. 将dynamic-ddd的代码生成服务整合到springboot,cola,dubbo的代码生成服务中,支持基于DDD思想的代码生成
+6. 扩展plantuml中类图标签,基于BO派生多个代码生成对象(vo,dto,facade,doboconvert,controller,voboconvert,dtoboconvert)
+7. 整合底层代码支持一套api,一套服务支撑springboot,cola,dubbo应用级代码生成和dynamic-ddd模块级代码生成
+8. 修复多个兼容性bug
+9. 整体上支持基于数据库表结构的代码生成和基于plantUML类图文档的代码生成
+
+##### 版本-1.2.0-alpha
+简介: 实现springboot,cola,dubbo+ddd的代码生成的基础上增加解析调用时序图的逻辑,将调用时序代码逻辑融入到生成的代码方法里
+1. 支持event模型生成,
+2. 支持mqconsumer,applistener,mqproducer,mqhandler生成
+3. 屏蔽扩展类dto带有bo属性的字段
+4. 增加对plantuml domain类图内容的校验,比如重复字段和重复方法
+5. 扩展动态ddd的代码生成能力,比如一个BO下出现多个facade,controller的接口
+6. 提高plantuml内容的解析兼容性和稳定性
+7. 增加解析plantUML调用时序文档的能力,并将调用逻辑融入代码生成的方法里
+8. 支持读写分离的dubbo,restController接口调用
+9. 支持将领域值对象枚举类暴露到rpc client端
+10. 优化convert代码生成
+11. gatawayimpl 与 repositoryimpl分开生成
+12. 优化包路径生成模式
+13. 优化访问描述符和代码注释
+14. 读取plantuml文件对于方法的解析将方法参数独立解析出来
#### 配置文件说明
1.application.properties:代码生成服务的核心配置
diff --git a/changeList b/changeList
index b9707e74063a1fde000401523214c01c816b7842..169e108ee3198bc2e5d81e1375954d64f0eda48a 100644
--- a/changeList
+++ b/changeList
@@ -61,3 +61,31 @@
模块中。
+9. verison 1.2.0-alpha 变更
+ 1.支持event模型生成,
+ 2.支持mqconsumer,applistener,mqproducer,mqhandler生成
+ 3.屏蔽扩展类dto带有bo属性的字段
+ 4.增加对plantuml domain类图内容的校验,比如重复字段和重复方法
+ 5.扩展动态ddd的代码生成能力,比如一个BO下出现多个facade,controller的接口
+ 6.提高plantuml内容的解析兼容性和稳定性
+ 7.支持动态链路调用plantuml-调用链路图解析
+ 8.支持读写分离的dubbo,restController接口调用
+ 9.支持将领域值对象枚举类暴露到dubbo client端
+ 10.优化convert代码生成
+ 11.gatawayimpl 与 repositoryimpl分开生成
+ 12.优化包路径生成模式
+ 13.优化访问描述符和代码注释
+ 14.读取plantuml文件对于方法的解析将方法参数独立解析出来
+
+
+
+10. verison 1.2.1-beta 变更(todo)
+ 1.支持默认带工具类SpringEventPublisher帮助事件发布与消费异步化
+ 2.支持事件发布异步化的代码绘制(产生事件->发布->消费事件)
+ 3.重构读取plantUML文件的相关逻辑降低复杂度
+ 4.重新梳理读取plantUML文件的相关路径,优化为按项目维度分别存放
+ 5.支持复杂场景下的代码绘制能力,进行精细化控制(如listbo,listvo的转换,代码参数动态绘制引用等)
+ 6.支持Page对象生成到代码里
+ 7.支持通过时序图的调用方法列表补充构建接口和类的方法,辅助完善业务调用流程(如xxMapper.getByCode不在XXMapper里,则通过时序图里的信息进行动态补充)
+ 8.根据动态调用方法绘制内容将return body也进行动态化绘制
+ 9.增加对基础设施层-适配层的调用绘制
\ No newline at end of file
diff --git a/codemaker-cola/cola-app/pom.xml b/codemaker-cola/cola-app/pom.xml
index f3b15d6aba96960b2e5dd60d6b3a8a512ce65e18..8e220c1a22d1d1623801507f36f9cd5ef8f7473b 100644
--- a/codemaker-cola/cola-app/pom.xml
+++ b/codemaker-cola/cola-app/pom.xml
@@ -55,20 +55,6 @@
1.0.2-SNAPSHOT
-
- com.codemaker.dubbo
- dubbo-api
- 1.0-SNAPSHOT
-
-
-
-
-
-
- com.codemaker.dubbo
- dubbo-common
- 1.0-SNAPSHOT
-
diff --git a/codemaker-cola/cola-infrast/pom.xml b/codemaker-cola/cola-infrast/pom.xml
index df2696b46093f95c0608cf83548d7e0223a70a49..5d141910db19e9b0b0298da9c720e4a5d9c52eb6 100644
--- a/codemaker-cola/cola-infrast/pom.xml
+++ b/codemaker-cola/cola-infrast/pom.xml
@@ -10,8 +10,8 @@
1.0-SNAPSHOT
- org.example
- codemaker-cola
+ com.codemaker.cola
+ cola-infrast
1.0-SNAPSHOT
cola-infrast
diff --git a/codemaker-core/pom.xml b/codemaker-core/pom.xml
index e2ff729a6672c15bf8ee1e889877b9f4ce6abcaa..74b169ce6d5176341ab043bd17750d1a560e1da3 100644
--- a/codemaker-core/pom.xml
+++ b/codemaker-core/pom.xml
@@ -11,7 +11,7 @@
com.coderman.codemaker
codemaker-core
- 1.1.0-SNAPSHOT
+ 1.2.0--
codemaker-core
@@ -161,17 +161,12 @@
spring-boot-test
test
-
- org.springframework.boot
- spring-boot-test
- test
-
com.coderman.codermaker.dbergenerator
codemaker-dbergenerator
- 1.0.0-SNAPSHOT
+ 1.0.1-SNAPSHOT
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/ImportPackageService.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/ImportPackageService.java
index 952b361e0e40cf4fdc7e95554f267f7a764e14b3..827ef3ea22a5208b28ad32fc91a1f93d19acc3cd 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/ImportPackageService.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/ImportPackageService.java
@@ -42,59 +42,61 @@ public class ImportPackageService {
importClassSet.addAll(abstractClassBean.getImportClassList());
}
- //对方法进行探测
- abstractClassBean.getMethodBeanList().forEach(methodBean -> {
- String returnClassName = methodBean.getReturnClass();
+ if(CollectionUtils.isNotEmpty(abstractClassBean.getMethodBeanList())){
+ //对方法进行探测
+ abstractClassBean.getMethodBeanList().forEach(methodBean -> {
+ String returnClassName = methodBean.getReturnClass();
- String defaultPackageName = defaultPackageConfig.getPackage(returnClassName);
- if(!StringUtils.isEmpty(defaultPackageName)){
- importClassSet.add(defaultPackageName);
- }
+ String defaultPackageName = defaultPackageConfig.getPackage(returnClassName);
+ if(!StringUtils.isEmpty(defaultPackageName)){
+ importClassSet.add(defaultPackageName);
+ }
- String methodName = methodBean.getMethodName();
+ String methodName = methodBean.getMethodName();
- //对方法参数进行探测
- String params = methodName.substring(methodName.indexOf("(")).replace("(","").replace(")","").trim();
- if(StringUtils.isNotEmpty(params) && params.length() > 3){
- String [] arr = params.split(",");
- for (String param : arr){
- String importPackage = defaultPackageConfig.getPackage(param.trim());
- if(!StringUtils.isEmpty(importPackage)){
- importClassSet.add(importPackage);
+ //对方法参数进行探测
+ String params = methodName.substring(methodName.indexOf("(")).replace("(","").replace(")","").trim();
+ if(StringUtils.isNotEmpty(params) && params.length() > 3){
+ String [] arr = params.split(",");
+ for (String param : arr){
+ String importPackage = defaultPackageConfig.getPackage(param.trim());
+ if(!StringUtils.isEmpty(importPackage)){
+ importClassSet.add(importPackage);
+ }
}
}
- }
- plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
+ plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
- if(!abstractClassBean.getPackageName().equals(v.getPackageName())){
- //返回参数匹配
- if(returnClassName.toLowerCase().contains(k.toLowerCase())){
+ if(!abstractClassBean.getPackageName().equals(v.getPackageName())){
+ //返回参数匹配
+ if(returnClassName.toLowerCase().contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ /**
+ * 方法参数匹配
+ */
+ if(methodBean.getMethodName().toLowerCase().contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ }
+
+ });
+
+ plantUmlContextBean.getEnumBeanMap().forEach((k,v)->{
+ if(k.toLowerCase().equals(returnClassName.toLowerCase())){
importClassSet.add(v.getPackageName()+"."+v.getClassName());
}
- /**
- * 方法参数匹配
- */
if(methodBean.getMethodName().toLowerCase().contains(k.toLowerCase())){
importClassSet.add(v.getPackageName()+"."+v.getClassName());
}
- }
-
- });
-
- plantUmlContextBean.getEnumBeanMap().forEach((k,v)->{
- if(k.toLowerCase().equals(returnClassName.toLowerCase())){
- importClassSet.add(v.getPackageName()+"."+v.getClassName());
- }
- if(methodBean.getMethodName().toLowerCase().contains(k.toLowerCase())){
- importClassSet.add(v.getPackageName()+"."+v.getClassName());
- }
+ });
});
- });
+ }
//对属性进行探测
if (CollectionUtils.isNotEmpty(abstractClassBean.getFieldBeanList())) {
- abstractClassBean.getFieldBeanList().forEach(fieldBean -> {
+ abstractClassBean.getFieldBeanList().stream().filter(fieldBean -> !fieldBean.getFieldName().contains("*")).forEach(fieldBean -> {
String fieldClass = fieldBean.getFieldName().trim().toLowerCase();
String defaultPackageName = defaultPackageConfig.getPackage(fieldClass);
@@ -117,6 +119,13 @@ public class ImportPackageService {
importClassSet.add(v.getPackageName()+"."+v.getClassName());
}
});
+
+
+ plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{
+ if(fieldClass.contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ });
});
}
@@ -178,7 +187,7 @@ public class ImportPackageService {
//对属性进行探测
if (CollectionUtils.isNotEmpty(abstractClassBean.getFieldBeanList())) {
- abstractClassBean.getFieldBeanList().forEach(fieldBean -> {
+ abstractClassBean.getFieldBeanList().stream().filter(fieldBean -> !fieldBean.getFieldName().contains("*")).forEach(fieldBean -> {
String fieldClass = fieldBean.getFieldName().trim().toLowerCase();
String defaultPackageName = defaultPackageConfig.getPackage(fieldClass);
@@ -202,6 +211,12 @@ public class ImportPackageService {
importClassSet.add(v.getPackageName()+"."+v.getClassName());
}
});
+
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
+ if(fieldClass.contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ });
}
});
@@ -214,16 +229,22 @@ public class ImportPackageService {
String implClass = abstractClassBean.getRelationClassStr().replace("implements","").trim();
plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
if(!abstractClassBean.getPackageName().equals(v.getPackageName())){
- //返回参数匹配
if(implClass.toLowerCase().contains(k.toLowerCase())){
importClassSet.add(v.getPackageName()+"."+v.getClassName());
}
}
});
}
- }
-
+ String implClass = abstractClassBean.getRelationClassStr().replace("implements","").trim();
+ plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{
+ if(!abstractClassBean.getPackageName().equals(v.getPackageName())){
+ if(implClass.toLowerCase().contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ }
+ });
+ }
if(importClassSet.isEmpty()){
@@ -291,6 +312,24 @@ public class ImportPackageService {
}
+ /**
+ * 设置包名
+ * @param abstractClassBean
+ * @param moduleTag 当前类元素所在模块
+ * 返回的包路径简化为
+ * 全局包路径+模块标示+plantUMLPackage
+ */
+ public void setPackageNameWithModule(AbstractClassBean abstractClassBean, String moduleTag){
+ if(org.apache.commons.lang3.StringUtils.isEmpty(abstractClassBean.getPlantUMLPackage())){
+ String packageName = appServiceConfig.getPackage()+"."+moduleTag;
+ abstractClassBean.setPackageName(packageName);
+ }else {
+ String packageName = appServiceConfig.getPackage()+"."+moduleTag+"."+abstractClassBean.getPlantUMLPackage();
+ abstractClassBean.setPackageName(packageName);
+ }
+ }
+
+
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteService.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteService.java
index c18e00f360f625c590fdf7f9aa5a0005077af6ba..f72a7b8fb05c7425b60f8aeeff1a7c2546d9676e 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteService.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteService.java
@@ -57,12 +57,11 @@ public abstract class WriteService {
* @param classContentBean
*/
public void writeClassFileV2(ClassContentBean classContentBean) {
- log.info("classContentBean = "+ JSON.toJSONString(classContentBean));
String filePath = getClassPackageFilePath(classContentBean);
try {
FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
} catch (IOException e) {
- e.printStackTrace();
+ log.error("error",e);
}
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAppWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAppWriteServiceImpl.java
index 7441427a4087b755c1f2b438e8f623b47384df55..228676785c3e1bc8d7b57bbf58ddcee2c17baa09 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAppWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAppWriteServiceImpl.java
@@ -40,7 +40,7 @@ public class ColaAppWriteServiceImpl extends WriteService implements IWriteFileS
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName().toLowerCase().endsWith("facadeimpl") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"FacadeImpl");
- classContentBean.setChildPackageName("app.facade.impl");
+ classContentBean.setChildPackageName("app.facadeimpl");
classContentBean.setModulePath(projectTemplateColaConfig.getModuleAppPath());
writeClassFile(classContentBean);
@@ -48,6 +48,7 @@ public class ColaAppWriteServiceImpl extends WriteService implements IWriteFileS
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
}else {
+ //lassContentBean.setClassPackageName(appServiceConfig.getPackage()+"/app/facadeimpl");
//走文档里的package包生成方式
writeClassFileV2(classContentBean);
}
@@ -94,11 +95,32 @@ public class ColaAppWriteServiceImpl extends WriteService implements IWriteFileS
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
- classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setModulePath(projectTemplateColaConfig.getModuleAppPath());
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".app.convert");
+
writeClassFileV2(classContentBean);
}
+ //写app.listener
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_LISTENER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("app.listener");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAppPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+
//指定服务类 or 工具类
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaClientWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaClientWriteServiceImpl.java
index 3db8da34a8cc6cb1e4ffba30517f83eab5215f90..621d24b800055b7b2bf9de4c7cdf6ea107b75cfc 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaClientWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaClientWriteServiceImpl.java
@@ -85,6 +85,24 @@ public class ColaClientWriteServiceImpl extends WriteService implements IWriteFi
}
}
+ //写domain.enum
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ENUM.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("api.enums");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleClientPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".api.enums");
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaDomainWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaDomainWriteServiceImpl.java
index 41b0a466dcd2084a5bafdfac95780def85234766..7c0a7256f2676c8c0b15bec149f4bd415f9bb485 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaDomainWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaDomainWriteServiceImpl.java
@@ -118,6 +118,28 @@ public class ColaDomainWriteServiceImpl extends WriteService implements IWriteFi
}
}
+
+ //写domain.event
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.EVENT_BODY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.event");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+
+ }
+
+
//写domain.gataway
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.GATAWAY.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
@@ -153,6 +175,7 @@ public class ColaDomainWriteServiceImpl extends WriteService implements IWriteFi
writeClassFileV2(classContentBean);
}
}
+
//写service
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaInfrastWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaInfrastWriteServiceImpl.java
index d4fbc08c4feb97176af5eadd460ea72ba64a0420..d330c535bf92386d36fb254b33cbae2ed0e6f56a 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaInfrastWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaInfrastWriteServiceImpl.java
@@ -65,15 +65,32 @@ public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteF
writeMapperXml(classContentBean);
}
-
-
//写domain.gataway.impl
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.GATAWAY_IMPL.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
- classContentBean.setHumpClassName(writeContentBean.getHumpClassName()+"Impl");
- classContentBean.setChildPackageName("gataway.impl");
- classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".impl");
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("gatawayimpl");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".gatawayimpl");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.gatawayimpl");
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写domain.repository.impl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.REPOSITORY_IMPL.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("repositoryimpl");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".repositoryimpl");
classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
//走默认的包生成方式
@@ -81,10 +98,12 @@ public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteF
writeClassFile(classContentBean);
}else {
//走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.repositoryimpl");
writeClassFileV2(classContentBean);
}
}
+
//写infrast.acl
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
@@ -124,12 +143,6 @@ public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteF
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
}else {
- if(!classContentBean.getClassPackageName().endsWith("impl") || !classContentBean.getClassPackageName().contains("impl")){
- classContentBean.setClassPackageName(classContentBean.getClassPackageName()+".impl");
- }
- if(!classContentBean.getHumpClassName().endsWith("impl") || !classContentBean.getHumpClassName().contains("impl")){
- classContentBean.setHumpClassName(classContentBean.getHumpClassName()+"Impl");
- }
//走文档里的package包生成方式
writeClassFileV2(classContentBean);
}
@@ -152,6 +165,8 @@ public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteF
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.dataconvert");
+
writeClassFileV2(classContentBean);
}
@@ -169,6 +184,69 @@ public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteF
writeClassFile(classContentBean);
}
+
+ //写infras.mq.consumer
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_CONSUMER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("mq.consumer");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.mq.consumer");
+
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infras.mq.handler
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_HANDLER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("mq.handler");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.mq.handler");
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infras.mq.producer
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_PRODUCER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("mq.producer");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.mq.producer");
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+
}
@Override
@@ -229,7 +307,7 @@ public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteF
*/
private String getFilePath(String childPackageName, String humpClassName, String classSuffix) {
String packageName = appServiceConfig.getPackage();
- String packagePath = packageName.replace(".", "/") + "/dao";
+ String packagePath = packageName.replace(".", "/") + "/infrast/dao";
packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
String fileName = humpClassName + classSuffix;
return projectTemplateColaConfig.getModuleInfrastPath() + packagePath + "/" + fileName;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboApiWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboApiWriteServiceImpl.java
index 7bf93a80792154819d4213335d5265c54a56cefe..20ce8b3d0efdfecec6f086e92fa67a9bfd2a0f05 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboApiWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboApiWriteServiceImpl.java
@@ -65,7 +65,7 @@ public class DubboApiWriteServiceImpl extends WriteService implements IWriteFile
writeClassFileV2(classContentBean);
}
}
-
+ //写facade
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
@@ -75,6 +75,23 @@ public class DubboApiWriteServiceImpl extends WriteService implements IWriteFile
classContentBean.setClassSuffix("Facade.java");
classContentBean.setModulePath(projectTemplateDubboConfig.getModuleApiPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写domain.enum
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ENUM.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("enums");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleApiPath());
+
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCoreWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCoreWriteServiceImpl.java
index 6aa99c6a34715b212a815d8c371236f6e2dc83f8..de0dfc286b73806501cbc811611af55d841f0eee 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCoreWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCoreWriteServiceImpl.java
@@ -209,6 +209,27 @@ public class DubboCoreWriteServiceImpl extends WriteService implements IWriteFi
}
+
+ //写domain.event
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.EVENT_BODY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.event");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+
+ }
+
//写domain.gataway
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.GATAWAY.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
@@ -231,9 +252,9 @@ public class DubboCoreWriteServiceImpl extends WriteService implements IWriteFi
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.GATAWAY_IMPL.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
- classContentBean.setHumpClassName(writeContentBean.getHumpClassName()+"Impl");
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("gataway.impl");
- classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".impl");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
//走默认的包生成方式
@@ -284,12 +305,6 @@ public class DubboCoreWriteServiceImpl extends WriteService implements IWriteFi
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
}else {
- if(!classContentBean.getClassPackageName().endsWith("impl") || !classContentBean.getClassPackageName().contains("impl")){
- classContentBean.setClassPackageName(classContentBean.getClassPackageName()+".impl");
- }
- if(!classContentBean.getHumpClassName().endsWith("impl") || !classContentBean.getHumpClassName().contains("impl")){
- classContentBean.setHumpClassName(classContentBean.getHumpClassName()+"Impl");
- }
//走文档里的package包生成方式
writeClassFileV2(classContentBean);
}
@@ -357,6 +372,85 @@ public class DubboCoreWriteServiceImpl extends WriteService implements IWriteFi
writeClassFileV2(classContentBean);
}
}
+ //写app.listener
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_LISTENER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("app.listener");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infras.mq.consumer
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_CONSUMER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("infrast.mq.consumer");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.mq.consumer");
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infras.mq.handler
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_HANDLER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("infrast.mq.handler");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.mq.handler");
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infras.mq.producer
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MQ_PRODUCER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("infrast.mq.producer");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ classContentBean.setClassPackageName(appServiceConfig.getPackage()+".infrast.mq.producer");
+ writeClassFileV2(classContentBean);
+ }
+ }
+
}
@Override
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ClassConvertFactory.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ClassConvertFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b0463140bcf5f945636de8f635396486220533cf
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ClassConvertFactory.java
@@ -0,0 +1,752 @@
+package com.coderman.codemaker.app.dynamicddd;
+
+import com.coderman.codemaker.bean.plantuml.*;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import com.coderman.codemaker.utils.StringHelperUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.assertj.core.util.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Description:类转换构建工厂
+ * date: 2021/10/18
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Service
+public class ClassConvertFactory {
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
+ /**
+ * 处理派生类bo->dto
+ *
+ * @param domainBOClassList
+ * @return
+ */
+ public List getDTOClassList(List domainBOClassList) {
+ List dtoClassList = new ArrayList<>();
+
+ for (ClassBean classBean : domainBOClassList) {
+ List fieldBeanList = classBean.buildSimpleFieldList();
+ String[] classNameArr = classBean.getExtendFieldBean().getDtoKeyList();
+ for (String className : classNameArr) {
+ ClassBean dtoClassBean = new ClassBean();
+ if (!className.toLowerCase().endsWith("dto")) {
+ dtoClassBean.setClassName(className + "DTO");
+ } else {
+ dtoClassBean.setClassName(className);
+ }
+ dtoClassBean.setFieldBeanList(fieldBeanList);
+ dtoClassBean.setClassDesc(classBean.getClassDesc());
+ dtoClassBean.setMethodBeanList(Lists.newArrayList());
+ dtoClassBean.setPlantUMLPackage("api.dto");
+ dtoClassBean.setDerivedChainClassList(Lists.newArrayList(classBean.getClassName()));
+ dtoClassList.add(dtoClassBean);
+ }
+ }
+ return dtoClassList;
+ }
+
+ /**
+ * 处理派生类bo->dto
+ *
+ * @param domainBOClassList
+ * @return
+ */
+ public List getVOClassList(List domainBOClassList) {
+ List dtoClassList = new ArrayList<>();
+
+ for (ClassBean classBean : domainBOClassList) {
+ List fieldBeanList = classBean.buildSimpleFieldList();
+ String[] classNameArr = classBean.getExtendFieldBean().getVoKeyList();
+ if (classNameArr == null || classNameArr.length == 0) {
+ continue;
+ }
+ for (String className : classNameArr) {
+ ClassBean dtoClassBean = new ClassBean();
+ if (!className.toLowerCase().endsWith("vo")) {
+ dtoClassBean.setClassName(className + "VO");
+ } else {
+ dtoClassBean.setClassName(className);
+ }
+ dtoClassBean.setFieldBeanList(fieldBeanList);
+ dtoClassBean.setClassDesc(classBean.getClassDesc());
+ dtoClassBean.setMethodBeanList(Lists.newArrayList());
+ dtoClassBean.setPlantUMLPackage("adapter.vo");
+ dtoClassList.add(dtoClassBean);
+ }
+ }
+
+ return dtoClassList;
+ }
+
+
+ /**
+ * 处理派生类dto->facade
+ *
+ * @param dtoClassList
+ * @return
+ */
+ public List getFacadeInterfaceList(List dtoClassList) {
+ List facadeInterfaceList = new ArrayList<>();
+
+ for (ClassBean classBean : dtoClassList) {
+ InterfaceBean interfaceBean = new InterfaceBean();
+ int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainDerivedElementEnum.DTO.getElement());
+ if (x >= 0) {
+ String className = classBean.getClassName().substring(0, x) + "Facade";
+ interfaceBean.setClassName(className);
+ interfaceBean.setPlantUMLPackage("api.facade");
+ interfaceBean.setClassDesc(classBean.getClassDesc());
+ interfaceBean.setMethodBeanList(Lists.newArrayList());
+ facadeInterfaceList.add(interfaceBean);
+ }
+ }
+ return facadeInterfaceList;
+ }
+
+ /**
+ * 处理派生类dto-bo convert
+ *
+ * @param dtoClassList
+ * @return
+ */
+ public List getDTOBOConvertInterfaceList(List dtoClassList) {
+ List facadeInterfaceList = new ArrayList<>();
+ for (ClassBean classBean : dtoClassList) {
+ InterfaceBean interfaceBean = new InterfaceBean();
+ int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainDerivedElementEnum.DTO.getElement());
+ if (x >= 0) {
+ String className = classBean.getClassName().substring(0, x) + "Convert";
+ interfaceBean.setClassName(className);
+ interfaceBean.setPlantUMLPackage("model.convert");
+ interfaceBean.setClassDesc(classBean.getClassDesc());
+ interfaceBean.setMethodBeanList(getDTOBOConvertMethodList(classBean));
+ List importList = new ArrayList<>();
+ importList.add(classBean.getPackageName() + "." + classBean.getClassName());
+ interfaceBean.setImportClassList(importList);
+ facadeInterfaceList.add(interfaceBean);
+ }
+ }
+ return facadeInterfaceList;
+ }
+
+
+ /**
+ * 处理派生类dto-bo convert
+ *
+ * @param boElementBeanList
+ * @return
+ */
+ public Map getDOBOConvertInterfaceList(List boElementBeanList) {
+
+ Map convertMap = new HashMap<>();
+ Map boConvertRelationMap = new HashMap<>();
+
+ List doboConvertInterfaceList = new ArrayList<>();
+ for (ClassBean classBean : boElementBeanList) {
+ InterfaceBean interfaceBean = new InterfaceBean();
+ int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainElementEnum.BO.getElement());
+ if (x >= 0) {
+ String className = classBean.getClassName().substring(0, x) + "Converter";
+ interfaceBean.setClassName(className);
+ interfaceBean.setPlantUMLPackage("data.convert");
+ interfaceBean.setClassDesc(classBean.getClassDesc());
+ interfaceBean.setMethodBeanList(getDOBOConvertMethodList(classBean));
+ interfaceBean.setImportClassList(Lists.newArrayList());
+ doboConvertInterfaceList.add(interfaceBean);
+ boConvertRelationMap.put(classBean.getClassName(), className);
+ }
+ }
+ convertMap.put("doboConvertList", doboConvertInterfaceList);
+ convertMap.put("doboConvertRelationMap", boConvertRelationMap);
+ return convertMap;
+ }
+
+ /**
+ * 处理派生类dto-bo convert
+ *
+ * @param classBean
+ * @return
+ */
+ public List getDOBOConvertMethodList(ClassBean classBean) {
+ Optional fieldBean = classBean.getFieldBeanList().stream().filter(v -> v.isTableKey()).findFirst();
+ if (!fieldBean.isPresent()) {
+ return Lists.newArrayList();
+ }
+
+ String tableName = fieldBean.get().getFieldName().replace("String", "").replace("string", "").trim();
+ if (StringUtils.isEmpty(tableName)) {
+ return Lists.newArrayList();
+ }
+ String classDOName = StringHelperUtils.getClassDOName(tableName) + "DO";
+
+
+ List methodBeanList = new ArrayList<>();
+ MethodBean do2bo = new MethodBean();
+ String boClassName = classBean.getClassName();
+ String varClassName = classDOName.substring(0, 1).toLowerCase().concat(classDOName.substring(1));
+ do2bo.setMethodName("do2bo(" + classDOName + " " + varClassName + ")");
+ do2bo.setReturnClass(boClassName);
+ methodBeanList.add(do2bo);
+
+ MethodBean dtoList2boList = new MethodBean();
+ dtoList2boList.setMethodName("doList2boList(List<" + classDOName + "> " + varClassName + "List)");
+ dtoList2boList.setReturnClass("List<" + boClassName + ">");
+ methodBeanList.add(dtoList2boList);
+
+
+ MethodBean bo2to = new MethodBean();
+ varClassName = boClassName.substring(0, 1).toLowerCase().concat(classBean.getClassName().substring(1));
+ bo2to.setMethodName("bo2do(" + boClassName + " " + varClassName + ")");
+ bo2to.setReturnClass(classDOName);
+ methodBeanList.add(bo2to);
+
+ MethodBean boList2dtoList = new MethodBean();
+ boList2dtoList.setMethodName("boList2doList(List<" + boClassName + "> " + varClassName + "List)");
+ boList2dtoList.setReturnClass("List<" + classDOName + ">");
+ methodBeanList.add(boList2dtoList);
+
+ methodBeanList.forEach(methodBean -> methodBean.buildParamArr());
+ return methodBeanList;
+ }
+
+
+ /**
+ * 处理派生类dto-bo convert
+ *
+ * @param classBean
+ * @return
+ */
+ public List getDTOBOConvertMethodList(ClassBean classBean) {
+ List methodBeanList = new ArrayList<>();
+ MethodBean dto2bo = new MethodBean();
+ String boClassName = classBean.getClassName().replace("DTO", "BO");
+ String varClassName = classBean.getClassName().substring(0, 1).toLowerCase().concat(classBean.getClassName().substring(1));
+ dto2bo.setMethodName("dto2bo(" + classBean.getClassName() + " " + varClassName + ")");
+ dto2bo.setReturnClass(boClassName);
+ methodBeanList.add(dto2bo);
+
+ MethodBean dtoList2boList = new MethodBean();
+ dtoList2boList.setMethodName("dtoList2boList(List<" + classBean.getClassName() + "> " + varClassName + "List)");
+ dtoList2boList.setReturnClass("List<" + boClassName + ">");
+ methodBeanList.add(dtoList2boList);
+
+
+ MethodBean bo2to = new MethodBean();
+ varClassName = boClassName.substring(0, 1).toLowerCase().concat(classBean.getClassName().substring(1));
+ bo2to.setMethodName("bo2dto(" + boClassName + " " + varClassName + ")");
+ bo2to.setReturnClass(classBean.getClassName().replace("DTO", "BO"));
+ methodBeanList.add(bo2to);
+
+ MethodBean boList2dtoList = new MethodBean();
+ boList2dtoList.setMethodName("boList2dtoList(List<" + boClassName + "> " + varClassName + "List)");
+ boList2dtoList.setReturnClass("List<" + classBean.getClassName() + ">");
+ methodBeanList.add(boList2dtoList);
+
+ return methodBeanList;
+ }
+
+
+ /**
+ * 处理派生类facade->facadeimpl
+ *
+ * @param facadeInterfaceList
+ * @return
+ */
+ public List getFacadeImplList(List facadeInterfaceList) {
+ List facadeImplList = new ArrayList<>();
+
+ for (InterfaceBean interfaceBean : facadeInterfaceList) {
+ ClassBean classBean = new ClassBean();
+ String className = interfaceBean.getClassName() + "Impl";
+ classBean.setClassName(className);
+ classBean.setClassDesc(classBean.getClassDesc());
+ classBean.setPlantUMLPackage("app.facadeimpl");
+ List methodBeanList = new ArrayList<>(interfaceBean.getMethodBeanList());
+
+ List fieldBeanList = new ArrayList<>(interfaceBean.getFieldBeanList());
+
+ classBean.setMethodBeanList(methodBeanList);
+ classBean.setFieldBeanList(fieldBeanList);
+ classBean.setImportClassList(interfaceBean.getImportClassList());
+ classBean.setRelationClassStr(" implements " + interfaceBean.getClassName());
+ facadeImplList.add(classBean);
+ }
+ return facadeImplList;
+ }
+
+ /**
+ * 处理派生类bo->facade
+ *
+ * @param domainBOClassList
+ * @return
+ */
+ public List getFacadeClassList(List domainBOClassList) {
+ Map> facadeBOmap = new HashMap<>();
+ domainBOClassList.forEach(classBean -> {
+ Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isFacadeKey()).findFirst();
+ if (fieldBeanOptional.isPresent()) {
+ String facadeClassName = fieldBeanOptional.get().getFieldName().replace("String", "")
+ .replace("string", "").trim();
+ List classBeanList = facadeBOmap.get(facadeClassName);
+ if (CollectionUtils.isEmpty(classBeanList)) {
+ classBeanList = Lists.newArrayList();
+ }
+ classBeanList.add(classBean);
+ facadeBOmap.put(facadeClassName, classBeanList);
+ }
+ });
+
+ List interfaceBeanList = new ArrayList<>();
+ facadeBOmap.forEach((k, v) -> {
+ InterfaceBean facadeInterfaceBean = new InterfaceBean();
+ if (k.toLowerCase().endsWith("facade")) {
+ facadeInterfaceBean.setClassName(k);
+ } else {
+ facadeInterfaceBean.setClassName(k + "Facade");
+ }
+ facadeInterfaceBean.setPlantUMLPackage("api.facade");
+
+ List facadeMethodList = new ArrayList<>();
+
+ v.stream().forEach(classBean -> {
+ List classMethodList = classBean.getMethodBeanList();
+ if (CollectionUtils.isNotEmpty(classMethodList)) {
+ //通过特定字符过滤facade方法
+ List newMethodList = classMethodList.stream().filter(methodBean ->
+ methodBean.getReturnClass().toLowerCase().contains("dto")
+ || methodBean.getReturnClass().toLowerCase().contains("result")
+ || methodBean.getMethodName().toLowerCase().contains("facade")
+ || methodBean.getMethodName().toLowerCase().contains("dto")
+ ).collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(newMethodList)) {
+ facadeMethodList.addAll(newMethodList);
+ }
+ }
+ });
+ facadeMethodList.forEach(methodBean -> methodBean.buildParamArr());
+ facadeInterfaceBean.setMethodBeanList(facadeMethodList);
+ facadeInterfaceBean.setFieldBeanList(new ArrayList<>());
+ interfaceBeanList.add(facadeInterfaceBean);
+ });
+
+ return interfaceBeanList;
+
+ }
+
+
+ /**
+ * 处理派生类bo->controller
+ *
+ * @param domainBOClassList
+ * @return
+ */
+ public List getControllerClassList(List domainBOClassList) {
+ Map> controllermap = new HashMap<>();
+ domainBOClassList.forEach(classBean -> {
+ Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isControllerKey()).findFirst();
+ if (fieldBeanOptional.isPresent()) {
+ String controllerClassName = fieldBeanOptional.get().getFieldName().replace("String", "")
+ .replace("string", "").trim();
+ List classBeanList = controllermap.get(controllerClassName);
+ if (CollectionUtils.isEmpty(classBeanList)) {
+ classBeanList = Lists.newArrayList();
+ }
+ classBeanList.add(classBean);
+ controllermap.put(controllerClassName, classBeanList);
+ }
+ });
+
+ List controllerBeanList = new ArrayList<>();
+ controllermap.forEach((k, v) -> {
+ ClassBean controllerBean = new ClassBean();
+ if (k.toLowerCase().endsWith("controller")) {
+ controllerBean.setClassName(k);
+ } else {
+ controllerBean.setClassName(k + "Controller");
+ }
+ controllerBean.setPlantUMLPackage("adapter.controller");
+
+ List controllerMethodList = new ArrayList<>();
+
+ v.stream().forEach(classBean -> {
+ List classMethodList = classBean.getMethodBeanList();
+ if (CollectionUtils.isNotEmpty(classMethodList)) {
+ //通过特定字符过滤facade方法
+ List newMethodList = classMethodList.stream().filter(methodBean -> methodBean.getDesc().contains("/")
+ ).collect(Collectors.toList());
+
+
+ if (CollectionUtils.isNotEmpty(newMethodList)) {
+ newMethodList.forEach(methodBean -> {
+ String pathValue = methodBean.getDesc().substring(methodBean.getDesc().indexOf("/"));
+ methodBean.setPathValue(pathValue);
+ methodBean.setDesc(methodBean.getDesc().replace(methodBean.getPathValue(), ""));
+ });
+
+ controllerMethodList.addAll(newMethodList);
+ }
+ }
+ });
+ controllerMethodList.forEach(methodBean -> methodBean.buildParamArr());
+ controllerBean.setMethodBeanList(controllerMethodList);
+
+ controllerBeanList.add(controllerBean);
+ });
+
+ return controllerBeanList;
+
+ }
+
+
+ /**
+ * 对bo类进行解析
+ *
+ * @param domainBOList
+ * @return
+ */
+ public Map getConvertInterfaceBeanList(List domainBOList) {
+
+ Map> facadeBOmap = new HashMap<>();
+
+ Map convertMap = new HashMap<>();
+
+ domainBOList.forEach(classBean -> {
+ Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isFacadeKey()).findFirst();
+ if (fieldBeanOptional.isPresent()) {
+ String facadeClassName = fieldBeanOptional.get().getFieldName().replace("String", "")
+ .replace("string", "").trim();
+ if (facadeClassName.contains(",")) {
+ facadeClassName = classBean.getClassName().replace("BO", "").replace("Bo", "").replace("bo", "").trim();
+ }
+ List classBeanList = facadeBOmap.get(facadeClassName);
+ if (CollectionUtils.isEmpty(classBeanList)) {
+ classBeanList = Lists.newArrayList();
+ }
+ classBeanList.add(classBean);
+ facadeBOmap.put(facadeClassName, classBeanList);
+ }
+ });
+
+ List interfaceConvertBeanList = new ArrayList<>();
+
+ Map facadeConvertRelationMap = new HashMap<>();
+
+ facadeBOmap.forEach((k, v) -> {
+ InterfaceBean convertInterfaceBean = new InterfaceBean();
+ String convertClassName = k.replace("Facade", "").replace("facade", "") + "Convert";
+ convertInterfaceBean.setClassName(convertClassName);
+ convertInterfaceBean.setPlantUMLPackage("model.convert");
+ convertInterfaceBean.setClassDesc(convertClassName);
+ facadeConvertRelationMap.put(k, convertClassName);
+ Set importClassSet = new HashSet<>();
+ List classMethodList = new ArrayList<>();
+
+ v.stream().forEach(classBean -> {
+
+ List methodBeanList = new ArrayList<>();
+ Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(f -> f.isDtoKey()).findFirst();
+ if (fieldBeanOptional.isPresent()) {
+ String dtoClassNameStr = fieldBeanOptional.get().getFieldName()
+ .replace("String", "")
+ .replace("string", "")
+ .trim();
+
+
+ String[] arr = dtoClassNameStr.split(",");
+ for (String dtoClassName : arr) {
+ importClassSet.add(appServiceConfig.getPackage() + ".api.dto." + dtoClassName);
+ MethodBean dto2bo = new MethodBean();
+ String vardtoName = dtoClassName.substring(0, 1).toLowerCase().concat(dtoClassName.substring(1));
+ dto2bo.setMethodName("dto2bo(" + dtoClassName + " " + vardtoName + ")");
+ dto2bo.setReturnClass(classBean.getClassName());
+ methodBeanList.add(dto2bo);
+
+ MethodBean dtoList2boList = new MethodBean();
+ dtoList2boList.setMethodName(vardtoName + "s2boList(List<" + dtoClassName + "> " + vardtoName + "List)");
+ dtoList2boList.setReturnClass("List<" + classBean.getClassName() + ">");
+ methodBeanList.add(dtoList2boList);
+
+ MethodBean bo2to = new MethodBean();
+ String varBOClassName = classBean.getClassName().substring(0, 1).toLowerCase().concat(classBean.getClassName().substring(1));
+ bo2to.setMethodName("bo2dto(" + classBean.getClassName() + " " + varBOClassName + ")");
+ bo2to.setReturnClass(dtoClassName);
+ methodBeanList.add(bo2to);
+
+ MethodBean boList2dtoList = new MethodBean();
+ boList2dtoList.setMethodName(varBOClassName + "s2dtoList(List<" + classBean.getClassName() + "> " + varBOClassName + "List)");
+ boList2dtoList.setReturnClass("List<" + dtoClassName + ">");
+ methodBeanList.add(boList2dtoList);
+ }
+ classMethodList.addAll(methodBeanList);
+ }
+ });
+
+ convertInterfaceBean.setImportClassList(Lists.newArrayList(importClassSet));
+
+ Map map = new HashMap<>();
+ classMethodList
+ .stream().filter(methodBean ->
+ !methodBean.getMethodName().toLowerCase().contains("response") &&
+ !methodBean.getMethodName().toLowerCase().contains("responsedto") &&
+ !methodBean.getReturnClass().toLowerCase().contains("request") &&
+ !methodBean.getReturnClass().toLowerCase().contains("requestdto") ||
+ methodBean.getReturnClass().toLowerCase().contains("requestbo")
+ ).collect(Collectors.toList()).forEach(methodBean -> map.putIfAbsent(methodBean.getReturnClass() + methodBean.getMethodName(), methodBean));
+ convertInterfaceBean.setMethodBeanList(map.values().stream().collect(Collectors.toList()));
+ convertInterfaceBean.getMethodBeanList().forEach(methodBean -> methodBean.buildParamArr());
+ interfaceConvertBeanList.add(convertInterfaceBean);
+ });
+
+
+ convertMap.put("interfaceList", interfaceConvertBeanList);
+ convertMap.put("facadeconvertrelation", facadeConvertRelationMap);
+
+ return convertMap;
+
+ }
+
+
+ /**
+ * 对bo类进行解析
+ *
+ * @param domainBOList
+ * @return
+ */
+ public Map getConvertBOVOInterfaceBeanList(List domainBOList) {
+ Map convertMap = new HashMap<>();
+ Map boConvertRelationMap = new HashMap<>();
+
+ Map> contrllerBOmap = new HashMap<>();
+ domainBOList.forEach(classBean -> {
+ Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isControllerKey()).findFirst();
+ if (fieldBeanOptional.isPresent()) {
+ String controllerClassName = fieldBeanOptional.get().getFieldName().replace("String", "")
+ .replace("string", "").trim();
+ if (controllerClassName.contains(",")) {
+ controllerClassName = classBean.getClassName().replace("BO", "").replace("Bo", "").replace("bo", "").trim();
+ }
+ List classBeanList = contrllerBOmap.get(controllerClassName);
+ if (CollectionUtils.isEmpty(classBeanList)) {
+ classBeanList = Lists.newArrayList();
+ }
+ classBeanList.add(classBean);
+ contrllerBOmap.put(controllerClassName, classBeanList);
+ }
+ });
+
+ List interfaceConvertBeanList = new ArrayList<>();
+ contrllerBOmap.forEach((k, v) -> {
+ InterfaceBean convertInterfaceBean = new InterfaceBean();
+ String convertClassName = k.replace("Controller", "").replace("controller", "") + "Convertervobo";
+ convertInterfaceBean.setClassName(convertClassName);
+ convertInterfaceBean.setPlantUMLPackage("model.convert");
+ convertInterfaceBean.setClassDesc(convertClassName);
+ Set importClassSet = new HashSet<>();
+ List classMethodList = new ArrayList<>();
+
+
+ v.stream().forEach(classBean -> {
+
+ List methodBeanList = new ArrayList<>();
+ Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(f -> f.isVoKey()).findFirst();
+ if (fieldBeanOptional.isPresent()) {
+ String voClassNameStr = fieldBeanOptional.get().getFieldName()
+ .replace("String", "")
+ .replace("string", "")
+ .trim();
+
+
+ String[] arr = voClassNameStr.split(",");
+ for (String voClassName : arr) {
+ String varBOClassName = classBean.getClassName().substring(0, 1).toLowerCase().concat(classBean.getClassName().substring(1));
+
+ importClassSet.add(appServiceConfig.getPackage() + ".adapter.vo." + voClassName);
+ MethodBean dto2bo = new MethodBean();
+ String varVoName = voClassName.substring(0, 1).toLowerCase().concat(voClassName.substring(1));
+ dto2bo.setMethodName("vo2bo(" + voClassName + " " + varVoName + ")");
+ dto2bo.setReturnClass(classBean.getClassName());
+ methodBeanList.add(dto2bo);
+
+ MethodBean dtoList2boList = new MethodBean();
+ String tmpVar = varVoName.replace(varBOClassName.replace("BO", "").replace("Bo", ""), "");
+ varVoName = tmpVar.substring(0, 1).toLowerCase().concat(tmpVar.substring(1));
+ if (StringUtils.isEmpty(varVoName)) {
+ varVoName = "vo";
+ }
+
+ dtoList2boList.setMethodName(varVoName + "List2boList(List<" + voClassName + "> " + varVoName + "List)");
+ dtoList2boList.setReturnClass("List<" + classBean.getClassName() + ">");
+ methodBeanList.add(dtoList2boList);
+
+ MethodBean bo2to = new MethodBean();
+ tmpVar = voClassName.replace(classBean.getClassName().replace("BO", "").replace("Bo", ""), "");
+
+ bo2to.setMethodName("bo2" + tmpVar + "(" + classBean.getClassName() + " " + varBOClassName + ")");
+ bo2to.setReturnClass(voClassName);
+ methodBeanList.add(bo2to);
+
+ MethodBean boList2dtoList = new MethodBean();
+ boList2dtoList.setMethodName(varBOClassName + "List2" + tmpVar + "List(List<" + classBean.getClassName() + "> " + varBOClassName + "List)");
+ boList2dtoList.setReturnClass("List<" + voClassName + ">");
+ methodBeanList.add(boList2dtoList);
+ }
+ classMethodList.addAll(methodBeanList);
+ }
+ boConvertRelationMap.put(classBean.getClassName(), convertInterfaceBean.getClassName());
+ });
+
+ convertInterfaceBean.setImportClassList(Lists.newArrayList(importClassSet));
+
+ Map map = new HashMap<>();
+ classMethodList
+ .stream().filter(methodBean ->
+ !methodBean.getMethodName().toLowerCase().contains("response") &&
+ !methodBean.getMethodName().toLowerCase().contains("responsevo") &&
+ !methodBean.getReturnClass().toLowerCase().contains("request") &&
+ !methodBean.getReturnClass().toLowerCase().contains("requestvo") ||
+ methodBean.getReturnClass().toLowerCase().contains("requestbo")
+ ).collect(Collectors.toList()).forEach(methodBean -> map.putIfAbsent(methodBean.getReturnClass() + methodBean.getMethodName(), methodBean));
+ convertInterfaceBean.setMethodBeanList(map.values().stream().collect(Collectors.toList()));
+ convertInterfaceBean.getMethodBeanList().forEach(methodBean -> methodBean.buildParamArr());
+ interfaceConvertBeanList.add(convertInterfaceBean);
+
+
+ });
+ convertMap.put("voboconvertlist", interfaceConvertBeanList);
+ convertMap.put("voboconvertrelation", boConvertRelationMap);
+
+ return convertMap;
+
+ }
+
+
+ /**
+ * 构建方法内容
+ *
+ * @param methodBeanList
+ * @return
+ */
+ private List getMethodBeanList(List methodBeanList) {
+ for (MethodBean methodBean : methodBeanList) {
+ methodBean.buildMethodContent();
+ }
+ return methodBeanList;
+ }
+
+ /**
+ * 处理派生类gataway->gatawayimpl
+ *
+ * @param gatawayInterfaceList
+ * @return
+ */
+ public List getGatawayImplList(List gatawayInterfaceList) {
+ List gatawayImplList = new ArrayList<>();
+
+ for (InterfaceBean interfaceBean : gatawayInterfaceList) {
+ ClassBean classBean = new ClassBean();
+ String className = interfaceBean.getClassName() + "Impl";
+ classBean.setClassName(className);
+ classBean.setClassDesc(classBean.getClassDesc());
+ classBean.setPlantUMLPackage("infrast.gatawayimpl");
+ classBean.setPackageName(appServiceConfig.getPackage() + "." + classBean.getPlantUMLPackage());
+ if (CollectionUtils.isNotEmpty(interfaceBean.getMethodBeanList())) {
+ classBean.setMethodBeanList(getMethodBeanList(interfaceBean.getMethodBeanList()));
+ classBean.setFieldBeanList(interfaceBean.getFieldBeanList());
+ } else {
+ classBean.setMethodBeanList(Lists.newArrayList());
+ }
+ classBean.setImportClassList(interfaceBean.getImportClassList());
+ classBean.setRelationClassStr(" implements " + interfaceBean.getClassName());
+ gatawayImplList.add(classBean);
+ }
+ return gatawayImplList;
+ }
+
+
+ /**
+ * 处理派生类infrastacl->infrastaclimpl
+ *
+ * @param InfrastAclInterfaceList
+ * @return
+ */
+ public List getInfrastAclImplList(List InfrastAclInterfaceList) {
+ List infrastAclImplList = new ArrayList<>();
+
+ for (InterfaceBean interfaceBean : InfrastAclInterfaceList) {
+ ClassBean classBean = new ClassBean();
+ String className = interfaceBean.getClassName() + "Impl";
+ classBean.setClassName(className);
+ classBean.setClassDesc(classBean.getClassDesc());
+ classBean.setPlantUMLPackage("infrast.acl.impl");
+ classBean.setPackageName(appServiceConfig.getPackage() + "." + classBean.getPlantUMLPackage());
+ if (CollectionUtils.isNotEmpty(interfaceBean.getMethodBeanList())) {
+ classBean.setMethodBeanList(getMethodBeanList(interfaceBean.getMethodBeanList()));
+ classBean.setFieldBeanList(interfaceBean.getFieldBeanList());
+ } else {
+ classBean.setMethodBeanList(Lists.newArrayList());
+ }
+ classBean.setImportClassList(interfaceBean.getImportClassList());
+ classBean.setRelationClassStr(" implements " + interfaceBean.getClassName());
+ infrastAclImplList.add(classBean);
+ }
+ return infrastAclImplList;
+ }
+
+ /**
+ * 处理派生类repository->repositoryimpl
+ *
+ * @param repositoryInterfaceList
+ * @return
+ */
+ public List getRepositoryImplList(List repositoryInterfaceList) {
+ List repositoryImplList = new ArrayList<>();
+
+ for (InterfaceBean interfaceBean : repositoryInterfaceList) {
+ ClassBean classBean = new ClassBean();
+ String className = interfaceBean.getClassName() + "Impl";
+ classBean.setClassName(className);
+ classBean.setClassDesc(classBean.getClassDesc());
+ classBean.setPlantUMLPackage("infrast.repositoryimpl");
+ if (CollectionUtils.isNotEmpty(interfaceBean.getMethodBeanList())) {
+ classBean.setMethodBeanList(getMethodBeanList(interfaceBean.getMethodBeanList()));
+ classBean.setFieldBeanList(interfaceBean.getFieldBeanList());
+ } else {
+ classBean.setMethodBeanList(Lists.newArrayList());
+ }
+ classBean.setPackageName(appServiceConfig.getPackage() + "." + classBean.getPlantUMLPackage());
+ classBean.setImportClassList(interfaceBean.getImportClassList());
+ classBean.setRelationClassStr(" implements " + interfaceBean.getClassName());
+ repositoryImplList.add(classBean);
+ }
+ return repositoryImplList;
+ }
+
+
+ /**
+ * 构建api的枚举数据
+ * @param enumBeanList
+ * @return
+ */
+ public List getApiEnumBeanList(List enumBeanList){
+ List apiEnumBeanList = new ArrayList<>();
+ enumBeanList.forEach(enumBean -> apiEnumBeanList.add(enumBean.copySelf()));
+ apiEnumBeanList.forEach(enumBean -> enumBean.setPackageName(appServiceConfig.getPackage()+".api.enums"));
+ return apiEnumBeanList;
+ }
+
+
+
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DerivedClassFactory.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DerivedClassFactory.java
index c68c053e29b8c7ec06ffdc6f9d9a9d179013e459..7e08f6decda90c484d578b0fcce650aca8556d32 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DerivedClassFactory.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DerivedClassFactory.java
@@ -1,18 +1,13 @@
package com.coderman.codemaker.app.dynamicddd;
import com.coderman.codemaker.bean.plantuml.*;
-import com.coderman.codemaker.config.AppServiceConfig;
-import com.coderman.codemaker.enums.DomainDerivedElementEnum;
-import com.coderman.codemaker.enums.DomainElementEnum;
-import com.coderman.codemaker.service.TemlateVarService;
+import com.coderman.codemaker.service.ReadInvokePlantUMLFileService;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
-import java.util.stream.Collectors;
/**
* Description:
@@ -27,17 +22,14 @@ import java.util.stream.Collectors;
public class DerivedClassFactory {
@Autowired
- private TemlateVarService temlateVarService;
-
- @Autowired
- private AppServiceConfig appServiceConfig;
+ private ClassConvertFactory classConvertFactory;
/**
* 处理bo到dto的派生
* @param domainBoElementBeanList
* @param plantUmlContextBean
*/
public void deriveBo2DTO(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List dtoList = getDTOClassList(domainBoElementBeanList);
+ List dtoList = classConvertFactory.getDTOClassList(domainBoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
@@ -49,13 +41,36 @@ public class DerivedClassFactory {
}
}
+
+
+ /**
+ * 处理enum到enum的派生
+ * @param domainEnumElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveEnum2Enum(List domainEnumElementBeanList, PlantUmlContextBean plantUmlContextBean){
+
+ List enumBeanList = classConvertFactory.getApiEnumBeanList(domainEnumElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ enumBeanList.forEach(v->derivedPlantUmlContextBean.addEnumBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ enumBeanList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addEnumBean(v));
+ }
+ }
+
+
+
/**
* 处理dto到facade的派生
* @param dtoElementBeanList
* @param plantUmlContextBean
*/
public void deriveDTO2Facade(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List dtoList = getFacadeInterfaceList(dtoElementBeanList);
+ List dtoList = classConvertFactory.getFacadeInterfaceList(dtoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
@@ -74,7 +89,7 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveDTOBOConvert(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List dtoboConvertList = getDTOBOConvertInterfaceList(dtoElementBeanList);
+ List dtoboConvertList = classConvertFactory.getDTOBOConvertInterfaceList(dtoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
@@ -91,16 +106,26 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveDOBOConvert(List boElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List dtoboConvertList = getDOBOConvertInterfaceList(boElementBeanList);
+ Map convertMap = classConvertFactory.getDOBOConvertInterfaceList(boElementBeanList);
+ List doboConvertInterfaceList = (List)convertMap.get("doboConvertList");
+ Map BoConvertRelationMap = (Map)convertMap.get("doboConvertRelationMap");
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
- dtoboConvertList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ doboConvertInterfaceList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
}else {
//将派生类放到派生类上下文里面
- dtoboConvertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ doboConvertInterfaceList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
}
+
+ //将dobo转换接口挂到BO类上
+ boElementBeanList.forEach(classBean -> {
+ ClassBean boClassBean = plantUmlContextBean.getClassBeanMap().get(classBean.getClassName());
+ boClassBean.setBodoConvertInterface(BoConvertRelationMap.get(classBean.getClassName()));
+ });
+
+
}
@@ -110,7 +135,7 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveBo2VO(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List dtoList = getVOClassList(domainBoElementBeanList);
+ List dtoList = classConvertFactory.getVOClassList(domainBoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
@@ -129,15 +154,36 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveBo2Facade(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List facadeList = getFacadeClassList(domainBoElementBeanList);
+ List facadeList = classConvertFactory.getFacadeClassList(domainBoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
- //将派生类放到派生类上下文里面
facadeList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
}else {
//将派生类放到派生类上下文里面
- facadeList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ facadeList.forEach(v-> {
+
+ if(v.getClassName().contains(",")){
+ String [] classNameArr = v.getClassName().split(",");
+ for (String className : classNameArr){
+ InterfaceBean interfaceBean = new InterfaceBean();
+
+ interfaceBean.setClassName(className);
+ interfaceBean.setImportClassList(v.getImportClassList());
+ interfaceBean.setPackageName(v.getPackageName());
+ interfaceBean.setMethodBeanList(v.getMethodBeanList());
+ interfaceBean.setPlantUMLPackage(v.getPlantUMLPackage());
+ interfaceBean.setRelationClassStr(v.getRelationClassStr());
+ interfaceBean.setFieldBeanList(v.getFieldBeanList());
+ interfaceBean.setImplInterfaceBean(v.getImplInterfaceBean());
+ interfaceBean.setAuthor(v.getAuthor());
+ interfaceBean.setDerived(v.isDerived());
+ plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(interfaceBean);
+ }
+ }else {
+ plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v);
+ }
+ });
}
}
@@ -148,15 +194,36 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveBo2Controller(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List controllerBeanList = getControllerClassList(domainBoElementBeanList);
+ List controllerBeanList = classConvertFactory.getControllerClassList(domainBoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
- //将派生类放到派生类上下文里面
controllerBeanList.forEach(v->derivedPlantUmlContextBean.addClassBean(v));
plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
}else {
+
//将派生类放到派生类上下文里面
- controllerBeanList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addClassBean(v));
+ controllerBeanList.forEach(v-> {
+
+ if(v.getClassName().contains(",")){
+ String [] classNameArr = v.getClassName().split(",");
+ for (String className : classNameArr){
+ ClassBean classBean = new ClassBean();
+ classBean.setClassName(className);
+ classBean.setImportClassList(v.getImportClassList());
+ classBean.setPackageName(v.getPackageName());
+ classBean.setMethodBeanList(v.getMethodBeanList());
+ classBean.setPlantUMLPackage(v.getPlantUMLPackage());
+ classBean.setRelationClassStr(v.getRelationClassStr());
+ classBean.setFieldBeanList(v.getFieldBeanList());
+ classBean.setImplInterfaceBean(v.getImplInterfaceBean());
+ classBean.setAuthor(v.getAuthor());
+ classBean.setDerived(v.isDerived());
+ plantUmlContextBean.getDerivedPlantUmlContextBean().addClassBean(classBean);
+ }
+ }else {
+ plantUmlContextBean.getDerivedPlantUmlContextBean().addClassBean(v);
+ }
+ });
}
}
@@ -167,7 +234,11 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveBoDTO2Convert(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List convertList = getConvertInterfaceBeanList(domainBoElementBeanList);
+ Map convertMap = classConvertFactory.getConvertInterfaceBeanList(domainBoElementBeanList);
+
+ List convertList = (List)convertMap.get("interfaceList");
+ Map facadeConvertRelationMap = (Map)convertMap.get("facadeconvertrelation");
+
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
@@ -177,6 +248,13 @@ public class DerivedClassFactory {
//将派生类放到派生类上下文里面
convertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
}
+
+ //facade接口关联对应的convert接口
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
+ if(k.toLowerCase().endsWith("facade")){
+ v.setBodtoConvertInterface(facadeConvertRelationMap.get(k));
+ }
+ });
}
/**
@@ -185,21 +263,45 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveBoVO2Convert(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List convertList = getConvertBOVOInterfaceBeanList(domainBoElementBeanList);
+ Map convertMap = classConvertFactory.getConvertBOVOInterfaceBeanList(domainBoElementBeanList);
+ List bovoConvertInterfaceList = (List)convertMap.get("voboconvertlist");
+ Map BoConvertRelationMap = (Map)convertMap.get("voboconvertrelation");
+
+
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
- convertList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ bovoConvertInterfaceList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
}else {
//将派生类放到派生类上下文里面
- convertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ bovoConvertInterfaceList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
}
- }
-
-
+ //将dobo转换接口挂到BO类上,也挂到VO类上便于调用链路绘制
+ domainBoElementBeanList.forEach(classBean -> {
+ ClassBean boClassBean = plantUmlContextBean.getClassBeanMap().get(classBean.getClassName());
+ boClassBean.setBovoConvertInterface(BoConvertRelationMap.get(classBean.getClassName()));
+ Optional optionalFieldBean = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isVoKey()).findFirst();
+ if(optionalFieldBean.isPresent()){
+ FieldBean fieldBean = optionalFieldBean.get();
+ String [] classNameArr = fieldBean.getFieldName()
+ .replace("String","")
+ .replace("string","")
+ .trim()
+ .split(",");
+ for (String voClassname : classNameArr){
+ String voClassName = voClassname.endsWith("VO") ? voClassname : voClassname+"VO";
+ ClassBean voClassBean = plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().get(voClassName);
+ if(voClassBean == null){
+ continue;
+ }
+ voClassBean.setBovoConvertInterface(BoConvertRelationMap.get(classBean.getClassName()));
+ }
+ }
+ });
+ }
/**
@@ -208,7 +310,7 @@ public class DerivedClassFactory {
* @param plantUmlContextBean
*/
public void deriveFacade2FacadeImpl(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
- List facadeImplList = getFacadeImplList(dtoElementBeanList);
+ List facadeImplList = classConvertFactory.getFacadeImplList(dtoElementBeanList);
if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
//将派生类放到派生类上下文里面
@@ -222,611 +324,63 @@ public class DerivedClassFactory {
/**
- * 处理派生类bo->facade
- * @param domainBOClassList
- * @return
- */
- private List getFacadeClassList(List domainBOClassList){
- Map> facadeBOmap = new HashMap<>();
- domainBOClassList.forEach(classBean -> {
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isFacadeKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String facadeClassName = fieldBeanOptional.get().getFieldName().replace("String","")
- .replace("string","").trim();
- List classBeanList = facadeBOmap.get(facadeClassName);
- if(CollectionUtils.isEmpty(classBeanList)){
- classBeanList = Lists.newArrayList();
- }
- classBeanList.add(classBean);
- facadeBOmap.put(facadeClassName,classBeanList);
- }
- });
-
- List interfaceBeanList = new ArrayList<>();
- facadeBOmap.forEach((k,v)->{
- InterfaceBean facadeInterfaceBean = new InterfaceBean();
- if(k.toLowerCase().endsWith("facade")){
- facadeInterfaceBean.setClassName(k);
- }else {
- facadeInterfaceBean.setClassName(k+"Facade");
- }
- facadeInterfaceBean.setPlantUMLPackage("api.facade");
-
- List facadeMethodList = new ArrayList<>();
-
- v.stream().forEach(classBean -> {
- List classMethodList = classBean.getMethodBeanList();
- if(CollectionUtils.isNotEmpty(classMethodList)){
- //通过特定字符过滤facade方法
- List newMethodList = classMethodList.stream().filter(methodBean ->
- methodBean.getReturnClass().toLowerCase().contains("dto")
- || methodBean.getReturnClass().toLowerCase().contains("result")
- || methodBean.getMethodName().toLowerCase().contains("facade")
- || methodBean.getMethodName().toLowerCase().contains("dto")
- ).collect(Collectors.toList());
- if (CollectionUtils.isNotEmpty(newMethodList)){
- facadeMethodList.addAll(newMethodList);
- }
- }
- });
-
- facadeInterfaceBean.setMethodBeanList(facadeMethodList);
-
- interfaceBeanList.add(facadeInterfaceBean);
- });
-
- return interfaceBeanList;
-
- }
-
- /**
- * 处理派生类bo->controller
- * @param domainBOClassList
- * @return
+ * 处理gataway到gatawayimpl的派生
+ * @param dtoElementBeanList
+ * @param plantUmlContextBean
*/
- private List getControllerClassList(List domainBOClassList){
- Map> controllermap = new HashMap<>();
- domainBOClassList.forEach(classBean -> {
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isControllerKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String controllerClassName = fieldBeanOptional.get().getFieldName().replace("String","")
- .replace("string","").trim();
- List classBeanList = controllermap.get(controllerClassName);
- if(CollectionUtils.isEmpty(classBeanList)){
- classBeanList = Lists.newArrayList();
- }
- classBeanList.add(classBean);
- controllermap.put(controllerClassName,classBeanList);
- }
- });
-
- List controllerBeanList = new ArrayList<>();
- controllermap.forEach((k,v)->{
- ClassBean controllerBean = new ClassBean();
- if(k.toLowerCase().endsWith("controller")){
- controllerBean.setClassName(k);
- }else {
- controllerBean.setClassName(k+"Controller");
- }
- controllerBean.setPlantUMLPackage("adapter.controller");
-
- List controllerMethodList = new ArrayList<>();
-
- v.stream().forEach(classBean -> {
- List classMethodList = classBean.getMethodBeanList();
- if(CollectionUtils.isNotEmpty(classMethodList)){
- //通过特定字符过滤facade方法
- List newMethodList = classMethodList.stream().filter(methodBean -> methodBean.getDesc().contains("/")
- ).collect(Collectors.toList());
-
+ public List deriveGataway2GatawayImpl(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List gatawayImplList = classConvertFactory.getGatawayImplList(dtoElementBeanList);
- if (CollectionUtils.isNotEmpty(newMethodList)){
- newMethodList.forEach(methodBean -> {
- String pathValue = methodBean.getDesc().substring(methodBean.getDesc().indexOf("/"));
- methodBean.setPathValue(pathValue);
- methodBean.setDesc(methodBean.getDesc().replace(methodBean.getPathValue(),""));
- });
-
- controllerMethodList.addAll(newMethodList);
- }
- }
+ if(CollectionUtils.isNotEmpty(gatawayImplList)){
+ gatawayImplList.forEach(classBean -> {
+ plantUmlContextBean.getClassBeanMap().put(classBean.getClassName(),classBean);
});
-
- controllerBean.setMethodBeanList(controllerMethodList);
-
- controllerBeanList.add(controllerBean);
- });
-
- return controllerBeanList;
-
- }
-
-
-
- /**
- * 处理派生类bo->dto
- * @param domainBOClassList
- * @return
- */
- private List getDTOClassList(List domainBOClassList){
- List dtoClassList = new ArrayList<>();
-
- for (ClassBean classBean : domainBOClassList){
- //dto没有bo那么多的丰富信息,需要去掉
- List fieldBeanList = classBean.getFieldBeanList().stream().filter(fieldBean -> !fieldBean
- .getFieldName().trim().toLowerCase().endsWith(DomainElementEnum.BO.getElement()) && !fieldBean.isTableKey() && !fieldBean.isDtoKey()).collect(Collectors.toList());
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(f -> f.isDtoKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String [] classNameArr = fieldBeanOptional.get().getFieldName()
- .replace("String","")
- .replace("string","")
- .trim()
- .split(",");
- for (String className : classNameArr){
- ClassBean dtoClassBean = new ClassBean();
- if(!className.toLowerCase().endsWith("dto")){
- dtoClassBean.setClassName(className+"DTO");
- }else {
- dtoClassBean.setClassName(className);
- }
- dtoClassBean.setFieldBeanList(fieldBeanList);
- dtoClassBean.setClassDesc(classBean.getClassDesc());
- dtoClassBean.setMethodBeanList(Lists.newArrayList());
- dtoClassBean.setPlantUMLPackage("api.dto");
- dtoClassList.add(dtoClassBean);
- }
-
- }else {
- ClassBean dtoClassBean = new ClassBean();
- int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainElementEnum.BO.getElement());
- if(x >= 0){
- String className = classBean.getClassName().substring(0,x)+"DTO";
- dtoClassBean.setClassName(className);
- }
- dtoClassBean.setFieldBeanList(fieldBeanList);
- dtoClassBean.setMethodBeanList(Lists.newArrayList());
- dtoClassBean.setPlantUMLPackage("api.dto");
- dtoClassList.add(dtoClassBean);
- }
}
- return dtoClassList;
+ return gatawayImplList;
}
/**
- * 处理派生类bo->dto
- * @param domainBOClassList
- * @return
- */
- private List getVOClassList(List domainBOClassList){
- List dtoClassList = new ArrayList<>();
-
- for (ClassBean classBean : domainBOClassList){
- //vo没有bo那么多的丰富信息,需要去掉
- List fieldBeanList = classBean.getFieldBeanList().stream().filter(fieldBean -> !fieldBean
- .getFieldName().trim().toLowerCase().endsWith(DomainElementEnum.BO.getElement())
- && !fieldBean.isTableKey()
- && !fieldBean.isDtoKey()
- && !fieldBean.isFacadeKey()
- && !fieldBean.isVoKey()
- ).collect(Collectors.toList());
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(f -> f.isVoKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String [] classNameArr = fieldBeanOptional.get().getFieldName()
- .replace("String","")
- .replace("string","")
- .trim()
- .split(",");
- for (String className : classNameArr){
- ClassBean dtoClassBean = new ClassBean();
- if(!className.toLowerCase().endsWith("vo")){
- dtoClassBean.setClassName(className+"VO");
- }else {
- dtoClassBean.setClassName(className);
- }
- dtoClassBean.setFieldBeanList(fieldBeanList);
- dtoClassBean.setClassDesc(classBean.getClassDesc());
- dtoClassBean.setMethodBeanList(Lists.newArrayList());
- dtoClassBean.setPlantUMLPackage("adapter.vo");
- dtoClassList.add(dtoClassBean);
- }
-
- }else {
- ClassBean dtoClassBean = new ClassBean();
- int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainElementEnum.BO.getElement());
- if(x >= 0){
- String className = classBean.getClassName().substring(0,x)+"VO";
- dtoClassBean.setClassName(className);
- }
- dtoClassBean.setFieldBeanList(fieldBeanList);
- dtoClassBean.setMethodBeanList(Lists.newArrayList());
- dtoClassBean.setPlantUMLPackage("adapter.vo");
- dtoClassList.add(dtoClassBean);
- }
- }
- return dtoClassList;
- }
-
-
- /**
- * 处理派生类dto->facade
- * @param dtoClassList
- * @return
+ * 处理infrast acl到infrastaclimpl的派生
+ * @param infrastAclElementBeanList
+ * @param plantUmlContextBean
*/
- private List getFacadeInterfaceList(List dtoClassList){
- List facadeInterfaceList = new ArrayList<>();
-
- for (ClassBean classBean : dtoClassList){
- InterfaceBean interfaceBean = new InterfaceBean();
- int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainDerivedElementEnum.DTO.getElement());
- if(x >= 0){
- String className = classBean.getClassName().substring(0,x)+"Facade";
- interfaceBean.setClassName(className);
- interfaceBean.setPlantUMLPackage("api.facade");
- interfaceBean.setClassDesc(classBean.getClassDesc());
- interfaceBean.setMethodBeanList(Lists.newArrayList());
- facadeInterfaceList.add(interfaceBean);
- }
- }
- return facadeInterfaceList;
- }
-
+ public List deriveInfrastAcl2InfrastImpl(List infrastAclElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List gatawayImplList = classConvertFactory.getInfrastAclImplList(infrastAclElementBeanList);
- /**
- * 处理派生类dto-bo convert
- * @param dtoClassList
- * @return
- */
- private List getDTOBOConvertInterfaceList(List dtoClassList){
- List facadeInterfaceList = new ArrayList<>();
- for (ClassBean classBean : dtoClassList){
- InterfaceBean interfaceBean = new InterfaceBean();
- int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainDerivedElementEnum.DTO.getElement());
- if(x >= 0){
- String className = classBean.getClassName().substring(0,x)+"Convert";
- interfaceBean.setClassName(className);
- interfaceBean.setPlantUMLPackage("model.convert");
- interfaceBean.setClassDesc(classBean.getClassDesc());
- interfaceBean.setMethodBeanList(getDTOBOConvertMethodList(classBean));
- List importList = new ArrayList<>();
- importList.add(classBean.getPackageName()+"."+classBean.getClassName());
- interfaceBean.setImportClassList(importList);
- facadeInterfaceList.add(interfaceBean);
- }
+ if(CollectionUtils.isNotEmpty(gatawayImplList)){
+ gatawayImplList.forEach(classBean -> {
+ plantUmlContextBean.getClassBeanMap().put(classBean.getClassName(),classBean);
+ });
}
- return facadeInterfaceList;
+ return gatawayImplList;
}
-
/**
- * 处理派生类dto-bo convert
- * @param dtoClassList
- * @return
+ * 处理Repository到Repositoryimpl的派生
+ * @param dtoElementBeanList
+ * @param plantUmlContextBean
*/
- private List getDOBOConvertInterfaceList(List dtoClassList){
-
- List facadeInterfaceList = new ArrayList<>();
- for (ClassBean classBean : dtoClassList){
- InterfaceBean interfaceBean = new InterfaceBean();
- int x = classBean.getClassName().toLowerCase().lastIndexOf(DomainElementEnum.BO.getElement());
- if(x >= 0){
- String className = classBean.getClassName().substring(0,x)+"Converter";
- interfaceBean.setClassName(className);
- interfaceBean.setPlantUMLPackage("data.convert");
- interfaceBean.setClassDesc(classBean.getClassDesc());
- interfaceBean.setMethodBeanList(getDOBOConvertMethodList(classBean));
- interfaceBean.setImportClassList(Lists.newArrayList());
- facadeInterfaceList.add(interfaceBean);
- }
+ public List deriveRepository2RepositoryImpl(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List repositoryImplList = classConvertFactory.getRepositoryImplList(dtoElementBeanList);
+ if(CollectionUtils.isNotEmpty(repositoryImplList)){
+ repositoryImplList.forEach(classBean -> {
+ plantUmlContextBean.getClassBeanMap().put(classBean.getClassName(),classBean);
+ });
}
- return facadeInterfaceList;
+ return repositoryImplList;
}
/**
- * 处理派生类dto-bo convert
- * @param classBean
+ * 构建方法内容
+ * @param methodBeanList
* @return
*/
- private List getDOBOConvertMethodList(ClassBean classBean){
- Optional fieldBean = classBean.getFieldBeanList().stream().filter(v->v.isTableKey()).findFirst();
- if(!fieldBean.isPresent()){
- return Lists.newArrayList();
- }
-
- String tableName = fieldBean.get().getFieldName().replace("String","").replace("string","").trim();
- if(StringUtils.isEmpty(tableName)){
- return Lists.newArrayList();
+ private List getMethodBeanList(List methodBeanList){
+ for (MethodBean methodBean : methodBeanList){
+ methodBean.buildMethodContent();
}
- String classDOName = temlateVarService.getClassDOName(tableName)+"DO";
-
-
- List methodBeanList = new ArrayList<>();
- MethodBean do2bo = new MethodBean();
- String boClassName = classBean.getClassName();
- String varClassName = classDOName.substring(0,1).toLowerCase().concat(classDOName.substring(1));
- do2bo.setMethodName("do2bo("+classDOName+" "+varClassName+")");
- do2bo.setReturnClass(boClassName);
- methodBeanList.add(do2bo);
-
- MethodBean dtoList2boList = new MethodBean();
- dtoList2boList.setMethodName("doList2boList(List<"+classDOName+"> "+varClassName+"List)");
- dtoList2boList.setReturnClass("List<"+boClassName+">");
- methodBeanList.add(dtoList2boList);
-
-
-
- MethodBean bo2to = new MethodBean();
- varClassName = boClassName.substring(0,1).toLowerCase().concat(classBean.getClassName().substring(1));
- bo2to.setMethodName("bo2do("+boClassName+" "+varClassName+")");
- bo2to.setReturnClass(classDOName);
- methodBeanList.add(bo2to);
-
- MethodBean boList2dtoList = new MethodBean();
- boList2dtoList.setMethodName("boList2doList(List<"+boClassName+"> "+varClassName+"List)");
- boList2dtoList.setReturnClass("List<"+classDOName+">");
- methodBeanList.add(boList2dtoList);
-
return methodBeanList;
}
-
-
- /**
- * 处理派生类dto-bo convert
- * @param classBean
- * @return
- */
- private List getDTOBOConvertMethodList(ClassBean classBean){
- List methodBeanList = new ArrayList<>();
- MethodBean dto2bo = new MethodBean();
- String boClassName = classBean.getClassName().replace("DTO","BO");
- String varClassName = classBean.getClassName().substring(0,1).toLowerCase().concat(classBean.getClassName().substring(1));
- dto2bo.setMethodName("dto2bo("+classBean.getClassName()+" "+varClassName+")");
- dto2bo.setReturnClass(boClassName);
- methodBeanList.add(dto2bo);
-
- MethodBean dtoList2boList = new MethodBean();
- dtoList2boList.setMethodName("dtoList2boList(List<"+classBean.getClassName()+"> "+varClassName+"List)");
- dtoList2boList.setReturnClass("List<"+boClassName+">");
- methodBeanList.add(dtoList2boList);
-
-
-
- MethodBean bo2to = new MethodBean();
- varClassName = boClassName.substring(0,1).toLowerCase().concat(classBean.getClassName().substring(1));
- bo2to.setMethodName("bo2dto("+boClassName+" "+varClassName+")");
- bo2to.setReturnClass(classBean.getClassName().replace("DTO","BO"));
- methodBeanList.add(bo2to);
-
- MethodBean boList2dtoList = new MethodBean();
- boList2dtoList.setMethodName("boList2dtoList(List<"+boClassName+"> "+varClassName+"List)");
- boList2dtoList.setReturnClass("List<"+classBean.getClassName()+">");
- methodBeanList.add(boList2dtoList);
-
- return methodBeanList;
- }
-
-
-
-
-
- /**
- * 处理派生类facade->facadeimpl
- * @param facadeInterfaceList
- * @return
- */
- private List getFacadeImplList(List facadeInterfaceList){
- List facadeImplList = new ArrayList<>();
-
- for (InterfaceBean interfaceBean : facadeInterfaceList){
- ClassBean classBean = new ClassBean();
- String className = interfaceBean.getClassName()+"Impl";
- classBean.setClassName(className);
- classBean.setClassDesc(classBean.getClassDesc());
- classBean.setPlantUMLPackage("app.facadeimpl");
- if(CollectionUtils.isNotEmpty(interfaceBean.getMethodBeanList())){
- classBean.setMethodBeanList(interfaceBean.getMethodBeanList());
- }else {
- classBean.setMethodBeanList(Lists.newArrayList());
- }
- classBean.setImportClassList(interfaceBean.getImportClassList());
- classBean.setRelationClassStr(" implements "+interfaceBean.getClassName());
- facadeImplList.add(classBean);
- }
- return facadeImplList;
- }
-
- /**
- * 对bo类进行解析
- * @param domainBOList
- * @return
- */
- private List getConvertInterfaceBeanList(List domainBOList){
-
- Map> facadeBOmap = new HashMap<>();
- domainBOList.forEach(classBean -> {
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isFacadeKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String facadeClassName = fieldBeanOptional.get().getFieldName().replace("String","")
- .replace("string","").trim();
- List classBeanList = facadeBOmap.get(facadeClassName);
- if(CollectionUtils.isEmpty(classBeanList)){
- classBeanList = Lists.newArrayList();
- }
- classBeanList.add(classBean);
- facadeBOmap.put(facadeClassName,classBeanList);
- }
- });
-
- List interfaceConvertBeanList = new ArrayList<>();
- facadeBOmap.forEach((k,v)->{
- InterfaceBean convertInterfaceBean = new InterfaceBean();
- String convertClassName = k.replace("Facade","").replace("facade","")+"Convert";
- convertInterfaceBean.setClassName(convertClassName);
- convertInterfaceBean.setPlantUMLPackage("model.convert");
- convertInterfaceBean.setClassDesc(convertClassName);
- Set importClassSet = new HashSet<>();
- List classMethodList = new ArrayList<>();
-
-
- v.stream().forEach(classBean -> {
-
- List methodBeanList = new ArrayList<>();
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(f -> f.isDtoKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String dtoClassNameStr = fieldBeanOptional.get().getFieldName()
- .replace("String","")
- .replace("string","")
- .trim();
-
-
- String [] arr = dtoClassNameStr.split(",");
- for (String dtoClassName : arr){
- importClassSet.add(appServiceConfig.getPackage()+".api.dto."+dtoClassName);
- MethodBean dto2bo = new MethodBean();
- String vardtoName = dtoClassName.substring(0,1).toLowerCase().concat(dtoClassName.substring(1));
- dto2bo.setMethodName("dto2bo("+dtoClassName+" "+vardtoName+")");
- dto2bo.setReturnClass(classBean.getClassName());
- methodBeanList.add(dto2bo);
-
- MethodBean dtoList2boList = new MethodBean();
- dtoList2boList.setMethodName(vardtoName+"s2boList(List<"+dtoClassName+"> "+vardtoName+"List)");
- dtoList2boList.setReturnClass("List<"+classBean.getClassName()+">");
- methodBeanList.add(dtoList2boList);
-
- MethodBean bo2to = new MethodBean();
- String varBOClassName = classBean.getClassName().substring(0,1).toLowerCase().concat(classBean.getClassName().substring(1));
- bo2to.setMethodName("bo2dto("+classBean.getClassName()+" "+varBOClassName+")");
- bo2to.setReturnClass(dtoClassName);
- methodBeanList.add(bo2to);
-
- MethodBean boList2dtoList = new MethodBean();
- boList2dtoList.setMethodName(varBOClassName+"s2dtoList(List<"+classBean.getClassName()+"> "+varBOClassName+"List)");
- boList2dtoList.setReturnClass("List<"+dtoClassName+">");
- methodBeanList.add(boList2dtoList);
- }
- classMethodList.addAll(methodBeanList);
- }
- });
-
- convertInterfaceBean.setImportClassList(Lists.newArrayList(importClassSet));
-
- Map map = new HashMap<>();
- classMethodList
- .stream().filter(methodBean ->
- !methodBean.getMethodName().toLowerCase().contains("response") &&
- !methodBean.getMethodName().toLowerCase().contains("responsedto") &&
- !methodBean.getReturnClass().toLowerCase().contains("request") &&
- !methodBean.getReturnClass().toLowerCase().contains("requestdto") ||
- methodBean.getReturnClass().toLowerCase().contains("requestbo")
- ).collect(Collectors.toList()).forEach(methodBean -> map.putIfAbsent(methodBean.getReturnClass()+methodBean.getMethodName(),methodBean));
- convertInterfaceBean.setMethodBeanList(map.values().stream().collect(Collectors.toList()));
- interfaceConvertBeanList.add(convertInterfaceBean);
- });
-
- return interfaceConvertBeanList;
-
- }
-
-
- /**
- * 对bo类进行解析
- * @param domainBOList
- * @return
- */
- private List getConvertBOVOInterfaceBeanList(List domainBOList){
-
- Map> contrllerBOmap = new HashMap<>();
- domainBOList.forEach(classBean -> {
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(fieldBean -> fieldBean.isControllerKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String controllerClassName = fieldBeanOptional.get().getFieldName().replace("String","")
- .replace("string","").trim();
- List classBeanList = contrllerBOmap.get(controllerClassName);
- if(CollectionUtils.isEmpty(classBeanList)){
- classBeanList = Lists.newArrayList();
- }
- classBeanList.add(classBean);
- contrllerBOmap.put(controllerClassName,classBeanList);
- }
- });
-
- List interfaceConvertBeanList = new ArrayList<>();
- contrllerBOmap.forEach((k,v)->{
- InterfaceBean convertInterfaceBean = new InterfaceBean();
- String convertClassName = k.replace("Controller","").replace("controller","")+"Convertervobo";
- convertInterfaceBean.setClassName(convertClassName);
- convertInterfaceBean.setPlantUMLPackage("model.convert");
- convertInterfaceBean.setClassDesc(convertClassName);
- Set importClassSet = new HashSet<>();
- List classMethodList = new ArrayList<>();
-
-
- v.stream().forEach(classBean -> {
-
- List methodBeanList = new ArrayList<>();
- Optional fieldBeanOptional = classBean.getFieldBeanList().stream().filter(f -> f.isVoKey()).findFirst();
- if(fieldBeanOptional.isPresent()){
- String voClassNameStr = fieldBeanOptional.get().getFieldName()
- .replace("String","")
- .replace("string","")
- .trim();
-
-
- String [] arr = voClassNameStr.split(",");
- for (String voClassName : arr){
- String varBOClassName = classBean.getClassName().substring(0,1).toLowerCase().concat(classBean.getClassName().substring(1));
-
- importClassSet.add(appServiceConfig.getPackage()+".adapter.vo."+voClassName);
- MethodBean dto2bo = new MethodBean();
- String varVoName = voClassName.substring(0,1).toLowerCase().concat(voClassName.substring(1));
- dto2bo.setMethodName("vo2bo("+voClassName+" "+varVoName+")");
- dto2bo.setReturnClass(classBean.getClassName());
- methodBeanList.add(dto2bo);
-
- MethodBean dtoList2boList = new MethodBean();
- String tmpVar = varVoName.replace(varBOClassName.replace("BO","").replace("Bo",""),"");
- varVoName = tmpVar.substring(0,1).toLowerCase().concat(tmpVar.substring(1));
- if(StringUtils.isEmpty(varVoName)){
- varVoName = "vo";
- }
-
- dtoList2boList.setMethodName(varVoName+"List2boList(List<"+voClassName+"> "+varVoName+"List)");
- dtoList2boList.setReturnClass("List<"+classBean.getClassName()+">");
- methodBeanList.add(dtoList2boList);
-
- MethodBean bo2to = new MethodBean();
- tmpVar = voClassName.replace(classBean.getClassName().replace("BO","").replace("Bo",""),"");
-
- bo2to.setMethodName("bo2"+tmpVar+"("+classBean.getClassName()+" "+varBOClassName+")");
- bo2to.setReturnClass(voClassName);
- methodBeanList.add(bo2to);
-
- MethodBean boList2dtoList = new MethodBean();
- boList2dtoList.setMethodName(varBOClassName+"List2"+tmpVar+"List(List<"+classBean.getClassName()+"> "+varBOClassName+"List)");
- boList2dtoList.setReturnClass("List<"+voClassName+">");
- methodBeanList.add(boList2dtoList);
- }
- classMethodList.addAll(methodBeanList);
- }
- });
-
- convertInterfaceBean.setImportClassList(Lists.newArrayList(importClassSet));
-
- Map map = new HashMap<>();
- classMethodList
- .stream().filter(methodBean ->
- !methodBean.getMethodName().toLowerCase().contains("response") &&
- !methodBean.getMethodName().toLowerCase().contains("responsevo") &&
- !methodBean.getReturnClass().toLowerCase().contains("request") &&
- !methodBean.getReturnClass().toLowerCase().contains("requestvo") ||
- methodBean.getReturnClass().toLowerCase().contains("requestbo")
- ).collect(Collectors.toList()).forEach(methodBean -> map.putIfAbsent(methodBean.getReturnClass()+methodBean.getMethodName(),methodBean));
- convertInterfaceBean.setMethodBeanList(map.values().stream().collect(Collectors.toList()));
- interfaceConvertBeanList.add(convertInterfaceBean);
- });
-
- return interfaceConvertBeanList;
-
- }
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicDDDWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicDDDWriteServiceImpl.java
index 805dc73ef27dee6e63c4183c0077948d8217a87f..f830d786d329e2db8ecc367fe64535266cdffd14 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicDDDWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicDDDWriteServiceImpl.java
@@ -93,6 +93,26 @@ public class DynamicDDDWriteServiceImpl extends WriteService implements IWriteFi
}
+ //写domain.event
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.EVENT_BODY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.event");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+
+ }
+
//写domain.gataway
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.GATAWAY.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
@@ -114,9 +134,9 @@ public class DynamicDDDWriteServiceImpl extends WriteService implements IWriteFi
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.GATAWAY_IMPL.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
- classContentBean.setHumpClassName(writeContentBean.getHumpClassName()+"Impl");
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("domain.gataway.impl");
- classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".impl");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
@@ -191,8 +211,8 @@ public class DynamicDDDWriteServiceImpl extends WriteService implements IWriteFi
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL_IMPL.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
- classContentBean.setHumpClassName(writeContentBean.getHumpClassName()+"Impl");
- classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".impl");
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
if(writeContentBean.getHumpClassName().toLowerCase().contains(TemplateFileEnum.ACL.getTempFileName())){
classContentBean.setChildPackageName("infrast.acl.impl");
}else {
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicInvokeHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicInvokeHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..96c3253efc5f394bbaa27cb256beef7bed55f584
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicInvokeHandler.java
@@ -0,0 +1,37 @@
+package com.coderman.codemaker.app.dynamicddd;
+
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.service.ReadInvokePlantUMLFileService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Description:
+ * date: 2021/10/19
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Service
+public class DynamicInvokeHandler {
+
+ @Autowired
+ private ReadInvokePlantUMLFileService readInvokePlantUMLFileService;
+
+ /**
+ * 进行动态调用的入口
+ * @param plantUmlContextBean
+ */
+ public void exeDynamicInvoke(PlantUmlContextBean plantUmlContextBean){
+ if(CollectionUtils.isNotEmpty(plantUmlContextBean.getDynamicInvokeFileList())){
+ plantUmlContextBean.getDynamicInvokeFileList().forEach(plantUmlFile->{
+ readInvokePlantUMLFileService.parseInvokeChainList(plantUmlContextBean,plantUmlFile);
+ });
+ }
+ }
+
+
+
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java
index f9a41663b08b11913ead5a80152479c749c77de2..45c234e9f34cfb950cade98c97c5d02ae115cece 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java
@@ -4,13 +4,16 @@ import com.coderman.codemaker.app.ImportPackageService;
import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
import com.coderman.codemaker.bean.dddelementderive.ControllerElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.MethodBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
/**
* Description:
@@ -41,6 +44,16 @@ public class DerivedControllerElementHandler implements DomainElementHandler methodBeanFilterList = v.getMethodBeanList().stream().filter(methodBean ->
+ methodBean.getMethodName().toLowerCase().contains(v.getClassName().toLowerCase())
+ ).collect(Collectors.toList());
+ //如果有多个facade则覆盖默认的方法列表
+ if(CollectionUtils.isNotEmpty(methodBeanFilterList)){
+ methodBeanFilterList.stream().forEach(methodBean -> methodBean.setMethodName(methodBean.getMethodName().split("\\.")[1]));
+ v.setMethodBeanList(methodBeanFilterList);
+ }
+ v.getMethodBeanList().forEach(methodBean -> methodBean.buildDoc());
classBeanList.add(v);
}
});
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDOBOConvertElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDOBOConvertElementHandler.java
index b938f3e3e0cc7a43946eb7bda3befd9d347beb91..68bf68d13b1a7f505e64ebb4e05ee7b2d92e4b00 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDOBOConvertElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDOBOConvertElementHandler.java
@@ -37,7 +37,8 @@ public class DerivedDOBOConvertElementHandler implements DomainElementHandler convertElementBeanList = new ArrayList<>();
plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.DOBO_CONVERT.getElement())){
- importPackageService.setPackageName(v,"data.convert");
+ v.setPlantUMLPackage(null);
+ importPackageService.setPackageName(v,"infrast.dataconvert");
String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
v.setClassName(className.substring(0,className.lastIndexOf("er")));
convertElementBeanList.add(v);
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOBOConvertElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOBOConvertElementHandler.java
index 92a31d61d702e3095de87b77b52d5c63b42c4d14..a82394183750d0506cdff589fc78898002a00250 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOBOConvertElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOBOConvertElementHandler.java
@@ -39,7 +39,8 @@ public class DerivedDTOBOConvertElementHandler implements DomainElementHandler convertElementBeanList = new ArrayList<>();
plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.DTOBO_CONVERT.getElement())){
- importPackageService.setPackageName(v,"model.convert");
+ v.setPlantUMLPackage(null);
+ importPackageService.setPackageName(v,"app.convert");
String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
v.setClassName(className);
convertElementBeanList.add(v);
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedEnumElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedEnumElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..99e633ca8a8332c8f04c258dab4162a78ff560e6
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedEnumElementHandler.java
@@ -0,0 +1,54 @@
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DerivedClassFactory;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelementderive.DtoElementBean;
+import com.coderman.codemaker.bean.dddelementderive.EnumElementBean;
+import com.coderman.codemaker.bean.plantuml.*;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理派生类domain.enum->rpc.client.enum
+ */
+@Component(value = "derivedEnumElementHandler")
+public class DerivedEnumElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public EnumElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ EnumElementBean enumElementBean = new EnumElementBean();
+ List enumElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getEnumBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.ENUM.getElement())){
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ List beanList = v.getFieldBeanList().stream().filter(f -> !f.isCopyToRpcClientKey())
+ .collect(Collectors.toList());
+ v.setFieldBeanList(beanList);
+ enumElementBeanList.add(v);
+ }
+ });
+ enumElementBean.setEnumBeanList(enumElementBeanList);
+
+ return enumElementBean;
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeElementHandler.java
index 3c58c2dc376c393ec8229f76597601741c2b6f8f..1c2aeea14dacc5a17ea5edd09193c93023a56728 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeElementHandler.java
@@ -12,6 +12,7 @@ import com.coderman.codemaker.bean.plantuml.MethodBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
import com.coderman.codemaker.enums.DomainDerivedElementEnum;
import com.coderman.codemaker.enums.DomainElementEnum;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -54,8 +55,19 @@ public class DerivedFacadeElementHandler implements DomainElementHandler methodBeanFilterList = methodBeanList.stream().filter(methodBean ->
+ methodBean.getMethodName().toLowerCase().contains(v.getClassName().toLowerCase())
+ ).collect(Collectors.toList());
+ //如果有多个facade则覆盖默认的方法列表
+ if(CollectionUtils.isNotEmpty(methodBeanFilterList)){
+ methodBeanFilterList.stream().forEach(methodBean -> methodBean.setMethodName(methodBean.getMethodName().split("\\.")[1]));
+ v.setMethodBeanList(methodBeanFilterList);
+ }
+ v.getMethodBeanList().forEach(methodBean -> methodBean.buildDoc());
+
facadeElementBeanList.add(v);
}
});
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedGatawayImplElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedGatawayImplElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c5d4a628f0ffe03ff47a6aae79f6b4b2760939f
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedGatawayImplElementHandler.java
@@ -0,0 +1,64 @@
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DerivedClassFactory;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelementderive.FacadeImplElementBean;
+import com.coderman.codemaker.bean.dddelementderive.GatawayImplElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理gatawayimpl
+ */
+@Component(value = "derivedGatawayImplElementHandler")
+public class DerivedGatawayImplElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public GatawayImplElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ GatawayImplElementBean gatawayImplElementBean = new GatawayImplElementBean();
+
+ List interfaceBeanList = new ArrayList<>();
+ plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.GATAWAY.getElement())){
+ importPackageService.setPackageName(v,"app.facadeimpl");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ interfaceBeanList.add(v);
+ }
+ });
+
+
+ List gatawayImplElementBeanList = derivedClassFactory.deriveGataway2GatawayImpl(interfaceBeanList,plantUmlContextBean);
+
+ gatawayImplElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ gatawayImplElementBean.setClassBeanList(gatawayImplElementBeanList);
+
+
+ return gatawayImplElementBean;
+
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedInfrastAclImplElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedInfrastAclImplElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..90ceea6e17f758b303467e571ada786168e12add
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedInfrastAclImplElementHandler.java
@@ -0,0 +1,59 @@
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DerivedClassFactory;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelementderive.GatawayImplElementBean;
+import com.coderman.codemaker.bean.dddelementderive.InfrastAclImplElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理infrastaclImpl
+ */
+@Component(value = "derivedInfrastAclImplElementHandler")
+public class DerivedInfrastAclImplElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public InfrastAclImplElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+
+ InfrastAclImplElementBean infrastAclImplElementBean = new InfrastAclImplElementBean();
+
+ List interfaceBeanList = new ArrayList<>();
+ plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.ACL.getElement())
+ || v.getClassName().toLowerCase().endsWith(DomainElementEnum.ADAPTER.getElement())){
+ interfaceBeanList.add(v);
+ }
+ });
+
+
+ List infrastAclImplElementBeanList = derivedClassFactory.deriveInfrastAcl2InfrastImpl(interfaceBeanList,plantUmlContextBean);
+
+ infrastAclImplElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ infrastAclImplElementBean.setClassBeanList(infrastAclImplElementBeanList);
+
+
+ return infrastAclImplElementBean;
+
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedRepositoryImplElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedRepositoryImplElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..589fa323f356cdf663d4ad38d912c0ae1d0f4e35
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedRepositoryImplElementHandler.java
@@ -0,0 +1,63 @@
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DerivedClassFactory;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelementderive.FacadeImplElementBean;
+import com.coderman.codemaker.bean.dddelementderive.GatawayImplElementBean;
+import com.coderman.codemaker.bean.dddelementderive.RepositoryImplElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理repositoryimpl
+ */
+@Component(value = "derivedRepositoryImplElementHandler")
+public class DerivedRepositoryImplElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public RepositoryImplElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ RepositoryImplElementBean repositoryImplElementBean = new RepositoryImplElementBean();
+ List repositoryElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.REPOSITORY.getElement())){
+ importPackageService.setPackageName(v,"app.facadeimpl");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ repositoryElementBeanList.add(v);
+ }
+ });
+
+ List repositoryImplElementBeanList = derivedClassFactory.deriveRepository2RepositoryImpl(repositoryElementBeanList,plantUmlContextBean);
+
+
+ repositoryImplElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ repositoryImplElementBean.setClassBeanList(repositoryImplElementBeanList);
+
+ return repositoryImplElementBean;
+
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOElementHandler.java
index aef1819fe881a9a45962f993aa4572279ef129d2..cf99ec051853e4ce7065024efe29b8d3969a3334 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOElementHandler.java
@@ -51,6 +51,7 @@ public class DerivedVOElementHandler implements DomainElementHandler methodBean.buildDoc());
interfaceBeanList.add(v);
}
});
@@ -52,6 +53,7 @@ public class AppExeElementHandler implements DomainElementHandler methodBean.buildDoc());
classBeanList.add(v);
}
});
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppListenerElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppListenerElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ab4d620e4fda6c9cbafee2d569df72b112b14ca
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppListenerElementHandler.java
@@ -0,0 +1,48 @@
+package com.coderman.codemaker.app.dynamicddd.handler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelement.AppListenerElementBean;
+import com.coderman.codemaker.bean.dddelement.FactoryElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * date: 2021/6/29
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "appListenerElementHandler")
+public class AppListenerElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public AppListenerElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ AppListenerElementBean appListenerElementBean = new AppListenerElementBean();
+ List appListenerElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.APP_LISTENER.getElement())){
+ importPackageService.setPackageName(v,"app.listener");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ importPackageService.dealImportClass(v,plantUmlContextBean);
+ appListenerElementBeanList.add(v);
+ }
+ });
+ appListenerElementBean.setClassBeanList(appListenerElementBeanList);
+ return appListenerElementBean;
+ }
+
+}
+
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainBoElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainBoElementHandler.java
index bf6c650bdcb90513f1cfea3c07ee45b4f12b6a7b..e7af09010db487a16213f8f292b56b632ba7c8ba 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainBoElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainBoElementHandler.java
@@ -1,5 +1,6 @@
package com.coderman.codemaker.app.dynamicddd.handler;
+import com.alibaba.fastjson.JSON;
import com.coderman.codemaker.app.ImportPackageService;
import com.coderman.codemaker.app.dynamicddd.DerivedClassFactory;
import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
@@ -46,31 +47,46 @@ public class DomainBoElementHandler implements DomainElementHandler boWithVoKeyList = new ArrayList<>();
List boWithControllerKeyList = new ArrayList<>();
-
//过滤带有数据库表映射的bo
plantUmlContextBean.getClassBeanMap().forEach((k, v) -> {
- importPackageService.setPackageName(v, "domain.bo");
+
if (v.getClassName().toLowerCase().endsWith(DomainElementEnum.BO.getElement())) {
+ importPackageService.setPackageName(v, "domain.bo");
Optional optionalFieldBean = v.getFieldBeanList().stream().filter(f -> f.isTableKey()).findFirst();
if (optionalFieldBean.isPresent()) {
boWithTableKeyList.add(v);
+ v.getExtendFieldBean().buildTableKey(optionalFieldBean.get().getFieldName());
}
Optional optionalFieldBeanDtoKey = v.getFieldBeanList().stream().filter(f -> f.isDtoKey()).findFirst();
if (optionalFieldBeanDtoKey.isPresent()) {
boWithDtoKeyList.add(v);
+ v.getExtendFieldBean().buildDtoKeyArr(optionalFieldBeanDtoKey.get().getFieldName());
}
Optional optionalFieldBeanFacadeKey = v.getFieldBeanList().stream().filter(f -> f.isFacadeKey()).findFirst();
if (optionalFieldBeanFacadeKey.isPresent()) {
boWithFacadeKeyList.add(v);
+ v.getExtendFieldBean().buildFacadeKeyArr(optionalFieldBeanFacadeKey.get().getFieldName());
}
Optional optionalFieldBeanVOKey = v.getFieldBeanList().stream().filter(f -> f.isVoKey()).findFirst();
if (optionalFieldBeanVOKey.isPresent()) {
boWithVoKeyList.add(v);
+ v.getExtendFieldBean().buildVoKeyArr(optionalFieldBeanVOKey.get().getFieldName());
+
}
Optional optionalFieldBeanControllerKey = v.getFieldBeanList().stream().filter(f -> f.isControllerKey()).findFirst();
if (optionalFieldBeanControllerKey.isPresent()) {
boWithControllerKeyList.add(v);
+ v.getExtendFieldBean().buildControllerKeyArr(optionalFieldBeanControllerKey.get().getFieldName());
+
+ }
+
+ Optional optionalFieldBeanInvokeFileKey= v.getFieldBeanList().stream().filter(f -> f.isInvokeFileKey()).findFirst();
+ if (optionalFieldBeanInvokeFileKey.isPresent()) {
+ v.getExtendFieldBean().buildInvokeFileKeyArr(optionalFieldBeanInvokeFileKey.get().getFieldName());
+
+ String invokeFileName = optionalFieldBeanInvokeFileKey.get().getFieldName().replace("String","").replace("string","").trim();
+ plantUmlContextBean.addDynamicInvokeFile(invokeFileName);
}
}
});
@@ -89,9 +105,9 @@ public class DomainBoElementHandler implements DomainElementHandler {
if (v.getClassName().toLowerCase().endsWith(DomainElementEnum.BO.getElement())) {
//过滤扩展属性
@@ -116,6 +130,7 @@ public class DomainBoElementHandler implements DomainElementHandler importPackageService.dealImportClass(v, plantUmlContextBean));
domainBoElementBean.setClassBeanList(domainBoElementBeanList);
-
-
-
return domainBoElementBean;
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java
index c8da338873e0b4c4491daba58872508837758fd2..ce78bf21578a7b4421d21be8b659c1f2fd4ca772 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java
@@ -37,6 +37,7 @@ public class DomainFactoryElementHandler implements DomainElementHandler methodBean.buildDoc());
}
});
factoryElementBean.setClassBeanList(domainBoElementBeanList);
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java
index a141be79f9b0ec8a5f45572b838508eeb75a7d82..ccef099aa01216529a37abaaec5b3f88694e6661 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java
@@ -3,9 +3,12 @@ package com.coderman.codemaker.app.dynamicddd.handler;
import com.coderman.codemaker.app.ImportPackageService;
import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
import com.coderman.codemaker.bean.dddelement.GatawayElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+import com.coderman.codemaker.bean.plantuml.MethodBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
import com.coderman.codemaker.enums.DomainElementEnum;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -37,6 +40,8 @@ public class DomainGatawayElementHandler implements DomainElementHandler methodBean.buildDoc());
+
}
});
gatawayElementBean.setInterfaceBeanList(gatawInterfaceBeanList);
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java
index 3147ee0df32b29582020d4d8e56e74a2390eae51..1d5f5076ec536e7d39624dd7a44f0e33c75bdeaf 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java
@@ -1,5 +1,18 @@
package com.coderman.codemaker.app.dynamicddd.handler;
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelement.DomainEventElementBean;
+import com.coderman.codemaker.bean.dddelement.DomainMsgBodyElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Description:
* date: 2021/6/30
@@ -8,5 +21,28 @@ package com.coderman.codemaker.app.dynamicddd.handler;
* @version 1.0.0
* @since JDK 1.8
*/
-public class EventElementHandler {
+@Component(value = "eventElementHandler")
+public class EventElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+
+ @Override
+ public DomainEventElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ DomainEventElementBean domainEventElementBean = new DomainEventElementBean();
+ List domainmsgBodyBeanList = new ArrayList<>();
+ plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.EVENT.getElement())){
+ importPackageService.setPackageName(v,"domain.event");
+
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ importPackageService.dealImportClass(v,plantUmlContextBean);
+ domainmsgBodyBeanList.add(v);
+ }
+ });
+ domainEventElementBean.setClassBeanList(domainmsgBodyBeanList);
+ return domainEventElementBean;
+ }
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java
index afec55325000ef9f1799d6ed40698ef1d22366b5..b5c7a86b25b71a5fda7d5d3ca77244384c44fdc1 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java
@@ -31,8 +31,7 @@ import java.util.Set;
@Component(value = "infrastAclElementHandler")
public class InfrastAclElementHandler implements DomainElementHandler {
- @Autowired
- private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig;
+
@Autowired
private ImportPackageService importPackageService;
@@ -104,7 +103,6 @@ public class InfrastAclElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public MqConsumerElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ MqConsumerElementBean mqConsumerElementBean = new MqConsumerElementBean();
+ List appListenerElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.MQ_CONSUMER.getElement())){
+ String moduleTag = "infrast";
+ if(StringUtils.isEmpty(v.getPlantUMLPackage())){
+ moduleTag = moduleTag+".mq.consumer";
+ }
+ importPackageService.setPackageNameWithModule(v,moduleTag);
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ importPackageService.dealImportClass(v,plantUmlContextBean);
+ appListenerElementBeanList.add(v);
+ }
+ });
+ mqConsumerElementBean.setClassBeanList(appListenerElementBeanList);
+ return mqConsumerElementBean;
+ }
+
+}
+
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MqHandlerElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MqHandlerElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..6247b926a90cc6a58e28f69d585ba9c3d00a47f4
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MqHandlerElementHandler.java
@@ -0,0 +1,53 @@
+package com.coderman.codemaker.app.dynamicddd.handler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelement.AppListenerElementBean;
+import com.coderman.codemaker.bean.dddelement.MqHandlerElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * date: 2021/6/29
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "mqHandlerElementHandler")
+public class MqHandlerElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public MqHandlerElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ MqHandlerElementBean mqHandlerElementBean = new MqHandlerElementBean();
+ List appListenerElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.MQ_HANDLER.getElement())){
+ String moduleTag = "infrast";
+ if(StringUtils.isEmpty(v.getPlantUMLPackage())){
+ moduleTag = moduleTag+".mq.handler";
+ }
+ importPackageService.setPackageNameWithModule(v,moduleTag);
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ importPackageService.dealImportClass(v,plantUmlContextBean);
+ appListenerElementBeanList.add(v);
+ }
+ });
+ mqHandlerElementBean.setClassBeanList(appListenerElementBeanList);
+ return mqHandlerElementBean;
+ }
+
+}
+
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MqProducerElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MqProducerElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..1014de216e3c32144fbb055ecb8e9c978c0d9783
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MqProducerElementHandler.java
@@ -0,0 +1,54 @@
+package com.coderman.codemaker.app.dynamicddd.handler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelement.AppListenerElementBean;
+import com.coderman.codemaker.bean.dddelement.MqProducerElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * date: 2021/6/29
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "mqProducerElementHandler")
+public class MqProducerElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public MqProducerElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ MqProducerElementBean mqProducerElementBean = new MqProducerElementBean();
+ List appListenerElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.MQ_PRODUCER.getElement())){
+ String moduleTag = "infrast";
+ if(StringUtils.isEmpty(v.getPlantUMLPackage())){
+ moduleTag = moduleTag+".mq.producer";
+ }
+ importPackageService.setPackageNameWithModule(v,moduleTag);
+
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ importPackageService.dealImportClass(v,plantUmlContextBean);
+ appListenerElementBeanList.add(v);
+ }
+ });
+ mqProducerElementBean.setClassBeanList(appListenerElementBeanList);
+ return mqProducerElementBean;
+ }
+
+}
+
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java
index 578ca4e0f8fd5f5ed718ed3c1d799f77d462f42b..afe28d964eebb0accb83a709772b9b1d29930a81 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java
@@ -6,6 +6,7 @@ import com.coderman.codemaker.bean.dddelement.RepositoryElementBean;
import com.coderman.codemaker.bean.plantuml.InterfaceBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
import com.coderman.codemaker.enums.DomainElementEnum;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -37,6 +38,7 @@ public class RepositoryElementHandler implements DomainElementHandler