diff --git a/API.md b/API.md
new file mode 100644
index 0000000000000000000000000000000000000000..9b7ed94598d8183e908eaca3e27f7c88a3fe899a
--- /dev/null
+++ b/API.md
@@ -0,0 +1,304 @@
+#### 一、单个代码元素生成接口
+
+##### 1. 生成entity
+1. 请求地址:http://127.0.0.1:8099/getproject/mapper
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:此接口基本不再参与代码生成,entity模型后续会被DO(dataobject)
+替代
+
+##### 2. 生成mapper
+1. 请求地址:http://127.0.0.1:8099/getproject/mapper
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表的mapper代码生成,
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-common子模块,
+ 3. 在cola项目存储于cola-infrast子模块
+
+
+##### 3. 生成do
+1. 请求地址:http://127.0.0.1:8099/getproject/do
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表的do(dataobject,也就是entity)代码生成,
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-common子模块,
+ 3. 在cola项目存储于cola-infrast子模块
+
+##### 4. 生成vo
+1. 请求地址:http://127.0.0.1:8099/getproject/vo
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表或者plantUML类图中bo类的vo(viewobject)代码生成,
+ 1. 在springboot项目是单模块存储,
+ 2. 由于dubbo没有viewobject(VO)的概念,因此不支持vo生成
+ 3. 在cola项目存储于cola-adapter子模块
+
+##### 5. 生成service+serviceimpl
+1. 请求地址:http://127.0.0.1:8099/getproject/service
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表的代码生成,
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-domain子模块
+ 4. 由于plantUML类中也有service的概念,这里暂时只支持基于数据库表的service代码生成
+ 后续发版会补充完善
+
+##### 6. 生成mapperxml
+1. 请求地址:http://127.0.0.1:8099/getproject/mapperxml
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表的代码生成,统一存储于resources/mapper文件夹下
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-infrast子模块
+
+
+##### 7. 生成controller
+1. 请求地址:http://127.0.0.1:8099/getproject/controller
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表或者plantUML.BO类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. dubbo项目里没有controller的概念,因此这里不支持
+ 3. 在cola项目存储于cola-adapter子模块
+
+##### 8. 生成test
+1. 请求地址:http://127.0.0.1:8099/getproject/test
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表的代码生成,统一生成在项目里的test目录下
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-common子模块
+ 3. 在cola项目存储于cola-infrast子模块
+ 4. 该接口目前只支持facade,mapper接口测试类的生成,服务类的后续再迭代
+
+##### 9. 生成facade+facadeimpl
+1. 请求地址:http://127.0.0.1:8099/getproject/facade
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表或者plantUML.BO类的代码生成
+ 1. 在springboot项目不支持facade类的生成
+ 2. 在dubbo项目存储于dubbo-api子模块
+ 3. 接口在cola项目存储于cola-client子模块,实现类在cola-app子模块中
+
+
+##### 10. 生成dto
+1. 请求地址:http://127.0.0.1:8099/getproject/dto
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表或者plantUML.BO类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-api子模块
+ 3. 在cola项目存储于cola-client子模块
+
+##### 11. 生成bo
+1. 请求地址:http://127.0.0.1:8099/getproject/bo
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表或者plantUML.BO(Business Object)类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-domain子模块
+
+##### 12. 生成valueobject+enum
+1. 请求地址:http://127.0.0.1:8099/getproject/valueobject
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.BO,plantUML.Enum类(xxxConfig,xxxEum)的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-domain子模块
+
+##### 13. 生成msgbody
+1. 请求地址:http://127.0.0.1:8099/getproject/msgbody
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.msgbody类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-domain子模块
+
+##### 14. 生成gataway+repository+gatawayimpl+repositoryimpl
+1. 请求地址:http://127.0.0.1:8099/getproject/gataway
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.gataway,repository类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-domain子模块,实现类在cola-infrast子模块中
+
+
+##### 15. 生成acladapter+acladapterimpl+aclparam
+1. 请求地址:http://127.0.0.1:8099/getproject/acladapter
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.acladapter类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 接口和实现类和请求参数在cola项目存储于cola-infrast子模块中
+
+##### 16. 生成command
+1. 请求地址:http://127.0.0.1:8099/getproject/command
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.command类的代码生成,支持继承类的解析
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-app子模块中
+
+
+##### 17. 生成executor
+1. 请求地址:http://127.0.0.1:8099/getproject/executor
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.exe类的代码生成,支持接口和抽象类的解析
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-app子模块中
+
+##### 18. 生成factory
+1. 请求地址:http://127.0.0.1:8099/getproject/factory
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.factory类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-domain子模块中
+
+
+##### 19. 生成dtoboconvert
+1. 请求地址:http://127.0.0.1:8099/getproject/dtoboconvert
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.bo 派生类的代码生成
+ 1. springboot项目不支持
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-app子模块中
+
+
+##### 20. 生成voboconvert
+1. 请求地址:http://127.0.0.1:8099/getproject/voboconvert
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于plantUML.bo 派生类的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. dubbo项目不支持
+ 3. 在cola项目存储于cola-adapter子模块中
+
+##### 21. 生成doboconvert
+1. 请求地址:http://127.0.0.1:8099/getproject/doboconvert
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表和plantuml扩展key的代码生成
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-infrast子模块中
+
+
+##### 22. 生成erpicture
+1. 请求地址:http://127.0.0.1:8099/getproject/erpicture
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:基于数据库表生成,统一存储于resources/erpicture目录下
+ 1. 在springboot项目是单模块存储,
+ 2. 在dubbo项目存储于dubbo-core子模块
+ 3. 在cola项目存储于cola-infrast子模块中
+
+
+
+#### 二、整体一站式的代码生成接口
+##### 1. 极简模式下生成所有代码
+1. 请求地址:http://127.0.0.1:8099/makeall
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:
+
+##### 2. 极速模式下生成所有代码
+1. 请求地址:http://127.0.0.1:8099/makeallfast
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:此接口只支持sprinboot项目下的代码生成
+
+
+##### 3.生成指定的表对应的项目代码
+1. 请求地址:http://127.0.0.1:8099/makemodules
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:tableNames:多个表的表名
+5. 返回结果:success
+6. 特殊说明:
+
+
+
+##### 4.生成指定的表对应的项目代码--极速模式
+1. 请求地址:http://127.0.0.1:8099/makemodulesfast
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:tableNames:多个表的表名
+5. 返回结果:success
+6. 特殊说明:
+
+
+##### 5.基于plantUML类图文档生成基于DDD的模块代码
+1. 请求地址:http://127.0.0.1:8099/makeddd
+2. 调用方式:GET
+3. 请求方式:HTTP
+4. 请求参数:无
+5. 返回结果:success
+6. 特殊说明:该接口不依赖于数据库配置,只生成基于plantUML类图的ddd代码,
+ 代码存储于dynamic-ddd模块中
+
+#### 三、极速模式下的代码生成接口
+说明:极速模式下的代码生成目前只适用于springboot的项目工程。
+新版本的迭代会逐步支持dubbo,cola,dynamic的极速模式。
diff --git a/README.md b/README.md
index 4b754d49ad6a0c4972219a3b5bb10dcb91b65d45..a40796db83cf770aef1636dafb7d4bab8ed4defd 100644
--- a/README.md
+++ b/README.md
@@ -9,33 +9,54 @@ coderMaker 立足于低代码平台,致力于解决软件开发过程中的效
2. 基于mysql + mybatis + spring boot生成项目增删改查等功能
3. 项目工具目前主要是为了构建可复用的代码生成服务,后续会继续沉淀其他代码生成服务
4. 总体目标是为构建大规模springboot应用的技术底座,提高开发效率,专注业务领域,数据模型。
+5. 目前已演化为支持多框架应用+动态ddd的Java代码生成平台
#### 项目计划
-1. 目前第一版mvp已经基本可用,后续继续优化(80%)
-2. 后续会按计划增加可复用的配置模板,比如application.properties
-3. 按需生成公共服务类
-4. 按需生成公共组件配置,如nacos,redis,sentinel等
+1. 参考todoList文件内容
+2. 参考changeList文件额你容
#### 功能列表
-1. 提供便捷且所见即所得的代码生成服务
+0. 所建即所得,文档即代码的代码生成服务理念
+1. 提供便捷且所建即所得的代码生成服务
2. 提供便捷的sql脚本(支持分库分表)生成服务
3. 提供一键式的数据库e-r图生成服务
-4. 提供基于COLA架构下的代码生成服务
+4. 提供基于springboot,cola,dubbo应用框架和架构下的应用级代码生成服务
+5. 提供基于plantuml类图的dynamic-ddd模块级的代码生成服务
+6. 支持基于数据库表的代码生成和支持plantuml领域文档的代码生成服务
+
#### 软件架构
1. 整个项目分为多个工程模块
+
codermaker-core:代码生成的核心模块
+
codermaker-dberPicture:根据数据库表结构或者按照指定数据接口生成对应数据模型e-r图(基于plantUML)
+
codermaker-dbops:数据库表结构运维工具,根据配置的sql字段内容生成单表或者多表或者分库分表的sql脚本
-codermaker-web:基于springboot应用生成的代码会放在这里
+
+codermaker-springboot:基于springboot应用生成的代码会放在这里
+
codemaker-dubbo:基于dubbo应用框架生成的代码会放在这里
- 1.dubbo-api:dubbo应用的consumer接口声明子模块
- 2.dubbo-common:dubbo应用的持久化层子模块
- 3.dubbo-core:dubbo应用的provider实现层模块
+ 1. dubbo-api:dubbo应用的consumer接口声明子模块
+ 2. dubbo-common:dubbo应用的持久化层子模块
+ 3. dubbo-core:dubbo应用的provider实现层子模块
+
codemaker-dynamicddd:基于plantUML类图+DDD思想生成的代码会放在这里
+codemaker-cola:基于cola应用框架生成的代码会放在这里
+ 1. cola-client:cola应用的rpc接口声明子模块
+ 2. cola-adapter:cola应用的适配层子模块
+ 3. cola-app:cola应用的应用层子模块
+ 4. cola-infrast:cola应用的基础设施层子模块
+ 5. cola-domain:cola应用的领域层子模块
+
2. 架构图
+ 1. v1版本
.png)
+ 2. v2版本
+-v2.png)
+
+
#### 版本变更
1. 实现codermaker-core代码生成功能 1.0.0
@@ -44,6 +65,7 @@ codemaker-dynamicddd:基于plantUML类图+DDD思想生成的代码会放在这
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.application.properties:代码生成服务的核心配置
@@ -94,37 +116,30 @@ application.type=dubbo
```
2.projecttemplate-dubbo.properties:生成dubbo应用代码的配置
```
-#目标工程根包名称
-dubbo.global.package=com.snail.school.manager
-#作者
-dubbo.global.author=fanchunshuai
#数据库名称
dubbo.global.dbName=school_manager
-
-dubbo.global.applicationName=school-manager
-
#目标工程输出目录,这里填写对应的工程的绝对路径
dubbo.code.outpath.dubbo-common=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dubbo\\dubbo-common
dubbo.code.outpath.dubbo-api=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dubbo\\dubbo-api
dubbo.code.outpath.dubbo-core=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dubbo\\dubbo-core
+#应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码
+codemaker.domain.plantuml=
```
+
3.projecttemplate-springboot.properties:生成springboot应用代码的配置
```
-#目标工程根包名称
-codemaker.global.package=com.snail.school.manager
-#作者
-codemaker.global.author=fanchunshuai
#数据库名称
codemaker.global.dbName=school_manager
-#项目名称
-codemaker.pom.projectName=school_manager
#maven坐标-GAV
codemaker.pom.groupId=com.snail.school.manager
codemaker.pom.artifactId=schoolmanager-web
codemaker.pom.version=1.0.0.SNAPSHOT
#目标工程输出目录,这里填写对应的codemaker-web工程的绝对路径
codemaker.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-springboot
+#应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码
+codemaker.domain.plantuml=
```
+
4.projecttemplate-dynamicddd.properties:生成dynamicddd模块的代码配置
```
@@ -139,6 +154,26 @@ dynamicddd.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-
dynamicddd.domain.plantuml=CommonAuth.puml
```
+5.projecttemplate-cola.properties:生成cola应用的代码配置
+```
+#数据库名称
+cola.global.dbName=school_manager
+
+cola.global.applicationName=school-manager
+
+#目标工程输出目录,这里填写对应的工程的绝对路径
+cola.code.outpath.cola-adapter=/Users/dasouche/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-adapter
+cola.code.outpath.cola-infrast=/Users/dasouche/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-infrast
+cola.code.outpath.cola-app=/Users/dasouche/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-app
+cola.code.outpath.cola-domain=/Users/dasouche/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-domain
+cola.code.outpath.cola-client=/Users/dasouche/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-client
+
+#应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码
+cola.domain.plantuml=
+
+```
+
+
#### sql表结构生成服务使用流程
##### 数据库支持
目前仅支持mysql数据库,其他数据库可基于本项目二次开发进行支持
@@ -146,16 +181,24 @@ dynamicddd.domain.plantuml=CommonAuth.puml
#### 代码生成服务使用流程
##### 1.应用级项目生成
1. 配置codemaker-core的application.properties中的数据库访问配置项,配置需要生成的应用类型(application.type取值:支持springboot,dubbo,cola)
-2. 根据说明配置codemaker-core的projecttemplate.properties配置文件
+2. 根据应用类型配置对应的projecttemplate-*.properties配置文件
3. 配置完成之后启动codemaker-core工程,默认端口为8099
-4. 打开浏览器访问http://localhost:8099/makeall生成极简模式代码,生成的代码会放在codemaker-web下面的对应目录下,所操作即所得
-5. 打开浏览器访问http://localhost:8099/makeallfast生成极速模式代码,生成的代码会放在codemaker-web下面的对应目录下,所操作即所得
+4. 打开浏览器访问http://localhost:8099/makeall生成极简模式代码,生成的代码会放在codemaker-web下面的对应目录下
+5. 打开浏览器访问http://localhost:8099/makeallfast生成极速模式代码,生成的代码会放在codemaker-web下面的对应目录下
6. 如有特殊需求进行定制则可通过codemaker-core工程中的resources/template模板进行调整
+
+
##### 2.dynamicddd模块级代码生成
1. 将项目的plantUML类图放到codemaker-core的resources下的ddd-plantuml文件夹
2. 配置projecttemplate-dynamicddd.properties
3. 启动服务,浏览器打开输入http://localhost:8099/makeddd
4. 执行完毕查看codemaker-dynamicddd工程模块下的代码是否已经生成
+
+##### 3.接口文档
+[API.md](API.md)
+
+
+
#### 参与贡献
1. Fork 本仓库
diff --git a/changeList b/changeList
index c99a10f4e1016427ac70d0f963f7a28766320375..b940acd80990be9f14ef1edc710f46db5084a9a2 100644
--- a/changeList
+++ b/changeList
@@ -27,3 +27,32 @@
8.修复若干其他bug
+7. verison 1.1.0 变更
+ 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类图文档的代码生成
+
+
diff --git a/codemaker-cola/cola-adapter/pom.xml b/codemaker-cola/cola-adapter/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..feb1efb629576d2bef423428b0847ad1e999a21b
--- /dev/null
+++ b/codemaker-cola/cola-adapter/pom.xml
@@ -0,0 +1,91 @@
+
+
+
+ 4.0.0
+
+
+
+ codemaker-cola
+ com.codemaker.cola
+ 1.0-SNAPSHOT
+
+
+ com.codemaker.cola
+ cola-adapter
+ 1.0-SNAPSHOT
+
+ cola-adapter
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ com.coderman.utils
+ coderman-utils
+ 1.0.2-SNAPSHOT
+
+
+
+ org.slf4j
+ slf4j-ext
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+ org.springframework
+ spring-context
+
+
+
+ org.springframework.boot
+ spring-boot
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.codemaker.cola
+ cola-app
+ 1.0-SNAPSHOT
+
+
+
+ com.codemaker.cola
+ cola-domain
+ 1.0-SNAPSHOT
+
+
+
+
+
+
diff --git a/codemaker-cola/cola-app/pom.xml b/codemaker-cola/cola-app/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f3b15d6aba96960b2e5dd60d6b3a8a512ce65e18
--- /dev/null
+++ b/codemaker-cola/cola-app/pom.xml
@@ -0,0 +1,146 @@
+
+
+
+ 4.0.0
+
+
+
+ codemaker-cola
+ com.codemaker.cola
+ 1.0-SNAPSHOT
+
+
+ com.codemaker.cola
+ cola-app
+ 1.0-SNAPSHOT
+
+ cola-app
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-test
+
+
+ org.springframework
+ spring-test
+
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ com.coderman.utils
+ coderman-utils
+ 1.0.2-SNAPSHOT
+
+
+
+ com.codemaker.dubbo
+ dubbo-api
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+ com.codemaker.dubbo
+ dubbo-common
+ 1.0-SNAPSHOT
+
+
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+
+
+ org.apache.dubbo
+ dubbo
+
+
+
+
+
+ org.apache.dubbo
+ dubbo-registry-nacos
+
+
+ com.alibaba.nacos
+ nacos-client
+
+
+
+
+ org.slf4j
+ slf4j-ext
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+ org.mapstruct
+ mapstruct-processor
+
+
+
+ org.mapstruct
+ mapstruct-jdk8
+
+
+
+ org.aspectj
+ aspectjweaver
+
+
+
+ org.assertj
+ assertj-core
+
+
+
+ com.codemaker.cola
+ cola-client
+ 1.0-SNAPSHOT
+
+
+
+ com.codemaker.cola
+ cola-domain
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+
+
diff --git a/codemaker-cola/cola-client/pom.xml b/codemaker-cola/cola-client/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ce11b003d7b38f2b7a8c3919dcffdda93bc4d181
--- /dev/null
+++ b/codemaker-cola/cola-client/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ 4.0.0
+
+
+ codemaker-cola
+ com.codemaker.cola
+ 1.0-SNAPSHOT
+
+
+ com.codemaker.cola
+ cola-client
+ 1.0-SNAPSHOT
+
+ cola-client
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.8
+
+
+
+ com.coderman.utils
+ coderman-utils
+ 1.0.2-SNAPSHOT
+
+
+
+
+
+
diff --git a/codemaker-cola/cola-domain/pom.xml b/codemaker-cola/cola-domain/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..26d5b69f3e956ef8275446eebc38c42dfe1027a9
--- /dev/null
+++ b/codemaker-cola/cola-domain/pom.xml
@@ -0,0 +1,49 @@
+
+
+
+ 4.0.0
+
+
+ codemaker-cola
+ com.codemaker.cola
+ 1.0-SNAPSHOT
+
+
+ com.codemaker.cola
+ cola-domain
+ 1.0-SNAPSHOT
+
+ cola-domain
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.8
+
+
+
+ org.springframework
+ spring-context
+
+
+
+
+
+
diff --git a/codemaker-cola/cola-infrast/pom.xml b/codemaker-cola/cola-infrast/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df2696b46093f95c0608cf83548d7e0223a70a49
--- /dev/null
+++ b/codemaker-cola/cola-infrast/pom.xml
@@ -0,0 +1,80 @@
+
+
+
+ 4.0.0
+
+
+ codemaker-cola
+ com.codemaker.cola
+ 1.0-SNAPSHOT
+
+
+ org.example
+ codemaker-cola
+ 1.0-SNAPSHOT
+
+ cola-infrast
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+ org.springframework
+ spring-context
+
+
+
+ com.codemaker.cola
+ cola-domain
+ 1.0-SNAPSHOT
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ org.slf4j
+ slf4j-ext
+
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+ org.mapstruct
+ mapstruct-processor
+
+
+
+ org.mapstruct
+ mapstruct-jdk8
+
+
+
+ org.mapstruct
+ mapstruct
+
+
+
+
+
+
+
diff --git a/codemaker-cola/pom.xml b/codemaker-cola/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ce2f10b1355a78fb51e6a30c0c1d224478c2c535
--- /dev/null
+++ b/codemaker-cola/pom.xml
@@ -0,0 +1,217 @@
+
+
+
+ 4.0.0
+
+ com.codemaker.cola
+ codemaker-cola
+ pom
+ 1.0-SNAPSHOT
+
+ cola-adapter
+ cola-domain
+ cola-infrast
+ cola-app
+ cola-client
+
+
+ codemaker-cola
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.8
+ 1.8
+ 1.8
+ 2.1.9.RELEASE
+ 2.7.3
+ 1.2.0.Final
+ 4.8.0
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+ org.apache.dubbo
+ dubbo-dependencies-bom
+ ${dubbo.version}
+ pom
+ import
+
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+ ${dubbo.version}
+
+
+ org.apache.dubbo
+ dubbo
+ ${dubbo.version}
+
+
+ org.springframework
+ spring
+
+
+ javax.servlet
+ servlet-api
+
+
+ log4j
+ log4j
+
+
+
+
+
+ com.alibaba.spring
+ spring-context-support
+ 1.0.5
+
+
+
+ org.mapstruct
+ mapstruct
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-jdk8
+ ${mapstruct.version}
+
+
+
+
+ commons-collections
+ commons-collections
+ 3.2.1
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.72
+
+
+
+ commons-lang
+ commons-lang
+ 2.4
+
+
+
+ org.apache.dubbo
+ dubbo-registry-nacos
+ 2.7.3
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.28
+
+
+ org.slf4j
+ slf4j-ext
+ 1.7.28
+
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.7.28
+
+
+
+ org.springframework.boot
+ spring-boot-starter-log4j2
+ ${spring-boot.version}
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.4
+
+
+
+ org.aspectj
+ aspectjrt
+ 1.8.13
+
+
+
+ org.assertj
+ assertj-core
+ 3.9.1
+
+
+
+
+ org.apache.rocketmq
+ rocketmq-client
+ ${rocketmq.version}
+
+
+
+
+
+
+
+
+
+
+
+ aliyun-releases
+ 阿里云仓库
+ https://maven.aliyun.com/repository/public
+
+
+ apache.snapshots.https
+ Apache Development Snapshot Repository
+ https://repository.apache.org/content/repositories/snapshots
+
+ false
+
+
+ true
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+
\ No newline at end of file
diff --git a/codemaker-core/pom.xml b/codemaker-core/pom.xml
index 13578e0767a9c3d7e73ad6a3d0df8eafbff2b59b..e2ff729a6672c15bf8ee1e889877b9f4ce6abcaa 100644
--- a/codemaker-core/pom.xml
+++ b/codemaker-core/pom.xml
@@ -11,7 +11,7 @@
com.coderman.codemaker
codemaker-core
- 1.0.4-SNAPSHOT
+ 1.1.0-SNAPSHOT
codemaker-core
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/ColaAppService.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/ColaAppService.java
index 5c588824e2df107f389075dd8fb1c4bc3970f9bd..5213c2e36a29a48290e2187afd3e54aa6b4692f8 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/ColaAppService.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/ColaAppService.java
@@ -1,8 +1,11 @@
package com.coderman.codemaker.app;
+import com.coderman.codemaker.enums.ModuleEnum;
import com.coderman.codemaker.service.IWriteFileService;
import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+
/**
* Description:
* date: 2021/6/22
@@ -13,8 +16,35 @@ import org.springframework.stereotype.Component;
*/
@Component(value = "colaAppService")
public class ColaAppService implements AppService{
+
+ @Resource(name = "colaAdapterWriteService")
+ private IWriteFileService colaAdapterWriteService;
+
+ @Resource(name = "colaAppWriteService")
+ private IWriteFileService colaAppWriteService;
+
+ @Resource(name = "colaClientWriteService")
+ private IWriteFileService colaClientWriteService;
+
+ @Resource(name = "colaDomainWriteService")
+ private IWriteFileService colaDomainWriteService;
+
+ @Resource(name = "colaInfrastWriteService")
+ private IWriteFileService colaInfrastWriteService;
+
+
@Override
public IWriteFileService getModelAppService(String moduleName) {
- return null;
+ if(moduleName.equals(ModuleEnum.COLA_INFRAST.getModuleName())){
+ return colaInfrastWriteService;
+ } else if (moduleName.equals(ModuleEnum.COLA_CLIENT.getModuleName())) {
+ return colaClientWriteService;
+ }
+ else if(moduleName.equals(ModuleEnum.COLA_DOMAIN.getModuleName())){
+ return colaDomainWriteService;
+ } else if (moduleName.equals(ModuleEnum.COLA_APP.getModuleName())) {
+ return colaAppWriteService;
+ }
+ return colaAdapterWriteService;
}
}
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 d39372613b59c0fe52036db4ddd169996982c69e..952b361e0e40cf4fdc7e95554f267f7a764e14b3 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
@@ -3,13 +3,14 @@ package com.coderman.codemaker.app;
import com.coderman.codemaker.bean.plantuml.AbstractClassBean;
import com.coderman.codemaker.bean.plantuml.FieldBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.config.AppServiceConfig;
import com.coderman.codemaker.config.DefaultPackageConfig;
-import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
import java.util.HashSet;
import java.util.List;
@@ -29,7 +30,7 @@ public class ImportPackageService {
private DefaultPackageConfig defaultPackageConfig;
@Autowired
- private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig;
+ private AppServiceConfig appServiceConfig;
/**
* 处理需要导入的包
* @param abstractClassBean
@@ -37,7 +38,11 @@ public class ImportPackageService {
*/
public void dealImportClass(AbstractClassBean abstractClassBean, PlantUmlContextBean plantUmlContextBean){
Set importClassSet = new HashSet<>();
+ if(CollectionUtils.isNotEmpty(abstractClassBean.getImportClassList())){
+ importClassSet.addAll(abstractClassBean.getImportClassList());
+ }
+ //对方法进行探测
abstractClassBean.getMethodBeanList().forEach(methodBean -> {
String returnClassName = methodBean.getReturnClass();
@@ -46,6 +51,20 @@ public class ImportPackageService {
importClassSet.add(defaultPackageName);
}
+ 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);
+ }
+ }
+ }
+
plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
if(!abstractClassBean.getPackageName().equals(v.getPackageName())){
@@ -73,7 +92,7 @@ public class ImportPackageService {
});
});
-
+ //对属性进行探测
if (CollectionUtils.isNotEmpty(abstractClassBean.getFieldBeanList())) {
abstractClassBean.getFieldBeanList().forEach(fieldBean -> {
String fieldClass = fieldBean.getFieldName().trim().toLowerCase();
@@ -101,6 +120,112 @@ public class ImportPackageService {
});
}
+
+ if(abstractClassBean.isDerived()){
+ //对方法进行探测
+ abstractClassBean.getMethodBeanList().forEach(methodBean -> {
+ String returnClassName = methodBean.getReturnClass();
+
+ String defaultPackageName = defaultPackageConfig.getPackage(returnClassName);
+ if(!StringUtils.isEmpty(defaultPackageName)){
+ importClassSet.add(defaultPackageName);
+ }
+
+ 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);
+ }
+ }
+ }
+
+
+ if (plantUmlContextBean.getDerivedPlantUmlContextBean() != null){
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().forEach((k,v)->{
+
+ 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.getDerivedPlantUmlContextBean().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 -> {
+ String fieldClass = fieldBean.getFieldName().trim().toLowerCase();
+
+ String defaultPackageName = defaultPackageConfig.getPackage(fieldClass);
+ if(!StringUtils.isEmpty(defaultPackageName)){
+ importClassSet.add(defaultPackageName);
+ }
+
+ if (plantUmlContextBean.getDerivedPlantUmlContextBean() != null) {
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().forEach((k,v)->{
+
+ if(!abstractClassBean.getPackageName().equals(v.getPackageName())){
+ //属性类型匹配
+ if(fieldClass.contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ }
+ });
+
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getEnumBeanMap().forEach((k,v)->{
+ if(fieldClass.contains(k.toLowerCase())){
+ importClassSet.add(v.getPackageName()+"."+v.getClassName());
+ }
+ });
+ }
+
+ });
+ }
+ }
+
+ //对继承和实现进行探测
+ if(!StringUtils.isEmpty(abstractClassBean.getRelationClassStr())){
+ if(abstractClassBean.getRelationClassStr().contains("implements") && plantUmlContextBean.getDerivedPlantUmlContextBean() != null){
+ 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());
+ }
+ }
+ });
+ }
+ }
+
+
+
+
if(importClassSet.isEmpty()){
abstractClassBean.setImportClassList(Lists.newArrayList());
}else {
@@ -117,28 +242,28 @@ public class ImportPackageService {
*/
public void setPackageName(AbstractClassBean abstractClassBean, String defaultChildPackage){
if(org.apache.commons.lang3.StringUtils.isEmpty(abstractClassBean.getPlantUMLPackage())){
- String packageName = projectTemplateDynamicDDDConfig.getGlobalPackage()+"."+defaultChildPackage;
+ String packageName = appServiceConfig.getPackage()+"."+defaultChildPackage;
abstractClassBean.setPackageName(packageName);
return;
}else {
- if(!abstractClassBean.getPlantUMLPackage().contains(projectTemplateDynamicDDDConfig.getGlobalPackage())
+ if(!abstractClassBean.getPlantUMLPackage().contains(appServiceConfig.getPackage())
&& abstractClassBean.getPlantUMLPackage().split("\\.").length > 2
&& !abstractClassBean.getPlantUMLPackage().contains(" as ")){
abstractClassBean.setPackageName(abstractClassBean.getPlantUMLPackage());
return;
}
- if(abstractClassBean.getPlantUMLPackage().contains(projectTemplateDynamicDDDConfig.getGlobalPackage())){
+ if(abstractClassBean.getPlantUMLPackage().contains(appServiceConfig.getPackage())){
abstractClassBean.setPackageName(abstractClassBean.getPlantUMLPackage());
return;
}
else if(!abstractClassBean.getPlantUMLPackage().contains("-") && abstractClassBean.getPlantUMLPackage().split("\\.").length == 2){
- String packageName = projectTemplateDynamicDDDConfig.getGlobalPackage() +"."+ abstractClassBean.getPlantUMLPackage();
+ String packageName = appServiceConfig.getPackage() +"."+ abstractClassBean.getPlantUMLPackage();
abstractClassBean.setPackageName(packageName);
return;
}
else if(abstractClassBean.getPlantUMLPackage().contains("-") && !abstractClassBean.getPlantUMLPackage().contains(" as ")){
String childPackage = abstractClassBean.getPlantUMLPackage().replace("\"","").split("-")[1];
- String packageName = projectTemplateDynamicDDDConfig.getGlobalPackage() +"."+ childPackage;
+ String packageName = appServiceConfig.getPackage() +"."+ childPackage;
abstractClassBean.setPackageName(packageName);
return;
}else {
@@ -150,7 +275,7 @@ public class ImportPackageService {
}
}
if(packageName.split("\\.").length == 2){
- packageName = projectTemplateDynamicDDDConfig.getGlobalPackage() +"."+ packageName;
+ packageName = appServiceConfig.getPackage() +"."+ packageName;
abstractClassBean.setPackageName(packageName);
return;
}else {
@@ -168,43 +293,4 @@ public class ImportPackageService {
- /**
- *
- * @param fieldBeanList
- * @param packageName
- * @param plantUmlContextBean
- */
- public List dealImportClassFromField(List fieldBeanList, String packageName, PlantUmlContextBean plantUmlContextBean){
- Set importClassSet = new HashSet<>();
-
- fieldBeanList.forEach(fieldBean -> {
- String fieldClass = fieldBean.getFieldName().trim().toLowerCase();
-
- String defaultPackageName = defaultPackageConfig.getPackage(fieldClass);
- if(!StringUtils.isEmpty(defaultPackageName)){
- importClassSet.add(defaultPackageName);
- }
-
- plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
-
- if(!packageName.equals(v.getPackageName())){
- //属性类型匹配
- if(fieldClass.contains(k.toLowerCase())){
- importClassSet.add(v.getPackageName()+"."+v.getClassName());
- }
- }
- });
-
- plantUmlContextBean.getEnumBeanMap().forEach((k,v)->{
- if(fieldClass.contains(k.toLowerCase())){
- importClassSet.add(v.getPackageName()+"."+v.getClassName());
- }
- });
- });
-
- return Lists.newArrayList(importClassSet);
- }
-
-
-
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteHelperService.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteHelperService.java
new file mode 100644
index 0000000000000000000000000000000000000000..1047b2bd44a5cfa27a9a17d352fbe9056309bcef
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteHelperService.java
@@ -0,0 +1,12 @@
+package com.coderman.codemaker.app;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+public class WriteHelperService {
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..c18e00f360f625c590fdf7f9aa5a0005077af6ba
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/WriteService.java
@@ -0,0 +1,81 @@
+package com.coderman.codemaker.app;
+
+import com.alibaba.fastjson.JSON;
+import com.coderman.codemaker.bean.ClassContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.utils.Constant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Service
+@Slf4j
+public abstract class WriteService {
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+ /**
+ * 写class文件
+ * @param classContentBean
+ */
+ public void writeClassFile(ClassContentBean classContentBean) {
+ String filePath = getFilePath(classContentBean);
+ try {
+ FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ *
+ * @param classContentBean
+ * @return
+ */
+ private String getFilePath(ClassContentBean classContentBean) {
+ String packageName = appServiceConfig.getPackage();
+ String packagePath = packageName.replace(".", "/") ;
+ packagePath = Constant.JAVA + "/" + packagePath + "/" + classContentBean.getChildPackageName();
+ String fileName = classContentBean.getHumpClassName() + ".java";
+ return classContentBean.getModulePath() + packagePath + "/" + fileName;
+ }
+
+
+ /**
+ * 写class文件
+ * @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();
+ }
+ }
+
+
+ /**
+ *
+ * @param classContentBean
+ * @return
+ */
+ private String getClassPackageFilePath(ClassContentBean classContentBean) {
+ String packagePath = classContentBean.getClassPackageName().replace(".", "/") ;
+ packagePath = Constant.JAVA + "/" + packagePath;
+ String fileName = classContentBean.getHumpClassName() + ".java";
+ return classContentBean.getModulePath() + packagePath + "/" + fileName;
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAdapterWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAdapterWriteServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..49d2811a47ffebb93500a9a46fc584c8cdadd446
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAdapterWriteServiceImpl.java
@@ -0,0 +1,145 @@
+package com.coderman.codemaker.app.cola;
+
+import com.coderman.codemaker.app.WriteService;
+import com.coderman.codemaker.bean.ClassContentBean;
+import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.config.ProjectTemplateColaConfig;
+import com.coderman.codemaker.enums.TemplateFileEnum;
+import com.coderman.codemaker.service.IWriteFileService;
+import com.coderman.codemaker.utils.Constant;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Description:
+ * date: 2021/7/6
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "colaAdapterWriteService")
+public class ColaAdapterWriteServiceImpl extends WriteService implements IWriteFileService {
+ @Autowired
+ private ProjectTemplateColaConfig projectTemplateColaConfig;
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
+ @Override
+ public void writeContent(WriteContentBean writeContentBean) {
+ //写vo
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.VO.getTempFileName())){
+
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().endsWith("VO") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"VO");
+ classContentBean.setChildPackageName("vo");
+ classContentBean.setClassSuffix("VO.java");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAdapterPath());
+
+ writeClassFile(classContentBean);
+ }
+
+ //写vo-ddd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.VO_DDD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+
+ classContentBean.setChildPackageName("adapter.vo");
+ classContentBean.setClassSuffix("VO.java");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAdapterPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写controller
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONTROLLER.getTempFileName())){
+
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().endsWith("Controller") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"Controller");
+ classContentBean.setChildPackageName("controller");
+ classContentBean.setClassSuffix("Controller.java");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAdapterPath());
+ writeClassFile(classContentBean);
+ }
+
+ //写controller-ddd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONTROLLER_DDD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+
+ classContentBean.setChildPackageName("adapter.controller");
+ classContentBean.setClassSuffix("Controller.java");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAdapterPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写convert
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONVERT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAdapterPath());
+ writeClassFileV2(classContentBean);
+ }
+
+ //指定服务类 or 工具类
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BASE_CONTROLLER.getTempFileName())){
+ writeBaseController(writeContentBean.getContent());
+ }
+
+ }
+
+ @Override
+ public void writeAllContent(String humpClassName, Map varMap, String fast) {
+
+ }
+
+ @Override
+ public void writeCommonContent(Map varMap, String fast) {
+
+ }
+
+ /**
+ * 写BaseController文件
+ *
+ * @param content
+ */
+ public void writeBaseController(String content) {
+ String packageName = appServiceConfig.getPackage();
+ String packagePath = packageName.replace(".", "/");
+ String filePath = Constant.JAVA + "/" + packagePath + "/controller";
+ String fileName = "BaseController.java";
+ filePath = projectTemplateColaConfig.getModuleAdapterPath() + filePath + "/" + fileName;
+ try {
+ FileUtils.write(new File(filePath), content, "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..7441427a4087b755c1f2b438e8f623b47384df55
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaAppWriteServiceImpl.java
@@ -0,0 +1,142 @@
+package com.coderman.codemaker.app.cola;
+
+import com.coderman.codemaker.app.WriteService;
+import com.coderman.codemaker.bean.ClassContentBean;
+import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.config.ProjectTemplateColaConfig;
+import com.coderman.codemaker.enums.TemplateFileEnum;
+import com.coderman.codemaker.service.IWriteFileService;
+import com.coderman.codemaker.utils.Constant;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Description:
+ * date: 2021/7/6
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "colaAppWriteService")
+public class ColaAppWriteServiceImpl extends WriteService implements IWriteFileService {
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+ @Autowired
+ private ProjectTemplateColaConfig projectTemplateColaConfig;
+
+ @Override
+ public void writeContent(WriteContentBean writeContentBean) {
+ //写FacadeImpl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE_IMPL.getTempFileName())){
+ 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.setModulePath(projectTemplateColaConfig.getModuleAppPath());
+ writeClassFile(classContentBean);
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+
+ //写app.cmd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CMD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setChildPackageName("app.command");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAppPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写app.exe
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.EXE.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setChildPackageName("app.executor");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAppPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写convert
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONVERT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleAppPath());
+ writeClassFileV2(classContentBean);
+ }
+
+
+ //指定服务类 or 工具类
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){
+ writeSpringApplicationContext(writeContentBean.getContent());
+ }
+
+ }
+
+ @Override
+ public void writeAllContent(String humpClassName, Map varMap, String fast) {
+
+ }
+
+ @Override
+ public void writeCommonContent(Map varMap, String fast) {
+
+ }
+
+
+ /**
+ * 写工具类文件
+ *
+ * @param content
+ */
+ public void writeSpringApplicationContext(String content) {
+ String packageName = appServiceConfig.getPackage();
+ String packagePath = packageName.replace(".", "/");
+ String filePath = Constant.JAVA + "/" + packagePath + "/utils";
+ String fileName = "SpringApplicationContext.java";
+ filePath = projectTemplateColaConfig.getModuleAppPath() + filePath + "/" + fileName;
+ try {
+ FileUtils.write(new File(filePath), content, "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..3db8da34a8cc6cb1e4ffba30517f83eab5215f90
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaClientWriteServiceImpl.java
@@ -0,0 +1,129 @@
+package com.coderman.codemaker.app.cola;
+
+import com.coderman.codemaker.app.WriteService;
+import com.coderman.codemaker.bean.ClassContentBean;
+import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.config.ProjectTemplateColaConfig;
+import com.coderman.codemaker.enums.TemplateFileEnum;
+import com.coderman.codemaker.service.IWriteFileService;
+import com.coderman.codemaker.utils.Constant;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Description:
+ * date: 2021/7/6
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "colaClientWriteService")
+public class ColaClientWriteServiceImpl extends WriteService implements IWriteFileService {
+
+ @Autowired
+ private ProjectTemplateColaConfig projectTemplateColaConfig;
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
+ @Override
+ public void writeContent(WriteContentBean writeContentBean) {
+ //写api.dto-ddd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DTO_DDD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+
+ classContentBean.setChildPackageName("api.dto");
+ classContentBean.setClassSuffix("DTO.java");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleClientPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写api.dto
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DTO.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("dto");
+ classContentBean.setClassSuffix("DTO.java");
+ writeDTO(classContentBean);
+ }
+
+
+ //写api.facade
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().toLowerCase().endsWith("facade") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"Facade");
+ classContentBean.setChildPackageName("api.facade");
+ classContentBean.setClassSuffix("Facade.java");
+
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleClientPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+
+ }
+
+ @Override
+ public void writeAllContent(String humpClassName, Map varMap, String fast) {
+
+ }
+
+ @Override
+ public void writeCommonContent(Map varMap, String fast) {
+
+ }
+
+ /**
+ * 写dto文件
+ * @param classContentBean
+ */
+ public void writeDTO(ClassContentBean classContentBean) {
+ String filePath = getFilePath(classContentBean.getChildPackageName(), classContentBean.getHumpClassName(), classContentBean.getClassSuffix());
+ try {
+ FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @param childPackageName 最后一级子包名称
+ * @param humpClassName 驼峰式类名
+ * @param classSuffix 文件后缀 egg:DTO.java
+ * @return
+ */
+ private String getFilePath(String childPackageName, String humpClassName, String classSuffix) {
+ String packageName = appServiceConfig.getPackage();
+ String packagePath = packageName.replace(".", "/") + "/api";
+ packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
+ String fileName = humpClassName + classSuffix;
+ return projectTemplateColaConfig.getModuleClientPath() + packagePath + "/" + fileName;
+ }
+
+
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..41b0a466dcd2084a5bafdfac95780def85234766
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaDomainWriteServiceImpl.java
@@ -0,0 +1,183 @@
+package com.coderman.codemaker.app.cola;
+
+import com.coderman.codemaker.app.WriteService;
+import com.coderman.codemaker.bean.ClassContentBean;
+import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.config.ProjectTemplateColaConfig;
+import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig;
+import com.coderman.codemaker.enums.TemplateFileEnum;
+import com.coderman.codemaker.service.IWriteFileService;
+import com.coderman.codemaker.utils.Constant;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Description:
+ * date: 2021/7/6
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "colaDomainWriteService")
+public class ColaDomainWriteServiceImpl extends WriteService implements IWriteFileService {
+
+ @Autowired
+ private ProjectTemplateColaConfig projectTemplateColaConfig;
+
+
+ @Override
+ public void writeContent(WriteContentBean writeContentBean) {
+ //写domain.bo-ddd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.bo");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写model.bo
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().toLowerCase().endsWith("bo") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"BO");
+ classContentBean.setChildPackageName("model.bo");
+ classContentBean.setClassSuffix("BO.java");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+
+ writeClassFile(classContentBean);
+ }
+
+ //写domain.enum
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ENUM.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.enums");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写domain.valueobject
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.VALUE_OBJECT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.valueobject");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写domain.msgbody
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MESSAGE_BODY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.msgbody");
+ 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();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.gataway");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写domain.factory
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACTORY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.factory");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写service
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("service");
+ classContentBean.setClassSuffix("Service.java");
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().toLowerCase().endsWith("service") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"Service");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleDomainPath());
+ writeClassFile(classContentBean);
+ }
+
+ }
+
+ @Override
+ public void writeAllContent(String humpClassName, Map varMap, String fast) {
+
+ }
+
+ @Override
+ public void writeCommonContent(Map varMap, String fast) {
+
+ }
+
+
+
+
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..d4fbc08c4feb97176af5eadd460ea72ba64a0420
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/cola/ColaInfrastWriteServiceImpl.java
@@ -0,0 +1,249 @@
+package com.coderman.codemaker.app.cola;
+
+import com.coderman.codemaker.app.WriteService;
+import com.coderman.codemaker.bean.ClassContentBean;
+import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
+import com.coderman.codemaker.config.ProjectTemplateColaConfig;
+import com.coderman.codemaker.config.ProjectTemplateDubboConfig;
+import com.coderman.codemaker.enums.TemplateFileEnum;
+import com.coderman.codemaker.service.IWriteFileService;
+import com.coderman.codemaker.utils.Constant;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Description:
+ * date: 2021/7/6
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "colaInfrastWriteService")
+public class ColaInfrastWriteServiceImpl extends WriteService implements IWriteFileService {
+ @Autowired
+ private ProjectTemplateColaConfig projectTemplateColaConfig;
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
+ @Override
+ public void writeContent(WriteContentBean writeContentBean) {
+ //写do class
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DATA_OBJECT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("dataobject");
+ classContentBean.setClassSuffix("DO.java");
+ writeDO(classContentBean);
+ }
+ //写mapper class
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MAPPER.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("mapper");
+ classContentBean.setClassSuffix("Mapper.java");
+ writeMapper(classContentBean);
+ }
+
+ //写mapper.xml
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MAPPER_XML.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("mapper");
+ classContentBean.setClassSuffix("Mapper.xml");
+ 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.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infrast.acl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ if(writeContentBean.getHumpClassName().toLowerCase().contains(TemplateFileEnum.ACL.getTempFileName())){
+ classContentBean.setChildPackageName("infrast.acl");
+ }else {
+ classContentBean.setChildPackageName("infrast.adapter");
+ }
+ classContentBean.setClassSuffix("");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写infrast.acl.impl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL_IMPL.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ if(writeContentBean.getHumpClassName().toLowerCase().contains(TemplateFileEnum.ACL.getTempFileName())){
+ classContentBean.setChildPackageName("infrast.acl.impl");
+ }else {
+ classContentBean.setChildPackageName("infrast.adapter.impl");
+ }
+ classContentBean.setClassSuffix("");
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ //走默认的包生成方式
+ 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);
+ }
+ }
+
+ //写acl.param
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL_PARAM.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+ writeClassFileV2(classContentBean);
+ }
+
+ //写convert
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONVERT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+ writeClassFileV2(classContentBean);
+ }
+
+
+ //写serviceimpl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE_IMPL.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("service.impl");
+ classContentBean.setClassSuffix("ServiceImpl.java");
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().toLowerCase().endsWith("serviceimpl") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"ServiceImpl");
+
+ classContentBean.setModulePath(projectTemplateColaConfig.getModuleInfrastPath());
+
+ writeClassFile(classContentBean);
+ }
+ }
+
+ @Override
+ public void writeAllContent(String humpClassName, Map varMap, String fast) {
+
+ }
+
+ @Override
+ public void writeCommonContent(Map varMap, String fast) {
+
+ }
+
+ /**
+ * 写DO文件
+ * @param classContentBean
+ */
+ public void writeDO(ClassContentBean classContentBean) {
+ String filePath = getFilePath(classContentBean.getChildPackageName(), classContentBean.getHumpClassName(), classContentBean.getClassSuffix());
+ try {
+ FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 写Mapper文件
+ * @param classContentBean
+ */
+ public void writeMapper(ClassContentBean classContentBean) {
+ String filePath = getFilePath(classContentBean.getChildPackageName(), classContentBean.getHumpClassName(), classContentBean.getClassSuffix());
+ try {
+ FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 写Mapper.xml文件
+ * @param classContentBean
+ */
+ public void writeMapperXml(ClassContentBean classContentBean) {
+ String filePath = getMapperFilePath(classContentBean.getHumpClassName(), classContentBean.getClassSuffix());
+ try {
+ FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * @param childPackageName 最后一级子包名称
+ * @param humpClassName 驼峰式类名
+ * @param classSuffix 文件后缀 egg:DTO.java
+ * @return
+ */
+ private String getFilePath(String childPackageName, String humpClassName, String classSuffix) {
+ String packageName = appServiceConfig.getPackage();
+ String packagePath = packageName.replace(".", "/") + "/dao";
+ packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
+ String fileName = humpClassName + classSuffix;
+ return projectTemplateColaConfig.getModuleInfrastPath() + packagePath + "/" + fileName;
+ }
+
+
+ /**
+ *
+ * @param humpClassName 驼峰式类名
+ * @param classSuffix 文件后缀 egg:DTO.java
+ * @return
+ */
+ private String getMapperFilePath(String humpClassName, String classSuffix) {
+ String fileName = humpClassName + classSuffix;
+ return projectTemplateColaConfig.getModuleInfrastPath() + Constant.MAPPER + "/" + 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 f35709c9cb152c9d565ca06eb0d1ed679b8bf24a..7bf93a80792154819d4213335d5265c54a56cefe 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
@@ -1,12 +1,15 @@
package com.coderman.codemaker.app.dubbo;
+import com.coderman.codemaker.app.WriteService;
import com.coderman.codemaker.bean.ClassContentBean;
import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
import com.coderman.codemaker.config.ProjectTemplateDubboConfig;
import com.coderman.codemaker.enums.TemplateFileEnum;
import com.coderman.codemaker.service.IWriteFileService;
import com.coderman.codemaker.utils.Constant;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -25,11 +28,14 @@ import java.util.Map;
* 写api模块服务
*/
@Component(value = "dubboApiWriteFileService")
-public class DubboApiWriteServiceImpl implements IWriteFileService {
+public class DubboApiWriteServiceImpl extends WriteService implements IWriteFileService {
@Autowired
private ProjectTemplateDubboConfig projectTemplateDubboConfig;
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
@Override
public void writeContent(WriteContentBean writeContentBean) {
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DTO.getTempFileName())){
@@ -40,13 +46,42 @@ public class DubboApiWriteServiceImpl implements IWriteFileService {
classContentBean.setClassSuffix("DTO.java");
writeDTO(classContentBean);
}
- else if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE.getTempFileName())){
+
+ //写api.dto-ddd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DTO_DDD.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+
+ classContentBean.setChildPackageName("api.dto");
+ classContentBean.setClassSuffix("DTO.java");
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleApiPath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName().toLowerCase().endsWith("facade") ? writeContentBean.getHumpClassName() : writeContentBean.getHumpClassName()+"Facade");
classContentBean.setChildPackageName("facade");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setClassSuffix("Facade.java");
- writeFacade(classContentBean);
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleApiPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
}
}
@@ -94,7 +129,7 @@ public class DubboApiWriteServiceImpl implements IWriteFileService {
* @return
*/
private String getFilePath(String childPackageName, String humpClassName, String classSuffix) {
- String packageName = projectTemplateDubboConfig.getGlobalPackage();
+ String packageName = appServiceConfig.getPackage();
String packagePath = packageName.replace(".", "/") + "/api";
packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
String fileName = humpClassName + classSuffix;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCommonWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCommonWriteServiceImpl.java
index 2e6bf0c4578e139d5fe7fbaf4a24d582028208f4..fe0dc64e256d3755af94aa3e922eb18a0c79b65a 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCommonWriteServiceImpl.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCommonWriteServiceImpl.java
@@ -2,6 +2,7 @@ package com.coderman.codemaker.app.dubbo;
import com.coderman.codemaker.bean.ClassContentBean;
import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
import com.coderman.codemaker.config.ProjectTemplateDubboConfig;
import com.coderman.codemaker.enums.TemplateFileEnum;
import com.coderman.codemaker.service.IWriteFileService;
@@ -29,6 +30,9 @@ public class DubboCommonWriteServiceImpl implements IWriteFileService {
@Autowired
private ProjectTemplateDubboConfig projectTemplateDubboConfig;
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
@Override
public void writeContent(WriteContentBean writeContentBean) {
//写do class
@@ -118,8 +122,8 @@ public class DubboCommonWriteServiceImpl implements IWriteFileService {
* @return
*/
private String getFilePath(String childPackageName, String humpClassName, String classSuffix) {
- String packageName = projectTemplateDubboConfig.getGlobalPackage();
- String packagePath = packageName.replace(".", "/") + "/common";
+ String packageName = appServiceConfig.getPackage();
+ String packagePath = packageName.replace(".", "/") + "/dao";
packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
String fileName = humpClassName + classSuffix;
return projectTemplateDubboConfig.getModuleCommonPath() + packagePath + "/" + fileName;
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 d5f1a5920d4dfef5dc1e841a65f17580f90073f0..6aa99c6a34715b212a815d8c371236f6e2dc83f8 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
@@ -1,12 +1,15 @@
package com.coderman.codemaker.app.dubbo;
+import com.coderman.codemaker.app.WriteService;
import com.coderman.codemaker.bean.ClassContentBean;
import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
import com.coderman.codemaker.config.ProjectTemplateDubboConfig;
import com.coderman.codemaker.enums.TemplateFileEnum;
import com.coderman.codemaker.service.IWriteFileService;
import com.coderman.codemaker.utils.Constant;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -23,11 +26,15 @@ import java.util.Map;
* @since JDK 1.8
*/
@Component(value = "dubboCoreWriteFileService")
-public class DubboCoreWriteServiceImpl implements IWriteFileService {
+public class DubboCoreWriteServiceImpl extends WriteService implements IWriteFileService {
@Autowired
private ProjectTemplateDubboConfig projectTemplateDubboConfig;
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+
@Override
public void writeContent(WriteContentBean writeContentBean) {
//写FacadeImpl
@@ -37,7 +44,16 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("facade.impl");
classContentBean.setClassSuffix("FacadeImpl.java");
- writeClassFile(classContentBean);
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
}
//写model.bo
@@ -49,15 +65,32 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
classContentBean.setClassSuffix("BO.java");
writeClassFile(classContentBean);
}
+ //写domain.bo-ddd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.bo");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
- //写converter
+ //写convert
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONVERT.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
- classContentBean.setChildPackageName("convert");
- classContentBean.setClassSuffix("Converter.java");
- writeClassFile(classContentBean);
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+ writeClassFileV2(classContentBean);
}
//写service
@@ -101,7 +134,7 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
writeClassFile(classContentBean);
}
- //写Application类
+ //写Aop类
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE_AOP.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
@@ -111,7 +144,7 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
writeClassFile(classContentBean);
}
- //写serviceimpl
+ //写springapplication
if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
@@ -121,6 +154,209 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
writeClassFile(classContentBean);
}
+ //写domain.enum
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ENUM.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.enums");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写domain.valueobject
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.VALUE_OBJECT.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.valueobject");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写domain.msgbody
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MESSAGE_BODY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.msgbody");
+ 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();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.gataway");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(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.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infrast.acl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ if(writeContentBean.getHumpClassName().toLowerCase().contains(TemplateFileEnum.ACL.getTempFileName())){
+ classContentBean.setChildPackageName("infrast.acl");
+ }else {
+ classContentBean.setChildPackageName("infrast.adapter");
+ }
+ classContentBean.setClassSuffix("");
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写infrast.acl.impl
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL_IMPL.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ if(writeContentBean.getHumpClassName().toLowerCase().contains(TemplateFileEnum.ACL.getTempFileName())){
+ classContentBean.setChildPackageName("infrast.acl.impl");
+ }else {
+ classContentBean.setChildPackageName("infrast.adapter.impl");
+ }
+ classContentBean.setClassSuffix("");
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ 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);
+ }
+ }
+
+ //写acl.param
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ACL_PARAM.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+ writeClassFileV2(classContentBean);
+ }
+
+ //写app.cmd
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CMD.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setChildPackageName("app.command");
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+ //写app.exe
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.EXE.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setChildPackageName("app.executor");
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写domain.factory
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACTORY.getTempFileName())){
+ ClassContentBean classContentBean = new ClassContentBean();
+ classContentBean.setClassContent(writeContentBean.getContent());
+ classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
+ classContentBean.setChildPackageName("domain.factory");
+ classContentBean.setClassSuffix("");
+ classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDubboConfig.getModuleCorePath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
}
@Override
@@ -153,7 +389,7 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
* @return
*/
private String getFilePath(String childPackageName, String humpClassName, String classSuffix) {
- String packageName = projectTemplateDubboConfig.getGlobalPackage();
+ String packageName = appServiceConfig.getPackage();
String packagePath = packageName.replace(".", "/") + "/core";
packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
String fileName = humpClassName + classSuffix;
@@ -168,7 +404,7 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService {
* @return
*/
public String getTestFilePath(String childPackageName, String humpClassName, String classSuffix) {
- String packageName = projectTemplateDubboConfig.getGlobalPackage();
+ String packageName = appServiceConfig.getPackage();
String packagePath = packageName.replace(".", "/")+"/core/";
packagePath = Constant.TEST_JAVA + "/" + packagePath + childPackageName;
String fileName = humpClassName + classSuffix;
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
new file mode 100644
index 0000000000000000000000000000000000000000..c68c053e29b8c7ec06ffdc6f9d9a9d179013e459
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DerivedClassFactory.java
@@ -0,0 +1,832 @@
+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 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/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Service
+public class DerivedClassFactory {
+
+ @Autowired
+ private TemlateVarService temlateVarService;
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
+ /**
+ * 处理bo到dto的派生
+ * @param domainBoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveBo2DTO(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List dtoList = getDTOClassList(domainBoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ dtoList.forEach(v->derivedPlantUmlContextBean.addClassBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ dtoList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addClassBean(v));
+ }
+ }
+
+ /**
+ * 处理dto到facade的派生
+ * @param dtoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveDTO2Facade(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List dtoList = getFacadeInterfaceList(dtoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ dtoList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ dtoList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ }
+ }
+
+
+ /**
+ * 处理dto-boconvert的派生
+ * @param dtoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveDTOBOConvert(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List dtoboConvertList = getDTOBOConvertInterfaceList(dtoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ dtoboConvertList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ dtoboConvertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ }
+ }
+ /**
+ * 处理do-boconvert的派生
+ * @param boElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveDOBOConvert(List boElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List dtoboConvertList = getDOBOConvertInterfaceList(boElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ dtoboConvertList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ dtoboConvertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ }
+ }
+
+
+ /**
+ * 处理bo到dto的派生
+ * @param domainBoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveBo2VO(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List dtoList = getVOClassList(domainBoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ dtoList.forEach(v->derivedPlantUmlContextBean.addClassBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ dtoList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addClassBean(v));
+ }
+ }
+
+
+ /**
+ * 处理bo到facade的派生
+ * @param domainBoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveBo2Facade(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List facadeList = 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));
+ }
+ }
+
+
+ /**
+ * 处理bo到facade的派生
+ * @param domainBoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveBo2Controller(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List controllerBeanList = 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));
+ }
+ }
+
+
+ /**
+ * 处理bo-dto到convert的派生
+ * @param domainBoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveBoDTO2Convert(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List convertList = getConvertInterfaceBeanList(domainBoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ convertList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ convertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ }
+ }
+
+ /**
+ * 处理bo-dto到convert的派生
+ * @param domainBoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveBoVO2Convert(List domainBoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List convertList = getConvertBOVOInterfaceBeanList(domainBoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ convertList.forEach(v->derivedPlantUmlContextBean.addInterfaceBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ convertList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addInterfaceBean(v));
+ }
+ }
+
+
+
+
+
+
+ /**
+ * 处理facade到facadeimpl的派生
+ * @param dtoElementBeanList
+ * @param plantUmlContextBean
+ */
+ public void deriveFacade2FacadeImpl(List dtoElementBeanList, PlantUmlContextBean plantUmlContextBean){
+ List facadeImplList = getFacadeImplList(dtoElementBeanList);
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ PlantUmlContextBean derivedPlantUmlContextBean = new PlantUmlContextBean();
+ //将派生类放到派生类上下文里面
+ facadeImplList.forEach(v->derivedPlantUmlContextBean.addClassBean(v));
+ plantUmlContextBean.setDerivedPlantUmlContextBean(derivedPlantUmlContextBean);
+ }else {
+ //将派生类放到派生类上下文里面
+ facadeImplList.forEach(v->plantUmlContextBean.getDerivedPlantUmlContextBean().addClassBean(v));
+ }
+ }
+
+
+ /**
+ * 处理派生类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
+ */
+ 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());
+
+
+ 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);
+ }
+ }
+ });
+
+ 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;
+ }
+
+
+ /**
+ * 处理派生类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
+ */
+ 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;
+ }
+
+
+ /**
+ * 处理派生类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);
+ }
+ }
+ return facadeInterfaceList;
+ }
+
+
+ /**
+ * 处理派生类dto-bo convert
+ * @param dtoClassList
+ * @return
+ */
+ 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);
+ }
+ }
+ return facadeInterfaceList;
+ }
+
+ /**
+ * 处理派生类dto-bo convert
+ * @param classBean
+ * @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();
+ }
+ 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 f790dce6f4eb61d93a3e84cd30ad5d0bd0630abc..805dc73ef27dee6e63c4183c0077948d8217a87f 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
@@ -1,7 +1,9 @@
package com.coderman.codemaker.app.dynamicddd;
+import com.coderman.codemaker.app.WriteService;
import com.coderman.codemaker.bean.ClassContentBean;
import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.config.AppServiceConfig;
import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig;
import com.coderman.codemaker.enums.TemplateFileEnum;
import com.coderman.codemaker.service.IWriteFileService;
@@ -24,7 +26,11 @@ import java.util.Map;
* @since JDK 1.8
*/
@Component(value = "dynamicDDDWriteServiceImpl")
-public class DynamicDDDWriteServiceImpl implements IWriteFileService {
+public class DynamicDDDWriteServiceImpl extends WriteService implements IWriteFileService {
+
+
+ @Autowired
+ private AppServiceConfig appServiceConfig;
@Autowired
private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig;
@@ -33,12 +39,13 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
public void writeContent(WriteContentBean writeContentBean) {
//写domain.bo
- if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName())){
+ if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName())){
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("domain.bo");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
@@ -55,6 +62,8 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("domain.valueobject");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
@@ -72,6 +81,7 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setChildPackageName("domain.msgbody");
classContentBean.setClassSuffix("");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
@@ -90,6 +100,7 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("domain.gataway");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
@@ -106,6 +117,7 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName()+"Impl");
classContentBean.setChildPackageName("domain.gataway.impl");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".impl");
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
@@ -122,6 +134,7 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setChildPackageName("domain.enums");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
@@ -137,9 +150,10 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
ClassContentBean classContentBean = new ClassContentBean();
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
- classContentBean.setChildPackageName("infrast.factory");
+ classContentBean.setChildPackageName("domain.factory");
classContentBean.setClassSuffix("");
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
@@ -162,6 +176,31 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setChildPackageName("infrast.adapter");
}
classContentBean.setClassSuffix("");
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
+ //走默认的包生成方式
+ if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
+ writeClassFile(classContentBean);
+ }else {
+ //走文档里的package包生成方式
+ writeClassFileV2(classContentBean);
+ }
+ }
+
+ //写infrast.acl.impl
+ 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");
+ if(writeContentBean.getHumpClassName().toLowerCase().contains(TemplateFileEnum.ACL.getTempFileName())){
+ classContentBean.setChildPackageName("infrast.acl.impl");
+ }else {
+ classContentBean.setChildPackageName("infrast.adapter.impl");
+ }
+ classContentBean.setClassSuffix("");
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
@@ -177,6 +216,8 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setClassContent(writeContentBean.getContent());
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
writeClassFileV2(classContentBean);
}
@@ -187,6 +228,8 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setChildPackageName("app.command");
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
@@ -203,6 +246,8 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
classContentBean.setHumpClassName(writeContentBean.getHumpClassName());
classContentBean.setClassPackageName(writeContentBean.getClassPackageName());
classContentBean.setChildPackageName("app.executor");
+ classContentBean.setModulePath(projectTemplateDynamicDDDConfig.getOutPath());
+
//走默认的包生成方式
if(StringUtils.isEmpty(classContentBean.getClassPackageName())){
writeClassFile(classContentBean);
@@ -224,58 +269,5 @@ public class DynamicDDDWriteServiceImpl implements IWriteFileService {
}
- /**
- * 写class文件
- * @param classContentBean
- */
- public void writeClassFile(ClassContentBean classContentBean) {
- String filePath = getFilePath(classContentBean.getChildPackageName(), classContentBean.getHumpClassName());
- try {
- FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * @param childPackageName 最后一级子包名称
- * @param humpClassName 驼峰式类名
- * @return
- */
- private String getFilePath(String childPackageName, String humpClassName) {
- String packageName = projectTemplateDynamicDDDConfig.getGlobalPackage();
- String packagePath = packageName.replace(".", "/") ;
- packagePath = Constant.JAVA + "/" + packagePath + "/" + childPackageName;
- String fileName = humpClassName + ".java";
- return projectTemplateDynamicDDDConfig.getOutPath() + packagePath + "/" + fileName;
- }
-
-
- /**
- * 写class文件
- * @param classContentBean
- */
- public void writeClassFileV2(ClassContentBean classContentBean) {
- String filePath = getClassPackageFilePath(classContentBean.getClassPackageName(), classContentBean.getHumpClassName());
- try {
- FileUtils.write(new File(filePath), classContentBean.getClassContent(), "UTF-8");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- /**
- * @param classPackageName 类包名
- * @param humpClassName 驼峰式类名
- * @return
- */
- private String getClassPackageFilePath(String classPackageName, String humpClassName) {
- String packagePath = classPackageName.replace(".", "/") ;
- packagePath = Constant.JAVA + "/" + packagePath;
- String fileName = humpClassName + ".java";
- return projectTemplateDynamicDDDConfig.getOutPath() + packagePath + "/" + fileName;
- }
-
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainBoElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java
similarity index 34%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainBoElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java
index b3e94d2728eea98fad14a70b0f63ee27df2af9cd..f9a41663b08b11913ead5a80152479c749c77de2 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainBoElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedControllerElementHandler.java
@@ -1,10 +1,11 @@
-package com.coderman.codemaker.app.dynamicddd;
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
import com.coderman.codemaker.app.ImportPackageService;
-import com.coderman.codemaker.bean.dddelement.DomainBoElementBean;
+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.PlantUmlContextBean;
-import com.coderman.codemaker.enums.DomainElementEnum;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -13,34 +14,40 @@ import java.util.List;
/**
* Description:
- * date: 2021/6/29
+ * date: 2021/7/8
*
* @author fanchunshuai
* @version 1.0.0
* @since JDK 1.8
+ * 处理派生类bo->dto
*/
-@Component(value = "domainBoElementHandler")
-public class DomainBoElementHandler implements DomainElementHandler {
+@Component(value = "derivedControllerElementHandler")
+public class DerivedControllerElementHandler implements DomainElementHandler {
@Autowired
private ImportPackageService importPackageService;
@Override
- public DomainBoElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
- DomainBoElementBean domainBoElementBean = new DomainBoElementBean();
- List domainBoElementBeanList = new ArrayList<>();
- plantUmlContextBean.getClassBeanMap().forEach((k,v)->{
- if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.BO.getElement())){
- importPackageService.setPackageName(v,"domain.bo");
+ public ControllerElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ ControllerElementBean controllerElementBean = new ControllerElementBean();
+ List classBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.CONTROLLER.getElement())){
+ importPackageService.setPackageName(v,"adapter.controller");
String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
v.setClassName(className);
- domainBoElementBeanList.add(v);
+ v.setDerived(true);
+ classBeanList.add(v);
}
});
- domainBoElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
- domainBoElementBean.setClassBeanList(domainBoElementBeanList);
- return domainBoElementBean;
+
+
+ classBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+ controllerElementBean.setClassBeanList(classBeanList);
+ return controllerElementBean;
}
}
-
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
new file mode 100644
index 0000000000000000000000000000000000000000..b938f3e3e0cc7a43946eb7bda3befd9d347beb91
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDOBOConvertElementHandler.java
@@ -0,0 +1,54 @@
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelementderive.DoBoConvertElementBean;
+import com.coderman.codemaker.bean.dddelementderive.DtoBoConvertElementBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+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
+ * 处理派生类do-bo convert
+ */
+@Component(value = "derivedDOBOConvertElementHandler")
+public class DerivedDOBOConvertElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public DoBoConvertElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ DoBoConvertElementBean doBoConvertElementBean = new DoBoConvertElementBean();
+ List convertElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.DOBO_CONVERT.getElement())){
+ importPackageService.setPackageName(v,"data.convert");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className.substring(0,className.lastIndexOf("er")));
+ convertElementBeanList.add(v);
+ }
+ });
+
+
+ convertElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ doBoConvertElementBean.setInterfaceBeanList(convertElementBeanList);
+
+ return doBoConvertElementBean;
+ }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..92a31d61d702e3095de87b77b52d5c63b42c4d14
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOBOConvertElementHandler.java
@@ -0,0 +1,56 @@
+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.DtoBoConvertElementBean;
+import com.coderman.codemaker.bean.dddelementderive.DtoElementBean;
+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 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
+ * 处理派生类bo->dto
+ */
+@Component(value = "derivedDTOBOConvertElementHandler")
+public class DerivedDTOBOConvertElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public DtoBoConvertElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ DtoBoConvertElementBean dtoElementBean = new DtoBoConvertElementBean();
+ List convertElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.DTOBO_CONVERT.getElement())){
+ importPackageService.setPackageName(v,"model.convert");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ convertElementBeanList.add(v);
+ }
+ });
+
+
+ convertElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ dtoElementBean.setInterfaceBeanList(convertElementBeanList);
+
+ return dtoElementBean;
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7398271719dd925223af91356efa47a769ead6d
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedDTOElementHandler.java
@@ -0,0 +1,84 @@
+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.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.FieldBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+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:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理派生类bo->dto
+ */
+@Component(value = "derivedDTOElementHandler")
+public class DerivedDTOElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public DtoElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ DtoElementBean dtoElementBean = new DtoElementBean();
+ List dtoElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.DTO.getElement())){
+ importPackageService.setPackageName(v,"api.dto");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ List beanList = v.getFieldBeanList().stream().filter(f -> !f.isTableKey()
+ && !f.isDtoKey()
+ && !f.isFacadeKey()
+ && !f.isVoKey()
+ && !f.isControllerKey()
+ ).collect(Collectors.toList());
+ v.setFieldBeanList(beanList);
+ dtoElementBeanList.add(v);
+ }
+ });
+
+
+ dtoElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ List facadeList = plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().values().stream().filter(
+ interfaceBean -> interfaceBean.getClassName().toLowerCase().contains("facade")
+ ).collect(Collectors.toList());
+ //如果没有派生过facade则使用默认的方式派生facade
+ if(CollectionUtils.isEmpty(facadeList)){
+ //dto 派生 facade
+ derivedClassFactory.deriveDTO2Facade(dtoElementBeanList,plantUmlContextBean);
+ }
+
+ List convertList = plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().values().stream().filter(
+ interfaceBean -> interfaceBean.getClassName().toLowerCase().contains("convert")
+ ).collect(Collectors.toList());
+
+ //如果没有派生过convert则使用默认的方式派生convert
+ if(CollectionUtils.isEmpty(convertList)){
+ //dto 派生 dto-bo-convert
+ derivedClassFactory.deriveDTOBOConvert(dtoElementBeanList,plantUmlContextBean);
+ }
+ dtoElementBean.setClassBeanList(dtoElementBeanList);
+ return dtoElementBean;
+ }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..3c58c2dc376c393ec8229f76597601741c2b6f8f
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeElementHandler.java
@@ -0,0 +1,72 @@
+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.dddelement.DomainBoElementBean;
+import com.coderman.codemaker.bean.dddelementderive.DtoElementBean;
+import com.coderman.codemaker.bean.dddelementderive.FacadeElementBean;
+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.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;
+import java.util.stream.Collectors;
+
+/**
+ * Description:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理派生类bo->dto
+ */
+@Component(value = "derivedFacadeElementHandler")
+public class DerivedFacadeElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public FacadeElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ FacadeElementBean facadeElementBean = new FacadeElementBean();
+ List facadeElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.FACADE.getElement())){
+ importPackageService.setPackageName(v,"api.facade");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ v.setDerived(true);
+ //过滤扩展方法
+ List methodBeanList = v.getMethodBeanList().stream().filter(methodBean ->
+ !methodBean.getReturnClass().toLowerCase().contains("vo")
+ && !methodBean.getMethodName().toLowerCase().contains("vo")
+ ).collect(Collectors.toList());
+ v.setMethodBeanList(methodBeanList);
+
+ facadeElementBeanList.add(v);
+ }
+ });
+
+
+ facadeElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+ //处理facade到facadeimpl的派生
+ derivedClassFactory.deriveFacade2FacadeImpl(facadeElementBeanList,plantUmlContextBean);
+ facadeElementBean.setInterfaceBeanList(facadeElementBeanList);
+
+ return facadeElementBean;
+
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeImplElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeImplElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bcc0bf103beabd5dbb38a9ec3f85f127be3697e
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedFacadeImplElementHandler.java
@@ -0,0 +1,58 @@
+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.FacadeElementBean;
+import com.coderman.codemaker.bean.dddelementderive.FacadeImplElementBean;
+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 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
+ * 处理派生类bo->dto
+ */
+@Component(value = "derivedFacadeImplElementHandler")
+public class DerivedFacadeImplElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public FacadeImplElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ FacadeImplElementBean FacadeImplElementBean = new FacadeImplElementBean();
+ List facadeImplElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.FACADE_IMPL.getElement())){
+ importPackageService.setPackageName(v,"app.facadeimpl");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ facadeImplElementBeanList.add(v);
+ }
+ });
+
+ facadeImplElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ FacadeImplElementBean.setClassBeanList(facadeImplElementBeanList);
+
+ return FacadeImplElementBean;
+
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOBOConvertElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOBOConvertElementHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..71aef0231698a921ef2045c5d03522fdb01f8863
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOBOConvertElementHandler.java
@@ -0,0 +1,54 @@
+package com.coderman.codemaker.app.dynamicddd.derivedhandler;
+
+import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
+import com.coderman.codemaker.bean.dddelementderive.DtoBoConvertElementBean;
+import com.coderman.codemaker.bean.dddelementderive.VoBoConvertElementBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
+import com.coderman.codemaker.enums.DomainDerivedElementEnum;
+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
+ * 处理派生类bo->dto
+ */
+@Component(value = "derivedVOBOConvertElementHandler")
+public class DerivedVOBOConvertElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public VoBoConvertElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ VoBoConvertElementBean voBoConvertElementBean = new VoBoConvertElementBean();
+ List convertElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getInterfaceBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.VOBO_CONVERT.getElement())){
+ importPackageService.setPackageName(v,"model.convert");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)).replace("vobo","");
+ v.setClassName(className);
+ convertElementBeanList.add(v);
+ }
+ });
+
+
+ convertElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ voBoConvertElementBean.setInterfaceBeanList(convertElementBeanList);
+
+ return voBoConvertElementBean;
+ }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..aef1819fe881a9a45962f993aa4572279ef129d2
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/derivedhandler/DerivedVOElementHandler.java
@@ -0,0 +1,66 @@
+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.VoElementBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.FieldBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
+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:
+ * date: 2021/7/8
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ * 处理派生类bo->dto
+ */
+@Component(value = "derivedVOElementHandler")
+public class DerivedVOElementHandler implements DomainElementHandler {
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public VoElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ if(plantUmlContextBean.getDerivedPlantUmlContextBean() == null){
+ return null;
+ }
+ VoElementBean voElementBean = new VoElementBean();
+ List dtoElementBeanList = new ArrayList<>();
+ plantUmlContextBean.getDerivedPlantUmlContextBean().getClassBeanMap().forEach((k,v)->{
+ if(v.getClassName().toLowerCase().endsWith(DomainDerivedElementEnum.VO.getElement())){
+ importPackageService.setPackageName(v,"adapter.vo");
+ String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ List beanList = v.getFieldBeanList().stream().filter(f -> !f.isTableKey()
+ && !f.isDtoKey()
+ && !f.isFacadeKey()
+ && !f.isVoKey()
+ && !f.isControllerKey()
+ ).collect(Collectors.toList());
+ v.setFieldBeanList(beanList);
+ dtoElementBeanList.add(v);
+ }
+ });
+
+ dtoElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean));
+
+ voElementBean.setClassBeanList(dtoElementBeanList);
+ return voElementBean;
+ }
+}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppCmdElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppCmdElementHandler.java
similarity index 94%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppCmdElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppCmdElementHandler.java
index a3dcf1fce0d493f1dc87a325dff4d7f7eee461db..a6d9fa54e5101d7098c4f38399fd1cddfb8463fa 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppCmdElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppCmdElementHandler.java
@@ -1,6 +1,7 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.CommandElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppExeElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppExeElementHandler.java
similarity index 97%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppExeElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppExeElementHandler.java
index 0bb098b8f04f9d5092ecab229d1e055f0a9c49bd..475e28cccda73d08d84aa101a8f4e123d12dc574 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppExeElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/AppExeElementHandler.java
@@ -1,6 +1,7 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.ExecutorElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.InterfaceBean;
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
new file mode 100644
index 0000000000000000000000000000000000000000..bf6c650bdcb90513f1cfea3c07ee45b4f12b6a7b
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainBoElementHandler.java
@@ -0,0 +1,150 @@
+package com.coderman.codemaker.app.dynamicddd.handler;
+
+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.GlobalConstant;
+import com.coderman.codemaker.bean.dddelement.DomainBoElementBean;
+import com.coderman.codemaker.bean.dddelementderive.DtoElementBean;
+import com.coderman.codemaker.bean.plantuml.*;
+import com.coderman.codemaker.enums.DomainElementEnum;
+import org.apache.commons.collections4.CollectionUtils;
+import org.assertj.core.util.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.reflect.Method;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Description:
+ * date: 2021/6/29
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Component(value = "domainBoElementHandler")
+public class DomainBoElementHandler implements DomainElementHandler {
+
+ @Autowired
+ private DerivedClassFactory derivedClassFactory;
+
+ @Autowired
+ private ImportPackageService importPackageService;
+
+ @Override
+ public DomainBoElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) {
+ DomainBoElementBean domainBoElementBean = new DomainBoElementBean();
+ List domainBoElementBeanList = new ArrayList<>();
+
+ List boWithTableKeyList = new ArrayList<>();
+ List boWithDtoKeyList = new ArrayList<>();
+ List boWithFacadeKeyList = new ArrayList<>();
+ List 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())) {
+ Optional optionalFieldBean = v.getFieldBeanList().stream().filter(f -> f.isTableKey()).findFirst();
+ if (optionalFieldBean.isPresent()) {
+ boWithTableKeyList.add(v);
+ }
+ Optional optionalFieldBeanDtoKey = v.getFieldBeanList().stream().filter(f -> f.isDtoKey()).findFirst();
+ if (optionalFieldBeanDtoKey.isPresent()) {
+ boWithDtoKeyList.add(v);
+ }
+ Optional optionalFieldBeanFacadeKey = v.getFieldBeanList().stream().filter(f -> f.isFacadeKey()).findFirst();
+ if (optionalFieldBeanFacadeKey.isPresent()) {
+ boWithFacadeKeyList.add(v);
+ }
+
+ Optional optionalFieldBeanVOKey = v.getFieldBeanList().stream().filter(f -> f.isVoKey()).findFirst();
+ if (optionalFieldBeanVOKey.isPresent()) {
+ boWithVoKeyList.add(v);
+ }
+ Optional optionalFieldBeanControllerKey = v.getFieldBeanList().stream().filter(f -> f.isControllerKey()).findFirst();
+ if (optionalFieldBeanControllerKey.isPresent()) {
+ boWithControllerKeyList.add(v);
+ }
+ }
+ });
+ //bo 派生 do-bo convert
+ derivedClassFactory.deriveDOBOConvert(boWithTableKeyList, plantUmlContextBean);
+ //默认的派生策略
+ if(CollectionUtils.isEmpty(boWithDtoKeyList)){
+ //bo 派生 dto
+ derivedClassFactory.deriveBo2DTO(domainBoElementBeanList, plantUmlContextBean);
+ }else {
+ //基于plantuml.bo的扩展信息进行派生
+ derivedClassFactory.deriveBo2DTO(boWithDtoKeyList, plantUmlContextBean);
+ }
+
+
+ //处理bo-vo的派生
+ if(CollectionUtils.isNotEmpty(boWithVoKeyList)){
+ //基于plantuml.bo的扩展信息进行派生
+ derivedClassFactory.deriveBo2VO(boWithDtoKeyList, plantUmlContextBean);
+ //通过vo 派生convert,
+ derivedClassFactory.deriveBoVO2Convert(boWithFacadeKeyList,plantUmlContextBean);
+ }
+
+ //处理facade
+ if(CollectionUtils.isNotEmpty(boWithFacadeKeyList)){
+ derivedClassFactory.deriveBo2Facade(boWithFacadeKeyList,plantUmlContextBean);
+ //通过facade 处理convert,
+ derivedClassFactory.deriveBoDTO2Convert(boWithFacadeKeyList,plantUmlContextBean);
+ }
+
+ //处理controller
+ if(CollectionUtils.isNotEmpty(boWithControllerKeyList)){
+ derivedClassFactory.deriveBo2Controller(boWithControllerKeyList,plantUmlContextBean);
+
+ }
+
+
+ plantUmlContextBean.getClassBeanMap().forEach((k, v) -> {
+ if (v.getClassName().toLowerCase().endsWith(DomainElementEnum.BO.getElement())) {
+ //过滤扩展属性
+ List beanList = v.getFieldBeanList().stream().filter(f -> !f.isTableKey()
+ && !f.isDtoKey()
+ && !f.isFacadeKey()
+ && !f.isVoKey()
+ && !f.isControllerKey()
+ ).collect(Collectors.toList());
+ v.setFieldBeanList(beanList);
+
+
+ //过滤扩展方法
+ List methodBeanList = v.getMethodBeanList().stream().filter(methodBean ->
+ !methodBean.getReturnClass().toLowerCase().contains("dto")
+ && !methodBean.getMethodName().toLowerCase().contains("dto")
+ && !methodBean.getReturnClass().toLowerCase().contains("vo")
+ && !methodBean.getMethodName().toLowerCase().contains("vo")
+ ).collect(Collectors.toList());
+ v.setMethodBeanList(methodBeanList);
+
+ String className = v.getClassName().substring(0, 1).toUpperCase().concat(v.getClassName().substring(1));
+ v.setClassName(className);
+ domainBoElementBeanList.add(v);
+
+ }
+ });
+
+
+ domainBoElementBeanList.stream().forEach(v -> importPackageService.dealImportClass(v, plantUmlContextBean));
+ domainBoElementBean.setClassBeanList(domainBoElementBeanList);
+
+
+
+
+ return domainBoElementBean;
+ }
+
+}
+
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainFactoryElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java
similarity index 93%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainFactoryElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java
index 5a7cc4ce700fe3da9ab67a9c14ddbb81773c9e6e..c8da338873e0b4c4491daba58872508837758fd2 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainFactoryElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainFactoryElementHandler.java
@@ -1,6 +1,7 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.FactoryElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainGatawayElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java
similarity index 93%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainGatawayElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java
index 6a7068a29ab04428fa582b84e9df2cb0d5ddeeb1..a141be79f9b0ec8a5f45572b838508eeb75a7d82 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainGatawayElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/DomainGatawayElementHandler.java
@@ -1,6 +1,7 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.InterfaceBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/EventElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java
similarity index 72%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/EventElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java
index e9c0882fe55343b77e53aff5dbe28c9a806b19cd..3147ee0df32b29582020d4d8e56e74a2390eae51 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/EventElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/EventElementHandler.java
@@ -1,4 +1,4 @@
-package com.coderman.codemaker.app.dynamicddd;
+package com.coderman.codemaker.app.dynamicddd.handler;
/**
* Description:
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/InfrastAclElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java
similarity index 97%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/InfrastAclElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java
index dbc6a93c75e4b6dbb5055ca74a7c6834bb70a67f..afec55325000ef9f1799d6ed40698ef1d22366b5 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/InfrastAclElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/InfrastAclElementHandler.java
@@ -1,7 +1,8 @@
-package com.coderman.codemaker.app.dynamicddd;
+package com.coderman.codemaker.app.dynamicddd.handler;
import com.alibaba.fastjson.JSON;
import com.coderman.codemaker.app.ImportPackageService;
+import com.coderman.codemaker.app.dynamicddd.DomainElementHandler;
import com.coderman.codemaker.bean.dddelement.InfrastAclElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.InterfaceBean;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/MsgBodyElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MsgBodyElementHandler.java
similarity index 89%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/MsgBodyElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MsgBodyElementHandler.java
index d32f497f8038a9e0094e3b6372700a3a4c3b88e9..4ae3fb8f43a8d7b137b377abf38e8e715cc3767a 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/MsgBodyElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/MsgBodyElementHandler.java
@@ -1,10 +1,10 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.DomainMsgBodyElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
-import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig;
import com.coderman.codemaker.enums.DomainElementEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -23,9 +23,6 @@ import java.util.List;
@Component(value = "msgBodyElementHandler")
public class MsgBodyElementHandler implements DomainElementHandler {
-
- @Autowired
- private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig;
@Autowired
private ImportPackageService importPackageService;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/RepositoryElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java
similarity index 93%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/RepositoryElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java
index 5785b94ddab0f9459b5120158be22a1703e661d9..578ca4e0f8fd5f5ed718ed3c1d799f77d462f42b 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/RepositoryElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/RepositoryElementHandler.java
@@ -1,6 +1,7 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.RepositoryElementBean;
import com.coderman.codemaker.bean.plantuml.InterfaceBean;
import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ValueObjectElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/ValueObjectElementHandler.java
similarity index 92%
rename from codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ValueObjectElementHandler.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/ValueObjectElementHandler.java
index 544beffb74ac053ab7c827894fb31607501fd7d5..54dd77ebfd04827582f396e6dd1f87d3dc7902e0 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ValueObjectElementHandler.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/handler/ValueObjectElementHandler.java
@@ -1,6 +1,7 @@
-package com.coderman.codemaker.app.dynamicddd;
+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.ValueObjectElementBean;
import com.coderman.codemaker.bean.plantuml.ClassBean;
import com.coderman.codemaker.bean.plantuml.EnumBean;
@@ -55,6 +56,10 @@ public class ValueObjectElementHandler implements DomainElementHandler packageBeanMap = new HashMap<>();
+ /**
+ * 派生类上下文
+ */
+ private PlantUmlContextBean derivedPlantUmlContextBean;
+ public PlantUmlContextBean getDerivedPlantUmlContextBean() {
+ return derivedPlantUmlContextBean;
+ }
+
+ public void setDerivedPlantUmlContextBean(PlantUmlContextBean derivedPlantUmlContextBean) {
+ this.derivedPlantUmlContextBean = derivedPlantUmlContextBean;
+ }
public Map getClassBeanMap() {
return classBeanMap;
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/config/AppServiceConfig.java b/codemaker-core/src/main/java/com/coderman/codemaker/config/AppServiceConfig.java
index d271f9011136f44614436ee9d42f0aee094c94af..41d465c53bf12a56ea3a495c21961b3e599d556b 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/config/AppServiceConfig.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/AppServiceConfig.java
@@ -33,7 +33,11 @@ public class AppServiceConfig {
*/
@Value("${application.type}")
private String applicationType;
+ @Value(value = "${application.global.package}")
+ private String packageName;
+ @Value(value = "${application.global.author}")
+ private String author;
@Resource(name = "colaAppService")
private AppService colaAppService;
@@ -49,11 +53,14 @@ public class AppServiceConfig {
private AppService dynamicDDDAppService;
@Autowired
- private ProjectTemplateConfig projectTemplateConfig;
+ private ProjectTemplateSpringbootConfig projectTemplateSpringbootConfig;
@Autowired
private ProjectTemplateDubboConfig projectTemplateDubboConfig;
+ @Autowired
+ private ProjectTemplateColaConfig projectTemplateColaConfig;
+
/**
* 从应用框架的视角获取应用服务
* @return
@@ -120,7 +127,19 @@ public class AppServiceConfig {
}
}
else if(applicationType.equals(ModuleEnum.COLA_ADAPTER.getAppName())){
-
+ moduleName = ModuleEnum.COLA_ADAPTER.getTemplateFileSet().contains(templateName) ? ModuleEnum.COLA_ADAPTER.getModuleName() : null;
+ if(StringUtils.isEmpty(moduleName)){
+ moduleName = ModuleEnum.COLA_APP.getTemplateFileSet().contains(templateName) ? ModuleEnum.COLA_APP.getModuleName() : null;
+ }
+ if(StringUtils.isEmpty(moduleName)){
+ moduleName = ModuleEnum.COLA_DOMAIN.getTemplateFileSet().contains(templateName) ? ModuleEnum.COLA_DOMAIN.getModuleName() : null;
+ }
+ if(StringUtils.isEmpty(moduleName)){
+ moduleName = ModuleEnum.COLA_CLIENT.getTemplateFileSet().contains(templateName) ? ModuleEnum.COLA_CLIENT.getModuleName() : null;
+ }
+ if(StringUtils.isEmpty(moduleName)){
+ moduleName = ModuleEnum.COLA_INFRAST.getTemplateFileSet().contains(templateName) ? ModuleEnum.COLA_INFRAST.getModuleName() : null;
+ }
}
if(StringUtils.isEmpty(moduleName)){
logger.error("templatefile:"+templateName+" not in the application:"+applicationType);
@@ -136,14 +155,50 @@ public class AppServiceConfig {
public String getDbName() {
if (applicationType.equals(ModuleEnum.SPRING_BOOT_WEB.getAppName())) {
- return projectTemplateConfig.getDbName();
+ return projectTemplateSpringbootConfig.getDbName();
} else if (applicationType.equals(ModuleEnum.DUBBO_API.getAppName())) {
return projectTemplateDubboConfig.getDbName();
} else if (applicationType.equals(ModuleEnum.COLA_ADAPTER.getAppName())) {
- return projectTemplateConfig.getDbName();
+ return projectTemplateColaConfig.getDbName();
}
return "";
}
+ public String getAuthor() {
+ return this.author;
+ }
+
+ public String getPackage() {
+ return this.packageName;
+ }
+ /**
+ * 获取配置中的plantUML类图文件名
+ * @return
+ */
+ public String getPlantUMLFileName() {
+ if (applicationType.equals(ModuleEnum.SPRING_BOOT_WEB.getAppName())) {
+ return projectTemplateSpringbootConfig.getPlantumlName();
+ } else if (applicationType.equals(ModuleEnum.DUBBO_API.getAppName())) {
+ return projectTemplateDubboConfig.getPlantumlName();
+ } else if (applicationType.equals(ModuleEnum.COLA_ADAPTER.getAppName())) {
+ return projectTemplateColaConfig.getPlantumlName();
+ }
+ return "";
+ }
+
+ /**
+ * 获取不同项目的核心模块,db-er图生成之后会在此模块存放
+ * @return
+ */
+ public String getErPictureOutPath(){
+ if (applicationType.equals(ModuleEnum.SPRING_BOOT_WEB.getAppName())) {
+ return projectTemplateSpringbootConfig.getOutPath();
+ } else if (applicationType.equals(ModuleEnum.DUBBO_API.getAppName())) {
+ return projectTemplateDubboConfig.getModuleCommonPath();
+ } else if (applicationType.equals(ModuleEnum.COLA_ADAPTER.getAppName())) {
+ return projectTemplateColaConfig.getModuleInfrastPath();
+ }
+ return null;
+ }
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/config/DefaultPackageConfig.java b/codemaker-core/src/main/java/com/coderman/codemaker/config/DefaultPackageConfig.java
index abe3c3a807f972f6f122214b2d68457a22ff741d..addbdc0f392c02350bc52f83dd07e032156d7f97 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/config/DefaultPackageConfig.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/DefaultPackageConfig.java
@@ -21,7 +21,6 @@ public class DefaultPackageConfig {
* 初始化默认可能需要导入的包
*/
static {
- defaultPackageMap.put("List","java.util.List");
defaultPackageMap.put("List","java.util.List");
defaultPackageMap.put("Map","java.util.Map");
defaultPackageMap.put("HashMap","java.util.HashMap");
@@ -30,6 +29,9 @@ public class DefaultPackageConfig {
defaultPackageMap.put("ArrayList","java.util.ArrayList");
defaultPackageMap.put("Set","java.util.Set");
defaultPackageMap.put("HashSet","java.util.HashSet");
+ defaultPackageMap.put("ResultDto","com.coderman.utils.response.ResultDto");
+ defaultPackageMap.put("ResultDataDto","com.coderman.utils.response.ResultDataDto");
+
}
/**
@@ -39,7 +41,7 @@ public class DefaultPackageConfig {
*/
public String getPackage(String className){
for (Map.Entry entry : defaultPackageMap.entrySet()){
- if(className.toLowerCase().startsWith(entry.getKey().toLowerCase())){
+ if(className.toLowerCase().startsWith(entry.getKey().toLowerCase()) || className.toLowerCase().endsWith(entry.getKey().toLowerCase())){
return entry.getValue();
}
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateColaConfig.java b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateColaConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf198ec543fe8eb87bf8f0fba92e4c871408e42d
--- /dev/null
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateColaConfig.java
@@ -0,0 +1,132 @@
+package com.coderman.codemaker.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+
+/**
+ * Description:
+ * 生成dubbo项目的配置文件
+ * date: 2021/6/18
+ *
+ * @author fanchunshuai
+ * @version 1.0.0
+ * @since JDK 1.8
+ */
+@Configuration
+@Component
+@PropertySource( "classpath:projecttemplate-cola.properties")
+public class ProjectTemplateColaConfig {
+
+ /**
+ * 项目数据库名称
+ */
+ @Value(value = "${cola.global.dbName}")
+ private String dbName;
+
+ /**
+ * 项目名称
+ */
+ @Value(value = "${cola.global.applicationName}")
+ private String applicationName;
+
+ /**
+ * dubbo-common模块地址
+ */
+ @Value(value = "${cola.code.outpath.cola-adapter}")
+ private String moduleAdapterPath;
+
+ /**
+ * dubbo-api模块地址
+ */
+ @Value(value = "${cola.code.outpath.cola-app}")
+ private String moduleAppPath;
+
+ /**
+ * dubbo-api模块地址
+ */
+ @Value(value = "${cola.code.outpath.cola-client}")
+ private String moduleClientPath;
+ /**
+ * dubbo-api模块地址
+ */
+ @Value(value = "${cola.code.outpath.cola-infrast}")
+ private String moduleInfrastPath;
+
+ /**
+ * dubbo-core模块地址
+ */
+ @Value(value = "${cola.code.outpath.cola-domain}")
+ private String moduleDomainPath;
+
+ /**
+ * 应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码
+ */
+ @Value("${cola.domain.plantuml}")
+ private String plantumlName;
+
+ public String getPlantumlName() {
+ return plantumlName;
+ }
+
+ public void setPlantumlName(String plantumlName) {
+ this.plantumlName = plantumlName;
+ }
+
+ public String getDbName() {
+ return dbName;
+ }
+
+ public void setDbName(String dbName) {
+ this.dbName = dbName;
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public void setApplicationName(String applicationName) {
+ this.applicationName = applicationName;
+ }
+
+ public String getModuleAdapterPath() {
+ return moduleAdapterPath;
+ }
+
+ public void setModuleAdapterPath(String moduleAdapterPath) {
+ this.moduleAdapterPath = moduleAdapterPath;
+ }
+
+ public String getModuleAppPath() {
+ return moduleAppPath;
+ }
+
+ public void setModuleAppPath(String moduleAppPath) {
+ this.moduleAppPath = moduleAppPath;
+ }
+
+ public String getModuleClientPath() {
+ return moduleClientPath;
+ }
+
+ public void setModuleClientPath(String moduleClientPath) {
+ this.moduleClientPath = moduleClientPath;
+ }
+
+ public String getModuleInfrastPath() {
+ return moduleInfrastPath;
+ }
+
+ public void setModuleInfrastPath(String moduleInfrastPath) {
+ this.moduleInfrastPath = moduleInfrastPath;
+ }
+
+ public String getModuleDomainPath() {
+ return moduleDomainPath;
+ }
+
+ public void setModuleDomainPath(String moduleDomainPath) {
+ this.moduleDomainPath = moduleDomainPath;
+ }
+}
\ No newline at end of file
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDubboConfig.java b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDubboConfig.java
index e231138444e45dffbdb19c4912c59fc8c6e63467..54c9fb29c72d7e1521f310379680aab72c5a614f 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDubboConfig.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDubboConfig.java
@@ -19,18 +19,6 @@ import org.springframework.stereotype.Component;
@PropertySource( "classpath:projecttemplate-dubbo.properties")
public class ProjectTemplateDubboConfig {
- /**
- * 全局包名
- */
- @Value(value = "${dubbo.global.package}")
- private String globalPackage;
-
- /**
- * 项目作者
- */
- @Value(value = "${dubbo.global.author}")
- private String author;
-
/**
* 项目数据库名称
*/
@@ -61,20 +49,19 @@ public class ProjectTemplateDubboConfig {
@Value(value = "${dubbo.code.outpath.dubbo-core}")
private String moduleCorePath;
- public String getGlobalPackage() {
- return globalPackage;
- }
+ /**
+ * 应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码
+ */
+ @Value("${dubbo.domain.plantuml}")
+ private String plantumlName;
- public void setGlobalPackage(String globalPackage) {
- this.globalPackage = globalPackage;
- }
- public String getAuthor() {
- return author;
+ public String getPlantumlName() {
+ return plantumlName;
}
- public void setAuthor(String author) {
- this.author = author;
+ public void setPlantumlName(String plantumlName) {
+ this.plantumlName = plantumlName;
}
public String getDbName() {
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDynamicDDDConfig.java b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDynamicDDDConfig.java
index 2ea3bf6e86745a27c8d61d85765893bed920e8e8..0b310059ce605535a18475f954e4f313c83e4221 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDynamicDDDConfig.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDynamicDDDConfig.java
@@ -19,17 +19,6 @@ import org.springframework.stereotype.Component;
@PropertySource( "classpath:projecttemplate-dynamicddd.properties")
public class ProjectTemplateDynamicDDDConfig {
- /**
- * 全局包名
- */
- @Value(value = "${dynamicddd.global.package}")
- private String globalPackage;
-
- /**
- * 项目作者
- */
- @Value(value = "${dynamicddd.global.author}")
- private String author;
@Value(value = "${dynamicddd.code.outpath}")
private String outPath;
@@ -46,22 +35,6 @@ public class ProjectTemplateDynamicDDDConfig {
this.plantumlFileName = plantumlFileName;
}
- public String getGlobalPackage() {
- return globalPackage;
- }
-
- public void setGlobalPackage(String globalPackage) {
- this.globalPackage = globalPackage;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
public String getOutPath() {
return outPath;
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateConfig.java b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateSpringbootConfig.java
similarity index 76%
rename from codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateConfig.java
rename to codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateSpringbootConfig.java
index 1cb7dbe9fd05ae719d4474be08d559839cdf4604..ba6d96e656bb73722c50c7d09757f2750699d6e4 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateConfig.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateSpringbootConfig.java
@@ -14,13 +14,9 @@ import org.springframework.stereotype.Component;
@Configuration
@Component
@PropertySource( "classpath:projecttemplate-springboot.properties")
-public class ProjectTemplateConfig {
+public class ProjectTemplateSpringbootConfig {
- @Value(value = "${codemaker.global.package}")
- private String packageName;
- @Value(value = "${codemaker.global.author}")
- private String author;
@Value(value = "${codemaker.global.dbName}")
private String dbName;
@@ -40,28 +36,26 @@ public class ProjectTemplateConfig {
@Value(value = "${codemaker.code.outpath}")
private String outPath;
- public String getOutPath() {
- return outPath;
- }
+ /**
+ * 应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码
+ */
+ @Value("${codemaker.domain.plantuml}")
+ private String plantumlName;
- public void setOutPath(String outPath) {
- this.outPath = outPath;
+ public String getPlantumlName() {
+ return plantumlName;
}
- public String getPackageName() {
- return packageName;
+ public void setPlantumlName(String plantumlName) {
+ this.plantumlName = plantumlName;
}
- public void setPackageName(String packageName) {
- this.packageName = packageName;
- }
-
- public String getAuthor() {
- return author;
+ public String getOutPath() {
+ return outPath;
}
- public void setAuthor(String author) {
- this.author = author;
+ public void setOutPath(String outPath) {
+ this.outPath = outPath;
}
public String getDbName() {
@@ -106,14 +100,14 @@ public class ProjectTemplateConfig {
@Override
public String toString() {
- return "ProjectTemplateConfig{" +
- "packageName='" + packageName + '\'' +
- ", author='" + author + '\'' +
- ", dbName='" + dbName + '\'' +
+ return "ProjectTemplateSpringbootConfig{" +
+ "dbName='" + dbName + '\'' +
", projectName='" + projectName + '\'' +
", groupId='" + groupId + '\'' +
", artifactId='" + artifactId + '\'' +
", version='" + version + '\'' +
+ ", outPath='" + outPath + '\'' +
+ ", plantumlName='" + plantumlName + '\'' +
'}';
}
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/controller/CodeMakerController.java b/codemaker-core/src/main/java/com/coderman/codemaker/controller/CodeMakerController.java
index 75006d05a4d69ebd7ab593482a1c0280f6b374f6..824b5be84b46b6fd05c3ea9a26bb91bc6e69cc70 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/controller/CodeMakerController.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/controller/CodeMakerController.java
@@ -3,6 +3,8 @@ package com.coderman.codemaker.controller;
import com.alibaba.fastjson.JSON;
import com.coderman.codemaker.bean.ColumnBean;
import com.coderman.codemaker.bean.TableBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
import com.coderman.codemaker.service.WriteAppModuleService;
import com.coderman.codemaker.service.WriteFileService;
import com.coderman.codemaker.service.registry.DynamicDDDVarRegistry;
@@ -46,22 +48,26 @@ public class CodeMakerController {
public String makeAllProjectCode(){
Map map = mapperXmlVarRegistry.getTemplateVar();
- Map tableBeanMap = (Map)map.get("table");
- System.out.println("tableBeanMap====="+ JSON.toJSONString(tableBeanMap));
- Map> columnBeanListMap = (Map>)map.get("columns");
- Map varMap = new HashMap<>();
- //循环写每个表对应的类
- tableBeanMap.forEach((k,v)->{
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- writeFileServiceV2.writeAll(v.getHumpClassName(),varMap,"");
- });
- //写公共服务类
- writeFileServiceV2.writeCommon(varMap,"");
- //渲染e-r图
- writeFileServiceV2.writeERPicture(tableBeanMap,columnBeanListMap);
+ if(map.containsKey("dynamicddd")){
+ writeFileServiceV2.writeAllWithDDD(map);
+ }else {
+ Map tableBeanMap = (Map)map.get("table");
+ Map> columnBeanListMap = (Map>)map.get("columns");
+ Map varMap = new HashMap<>();
+ //循环写每个表对应的类
+ tableBeanMap.forEach((k,v)->{
+ varMap.put("table", v);
+ varMap.put("columns", columnBeanListMap.get(k));
+ varMap.put("package", map.get("package"));
+ varMap.put("author", map.get("author"));
+ writeFileServiceV2.writeAll(v.getHumpClassName(),varMap,"");
+ });
+ //写公共服务类
+ writeFileServiceV2.writeCommon(varMap,"");
+ //渲染e-r图
+ writeFileServiceV2.writeERPicture(tableBeanMap,columnBeanListMap);
+ }
+
return "success";
}
diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorController.java b/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorController.java
index 45908ac497fd0d8d01ed1ca00f5dc2dac467b9ba..607803f929dd0bfc17fa1477ad257bdeb7fc10b3 100644
--- a/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorController.java
+++ b/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorController.java
@@ -2,10 +2,15 @@ package com.coderman.codemaker.controller;
import com.coderman.codemaker.bean.ColumnBean;
import com.coderman.codemaker.bean.TableBean;
+import com.coderman.codemaker.bean.WriteContentBean;
+import com.coderman.codemaker.bean.plantuml.ClassBean;
+import com.coderman.codemaker.bean.plantuml.EnumBean;
+import com.coderman.codemaker.bean.plantuml.InterfaceBean;
import com.coderman.codemaker.enums.TemplateFileEnum;
import com.coderman.codemaker.service.FreemarkerService;
import com.coderman.codemaker.service.WriteAppModuleService;
import com.coderman.codemaker.service.registry.*;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -24,6 +29,7 @@ import java.util.Map;
* 接口,变量也是按需要注册
*/
@RestController
+@Slf4j
public class GeneratorController {
@Resource(name = "entityVarRegistry")
private EntityVarRegistry entityVarRegistry;
@@ -43,10 +49,6 @@ public class GeneratorController {
@Resource(name = "testVarRegistry")
private TestVarRegistry testVarRegistry;
-
- //@Autowired
- //private WriteFileService writeFileService;
-
@Autowired
private WriteAppModuleService writeFileService;
@@ -79,7 +81,7 @@ public class GeneratorController {
}
/**
- * 生成模块的entity类
+ * 生成模块的do类
* @return
*/
@GetMapping("/getproject/do")
@@ -108,18 +110,23 @@ public class GeneratorController {
@GetMapping("/getproject/vo")
public String getVOTemplate(){
Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List classBeanList = (List)map.get("adaptervo");
+ writeFileService.writeVO(classBeanList);
+ }else {
+ Map tableBeanMap = (Map)map.get("table");
+ Map> columnBeanListMap = (Map>)map.get("columns");
+ tableBeanMap.forEach((k,v)->{
+ Map varMap = new HashMap<>();
+ varMap.put("table", v);
+ varMap.put("columns", columnBeanListMap.get(k));
+ varMap.put("package", map.get("package"));
+ varMap.put("author", map.get("author"));
+ String templateContent = freemarkerService.parseTpl(TemplateFileEnum.VO.getTempFileName(),varMap);
+ writeFileService.writeVO(templateContent,v.getHumpClassName());
+ });
+ }
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.VO.getTempFileName(),varMap);
- writeFileService.writeVO(templateContent,v.getHumpClassName());
- });
return "success";
}
@@ -165,35 +172,13 @@ public class GeneratorController {
varMap.put("author", map.get("author"));
String templateContent = freemarkerService.parseTpl(TemplateFileEnum.SERVICE.getTempFileName(),varMap);
writeFileService.writeService(templateContent,v.getHumpClassName());
- });
-
- return "success";
- }
-
- /**
- * 生成模块的serviceimpl类
- * @return
- */
- @GetMapping("/getproject/serviceimpl")
- public String getServiceImplTemplate(){
- Map map = mapperXmlVarRegistry.getTemplateVar();
-
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.SERVICE_IMPL.getTempFileName(),varMap);
+ templateContent = freemarkerService.parseTpl(TemplateFileEnum.SERVICE_IMPL.getTempFileName(),varMap);
writeFileService.writeServiceImpl(templateContent,v.getHumpClassName());
});
return "success";
}
-
/**
* 生成模块的mapperxml类
* @return
@@ -224,18 +209,23 @@ public class GeneratorController {
@GetMapping("/getproject/controller")
public String getControllerTemplate(){
Map map = serviceImplVarRegistry.getTemplateVar();
-
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.CONTROLLER.getTempFileName(),varMap);
- writeFileService.writeController(templateContent,v.getHumpClassName());
- });
+ if(map.containsKey("dynamicddd")){
+ List classBeanList = (List)map.get("controller");
+ writeFileService.writeController(classBeanList);
+ }else {
+ Map tableBeanMap = (Map)map.get("table");
+ Map> columnBeanListMap = (Map>)map.get("columns");
+ tableBeanMap.forEach((k,v)->{
+ Map varMap = new HashMap<>();
+ varMap.put("table", v);
+ varMap.put("columns", columnBeanListMap.get(k));
+ varMap.put("package", map.get("package"));
+ varMap.put("author", map.get("author"));
+ String templateContent = freemarkerService.parseTpl(TemplateFileEnum.CONTROLLER.getTempFileName(),varMap);
+ writeFileService.writeController(templateContent,v.getHumpClassName());
+ });
+
+ }
return "success";
}
@@ -273,93 +263,270 @@ public class GeneratorController {
@GetMapping("/getproject/facade")
public String getFacadeTemplate(){
Map map = serviceVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List interfaceBeanList = (List)map.get("derivefacade");
+ writeFileService.writeFacade(interfaceBeanList);
+
+ List classBeanList = (List)map.get("derivefacadeimpl");
+ writeFileService.writeFacadeImpl(classBeanList);
+ }else {
+ Map tableBeanMap = (Map)map.get("table");
+ Map> columnBeanListMap = (Map>)map.get("columns");
+ tableBeanMap.forEach((k,v)->{
+ Map varMap = new HashMap<>();
+ varMap.put("table", v);
+ varMap.put("columns", columnBeanListMap.get(k));
+ varMap.put("package", map.get("package"));
+ varMap.put("author", map.get("author"));
+ String templateContent = freemarkerService.parseTpl(TemplateFileEnum.FACADE.getTempFileName(),varMap);
+ writeFileService.writeFacade(templateContent,v.getHumpClassName());
+
+ templateContent = freemarkerService.parseTpl(TemplateFileEnum.FACADE_IMPL.getTempFileName(),varMap);
+ writeFileService.writeFacadeImpl(templateContent,v.getHumpClassName());
+ });
+ }
+
+ return "success";
+ }
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.FACADE.getTempFileName(),varMap);
- writeFileService.writeFacade(templateContent,v.getHumpClassName());
- });
+
+ /**
+ * 生成模块的dto类
+ * @return
+ */
+ @GetMapping("/getproject/dto")
+ public String getDTOTemplate(){
+ Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List classBeanList = (List)map.get("derivedto");
+ writeFileService.writeDTO(classBeanList);
+ }else {
+ Map tableBeanMap = (Map)map.get("table");
+ Map> columnBeanListMap = (Map>)map.get("columns");
+ tableBeanMap.forEach((k,v)->{
+ Map varMap = new HashMap<>();
+ varMap.put("table", v);
+ varMap.put("columns", columnBeanListMap.get(k));
+ varMap.put("package", map.get("package"));
+ varMap.put("author", map.get("author"));
+ String templateContent = freemarkerService.parseTpl(TemplateFileEnum.DTO.getTempFileName(),varMap);
+ writeFileService.writeDTO(templateContent,v.getHumpClassName());
+ });
+ }
return "success";
}
/**
- * 生成dubbo-api的接口服务
+ * 生成模块的bo类
* @return
*/
- @GetMapping("/getproject/facadeimpl")
- public String getFacadeImplTemplate(){
- Map map = serviceVarRegistry.getTemplateVar();
+ @GetMapping("/getproject/bo")
+ public String getBOTemplate(){
+ Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List classBeanList = (List)map.get("domainbo");
+ writeFileService.writeBO(classBeanList);
+ }else {
+ Map tableBeanMap = (Map)map.get("table");
+ Map> columnBeanListMap = (Map>)map.get("columns");
+ tableBeanMap.forEach((k,v)->{
+ Map varMap = new HashMap<>();
+ varMap.put("table", v);
+ varMap.put("columns", columnBeanListMap.get(k));
+ varMap.put("package", map.get("package"));
+ varMap.put("author", map.get("author"));
+ String templateContent = freemarkerService.parseTpl(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(),varMap);
+ WriteContentBean writeContentBean = WriteContentBean.builder().content(templateContent)
+ .templateName(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName())
+ .humpClassName(v.getHumpClassName()).build();
+
+ writeFileService.writeBO(writeContentBean);
+ });
+ }
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.FACADE_IMPL.getTempFileName(),varMap);
- writeFileService.writeFacadeImpl(templateContent,v.getHumpClassName());
- });
+ return "success";
+ }
+
+
+ /**
+ * 生成模块的valueobject+enum类
+ * @return
+ */
+ @GetMapping("/getproject/valueobject")
+ public String getValueObject(){
+ Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List valueObjectBeanList = (List)map.get("domainvalueobject");
+ List enumBeanList = (List)map.get("valueobjectenum");
+ writeFileService.writeValueObject(valueObjectBeanList);
+ writeFileService.writeEnum(enumBeanList);
+ }else {
+ log.warn("valueobject class generation depends on plantuml..........!!!!!!!");
+ }
return "success";
}
+ /**
+ * 生成模块的msgbody类
+ * @return
+ */
+ @GetMapping("/getproject/msgbody")
+ public String getMsgBody(){
+ Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List classBeanList = (List)map.get("domainmsg");
+ writeFileService.writeMsgBody(classBeanList);
+ }else {
+ log.warn("msgbody class generation depends on plantuml..........!!!!!!!");
+ }
+ return "success";
+ }
/**
- * 生成模块的vo类
+ * 生成模块的gataway类
* @return
*/
- @GetMapping("/getproject/dto")
- public String getDTOTemplate(){
+ @GetMapping("/getproject/gataway")
+ public String getDomainGataway(){
Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List gatawayBeanList = (List)map.get("gataway");
+ List repositoryBeanList = (List)map.get("repository");
+ gatawayBeanList.addAll(repositoryBeanList);
+ writeFileService.writeDomainGataway(gatawayBeanList);
+ writeFileService.writeGatawayImpl(gatawayBeanList);
+ }else {
+ //gataway需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类
+ log.warn("gataway class generation depends on plantuml..........!!!!!!!");
+ }
+ return "success";
+ }
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.DTO.getTempFileName(),varMap);
- writeFileService.writeDTO(templateContent,v.getHumpClassName());
- });
+ /**
+ * 生成模块的acladapter类
+ * @return
+ */
+ @GetMapping("/getproject/acladapter")
+ public String getAclAdapter(){
+ Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List aclBeanList = (List)map.get("infrastacl");
+ List aclParamBeanList = (List)map.get("infrastaclparam");
+ writeFileService.writeAclInterfaceAndImpl(aclBeanList);
+ writeFileService.writeAclInterfaceParam(aclParamBeanList);
+ }else {
+ //gataway需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类
+ log.warn("gataway class generation depends on plantuml..........!!!!!!!");
+ }
return "success";
}
/**
- * 生成模块的vo类
+ * 生成模块的command类
* @return
*/
- @GetMapping("/getproject/bo")
- public String getBOTemplate(){
+ @GetMapping("/getproject/command")
+ public String getCommand(){
Map map = entityVarRegistry.getTemplateVar();
+ if(map.containsKey("dynamicddd")){
+ List commandBeanList = (List)map.get("cmd");
+ writeFileService.writeCommand(commandBeanList);
+ }else {
+ //gataway需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类
+ log.warn("gataway class generation depends on plantuml..........!!!!!!!");
+ }
+ return "success";
+ }
- Map tableBeanMap = (Map)map.get("table");
- Map> columnBeanListMap = (Map>)map.get("columns");
- tableBeanMap.forEach((k,v)->{
- Map varMap = new HashMap<>();
- varMap.put("table", v);
- varMap.put("columns", columnBeanListMap.get(k));
- varMap.put("package", map.get("package"));
- varMap.put("author", map.get("author"));
- String templateContent = freemarkerService.parseTpl(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(),varMap);
- writeFileService.writeBO(templateContent,v.getHumpClassName());
- });
+ /**
+ * 生成模块的executor类
+ * @return
+ */
+ @GetMapping("/getproject/executor")
+ public String getExecutor(){
+ Map