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版本 ![image](doc/img/天画-低代码平台(codeMaker).png) + 2. v2版本 +![image](doc/img/天画-低代码平台(codeMaker)-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 map = entityVarRegistry.getTemplateVar(); + if(map.containsKey("dynamicddd")){ + List exeBeanList = (List)map.get("exeClass"); + List exeInterfaceBeanList = (List)map.get("exeInterface"); + writeFileService.writeAppExeImpl(exeBeanList); + writeFileService.writeAppExeInterface(exeInterfaceBeanList); + }else { + //gataway需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类 + log.warn("gataway class generation depends on plantuml..........!!!!!!!"); + } + return "success"; + } + + /** + * 生成模块的command类 + * @return + */ + @GetMapping("/getproject/factory") + public String getFactory(){ + Map map = entityVarRegistry.getTemplateVar(); + if(map.containsKey("dynamicddd")){ + List factoryBeanList = (List)map.get("domainfactory"); + writeFileService.writeFactory(factoryBeanList); + }else { + //factory需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类 + log.warn("factory class generation depends on plantuml..........!!!!!!!"); + } return "success"; } + /** + * 生成模块的dtoboconvert接口 + * @return + */ + @GetMapping("/getproject/dtoboconvert") + public String getDTOBOConvert(){ + Map map = entityVarRegistry.getTemplateVar(); + if(map.containsKey("dynamicddd")){ + List dtoboconvertBeanList = (List)map.get("dtoboconvert"); + writeFileService.writeDTOBOConvert(dtoboconvertBeanList); + }else { + //dtoboconvert需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类 + log.warn("dtoboconvert class generation depends on plantuml..........!!!!!!!"); + } + return "success"; + } + + /** + * 生成模块的dtoboconvert接口 + * @return + */ + @GetMapping("/getproject/voboconvert") + public String getVOBOConvert(){ + Map map = entityVarRegistry.getTemplateVar(); + if(map.containsKey("dynamicddd")){ + List voboconvertBeanList = (List)map.get("voboconvert"); + writeFileService.writeVOBOConvert(voboconvertBeanList); + }else { + //voboconvert需要依赖plantUML类图标示,否则基于数据库表生成会显得不伦不类 + log.warn("voboconvert class generation depends on plantuml..........!!!!!!!"); + } + return "success"; + } + /** + * 生成模块的dtoboconvert接口 + * @return + */ + @GetMapping("/getproject/doboconvert") + public String getDOBOConvert(){ + Map map = entityVarRegistry.getTemplateVar(); + if(map.containsKey("dynamicddd")){ + List doboconvertBeanList = (List)map.get("doboconvert"); + writeFileService.writeDOBOConvert(doboconvertBeanList); + }else { + log.warn("doboconvert class generation depends on plantuml..........!!!!!!!"); + } + return "success"; + } /** * 生成项目e-r图 diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/DomainDerivedElementEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/DomainDerivedElementEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..cf909ee9a87a809d6a109e99cbdeda2fa43d42d1 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/DomainDerivedElementEnum.java @@ -0,0 +1,36 @@ +package com.coderman.codemaker.enums; + +/** + * Description:领域派生类枚举 + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public enum DomainDerivedElementEnum { + DTO("dto","数据传输对象"), + FACADE("facade","api门面接口"), + FACADE_IMPL("facadeimpl","api门面接口实现"), + DTOBO_CONVERT("convert","dto-bo相互转换mapstruct接口"), + DOBO_CONVERT("converter","do-bo相互转换mapstruct接口"), + VOBO_CONVERT("convertervobo","vo-bo相互转换mapstruct接口"), + VO("vo","视图传输对象"), + CONTROLLER("controller","控制器"), + ; + private String element; + private String desc; + DomainDerivedElementEnum(String element, String desc){ + this.element = element; + this.desc = desc; + } + + + public String getElement() { + return element; + } + + public String getDesc() { + return desc; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/ModuleEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/ModuleEnum.java index c956ab5c3dd3e07d458d1ecc27b57f5b68241af5..5a93182914de34dcc560fdc4ba418dc93fef5fee 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/enums/ModuleEnum.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/ModuleEnum.java @@ -22,18 +22,48 @@ public enum ModuleEnum { TemplateFileEnum.MAPPER_XML.getTempFileName(), TemplateFileEnum.MAPPER.getTempFileName(), TemplateFileEnum.CONTROLLER.getTempFileName(), + TemplateFileEnum.CONTROLLER_DDD.getTempFileName(), TemplateFileEnum.SERVICE_IMPL.getTempFileName(), TemplateFileEnum.SERVICE.getTempFileName(), TemplateFileEnum.VO.getTempFileName(), + TemplateFileEnum.VO_DDD.getTempFileName(), + TemplateFileEnum.DTO_DDD.getTempFileName(), + TemplateFileEnum.DTO.getTempFileName(), TemplateFileEnum.ENTITY.getTempFileName(), + TemplateFileEnum.DATA_OBJECT.getTempFileName(), + TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), + TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), + TemplateFileEnum.TEST.getTempFileName(), + TemplateFileEnum.VALUE_OBJECT.getTempFileName(), + TemplateFileEnum.ENUM.getTempFileName(), + TemplateFileEnum.CMD.getTempFileName(), + TemplateFileEnum.EXE.getTempFileName(), + TemplateFileEnum.EXE_IMPL.getTempFileName(), + TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), + TemplateFileEnum.GATAWAY.getTempFileName(), + TemplateFileEnum.REPOSITORY.getTempFileName(), + TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), + TemplateFileEnum.REPOSITORY_IMPL.getTempFileName(), + TemplateFileEnum.ACL.getTempFileName(), + TemplateFileEnum.ACL_IMPL.getTempFileName(), + TemplateFileEnum.ACL_PARAM.getTempFileName(), + TemplateFileEnum.DTOBO_CONVERT.getTempFileName(), TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), + TemplateFileEnum.VOBO_CONVERT.getTempFileName(), + TemplateFileEnum.FACTORY.getTempFileName(), + TemplateFileEnum.MESSAGE_BODY.getTempFileName(), + TemplateFileEnum.CONVERT.getTempFileName(), + TemplateFileEnum.DOBO_CONVERT.getTempFileName(), + TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())), /** * */ DUBBO_API("dubbo","dubbo-api", Sets.newHashSet( TemplateFileEnum.FACADE.getTempFileName(), + TemplateFileEnum.FACADE_DDD.getTempFileName(), + TemplateFileEnum.DTO_DDD.getTempFileName(), TemplateFileEnum.DTO.getTempFileName() )), /** @@ -50,13 +80,35 @@ public enum ModuleEnum { DUBBO_CORE("dubbo","dubbo-core", Sets.newHashSet( TemplateFileEnum.SERVICE.getTempFileName(), TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), + TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), + TemplateFileEnum.CONVERT.getTempFileName(), TemplateFileEnum.SERVICE_IMPL.getTempFileName(), TemplateFileEnum.TEST.getTempFileName(), TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(), TemplateFileEnum.FACADE_IMPL.getTempFileName(), + TemplateFileEnum.FACADE_IMPL_DDD.getTempFileName(), + TemplateFileEnum.APPLICATION.getTempFileName(), - TemplateFileEnum.FACADE_AOP.getTempFileName() + TemplateFileEnum.FACADE_AOP.getTempFileName(), + TemplateFileEnum.VALUE_OBJECT.getTempFileName(), + TemplateFileEnum.ENUM.getTempFileName(), + TemplateFileEnum.CMD.getTempFileName(), + TemplateFileEnum.EXE.getTempFileName(), + TemplateFileEnum.EXE_IMPL.getTempFileName(), + TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), + TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), + TemplateFileEnum.GATAWAY.getTempFileName(), + TemplateFileEnum.REPOSITORY.getTempFileName(), + TemplateFileEnum.FACTORY.getTempFileName(), + TemplateFileEnum.REPOSITORY_IMPL.getTempFileName(), + TemplateFileEnum.ACL.getTempFileName(), + TemplateFileEnum.ACL_IMPL.getTempFileName(), + TemplateFileEnum.DTOBO_CONVERT.getTempFileName(), + TemplateFileEnum.DOBO_CONVERT.getTempFileName(), + TemplateFileEnum.MESSAGE_BODY.getTempFileName(), + TemplateFileEnum.ACL_PARAM.getTempFileName() + )), @@ -67,7 +119,12 @@ public enum ModuleEnum { COLA_ADAPTER("cola","cola-adapter", Sets.newHashSet( TemplateFileEnum.CONTROLLER.getTempFileName(), TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), - TemplateFileEnum.VO.getTempFileName() + TemplateFileEnum.VO.getTempFileName(), + TemplateFileEnum.CONTROLLER_DDD.getTempFileName(), + TemplateFileEnum.VOBO_CONVERT.getTempFileName(), + + TemplateFileEnum.VO_DDD.getTempFileName() + )), /** @@ -76,6 +133,7 @@ public enum ModuleEnum { COLA_DOMAIN("cola","cola-domain", Sets.newHashSet( TemplateFileEnum.SERVICE.getTempFileName(), TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), + TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), TemplateFileEnum.SERVICE.getTempFileName(), TemplateFileEnum.GATAWAY.getTempFileName(), TemplateFileEnum.FACTORY.getTempFileName(), @@ -83,37 +141,49 @@ public enum ModuleEnum { TemplateFileEnum.VALUE_OBJECT.getTempFileName(), TemplateFileEnum.MESSAGE_BODY.getTempFileName(), TemplateFileEnum.ENUM.getTempFileName() - )), + + )), /** * */ COLA_CLIENT("cola","cola-client", Sets.newHashSet( TemplateFileEnum.DTO.getTempFileName(), - TemplateFileEnum.FACADE.getTempFileName())), + TemplateFileEnum.DTO_DDD.getTempFileName(), + TemplateFileEnum.FACADE.getTempFileName(), + TemplateFileEnum.FACADE_DDD.getTempFileName() + )), /** * */ COLA_INFRAST("cola","cola-infrast", Sets.newHashSet( - TemplateFileEnum.SERVICE.getTempFileName(), TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), TemplateFileEnum.REPOSITORY_IMPL.getTempFileName(), TemplateFileEnum.MAPPER_XML.getTempFileName(), - TemplateFileEnum.CONVERT.getTempFileName(), - TemplateFileEnum.MAPPER.getTempFileName() + TemplateFileEnum.MAPPER.getTempFileName(), + TemplateFileEnum.DATA_OBJECT.getTempFileName(), + TemplateFileEnum.DOBO_CONVERT.getTempFileName(), + TemplateFileEnum.SERVICE_IMPL.getTempFileName(), + TemplateFileEnum.ACL.getTempFileName(), + TemplateFileEnum.ACL_IMPL.getTempFileName(), + TemplateFileEnum.ACL_PARAM.getTempFileName() )), /** * */ COLA_APP("cola","cola-app", Sets.newHashSet( - TemplateFileEnum.SERVICE.getTempFileName(), + TemplateFileEnum.TEST.getTempFileName(), + TemplateFileEnum.FACADE_IMPL.getTempFileName(), + TemplateFileEnum.FACADE_IMPL_DDD.getTempFileName(), TemplateFileEnum.CMD.getTempFileName(), TemplateFileEnum.CONVERT.getTempFileName(), TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), TemplateFileEnum.EXE.getTempFileName(), TemplateFileEnum.EXE_IMPL.getTempFileName(), + TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(), + TemplateFileEnum.DTOBO_CONVERT.getTempFileName(), TemplateFileEnum.FACADE_AOP.getTempFileName() )), ; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/TemplateFileEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/TemplateFileEnum.java index f2147e785094684301591b1b48720ad1a04b6b97..d25bf3548bcf1d5e21bd22316b6ad6c207b4f1b4 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/enums/TemplateFileEnum.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/TemplateFileEnum.java @@ -26,6 +26,8 @@ public enum TemplateFileEnum { FACADE_IMPL("facadeImpl"), BUSINESS_OBJECT("bo"), CONVERT("convert"), + DTOBO_CONVERT("dtoboconvert"), + DOBO_CONVERT("doboconvert"), FACADE_AOP("facadeaop"), GATAWAY("gataway"), REPOSITORY("repository"), @@ -44,6 +46,13 @@ public enum TemplateFileEnum { EXE_IMPL("exeimpl"), EXE_ABSTRACT("abstractexe"), VALUE_OBJECT("valueobject"), + BUSINESS_OBJECT_DDD("boddd"), + FACADE_DDD("facadeddd"), + FACADE_IMPL_DDD("facadeimplddd"), + CONTROLLER_DDD("controllerddd"), + VO_DDD("voddd"), + VOBO_CONVERT("voboconvert"), + DTO_DDD("dtoddd"), ; private String tempFileName; TemplateFileEnum(String tempFileName){ diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/AbstractVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/AbstractVarRegistry.java index 433e62c91e7c7069bda54da5f7fa93331b04aab3..da802f34ed92095ff940f9bc70251148c6ef94ce 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/AbstractVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/AbstractVarRegistry.java @@ -1,8 +1,21 @@ package com.coderman.codemaker.service; -import com.coderman.codemaker.config.ProjectTemplateConfig; +import com.alibaba.fastjson.JSON; +import com.coderman.codemaker.app.dynamicddd.DomainElementHandler; +import com.coderman.codemaker.app.dynamicddd.derivedhandler.*; +import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.bean.dddelement.*; +import com.coderman.codemaker.bean.dddelementderive.*; +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.config.AppServiceConfig; +import com.coderman.codemaker.config.ProjectTemplateDubboConfig; +import com.coderman.codemaker.config.ProjectTemplateSpringbootConfig; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import javax.annotation.Resource; +import java.util.HashMap; import java.util.Map; /** @@ -12,9 +25,70 @@ import java.util.Map; * version: 1.0
*/ public abstract class AbstractVarRegistry { + @Autowired + //private ReadPlantUMLFileService readFileService; + private ReadPlantUMLFileServiceV2 readFileService; @Autowired - private ProjectTemplateConfig projectTemplateConfig; + private AppServiceConfig appServiceConfig; + + + @Resource(name = "domainBoElementHandler") + private DomainElementHandler domainElementHandler; + + + @Resource(name = "valueObjectElementHandler") + private DomainElementHandler valueObjectElementHandler; + + @Resource(name = "repositoryElementHandler") + private DomainElementHandler repositoryElementHandler; + + @Resource(name = "domainGatawayElementHandler") + private DomainElementHandler domainGatawayElementHandler; + + + @Resource(name = "msgBodyElementHandler") + private DomainElementHandler msgBodyElementHandler; + + @Resource(name = "domainFactoryElementHandler") + private DomainElementHandler domainFactoryElementHandler; + + @Resource(name = "infrastAclElementHandler") + private DomainElementHandler infrastAclElementHandler; + + @Resource(name = "appCmdElementHandler") + private DomainElementHandler appCmdElementHandler; + + @Resource(name = "appExeElementHandler") + private DomainElementHandler appExeElementHandler; + + + + //------------------以下为领域元素派生类对象处理器 + + @Resource(name = "derivedDTOElementHandler") + private DerivedDTOElementHandler derivedDTOElementHandler; + + @Resource(name = "derivedFacadeElementHandler") + private DerivedFacadeElementHandler derivedFacadeElementHandler; + + @Resource(name = "derivedFacadeImplElementHandler") + private DerivedFacadeImplElementHandler derivedFacadeImplElementHandler; + + @Resource(name = "derivedDTOBOConvertElementHandler") + private DerivedDTOBOConvertElementHandler derivedDTOBOConvertElementHandler; + + @Resource(name = "derivedDOBOConvertElementHandler") + private DerivedDOBOConvertElementHandler derivedDOBOConvertElementHandler; + + @Resource(name = "derivedVOElementHandler") + private DerivedVOElementHandler derivedVOElementHandler; + + @Resource(name = "derivedControllerElementHandler") + private DerivedControllerElementHandler derivedControllerElementHandler; + + @Resource(name = "derivedVOBOConvertElementHandler") + private DerivedVOBOConvertElementHandler derivedVOBOConvertElementHandler; /** @@ -22,10 +96,81 @@ public abstract class AbstractVarRegistry { * @return */ public Map getTemplateVar(){ - System.out.println("=============="+projectTemplateConfig.toString()); Map varMap = getRegistVarMap(); - varMap.putIfAbsent("package",projectTemplateConfig.getPackageName()); - varMap.putIfAbsent("author",projectTemplateConfig.getAuthor()); + + varMap.putIfAbsent("package",appServiceConfig.getPackage()); + varMap.putIfAbsent("author",appServiceConfig.getAuthor()); + String plantUMLName = appServiceConfig.getPlantUMLFileName(); + if(StringUtils.isEmpty(plantUMLName)){ + return varMap; + } + + PlantUmlContextBean plantUmlContextBean = readFileService.getPlantUmlContextBean(plantUMLName); + if(plantUmlContextBean == null){ + return varMap; + } + + Map tableBeanMap = (Map)varMap.get("table"); + + + tableBeanMap.forEach((k,v)->{ + ClassBean classBean = v.convertToClassBean(appServiceConfig.getPackage()+".dao.dataobject"); + plantUmlContextBean.getClassBeanMap().put(classBean.getClassName(),classBean); + }); + + + //打标 + varMap.put("dynamicddd","dynamicddd"); + System.out.println(JSON.toJSONString(plantUmlContextBean)); + DomainBoElementBean domainBoElementBean = (DomainBoElementBean)domainElementHandler.getElementBeanList(plantUmlContextBean); + ValueObjectElementBean valueObjectElementBean = (ValueObjectElementBean)valueObjectElementHandler.getElementBeanList(plantUmlContextBean); + RepositoryElementBean repositoryElementBean = (RepositoryElementBean)repositoryElementHandler.getElementBeanList(plantUmlContextBean); + GatawayElementBean gatawayElementBean = (GatawayElementBean)domainGatawayElementHandler.getElementBeanList(plantUmlContextBean); + DomainMsgBodyElementBean domainMsgBodyElementBean = (DomainMsgBodyElementBean)msgBodyElementHandler.getElementBeanList(plantUmlContextBean); + FactoryElementBean factoryElementBean = (FactoryElementBean)domainFactoryElementHandler.getElementBeanList(plantUmlContextBean); + InfrastAclElementBean infrastAclElementBean = (InfrastAclElementBean)infrastAclElementHandler.getElementBeanList(plantUmlContextBean); + CommandElementBean commandElementBean = (CommandElementBean)appCmdElementHandler.getElementBeanList(plantUmlContextBean); + ExecutorElementBean executorElementBean = (ExecutorElementBean)appExeElementHandler.getElementBeanList(plantUmlContextBean); + + + varMap.put("domainbo",domainBoElementBean.getClassBeanList()); + varMap.put("domainvalueobject",valueObjectElementBean.getClassBeanList()); + varMap.put("valueobjectenum",valueObjectElementBean.getEnumBeanList()); + varMap.put("repository",repositoryElementBean.getInterfaceBeanList()); + varMap.put("gataway",gatawayElementBean.getInterfaceBeanList()); + varMap.put("domainmsg",domainMsgBodyElementBean.getClassBeanList()); + varMap.put("domainfactory",factoryElementBean.getClassBeanList()); + varMap.put("infrastacl",infrastAclElementBean.getInterfaceBeanList()); + varMap.put("infrastaclparam",infrastAclElementBean.getClassBeanList()); + varMap.put("cmd",commandElementBean.getClassBeanList()); + varMap.put("exeClass",executorElementBean.getClassBeanList()); + varMap.put("exeInterface",executorElementBean.getInterfaceBeanList()); + + //处理派生类 + DtoElementBean dtoElementBean = derivedDTOElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("derivedto",dtoElementBean.getClassBeanList()); + + FacadeElementBean facadeElementBean = derivedFacadeElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("derivefacade",facadeElementBean.getInterfaceBeanList()); + + FacadeImplElementBean facadeImplElementBean = derivedFacadeImplElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("derivefacadeimpl",facadeImplElementBean.getClassBeanList()); + + DtoBoConvertElementBean dtoBoConvertElementBean = derivedDTOBOConvertElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("dtoboconvert",dtoBoConvertElementBean.getInterfaceBeanList()); + + DoBoConvertElementBean doBoConvertElementBean = derivedDOBOConvertElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("doboconvert",doBoConvertElementBean.getInterfaceBeanList()); + + VoElementBean voElementBean = derivedVOElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("adaptervo",voElementBean.getClassBeanList()); + + ControllerElementBean controllerElementBean = derivedControllerElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("controller",controllerElementBean.getClassBeanList()); + + VoBoConvertElementBean voBoConvertElementBean = derivedVOBOConvertElementHandler.getElementBeanList(plantUmlContextBean); + varMap.put("voboconvert",voBoConvertElementBean.getInterfaceBeanList()); + return varMap; } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileServiceV2.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileServiceV2.java index 8346306b7a51dd34f3cbb0776822671bd56c35b4..23785a212ed995cc758291508eca94faa615abfa 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileServiceV2.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileServiceV2.java @@ -1,10 +1,12 @@ package com.coderman.codemaker.service; import com.coderman.codemaker.bean.plantuml.*; +import com.coderman.codemaker.config.AppServiceConfig; import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig; import com.coderman.codemaker.enums.ClassEnum; import com.coderman.codemaker.enums.ClassRelationEnum; import com.coderman.codemaker.enums.VisibilityEnum; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; @@ -30,18 +32,23 @@ import java.util.Map; * */ @Service +@Slf4j public class ReadPlantUMLFileServiceV2 { @Autowired - private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; - + private AppServiceConfig appServiceConfig; /** * 读取plantUMl文件 + * @param plantUMLFileName * @return */ - private List readPlantUMLContent(){ + private List readPlantUMLContent(String plantUMLFileName){ + if(StringUtils.isEmpty(plantUMLFileName)){ + log.error("plantUMLFileName is empty,can't read content----------------!!!!!!!!!!"); + return null; + } try { - File file = ResourceUtils.getFile("classpath:ddd-plantuml/"+projectTemplateDynamicDDDConfig.getPlantumlFileName()); + File file = ResourceUtils.getFile("classpath:ddd-plantuml/"+plantUMLFileName); return FileUtils.readLines(file,"UTF-8"); } catch (IOException e) { e.printStackTrace(); @@ -52,10 +59,14 @@ public class ReadPlantUMLFileServiceV2 { /** * 解析plantUML文件内容 + * @param plantUMLFileName * @return */ - public PlantUmlContextBean getPlantUmlContextBean(){ - List contentList = readPlantUMLContent(); + public PlantUmlContextBean getPlantUmlContextBean(String plantUMLFileName){ + List contentList = readPlantUMLContent(plantUMLFileName); + if(CollectionUtils.isEmpty(contentList)){ + return null; + } List elementList = new ArrayList<>(); PlantUmlContextBean plantUmlContextBean = new PlantUmlContextBean(); @@ -160,7 +171,7 @@ public class ReadPlantUMLFileServiceV2 { ClassBean classBean = new ClassBean(); classBean.setFieldBeanList(fieldBeanList); classBean.setMethodBeanList(methodBeanList); - classBean.setAuthor(projectTemplateDynamicDDDConfig.getAuthor()); + classBean.setAuthor(appServiceConfig.getAuthor()); classBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); classBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); return classBean; @@ -179,7 +190,7 @@ public class ReadPlantUMLFileServiceV2 { List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); InterfaceBean interfaceBean = new InterfaceBean(); interfaceBean.setMethodBeanList(methodBeanList); - interfaceBean.setAuthor(projectTemplateDynamicDDDConfig.getAuthor()); + interfaceBean.setAuthor(appServiceConfig.getAuthor()); interfaceBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); interfaceBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); @@ -199,7 +210,7 @@ public class ReadPlantUMLFileServiceV2 { List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); EnumBean enumBean = new EnumBean(); enumBean.setFieldBeanList(fieldBeanList); - enumBean.setAuthor(projectTemplateDynamicDDDConfig.getAuthor()); + enumBean.setAuthor(appServiceConfig.getAuthor()); enumBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); enumBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); dealEnumMethodBeanList(elementList,enumBean); @@ -258,7 +269,7 @@ public class ReadPlantUMLFileServiceV2 { methodBean.setMethodName(arr[1]); }else{ methodBean.setReturnClass(arr[0]); - methodBean.setMethodName(fieldArr[1].trim().replace(arr[0],"")); + methodBean.setMethodName(fieldArr[1].trim().replaceFirst(arr[0],"").trim()); } }else { String[] fieldArr = fieldStr.trim().split(" "); diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/TemlateVarService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/TemlateVarService.java index bc82c9e7bc0bec25f9605ba057bebbcc5beea5bc..0aff281cad593a67ae6e35e1fcb2f2fa85e0f6c8 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/TemlateVarService.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/TemlateVarService.java @@ -3,7 +3,7 @@ package com.coderman.codemaker.service; import com.alibaba.fastjson.JSON; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; -import com.coderman.codemaker.config.ProjectTemplateConfig; +import com.coderman.codemaker.config.AppServiceConfig; import com.coderman.codemaker.dao.SqlMapper; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -27,9 +27,8 @@ public class TemlateVarService { private final Logger LOGGER = LoggerFactory.getLogger(TemlateVarService.class); - @Autowired - private ProjectTemplateConfig projectTemplateConfig; + private AppServiceConfig appServiceConfig; @Resource private SqlMapper sqlMapper; @@ -44,7 +43,7 @@ public class TemlateVarService { * @return */ public Map exeGetTableBeanMap(){ - String dbName = projectTemplateConfig.getDbName(); + String dbName = appServiceConfig.getDbName(); List tableBeanList = sqlMapper.getDBTableBeanList(dbName); Map tableBeanMap = new HashMap<>(); tableBeanList.stream().forEach(e->{ @@ -77,7 +76,7 @@ public class TemlateVarService { * @return */ private Map> exeGetColumnBeanMap(){ - String dbName = projectTemplateConfig.getDbName(); + String dbName = appServiceConfig.getDbName(); List columnBeanList = sqlMapper.getColumnBeanList(dbName); columnBeanList.stream().forEach(e->{ String columnFieldName = getHumpTableName(e.getColumnName()); @@ -238,4 +237,14 @@ public class TemlateVarService { } return columnBeanMap; } + + /** + * 根据表名获取对应类名 + * @param tableName + * @return + */ + public String getClassDOName(String tableName){ + String humpTableName = getHumpTableName(tableName); + return getHumpClassName(humpTableName); + } } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteAppModuleService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteAppModuleService.java index 437470ec896ca6ec9f58aa628c9b81c0c75aab3c..c35d25606e3deba94d497295acdd8ca4d2d659b1 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteAppModuleService.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteAppModuleService.java @@ -3,8 +3,10 @@ package com.coderman.codemaker.service; 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.config.AppServiceConfig; -import com.coderman.codemaker.config.ProjectTemplateConfig; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.utils.Constant; @@ -13,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,9 +36,6 @@ public class WriteAppModuleService { @Autowired private AppServiceConfig appServiceConfig; - @Autowired - private ProjectTemplateConfig projectTemplateConfig; - @Autowired private DBErPictureService erPictureService; @@ -83,7 +83,7 @@ public class WriteAppModuleService { } /** - * 写entity文件 + * 写do文件 * * @param content * @param humpClassName @@ -138,7 +138,7 @@ public class WriteAppModuleService { } /** - * 写DTO文件 + * 写BO文件 * * @param content * @param humpClassName @@ -154,6 +154,257 @@ public class WriteAppModuleService { writeFileService.writeContent(writeContentBean); } + /** + * 写BO文件 + * @param writeContentBean + */ + public void writeBO(WriteContentBean writeContentBean) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName()); + if (writeFileService == null) { + return; + } + writeFileService.writeContent(writeContentBean); + } + + /** + * 写BO文件 + * @param classBeanList + */ + public void writeBO(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeBO(classBeanList,writeFileService,null); + } + + /** + * 写msgbody文件 + * @param classBeanList + */ + public void writeMsgBody(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.MESSAGE_BODY.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeMsgBody(classBeanList,writeFileService,null); + } + /** + * 写domaingataway文件 + * @param classBeanList + */ + public void writeDomainGataway(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.GATAWAY.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeGataWay(classBeanList,writeFileService,null); + } + /** + * 写domaingatawayimpl文件 + * @param interfaceBeanList + */ + public void writeGatawayImpl(List interfaceBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.GATAWAY_IMPL.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeGatawayImpl(interfaceBeanList,writeFileService,null); + } + + /** + * 写command文件 + * @param classBeanList + */ + public void writeCommand(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.CMD.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeAppCommand(classBeanList,writeFileService,null); + } + + /** + * 写factory文件 + * @param classBeanList + */ + public void writeFactory(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.FACTORY.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeFactory(classBeanList,writeFileService,null); + } + + /** + * 写AppExeImpl文件 + * @param classBeanList + */ + public void writeAppExeImpl(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.CMD.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeAppExeImpl(classBeanList,writeFileService,null); + } + + /** + * 写AppExeInterface文件 + * @param interfaceBeanList + */ + public void writeAppExeInterface(List interfaceBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.EXE.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeAppExeInterface(interfaceBeanList,writeFileService,null); + } + + + /** + * 写dtoboconvert文件 + * @param dtoboConvertBeanList + */ + public void writeDTOBOConvert(List dtoboConvertBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.DTOBO_CONVERT.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeDtoBOConvert(dtoboConvertBeanList,writeFileService); + } + + /** + * 写voboconvert文件 + * @param dtoboConvertBeanList + */ + public void writeVOBOConvert(List dtoboConvertBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.VOBO_CONVERT.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeVoBOConvert(dtoboConvertBeanList,writeFileService); + } + + /** + * 写doboconvert文件 + * @param doboConvertBeanList + */ + public void writeDOBOConvert(List doboConvertBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.DOBO_CONVERT.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeDoBOConvert(doboConvertBeanList,writeFileService); + } + + + /** + * 写acl.param文件 + * @param classBeanList + */ + public void writeAclInterfaceParam(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.ACL_PARAM.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeACLParam(classBeanList,writeFileService,null); + } + + /** + * 写AppExeInterface文件 + * @param interfaceBeanList + */ + public void writeAclInterfaceAndImpl(List interfaceBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.ACL.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeAclInterfaceAndImpl(interfaceBeanList,writeFileService,null); + } + + /** + * 写valueobject文件 + * @param classBeanList + */ + public void writeValueObject(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.VALUE_OBJECT.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeValueObject(classBeanList,writeFileService,null); + } + + /** + * 写enum文件 + * @param classBeanList + */ + public void writeEnum(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.ENUM.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeEnum(classBeanList,writeFileService,null); + } + + /** + * 写DTO文件 + * @param classBeanList + */ + public void writeDTO(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.DTO.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeDTO(classBeanList,writeFileService); + } + + /** + * 写VO文件 + * @param classBeanList + */ + public void writeVO(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.VO.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeVO(classBeanList,writeFileService); + } + + /** + * 写controller文件 + * @param classBeanList + */ + public void writeController(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.CONTROLLER.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeController(classBeanList,writeFileService); + } + + /** + * 写facade文件 + * @param classBeanList + */ + public void writeFacade(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.FACADE_DDD.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeFacade(classBeanList,writeFileService); + } + + /** + * 写facadeimpl文件 + * @param classBeanList + */ + public void writeFacadeImpl(List classBeanList) { + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.FACADE_IMPL_DDD.getTempFileName()); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeFacadeImpl(classBeanList,writeFileService); + } /** * 写mapper class文件 @@ -250,7 +501,7 @@ public class WriteAppModuleService { * @param content */ public void writeBaseController(String content) { - IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.SERVICE_IMPL.getTempFileName()); + IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.BASE_CONTROLLER.getTempFileName()); if (writeFileService == null) { return; } @@ -398,6 +649,100 @@ public class WriteAppModuleService { } + /** + * 一次性生成所有表的模块代码,同时解析plantUML的类图结合起来 + * @param allMetaDataMap + */ + public void writeAllWithDDD(Map allMetaDataMap){ + List boClassBeanList = (List)allMetaDataMap.get("domainbo"); + this.writeBO(boClassBeanList); + + List valueObjectBeanList = (List)allMetaDataMap.get("domainvalueobject"); + List enumBeanList = (List)allMetaDataMap.get("valueobjectenum"); + this.writeValueObject(valueObjectBeanList); + this.writeEnum(enumBeanList); + + List msgClassBeanList = (List)allMetaDataMap.get("domainmsg"); + this.writeMsgBody(msgClassBeanList); + + List gatawayBeanList = (List)allMetaDataMap.get("gataway"); + List repositoryBeanList = (List)allMetaDataMap.get("repository"); + gatawayBeanList.addAll(repositoryBeanList); + this.writeDomainGataway(gatawayBeanList); + this.writeGatawayImpl(gatawayBeanList); + + List aclBeanList = (List)allMetaDataMap.get("infrastacl"); + List aclParamBeanList = (List)allMetaDataMap.get("infrastaclparam"); + this.writeAclInterfaceAndImpl(aclBeanList); + this.writeAclInterfaceParam(aclParamBeanList); + + + List commandBeanList = (List)allMetaDataMap.get("cmd"); + this.writeCommand(commandBeanList); + + List exeBeanList = (List)allMetaDataMap.get("exeClass"); + List exeInterfaceBeanList = (List)allMetaDataMap.get("exeInterface"); + this.writeAppExeImpl(exeBeanList); + this.writeAppExeInterface(exeInterfaceBeanList); + + + List factoryBeanList = (List)allMetaDataMap.get("domainfactory"); + this.writeFactory(factoryBeanList); + + List voClassBeanList = (List)allMetaDataMap.get("adaptervo"); + this.writeVO(voClassBeanList); + + List classBeanList = (List)allMetaDataMap.get("controller"); + this.writeController(classBeanList); + + + List derivefacadeInterfaceBeanList = (List)allMetaDataMap.get("derivefacade"); + this.writeFacade(derivefacadeInterfaceBeanList); + + List derivefacadeimplclassBeanList = (List)allMetaDataMap.get("derivefacadeimpl"); + this.writeFacadeImpl(derivefacadeimplclassBeanList); + + List dtoClassBeanList = (List)allMetaDataMap.get("derivedto"); + this.writeDTO(dtoClassBeanList); + + + + List dtoboconvertBeanList = (List)allMetaDataMap.get("dtoboconvert"); + this.writeDTOBOConvert(dtoboconvertBeanList); + + List voboconvertBeanList = (List)allMetaDataMap.get("voboconvert"); + this.writeVOBOConvert(voboconvertBeanList); + + List doboconvertBeanList = (List)allMetaDataMap.get("doboconvert"); + this.writeDOBOConvert(doboconvertBeanList); + + Map tableBeanMap = (Map)allMetaDataMap.get("table"); + Map> columnBeanListMap = (Map>)allMetaDataMap.get("columns"); + Map varMap = new HashMap<>(); + + tableBeanMap.forEach((k,v)->{ + varMap.put("table", v); + varMap.put("columns", columnBeanListMap.get(k)); + varMap.put("package", allMetaDataMap.get("package")); + varMap.put("author", allMetaDataMap.get("author")); + String templateContent = freemarkerService.parseTpl(TemplateFileEnum.DATA_OBJECT.getTempFileName(),varMap); + this.writeDO(templateContent,v.getHumpClassName()); + + templateContent = freemarkerService.parseTpl(TemplateFileEnum.MAPPER.getTempFileName(),varMap); + this.writeMapper(templateContent,v.getHumpClassName()); + + templateContent = freemarkerService.parseTpl(TemplateFileEnum.MAPPER_XML.getTempFileName(),varMap); + this.writeMapperXml(templateContent,v.getHumpClassName()); + + templateContent = freemarkerService.parseTpl(TemplateFileEnum.TEST.getTempFileName(),varMap); + this.writeTest(templateContent,v.getHumpClassName()); + }); + //写公共服务类 + this.writeCommon(varMap,""); + //渲染e-r图 + this.writeERPicture(tableBeanMap,columnBeanListMap); + + } /** * 写公共基础服务类 @@ -427,7 +772,7 @@ public class WriteAppModuleService { * @param columnBeanListMap */ public void writeERPicture(Map tableBeanMap, Map> columnBeanListMap) { - String filePath = projectTemplateConfig.getOutPath() + Constant.ER_PICTURE + "/" + projectTemplateConfig.getDbName() + ".puml"; + String filePath = appServiceConfig.getErPictureOutPath() + Constant.ER_PICTURE + "/" + appServiceConfig.getDbName() + ".puml"; List tableBeanList = new ArrayList<>(); tableBeanMap.forEach((k, v) -> { com.coderman.codemaker.dbergenerate.bean.TableBean tableBean = new com.coderman.codemaker.dbergenerate.bean.TableBean(); diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteDynamicDDDModuleService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteDynamicDDDModuleService.java index 026b8a3d4c3666bf5a36c5d9265eeb65761a1998..233e2621c028c5046f6818cbfd4643570a7acb30 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteDynamicDDDModuleService.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteDynamicDDDModuleService.java @@ -34,50 +34,50 @@ public class WriteDynamicDDDModuleService { //写bo List classBeanList = (List)dynamicDDDMap.get("domainbo"); - writeBO(classBeanList,writeFileService); + writeBO(classBeanList,writeFileService,"ddd"); //写valueobject List valueObjectBeanList = (List)dynamicDDDMap.get("domainvalueobject"); - writeValueObject(valueObjectBeanList,writeFileService); + writeValueObject(valueObjectBeanList,writeFileService,"ddd"); //写接口 List repositoryInterfaceBeanList = (List)dynamicDDDMap.get("repository"); List gatawayInterfaceBeanList = (List)dynamicDDDMap.get("gataway"); repositoryInterfaceBeanList.addAll(gatawayInterfaceBeanList); - writeInterfaceAndImpl(repositoryInterfaceBeanList,writeFileService); + writeInterfaceAndImpl(repositoryInterfaceBeanList,writeFileService,"ddd"); //写枚举 List enumBeanList = (List)dynamicDDDMap.get("valueobjectenum"); - writeEnum(enumBeanList,writeFileService); + writeEnum(enumBeanList,writeFileService,"ddd"); //写msgbody List domainMsgBeanList = (List)dynamicDDDMap.get("domainmsg"); - writeMsgBody(domainMsgBeanList,writeFileService); + writeMsgBody(domainMsgBeanList,writeFileService,"ddd"); //写factory List domainFactoryBeanList = (List)dynamicDDDMap.get("domainfactory"); - writeFactory(domainFactoryBeanList,writeFileService); + writeFactory(domainFactoryBeanList,writeFileService,"ddd"); //写防腐层接口 List infrastAclInterfaceList = (List)dynamicDDDMap.get("infrastacl"); - writeAclInterfaceAndImpl(infrastAclInterfaceList,writeFileService); + writeAclInterfaceAndImpl(infrastAclInterfaceList,writeFileService,"ddd"); //写防腐层接口需要的参数 List infrastAclParamClassList = (List)dynamicDDDMap.get("infrastaclparam"); - writeACLParam(infrastAclParamClassList,writeFileService); + writeACLParam(infrastAclParamClassList,writeFileService,"ddd"); //写app层的命令服务 List appCommandClassList = (List)dynamicDDDMap.get("cmd"); - writeAppCommand(appCommandClassList,writeFileService); + writeAppCommand(appCommandClassList,writeFileService,"ddd"); //写app.exe interface List appExeInterfaceList = (List)dynamicDDDMap.get("exeInterface"); - writeAppExeInterface(appExeInterfaceList,writeFileService); + writeAppExeInterface(appExeInterfaceList,writeFileService,"ddd"); //写app.exeImpl List appExeClassImplList = (List)dynamicDDDMap.get("exeClass"); - writeAppExeImpl(appExeClassImplList,writeFileService); + writeAppExeImpl(appExeClassImplList,writeFileService,"ddd"); @@ -89,7 +89,7 @@ public class WriteDynamicDDDModuleService { * @param classBeanList * @param writeFileService */ - private void writeBO(List classBeanList, IWriteFileService writeFileService){ + public void writeBO(List classBeanList, IWriteFileService writeFileService,String dddTag){ for (ClassBean classBean : classBeanList){ Map varMap = new HashMap<>(); @@ -98,9 +98,14 @@ public class WriteDynamicDDDModuleService { varMap.put("fields",classBean.getFieldBeanList()); varMap.put("methods",classBean.getMethodBeanList()); varMap.put("imports",classBean.getImportClassList()); - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + String boContent; + if (StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), varMap); + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), varMap); + } WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) - .templateName(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName()) + .templateName(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName()) .humpClassName(classBean.getClassName()) .classPackageName(classBean.getPackageName()) .build(); @@ -108,13 +113,163 @@ public class WriteDynamicDDDModuleService { } } + /** + * 写msgbody + * @param classBeanList + * @param writeFileService + */ + public void writeMsgBody(List classBeanList, IWriteFileService writeFileService,String dddTag){ + + for (ClassBean classBean : classBeanList){ + Map varMap = new HashMap<>(); + + varMap.put("class",classBean); + varMap.put("fields",classBean.getFieldBeanList()); + varMap.put("methods",classBean.getMethodBeanList()); + varMap.put("imports",classBean.getImportClassList()); + String boContent; + if(StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.MESSAGE_BODY.getTempFileName(), varMap); + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.MESSAGE_BODY.getTempFileName(), varMap); + } + + + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.MESSAGE_BODY.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } /** - * 写BO + * 写DTO + * @param classBeanList + * @param writeFileService + */ + public void writeDTO(List classBeanList, IWriteFileService writeFileService){ + + for (ClassBean classBean : classBeanList){ + Map varMap = new HashMap<>(); + + varMap.put("class",classBean); + varMap.put("fields",classBean.getFieldBeanList()); + varMap.put("methods",classBean.getMethodBeanList()); + varMap.put("imports",classBean.getImportClassList()); + String boContent = freemarkerService.parseTpl(TemplateFileEnum.DTO_DDD.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.DTO_DDD.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写VO + * @param classBeanList + * @param writeFileService + */ + public void writeVO(List classBeanList, IWriteFileService writeFileService){ + + for (ClassBean classBean : classBeanList){ + Map varMap = new HashMap<>(); + + varMap.put("class",classBean); + varMap.put("fields",classBean.getFieldBeanList()); + varMap.put("methods",classBean.getMethodBeanList()); + varMap.put("imports",classBean.getImportClassList()); + String boContent = freemarkerService.parseTpl(TemplateFileEnum.VO_DDD.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.VO_DDD.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + + /** + * 写VO + * @param classBeanList + * @param writeFileService + */ + public void writeController(List classBeanList, IWriteFileService writeFileService){ + + for (ClassBean classBean : classBeanList){ + Map varMap = new HashMap<>(); + + varMap.put("class",classBean); + varMap.put("fields",classBean.getFieldBeanList()); + varMap.put("methods",classBean.getMethodBeanList()); + varMap.put("imports",classBean.getImportClassList()); + String boContent = freemarkerService.parseTpl(TemplateFileEnum.CONTROLLER_DDD.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.CONTROLLER_DDD.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + + /** + * 写facadeimpl + * @param classBeanList + * @param writeFileService + */ + public void writeFacadeImpl(List classBeanList, IWriteFileService writeFileService){ + + for (ClassBean classBean : classBeanList){ + Map varMap = new HashMap<>(); + varMap.put("class",classBean); + varMap.put("methods",classBean.getMethodBeanList()); + varMap.put("imports",classBean.getImportClassList()); + String boContent = freemarkerService.parseTpl(TemplateFileEnum.FACADE_IMPL_DDD.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.FACADE_IMPL.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写facade + * @param classBeanList + * @param writeFileService + */ + public void writeFacade(List classBeanList, IWriteFileService writeFileService){ + + for (InterfaceBean interfaceBean : classBeanList){ + Map varMap = new HashMap<>(); + + varMap.put("class",interfaceBean); + varMap.put("methods",interfaceBean.getMethodBeanList()); + varMap.put("imports",interfaceBean.getImportClassList()); + String boContent = freemarkerService.parseTpl(TemplateFileEnum.FACADE_DDD.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.FACADE.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + + /** + * 写valueobject * @param classBeanList * @param writeFileService */ - private void writeValueObject(List classBeanList, IWriteFileService writeFileService){ + public void writeValueObject(List classBeanList, IWriteFileService writeFileService,String dddTag){ for (ClassBean classBean : classBeanList){ Map varMap = new HashMap<>(); @@ -123,7 +278,13 @@ public class WriteDynamicDDDModuleService { varMap.put("fields",classBean.getFieldBeanList()); varMap.put("methods",classBean.getMethodBeanList()); varMap.put("imports",classBean.getImportClassList()); - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + String boContent; + if(StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.VALUE_OBJECT.getTempFileName(), varMap); + + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.VALUE_OBJECT.getTempFileName(), varMap); + } WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) .templateName(TemplateFileEnum.VALUE_OBJECT.getTempFileName()) .humpClassName(classBean.getClassName()) @@ -138,14 +299,18 @@ public class WriteDynamicDDDModuleService { * @param repositoryInterfaceBeanList * @param writeFileService */ - private void writeInterfaceAndImpl(List repositoryInterfaceBeanList, IWriteFileService writeFileService){ + private void writeInterfaceAndImpl(List repositoryInterfaceBeanList, IWriteFileService writeFileService,String dddTag){ for (InterfaceBean interfaceBean : repositoryInterfaceBeanList){ Map varMap = new HashMap<>(); varMap.put("class",interfaceBean); varMap.put("methods",interfaceBean.getMethodBeanList()); varMap.put("imports",interfaceBean.getImportClassList()); - - String interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + String interfaceContent; + if (StringUtils.isNotEmpty(dddTag)){ + interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + }else { + interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + } WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) .templateName(TemplateFileEnum.GATAWAY.getTempFileName()) .humpClassName(interfaceBean.getClassName()) @@ -164,12 +329,57 @@ public class WriteDynamicDDDModuleService { } } + /** + * 写gataway接口和repository接口 + * @param gataWayBeanList + * @param writeFileService + */ + public void writeGataWay(List gataWayBeanList, IWriteFileService writeFileService,String dddTag) { + for (InterfaceBean interfaceBean : gataWayBeanList) { + Map varMap = new HashMap<>(); + varMap.put("class", interfaceBean); + varMap.put("methods", interfaceBean.getMethodBeanList()); + varMap.put("imports", interfaceBean.getImportClassList()); + + String interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.GATAWAY.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写gataway实现 + * @param gatawayInterfaceBeanList + * @param writeFileService + */ + public void writeGatawayImpl(List gatawayInterfaceBeanList, IWriteFileService writeFileService,String dddTag){ + for (InterfaceBean interfaceBean : gatawayInterfaceBeanList){ + Map varMap = new HashMap<>(); + varMap.put("class",interfaceBean); + varMap.put("methods",interfaceBean.getMethodBeanList()); + varMap.put("imports",interfaceBean.getImportClassList()); + + //写接口实现 + String interfaceImplContent = freemarkerService.parseTpl(TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), varMap); + WriteContentBean writeContentBean2 = WriteContentBean.builder().content(interfaceImplContent) + .templateName(TemplateFileEnum.GATAWAY_IMPL.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean2); + } + } + /** * 写枚举 * @param enumBeanList * @param writeFileService */ - private void writeEnum(List enumBeanList, IWriteFileService writeFileService){ + public void writeEnum(List enumBeanList, IWriteFileService writeFileService,String dddTag){ //写枚举 for (EnumBean enumBean : enumBeanList){ Map varMap = new HashMap<>(); @@ -179,8 +389,12 @@ public class WriteDynamicDDDModuleService { varMap.put("enums",enumBean.getEnumValueList()); varMap.put("methods",enumBean.getMethodBeanList()); varMap.put("bodys",enumBean.getConstructMethodBodyList()); - - String enumContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.ENUM.getTempFileName(), varMap); + String enumContent; + if(StringUtils.isNotEmpty(dddTag)){ + enumContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.ENUM.getTempFileName(), varMap); + }else { + enumContent = freemarkerService.parseTpl(TemplateFileEnum.ENUM.getTempFileName(), varMap); + } WriteContentBean writeContentBean = WriteContentBean.builder().content(enumContent) .templateName(TemplateFileEnum.ENUM.getTempFileName()) .humpClassName(enumBean.getClassName()) @@ -190,34 +404,12 @@ public class WriteDynamicDDDModuleService { } } - /** - * 写msgbody - * @param domainMsgBeanList - * @param writeFileService - */ - private void writeMsgBody(List domainMsgBeanList, IWriteFileService writeFileService){ - //写msgbody - for (ClassBean classBean : domainMsgBeanList){ - Map varMap = new HashMap<>(); - varMap.put("class",classBean); - varMap.put("fields",classBean.getFieldBeanList()); - varMap.put("methods",classBean.getMethodBeanList()); - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.MESSAGE_BODY.getTempFileName(), varMap); - WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) - .templateName(TemplateFileEnum.MESSAGE_BODY.getTempFileName()) - .humpClassName(classBean.getClassName()) - .classPackageName(classBean.getPackageName()) - .build(); - writeFileService.writeContent(writeContentBean); - } - } - /** * 写factory * @param domainFactoryBeanList * @param writeFileService */ - private void writeFactory(List domainFactoryBeanList, IWriteFileService writeFileService){ + public void writeFactory(List domainFactoryBeanList, IWriteFileService writeFileService,String dddTag){ //写factory for (ClassBean classBean : domainFactoryBeanList){ Map varMap = new HashMap<>(); @@ -225,7 +417,13 @@ public class WriteDynamicDDDModuleService { varMap.put("fields",classBean.getFieldBeanList()); varMap.put("methods",classBean.getMethodBeanList()); varMap.put("imports",classBean.getImportClassList()); - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.FACTORY.getTempFileName(), varMap); + String boContent; + if(StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.FACTORY.getTempFileName(), varMap); + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.FACTORY.getTempFileName(), varMap); + } + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) .templateName(TemplateFileEnum.FACTORY.getTempFileName()) .humpClassName(classBean.getClassName()) @@ -238,17 +436,22 @@ public class WriteDynamicDDDModuleService { /** * 写接口和实现 - * @param repositoryInterfaceBeanList + * @param aclInterfaceBeanList * @param writeFileService */ - private void writeAclInterfaceAndImpl(List repositoryInterfaceBeanList, IWriteFileService writeFileService){ - for (InterfaceBean interfaceBean : repositoryInterfaceBeanList){ + public void writeAclInterfaceAndImpl(List aclInterfaceBeanList, IWriteFileService writeFileService,String dddTag){ + for (InterfaceBean interfaceBean : aclInterfaceBeanList){ Map varMap = new HashMap<>(); varMap.put("class",interfaceBean); varMap.put("methods",interfaceBean.getMethodBeanList()); varMap.put("imports",interfaceBean.getImportClassList()); + String interfaceContent; + if(StringUtils.isNotEmpty(dddTag)){ + interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.ACL.getTempFileName(), varMap); + }else { + interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.ACL.getTempFileName(), varMap); + } - String interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.ACL.getTempFileName(), varMap); WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) .templateName(TemplateFileEnum.ACL.getTempFileName()) .humpClassName(interfaceBean.getClassName()) @@ -257,10 +460,17 @@ public class WriteDynamicDDDModuleService { writeFileService.writeContent(writeContentBean); //写接口实现 - String interfaceImplContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), varMap); + String interfaceImplContent; + if(StringUtils.isNotEmpty(dddTag)){ + interfaceImplContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), varMap); + }else { + interfaceImplContent = freemarkerService.parseTpl(TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), varMap); + } + + WriteContentBean writeImplBean = WriteContentBean.builder() .content(interfaceImplContent) - .templateName(TemplateFileEnum.GATAWAY_IMPL.getTempFileName()) + .templateName(TemplateFileEnum.ACL_IMPL.getTempFileName()) .humpClassName(interfaceBean.getClassName()) .classPackageName(interfaceBean.getPackageName()) .build(); @@ -274,16 +484,18 @@ public class WriteDynamicDDDModuleService { * @param classBeanList * @param writeFileService */ - private void writeACLParam(List classBeanList, IWriteFileService writeFileService){ + public void writeACLParam(List classBeanList, IWriteFileService writeFileService,String dddTag){ for (ClassBean classBean : classBeanList){ Map varMap = new HashMap<>(); varMap.put("class",classBean); - //varMap.put("fields",classBean.getFieldBeanList()); - //varMap.put("methods",classBean.getMethodBeanList()); - //varMap.put("imports",classBean.getImportClassList()); //使用BO的模板 - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + String boContent; + if(StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), varMap); + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), varMap); + } WriteContentBean writeContentBean = WriteContentBean.builder() .content(boContent) .templateName(TemplateFileEnum.ACL_PARAM.getTempFileName()) @@ -300,7 +512,7 @@ public class WriteDynamicDDDModuleService { * @param classBeanList * @param writeFileService */ - private void writeAppCommand(List classBeanList, IWriteFileService writeFileService){ + public void writeAppCommand(List classBeanList, IWriteFileService writeFileService,String dddTag){ for (ClassBean classBean : classBeanList){ Map varMap = new HashMap<>(); @@ -309,7 +521,13 @@ public class WriteDynamicDDDModuleService { varMap.put("methods",classBean.getMethodBeanList()); varMap.put("imports",classBean.getImportClassList()); //使用BO的模板 - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + String boContent; + if(StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), varMap); + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.BUSINESS_OBJECT_DDD.getTempFileName(), varMap); + } + WriteContentBean writeContentBean = WriteContentBean.builder() .content(boContent) .templateName(TemplateFileEnum.CMD.getTempFileName()) @@ -325,7 +543,7 @@ public class WriteDynamicDDDModuleService { * @param classBeanList * @param writeFileService */ - private void writeAppExeImpl(List classBeanList, IWriteFileService writeFileService){ + public void writeAppExeImpl(List classBeanList, IWriteFileService writeFileService,String dddTag){ for (ClassBean classBean : classBeanList){ Map varMap = new HashMap<>(); @@ -334,9 +552,17 @@ public class WriteDynamicDDDModuleService { varMap.put("methods",classBean.getMethodBeanList()); varMap.put("imports",classBean.getImportClassList()); - String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.EXE_IMPL.getTempFileName(), varMap); - if(StringUtils.isEmpty(classBean.getRelationClassStr())){ - boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), varMap); + String boContent; + if(StringUtils.isNotEmpty(dddTag)){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.EXE_IMPL.getTempFileName(), varMap); + if(StringUtils.isEmpty(classBean.getRelationClassStr())){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), varMap); + } + }else { + boContent = freemarkerService.parseTpl(TemplateFileEnum.EXE_IMPL.getTempFileName(), varMap); + if(StringUtils.isEmpty(classBean.getRelationClassStr())){ + boContent = freemarkerService.parseTpl(TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), varMap); + } } WriteContentBean writeContentBean = WriteContentBean.builder() @@ -354,7 +580,7 @@ public class WriteDynamicDDDModuleService { * @param interfaceBeanList * @param writeFileService */ - private void writeAppExeInterface(List interfaceBeanList, IWriteFileService writeFileService){ + public void writeAppExeInterface(List interfaceBeanList, IWriteFileService writeFileService,String dddTag){ for (InterfaceBean interfaceBean : interfaceBeanList){ Map varMap = new HashMap<>(); varMap.put("class",interfaceBean); @@ -362,7 +588,13 @@ public class WriteDynamicDDDModuleService { varMap.put("imports",interfaceBean.getImportClassList()); //借用gataway的模板 - String interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + String interfaceContent; + if(StringUtils.isNotEmpty(dddTag)){ + interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + }else { + interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + } + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) .templateName(TemplateFileEnum.EXE.getTempFileName()) .humpClassName(interfaceBean.getClassName()) @@ -372,4 +604,76 @@ public class WriteDynamicDDDModuleService { } } + + + /** + * 写dtobo-convert 接口 + * @param interfaceBeanList + * @param writeFileService + */ + public void writeDtoBOConvert(List interfaceBeanList, IWriteFileService writeFileService){ + for (InterfaceBean interfaceBean : interfaceBeanList){ + Map varMap = new HashMap<>(); + varMap.put("class",interfaceBean); + varMap.put("methods",interfaceBean.getMethodBeanList()); + varMap.put("imports",interfaceBean.getImportClassList()); + + String interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.CONVERT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.CONVERT.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + + } + } + + /** + * 写vobo-convert 接口 + * @param interfaceBeanList + * @param writeFileService + */ + public void writeVoBOConvert(List interfaceBeanList, IWriteFileService writeFileService){ + for (InterfaceBean interfaceBean : interfaceBeanList){ + Map varMap = new HashMap<>(); + varMap.put("class",interfaceBean); + varMap.put("methods",interfaceBean.getMethodBeanList()); + varMap.put("imports",interfaceBean.getImportClassList()); + + String interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.CONVERT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.CONVERT.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + + } + } + + + /** + * 写dobo-convert 接口 + * @param interfaceBeanList + * @param writeFileService + */ + public void writeDoBOConvert(List interfaceBeanList, IWriteFileService writeFileService){ + for (InterfaceBean interfaceBean : interfaceBeanList){ + Map varMap = new HashMap<>(); + varMap.put("class",interfaceBean); + varMap.put("methods",interfaceBean.getMethodBeanList()); + varMap.put("imports",interfaceBean.getImportClassList()); + + String interfaceContent = freemarkerService.parseTpl(TemplateFileEnum.CONVERT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.CONVERT.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + + } + } + } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteFileService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteFileService.java index 593c478781d8e73b5ff42f79a675f28680177b27..d63b81786990bf1c8cc61b1fff62bbda75d87048 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteFileService.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteFileService.java @@ -1,8 +1,7 @@ package com.coderman.codemaker.service; -import com.coderman.codemaker.config.ProjectTemplateConfig; -import com.coderman.codemaker.dbergenerate.bean.ColumnBean; -import com.coderman.codemaker.dbergenerate.bean.TableBean; +import com.coderman.codemaker.config.AppServiceConfig; +import com.coderman.codemaker.config.ProjectTemplateSpringbootConfig; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.utils.Constant; import com.coderman.codemaker.utils.FreemarkerUtils; @@ -26,15 +25,15 @@ import java.util.Map; * 因此需要重构,整体api不变,新服务类参考WriteAppModuleService */ @Service -@Deprecated public class WriteFileService { @Autowired - private ProjectTemplateConfig projectTemplateConfig; + private ProjectTemplateSpringbootConfig projectTemplateConfig; @Autowired private DBErPictureService erPictureService; - + @Autowired + private AppServiceConfig appServiceConfig; /** * 写mapper xml文件 @@ -59,7 +58,7 @@ public class WriteFileService { * @param humpClassName */ public void writeEntity(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/entity"; String fileName = humpClassName + "Entity.java"; @@ -79,7 +78,7 @@ public class WriteFileService { * @param humpClassName */ public void writeVO(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/vo"; String fileName = humpClassName + "VO.java"; @@ -99,7 +98,7 @@ public class WriteFileService { * @param humpClassName */ public void writeMapper(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/mapper"; String fileName = humpClassName + "Mapper.java"; @@ -118,7 +117,7 @@ public class WriteFileService { * @param humpClassName */ public void writeService(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/service"; String fileName = humpClassName + "Service.java"; @@ -137,7 +136,7 @@ public class WriteFileService { * @param humpClassName */ public void writeServiceImpl(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/service/impl"; String fileName = humpClassName + "ServiceImpl.java"; @@ -156,7 +155,7 @@ public class WriteFileService { * @param content */ public void writeBaseController(String content) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/controller"; String fileName = "BaseController.java"; @@ -174,7 +173,7 @@ public class WriteFileService { * @param content */ public void writeSpringApplicationContext(String content) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/utils"; String fileName = "SpringApplicationContext.java"; @@ -193,7 +192,7 @@ public class WriteFileService { * @param content */ public void writeTest(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.TEST_JAVA + "/" + packagePath + "/service/test"; String fileName = humpClassName + "ServiceTest.java"; @@ -211,7 +210,7 @@ public class WriteFileService { * @param content */ public void writeApplication(String content) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + ""; String fileName = "Application.java"; @@ -231,7 +230,7 @@ public class WriteFileService { * @param humpClassName */ public void writeController(String content, String humpClassName) { - String packageName = projectTemplateConfig.getPackageName(); + String packageName = appServiceConfig.getPackage(); String packagePath = packageName.replace(".", "\\"); String filePath = Constant.JAVA + "/" + packagePath + "/controller"; String fileName = humpClassName + "Controller.java"; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/DynamicDDDVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/DynamicDDDVarRegistry.java index 3c63b322f934070218da41e7333541bc9531e316..bf77dc589d3f6f2a44462fe5d880ec3927c920d2 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/DynamicDDDVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/DynamicDDDVarRegistry.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.coderman.codemaker.app.dynamicddd.DomainElementHandler; import com.coderman.codemaker.bean.dddelement.*; import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig; import com.coderman.codemaker.service.AbstractVarRegistry; import com.coderman.codemaker.service.ReadPlantUMLFileServiceV2; import org.springframework.beans.factory.annotation.Autowired; @@ -57,9 +58,12 @@ public class DynamicDDDVarRegistry extends AbstractVarRegistry { @Resource(name = "appExeElementHandler") private DomainElementHandler appExeElementHandler; + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + @Override public Map getRegistVarMap() { - PlantUmlContextBean plantUmlContextBean = readFileService.getPlantUmlContextBean(); + PlantUmlContextBean plantUmlContextBean = readFileService.getPlantUmlContextBean(projectTemplateDynamicDDDConfig.getPlantumlFileName()); System.out.println(JSON.toJSONString(plantUmlContextBean)); DomainBoElementBean domainBoElementBean = (DomainBoElementBean)domainElementHandler.getElementBeanList(plantUmlContextBean); ValueObjectElementBean valueObjectElementBean = (ValueObjectElementBean)valueObjectElementHandler.getElementBeanList(plantUmlContextBean); @@ -86,6 +90,9 @@ public class DynamicDDDVarRegistry extends AbstractVarRegistry { map.put("exeClass",executorElementBean.getClassBeanList()); map.put("exeInterface",executorElementBean.getInterfaceBeanList()); + //由领域实体派生的类dto + //map.put("domainbo_dto",domainBoElementBean.getDerivedElementBean().getClassBeanList()); + return map; } } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java index 58660ac409b126df243c3d2e605a09aacbf30277..0f94b8cf0bbb9d01df9945a5c6da4467c0d9843f 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java @@ -23,6 +23,8 @@ public class EntityVarRegistry extends AbstractVarRegistry { @Autowired private TemlateVarService temlateVarService; + + @Override public Map getRegistVarMap() { Map tableBeanMap = temlateVarService.getTableBeanMap(); diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/SpringApplicationContextVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/SpringApplicationContextVarRegistry.java similarity index 75% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/SpringApplicationContextVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/SpringApplicationContextVarRegistry.java index e696ae44cdf3084ec1f13787ff700adfa138b5c7..5423306745bf4a3ad7fe6d9f1de6b89dd1aa7787 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/SpringApplicationContextVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/SpringApplicationContextVarRegistry.java @@ -1,4 +1,6 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; + +import com.coderman.codemaker.service.AbstractVarRegistry; import java.util.Map; diff --git a/codemaker-core/src/main/resources/application.properties b/codemaker-core/src/main/resources/application.properties index d9df9e3085c7f84407b8a0d05f5a440b20d1d0fc..e5d53fdf12f62d2612aeeeb9e1b7b9df059d7220 100644 --- a/codemaker-core/src/main/resources/application.properties +++ b/codemaker-core/src/main/resources/application.properties @@ -22,7 +22,7 @@ server.port=8099 #数据库配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/snail_app_user_crm?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC +spring.datasource.url=jdbc:mysql://localhost:3306/school_manager?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root @@ -33,4 +33,8 @@ mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.coderman.codemaker.bean spring.application.name=codemaker #生成的应用类型,支持springboot,dubbo,cola -application.type=dubbo \ No newline at end of file +application.type=springboot +#目标应用根包名称 +application.global.package=com.snail.school.manager +#作者 +application.global.author=fanchunshuai \ No newline at end of file diff --git a/codemaker-core/src/main/resources/ddd-plantuml/CommonAuth.puml b/codemaker-core/src/main/resources/ddd-plantuml/CommonAuth.puml index ac34da578e30ccbc52a5e447132527c5c78bc0e1..d11afc4234b42e6134f27835dde1cd9ca807491b 100644 --- a/codemaker-core/src/main/resources/ddd-plantuml/CommonAuth.puml +++ b/codemaker-core/src/main/resources/ddd-plantuml/CommonAuth.puml @@ -44,9 +44,10 @@ package domain.bo { 变量值:String value } - AuthorityBO <|-- DataAuthorityBO - AdminAuthorityBO --|> AuthorityBO - SystemAuthorityBO --|> AuthorityBO + + AuthorityBO <|-- DataAuthorityBO + AdminAuthorityBO --|> AuthorityBO + SystemAuthorityBO --|> AuthorityBO } diff --git a/codemaker-core/src/main/resources/ddd-plantuml/SchoolManager.puml b/codemaker-core/src/main/resources/ddd-plantuml/SchoolManager.puml new file mode 100644 index 0000000000000000000000000000000000000000..337e9460053b9a7e9392dbe87ef44e39ee1ac20c --- /dev/null +++ b/codemaker-core/src/main/resources/ddd-plantuml/SchoolManager.puml @@ -0,0 +1,176 @@ +@startuml + + +package domain.bo { + + class "学生基本信息-StudentBO" as StudentBO{ + 学生姓名:String studentName + 学号:String studentNumber + 家庭地址:String address + 家人信息:StudentFamilyBO studentFamilyBO + .. extend info .. + tableKey:String student + facadeKey:String StudentFacade + controllerKey:String StudentController + dtoKeyList:String UpdateStudentRequestDTO,StudentResponseDTO + voKeyList:String StudentPageVO + 获取学生信息: ResultDataDto getByNumber(String number) + 分页获取学生信息/student/pagelist: ResultDataDto getPageList() + } + + class "学生报名信息-StudentSignUpRecordBO" as StudentSignUpRecordBO{ + 学生基本信息:StudentBO studentBO + 家人信息:StudentFamilyBO studentFamilyBO + 报名时间:Date signUpDate + 入学年级:String grant + .. extend info .. + dtoKeyList:String StudentSignUpResponseDTO,StudentSignUpRequestDTO + facadeKey:String StudentFacade + controllerKey:String StudentController + voKeyList:String StudentSignUpRecordVO,StudentSignUpRecordDetailVO + 录入报名表信息:ResultDto createStudentSignUpRecord(StudentSignUpRequestDTO studentSignUpRequestDTO) + 查询报名表信息:ResultDataDto createStudentSignUpRecord(String chineseName,String parentPhone) + 分页获取学生报名信息/student/signup/pagelist: ResultDataDto getSignUpPageList() + 获取学生报名详情/student/singup/detail: ResultDataDto getById(Long id) + + } + + class "班级信息-ClassBO" as ClassBO{ + 班级编号:int number + 班级所在年级:int grant + 班级人数:int count + 班主任信息:TeacherBO teacherBO + tableKey:String class + dtoKeyList:String ClassResponseDTO,CreateClassRequestDTO + facadeKey:String ClassFacade + 批量创建班级请求:ResultDto createBatchClassList(List list) + } + + class "学生家人联系信息-StudentFamilyBO" as RoleBO{ + 父亲姓名:String fatherName + 母亲姓名:String motherName + 父亲联系电话:String fatherPhone + 母亲联系电话:String motherPhone + + } + + class "教师信息-TeacherBO" as TeacherBO{ + 教师姓名:String teacherName + 教师学科:String tec + 代课列表:List classBOList + tableKey:String teacher + } + + class "班级人数配置-ClassCountConfig"{ + 年级:String grant + 班级数:int classCount + 班级最高人数:int maxStudentCount + } + +} + + +package domain.enums{ + + enum "课程枚举-CourseEnum" as CourseEnum{ + ENGLISH("english","英语"), + CHINESE("chinese","语文"), + MATH("math","数学"), + MUSIC("music","音乐"), + SPORTS("sports","体育"); + 课程标示:String code + 课程名称:String name + static CourseEnum getByCode(String code) + } +} + + + + +package domain.msgbody { + class "学生报名结果消息-StudentSiguUpResultMsgBody" as StudentSiguUpResultMsgBody{ + 学生学号:String code + 报名结果标示:String result + } +} + +package domain.gataway { + interface "学生仓库-StudentRepository" as StudentRepository{ + 保存报名记录:StudentSignUpRecordBO saveSignUp(StudentSignUpRecordBO studentSignInfo) + 完善学生信息:StudentBO completeStudent(StudentBO studentBO) + 获取学生信息:StudentBO getByCondition(String code,String chineseName) + } + interface "教师网关-TeacherGataway" as TeacherGataway{ + 注册教师: Long registTeacher(TeacherBO teacherBO) + 获取教师信息: TeacherBO getById(Long id) + } +} + + +package "领域工厂服务包-domain.factory" { + class "学生工厂服务-StudentFactory" as StudentFactory{ + 获取学生信息:StudentBO buildStudent(Long id) + 获取学生信息:List getByClassId(Long classId) + } + class "班级工厂服务-ClassFactory" as ClassFactory{ + 获取班级信息:ClassBO buildClass(Long id) + } +} + +package "防腐层包-infrast.acl" as infrast.acl { + interface "部门查询服务适配器-DepartmentServiceAdapter" as DepartmentServiceAdapter{ + 查询所有有效的部门: List queryAllDepartment(DepartmentQueryDTO queryDto) + 查询子部门: List queryDepartmentsList(Long pId) + } +} + + + +package app.command { + + class "抽象命令类-AbstractCmd" as AbstractCmd{ + +操作时间: Date operateTime + +操作人ID: Long userId + +命令类: Class commandClass + +命令数据: String payLoad; + + } + + class "学生报名命令-StudentSignUpCmd" as StudentSignUpCmd{ + 学生基本信息:StudentBO studentBO + 报名时间:Date signUpDate + 入学年级:String grant + } + + class "注册教师命令-RegistTeacherCmd" as RegistTeacherCmd{ + 教师姓名:String teacherName + } + + + StudentSignUpCmd --|> AbstractCmd + RegistTeacherCmd --|> AbstractCmd + +} + + +package app.exe { + + interface "命令执行接口-CmdExeService" as CmdExeService{ + 命令执行入口:String exe(AbstractCmd abstractCmd) + } + + class "学生报名cmd处理类-StudentSignUpExe" as StudentSignUpExe{ + + } + + class "教师注册cmd处理类-RegistTeacherCmdExe" as RegistTeacherCmdExe{ + + } + + + StudentSignUpExe ..|> CmdExeService + RegistTeacherCmdExe ..|> CmdExeService + +} + +@enduml \ No newline at end of file diff --git a/codemaker-core/src/main/resources/projecttemplate-cola.properties b/codemaker-core/src/main/resources/projecttemplate-cola.properties new file mode 100644 index 0000000000000000000000000000000000000000..07df1f0bf0acb1c35de661aae06f2556f4c6ccab --- /dev/null +++ b/codemaker-core/src/main/resources/projecttemplate-cola.properties @@ -0,0 +1,16 @@ + +#数据库名称 +cola.global.dbName=school_manager + +cola.global.applicationName=school-manager + +#目标工程输出目录,这里填写对应的工程的绝对路径 +cola.code.outpath.cola-adapter=/Users/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-adapter +cola.code.outpath.cola-infrast=/Users/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-infrast +cola.code.outpath.cola-app=/Users/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-app +cola.code.outpath.cola-domain=/Users/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-domain +cola.code.outpath.cola-client=/Users/scworkspace/sourceSpace/code-maker/codemaker-cola/cola-client + +#应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码 +cola.domain.plantuml=SchoolManager.puml + diff --git a/codemaker-core/src/main/resources/projecttemplate-dubbo.properties b/codemaker-core/src/main/resources/projecttemplate-dubbo.properties index 58be1d121125ce6aa3865e6ddfa1c2d89f4040c6..14e14b5de3821f05b5be1ab4030f2ff6143113d9 100644 --- a/codemaker-core/src/main/resources/projecttemplate-dubbo.properties +++ b/codemaker-core/src/main/resources/projecttemplate-dubbo.properties @@ -1,14 +1,11 @@ -#目标工程根包名称 -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 #目标工程输出目录,这里填写对应的工程的绝对路径 +dubbo.code.outpath.dubbo-common=/Users/scworkspace/sourceSpace/code-maker/codemaker-dubbo/dubbo-common +dubbo.code.outpath.dubbo-api=/Users/scworkspace/sourceSpace/code-maker/codemaker-dubbo/dubbo-api +dubbo.code.outpath.dubbo-core=/Users/scworkspace/sourceSpace/code-maker/codemaker-dubbo/dubbo-core + +#应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码 +dubbo.domain.plantuml=SchoolManager.puml \ No newline at end of file diff --git a/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties b/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties index 36c3645b086a077c080a183b11ab25c9a677417e..0b020088d1d25f42947fbbf79b2c966001beb87c 100644 --- a/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties +++ b/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties @@ -1,9 +1,4 @@ -#目标工程根包名称 -dynamicddd.global.package=com.lightsnail.snailapp.usercrm -#作者 -dynamicddd.global.author=fanchunshuai - #目标工程输出目录,这里填写对应的codemaker-dynamicddd工程的绝对路径 -dynamicddd.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dynamicddd +dynamicddd.code.outpath=/Users/scworkspace/sourceSpace/code-maker/codemaker-dynamicddd #领域plantUML 类图 -dynamicddd.domain.plantuml=CommonAuth.puml \ No newline at end of file +dynamicddd.domain.plantuml=SchoolManager.puml \ No newline at end of file diff --git a/codemaker-core/src/main/resources/projecttemplate-springboot.properties b/codemaker-core/src/main/resources/projecttemplate-springboot.properties index 2aa23d2f132c4eb63b69f59d49f6d41823989bf0..beee9cd6875fe35c13b584258902b2c35b9de613 100644 --- a/codemaker-core/src/main/resources/projecttemplate-springboot.properties +++ b/codemaker-core/src/main/resources/projecttemplate-springboot.properties @@ -1,7 +1,3 @@ -#目标工程根包名称 -codemaker.global.package=com.snail.school.manager -#作者 -codemaker.global.author=fanchunshuai #数据库名称 codemaker.global.dbName=school_manager #项目名称 @@ -11,4 +7,7 @@ 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 \ No newline at end of file +codemaker.code.outpath=/Users/scworkspace/sourceSpace/code-maker/codemaker-springboot + +#应用服务的plantUML类图文件,不配置则走基于数据表的方式生成代码 +codemaker.domain.plantuml=SchoolManager.puml \ No newline at end of file diff --git a/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/utils/SpringApplicationContext.java b/codemaker-core/src/main/resources/template/cola/SpringApplicationContext.ftl similarity index 96% rename from codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/utils/SpringApplicationContext.java rename to codemaker-core/src/main/resources/template/cola/SpringApplicationContext.ftl index c1c08f123007539630169be617d02fa4bad687cc..a6e7b6374ce46bd405e58bf3bd179e2feffe8b6b 100644 --- a/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/utils/SpringApplicationContext.java +++ b/codemaker-core/src/main/resources/template/cola/SpringApplicationContext.ftl @@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ - package com.lightsnail.schoolmanager.context; + package ${package}.utils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; diff --git a/codemaker-core/src/main/resources/template/cola/abstractexe.ftl b/codemaker-core/src/main/resources/template/cola/abstractexe.ftl new file mode 100644 index 0000000000000000000000000000000000000000..32d6d57cb6824b6e6c78eb7f8005e4cb0c33be41 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/abstractexe.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + + /** + * @Description:${class.className}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public abstract class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + public abstract ${method.returnClass} ${method.methodName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/acl.ftl b/codemaker-core/src/main/resources/template/cola/acl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/acl.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** + * @Description:${class.classDesc}接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${class.className}{ + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/controller/BaseController.java b/codemaker-core/src/main/resources/template/cola/baseController.ftl similarity index 90% rename from codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/controller/BaseController.java rename to codemaker-core/src/main/resources/template/cola/baseController.ftl index aae74dff17dcb0d677efcb4400dfa4cdb6dabb65..9aeaf34f9473743def40c5f43d47157f84466aa1 100644 --- a/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/controller/BaseController.java +++ b/codemaker-core/src/main/resources/template/cola/baseController.ftl @@ -1,12 +1,12 @@ -package com.lightsnail.schoolmanager.controller; +package ${package}.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @Description:控制层基础父类 -* @Author:fanchunshuai -* @CreateTime:2021-06-25 16:08:54 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} * @version v1.0 */ public class BaseController{ diff --git a/codemaker-core/src/main/resources/template/cola/bo.ftl b/codemaker-core/src/main/resources/template/cola/bo.ftl new file mode 100644 index 0000000000000000000000000000000000000000..79fea9d311357de16ed8e3d6fc0dbc83dbc3c445 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/bo.ftl @@ -0,0 +1,24 @@ +package ${package}.model.bo; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${table.tableComment}BO类 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${table.humpClassName}BO{ + + <#list columns as column> + + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dynamicddd/bo.ftl b/codemaker-core/src/main/resources/template/cola/boddd.ftl similarity index 100% rename from codemaker-core/src/main/resources/template/dynamicddd/bo.ftl rename to codemaker-core/src/main/resources/template/cola/boddd.ftl diff --git a/codemaker-core/src/main/resources/template/cola/controller.ftl b/codemaker-core/src/main/resources/template/cola/controller.ftl new file mode 100644 index 0000000000000000000000000000000000000000..3c88f6d538a3d5c5784303201653be94a35443b2 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/controller.ftl @@ -0,0 +1,103 @@ +package ${package}.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ${package}.service.${table.humpClassName}Service; +import ${package}.vo.${table.humpClassName}VO; + +import com.coderman.utils.response.ResultDataDto; +import com.coderman.utils.response.ResultDto; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +/** +* @Description:${table.tableComment}控制层 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@RestController +public class ${table.humpClassName}Controller extends BaseController{ + + protected Logger logger = LoggerFactory.getLogger(${table.humpClassName}Controller.class); + + @Autowired + private ${table.humpClassName}Service ${table.humpTableName}Service; + + + /** + * @Description:新增${table.tableComment} + * @version v1.0 + * @param ${table.humpTableName}VO + * @return ResultDto + */ + @RequestMapping(value = "/${table.humpTableName}/add",method = RequestMethod.POST) + public ResultDto add(@RequestBody ${table.humpClassName}VO ${table.humpTableName}VO){ + //todo impl code + return new ResultDto(); + } + + /** + * @Description:修改${table.tableComment} + * @version v1.0 + * @param ${table.humpTableName}VO + * @return ResultDto + */ + @RequestMapping(value = "/${table.humpTableName}/update",method = RequestMethod.POST) + public ResultDto update(@RequestBody ${table.humpClassName}VO ${table.humpTableName}VO){ + //todo impl code + return new ResultDto(); + } + + /** + * @Description:根据id删除${table.tableComment} + * @version v1.0 + * @param id + * @return ResultDto + */ + @PostMapping("/${table.humpTableName}/delete") + public ResultDto delete(@RequestParam(name = "id") Long id){ + //todo impl code + return new ResultDto(); + } + + /** + * @Description:根据ID获取${table.tableComment}单条记录 + * @version v1.0 + * @param id + * @return ResultDataDto + */ + @GetMapping("/${table.humpTableName}/get") + public ResultDataDto getById(@RequestParam(name = "id") Long id){ + //todo impl code + return new ResultDataDto(); + } + + /** + * @Description:分页获取${table.tableComment}记录 + * @version v1.0 + * @return ResultDataDto + */ + @GetMapping("/${table.humpTableName}/getpage") + public ResultDataDto getPage(){ + //todo impl code + return new ResultDataDto(); + } + + /** + * @Description:修改${table.tableComment}状态 + * @version v1.0 + * @param id + * @param status + * @return ResultDataDto + */ + @PostMapping("/${table.humpTableName}/changestatus") + public ResultDto changeStatus(@RequestParam(name = "id") Long id,@RequestParam(name = "status") int status){ + //todo impl code + return new ResultDto(); + } + +} diff --git a/codemaker-core/src/main/resources/template/cola/controllerddd.ftl b/codemaker-core/src/main/resources/template/cola/controllerddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..db0d725575c53aeba8af5a117b4d18c5ff3ff2ea --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/controllerddd.ftl @@ -0,0 +1,35 @@ +package ${class.packageName}; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +<#list imports as importClass> +import ${importClass}; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +/** +* @Description:${table.tableComment}控制层 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@RestController +public class ${class.className} { + + protected Logger logger = LoggerFactory.getLogger(${class.className}.class); + +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + @RequestMapping(value = "${method.pathValue}") + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + +} diff --git a/codemaker-core/src/main/resources/template/cola/convert.ftl b/codemaker-core/src/main/resources/template/cola/convert.ftl new file mode 100644 index 0000000000000000000000000000000000000000..6fe60c1bbf6b49ed0ddcb1193761b8093091fa98 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/convert.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +/** +* @Description:${class.classDesc}接口 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Mapper +public interface ${class.className}{ + ${class.className} INSTANCE = Mappers.getMapper(${class.className}.class); + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/do.ftl b/codemaker-core/src/main/resources/template/cola/do.ftl new file mode 100644 index 0000000000000000000000000000000000000000..0416b5c5eca04c2cb11b535bffc2265678604b46 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/do.ftl @@ -0,0 +1,24 @@ +package ${package}.dao.dataobject; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${table.tableComment}DO类 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${table.humpClassName}DO{ + + <#list columns as column> + + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/dto.ftl b/codemaker-core/src/main/resources/template/cola/dto.ftl new file mode 100644 index 0000000000000000000000000000000000000000..12465ba0cc11a90cdf0a02265ce52772ceeab0ac --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/dto.ftl @@ -0,0 +1,25 @@ +package ${package}.api.dto; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; +import java.io.Serializable; + + +/** +* @Description:${table.tableComment}DTO类 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Data +@ToString +public class ${table.humpClassName}DTO implements Serializable { + +<#list columns as column> + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/dtoddd.ftl b/codemaker-core/src/main/resources/template/cola/dtoddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..d6243cb09279ec491a39bf98497e22aeef0b75b9 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/dtoddd.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + +/** +* @Description:${class.classDesc}类 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + +<#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/enum.ftl b/codemaker-core/src/main/resources/template/cola/enum.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a1b21d01802da8506845b0b35620698a22403f49 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/enum.ftl @@ -0,0 +1,47 @@ +package ${class.packageName}; + +import lombok.Getter; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Getter +public enum ${class.className}{ + + /** + * + */ + <#list enums as enumValue> + ${enumValue}, + + ; + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + + ${class.className}(${class.constructParamStr}){ + <#list bodys as body> + ${body}; + + } + + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + public static ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/exeimpl.ftl b/codemaker-core/src/main/resources/template/cola/exeimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a2b72408df811370c892a9c7b85f6f5b14597713 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/exeimpl.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ${class.packageName}.${class.className}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className} ${class.relationClassStr}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + <#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/ClassTeacherFacade.java b/codemaker-core/src/main/resources/template/cola/facade.ftl similarity index 52% rename from codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/ClassTeacherFacade.java rename to codemaker-core/src/main/resources/template/cola/facade.ftl index 71cd9286db8ed21eabee7fbc0ae2afd21663875f..f0fc9ca6835045c4f8a9ecb41b2f2a7d846ea3dc 100644 --- a/codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/ClassTeacherFacade.java +++ b/codemaker-core/src/main/resources/template/cola/facade.ftl @@ -1,18 +1,18 @@ -package com.lightsnail.schoolmanager.api.facade; +package ${package}.api.facade; import java.util.List; import com.coderman.utils.response.ResultDataDto; import com.coderman.utils.response.ResultDto; -import com.lightsnail.schoolmanager.api.dto.ClassTeacherDTO; +import ${package}.api.dto.${table.humpClassName}DTO; /** - * @Description:Facade接口 - * @Author:fanchunshuai - * @CreateTime:2021-06-25 16:19:51 + * @Description:${table.tableComment}Facade接口 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} * @version v1.0 */ -public interface ClassTeacherFacade{ +public interface ${table.humpClassName}Facade{ /** * @@ -24,7 +24,7 @@ public interface ClassTeacherFacade{ * @return ResultDto 返回类型 * @throws */ - public ResultDto save(ClassTeacherDTO dto) throws Exception; + public ResultDto save(${table.humpClassName}DTO dto) throws Exception; /** * @@ -43,30 +43,30 @@ public interface ClassTeacherFacade{ * @Description: 通过id查询 * @author: * @param @param id - * @return ResultDataDto + * @return ResultDataDto<${table.humpClassName}DTO> * @throws */ - public ResultDataDto getById(Long id) throws Exception; + public ResultDataDto<${table.humpClassName}DTO> getById(Long id) throws Exception; /** * * @Title: getAll * @Description:查询所有数据 * @author: - * @return ResultDataDto> + * @return ResultDataDto> * @throws */ - public ResultDataDto> getAll() throws Exception; + public ResultDataDto> getAll() throws Exception; /** * * @Title: update * @Description:修改 * @author: - * @param @param classTeacherDTO + * @param @param ${table.humpTableName}DTO * @return int * @throws */ - public ResultDto update(ClassTeacherDTO classTeacherDTO) throws Exception; + public ResultDto update(${table.humpClassName}DTO ${table.humpTableName}DTO) throws Exception; } \ No newline at end of file diff --git a/codemaker-dubbo/dubbo-core/src/main/java/com/lightsnail/schoolmanager/core/aop/FacadeServiceAop.java b/codemaker-core/src/main/resources/template/cola/facadeaop.ftl similarity index 89% rename from codemaker-dubbo/dubbo-core/src/main/java/com/lightsnail/schoolmanager/core/aop/FacadeServiceAop.java rename to codemaker-core/src/main/resources/template/cola/facadeaop.ftl index 79e09321d316c10172c799ee573ac692f3e938e7..a55098013dd51cd0d11ff8e072098510dd117193 100644 --- a/codemaker-dubbo/dubbo-core/src/main/java/com/lightsnail/schoolmanager/core/aop/FacadeServiceAop.java +++ b/codemaker-core/src/main/resources/template/cola/facadeaop.ftl @@ -1,4 +1,4 @@ -package com.lightsnail.schoolmanager.core.aop; +package ${package}.core.aop; import com.alibaba.fastjson.JSON; @@ -21,7 +21,7 @@ import java.lang.reflect.Method; @Aspect @Slf4j public class FacadeServiceAop { - @Around(value = "execution( public * com.lightsnail.schoolmanager.core.facade.impl..*(..))") + @Around(value = "execution( public * ${package}.core.facade.impl..*(..))") public Object transferException(ProceedingJoinPoint joinPoint) throws Exception { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); diff --git a/codemaker-core/src/main/resources/template/cola/facadeddd.ftl b/codemaker-core/src/main/resources/template/cola/facadeddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a4e48b0a4eadebd7206c00f3656f894c87e1ec92 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/facadeddd.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** +* @Description:${class.classDesc}接口 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +public interface ${class.className}{ +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/facadeimpl.ftl b/codemaker-core/src/main/resources/template/cola/facadeimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a47d1cc4d969f8b6b58f100ac79b1fd15f887791 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/facadeimpl.ftl @@ -0,0 +1,64 @@ +package ${package}.app.facade.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.dubbo.config.annotation.Service; + +import com.coderman.utils.response.ResultDataDto; +import com.coderman.utils.response.ResultDto; + +import ${package}.api.facade.${table.humpClassName}Facade; +import ${package}.api.dto.${table.humpClassName}DTO; + +import java.util.List; + +/** + * @Description:${table.tableComment}Facade接口实现类 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${table.humpClassName}FacadeImpl implements ${table.humpClassName}Facade{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + + @Override + public ResultDto save(${table.humpClassName}DTO dto) { + ResultDto resultDto = new ResultDto(); + //todo impl code + return resultDto; + } + + @Override + public ResultDto delete(Long id) { + ResultDto resultDto = new ResultDto(); + logger.info("${table.humpTableName}Service.delete,id="+id); + //todo impl code + return resultDto; + } + + @Override + public ResultDataDto<${table.humpClassName}DTO> getById(Long id) { + ResultDataDto<${table.humpClassName}DTO> resultDataDto = new ResultDataDto<${table.humpClassName}DTO>(); + logger.info("${table.humpTableName}Service.getById,id="+id); + //todo impl code + return resultDataDto; + } + + @Override + public ResultDataDto> getAll() { + ResultDataDto> resultDataDto = new ResultDataDto>(); + //todo impl code + return resultDataDto; + } + + @Override + public ResultDto update(${table.humpClassName}DTO dto) { + ResultDto resultDto = new ResultDto(); + //todo impl code + return resultDto; + } + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/facadeimplddd.ftl b/codemaker-core/src/main/resources/template/cola/facadeimplddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ee6c539337af7372dafb56b9c2beab99e37f2620 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/facadeimplddd.ftl @@ -0,0 +1,27 @@ +package ${class.packageName}; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.dubbo.config.annotation.Service; +<#list imports as importClass> +import ${importClass}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className} ${class.relationClassStr}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); +<#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/factory.ftl b/codemaker-core/src/main/resources/template/cola/factory.ftl new file mode 100644 index 0000000000000000000000000000000000000000..758b640f34c009f2f7a9a7659d06586a9d51db1a --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/factory.ftl @@ -0,0 +1,34 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.springframework.stereotype.Service; + + /** + * @Description:${class.className}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/gataway.ftl b/codemaker-core/src/main/resources/template/cola/gataway.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/gataway.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** + * @Description:${class.classDesc}接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${class.className}{ + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/gatawayimpl.ftl b/codemaker-core/src/main/resources/template/cola/gatawayimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ef69323a922b60a7ec953e7cbc952c773f6bb2b8 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/gatawayimpl.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}.impl; + +<#list imports as importClass> +import ${importClass}; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ${class.packageName}.${class.className}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className}Impl implements ${class.className}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + <#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/ClassFacade.java b/codemaker-core/src/main/resources/template/cola/mapper.ftl similarity index 34% rename from codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/ClassFacade.java rename to codemaker-core/src/main/resources/template/cola/mapper.ftl index 2ca4e8ec21bfaa597f12a7457768d9914dbd4849..04ec226e05c248985e4a0aaa0240205ed00d09a9 100644 --- a/codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/ClassFacade.java +++ b/codemaker-core/src/main/resources/template/cola/mapper.ftl @@ -1,30 +1,27 @@ -package com.lightsnail.schoolmanager.api.facade; +package ${package}.dao.mapper; import java.util.List; -import com.coderman.utils.response.ResultDataDto; -import com.coderman.utils.response.ResultDto; +import ${package}.dao.dataobject.${table.humpClassName}DO; -import com.lightsnail.schoolmanager.api.dto.ClassDTO; /** - * @Description:Facade接口 - * @Author:fanchunshuai - * @CreateTime:2021-06-25 16:19:52 + * @Description:${table.tableComment}mapperDAO接口 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} * @version v1.0 */ -public interface ClassFacade{ +public interface ${table.humpClassName}Mapper{ /** - * - * @Title: save - * @Description:新增 - * @author: - * @param @param dto - * @param @param userId - * @return ResultDto 返回类型 + * + * @Title: save + * @Description:新增或修改 + * @author: + * @param @param ${table.humpTableName}DO + * @return int * @throws */ - public ResultDto save(ClassDTO dto) throws Exception; + public int insert(${table.humpClassName}DO ${table.humpTableName}DO); /** * @@ -32,10 +29,10 @@ public interface ClassFacade{ * @Description: 通过id删除数据 * @author: * @param @param id - * @return ResultDto 返回类型 + * @return int * @throws */ - public ResultDto delete(Long id); + public int deleteById(Long id); /** * @@ -43,30 +40,30 @@ public interface ClassFacade{ * @Description: 通过id查询 * @author: * @param @param id - * @return ResultDataDto + * @return ResultDataDto<${table.humpClassName}DO> 返回类型 * @throws */ - public ResultDataDto getById(Long id) throws Exception; + public ${table.humpClassName}DO getById(Long id); /** * * @Title: getAll * @Description:查询所有数据 * @author: - * @return ResultDataDto> + * @return List<${table.humpClassName}DO 返回类型 * @throws */ - public ResultDataDto> getAll() throws Exception; + public List<${table.humpClassName}DO> getAll(); /** * * @Title: update - * @Description:修改 + * @Description:新增或修改 * @author: - * @param @param classDTO + * @param @param ${table.humpTableName}DO * @return int * @throws */ - public ResultDto update(ClassDTO classDTO) throws Exception; - + public int update(${table.humpClassName}DO ${table.humpTableName}DO); + } \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/mapperxml.ftl b/codemaker-core/src/main/resources/template/cola/mapperxml.ftl new file mode 100644 index 0000000000000000000000000000000000000000..b6f6b2b0962258059e3eb07cbd80390844334113 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/mapperxml.ftl @@ -0,0 +1,49 @@ + + + + + + + + + <#list columns as column> + + + + + + + + ${table.columnNameList} + + + + insert into ${table.tableName}( + ${table.insertColumnNames} + ) + values( + ${table.insertColumnNameList} + ) + + + + update ${table.tableName} + set + ${table.updateColumnNameList} + where id = <#noparse>#{id<#noparse>} + + + + + + + + delete from ${table.tableName} where id = <#noparse>#{id<#noparse>} + + + diff --git a/codemaker-core/src/main/resources/template/cola/msgbody.ftl b/codemaker-core/src/main/resources/template/cola/msgbody.ftl new file mode 100644 index 0000000000000000000000000000000000000000..9f15e120dfe9a271ea823b5e318410cbd3be5c44 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/msgbody.ftl @@ -0,0 +1,35 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/StudentFacade.java b/codemaker-core/src/main/resources/template/cola/service.ftl similarity index 46% rename from codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/StudentFacade.java rename to codemaker-core/src/main/resources/template/cola/service.ftl index 3e6737ef0264c22597e6a9f9bdee2cfc706bc8c5..3a7a47b74f1297e778c77bf59ac8ceb543bab1e1 100644 --- a/codemaker-dubbo/dubbo-api/src/main/java/com/lightsnail/schoolmanager/api/facade/StudentFacade.java +++ b/codemaker-core/src/main/resources/template/cola/service.ftl @@ -1,30 +1,28 @@ -package com.lightsnail.schoolmanager.api.facade; +package ${package}.service; import java.util.List; -import com.coderman.utils.response.ResultDataDto; -import com.coderman.utils.response.ResultDto; -import com.lightsnail.schoolmanager.api.dto.StudentDTO; +import ${package}.model.bo.${table.humpClassName}BO; /** - * @Description:Facade接口 - * @Author:fanchunshuai - * @CreateTime:2021-06-25 16:19:51 + * @Description:${table.tableComment}Service接口 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} * @version v1.0 */ -public interface StudentFacade{ +public interface ${table.humpClassName}Service{ /** * * @Title: save * @Description:新增 * @author: - * @param @param dto + * @param @param bo * @param @param userId * @return ResultDto 返回类型 * @throws */ - public ResultDto save(StudentDTO dto) throws Exception; + public ${table.humpClassName}BO save(${table.humpClassName}BO bo) throws Exception; /** * @@ -35,7 +33,7 @@ public interface StudentFacade{ * @return ResultDto 返回类型 * @throws */ - public ResultDto delete(Long id); + public boolean delete(Long id); /** * @@ -43,30 +41,30 @@ public interface StudentFacade{ * @Description: 通过id查询 * @author: * @param @param id - * @return ResultDataDto + * @return ResultDataDto<${table.humpClassName}BO> * @throws */ - public ResultDataDto getById(Long id) throws Exception; + public ${table.humpClassName}BO getById(Long id) throws Exception; /** * * @Title: getAll * @Description:查询所有数据 * @author: - * @return ResultDataDto> + * @return List<${table.humpClassName}BO> * @throws */ - public ResultDataDto> getAll() throws Exception; + public List<${table.humpClassName}BO> getAll() throws Exception; /** * * @Title: update * @Description:修改 * @author: - * @param @param studentDTO + * @param @param ${table.humpTableName}BO * @return int * @throws */ - public ResultDto update(StudentDTO studentDTO) throws Exception; + public boolean update(${table.humpClassName}BO ${table.humpTableName}BO) throws Exception; } \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/serviceImpl.ftl b/codemaker-core/src/main/resources/template/cola/serviceImpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..693538c9fe24edbcabbdb6506cd664330a4bcaa7 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/serviceImpl.ftl @@ -0,0 +1,53 @@ +package ${package}.service.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import ${package}.dao.mapper.${table.humpClassName}Mapper; +import ${package}.service.${table.humpClassName}Service; +import ${package}.model.bo.${table.humpClassName}BO; + +import java.util.List; + +/** + * @Description:${table.tableComment}Service接口实现类 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${table.humpClassName}ServiceImpl implements ${table.humpClassName}Service{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ${table.humpClassName}Mapper ${table.humpTableName}Mapper; + + @Override + public ${table.humpClassName}BO save(${table.humpClassName}BO bo) { + return null; + } + + @Override + public boolean delete(Long id) { + return false; + } + + @Override + public ${table.humpClassName}BO getById(Long id) { + return null; + } + + @Override + public List<${table.humpClassName}BO> getAll() { + return null; + } + + @Override + public boolean update(${table.humpClassName}BO bo) { + return false; + } + +} \ No newline at end of file diff --git a/codemaker-springboot/src/test/java/com/lightsnail/app/user/crm/core/service/test/AttractInvestmentServiceTest.java b/codemaker-core/src/main/resources/template/cola/test.ftl similarity index 50% rename from codemaker-springboot/src/test/java/com/lightsnail/app/user/crm/core/service/test/AttractInvestmentServiceTest.java rename to codemaker-core/src/main/resources/template/cola/test.ftl index d36d646090a1ffdb1531746aef0c2337caded111..bddd6827a33d6e58ca7d55206efe1c2510a4a550 100644 --- a/codemaker-springboot/src/test/java/com/lightsnail/app/user/crm/core/service/test/AttractInvestmentServiceTest.java +++ b/codemaker-core/src/main/resources/template/cola/test.ftl @@ -1,11 +1,11 @@ -package com.lightsnail.app.user.crm.core.service.test; +package ${package}.service.test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.lightsnail.app.user.crm.core.service.AttractInvestmentService; -import com.lightsnail.app.user.crm.core.vo.AttractInvestmentVO; -import com.lightsnail.app.user.crm.core.Application; +import ${package}.service.${table.humpClassName}Service; +import ${package}.vo.${table.humpClassName}VO; +import ${package}.Application; import com.coderman.utils.response.ResultDataDto; import com.coderman.utils.response.ResultDto; @@ -22,68 +22,68 @@ import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.test.context.junit4.SpringRunner; /** -* @Description:招商服务注册表单元测试 -* @Author:fanchunshuai -* @CreateTime:2020-11-17 00:02:53 +* @Description:${table.tableComment}单元测试 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} * @version v1.0 */ @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT,classes = {Application.class}) -public class AttractInvestmentServiceTest{ +public class ${table.humpClassName}ServiceTest{ - protected Logger logger = LoggerFactory.getLogger(AttractInvestmentServiceTest.class); + protected Logger logger = LoggerFactory.getLogger(${table.humpClassName}ServiceTest.class); @Autowired - private AttractInvestmentService attractInvestmentService; + private ${table.humpClassName}Service ${table.humpTableName}Service; @Autowired private TestRestTemplate restTemplate; /** - * @Description:测试新增招商服务注册表 接口 + * @Description:测试新增${table.tableComment} 接口 */ @Test public void testAdd(){ //todo test code - AttractInvestmentVO vo = new AttractInvestmentVO(); + ${table.humpClassName}VO vo = new ${table.humpClassName}VO(); - ResultDto resultDto = restTemplate.postForEntity("/attractInvestment/add",vo, ResultDto.class).getBody(); + ResultDto resultDto = restTemplate.postForEntity("/${table.humpTableName}/add",vo, ResultDto.class).getBody(); System.out.println(JSON.toJSONString(resultDto)); } /** - * @Description:测试修改招商服务注册表 + * @Description:测试修改${table.tableComment} */ @Test public void testUpdate(){ //todo test code - AttractInvestmentVO vo = new AttractInvestmentVO(); - ResultDto resultDto = restTemplate.postForEntity("/attractInvestment/update",vo, ResultDto.class).getBody(); + ${table.humpClassName}VO vo = new ${table.humpClassName}VO(); + ResultDto resultDto = restTemplate.postForEntity("/${table.humpTableName}/update",vo, ResultDto.class).getBody(); System.out.println(JSON.toJSONString(resultDto)); } /** - * @Description:测试删除根据id删除招商服务注册表 + * @Description:测试删除根据id删除${table.tableComment} */ @Test public void testDelete(){ //todo test code long id = 1L; - ResultDto resultDto = restTemplate.postForEntity("/attractInvestment/delete",id, ResultDto.class).getBody(); + ResultDto resultDto = restTemplate.postForEntity("/${table.humpTableName}/delete",id, ResultDto.class).getBody(); System.out.println(JSON.toJSONString(resultDto)); } /** - * @Description:但是根据ID获取招商服务注册表单条记录 + * @Description:但是根据ID获取${table.tableComment}单条记录 */ @Test public void testGetById(){ //todo test code - ResultDataDto resultDataDto = restTemplate.getForEntity("/attractInvestment/get?id=1",ResultDataDto.class).getBody(); + ResultDataDto resultDataDto = restTemplate.getForEntity("/${table.humpTableName}/get?id=1",ResultDataDto.class).getBody(); System.out.println(JSON.toJSONString(resultDataDto)); } /** - * @Description:测试分页获取招商服务注册表记录 + * @Description:测试分页获取${table.tableComment}记录 */ @Test public void getPage(){ @@ -91,14 +91,14 @@ public class AttractInvestmentServiceTest{ } /** - * @Description:测试禁用招商服务注册表状态 + * @Description:测试禁用${table.tableComment}状态 */ @Test public void testDisable(){ //todo test code } /** - * @Description:测试启用招商服务注册表状态 + * @Description:测试启用${table.tableComment}状态 */ @Test public void testEnable(){ diff --git a/codemaker-core/src/main/resources/template/cola/valueobject.ftl b/codemaker-core/src/main/resources/template/cola/valueobject.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/valueobject.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/vo.ftl b/codemaker-core/src/main/resources/template/cola/vo.ftl new file mode 100644 index 0000000000000000000000000000000000000000..8113fd2240a602e78a54895474b39b7c1e56d0e4 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/vo.ftl @@ -0,0 +1,33 @@ +package ${package}.vo; + +import java.util.Date; +import java.math.BigDecimal; + +/** +* @Description:${table.tableComment}VO类 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +public class ${table.humpClassName}VO{ + +<#list columns as column> + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +<#list columns as column> + /** + * 描述:${column.columnComment} + */ + public ${column.columnTypeName} get${column.columnUperName}() { + return ${column.columnFieldName}; + } + /** + * 描述:${column.columnComment} + */ + public void set${column.columnUperName}(${column.columnTypeName} ${column.columnFieldName}) { + this.${column.columnFieldName} = ${column.columnFieldName}; + } + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/cola/voddd.ftl b/codemaker-core/src/main/resources/template/cola/voddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/cola/voddd.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/abstractexe.ftl b/codemaker-core/src/main/resources/template/dubbo/abstractexe.ftl new file mode 100644 index 0000000000000000000000000000000000000000..32d6d57cb6824b6e6c78eb7f8005e4cb0c33be41 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/abstractexe.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + + /** + * @Description:${class.className}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public abstract class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + public abstract ${method.returnClass} ${method.methodName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/acl.ftl b/codemaker-core/src/main/resources/template/dubbo/acl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/acl.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** + * @Description:${class.classDesc}接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${class.className}{ + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/boddd.ftl b/codemaker-core/src/main/resources/template/dubbo/boddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..1a43acac8202e47b8613705d0592615b6c3f14fd --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/boddd.ftl @@ -0,0 +1,39 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + + /** + * ${field.desc} + */ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/convert.ftl b/codemaker-core/src/main/resources/template/dubbo/convert.ftl new file mode 100644 index 0000000000000000000000000000000000000000..6fe60c1bbf6b49ed0ddcb1193761b8093091fa98 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/convert.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +/** +* @Description:${class.classDesc}接口 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Mapper +public interface ${class.className}{ + ${class.className} INSTANCE = Mappers.getMapper(${class.className}.class); + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/do.ftl b/codemaker-core/src/main/resources/template/dubbo/do.ftl index e797ebd2bfa11fb93a3fd09a624b8e6c916b09b3..0416b5c5eca04c2cb11b535bffc2265678604b46 100644 --- a/codemaker-core/src/main/resources/template/dubbo/do.ftl +++ b/codemaker-core/src/main/resources/template/dubbo/do.ftl @@ -1,4 +1,4 @@ -package ${package}.common.dataobject; +package ${package}.dao.dataobject; import java.util.Date; import java.math.BigDecimal; diff --git a/codemaker-core/src/main/resources/template/dubbo/dtoddd.ftl b/codemaker-core/src/main/resources/template/dubbo/dtoddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5ed97d6b99ce06945139fc22114d5823c19b840f --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/dtoddd.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> + import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + +/** +* @Description:${class.classDesc}类 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + +<#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/enum.ftl b/codemaker-core/src/main/resources/template/dubbo/enum.ftl new file mode 100644 index 0000000000000000000000000000000000000000..27c66dd0e0190604a3c1c039819a08895cb3449c --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/enum.ftl @@ -0,0 +1,47 @@ +package ${class.packageName}; + +import lombok.Getter; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Getter +public enum ${class.className}{ + + /** + * + */ + <#list enums as enumValue> + ${enumValue}, + + ; + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + + ${class.className}(${class.constructParamStr}){ + <#list bodys as body> + ${body}; + + } + + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + public static ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/exeimpl.ftl b/codemaker-core/src/main/resources/template/dubbo/exeimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a2b72408df811370c892a9c7b85f6f5b14597713 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/exeimpl.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ${class.packageName}.${class.className}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className} ${class.relationClassStr}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + <#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/facadeddd.ftl b/codemaker-core/src/main/resources/template/dubbo/facadeddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a4e48b0a4eadebd7206c00f3656f894c87e1ec92 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/facadeddd.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** +* @Description:${class.classDesc}接口 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +public interface ${class.className}{ +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/facadeimplddd.ftl b/codemaker-core/src/main/resources/template/dubbo/facadeimplddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ee6c539337af7372dafb56b9c2beab99e37f2620 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/facadeimplddd.ftl @@ -0,0 +1,27 @@ +package ${class.packageName}; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.dubbo.config.annotation.Service; +<#list imports as importClass> +import ${importClass}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className} ${class.relationClassStr}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); +<#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/factory.ftl b/codemaker-core/src/main/resources/template/dubbo/factory.ftl new file mode 100644 index 0000000000000000000000000000000000000000..758b640f34c009f2f7a9a7659d06586a9d51db1a --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/factory.ftl @@ -0,0 +1,34 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.springframework.stereotype.Service; + + /** + * @Description:${class.className}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/gataway.ftl b/codemaker-core/src/main/resources/template/dubbo/gataway.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/gataway.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** + * @Description:${class.classDesc}接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${class.className}{ + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/gatawayimpl.ftl b/codemaker-core/src/main/resources/template/dubbo/gatawayimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ef69323a922b60a7ec953e7cbc952c773f6bb2b8 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/gatawayimpl.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}.impl; + +<#list imports as importClass> +import ${importClass}; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ${class.packageName}.${class.className}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className}Impl implements ${class.className}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + <#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/mapper.ftl b/codemaker-core/src/main/resources/template/dubbo/mapper.ftl index b621162fe1623f9065b9e13e988b067264a752ec..04ec226e05c248985e4a0aaa0240205ed00d09a9 100644 --- a/codemaker-core/src/main/resources/template/dubbo/mapper.ftl +++ b/codemaker-core/src/main/resources/template/dubbo/mapper.ftl @@ -1,7 +1,7 @@ -package ${package}.common.mapper; +package ${package}.dao.mapper; import java.util.List; -import ${package}.common.dataobject.${table.humpClassName}DO; +import ${package}.dao.dataobject.${table.humpClassName}DO; /** diff --git a/codemaker-core/src/main/resources/template/dubbo/mapperxml.ftl b/codemaker-core/src/main/resources/template/dubbo/mapperxml.ftl index 151108c8842fb33b937b7d5720404500a7e79eee..b6f6b2b0962258059e3eb07cbd80390844334113 100644 --- a/codemaker-core/src/main/resources/template/dubbo/mapperxml.ftl +++ b/codemaker-core/src/main/resources/template/dubbo/mapperxml.ftl @@ -1,11 +1,11 @@ - + - + <#list columns as column> @@ -17,7 +17,7 @@ ${table.columnNameList} - + insert into ${table.tableName}( ${table.insertColumnNames} ) @@ -26,19 +26,19 @@ ) - + update ${table.tableName} set ${table.updateColumnNameList} where id = <#noparse>#{id<#noparse>} - select from ${table.tableName} - select from ${table.tableName} where id = <#noparse>#{id<#noparse>} diff --git a/codemaker-core/src/main/resources/template/dubbo/msgbody.ftl b/codemaker-core/src/main/resources/template/dubbo/msgbody.ftl new file mode 100644 index 0000000000000000000000000000000000000000..e6c85cb66d03e7f57dcafa118bdfe67d37ec6491 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/msgbody.ftl @@ -0,0 +1,33 @@ +package ${class.packageName}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/serviceImpl.ftl b/codemaker-core/src/main/resources/template/dubbo/serviceImpl.ftl index d90385cf0994b1c8d11367e2904a0a476aaf5e6e..bf40150aa498a39fbaa978f7a6a05e438c7f6407 100644 --- a/codemaker-core/src/main/resources/template/dubbo/serviceImpl.ftl +++ b/codemaker-core/src/main/resources/template/dubbo/serviceImpl.ftl @@ -4,7 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import ${package}.common.mapper.${table.humpClassName}Mapper; +import ${package}.dao.mapper.${table.humpClassName}Mapper; import ${package}.core.service.${table.humpClassName}Service; import ${package}.core.model.bo.${table.humpClassName}BO; diff --git a/codemaker-core/src/main/resources/template/dubbo/valueobject.ftl b/codemaker-core/src/main/resources/template/dubbo/valueobject.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dubbo/valueobject.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dynamicddd/boddd.ftl b/codemaker-core/src/main/resources/template/dynamicddd/boddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/boddd.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dynamicddd/dtoddd.ftl b/codemaker-core/src/main/resources/template/dynamicddd/dtoddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..12465ba0cc11a90cdf0a02265ce52772ceeab0ac --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/dtoddd.ftl @@ -0,0 +1,25 @@ +package ${package}.api.dto; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; +import java.io.Serializable; + + +/** +* @Description:${table.tableComment}DTO类 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Data +@ToString +public class ${table.humpClassName}DTO implements Serializable { + +<#list columns as column> + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dynamicddd/enum.ftl b/codemaker-core/src/main/resources/template/dynamicddd/enum.ftl index 7b24bb766f59dea1ee7b1d8c16c77e5da2656639..a1b21d01802da8506845b0b35620698a22403f49 100644 --- a/codemaker-core/src/main/resources/template/dynamicddd/enum.ftl +++ b/codemaker-core/src/main/resources/template/dynamicddd/enum.ftl @@ -39,9 +39,9 @@ public enum ${class.className}{ * @Description:${method.desc} * @return ${method.returnClass} */ - ${method.visibility} ${method.returnClass} ${method.methodName}{ + public static ${method.returnClass} ${method.methodName}{ ${method.returnBody} - } + } } \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dynamicddd/msgbody.ftl b/codemaker-core/src/main/resources/template/dynamicddd/msgbody.ftl index 5021f8669295bce58f504a873dbd10a14878a1dc..e6c85cb66d03e7f57dcafa118bdfe67d37ec6491 100644 --- a/codemaker-core/src/main/resources/template/dynamicddd/msgbody.ftl +++ b/codemaker-core/src/main/resources/template/dynamicddd/msgbody.ftl @@ -1,7 +1,6 @@ package ${class.packageName}; -import java.util.Date; -import java.math.BigDecimal; + import lombok.Data; import lombok.ToString; diff --git a/codemaker-core/src/main/resources/template/dynamicddd/valueobject.ftl b/codemaker-core/src/main/resources/template/dynamicddd/valueobject.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/valueobject.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/acl.ftl b/codemaker-core/src/main/resources/template/springboot/acl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/acl.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** + * @Description:${class.classDesc}接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${class.className}{ + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/bo.ftl b/codemaker-core/src/main/resources/template/springboot/bo.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ff33f1e6f726b7699806dc8ed67a1bf142a3ec6e --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/bo.ftl @@ -0,0 +1,24 @@ +package ${package}.core.model.bo; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${table.tableComment}BO类 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${table.humpClassName}BO{ + + <#list columns as column> + + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/boddd.ftl b/codemaker-core/src/main/resources/template/springboot/boddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..1a43acac8202e47b8613705d0592615b6c3f14fd --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/boddd.ftl @@ -0,0 +1,39 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + + /** + * ${field.desc} + */ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/controllerddd.ftl b/codemaker-core/src/main/resources/template/springboot/controllerddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..db0d725575c53aeba8af5a117b4d18c5ff3ff2ea --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/controllerddd.ftl @@ -0,0 +1,35 @@ +package ${class.packageName}; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +<#list imports as importClass> +import ${importClass}; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +/** +* @Description:${table.tableComment}控制层 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@RestController +public class ${class.className} { + + protected Logger logger = LoggerFactory.getLogger(${class.className}.class); + +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + @RequestMapping(value = "${method.pathValue}") + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + +} diff --git a/codemaker-core/src/main/resources/template/springboot/convert.ftl b/codemaker-core/src/main/resources/template/springboot/convert.ftl new file mode 100644 index 0000000000000000000000000000000000000000..6fe60c1bbf6b49ed0ddcb1193761b8093091fa98 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/convert.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +/** +* @Description:${class.classDesc}接口 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Mapper +public interface ${class.className}{ + ${class.className} INSTANCE = Mappers.getMapper(${class.className}.class); + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/do.ftl b/codemaker-core/src/main/resources/template/springboot/do.ftl new file mode 100644 index 0000000000000000000000000000000000000000..0416b5c5eca04c2cb11b535bffc2265678604b46 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/do.ftl @@ -0,0 +1,24 @@ +package ${package}.dao.dataobject; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${table.tableComment}DO类 + * @Author:${author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${table.humpClassName}DO{ + + <#list columns as column> + + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/dto.ftl b/codemaker-core/src/main/resources/template/springboot/dto.ftl new file mode 100644 index 0000000000000000000000000000000000000000..12465ba0cc11a90cdf0a02265ce52772ceeab0ac --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/dto.ftl @@ -0,0 +1,25 @@ +package ${package}.api.dto; + +import java.util.Date; +import java.math.BigDecimal; +import lombok.Data; +import lombok.ToString; +import java.io.Serializable; + + +/** +* @Description:${table.tableComment}DTO类 +* @Author:${author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Data +@ToString +public class ${table.humpClassName}DTO implements Serializable { + +<#list columns as column> + /** ${column.columnComment} **/ + private ${column.columnTypeName} ${column.columnFieldName}; + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/dtoddd.ftl b/codemaker-core/src/main/resources/template/springboot/dtoddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..d6243cb09279ec491a39bf98497e22aeef0b75b9 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/dtoddd.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + +/** +* @Description:${class.classDesc}类 +* @Author:${class.author} +* @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} +* @version v1.0 +*/ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + +<#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + +<#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/enum.ftl b/codemaker-core/src/main/resources/template/springboot/enum.ftl new file mode 100644 index 0000000000000000000000000000000000000000..27c66dd0e0190604a3c1c039819a08895cb3449c --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/enum.ftl @@ -0,0 +1,47 @@ +package ${class.packageName}; + +import lombok.Getter; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Getter +public enum ${class.className}{ + + /** + * + */ + <#list enums as enumValue> + ${enumValue}, + + ; + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + + ${class.className}(${class.constructParamStr}){ + <#list bodys as body> + ${body}; + + } + + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + public static ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/exeimpl.ftl b/codemaker-core/src/main/resources/template/springboot/exeimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a2b72408df811370c892a9c7b85f6f5b14597713 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/exeimpl.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ${class.packageName}.${class.className}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className} ${class.relationClassStr}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + <#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/factory.ftl b/codemaker-core/src/main/resources/template/springboot/factory.ftl new file mode 100644 index 0000000000000000000000000000000000000000..758b640f34c009f2f7a9a7659d06586a9d51db1a --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/factory.ftl @@ -0,0 +1,34 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import org.springframework.stereotype.Service; + + /** + * @Description:${class.className}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/gataway.ftl b/codemaker-core/src/main/resources/template/springboot/gataway.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/gataway.ftl @@ -0,0 +1,23 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + + +/** + * @Description:${class.classDesc}接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${class.className}{ + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.returnClass} ${method.methodName}; + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/gatawayimpl.ftl b/codemaker-core/src/main/resources/template/springboot/gatawayimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ef69323a922b60a7ec953e7cbc952c773f6bb2b8 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/gatawayimpl.ftl @@ -0,0 +1,30 @@ +package ${class.packageName}.impl; + +<#list imports as importClass> +import ${importClass}; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ${class.packageName}.${class.className}; + +/** + * @Description:${class.classDesc}接口实现类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Service +public class ${class.className}Impl implements ${class.className}{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + <#list methods as method> + + @Override + public ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/mapper.ftl b/codemaker-core/src/main/resources/template/springboot/mapper.ftl index 4c7d42a59f4dafb07f16404886fe6a65e91056e2..04ec226e05c248985e4a0aaa0240205ed00d09a9 100644 --- a/codemaker-core/src/main/resources/template/springboot/mapper.ftl +++ b/codemaker-core/src/main/resources/template/springboot/mapper.ftl @@ -1,7 +1,7 @@ -package ${package}.mapper; +package ${package}.dao.mapper; import java.util.List; -import ${package}.entity.${table.humpClassName}Entity; +import ${package}.dao.dataobject.${table.humpClassName}DO; /** @@ -17,11 +17,11 @@ public interface ${table.humpClassName}Mapper{ * @Title: save * @Description:新增或修改 * @author: - * @param @param ${table.humpTableName}Entity + * @param @param ${table.humpTableName}DO * @return int * @throws */ - public int insert(${table.humpClassName}Entity ${table.humpTableName}Entity); + public int insert(${table.humpClassName}DO ${table.humpTableName}DO); /** * @@ -40,30 +40,30 @@ public interface ${table.humpClassName}Mapper{ * @Description: 通过id查询 * @author: * @param @param id - * @return ResultDataDto<${table.humpClassName}Entity> 返回类型 + * @return ResultDataDto<${table.humpClassName}DO> 返回类型 * @throws */ - public ${table.humpClassName}Entity getById(Long id); + public ${table.humpClassName}DO getById(Long id); /** * * @Title: getAll * @Description:查询所有数据 * @author: - * @return List<${table.humpClassName}Entity 返回类型 + * @return List<${table.humpClassName}DO 返回类型 * @throws */ - public List<${table.humpClassName}Entity> getAll(); + public List<${table.humpClassName}DO> getAll(); /** * * @Title: update * @Description:新增或修改 * @author: - * @param @param ${table.humpTableName}Entity + * @param @param ${table.humpTableName}DO * @return int * @throws */ - public int update(${table.humpClassName}Entity ${table.humpTableName}Entity); + public int update(${table.humpClassName}DO ${table.humpTableName}DO); } \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/mapperxml.ftl b/codemaker-core/src/main/resources/template/springboot/mapperxml.ftl index 67b2598b65d222b68d7d02776f44d0887161baf9..b6f6b2b0962258059e3eb07cbd80390844334113 100644 --- a/codemaker-core/src/main/resources/template/springboot/mapperxml.ftl +++ b/codemaker-core/src/main/resources/template/springboot/mapperxml.ftl @@ -1,11 +1,11 @@ - + - + <#list columns as column> @@ -14,39 +14,31 @@ - <#list columns as column> - ${column.columnName}, - + ${table.columnNameList} - + insert into ${table.tableName}( - <#list columns as column> - ${column.columnName}, - + ${table.insertColumnNames} ) values( - <#list columns as column> - <#noparse>#{${column.columnFieldName}<#noparse>}, - + ${table.insertColumnNameList} ) - + update ${table.tableName} set - <#list columns as column> - ${column.columnName}=<#noparse>#{${column.columnFieldName}<#noparse>}, - + ${table.updateColumnNameList} where id = <#noparse>#{id<#noparse>} - select from ${table.tableName} - select from ${table.tableName} where id = <#noparse>#{id<#noparse>} diff --git a/codemaker-core/src/main/resources/template/springboot/msgbody.ftl b/codemaker-core/src/main/resources/template/springboot/msgbody.ftl new file mode 100644 index 0000000000000000000000000000000000000000..e6c85cb66d03e7f57dcafa118bdfe67d37ec6491 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/msgbody.ftl @@ -0,0 +1,33 @@ +package ${class.packageName}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/valueobject.ftl b/codemaker-core/src/main/resources/template/springboot/valueobject.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/valueobject.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/springboot/voddd.ftl b/codemaker-core/src/main/resources/template/springboot/voddd.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/springboot/voddd.ftl @@ -0,0 +1,36 @@ +package ${class.packageName}; + +<#list imports as importClass> +import ${importClass}; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:${class.classDesc}类 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +@Data +@ToString +public class ${class.className} ${class.relationClassStr}{ + + <#list fields as field> + /** ${field.desc} **/ + ${field.visibility} ${field.fieldName}; + + + <#list methods as method> + /** + * + * @Description:${method.desc} + * @return ${method.returnClass} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-springboot/pom.xml b/codemaker-springboot/pom.xml index 9f7d25597c551e7107ffd5aea6719bc5b10928b4..5fd5df454021e836754dc7a8471972886d7db9f0 100644 --- a/codemaker-springboot/pom.xml +++ b/codemaker-springboot/pom.xml @@ -16,6 +16,7 @@ 1.8 + 1.2.0.Final @@ -165,6 +166,23 @@ lombok + + org.mapstruct + mapstruct + ${mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + org.mapstruct + mapstruct-jdk8 + ${mapstruct.version} + + + diff --git a/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/service/ClassTeacherService.java b/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/service/ClassTeacherService.java deleted file mode 100644 index 7ba335392b32710d58f54f2d3e149b375e3062b9..0000000000000000000000000000000000000000 --- a/codemaker-springboot/src/main/java/com/lightsnail/schoolmanager/service/ClassTeacherService.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.lightsnail.schoolmanager.service; - -import java.util.List; -import com.coderman.utils.response.ResultDataDto; -import com.coderman.utils.response.ResultDto; - -import com.lightsnail.schoolmanager.vo.ClassTeacherVO; - -/** - * @Description:Service接口 - * @Author:fanchunshuai - * @CreateTime:2021-06-25 16:08:54 - * @version v1.0 - */ -public interface ClassTeacherService{ - - /** - * - * @Title: save - * @Description:新增 - * @author: - * @param @param dto - * @param @param userId - * @return ResultDto 返回类型 - * @throws - */ - public ResultDto save(ClassTeacherVO dto) throws Exception; - - /** - * - * @Title: delete - * @Description: 通过id删除数据 - * @author: - * @param @param id - * @return ResultDto 返回类型 - * @throws - */ - public ResultDto delete(Long id); - - /** - * - * @Title: getById - * @Description: 通过id查询 - * @author: - * @param @param id - * @return ResultDataDto - * @throws - */ - public ResultDataDto getById(Long id) throws Exception; - - /** - * - * @Title: getAll - * @Description:查询所有数据 - * @author: - * @return ResultDataDto> - * @throws - */ - public ResultDataDto> getAll() throws Exception; - - /** - * - * @Title: update - * @Description:修改 - * @author: - * @param @param classTeacherEntity - * @return int - * @throws - */ - public ResultDto update(ClassTeacherVO classTeacherVO) throws Exception; - -} \ No newline at end of file diff --git "a/doc/img/\345\244\251\347\224\273-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260(codeMaker)-v2.png" "b/doc/img/\345\244\251\347\224\273-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260(codeMaker)-v2.png" new file mode 100644 index 0000000000000000000000000000000000000000..1886eb13e9a620745e0307bcab5e4f51f12b4e86 Binary files /dev/null and "b/doc/img/\345\244\251\347\224\273-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260(codeMaker)-v2.png" differ diff --git a/moduleFile b/moduleFile index 12e8a7d91247f7bd56e992911fe0da316391a91e..9823b0f72a0e75716feb554904a88035e968a3d2 100644 --- a/moduleFile +++ b/moduleFile @@ -19,4 +19,9 @@ 8.codemaker-cola: + cola-adapter:cola应用的adapter模块,主要负责vo,controller的代码管理 + cola-app:cola应用的app模块,属于应用层,主要负责facadeimpl,cmd,exe的代码管理 + cola-client:cola应用的client模块,属于sdk,主要负责rpc类的代码管理,facade,dto,目前只支持dubbo + cola-domain:cola应用的domain模块,属于领域层,主要负责bo,enum,factory,gataway等的代码管理 + cola-infrast:cola应用的基础设施层模块,主要负责gatawayimpl,do,mapper等的代码管理