diff --git a/README.md b/README.md index 67f7d51e8981f85e52a5e06b791202647a90e7f0..4b754d49ad6a0c4972219a3b5bb10dcb91b65d45 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # codeMaker + #### 介绍 为大规模微服务构建而创建的代码生成工具,属于天画项目中的基础产品 天画项目链接:https://gitee.com/sky-painting @@ -22,13 +23,17 @@ coderMaker 立足于低代码平台,致力于解决软件开发过程中的效 4. 提供基于COLA架构下的代码生成服务 #### 软件架构 1. 整个项目分为多个工程模块 -codermaker-core:根据数据库表结构和配置的代码模板生成项目代码 +codermaker-core:代码生成的核心模块 codermaker-dberPicture:根据数据库表结构或者按照指定数据接口生成对应数据模型e-r图(基于plantUML) codermaker-dbops:数据库表结构运维工具,根据配置的sql字段内容生成单表或者多表或者分库分表的sql脚本 -codermaker-web:根据codermaker-core项目生成的代码会在这个工程里展示,所见即所得,所操作即所得. -2. codemaker-core是代码生成的核心部分 -3. codemaker-core下的resources目录是配置文件 -4. 架构图 +codermaker-web:基于springboot应用生成的代码会放在这里 +codemaker-dubbo:基于dubbo应用框架生成的代码会放在这里 + 1.dubbo-api:dubbo应用的consumer接口声明子模块 + 2.dubbo-common:dubbo应用的持久化层子模块 + 3.dubbo-core:dubbo应用的provider实现层模块 +codemaker-dynamicddd:基于plantUML类图+DDD思想生成的代码会放在这里 + +2. 架构图 ![image](doc/img/天画-低代码平台(codeMaker).png) #### 版本变更 @@ -38,39 +43,119 @@ codermaker-web:根据codermaker-core项目生成的代码会在这个工程里 3. 实现数据库表e-r图生成功能 1.0.1 4. 实现代码生成极速模式 1.0.2 5. 实现dubbo应用的代码生成 1.0.3,详情见changeList文件 +6. 实现ddd业务模型的代码生成 1.0.4,详情见changeList文件 + +#### 配置文件说明 +1.application.properties:代码生成服务的核心配置 +``` +# FREEMARKER (FreeMarkerAutoConfiguration) +spring.freemarker.allow-request-override=false +spring.freemarker.allow-session-override=false +spring.freemarker.cache=false +spring.freemarker.charset=UTF-8 +spring.freemarker.check-template-location=true +spring.freemarker.content-type=text/html +spring.freemarker.enabled=true +spring.freemarker.expose-request-attributes=false +spring.freemarker.expose-session-attributes=false +spring.freemarker.expose-spring-macro-helpers=true +spring.freemarker.prefer-file-system-access=true +# 这是重点, 会过滤.ftl后缀的文件 +spring.freemarker.suffix=.ftl +# spring boot 默认的页面模板存放目录 +spring.freemarker.template-loader-path=classpath:/template/ +spring.freemarker.settings.template_update_delay=0 +spring.freemarker.settings.default_encoding=UTF-8 +spring.freemarker.settings.classic_compatible=true + +server.port=8099 +management.port=8073 + +# 跨域(需要集成到公司服务的可以配置) +endpoints.cors.allowed-origins=http://127.0.0.1:8083 +endpoints.cors.allowed-methods=GET,POST + +#-------------以下是生成代码相关的业务配置---------- +#数据库配置 +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://localhost:3306/school_manager?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC +spring.datasource.username= +spring.datasource.password= -#### projecttemplate.properties配置文件 -##### 目标工程根包名称 -codemaker.global.package=com.lightsnail.tianhua.datafactory -##### 作者 +#配置.xml文件路径 +mybatis.config-locations=classpath:mybatis-config.xml +mybatis.mapper-locations=classpath:mapper/*.xml +#配置模型路径 +mybatis.type-aliases-package=com.coderman.codemaker.bean +spring.application.name=codemaker +#生成的应用类型,支持springboot,dubbo,cola +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 +``` +3.projecttemplate-springboot.properties:生成springboot应用代码的配置 +``` +#目标工程根包名称 +codemaker.global.package=com.snail.school.manager +#作者 codemaker.global.author=fanchunshuai -##### 数据库名称 -codemaker.global.dbName=data_factory -##### 项目名称 -codemaker.pom.projectName=tianhua-datafactory -##### maven坐标-GAV -codemaker.pom.groupId=com.lightsnail.tianhua.datafactory -codemaker.pom.artifactId=tianhua-datafactory +#数据库名称 +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-web -##### 引用的springboot版本 -codemaker.spring.parentversion=2.3.1.RELEASE +#目标工程输出目录,这里填写对应的codemaker-web工程的绝对路径 +codemaker.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-springboot +``` +4.projecttemplate-dynamicddd.properties:生成dynamicddd模块的代码配置 +``` +#目标工程根包名称 +dynamicddd.global.package=com.lightsnail.snailapp.usercrm +#作者 +dynamicddd.global.author=fanchunshuai + +#目标工程输出目录,这里填写对应的codemaker-dynamicddd工程的绝对路径 +dynamicddd.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dynamicddd +#领域plantUML 类图 +dynamicddd.domain.plantuml=CommonAuth.puml +``` #### sql表结构生成服务使用流程 ##### 数据库支持 目前仅支持mysql数据库,其他数据库可基于本项目二次开发进行支持 #### 代码生成服务使用流程 - -1. 配置codemaker-core的application.properties中的数据库访问配置项,其他默认即可 +##### 1.应用级项目生成 +1. 配置codemaker-core的application.properties中的数据库访问配置项,配置需要生成的应用类型(application.type取值:支持springboot,dubbo,cola) 2. 根据说明配置codemaker-core的projecttemplate.properties配置文件 3. 配置完成之后启动codemaker-core工程,默认端口为8099 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工程模块下的代码是否已经生成 #### 参与贡献 1. Fork 本仓库 diff --git a/changeList b/changeList index fe906640c5a954747ac15a82104566de3cbee378..c99a10f4e1016427ac70d0f963f7a28766320375 100644 --- a/changeList +++ b/changeList @@ -13,4 +13,17 @@ 6.application.properties增加application.type属性,值为springboot,dubbo,cola 7.增加projecttemplate-dubbo.properties属性文件,支持dubbo项目代码生成 8.原有配置文件projecttemplate.properties改名为projecttemplate-springboot.properties - 9.修复若干其他bug, \ No newline at end of file + 9.修复若干其他bug, + + +6. verison 1.0.4 变更 + 1.基于plantUML文档生成代码,基于ddd思想和模式生成模块级的代码内容 + 2.增加makeddd接口,支持生成dynamicddd模块的代码 + 3.引入支持ddd代码生成的配置(projecttemplate-dynamicddd.properties)和代码模板(template/dynamicddd) + 4.codemaker-core模块resources目录增加ddd-plantuml目录存放plantUML类图 + 5.支持ddd的一些模式代码生成:实体模式,值对象模式,聚合根模式,工厂模式,仓库模式,防腐层模式,服务模式,模块模式,CQE模式,领域网关 + 6.产出部分公共代码生成服务方法 + 7.优化代码生成核心链路代码模型,针对ddd代码生成做了分层处理 + 8.修复若干其他bug + + diff --git a/codemaker-core/.idea/.gitignore b/codemaker-core/.idea/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..5c98b428844d9f7d529e2b6fb918d15bf072f3df --- /dev/null +++ b/codemaker-core/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/codemaker-core/pom.xml b/codemaker-core/pom.xml index d825f5f6e4d3eac5cfc57317c727780db518793e..13578e0767a9c3d7e73ad6a3d0df8eafbff2b59b 100644 --- a/codemaker-core/pom.xml +++ b/codemaker-core/pom.xml @@ -1,7 +1,7 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot @@ -11,7 +11,7 @@ com.coderman.codemaker codemaker-core - 1.0.3-SNAPSHOT + 1.0.4-SNAPSHOT codemaker-core @@ -174,6 +174,11 @@ 1.0.0-SNAPSHOT + + org.projectlombok + lombok + + diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/DynamicDDDAppService.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/DynamicDDDAppService.java new file mode 100644 index 0000000000000000000000000000000000000000..30e9773fa989e39acae805e806a7c2a6d59baf3f --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/DynamicDDDAppService.java @@ -0,0 +1,25 @@ +package com.coderman.codemaker.app; + +import com.coderman.codemaker.service.IWriteFileService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "dynamicDDDAppService") +public class DynamicDDDAppService implements AppService { + @Resource(name = "dynamicDDDWriteServiceImpl") + private IWriteFileService dynamicDDDWriteService; + + @Override + public IWriteFileService getModelAppService(String moduleName) { + return dynamicDDDWriteService; + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..d39372613b59c0fe52036db4ddd169996982c69e --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/ImportPackageService.java @@ -0,0 +1,210 @@ +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.DefaultPackageConfig; +import com.coderman.codemaker.config.ProjectTemplateDynamicDDDConfig; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +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; +import java.util.Set; + +/** + * Description: + * date: 2021/6/30 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Service +public class ImportPackageService { + @Autowired + private DefaultPackageConfig defaultPackageConfig; + + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + /** + * 处理需要导入的包 + * @param abstractClassBean + * @param plantUmlContextBean + */ + public void dealImportClass(AbstractClassBean abstractClassBean, PlantUmlContextBean plantUmlContextBean){ + Set importClassSet = new HashSet<>(); + + abstractClassBean.getMethodBeanList().forEach(methodBean -> { + String returnClassName = methodBean.getReturnClass(); + + String defaultPackageName = defaultPackageConfig.getPackage(returnClassName); + if(!StringUtils.isEmpty(defaultPackageName)){ + importClassSet.add(defaultPackageName); + } + + plantUmlContextBean.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.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); + } + + plantUmlContextBean.getClassBeanMap().forEach((k,v)->{ + + if(!abstractClassBean.getPackageName().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()); + } + }); + }); + } + + if(importClassSet.isEmpty()){ + abstractClassBean.setImportClassList(Lists.newArrayList()); + }else { + abstractClassBean.setImportClassList(Lists.newArrayList(importClassSet)); + } + + } + + + /** + * 设置包名 + * @param abstractClassBean + * @param defaultChildPackage 当plantUML中没有包名则使用配置的全局包名+子包名 + */ + public void setPackageName(AbstractClassBean abstractClassBean, String defaultChildPackage){ + if(org.apache.commons.lang3.StringUtils.isEmpty(abstractClassBean.getPlantUMLPackage())){ + String packageName = projectTemplateDynamicDDDConfig.getGlobalPackage()+"."+defaultChildPackage; + abstractClassBean.setPackageName(packageName); + return; + }else { + if(!abstractClassBean.getPlantUMLPackage().contains(projectTemplateDynamicDDDConfig.getGlobalPackage()) + && abstractClassBean.getPlantUMLPackage().split("\\.").length > 2 + && !abstractClassBean.getPlantUMLPackage().contains(" as ")){ + abstractClassBean.setPackageName(abstractClassBean.getPlantUMLPackage()); + return; + } + if(abstractClassBean.getPlantUMLPackage().contains(projectTemplateDynamicDDDConfig.getGlobalPackage())){ + abstractClassBean.setPackageName(abstractClassBean.getPlantUMLPackage()); + return; + } + else if(!abstractClassBean.getPlantUMLPackage().contains("-") && abstractClassBean.getPlantUMLPackage().split("\\.").length == 2){ + String packageName = projectTemplateDynamicDDDConfig.getGlobalPackage() +"."+ 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; + abstractClassBean.setPackageName(packageName); + return; + }else { + String[] array = abstractClassBean.getPlantUMLPackage().replace("\"","").trim().split(" "); + String packageName = ""; + for (String str : array){ + if(str.contains("-")){ + packageName = str.split("-")[1]; + } + } + if(packageName.split("\\.").length == 2){ + packageName = projectTemplateDynamicDDDConfig.getGlobalPackage() +"."+ packageName; + abstractClassBean.setPackageName(packageName); + return; + }else { + //超过两级包名则默认 为全包名 + abstractClassBean.setPackageName(packageName); + } + return; + } + //如果配置的全局包名与plantUML中的文档包名不一致则最终使用文档中的包名 + //abstractClassBean.setPackageName(abstractClassBean.getPlantUMLPackage()); + + } + } + + + + + /** + * + * @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/dubbo/DubboApiWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboApiWriteServiceImpl.java index 04c1b422c163782412844e09b6086d297c0d9613..f35709c9cb152c9d565ca06eb0d1ed679b8bf24a 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,7 +1,7 @@ package com.coderman.codemaker.app.dubbo; import com.coderman.codemaker.bean.ClassContentBean; -import com.coderman.codemaker.config.ProjectTemplateConfig; +import com.coderman.codemaker.bean.WriteContentBean; import com.coderman.codemaker.config.ProjectTemplateDubboConfig; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.service.IWriteFileService; @@ -31,19 +31,19 @@ public class DubboApiWriteServiceImpl implements IWriteFileService { private ProjectTemplateDubboConfig projectTemplateDubboConfig; @Override - public void writeContent(String templateName, String content, String humpClassName) { - if(templateName.equals(TemplateFileEnum.DTO.getTempFileName())){ + public void writeContent(WriteContentBean writeContentBean) { + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DTO.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("dto"); classContentBean.setClassSuffix("DTO.java"); writeDTO(classContentBean); } - else if(templateName.equals(TemplateFileEnum.FACADE.getTempFileName())){ + else if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("facade"); classContentBean.setClassSuffix("Facade.java"); writeFacade(classContentBean); 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 0a124e9541cb7e70ffaf525093f758495d5a9e4b..2e6bf0c4578e139d5fe7fbaf4a24d582028208f4 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 @@ -1,6 +1,7 @@ package com.coderman.codemaker.app.dubbo; import com.coderman.codemaker.bean.ClassContentBean; +import com.coderman.codemaker.bean.WriteContentBean; import com.coderman.codemaker.config.ProjectTemplateDubboConfig; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.service.IWriteFileService; @@ -29,31 +30,31 @@ public class DubboCommonWriteServiceImpl implements IWriteFileService { private ProjectTemplateDubboConfig projectTemplateDubboConfig; @Override - public void writeContent(String templateName, String content, String humpClassName) { + public void writeContent(WriteContentBean writeContentBean) { //写do class - if(templateName.equals(TemplateFileEnum.DATA_OBJECT.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.DATA_OBJECT.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("dataobject"); classContentBean.setClassSuffix("DO.java"); writeDO(classContentBean); } //写mapper class - if(templateName.equals(TemplateFileEnum.MAPPER.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MAPPER.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("mapper"); classContentBean.setClassSuffix("Mapper.java"); writeMapper(classContentBean); } //写mapper.xml - if(templateName.equals(TemplateFileEnum.MAPPER_XML.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MAPPER_XML.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("mapper"); classContentBean.setClassSuffix("Mapper.xml"); writeMapperXml(classContentBean); diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCoreWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dubbo/DubboCoreWriteServiceImpl.java index cf5b6803611e86b86bf674c8c79616eeec10d4d2..d5f1a5920d4dfef5dc1e841a65f17580f90073f0 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,6 +1,7 @@ package com.coderman.codemaker.app.dubbo; import com.coderman.codemaker.bean.ClassContentBean; +import com.coderman.codemaker.bean.WriteContentBean; import com.coderman.codemaker.config.ProjectTemplateDubboConfig; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.service.IWriteFileService; @@ -28,42 +29,42 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService { private ProjectTemplateDubboConfig projectTemplateDubboConfig; @Override - public void writeContent(String templateName, String content, String humpClassName) { + public void writeContent(WriteContentBean writeContentBean) { //写FacadeImpl - if(templateName.equals(TemplateFileEnum.FACADE_IMPL.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE_IMPL.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("facade.impl"); classContentBean.setClassSuffix("FacadeImpl.java"); writeClassFile(classContentBean); } //写model.bo - if(templateName.equals(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("model.bo"); classContentBean.setClassSuffix("BO.java"); writeClassFile(classContentBean); } //写converter - if(templateName.equals(TemplateFileEnum.CONVERT.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONVERT.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("convert"); classContentBean.setClassSuffix("Converter.java"); writeClassFile(classContentBean); } //写service - if(templateName.equals(TemplateFileEnum.SERVICE.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("service"); classContentBean.setClassSuffix("Service.java"); writeClassFile(classContentBean); @@ -71,50 +72,50 @@ public class DubboCoreWriteServiceImpl implements IWriteFileService { //写serviceimpl - if(templateName.equals(TemplateFileEnum.SERVICE_IMPL.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE_IMPL.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("service.impl"); classContentBean.setClassSuffix("ServiceImpl.java"); writeClassFile(classContentBean); } //写test - if(templateName.equals(TemplateFileEnum.TEST.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.TEST.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("test"); classContentBean.setClassSuffix("FacadeTest.java"); writeClassTestFile(classContentBean); } //写Application类 - if(templateName.equals(TemplateFileEnum.APPLICATION.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.APPLICATION.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName(""); classContentBean.setClassSuffix(""); writeClassFile(classContentBean); } //写Application类 - if(templateName.equals(TemplateFileEnum.FACADE_AOP.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.FACADE_AOP.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("aop"); classContentBean.setClassSuffix(""); writeClassFile(classContentBean); } //写serviceimpl - if(templateName.equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("utils"); classContentBean.setClassSuffix(""); writeClassFile(classContentBean); 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/AppCmdElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..a3dcf1fce0d493f1dc87a325dff4d7f7eee461db --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppCmdElementHandler.java @@ -0,0 +1,61 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.CommandElementBean; +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "appCmdElementHandler") +public class AppCmdElementHandler implements DomainElementHandler { + + + @Autowired + private ImportPackageService importPackageService; + + @Override + public CommandElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + CommandElementBean commandElementBean = new CommandElementBean(); + List cmdElementBeanList = new ArrayList<>(); + plantUmlContextBean.getClassBeanMap().forEach((k,v)->{ + if(classFilter(v.getClassName())){ + importPackageService.setPackageName(v,"app.command"); + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + cmdElementBeanList.add(v); + } + }); + cmdElementBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean)); + commandElementBean.setClassBeanList(cmdElementBeanList); + return commandElementBean; + } + + /** + * 类过滤 + * @param className + * @return + */ + private boolean classFilter(String className){ + String[] cmdArr = DomainElementEnum.COMMAND.getElement().split(","); + for (String cmd : cmdArr){ + if (className.toLowerCase().endsWith(cmd)) { + return true; + } + } + return false; + } +} + 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/AppExeElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..0bb098b8f04f9d5092ecab229d1e055f0a9c49bd --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/AppExeElementHandler.java @@ -0,0 +1,143 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.ExecutorElementBean; +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.InterfaceBean; +import com.coderman.codemaker.bean.plantuml.MethodBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "appExeElementHandler") +public class AppExeElementHandler implements DomainElementHandler { + @Autowired + private ImportPackageService importPackageService; + + @Override + public ExecutorElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + ExecutorElementBean executorElementBean = new ExecutorElementBean(); + List interfaceBeanList = new ArrayList<>(); + List classBeanList = new ArrayList<>(); + + plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{ + if(classFilter(v.getClassName())){ + importPackageService.setPackageName(v,"app.executor"); + + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + importPackageService.dealImportClass(v,plantUmlContextBean); + interfaceBeanList.add(v); + } + }); + plantUmlContextBean.getClassBeanMap().forEach((k,v)->{ + if(classFilter(v.getClassName())){ + importPackageService.setPackageName(v,"app.executor"); + addExeMethod(v,plantUmlContextBean); + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + importPackageService.dealImportClass(v,plantUmlContextBean); + classBeanList.add(v); + } + }); + executorElementBean.setClassBeanList(classBeanList); + executorElementBean.setInterfaceBeanList(interfaceBeanList); + return executorElementBean; + } + + /** + * 类过滤 + * @param className + * @return + */ + private boolean classFilter(String className){ + String[] cmdArr = DomainElementEnum.EXECUTOR.getElement().split(","); + for (String cmd : cmdArr){ + if (className.toLowerCase().endsWith(cmd)) { + return true; + } + } + return false; + } + + /** + * 如果exe实现了抽象的exe接口,则对exe实现类进行检测 + * @param classBean + * @param plantUmlContextBean + */ + private void addExeMethod(ClassBean classBean, PlantUmlContextBean plantUmlContextBean){ + //如果没有实现类则直接返回 + if(StringUtils.isEmpty(classBean.getRelationClassStr())){ + return; + } + + if(classBean.getRelationClassStr().contains("implements")){ + String implClass = classBean.getRelationClassStr().replace("implements","").trim(); + InterfaceBean interfaceBean = plantUmlContextBean.getInterfaceBeanMap().get(implClass); + if(interfaceBean == null || CollectionUtils.isEmpty(interfaceBean.getMethodBeanList())){ + return; + } + + if(CollectionUtils.isEmpty(classBean.getMethodBeanList())){ + classBean.setMethodBeanList(interfaceBean.getMethodBeanList()); + return; + } + + dealMethod(classBean,interfaceBean.getMethodBeanList()); + + }else if(classBean.getRelationClassStr().contains("extends")){ + String extendsClass = classBean.getRelationClassStr().replace("extends","").trim(); + ClassBean superClassBean = plantUmlContextBean.getClassBeanMap().get(extendsClass); + if(superClassBean == null || CollectionUtils.isEmpty(superClassBean.getMethodBeanList())){ + return; + } + + if(CollectionUtils.isEmpty(classBean.getMethodBeanList())){ + classBean.setMethodBeanList(superClassBean.getMethodBeanList()); + return; + } + + dealMethod(classBean,superClassBean.getMethodBeanList()); + } + } + + /** + * 处理继承和实现的方法 + * @param classBean + * @param superMethodList + */ + private void dealMethod(ClassBean classBean, List superMethodList){ + List implMethodList = new ArrayList<>(); + for (MethodBean interfaceMethod : superMethodList){ + boolean implMethod = false; + for (MethodBean classMethod : classBean.getMethodBeanList()){ + if(classMethod.getMethodName().toLowerCase().trim().equals(interfaceMethod.getMethodName().toLowerCase().trim()) + && classMethod.getReturnClass().equals(interfaceMethod.getReturnClass())){ + implMethod = true; + } + } + if(!implMethod){ + implMethodList.add(interfaceMethod); + } + } + List methodBeanList = classBean.getMethodBeanList(); + methodBeanList.addAll(implMethodList); + classBean.setMethodBeanList(methodBeanList); + } + + +} 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/DomainBoElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..b3e94d2728eea98fad14a70b0f63ee27df2af9cd --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainBoElementHandler.java @@ -0,0 +1,46 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.DomainBoElementBean; +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "domainBoElementHandler") +public class DomainBoElementHandler 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"); + 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/DomainElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..51e7f02208dc50c4ab6f9b4e9c2f59139cd17597 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainElementHandler.java @@ -0,0 +1,16 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public interface DomainElementHandler { + + T getElementBeanList(PlantUmlContextBean plantUmlContextBean); +} 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/DomainFactoryElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..5a7cc4ce700fe3da9ab67a9c14ddbb81773c9e6e --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainFactoryElementHandler.java @@ -0,0 +1,46 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.FactoryElementBean; +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "domainFactoryElementHandler") +public class DomainFactoryElementHandler implements DomainElementHandler { + + @Autowired + private ImportPackageService importPackageService; + + @Override + public FactoryElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + FactoryElementBean factoryElementBean = new FactoryElementBean(); + List domainBoElementBeanList = new ArrayList<>(); + plantUmlContextBean.getClassBeanMap().forEach((k,v)->{ + if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.FACTORY.getElement())){ + importPackageService.setPackageName(v,"domain.factory"); + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + importPackageService.dealImportClass(v,plantUmlContextBean); + domainBoElementBeanList.add(v); + } + }); + factoryElementBean.setClassBeanList(domainBoElementBeanList); + return factoryElementBean; + } + +} + 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/DomainGatawayElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..6a7068a29ab04428fa582b84e9df2cb0d5ddeeb1 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DomainGatawayElementHandler.java @@ -0,0 +1,46 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.GatawayElementBean; +import com.coderman.codemaker.bean.plantuml.InterfaceBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "domainGatawayElementHandler") +public class DomainGatawayElementHandler implements DomainElementHandler { + @Autowired + private ImportPackageService importPackageService; + + @Override + public GatawayElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + GatawayElementBean gatawayElementBean = new GatawayElementBean(); + List gatawInterfaceBeanList = new ArrayList<>(); + plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{ + if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.GATAWAY.getElement())){ + importPackageService.setPackageName(v,"domain.gataway"); + + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + importPackageService.dealImportClass(v,plantUmlContextBean); + gatawInterfaceBeanList.add(v); + } + }); + gatawayElementBean.setInterfaceBeanList(gatawInterfaceBeanList); + return gatawayElementBean; + } + + +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..f790dce6f4eb61d93a3e84cd30ad5d0bd0630abc --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/DynamicDDDWriteServiceImpl.java @@ -0,0 +1,281 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.bean.ClassContentBean; +import com.coderman.codemaker.bean.WriteContentBean; +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/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "dynamicDDDWriteServiceImpl") +public class DynamicDDDWriteServiceImpl implements IWriteFileService { + + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + + @Override + public void writeContent(WriteContentBean writeContentBean) { + + //写domain.bo + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName())){ + ClassContentBean classContentBean = new ClassContentBean(); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); + classContentBean.setChildPackageName("domain.bo"); + classContentBean.setClassPackageName(writeContentBean.getClassPackageName()); + //走默认的包生成方式 + 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()); + //走默认的包生成方式 + 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()); + + //走默认的包生成方式 + 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()); + + //走默认的包生成方式 + 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("domain.gataway.impl"); + classContentBean.setClassPackageName(writeContentBean.getClassPackageName()+".impl"); + + //走默认的包生成方式 + if(StringUtils.isEmpty(classContentBean.getClassPackageName())){ + writeClassFile(classContentBean); + }else { + //走文档里的package包生成方式 + writeClassFileV2(classContentBean); + } + } + //写domain.enum + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ENUM.getTempFileName())){ + ClassContentBean classContentBean = new ClassContentBean(); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); + classContentBean.setChildPackageName("domain.enums"); + classContentBean.setClassPackageName(writeContentBean.getClassPackageName()); + + //走默认的包生成方式 + 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("infrast.factory"); + classContentBean.setClassSuffix(""); + classContentBean.setClassPackageName(writeContentBean.getClassPackageName()); + + //走默认的包生成方式 + 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(""); + //走默认的包生成方式 + if(StringUtils.isEmpty(classContentBean.getClassPackageName())){ + writeClassFile(classContentBean); + }else { + //走文档里的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()); + 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"); + //走默认的包生成方式 + 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"); + //走默认的包生成方式 + 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) { + + } + + + /** + * 写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/EventElementHandler.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/EventElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..e9c0882fe55343b77e53aff5dbe28c9a806b19cd --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/EventElementHandler.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.app.dynamicddd; + +/** + * Description: + * date: 2021/6/30 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class EventElementHandler { +} 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/InfrastAclElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..dbc6a93c75e4b6dbb5055ca74a7c6834bb70a67f --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/InfrastAclElementHandler.java @@ -0,0 +1,119 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.alibaba.fastjson.JSON; +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.InfrastAclElementBean; +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.config.ProjectTemplateDynamicDDDConfig; +import com.coderman.codemaker.enums.DomainElementEnum; +import com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; +import org.assertj.core.util.Lists; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "infrastAclElementHandler") +public class InfrastAclElementHandler implements DomainElementHandler { + + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + @Autowired + private ImportPackageService importPackageService; + + @Override + public InfrastAclElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + InfrastAclElementBean infrastAclElementBean = new InfrastAclElementBean(); + List interfaceBeanList = new ArrayList<>(); + + plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{ + if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.ACL.getElement())){ + importPackageService.setPackageName(v,"domain.acl"); + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + interfaceBeanList.add(v); + } + else if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.ADAPTER.getElement()) + || v.getClassName().toLowerCase().endsWith(DomainElementEnum.ADAPTER_SERVICE.getElement())){ + importPackageService.setPackageName(v,"domain.adapter"); + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + interfaceBeanList.add(v); + } + }); + + interfaceBeanList.stream().forEach(v-> importPackageService.dealImportClass(v,plantUmlContextBean)); + + List classBeanList = new ArrayList<>(); + interfaceBeanList.stream().forEach(interfaceBean -> { + List methodBeanList = interfaceBean.getMethodBeanList(); + for (MethodBean methodBean : methodBeanList){ + //对返回值进行检测 + if (methodBean.getReturnClass().toLowerCase().contains("dto")){ + String className = getClassName(methodBean.getReturnClass()); + ClassBean classBean = new ClassBean(); + classBean.setClassName(className); + String packageName = interfaceBean.getPackageName()+"."+"res.dto"; + classBean.setPackageName(packageName); + classBean.setAuthor(interfaceBean.getAuthor()); + interfaceBean.getImportClassList().add(packageName+"."+className); + classBeanList.add(classBean); + } + if(methodBean.getMethodName().contains("()")){ + continue; + } + String params = methodBean.getMethodName().substring(methodBean.getMethodName().indexOf("(")+1,methodBean.getMethodName().length() - 1); + if(StringUtils.isEmpty(params.trim())){ + continue; + } + String[] arr = params.split(","); + for (String param : arr){ + if(param.toLowerCase().contains("dto")){ + String className = param.trim().split(" ")[0]; + ClassBean classBean = new ClassBean(); + classBean.setClassName(className); + String packageName = interfaceBean.getPackageName()+"."+"req.dto"; + classBean.setPackageName(packageName); + classBean.setAuthor(interfaceBean.getAuthor()); + interfaceBean.getImportClassList().add(packageName+"."+className); + classBeanList.add(classBean); + } + } + } + }); + + interfaceBeanList.stream().forEach(interfaceBean -> { + Set importSet = Sets.newHashSet(interfaceBean.getImportClassList()); + interfaceBean.setImportClassList(Lists.newArrayList(importSet)); + }); + + infrastAclElementBean.setInterfaceBeanList(interfaceBeanList); + infrastAclElementBean.setClassBeanList(classBeanList); + System.out.println("infrastAclElementBean ="+ JSON.toJSONString(infrastAclElementBean)); + return infrastAclElementBean; + } + + + private String getClassName(String returnClassName){ + return returnClassName.trim().replace("<","") + .replace(">","") + .replace("List","") + .replace("Map","") + .replace("Set",""); + } +} + 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/MsgBodyElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..d32f497f8038a9e0094e3b6372700a3a4c3b88e9 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/MsgBodyElementHandler.java @@ -0,0 +1,50 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +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; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/30 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "msgBodyElementHandler") +public class MsgBodyElementHandler implements DomainElementHandler { + + + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + @Autowired + private ImportPackageService importPackageService; + + + @Override + public DomainMsgBodyElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + DomainMsgBodyElementBean domainMsgBodyElementBean = new DomainMsgBodyElementBean(); + List domainmsgBodyBeanList = new ArrayList<>(); + plantUmlContextBean.getClassBeanMap().forEach((k,v)->{ + if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.MSGBODY.getElement())){ + importPackageService.setPackageName(v,"domain.msgbody"); + + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + importPackageService.dealImportClass(v,plantUmlContextBean); + domainmsgBodyBeanList.add(v); + } + }); + domainMsgBodyElementBean.setClassBeanList(domainmsgBodyBeanList); + return domainMsgBodyElementBean; + } +} 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/RepositoryElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..5785b94ddab0f9459b5120158be22a1703e661d9 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/RepositoryElementHandler.java @@ -0,0 +1,45 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.RepositoryElementBean; +import com.coderman.codemaker.bean.plantuml.InterfaceBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "repositoryElementHandler") +public class RepositoryElementHandler implements DomainElementHandler { + + @Autowired + private ImportPackageService importPackageService; + + @Override + public RepositoryElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + RepositoryElementBean repositoryElementBean = new RepositoryElementBean(); + List repositoryInterfaceBeanList = new ArrayList<>(); + plantUmlContextBean.getInterfaceBeanMap().forEach((k,v)->{ + if(v.getClassName().toLowerCase().endsWith(DomainElementEnum.REPOSITORY.getElement())){ + importPackageService.setPackageName(v,"domain.repository"); + String className = v.getClassName().substring(0,1).toUpperCase().concat(v.getClassName().substring(1)); + v.setClassName(className); + importPackageService.dealImportClass(v,plantUmlContextBean); + repositoryInterfaceBeanList.add(v); + } + }); + repositoryElementBean.setInterfaceBeanList(repositoryInterfaceBeanList); + return repositoryElementBean; + } + +} 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/ValueObjectElementHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..544beffb74ac053ab7c827894fb31607501fd7d5 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/dynamicddd/ValueObjectElementHandler.java @@ -0,0 +1,108 @@ +package com.coderman.codemaker.app.dynamicddd; + +import com.coderman.codemaker.app.ImportPackageService; +import com.coderman.codemaker.bean.dddelement.ValueObjectElementBean; +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.EnumBean; +import com.coderman.codemaker.bean.plantuml.FieldBean; +import com.coderman.codemaker.bean.plantuml.PlantUmlContextBean; +import com.coderman.codemaker.enums.DomainElementEnum; +import com.coderman.codemaker.enums.VisibilityEnum; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component(value = "valueObjectElementHandler") +public class ValueObjectElementHandler implements DomainElementHandler { + + @Autowired + private ImportPackageService importPackageService; + + @Override + public ValueObjectElementBean getElementBeanList(PlantUmlContextBean plantUmlContextBean) { + ValueObjectElementBean valueObjectElementBean = new ValueObjectElementBean(); + List domainBoElementBeanList = new ArrayList<>(); + List enumBeanList = new ArrayList<>(); + + plantUmlContextBean.getClassBeanMap().forEach((k, v) -> { + if (classFilter(v.getClassName())) { + importPackageService.setPackageName(v,"domain.valuobject"); + domainBoElementBeanList.add(v); + } + }); + + plantUmlContextBean.getEnumBeanMap().forEach((k, v) -> { + List enumValueList = new ArrayList<>(); + v.getEnumValueList().forEach(value -> { + if (value.endsWith(",")) { + enumValueList.add(value.substring(0,value.length() - 1)); + } else if (value.endsWith(";")) { + enumValueList.add(value.replace(";", "")); + } else { + enumValueList.add(value); + } + }); + + v.setEnumValueList(enumValueList); + importPackageService.setPackageName(v,"domain.enums"); + + + dealConstruct(v); + + enumBeanList.add(v); + }); + valueObjectElementBean.setEnumBeanList(enumBeanList); + valueObjectElementBean.setClassBeanList(domainBoElementBeanList); + return valueObjectElementBean; + } + + /** + * 处理枚举类中的构造方法 + * @param enumBean + */ + private void dealConstruct(EnumBean enumBean){ + List fieldBeanList = enumBean.getFieldBeanList(); + List paramList = new ArrayList<>(); + List constructMethodBodyList = new ArrayList<>(); + for (FieldBean fieldBean : fieldBeanList){ + String fieldName = fieldBean.getFieldName().replace(fieldBean.getVisibility(), ""); + fieldName.replace(VisibilityEnum.PRIVATE.getVisibility(),"") + .replace(VisibilityEnum.PROTECT.getVisibility(),"") + .replace(VisibilityEnum.PUBLIC.getVisibility(),"") + .replace(VisibilityEnum.PACKAGE_PRIVATE.getVisibility(),""); + paramList.add(fieldName); + String[] fieldValueArr = fieldName.trim().split(" "); + String realFieldName = fieldValueArr[fieldValueArr.length - 1]; + constructMethodBodyList.add("this."+realFieldName+" = "+realFieldName); + } + enumBean.setConstructParamStr(StringUtils.join(paramList,",")); + enumBean.setConstructMethodBodyList(constructMethodBodyList); + } + + + /** + * 类过滤 + * @param className + * @return + */ + private boolean classFilter(String className){ + String[] cmdArr = DomainElementEnum.VALUEOBJECT.getElement().split(","); + for (String cmd : cmdArr){ + if (className.toLowerCase().endsWith(cmd)) { + return true; + } + } + return false; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/app/springboot/SpringBootWriteServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/app/springboot/SpringBootWriteServiceImpl.java index 50c6c00bf6dd7ae4db5f27860d3a199202b7fbde..085f76ded79d4a49292c46117d6c3483c9590eae 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/app/springboot/SpringBootWriteServiceImpl.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/app/springboot/SpringBootWriteServiceImpl.java @@ -3,6 +3,7 @@ package com.coderman.codemaker.app.springboot; import com.coderman.codemaker.bean.ClassContentBean; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.bean.WriteContentBean; import com.coderman.codemaker.config.ProjectTemplateConfig; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.service.DBErPictureService; @@ -38,94 +39,94 @@ public class SpringBootWriteServiceImpl implements IWriteFileService { @Override - public void writeContent(String templateName, String content, String humpClassName) { + public void writeContent(WriteContentBean writeContentBean) { //写entity class - if(templateName.equals(TemplateFileEnum.ENTITY.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.ENTITY.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("entity"); classContentBean.setClassSuffix("Entity.java"); writeClassFile(classContentBean); } //写mapper class - if(templateName.equals(TemplateFileEnum.MAPPER.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MAPPER.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("mapper"); classContentBean.setClassSuffix("Mapper.java"); writeClassFile(classContentBean); } //写mapper.xml - if(templateName.equals(TemplateFileEnum.MAPPER_XML.getTempFileName())){ - writeMapperXml(content, humpClassName); + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.MAPPER_XML.getTempFileName())){ + writeMapperXml(writeContentBean.getContent(), writeContentBean.getHumpClassName()); } //写vo - if(templateName.equals(TemplateFileEnum.VO.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.VO.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("vo"); classContentBean.setClassSuffix("VO.java"); writeClassFile(classContentBean); } //写service - if(templateName.equals(TemplateFileEnum.SERVICE.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("service"); classContentBean.setClassSuffix("Service.java"); writeClassFile(classContentBean); } //写serviceImpl - if(templateName.equals(TemplateFileEnum.SERVICE_IMPL.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SERVICE_IMPL.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("service.impl"); classContentBean.setClassSuffix("ServiceImpl.java"); writeClassFile(classContentBean); } //写controller - if(templateName.equals(TemplateFileEnum.CONTROLLER.getTempFileName())){ + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.CONTROLLER.getTempFileName())){ ClassContentBean classContentBean = new ClassContentBean(); - classContentBean.setClassContent(content); - classContentBean.setHumpClassName(humpClassName); + classContentBean.setClassContent(writeContentBean.getContent()); + classContentBean.setHumpClassName(writeContentBean.getHumpClassName()); classContentBean.setChildPackageName("controller"); classContentBean.setClassSuffix("Controller.java"); writeClassFile(classContentBean); } //写test - if(templateName.equals(TemplateFileEnum.TEST.getTempFileName())){ - writeTest(content, humpClassName); + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.TEST.getTempFileName())){ + writeTest(writeContentBean.getContent(), writeContentBean.getHumpClassName()); } //指定服务类 or 工具类 - if(templateName.equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){ - writeSpringApplicationContext(content); + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName())){ + writeSpringApplicationContext(writeContentBean.getContent()); } //指定服务类 or 工具类 - if(templateName.equals(TemplateFileEnum.BASE_CONTROLLER.getTempFileName())){ - writeBaseController(content); + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.BASE_CONTROLLER.getTempFileName())){ + writeBaseController(writeContentBean.getContent()); } //指定服务类 or 工具类 - if(templateName.equals(TemplateFileEnum.APPLICATION.getTempFileName())){ - writeApplication(content); + if(writeContentBean.getTemplateName().equals(TemplateFileEnum.APPLICATION.getTempFileName())){ + writeApplication(writeContentBean.getContent()); } } @@ -353,29 +354,29 @@ public class SpringBootWriteServiceImpl implements IWriteFileService { * @param humpClassName * @param varMap */ - public void writeAll(String humpClassName, Map varMap,String fast) { + public void writeAll(String humpClassName, Map varMap, String fast) { String entityContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.ENTITY.getTempFileName(), varMap); this.writeEntity(entityContent, humpClassName); - String serviceContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.SERVICE.getTempFileName(), varMap); + String serviceContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.SERVICE.getTempFileName(), varMap); this.writeService(serviceContent, humpClassName); - String serviceImplContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.SERVICE_IMPL.getTempFileName(), varMap); + String serviceImplContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.SERVICE_IMPL.getTempFileName(), varMap); this.writeServiceImpl(serviceImplContent, humpClassName); - String mapperXmlContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.MAPPER_XML.getTempFileName(), varMap); + String mapperXmlContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.MAPPER_XML.getTempFileName(), varMap); this.writeMapperXml(mapperXmlContent, humpClassName); - String mapperContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.MAPPER.getTempFileName(), varMap); + String mapperContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.MAPPER.getTempFileName(), varMap); this.writeMapper(mapperContent, humpClassName); - String controllerContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.CONTROLLER.getTempFileName(), varMap); + String controllerContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.CONTROLLER.getTempFileName(), varMap); this.writeController(controllerContent, humpClassName); - String voContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.VO.getTempFileName(), varMap); + String voContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.VO.getTempFileName(), varMap); this.writeVO(voContent, humpClassName); - String testContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.TEST.getTempFileName(), varMap); + String testContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.TEST.getTempFileName(), varMap); this.writeTest(testContent, humpClassName); } @@ -387,14 +388,14 @@ public class SpringBootWriteServiceImpl implements IWriteFileService { * * @param varMap */ - public void writeCommon(Map varMap,String fast) { - String baseControllerContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), varMap); + public void writeCommon(Map varMap, String fast) { + String baseControllerContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), varMap); this.writeBaseController(baseControllerContent); - String SpringApplicationContextContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(), varMap); + String SpringApplicationContextContent = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(), varMap); this.writeSpringApplicationContext(SpringApplicationContextContent); - String application = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.APPLICATION.getTempFileName(), varMap); + String application = FreemarkerUtils.parseTpl(fast+ TemplateFileEnum.APPLICATION.getTempFileName(), varMap); this.writeApplication(application); } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/ClassContentBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/ClassContentBean.java index 6b6a2c21116894d063b83e10b53178e09d878ebd..0e215172325f66285828201f030648d53a41146c 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/bean/ClassContentBean.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/ClassContentBean.java @@ -26,6 +26,19 @@ public class ClassContentBean { private String humpClassName; + /** + * 类所在包名,包括子包 + */ + private String classPackageName; + + public String getClassPackageName() { + return classPackageName; + } + + public void setClassPackageName(String classPackageName) { + this.classPackageName = classPackageName; + } + public String getChildPackageName() { return childPackageName; } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/WriteContentBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/WriteContentBean.java new file mode 100644 index 0000000000000000000000000000000000000000..40be8b5e1fc108077228b1feb8dbb4601c984079 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/WriteContentBean.java @@ -0,0 +1,56 @@ +package com.coderman.codemaker.bean; + +import com.coderman.codemaker.bean.plantuml.AbstractClassBean; +import lombok.Builder; +import lombok.Data; + +/** + * Description: + * date: 2021/7/2 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Builder +@Data +public class WriteContentBean { + private String templateName; + private String content; + private String humpClassName; + private String classPackageName; + + private AbstractClassBean abstractClassBean; + + public AbstractClassBean getAbstractClassBean() { + return abstractClassBean; + } + + public void setAbstractClassBean(AbstractClassBean abstractClassBean) { + this.abstractClassBean = abstractClassBean; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getHumpClassName() { + return humpClassName; + } + + public void setHumpClassName(String humpClassName) { + this.humpClassName = humpClassName; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/AclElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/AclElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..c9de3a24f8cad12d5b1ee199d002f2778faf11dd --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/AclElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/28 + * 防腐层元素 + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class AclElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/AggregateElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/AggregateElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..72ced9ddfc83c9ffa6eee4c0c72d964c383d31af --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/AggregateElementBean.java @@ -0,0 +1,13 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * 聚合根元素 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class AggregateElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/CommandElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/CommandElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..ecc49a9715b417152e7216e4335856e1f6ff4d72 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/CommandElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description:命令实体 + * date: 2021/7/5 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class CommandElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainBoElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainBoElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..c4ddfc4915bfc72153687d9079b72c421bdda6b6 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainBoElementBean.java @@ -0,0 +1,13 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * 业务模块实体,领域实体元素 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class DomainBoElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainEventElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainEventElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..da5b0308ebe3dcdb642f60e80531ce2e66fcd5dc --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainEventElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class DomainEventElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainMsgBodyElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainMsgBodyElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..1f0cb6f861bd20dd637842ec40ef8fc18a0f7f0b --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/DomainMsgBodyElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/30 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class DomainMsgBodyElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..efe66602c3931ec65ec0fc452ce52b613b9b6d9a --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ElementBean.java @@ -0,0 +1,54 @@ +package com.coderman.codemaker.bean.dddelement; + +import com.coderman.codemaker.bean.plantuml.ClassBean; +import com.coderman.codemaker.bean.plantuml.EnumBean; +import com.coderman.codemaker.bean.plantuml.InterfaceBean; + +import java.util.List; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public abstract class ElementBean { + protected String packageName; + protected List classBeanList; + protected List interfaceBeanList; + protected List enumBeanList; + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public List getClassBeanList() { + return classBeanList; + } + + public void setClassBeanList(List classBeanList) { + this.classBeanList = classBeanList; + } + + public List getInterfaceBeanList() { + return interfaceBeanList; + } + + public void setInterfaceBeanList(List interfaceBeanList) { + this.interfaceBeanList = interfaceBeanList; + } + + public List getEnumBeanList() { + return enumBeanList; + } + + public void setEnumBeanList(List enumBeanList) { + this.enumBeanList = enumBeanList; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ExecutorElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ExecutorElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..bc022c1bfd09f70459b4d94f0fc353a0576440e3 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ExecutorElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/7/5 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class ExecutorElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/FactoryElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/FactoryElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..5918ff8c5de222ab978c33ed94247a213fe96699 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/FactoryElementBean.java @@ -0,0 +1,13 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/28 + * 工厂元素 + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class FactoryElementBean extends ElementBean { + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/GatawayElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/GatawayElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..6f4cb6eecfe989e1f02351144d56650453b3d950 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/GatawayElementBean.java @@ -0,0 +1,14 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/28 + * + * 领域网关元素 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class GatawayElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/InfrastAclElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/InfrastAclElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..4cdfbb346693ed023fa6e07c9a0e44af5921e9f1 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/InfrastAclElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/28 + * 防腐层元素 + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class InfrastAclElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/PackageElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/PackageElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..2901c785a5a58c883f2bcc89e5689057b35e6850 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/PackageElementBean.java @@ -0,0 +1,12 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class PackageElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/RepositoryElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/RepositoryElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..c8af71739928364789d734796bbb533a857c1e9b --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/RepositoryElementBean.java @@ -0,0 +1,14 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * date: 2021/6/28 + * + * 仓库元素 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class RepositoryElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ValueObjectElementBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ValueObjectElementBean.java new file mode 100644 index 0000000000000000000000000000000000000000..d95428333ae29b05be3ce90ce26d87e000cd4cbb --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/dddelement/ValueObjectElementBean.java @@ -0,0 +1,14 @@ +package com.coderman.codemaker.bean.dddelement; + +/** + * Description: + * + * 值对象实体 元素 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class ValueObjectElementBean extends ElementBean { +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/AbstractClassBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/AbstractClassBean.java new file mode 100644 index 0000000000000000000000000000000000000000..b460fd66f368d2e151efadef7fe92d4210465b50 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/AbstractClassBean.java @@ -0,0 +1,161 @@ +package com.coderman.codemaker.bean.plantuml; + +import java.util.List; + +/** + * Description: + * 抽象plantuml 类 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public abstract class AbstractClassBean { + /** + * 类名 + */ + protected String className; + + /** + * 所在包 + */ + protected String packageName; + /** + * 所属模块 + */ + protected String belongModel; + + /** + * 类描述 + */ + protected String classDesc; + + /** + * 方法 + */ + private List methodBeanList; + + /** + * 需要引入的class包名 + */ + private List importClassList; + /** + * 属性列表 + * + */ + private List fieldBeanList; + + + + /** + * 实现接口 + */ + private InterfaceBean implInterfaceBean; + + /** + * 继承类列表 + */ + private String relationClassStr; + /** + * 项目作者 + */ + private String author; + + /** + * 所在plantUML的包名 + */ + private String plantUMLPackage; + + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + + public String getPlantUMLPackage() { + + return plantUMLPackage; + } + + public void setPlantUMLPackage(String plantUMLPackage) { + this.plantUMLPackage = plantUMLPackage; + } + + public String getRelationClassStr() { + return relationClassStr; + } + + public void setRelationClassStr(String relationClassStr) { + this.relationClassStr = relationClassStr; + } + + public InterfaceBean getImplInterfaceBean() { + return implInterfaceBean; + } + + public void setImplInterfaceBean(InterfaceBean implInterfaceBean) { + this.implInterfaceBean = implInterfaceBean; + } + + + public List getMethodBeanList() { + return methodBeanList; + } + + public void setMethodBeanList(List methodBeanList) { + this.methodBeanList = methodBeanList; + } + + public List getFieldBeanList() { + return fieldBeanList; + } + + public void setFieldBeanList(List fieldBeanList) { + this.fieldBeanList = fieldBeanList; + } + + public List getImportClassList() { + return importClassList; + } + + public void setImportClassList(List importClassList) { + this.importClassList = importClassList; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getBelongModel() { + return belongModel; + } + + public void setBelongModel(String belongModel) { + this.belongModel = belongModel; + } + + public String getClassDesc() { + return classDesc; + } + + public void setClassDesc(String classDesc) { + this.classDesc = classDesc; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/ClassBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/ClassBean.java new file mode 100644 index 0000000000000000000000000000000000000000..ac95395eac9cf2d72cf802ad7593e29a847ade34 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/ClassBean.java @@ -0,0 +1,14 @@ +package com.coderman.codemaker.bean.plantuml; + +/** + * Description: + * class 类信息 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class ClassBean extends AbstractClassBean { + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/EnumBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/EnumBean.java new file mode 100644 index 0000000000000000000000000000000000000000..6a477e22523edbcd01e74614a4c25526b544bf90 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/EnumBean.java @@ -0,0 +1,54 @@ +package com.coderman.codemaker.bean.plantuml; + +import java.util.List; + +/** + * Description: 枚举类 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class EnumBean extends AbstractClassBean { + + /** + * 枚举值 + */ + private List enumValueList; + + + /** + * 构造方法参数 + */ + private String constructParamStr; + /** + * 构造方法体初始化设置 + */ + private List constructMethodBodyList; + + public String getConstructParamStr() { + return constructParamStr; + } + + public void setConstructParamStr(String constructParamStr) { + this.constructParamStr = constructParamStr; + } + + public List getConstructMethodBodyList() { + return constructMethodBodyList; + } + + public void setConstructMethodBodyList(List constructMethodBodyList) { + this.constructMethodBodyList = constructMethodBodyList; + } + + public List getEnumValueList() { + return enumValueList; + } + + public void setEnumValueList(List enumValueList) { + this.enumValueList = enumValueList; + } + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/FieldBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/FieldBean.java new file mode 100644 index 0000000000000000000000000000000000000000..4f0eba6758f3079f6335994a9351e0698ac38928 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/FieldBean.java @@ -0,0 +1,51 @@ +package com.coderman.codemaker.bean.plantuml; + +/** + * Description: + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class FieldBean { + /** + * 属性名称 + */ + private String fieldName; + /** + * 访问权限 + */ + private String visibility; + + /** + * 属性描述 + */ + private String desc; + + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getVisibility() { + return visibility; + } + + public void setVisibility(String visibility) { + this.visibility = visibility; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/InterfaceBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/InterfaceBean.java new file mode 100644 index 0000000000000000000000000000000000000000..75bdbe3e197ab7d9abe33a74d22330c369ed890b --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/InterfaceBean.java @@ -0,0 +1,15 @@ +package com.coderman.codemaker.bean.plantuml; + +/** + * Description: + * + * 领域接口 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class InterfaceBean extends AbstractClassBean{ + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/MethodBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/MethodBean.java new file mode 100644 index 0000000000000000000000000000000000000000..1f2d8457af9609a8ed08bcc828e982ab4f4bad83 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/MethodBean.java @@ -0,0 +1,104 @@ +package com.coderman.codemaker.bean.plantuml; + +/** + * Description: + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class MethodBean { + + /** + * 方法名称, + * 包括参数,括号 + */ + private String methodName; + /** + * 访问权限 + */ + private String visibility; + + /** + * 方法描述 + */ + private String desc; + + /** + * 是否是静态属性 + */ + private boolean isStatic; + + /** + * 方法返回值 + */ + private String returnClass; + + /** + * 方法返回对象所在包 + */ + private String returnClassPackage; + + /** + * 方法返回体 + */ + private String returnBody; + + public String getMethodName() { + return methodName; + } + + public void setMethodName(String methodName) { + this.methodName = methodName; + } + + public String getVisibility() { + return visibility; + } + + public void setVisibility(String visibility) { + this.visibility = visibility; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public boolean isStatic() { + return isStatic; + } + + public void setStatic(boolean aStatic) { + isStatic = aStatic; + } + + public String getReturnClass() { + return returnClass; + } + + public void setReturnClass(String returnClass) { + this.returnClass = returnClass; + } + + public String getReturnClassPackage() { + return returnClassPackage; + } + + public void setReturnClassPackage(String returnClassPackage) { + this.returnClassPackage = returnClassPackage; + } + + + public String getReturnBody() { + return returnBody; + } + + public void setReturnBody(String returnBody) { + this.returnBody = returnBody; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/PackageBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/PackageBean.java new file mode 100644 index 0000000000000000000000000000000000000000..2877b4f529ffb05138c389049cdd02a3e11492ca --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/PackageBean.java @@ -0,0 +1,51 @@ +package com.coderman.codemaker.bean.plantuml; + +import java.util.List; + +/** + * Description: + * date: 2021/7/2 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class PackageBean { + private String packageName; + + private List enumBeanList; + private List interfaceBeanList; + private List classBeanList; + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public List getEnumBeanList() { + return enumBeanList; + } + + public void setEnumBeanList(List enumBeanList) { + this.enumBeanList = enumBeanList; + } + + public List getInterfaceBeanList() { + return interfaceBeanList; + } + + public void setInterfaceBeanList(List interfaceBeanList) { + this.interfaceBeanList = interfaceBeanList; + } + + public List getClassBeanList() { + return classBeanList; + } + + public void setClassBeanList(List classBeanList) { + this.classBeanList = classBeanList; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/PlantUmlContextBean.java b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/PlantUmlContextBean.java new file mode 100644 index 0000000000000000000000000000000000000000..f13f4f95fd89b1baf7c2e3a1a1e9f19176cef5c7 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/bean/plantuml/PlantUmlContextBean.java @@ -0,0 +1,58 @@ +package com.coderman.codemaker.bean.plantuml; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ + +public class PlantUmlContextBean { + + private Map classBeanMap = new HashMap<>(); + + private Map enumBeanMap = new HashMap<>(); + + private Map interfaceBeanMap = new HashMap<>(); + + private Map packageBeanMap = new HashMap<>(); + + + + public Map getClassBeanMap() { + return classBeanMap; + } + + public Map getEnumBeanMap() { + return enumBeanMap; + } + + public Map getInterfaceBeanMap() { + return interfaceBeanMap; + } + + public void addClassBean(ClassBean classBean){ + this.classBeanMap.put(classBean.getClassName(),classBean); + } + + public void addInterfaceBean(InterfaceBean interfaceBean){ + this.interfaceBeanMap.put(interfaceBean.getClassName(),interfaceBean); + } + + public void addEnumBean(EnumBean enumBean){ + this.enumBeanMap.put(enumBean.getClassName(),enumBean); + } + + public Map getPackageBeanMap() { + return packageBeanMap; + } + + public void addPacakge(PackageBean packageBean){ + this.packageBeanMap.put(packageBean.getPackageName(),packageBean); + } +} 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 e83e1c5bcd7f9d856be423d15807a9642322c3b2..d271f9011136f44614436ee9d42f0aee094c94af 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 @@ -1,5 +1,7 @@ package com.coderman.codemaker.config; + + import com.coderman.codemaker.app.AppService; import com.coderman.codemaker.enums.ModuleEnum; import com.coderman.codemaker.exceptions.ConfigException; @@ -32,6 +34,7 @@ public class AppServiceConfig { @Value("${application.type}") private String applicationType; + @Resource(name = "colaAppService") private AppService colaAppService; @@ -41,6 +44,10 @@ public class AppServiceConfig { @Resource(name = "springBootAppService") private AppService springBootAppService; + + @Resource(name = "dynamicDDDAppService") + private AppService dynamicDDDAppService; + @Autowired private ProjectTemplateConfig projectTemplateConfig; @@ -85,6 +92,14 @@ public class AppServiceConfig { return null; } + /** + * 获取dynamicddd代码写服务 + * @return + */ + public IWriteFileService getDynamicDDDWriteService(){ + return dynamicDDDAppService.getModelAppService(null); + } + /** * 根据模版名称获取模块名称 * @param templateName @@ -130,4 +145,5 @@ public class AppServiceConfig { return ""; } + } 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 new file mode 100644 index 0000000000000000000000000000000000000000..abe3c3a807f972f6f122214b2d68457a22ff741d --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/DefaultPackageConfig.java @@ -0,0 +1,48 @@ +package com.coderman.codemaker.config; + +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: + * date: 2021/6/30 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Component +public class DefaultPackageConfig { + private static Map defaultPackageMap = new HashMap<>(); + + /** + * 初始化默认可能需要导入的包 + */ + 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"); + defaultPackageMap.put("BigDecimal","java.math.BigDecimal"); + defaultPackageMap.put("Date","java.util.Date"); + defaultPackageMap.put("ArrayList","java.util.ArrayList"); + defaultPackageMap.put("Set","java.util.Set"); + defaultPackageMap.put("HashSet","java.util.HashSet"); + } + + /** + * 探测需要导入的包 + * @param className + * @return + */ + public String getPackage(String className){ + for (Map.Entry entry : defaultPackageMap.entrySet()){ + if(className.toLowerCase().startsWith(entry.getKey().toLowerCase())){ + return entry.getValue(); + } + } + return ""; + } +} 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 3485adaa406966f69d73d94702b719c633cc1102..e231138444e45dffbdb19c4912c59fc8c6e63467 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 @@ -46,19 +46,19 @@ public class ProjectTemplateDubboConfig { /** * dubbo-common模块地址 */ - @Value(value = "${dubbo.code.outpath.dubbbo-common}") + @Value(value = "${dubbo.code.outpath.dubbo-common}") private String moduleCommonPath; /** * dubbo-api模块地址 */ - @Value(value = "${dubbo.code.outpath.dubbbo-api}") + @Value(value = "${dubbo.code.outpath.dubbo-api}") private String moduleApiPath; /** * dubbo-core模块地址 */ - @Value(value = "${dubbo.code.outpath.dubbbo-core}") + @Value(value = "${dubbo.code.outpath.dubbo-core}") private String moduleCorePath; public String getGlobalPackage() { 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 new file mode 100644 index 0000000000000000000000000000000000000000..2ea3bf6e86745a27c8d61d85765893bed920e8e8 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/config/ProjectTemplateDynamicDDDConfig.java @@ -0,0 +1,72 @@ +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-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; + + + @Value("${dynamicddd.domain.plantuml}") + private String plantumlFileName; + + public String getPlantumlFileName() { + return plantumlFileName; + } + + public void setPlantumlFileName(String plantumlFileName) { + 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; + } + + public void setOutPath(String outPath) { + this.outPath = outPath; + } +} \ No newline at end of file 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 322ea2244dc2ab9219f89c45085d5cbbf4164444..75006d05a4d69ebd7ab593482a1c0280f6b374f6 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,9 +3,10 @@ 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.service.MapperXmlVarRegistry; import com.coderman.codemaker.service.WriteAppModuleService; import com.coderman.codemaker.service.WriteFileService; +import com.coderman.codemaker.service.registry.DynamicDDDVarRegistry; +import com.coderman.codemaker.service.registry.MapperXmlVarRegistry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; + /** * description: CodeMakerController
* date: 2020/7/8 13:24
@@ -26,6 +28,9 @@ public class CodeMakerController { @Resource(name = "mapperXmlVarRegistry") private MapperXmlVarRegistry mapperXmlVarRegistry; + @Resource(name = "dynamicDDDVarRegistry") + private DynamicDDDVarRegistry dynamicDDDVarRegistry; + @Autowired private WriteFileService writeFileService; @@ -33,7 +38,6 @@ public class CodeMakerController { @Autowired private WriteAppModuleService writeFileServiceV2; - /** * 生成所有表对应的项目代码--极简模式 * @return @@ -156,5 +160,12 @@ public class CodeMakerController { } + @GetMapping("/makeddd") + public String makeDynamicDDD(){ + Map dynamicDDDMap = dynamicDDDVarRegistry.getRegistVarMap(); + writeFileServiceV2.writeDynamicDDD(dynamicDDDMap); + 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 e7f667be4278cfe3d2c5b19029995d6131599e74..45908ac497fd0d8d01ed1ca00f5dc2dac467b9ba 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,10 @@ package com.coderman.codemaker.controller; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; -import com.coderman.codemaker.config.AppServiceConfig; import com.coderman.codemaker.enums.TemplateFileEnum; -import com.coderman.codemaker.service.*; -import com.coderman.codemaker.utils.FreemarkerUtils; +import com.coderman.codemaker.service.FreemarkerService; +import com.coderman.codemaker.service.WriteAppModuleService; +import com.coderman.codemaker.service.registry.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorFastController.java b/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorFastController.java index e529e5d0e3e5a21a8e4c8fca04264fbb83591d2a..953de5928b75ae46215f3fc88782e432bc19c8ed 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorFastController.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/controller/GeneratorFastController.java @@ -3,7 +3,8 @@ package com.coderman.codemaker.controller; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; import com.coderman.codemaker.enums.TemplateFileEnum; -import com.coderman.codemaker.service.*; +import com.coderman.codemaker.service.WriteFileService; +import com.coderman.codemaker.service.registry.*; import com.coderman.codemaker.utils.FreemarkerUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -53,17 +54,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/entity") public String getEntityTemplate(){ - Map map = entityVarRegistry.getTemplateVar(); + Map map = entityVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.ENTITY.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.ENTITY.getTempFileName(),varMap); writeFileService.writeEntity(templateContent,v.getHumpClassName()); }); @@ -76,17 +77,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/vo") public String getVOTemplate(){ - Map map = entityVarRegistry.getTemplateVar(); + Map map = entityVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.VO.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.VO.getTempFileName(),varMap); writeFileService.writeVO(templateContent,v.getHumpClassName()); }); @@ -99,16 +100,16 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/mapper") public String getMapperTemplate(){ - Map map = mapperVarRegistry.getTemplateVar(); + Map map = mapperVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.MAPPER.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.MAPPER.getTempFileName(),varMap); writeFileService.writeMapper(templateContent,v.getHumpClassName()); }); @@ -122,17 +123,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/service") public String getServiceTemplate(){ - Map map = serviceVarRegistry.getTemplateVar(); + Map map = serviceVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.SERVICE.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.SERVICE.getTempFileName(),varMap); writeFileService.writeService(templateContent,v.getHumpClassName()); }); @@ -145,17 +146,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/serviceimpl") public String getServiceImplTemplate(){ - Map map = mapperXmlVarRegistry.getTemplateVar(); + Map map = mapperXmlVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.SERVICE_IMPL.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.SERVICE_IMPL.getTempFileName(),varMap); writeFileService.writeServiceImpl(templateContent,v.getHumpClassName()); }); @@ -169,17 +170,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/mapperxml") public String getMapperXMLTemplate(){ - Map map = serviceImplVarRegistry.getTemplateVar(); + Map map = serviceImplVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.MAPPER_XML.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.MAPPER_XML.getTempFileName(),varMap); writeFileService.writeMapperXml(templateContent,v.getHumpClassName()); }); @@ -192,17 +193,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/controller") public String getControllerTemplate(){ - Map map = serviceImplVarRegistry.getTemplateVar(); + Map map = serviceImplVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.CONTROLLER.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.CONTROLLER.getTempFileName(),varMap); writeFileService.writeController(templateContent,v.getHumpClassName()); }); @@ -215,17 +216,17 @@ public class GeneratorFastController { */ @GetMapping("/getproject/fast/test") public String getServiceTest(){ - Map map = testVarRegistry.getTemplateVar(); + Map map = testVarRegistry.getTemplateVar(); Map tableBeanMap = (Map)map.get("table"); Map> columnBeanListMap = (Map>)map.get("columns"); tableBeanMap.forEach((k,v)->{ - Map varMap = new HashMap<>(); + 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 = FreemarkerUtils.parseTpl("/fast/"+TemplateFileEnum.TEST.getTempFileName(),varMap); + String templateContent = FreemarkerUtils.parseTpl("/fast/"+ TemplateFileEnum.TEST.getTempFileName(),varMap); writeFileService.writeTest(templateContent,v.getHumpClassName()); }); diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/ClassEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/ClassEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..e2beb3766fedda6cb1607d3f893350cb74cfdf43 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/ClassEnum.java @@ -0,0 +1,25 @@ +package com.coderman.codemaker.enums; + +/** + * Description: + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public enum ClassEnum { + ENTITY("entity"), + CLASS("class"), + INTERFACE("interface"), + ENUM("enum"), + ; + private String classType; + ClassEnum(String classType){ + this.classType = classType; + } + + public String getClassType() { + return classType; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/ClassRelationEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/ClassRelationEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..4df1655c1ac0ede9182b766c50a3be9608580363 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/ClassRelationEnum.java @@ -0,0 +1,119 @@ +package com.coderman.codemaker.enums; + +import com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; + +/** + * Description: + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public enum ClassRelationEnum { + + /** + * GENERALIZATION + */ + GENERALIZATION("泛化-继承", Sets.newHashSet("<|--","--|>")), + REALIZE("实现",Sets.newHashSet("..|>","<|..")), + ; + + private String desc; + private Set tagSet; + ClassRelationEnum(String desc, Set tagSet){ + this.desc = desc; + this.tagSet = tagSet; + } + + public String getDesc() { + return desc; + } + + public Set getTagSet() { + return tagSet; + } + + /** + * 解析类间关系 + * @param content + * @return + */ + public static Map parseRelation(String content){ + AtomicReference classRelationEnum = new AtomicReference<>(); + for (ClassRelationEnum relationEnum : ClassRelationEnum.values()){ + relationEnum.getTagSet().forEach(tag->{ + if(content.contains(tag)){ + classRelationEnum.set(relationEnum); + } + }); + } + ClassRelationEnum relationEnum = classRelationEnum.get(); + if(relationEnum == null){ + return null; + } + Map map = new HashMap<>(); + String className = getChild(content); + if (!StringUtils.isEmpty(className)) { + map.put("class",className); + } + if(relationEnum.name().equals(ClassRelationEnum.GENERALIZATION.name())){ + map.put("relation"," extends "+getSuper(content)); + } + if(relationEnum.name().equals(ClassRelationEnum.REALIZE.name())){ + map.put("relation"," implements "+getSuper(content)); + } + + return map; + } + + /** + * 获取父类或者接口 + * @param content + * @return + */ + private static String getSuper(String content){ + if(content.contains("<|--")){ + return content.trim().split("<\\|--")[0]; + } + if(content.contains("--|>")){ + return content.trim().split("--\\|>")[1]; + } + if(content.contains("..|>")){ + return content.trim().split("..\\|>")[1]; + } + if(content.contains("<|..")){ + return content.trim().split("<\\|..")[0]; + } + return null; + } + + + /** + * 获取父类或者接口 + * @param content + * @return + */ + private static String getChild(String content){ + if(content.contains("<|--")){ + return content.trim().split("<\\|--")[1]; + } + if(content.contains("--|>")){ + return content.trim().split("--\\|>")[0]; + } + if(content.contains("..|>")){ + return content.trim().split("..\\|>")[0]; + } + if(content.contains("<|..")){ + return content.trim().split("<\\|..")[1]; + } + return null; + } + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/DomainElementEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/DomainElementEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..b08c3b5f4cd9757eba15d08778d359295742a6eb --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/DomainElementEnum.java @@ -0,0 +1,45 @@ +package com.coderman.codemaker.enums; + +/** + * Description: + * date: 2021/6/29 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public enum DomainElementEnum { + VALUEOBJECT("valueobject,config,vo","值对象"), + CONFIG("config","值对象"), + ENUM("enum","值对象"), + BO("bo","领域实体"), + SERVICE("service","领域服务"), + GATAWAY("gataway","领域网关服务"), + MSGBODY("msgbody","事件消息体"), + EVENT("event","事件"), + FACTORY("factory","领域工厂"), + REPOSITORY("repository","领域仓库"), + ACL("acl","适配器防腐层"), + ADAPTER("adapter","适配器防腐层"), + ADAPTER_SERVICE("adapterservice","适配器防腐层"), + COMMAND("command,cmd","命令"), + EXECUTOR("executor,exe,exeservice,exehandler","执行器"), + + + ; + private String element; + private String desc; + DomainElementEnum(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 f25e6e02e797d58eae9dbf23b31bf00712bb60f6..c956ab5c3dd3e07d458d1ecc27b57f5b68241af5 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 @@ -64,13 +64,63 @@ public enum ModuleEnum { /** * */ - COLA_ADAPTER("cola","cola-adapter", Sets.newHashSet()), + COLA_ADAPTER("cola","cola-adapter", Sets.newHashSet( + TemplateFileEnum.CONTROLLER.getTempFileName(), + TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), + TemplateFileEnum.VO.getTempFileName() + )), + + /** + * + */ + COLA_DOMAIN("cola","cola-domain", Sets.newHashSet( + TemplateFileEnum.SERVICE.getTempFileName(), + TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), + TemplateFileEnum.SERVICE.getTempFileName(), + TemplateFileEnum.GATAWAY.getTempFileName(), + TemplateFileEnum.FACTORY.getTempFileName(), + TemplateFileEnum.REPOSITORY.getTempFileName(), + TemplateFileEnum.VALUE_OBJECT.getTempFileName(), + TemplateFileEnum.MESSAGE_BODY.getTempFileName(), + TemplateFileEnum.ENUM.getTempFileName() + )), + /** + * + */ + COLA_CLIENT("cola","cola-client", Sets.newHashSet( + TemplateFileEnum.DTO.getTempFileName(), + TemplateFileEnum.FACADE.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() + )), + /** + * + */ + COLA_APP("cola","cola-app", Sets.newHashSet( + TemplateFileEnum.SERVICE.getTempFileName(), + TemplateFileEnum.FACADE_IMPL.getTempFileName(), + TemplateFileEnum.CMD.getTempFileName(), + TemplateFileEnum.CONVERT.getTempFileName(), + TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), + TemplateFileEnum.EXE.getTempFileName(), + TemplateFileEnum.EXE_IMPL.getTempFileName(), + TemplateFileEnum.FACADE_AOP.getTempFileName() + )), ; private String appName; private String moduleName; private Set templateFileSet; - ModuleEnum(String appName,String moduleName,Set templateFileSet){ + ModuleEnum(String appName, String moduleName, Set templateFileSet){ this.appName = appName; this.moduleName = moduleName; this.templateFileSet = templateFileSet; 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 f902e0cb4636642dc0e5682f9bad9b86db97c008..f2147e785094684301591b1b48720ad1a04b6b97 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 @@ -27,6 +27,23 @@ public enum TemplateFileEnum { BUSINESS_OBJECT("bo"), CONVERT("convert"), FACADE_AOP("facadeaop"), + GATAWAY("gataway"), + REPOSITORY("repository"), + REPOSITORY_IMPL("repositoryimpl"), + FACTORY("factory"), + ENUM("enum"), + MESSAGE_BODY("msgbody"), + GATAWAY_IMPL("gatawayimpl"), + ACL("acl"), + ACL_IMPL("aclimpl"), + ACL_REQ("aclreq"), + ACL_RES("aclres"), + ACL_PARAM("aclparam"), + CMD("cmd"), + EXE("exe"), + EXE_IMPL("exeimpl"), + EXE_ABSTRACT("abstractexe"), + VALUE_OBJECT("valueobject"), ; private String tempFileName; TemplateFileEnum(String tempFileName){ diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/enums/VisibilityEnum.java b/codemaker-core/src/main/java/com/coderman/codemaker/enums/VisibilityEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..1bbcab1fba69a523e8a24d0340c6e199889bfa9b --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/enums/VisibilityEnum.java @@ -0,0 +1,57 @@ +package com.coderman.codemaker.enums; + +/** + * Description: + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public enum VisibilityEnum { + + PRIVATE("private","-"), + PROTECT("protected","#"), + PUBLIC("public","+"), + PACKAGE_PRIVATE("package private","~"), + ; + private String visibility; + private String tag; + VisibilityEnum(String visibility, String tag){ + this.visibility = visibility; + this.tag = tag; + } + + public String getVisibility() { + return visibility; + } + + public String getTag() { + return tag; + } + + /** + * 获取修饰符 + * @param content + * @return + */ + public static String getVisibilityStr(String content) { + if (content.startsWith(VisibilityEnum.PUBLIC.tag)) { + return VisibilityEnum.PUBLIC.visibility; + } + + if (content.startsWith(VisibilityEnum.PRIVATE.tag)) { + return VisibilityEnum.PRIVATE.visibility; + } + + if (content.startsWith(VisibilityEnum.PROTECT.tag)) { + return VisibilityEnum.PROTECT.visibility; + } + + if (content.startsWith(VisibilityEnum.PACKAGE_PRIVATE.tag)) { + return VisibilityEnum.PACKAGE_PRIVATE.visibility; + } + return VisibilityEnum.PRIVATE.visibility; + } + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/FreemarkerService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/FreemarkerService.java index 9a20cdcc650b38a2febe27dbd33083c62280c945..10154adc67ef86e0cae5aeed7609140ed7b8fa5b 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/FreemarkerService.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/FreemarkerService.java @@ -1,7 +1,6 @@ package com.coderman.codemaker.service; import com.coderman.codemaker.config.AppServiceConfig; -import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.utils.FreemarkerUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +22,8 @@ public class FreemarkerService { @Autowired private AppServiceConfig appServiceConfig; + private static final String dynamicDDDPath = "/dynamicddd/"; + /** * 根据不同应用类型获取不同应用代码的模板生成代码类 * @@ -51,6 +52,16 @@ public class FreemarkerService { } return FreemarkerUtils.parseTpl(realViewName, params); } + /** + * 根据不同应用类型获取不同应用代码的模板生成代码类 + * + * @param viewName + * @param params + * @return + */ + public String parseTplDynamicDDD(String viewName, Map params) { + return FreemarkerUtils.parseTpl(dynamicDDDPath+viewName, params); + } } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/IWriteFileService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/IWriteFileService.java index 93b8efca01c57b4c3d306961282126a45d88cd2c..64c35b998069f80d1eef7d33f454196a80dbec38 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/IWriteFileService.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/IWriteFileService.java @@ -1,5 +1,7 @@ package com.coderman.codemaker.service; +import com.coderman.codemaker.bean.WriteContentBean; + import java.util.Map; /** @@ -15,11 +17,9 @@ public interface IWriteFileService { /** * 抽象写模块class文件 - * @param templateName - * @param content - * @param humpClassName + * @param writeContentBean */ - public void writeContent(String templateName, String content, String humpClassName); + public void writeContent(WriteContentBean writeContentBean); /** * 一次性生成单表需要的所有模块代码 diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..188986c335051beb475123e92c134ca057a8b35d --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/ReadPlantUMLFileService.java @@ -0,0 +1,335 @@ +package com.coderman.codemaker.service; + +import com.coderman.codemaker.bean.plantuml.*; +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 org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Description: 读文件服务 + * 读取plantUML类图 + * date: 2021/6/28 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + * + */ +@Service +public class ReadPlantUMLFileService { + + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + + /** + * 读取plantUMl文件 + * @return + */ + private List readPlantUMLContent(){ + try { + File file = ResourceUtils.getFile("classpath:ddd-plantuml/"+projectTemplateDynamicDDDConfig.getPlantumlFileName()); + return FileUtils.readLines(file,"UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 解析plantUML文件内容 + * @return + */ + public PlantUmlContextBean getPlantUmlContextBean(){ + List contentList = readPlantUMLContent(); + List elementList = new ArrayList<>(); + PlantUmlContextBean plantUmlContextBean = new PlantUmlContextBean(); + + //对class,enum,interface进行解析 + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml") || str.contains("package")){ + continue; + } + + if(str.trim().contains("{")){ + elementList.add(str.trim()); + continue; + } + if(str.trim().contains("}")){ + elementList.add(str.trim()); + parseClassElement(elementList,plantUmlContextBean); + elementList.clear(); + continue; + } + elementList.add(str.trim()); + } + + + + //对类与类的关系进行解析 + Map> relationListMap = new HashMap<>(); + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml") + || str.contains("package") || str.trim().contains("{") || str.trim().contains("}")){ + continue; + } + + Map relationMap = ClassRelationEnum.parseRelation(str); + if(relationMap == null || relationMap.size()<2){ + continue; + } + List relationList = relationListMap.get(relationMap.get("class")); + if(CollectionUtils.isEmpty(relationList)){ + relationList = new ArrayList<>(); + } + relationList.add(relationMap.get("relation")); + relationListMap.put(relationMap.get("class").trim(),relationList); + } + + plantUmlContextBean.getClassBeanMap().forEach((className,classBean)->{ + List relationList = relationListMap.get(className); + if(CollectionUtils.isNotEmpty(relationList)){ + classBean.setRelationClassStr(StringUtils.join(relationList,",")); + } + }); + + return plantUmlContextBean; + } + + + /** + * 解析文件内容整体路由 + * @param elementList + * @param plantUmlContextBean + */ + private void parseClassElement(List elementList, PlantUmlContextBean plantUmlContextBean){ + String classType = getClassType(elementList.get(0)); + if(classType.equals(ClassEnum.CLASS.getClassType())){ + ClassBean classBean = buildClassBean(elementList); + plantUmlContextBean.addClassBean(classBean); + } + else if(classType.equals(ClassEnum.ENUM.getClassType())){ + EnumBean enumBean = builEnumBean(elementList); + plantUmlContextBean.addEnumBean(enumBean); + } + + else if(classType.equals(ClassEnum.INTERFACE.getClassType())){ + InterfaceBean interfaceBean = buildInterfaceBean(elementList); + plantUmlContextBean.addInterfaceBean(interfaceBean); + } + } + + + private String getClassType(String ele){ + return ele.split(" ")[0]; + } + + /** + * 解析class类型数据 + * @param elementList + * @return + */ + private ClassBean buildClassBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); + List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); + ClassBean classBean = new ClassBean(); + classBean.setFieldBeanList(fieldBeanList); + classBean.setMethodBeanList(methodBeanList); + classBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + classBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + return classBean; + } + + /** + * 解析接口类型数据 + * @param elementList + * @return + */ + private InterfaceBean buildInterfaceBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); + InterfaceBean interfaceBean = new InterfaceBean(); + interfaceBean.setMethodBeanList(methodBeanList); + interfaceBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + interfaceBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + return interfaceBean; + } + + /** + * 解析enum类型数据 + * @param elementList + * @return + */ + private EnumBean builEnumBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); + EnumBean enumBean = new EnumBean(); + enumBean.setFieldBeanList(fieldBeanList); + enumBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + enumBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + dealEnumMethodBeanList(elementList,enumBean); + return enumBean; + } + + /** + * 获取类的属性列表 + * @param elementList + * @return + */ + private List getFieldBeanList(List elementList){ + List fieldBeanList = new ArrayList<>(); + + for (String fieldStr : elementList){ + if(fieldStr.contains("(") || fieldStr.contains(")")){ + continue; + } + if(!fieldStr.trim().contains(":")){ + continue; + } + //+主交易单类型:string tradeOrderType + String[] fieldArr = fieldStr.trim().split(":"); + FieldBean fieldBean = new FieldBean(); + fieldBean.setDesc(fieldArr[0]); + fieldBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[0])); + fieldBean.setFieldName(fieldArr[1]); + fieldBeanList.add(fieldBean); + } + return fieldBeanList; + } + + /** + * 获取类的方法列表 + * @param elementList + * @return + */ + private List getMethodBeanList(List elementList){ + List methodBeanList = new ArrayList<>(); + for (String fieldStr : elementList){ + + if(!fieldStr.contains("()") && !fieldStr.contains("(") && !fieldStr.contains(")")){ + continue; + } + MethodBean methodBean =new MethodBean(); + + //-创建变更日志: TradeOrderLogBO getTradeOrderLogBO() + if(fieldStr.contains(":")){ + String[] fieldArr = fieldStr.trim().split(":"); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[1])); + methodBean.setDesc(fieldArr[0]); + + String[] arr = fieldArr[1].trim().split(" "); + if(arr.length == 2){ + methodBean.setReturnClass(arr[0]); + methodBean.setMethodName(arr[1]); + }else{ + methodBean.setReturnClass(arr[0]); + methodBean.setMethodName(fieldArr[1].trim().replace(arr[0],"")); + } + }else { + String[] fieldArr = fieldStr.trim().split(" "); + //没有注释--->中文校验 + if(fieldArr.length ==2){ + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldStr.trim().split(" ")[0]); + methodBean.setMethodName(fieldStr.trim().split(" ")[1]); + }else{ + methodBean.setDesc(fieldArr[0]); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldArr[1]); + StringBuilder builder = new StringBuilder(); + for (int i = 2;i elementList, EnumBean enumBean){ + List methodBeanList = new ArrayList<>(); + List enumValueList = new ArrayList<>(); + for (String fieldStr : elementList){ + if(!fieldStr.contains("()") && !fieldStr.contains("(") && !fieldStr.contains(")")){ + continue; + } + + //处理枚举值 + String valueCode = fieldStr.substring(0,fieldStr.indexOf("(")); + if(!StringUtils.isEmpty(valueCode) && !valueCode.contains(" ")){ + enumValueList.add(fieldStr); + continue; + } + + MethodBean methodBean =new MethodBean(); + + //-创建变更日志: TradeOrderLogBO getTradeOrderLogBO() + if(fieldStr.contains(":")){ + String[] fieldArr = fieldStr.trim().split(":"); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[0])); + methodBean.setDesc(fieldArr[0]); + methodBean.setReturnClass(fieldArr[1].trim().split(" ")[0]); + methodBean.setMethodName(fieldArr[1].trim().split(" ")[1]); + }else { + String[] fieldArr = fieldStr.trim().split(" "); + //没有注释--->中文校验 + if(fieldArr.length ==2){ + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldStr.trim().split(" ")[0]); + methodBean.setMethodName(fieldStr.trim().split(" ")[1]); + }else{ + methodBean.setDesc(fieldArr[0]); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldArr[1]); + StringBuilder builder = new StringBuilder(); + for (int i = 2;i readPlantUMLContent(){ + try { + File file = ResourceUtils.getFile("classpath:ddd-plantuml/"+projectTemplateDynamicDDDConfig.getPlantumlFileName()); + return FileUtils.readLines(file,"UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 解析plantUML文件内容 + * @return + */ + public PlantUmlContextBean getPlantUmlContextBean(){ + List contentList = readPlantUMLContent(); + List elementList = new ArrayList<>(); + PlantUmlContextBean plantUmlContextBean = new PlantUmlContextBean(); + + String currentPackage= ""; + //对class,enum,interface进行解析 + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml")){ + continue; + } + + if(str.contains("package")){ + currentPackage = str.trim().replace("package","").replace("{","").trim(); + continue; + } + + if(str.trim().contains("{")){ + elementList.add(str.trim()); + continue; + } + if(str.trim().contains("}")){ + elementList.add(str.trim()); + parseClassElement(elementList,plantUmlContextBean,currentPackage); + elementList.clear(); + continue; + } + elementList.add(str.trim()); + } + + //对类与类的关系进行解析 + Map> relationListMap = new HashMap<>(); + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml") + || str.contains("package") || str.trim().contains("{") || str.trim().contains("}")){ + continue; + } + + Map relationMap = ClassRelationEnum.parseRelation(str); + if(relationMap == null || relationMap.size()<2){ + continue; + } + List relationList = relationListMap.get(relationMap.get("class")); + if(CollectionUtils.isEmpty(relationList)){ + relationList = new ArrayList<>(); + } + relationList.add(relationMap.get("relation")); + relationListMap.put(relationMap.get("class").trim(),relationList); + } + + plantUmlContextBean.getClassBeanMap().forEach((className,classBean)->{ + List relationList = relationListMap.get(className); + if(CollectionUtils.isNotEmpty(relationList)){ + classBean.setRelationClassStr(StringUtils.join(relationList,",")); + } + }); + return plantUmlContextBean; + } + + + /** + * 解析文件内容整体路由 + * @param elementList + * @param plantUmlContextBean + */ + private void parseClassElement(List elementList, PlantUmlContextBean plantUmlContextBean, String currentPackage){ + String classType = getClassType(elementList.get(0)); + if(classType.equals(ClassEnum.CLASS.getClassType())){ + ClassBean classBean = buildClassBean(elementList); + classBean.setPlantUMLPackage(currentPackage); + plantUmlContextBean.addClassBean(classBean); + } + else if(classType.equals(ClassEnum.ENUM.getClassType())){ + EnumBean enumBean = builEnumBean(elementList); + enumBean.setPlantUMLPackage(currentPackage); + plantUmlContextBean.addEnumBean(enumBean); + } + else if(classType.equals(ClassEnum.INTERFACE.getClassType())){ + InterfaceBean interfaceBean = buildInterfaceBean(elementList); + interfaceBean.setPlantUMLPackage(currentPackage); + plantUmlContextBean.addInterfaceBean(interfaceBean); + } + + + } + + + private String getClassType(String ele){ + return ele.split(" ")[0]; + } + + /** + * 解析class类型数据 + * @param elementList + * @return + */ + private ClassBean buildClassBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); + List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); + ClassBean classBean = new ClassBean(); + classBean.setFieldBeanList(fieldBeanList); + classBean.setMethodBeanList(methodBeanList); + classBean.setAuthor(projectTemplateDynamicDDDConfig.getAuthor()); + classBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + classBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + return classBean; + } + + /** + * 解析接口类型数据 + * @param elementList + * @return + */ + private InterfaceBean buildInterfaceBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); + InterfaceBean interfaceBean = new InterfaceBean(); + interfaceBean.setMethodBeanList(methodBeanList); + interfaceBean.setAuthor(projectTemplateDynamicDDDConfig.getAuthor()); + + interfaceBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + interfaceBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + return interfaceBean; + } + + /** + * 解析enum类型数据 + * @param elementList + * @return + */ + private EnumBean builEnumBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); + EnumBean enumBean = new EnumBean(); + enumBean.setFieldBeanList(fieldBeanList); + enumBean.setAuthor(projectTemplateDynamicDDDConfig.getAuthor()); + enumBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + enumBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + dealEnumMethodBeanList(elementList,enumBean); + return enumBean; + } + + /** + * 获取类的属性列表 + * @param elementList + * @return + */ + private List getFieldBeanList(List elementList){ + List fieldBeanList = new ArrayList<>(); + + for (String fieldStr : elementList){ + if(fieldStr.contains("(") || fieldStr.contains(")")){ + continue; + } + if(!fieldStr.trim().contains(":")){ + continue; + } + //+主交易单类型:string tradeOrderType + String[] fieldArr = fieldStr.trim().split(":"); + FieldBean fieldBean = new FieldBean(); + fieldBean.setDesc(fieldArr[0]); + fieldBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[0])); + fieldBean.setFieldName(fieldArr[1]); + fieldBeanList.add(fieldBean); + } + return fieldBeanList; + } + + /** + * 获取类的方法列表 + * @param elementList + * @return + */ + private List getMethodBeanList(List elementList){ + List methodBeanList = new ArrayList<>(); + for (String fieldStr : elementList){ + + if(!fieldStr.contains("()") && !fieldStr.contains("(") && !fieldStr.contains(")")){ + continue; + } + MethodBean methodBean =new MethodBean(); + + //-创建变更日志: TradeOrderLogBO getTradeOrderLogBO() + if(fieldStr.contains(":")){ + String[] fieldArr = fieldStr.trim().split(":"); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[1])); + methodBean.setDesc(fieldArr[0]); + + String[] arr = fieldArr[1].trim().split(" "); + if(arr.length == 2){ + methodBean.setReturnClass(arr[0]); + methodBean.setMethodName(arr[1]); + }else{ + methodBean.setReturnClass(arr[0]); + methodBean.setMethodName(fieldArr[1].trim().replace(arr[0],"")); + } + }else { + String[] fieldArr = fieldStr.trim().split(" "); + //没有注释--->中文校验 + if(fieldArr.length ==2){ + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldStr.trim().split(" ")[0]); + methodBean.setMethodName(fieldStr.trim().split(" ")[1]); + }else{ + methodBean.setDesc(fieldArr[0]); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldArr[1]); + StringBuilder builder = new StringBuilder(); + for (int i = 2;i elementList, EnumBean enumBean){ + List methodBeanList = new ArrayList<>(); + List enumValueList = new ArrayList<>(); + for (String fieldStr : elementList){ + if(!fieldStr.contains("()") && !fieldStr.contains("(") && !fieldStr.contains(")")){ + continue; + } + + //处理枚举值 + String valueCode = fieldStr.substring(0,fieldStr.indexOf("(")); + if(!StringUtils.isEmpty(valueCode) && !valueCode.contains(" ")){ + enumValueList.add(fieldStr); + continue; + } + + MethodBean methodBean =new MethodBean(); + + //-创建变更日志: TradeOrderLogBO getTradeOrderLogBO() + if(fieldStr.contains(":")){ + String[] fieldArr = fieldStr.trim().split(":"); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[0])); + methodBean.setDesc(fieldArr[0]); + methodBean.setReturnClass(fieldArr[1].trim().split(" ")[0]); + methodBean.setMethodName(fieldArr[1].trim().split(" ")[1]); + }else { + String[] fieldArr = fieldStr.trim().split(" "); + //没有注释--->中文校验 + if(fieldArr.length ==2){ + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldStr.trim().split(" ")[0]); + methodBean.setMethodName(fieldStr.trim().split(" ")[1]); + }else{ + methodBean.setDesc(fieldArr[0]); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldArr[1]); + StringBuilder builder = new StringBuilder(); + for (int i = 2;i tableBeanMap; - private Map> columnBeanMap; + private Map> columnBeanMap; private Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); /** @@ -54,9 +54,9 @@ public class TemlateVarService { e.setHumpClassName(humpClassName); String tableName ; if(e.getTableName().contains("_")){ - String [] tableArr = e.getTableName().split("_"); + String[] tableArr = e.getTableName().split("_"); if(isNum(tableArr[tableArr.length - 1])){ - String [] newArr = Arrays.copyOfRange(tableArr, 0, tableArr.length - 1); + String[] newArr = Arrays.copyOfRange(tableArr, 0, tableArr.length - 1); tableName = StringUtils.join(newArr,"_"); }else { tableName = e.getTableName(); @@ -76,7 +76,7 @@ public class TemlateVarService { * 获取加工后的columnBean元数据 * @return */ - private Map> exeGetColumnBeanMap(){ + private Map> exeGetColumnBeanMap(){ String dbName = projectTemplateConfig.getDbName(); List columnBeanList = sqlMapper.getColumnBeanList(dbName); columnBeanList.stream().forEach(e->{ @@ -89,9 +89,9 @@ public class TemlateVarService { e.setColumnUperName(columnUperName); String tableName; if(e.getTableName().contains("_")){ - String [] tableArr = e.getTableName().split("_"); + String[] tableArr = e.getTableName().split("_"); if(isNum(tableArr[tableArr.length - 1])){ - String [] newArr = Arrays.copyOfRange(tableArr, 0, tableArr.length - 1); + String[] newArr = Arrays.copyOfRange(tableArr, 0, tableArr.length - 1); tableName = StringUtils.join(newArr,"_"); }else { tableName = e.getTableName(); @@ -112,7 +112,7 @@ public class TemlateVarService { } }); - Map> stringListMap = columnBeanListNew.stream().collect(Collectors.groupingBy(ColumnBean::getTableName)); + Map> stringListMap = columnBeanListNew.stream().collect(Collectors.groupingBy(ColumnBean::getTableName)); System.out.println("stringListMap = "+JSON.toJSONString(stringListMap)); return stringListMap; } @@ -134,7 +134,7 @@ public class TemlateVarService { if(!tableName.contains("_")){ resultName = tableName; }else { - String [] tableNameArr = tableName.split("_"); + String[] tableNameArr = tableName.split("_"); int length = tableNameArr.length; StringBuilder builder = new StringBuilder(); 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 024bf237be4c989fa0d64edfa7cd50c6f6df7e6b..437470ec896ca6ec9f58aa628c9b81c0c75aab3c 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 @@ -2,11 +2,12 @@ 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.config.AppServiceConfig; import com.coderman.codemaker.config.ProjectTemplateConfig; + import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.utils.Constant; -import com.coderman.codemaker.utils.FreemarkerUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -41,6 +42,8 @@ public class WriteAppModuleService { @Autowired private FreemarkerService freemarkerService; + @Autowired + private WriteDynamicDDDModuleService writeDynamicDDDModuleService; /** * 写mapper xml文件 @@ -50,10 +53,15 @@ public class WriteAppModuleService { */ public void writeMapperXml(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.MAPPER_XML.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.MAPPER_XML.getTempFileName(),content,humpClassName); + + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.MAPPER_XML.getTempFileName()) + .humpClassName(humpClassName).build(); + + writeFileService.writeContent(writeContentBean); } /** @@ -64,10 +72,14 @@ public class WriteAppModuleService { */ public void writeEntity(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.ENTITY.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.ENTITY.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.ENTITY.getTempFileName()) + .humpClassName(humpClassName).build(); + + writeFileService.writeContent(writeContentBean); } /** @@ -78,10 +90,14 @@ public class WriteAppModuleService { */ public void writeDO(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.DATA_OBJECT.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.DATA_OBJECT.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.DATA_OBJECT.getTempFileName()) + .humpClassName(humpClassName).build(); + + writeFileService.writeContent(writeContentBean); } @@ -93,10 +109,14 @@ public class WriteAppModuleService { */ public void writeVO(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.VO.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.VO.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.VO.getTempFileName()) + .humpClassName(humpClassName).build(); + + writeFileService.writeContent(writeContentBean); } /** @@ -107,10 +127,14 @@ public class WriteAppModuleService { */ public void writeDTO(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.DTO.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.DTO.getTempFileName(),content,humpClassName); + + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.DTO.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } /** @@ -121,10 +145,13 @@ public class WriteAppModuleService { */ public void writeBO(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } @@ -136,10 +163,13 @@ public class WriteAppModuleService { */ public void writeMapper(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.MAPPER.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.MAPPER.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.MAPPER.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } /** @@ -150,10 +180,13 @@ public class WriteAppModuleService { */ public void writeService(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.SERVICE.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.SERVICE.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.SERVICE.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } @@ -165,10 +198,13 @@ public class WriteAppModuleService { */ public void writeFacade(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.FACADE.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.FACADE.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.FACADE.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } @@ -180,10 +216,13 @@ public class WriteAppModuleService { */ public void writeFacadeImpl(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.FACADE_IMPL.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.FACADE_IMPL.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.FACADE_IMPL.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } @@ -195,10 +234,13 @@ public class WriteAppModuleService { */ public void writeServiceImpl(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.SERVICE_IMPL.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.SERVICE_IMPL.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.SERVICE_IMPL.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } @@ -209,10 +251,13 @@ public class WriteAppModuleService { */ public void writeBaseController(String content) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.SERVICE_IMPL.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.BASE_CONTROLLER.getTempFileName(),content,null); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.BASE_CONTROLLER.getTempFileName()) + .humpClassName("").build(); + writeFileService.writeContent(writeContentBean); } /** @@ -222,10 +267,13 @@ public class WriteAppModuleService { */ public void writeSpringApplicationContext(String content) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(),content,"SpringApplicationContext.java"); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName()) + .humpClassName("SpringApplicationContext.java").build(); + writeFileService.writeContent(writeContentBean); } @@ -236,10 +284,13 @@ public class WriteAppModuleService { */ public void writeTest(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.TEST.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.TEST.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.TEST.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } /** @@ -249,10 +300,13 @@ public class WriteAppModuleService { */ public void writeApplication(String content) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.APPLICATION.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.APPLICATION.getTempFileName(),content,"Application.java"); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.APPLICATION.getTempFileName()) + .humpClassName("Application.java").build(); + writeFileService.writeContent(writeContentBean); } @@ -263,10 +317,13 @@ public class WriteAppModuleService { */ public void writeFacadeAop(String content) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.APPLICATION.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.FACADE_AOP.getTempFileName(),content,"FacadeServiceAop.java"); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.FACADE_AOP.getTempFileName()) + .humpClassName("FacadeServiceAop.java").build(); + writeFileService.writeContent(writeContentBean); } @@ -278,10 +335,13 @@ public class WriteAppModuleService { */ public void writeController(String content, String humpClassName) { IWriteFileService writeFileService = appServiceConfig.getModuleWriteService(TemplateFileEnum.CONTROLLER.getTempFileName()); - if(writeFileService == null){ + if (writeFileService == null) { return; } - writeFileService.writeContent(TemplateFileEnum.CONTROLLER.getTempFileName(),content,humpClassName); + WriteContentBean writeContentBean = WriteContentBean.builder().content(content) + .templateName(TemplateFileEnum.CONTROLLER.getTempFileName()) + .humpClassName(humpClassName).build(); + writeFileService.writeContent(writeContentBean); } /** @@ -292,73 +352,71 @@ public class WriteAppModuleService { */ public void writeAll(String humpClassName, Map varMap, String fast) { if (StringUtils.isEmpty(fast)) { - fast = "/"+appServiceConfig.getApplicationType()+"/"; + fast = "/" + appServiceConfig.getApplicationType() + "/"; } - String entityContent = freemarkerService.parseTpl(fast+TemplateFileEnum.ENTITY.getTempFileName(), varMap); + String entityContent = freemarkerService.parseTpl(fast + TemplateFileEnum.ENTITY.getTempFileName(), varMap); this.writeEntity(entityContent, humpClassName); - String serviceContent = freemarkerService.parseTpl(fast+TemplateFileEnum.SERVICE.getTempFileName(), varMap); + String serviceContent = freemarkerService.parseTpl(fast + TemplateFileEnum.SERVICE.getTempFileName(), varMap); this.writeService(serviceContent, humpClassName); - String serviceImplContent = freemarkerService.parseTpl(fast+TemplateFileEnum.SERVICE_IMPL.getTempFileName(), varMap); + String serviceImplContent = freemarkerService.parseTpl(fast + TemplateFileEnum.SERVICE_IMPL.getTempFileName(), varMap); this.writeServiceImpl(serviceImplContent, humpClassName); - String mapperXmlContent = freemarkerService.parseTpl(fast+TemplateFileEnum.MAPPER_XML.getTempFileName(), varMap); + String mapperXmlContent = freemarkerService.parseTpl(fast + TemplateFileEnum.MAPPER_XML.getTempFileName(), varMap); this.writeMapperXml(mapperXmlContent, humpClassName); - String mapperContent = freemarkerService.parseTpl(fast+TemplateFileEnum.MAPPER.getTempFileName(), varMap); + String mapperContent = freemarkerService.parseTpl(fast + TemplateFileEnum.MAPPER.getTempFileName(), varMap); this.writeMapper(mapperContent, humpClassName); - String controllerContent = freemarkerService.parseTpl(fast+TemplateFileEnum.CONTROLLER.getTempFileName(), varMap); + String controllerContent = freemarkerService.parseTpl(fast + TemplateFileEnum.CONTROLLER.getTempFileName(), varMap); this.writeController(controllerContent, humpClassName); - String voContent = freemarkerService.parseTpl(fast+TemplateFileEnum.VO.getTempFileName(), varMap); + String voContent = freemarkerService.parseTpl(fast + TemplateFileEnum.VO.getTempFileName(), varMap); this.writeVO(voContent, humpClassName); - String testContent = freemarkerService.parseTpl(fast+TemplateFileEnum.TEST.getTempFileName(), varMap); + String testContent = freemarkerService.parseTpl(fast + TemplateFileEnum.TEST.getTempFileName(), varMap); this.writeTest(testContent, humpClassName); - String boContent = freemarkerService.parseTpl(fast+TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + String boContent = freemarkerService.parseTpl(fast + TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); this.writeBO(boContent, humpClassName); - String dtoContent = freemarkerService.parseTpl(fast+TemplateFileEnum.DTO.getTempFileName(), varMap); + String dtoContent = freemarkerService.parseTpl(fast + TemplateFileEnum.DTO.getTempFileName(), varMap); this.writeDTO(dtoContent, humpClassName); - String facadeContent = freemarkerService.parseTpl(fast+TemplateFileEnum.FACADE.getTempFileName(), varMap); + String facadeContent = freemarkerService.parseTpl(fast + TemplateFileEnum.FACADE.getTempFileName(), varMap); this.writeFacade(facadeContent, humpClassName); - String facadeImplContent = freemarkerService.parseTpl(fast+TemplateFileEnum.FACADE_IMPL.getTempFileName(), varMap); + String facadeImplContent = freemarkerService.parseTpl(fast + TemplateFileEnum.FACADE_IMPL.getTempFileName(), varMap); this.writeFacadeImpl(facadeImplContent, humpClassName); - String doContent = freemarkerService.parseTpl(fast+TemplateFileEnum.DATA_OBJECT.getTempFileName(), varMap); + String doContent = freemarkerService.parseTpl(fast + TemplateFileEnum.DATA_OBJECT.getTempFileName(), varMap); this.writeDO(doContent, humpClassName); } - - /** * 写公共基础服务类 * * @param varMap */ - public void writeCommon(Map varMap,String fast) { + public void writeCommon(Map varMap, String fast) { - String baseControllerContent = freemarkerService.parseTpl(fast+ TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), varMap); + String baseControllerContent = freemarkerService.parseTpl(fast + TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), varMap); this.writeBaseController(baseControllerContent); - String SpringApplicationContextContent = freemarkerService.parseTpl(fast+TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(), varMap); + String SpringApplicationContextContent = freemarkerService.parseTpl(fast + TemplateFileEnum.SPRING_APPLICATION_CONTEXT.getTempFileName(), varMap); this.writeSpringApplicationContext(SpringApplicationContextContent); - String application = freemarkerService.parseTpl(fast+TemplateFileEnum.APPLICATION.getTempFileName(), varMap); + String application = freemarkerService.parseTpl(fast + TemplateFileEnum.APPLICATION.getTempFileName(), varMap); this.writeApplication(application); - String facadeAop = freemarkerService.parseTpl(fast+TemplateFileEnum.FACADE_AOP.getTempFileName(), varMap); + String facadeAop = freemarkerService.parseTpl(fast + TemplateFileEnum.FACADE_AOP.getTempFileName(), varMap); this.writeFacadeAop(facadeAop); } @@ -393,4 +451,17 @@ public class WriteAppModuleService { erPictureService.getErPicture(filePath, tableBeanList); } + /** + * 写dynamicddd模块代码生成 + * + * @param dynamicDDDMap + */ + public void writeDynamicDDD(Map dynamicDDDMap) { + + IWriteFileService writeFileService = appServiceConfig.getDynamicDDDWriteService(); + if (writeFileService == null) { + return; + } + writeDynamicDDDModuleService.writeDynamicDDD(dynamicDDDMap, writeFileService); + } } 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 new file mode 100644 index 0000000000000000000000000000000000000000..026b8a3d4c3666bf5a36c5d9265eeb65761a1998 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/WriteDynamicDDDModuleService.java @@ -0,0 +1,375 @@ +package com.coderman.codemaker.service; + +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 org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Description: + * date: 2021/6/30 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Service +public class WriteDynamicDDDModuleService { + @Autowired + private FreemarkerService freemarkerService; + + /** + * 写dynamicddd模块代码生成 + * @param dynamicDDDMap + */ + public void writeDynamicDDD(Map dynamicDDDMap, IWriteFileService writeFileService){ + + //写bo + List classBeanList = (List)dynamicDDDMap.get("domainbo"); + writeBO(classBeanList,writeFileService); + + + //写valueobject + List valueObjectBeanList = (List)dynamicDDDMap.get("domainvalueobject"); + writeValueObject(valueObjectBeanList,writeFileService); + + //写接口 + List repositoryInterfaceBeanList = (List)dynamicDDDMap.get("repository"); + List gatawayInterfaceBeanList = (List)dynamicDDDMap.get("gataway"); + repositoryInterfaceBeanList.addAll(gatawayInterfaceBeanList); + writeInterfaceAndImpl(repositoryInterfaceBeanList,writeFileService); + + //写枚举 + List enumBeanList = (List)dynamicDDDMap.get("valueobjectenum"); + writeEnum(enumBeanList,writeFileService); + + //写msgbody + List domainMsgBeanList = (List)dynamicDDDMap.get("domainmsg"); + writeMsgBody(domainMsgBeanList,writeFileService); + + //写factory + List domainFactoryBeanList = (List)dynamicDDDMap.get("domainfactory"); + writeFactory(domainFactoryBeanList,writeFileService); + + //写防腐层接口 + List infrastAclInterfaceList = (List)dynamicDDDMap.get("infrastacl"); + writeAclInterfaceAndImpl(infrastAclInterfaceList,writeFileService); + //写防腐层接口需要的参数 + List infrastAclParamClassList = (List)dynamicDDDMap.get("infrastaclparam"); + writeACLParam(infrastAclParamClassList,writeFileService); + + + //写app层的命令服务 + List appCommandClassList = (List)dynamicDDDMap.get("cmd"); + writeAppCommand(appCommandClassList,writeFileService); + + //写app.exe interface + List appExeInterfaceList = (List)dynamicDDDMap.get("exeInterface"); + writeAppExeInterface(appExeInterfaceList,writeFileService); + + //写app.exeImpl + List appExeClassImplList = (List)dynamicDDDMap.get("exeClass"); + writeAppExeImpl(appExeClassImplList,writeFileService); + + + + + } + + /** + * 写BO + * @param classBeanList + * @param writeFileService + */ + private void writeBO(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.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + + /** + * 写BO + * @param classBeanList + * @param writeFileService + */ + private void writeValueObject(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.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.VALUE_OBJECT.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写接口和实现 + * @param repositoryInterfaceBeanList + * @param writeFileService + */ + private void writeInterfaceAndImpl(List repositoryInterfaceBeanList, IWriteFileService writeFileService){ + 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); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.GATAWAY.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + + //写接口实现 + String interfaceImplContent = freemarkerService.parseTplDynamicDDD(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){ + //写枚举 + for (EnumBean enumBean : enumBeanList){ + Map varMap = new HashMap<>(); + varMap.put("class",enumBean); + varMap.put("fields",enumBean.getFieldBeanList()); + varMap.put("methods",enumBean.getMethodBeanList()); + varMap.put("enums",enumBean.getEnumValueList()); + varMap.put("methods",enumBean.getMethodBeanList()); + varMap.put("bodys",enumBean.getConstructMethodBodyList()); + + String enumContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.ENUM.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(enumContent) + .templateName(TemplateFileEnum.ENUM.getTempFileName()) + .humpClassName(enumBean.getClassName()) + .classPackageName(enumBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写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){ + //写factory + for (ClassBean classBean : domainFactoryBeanList){ + 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.parseTplDynamicDDD(TemplateFileEnum.FACTORY.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(boContent) + .templateName(TemplateFileEnum.FACTORY.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + + /** + * 写接口和实现 + * @param repositoryInterfaceBeanList + * @param writeFileService + */ + private void writeAclInterfaceAndImpl(List repositoryInterfaceBeanList, IWriteFileService writeFileService){ + 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.ACL.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.ACL.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + + //写接口实现 + String interfaceImplContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY_IMPL.getTempFileName(), varMap); + WriteContentBean writeImplBean = WriteContentBean.builder() + .content(interfaceImplContent) + .templateName(TemplateFileEnum.GATAWAY_IMPL.getTempFileName()) + .humpClassName(interfaceBean.getClassName()) + .classPackageName(interfaceBean.getPackageName()) + .build(); + writeFileService.writeContent(writeImplBean); + } + } + + + /** + * 写acl.param + * @param classBeanList + * @param writeFileService + */ + private void writeACLParam(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()); + //使用BO的模板 + String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder() + .content(boContent) + .templateName(TemplateFileEnum.ACL_PARAM.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + + /** + * 写app.cmd + * @param classBeanList + * @param writeFileService + */ + private void writeAppCommand(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()); + //使用BO的模板 + String boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.BUSINESS_OBJECT.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder() + .content(boContent) + .templateName(TemplateFileEnum.CMD.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写app.exe--->class 接口实现 + * @param classBeanList + * @param writeFileService + */ + private void writeAppExeImpl(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.parseTplDynamicDDD(TemplateFileEnum.EXE_IMPL.getTempFileName(), varMap); + if(StringUtils.isEmpty(classBean.getRelationClassStr())){ + boContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.EXE_ABSTRACT.getTempFileName(), varMap); + } + + WriteContentBean writeContentBean = WriteContentBean.builder() + .content(boContent) + .templateName(TemplateFileEnum.EXE.getTempFileName()) + .humpClassName(classBean.getClassName()) + .classPackageName(classBean.getPackageName()) + .build(); + writeFileService.writeContent(writeContentBean); + } + } + + /** + * 写app.exe--->interface 接口 + * @param interfaceBeanList + * @param writeFileService + */ + private void writeAppExeInterface(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()); + + //借用gataway的模板 + String interfaceContent = freemarkerService.parseTplDynamicDDD(TemplateFileEnum.GATAWAY.getTempFileName(), varMap); + WriteContentBean writeContentBean = WriteContentBean.builder().content(interfaceContent) + .templateName(TemplateFileEnum.EXE.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 8f77dfee7c72f55aba0965e5c2bcd4b4332a9db2..593c478781d8e73b5ff42f79a675f28680177b27 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,8 @@ package com.coderman.codemaker.service; -import com.coderman.codemaker.bean.ColumnBean; -import com.coderman.codemaker.bean.TableBean; import com.coderman.codemaker.config.ProjectTemplateConfig; +import com.coderman.codemaker.dbergenerate.bean.ColumnBean; +import com.coderman.codemaker.dbergenerate.bean.TableBean; import com.coderman.codemaker.enums.TemplateFileEnum; import com.coderman.codemaker.utils.Constant; import com.coderman.codemaker.utils.FreemarkerUtils; @@ -249,7 +249,7 @@ public class WriteFileService { * @param humpClassName * @param varMap */ - public void writeAll(String humpClassName, Map varMap,String fast) { + public void writeAll(String humpClassName, Map varMap, String fast) { String entityContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.ENTITY.getTempFileName(), varMap); this.writeEntity(entityContent, humpClassName); @@ -283,7 +283,7 @@ public class WriteFileService { * * @param varMap */ - public void writeCommon(Map varMap,String fast) { + public void writeCommon(Map varMap, String fast) { String baseControllerContent = FreemarkerUtils.parseTpl(fast+TemplateFileEnum.BASE_CONTROLLER.getTempFileName(), varMap); this.writeBaseController(baseControllerContent); @@ -295,20 +295,21 @@ public class WriteFileService { } + /** * 整合e-r图生成工具 * * @param tableBeanMap * @param columnBeanListMap */ - public void writeERPicture(Map tableBeanMap, Map> columnBeanListMap) { + public void writeERPicture(Map tableBeanMap, Map> columnBeanListMap) { String filePath = projectTemplateConfig.getOutPath() + Constant.ER_PICTURE + "/" + projectTemplateConfig.getDbName() + ".puml"; List tableBeanList = new ArrayList<>(); tableBeanMap.forEach((k, v) -> { com.coderman.codemaker.dbergenerate.bean.TableBean tableBean = new com.coderman.codemaker.dbergenerate.bean.TableBean(); tableBean.setTableComment(v.getTableComment()); tableBean.setTableName(v.getTableName()); - List columnBeanList = columnBeanListMap.get(k); + List columnBeanList = columnBeanListMap.get(k); List columnBeanList1 = new ArrayList<>(); columnBeanList.forEach(columnBean -> { com.coderman.codemaker.dbergenerate.bean.ColumnBean columnBean1 = new com.coderman.codemaker.dbergenerate.bean.ColumnBean(); @@ -326,4 +327,5 @@ public class WriteFileService { erPictureService.getErPicture(filePath, tableBeanList); } + } diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/plantuml/PlantUMLService.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/plantuml/PlantUMLService.java new file mode 100644 index 0000000000000000000000000000000000000000..4f2606b6bda64722c627ba02d058d4f7abe28704 --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/plantuml/PlantUMLService.java @@ -0,0 +1,52 @@ +package com.coderman.codemaker.service.plantuml; + +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.bean.plantuml.PackageBean; + +import java.util.List; + +/** + * Description: + * date: 2021/7/2 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public interface PlantUMLService { + /** + * 读取plantUML中的class信息 + * @param packageName 可选值,如果不为空则基于包模式解析,否则基于类模式 + * @return + */ + List readClassBeanList(String packageName); + + /** + * 读取plantUML中的enum信息 + * @param packageName 可选值,如果不为空则基于包模式解析,否则基于枚举模式 + * @return + */ + List readEnumBeanList(String packageName); + + /** + * 读取plantUMl中的interface信息 + * @param packageName 可选值,如果不为空则基于包模式解析,否则基于包模式 + * @return + */ + List readInterfaceBeanList(String packageName); + + /** + * 获取plantuml中的所有包列表 + * @return + */ + List getPackageList(); + + /** + * 通过package模式读取解析plantuml内容 + * @return + */ + List readPacakge(); + +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/plantuml/PlantUMLServiceImpl.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/plantuml/PlantUMLServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a077e16bf921e2d03f7b4331d8b8778ce99b82fc --- /dev/null +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/plantuml/PlantUMLServiceImpl.java @@ -0,0 +1,380 @@ +package com.coderman.codemaker.service.plantuml; + +import com.coderman.codemaker.bean.plantuml.*; +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 org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Description: + * date: 2021/7/2 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Service +public class PlantUMLServiceImpl implements PlantUMLService { + + @Autowired + private ProjectTemplateDynamicDDDConfig projectTemplateDynamicDDDConfig; + + private List contentList; + + + private PlantUmlContextBean plantUmlContextBean; + + public List getContentList() { + return contentList; + } + + public void setContentList(List contentList) { + this.contentList = contentList; + } + + @Override + public List readClassBeanList(String packageName) { + return null; + } + + @Override + public List readEnumBeanList(String packageName) { + return null; + } + + @Override + public List readInterfaceBeanList(String packageName) { + return null; + } + + @Override + public List getPackageList() { + return null; + } + + @Override + public List readPacakge() { + return null; + } + + /** + * 读取plantUMl文件 + * @return + */ + private List readPlantUMLContent(){ + try { + File file = ResourceUtils.getFile("classpath:ddd-plantuml/"+projectTemplateDynamicDDDConfig.getPlantumlFileName()); + return FileUtils.readLines(file,"UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 解析plantUML文件内容 + * @return + */ + private void getPlantUmlContextBean(){ + List contentList = readPlantUMLContent(); + List elementList = new ArrayList<>(); + PlantUmlContextBean plantUmlContextBean = new PlantUmlContextBean(); + + String currentPackage= ""; + //对class,enum,interface进行解析 + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml") || str.contains("package")){ + continue; + } + + if(str.contains("package")){ + currentPackage = str.trim().replace("package","").replace("{","").trim(); + continue; + } + + if(str.trim().contains("{")){ + elementList.add(str.trim()); + continue; + } + if(str.trim().contains("}")){ + elementList.add(str.trim()); + parseClassElement(elementList,plantUmlContextBean,currentPackage); + elementList.clear(); + continue; + } + elementList.add(str.trim()); + } + + //对类与类的关系进行解析 + Map> relationListMap = new HashMap<>(); + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml") + || str.contains("package") || str.trim().contains("{") || str.trim().contains("}")){ + continue; + } + + Map relationMap = ClassRelationEnum.parseRelation(str); + if(relationMap == null || relationMap.size()<2){ + continue; + } + List relationList = relationListMap.get(relationMap.get("class")); + if(CollectionUtils.isEmpty(relationList)){ + relationList = new ArrayList<>(); + } + relationList.add(relationMap.get("relation")); + relationListMap.put(relationMap.get("class").trim(),relationList); + } + + plantUmlContextBean.getClassBeanMap().forEach((className,classBean)->{ + List relationList = relationListMap.get(className); + if(CollectionUtils.isNotEmpty(relationList)){ + classBean.setRelationClassStr(StringUtils.join(relationList,",")); + } + }); + + this.plantUmlContextBean = plantUmlContextBean; + } + + + /** + * 解析文件内容整体路由 + * @param elementList + * @param plantUmlContextBean + */ + private void parseClassElement(List elementList, PlantUmlContextBean plantUmlContextBean, String currentPackage){ + String classType = getClassType(elementList.get(0)); + if(classType.equals(ClassEnum.CLASS.getClassType())){ + ClassBean classBean = buildClassBean(elementList); + classBean.setPlantUMLPackage(currentPackage); + plantUmlContextBean.addClassBean(classBean); + } + else if(classType.equals(ClassEnum.ENUM.getClassType())){ + EnumBean enumBean = builEnumBean(elementList); + enumBean.setPlantUMLPackage(currentPackage); + plantUmlContextBean.addEnumBean(enumBean); + } + else if(classType.equals(ClassEnum.INTERFACE.getClassType())){ + InterfaceBean interfaceBean = buildInterfaceBean(elementList); + interfaceBean.setPlantUMLPackage(currentPackage); + plantUmlContextBean.addInterfaceBean(interfaceBean); + } + + + } + + + private String getClassType(String ele){ + return ele.split(" ")[0]; + } + + /** + * 解析class类型数据 + * @param elementList + * @return + */ + private ClassBean buildClassBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); + List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); + ClassBean classBean = new ClassBean(); + classBean.setFieldBeanList(fieldBeanList); + classBean.setMethodBeanList(methodBeanList); + classBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + classBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + return classBean; + } + + /** + * 解析接口类型数据 + * @param elementList + * @return + */ + private InterfaceBean buildInterfaceBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List methodBeanList = getMethodBeanList(elementList.subList(1,elementList.size())); + InterfaceBean interfaceBean = new InterfaceBean(); + interfaceBean.setMethodBeanList(methodBeanList); + interfaceBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + interfaceBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + return interfaceBean; + } + + /** + * 解析enum类型数据 + * @param elementList + * @return + */ + private EnumBean builEnumBean(List elementList ){ + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List fieldBeanList = getFieldBeanList(elementList.subList(1,elementList.size())); + EnumBean enumBean = new EnumBean(); + enumBean.setFieldBeanList(fieldBeanList); + enumBean.setClassName(classMetaInfoArr.split("-")[1].replace("\"","")); + enumBean.setClassDesc(classMetaInfoArr.split("-")[0].replace("\"","")); + dealEnumMethodBeanList(elementList,enumBean); + return enumBean; + } + + /** + * 获取类的属性列表 + * @param elementList + * @return + */ + private List getFieldBeanList(List elementList){ + List fieldBeanList = new ArrayList<>(); + + for (String fieldStr : elementList){ + if(fieldStr.contains("(") || fieldStr.contains(")")){ + continue; + } + if(!fieldStr.trim().contains(":")){ + continue; + } + //+主交易单类型:string tradeOrderType + String[] fieldArr = fieldStr.trim().split(":"); + FieldBean fieldBean = new FieldBean(); + fieldBean.setDesc(fieldArr[0]); + fieldBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[0])); + fieldBean.setFieldName(fieldArr[1]); + fieldBeanList.add(fieldBean); + } + return fieldBeanList; + } + + /** + * 获取类的方法列表 + * @param elementList + * @return + */ + private List getMethodBeanList(List elementList){ + List methodBeanList = new ArrayList<>(); + for (String fieldStr : elementList){ + + if(!fieldStr.contains("()") && !fieldStr.contains("(") && !fieldStr.contains(")")){ + continue; + } + MethodBean methodBean =new MethodBean(); + + //-创建变更日志: TradeOrderLogBO getTradeOrderLogBO() + if(fieldStr.contains(":")){ + String[] fieldArr = fieldStr.trim().split(":"); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[1])); + methodBean.setDesc(fieldArr[0]); + + String[] arr = fieldArr[1].trim().split(" "); + if(arr.length == 2){ + methodBean.setReturnClass(arr[0]); + methodBean.setMethodName(arr[1]); + }else{ + methodBean.setReturnClass(arr[0]); + methodBean.setMethodName(fieldArr[1].trim().replace(arr[0],"")); + } + }else { + String[] fieldArr = fieldStr.trim().split(" "); + //没有注释--->中文校验 + if(fieldArr.length ==2){ + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldStr.trim().split(" ")[0]); + methodBean.setMethodName(fieldStr.trim().split(" ")[1]); + }else{ + methodBean.setDesc(fieldArr[0]); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldArr[1]); + StringBuilder builder = new StringBuilder(); + for (int i = 2;i elementList, EnumBean enumBean){ + List methodBeanList = new ArrayList<>(); + List enumValueList = new ArrayList<>(); + for (String fieldStr : elementList){ + if(!fieldStr.contains("()") && !fieldStr.contains("(") && !fieldStr.contains(")")){ + continue; + } + + //处理枚举值 + String valueCode = fieldStr.substring(0,fieldStr.indexOf("(")); + if(!StringUtils.isEmpty(valueCode) && !valueCode.contains(" ")){ + enumValueList.add(fieldStr); + continue; + } + + MethodBean methodBean =new MethodBean(); + + //-创建变更日志: TradeOrderLogBO getTradeOrderLogBO() + if(fieldStr.contains(":")){ + String[] fieldArr = fieldStr.trim().split(":"); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldArr[0])); + methodBean.setDesc(fieldArr[0]); + methodBean.setReturnClass(fieldArr[1].trim().split(" ")[0]); + methodBean.setMethodName(fieldArr[1].trim().split(" ")[1]); + }else { + String[] fieldArr = fieldStr.trim().split(" "); + //没有注释--->中文校验 + if(fieldArr.length ==2){ + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldStr.trim().split(" ")[0]); + methodBean.setMethodName(fieldStr.trim().split(" ")[1]); + }else{ + methodBean.setDesc(fieldArr[0]); + methodBean.setVisibility(VisibilityEnum.getVisibilityStr(fieldStr.trim())); + methodBean.setReturnClass(fieldArr[1]); + StringBuilder builder = new StringBuilder(); + for (int i = 2;i getRegistVarMap() { + PlantUmlContextBean plantUmlContextBean = readFileService.getPlantUmlContextBean(); + 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); + + Map map = new HashMap<>(); + + map.put("domainbo",domainBoElementBean.getClassBeanList()); + map.put("domainvalueobject",valueObjectElementBean.getClassBeanList()); + map.put("valueobjectenum",valueObjectElementBean.getEnumBeanList()); + map.put("repository",repositoryElementBean.getInterfaceBeanList()); + map.put("gataway",gatawayElementBean.getInterfaceBeanList()); + map.put("domainmsg",domainMsgBodyElementBean.getClassBeanList()); + map.put("domainfactory",factoryElementBean.getClassBeanList()); + map.put("infrastacl",infrastAclElementBean.getInterfaceBeanList()); + map.put("infrastaclparam",infrastAclElementBean.getClassBeanList()); + map.put("cmd",commandElementBean.getClassBeanList()); + map.put("exeClass",executorElementBean.getClassBeanList()); + map.put("exeInterface",executorElementBean.getInterfaceBeanList()); + + return map; + } +} diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/EntityVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java similarity index 85% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/EntityVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java index 0a14f17288f9b6e33d164c1bb57a871747de600b..58660ac409b126df243c3d2e605a09aacbf30277 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/EntityVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/EntityVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/MapperVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/MapperVarRegistry.java similarity index 85% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/MapperVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/MapperVarRegistry.java index ab6d6b2d4adbed7bae8e776cb571de1af2b11879..1b7f0fe2c4ce03d54832789462cbb51caac73bd3 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/MapperVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/MapperVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/MapperXmlVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/MapperXmlVarRegistry.java similarity index 94% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/MapperXmlVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/MapperXmlVarRegistry.java index aa21e5d4032f8f0f0dcbb8fe3aa92f8c1bdb5ead..8a3c82afd6d4018e46554218f72609d2ff79a6fd 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/MapperXmlVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/MapperXmlVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/PomVarRegsitry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/PomVarRegsitry.java similarity index 73% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/PomVarRegsitry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/PomVarRegsitry.java index d9724e4c4e88e0c3bc65b8f0474ce0a42b619718..608ba0bf9b2bf94d5e811a4a4e84e5d601b23ffc 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/PomVarRegsitry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/PomVarRegsitry.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/java/com/coderman/codemaker/service/ServiceImplVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/ServiceImplVarRegistry.java similarity index 85% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/ServiceImplVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/ServiceImplVarRegistry.java index 175a227c4581f1f332350fe5f92bb2a609cec893..5df85357deb93181fa68f9286a2033993ad3221a 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/ServiceImplVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/ServiceImplVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/ServiceVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/ServiceVarRegistry.java similarity index 85% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/ServiceVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/ServiceVarRegistry.java index 0608a661d825f540b394ac1c680afc713325e443..1892a8f06a60b1a5d1007737175b3d06edd6b7b4 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/ServiceVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/ServiceVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/TestVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/TestVarRegistry.java similarity index 85% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/TestVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/TestVarRegistry.java index b0920583dbc43a89095c40577b4ae1506a14601a..40e26393f8ca9eff7525e8aa26ecda89743b5ffe 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/TestVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/TestVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/java/com/coderman/codemaker/service/VoVarRegistry.java b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/VoVarRegistry.java similarity index 85% rename from codemaker-core/src/main/java/com/coderman/codemaker/service/VoVarRegistry.java rename to codemaker-core/src/main/java/com/coderman/codemaker/service/registry/VoVarRegistry.java index 3eef5a23376af145096c2c15ac03acc572dc1796..558dbb8612a91a9a63125db745d2ff5cdf4059f3 100644 --- a/codemaker-core/src/main/java/com/coderman/codemaker/service/VoVarRegistry.java +++ b/codemaker-core/src/main/java/com/coderman/codemaker/service/registry/VoVarRegistry.java @@ -1,7 +1,9 @@ -package com.coderman.codemaker.service; +package com.coderman.codemaker.service.registry; import com.coderman.codemaker.bean.ColumnBean; import com.coderman.codemaker.bean.TableBean; +import com.coderman.codemaker.service.AbstractVarRegistry; +import com.coderman.codemaker.service.TemlateVarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/codemaker-core/src/main/resources/application.properties b/codemaker-core/src/main/resources/application.properties index d5f8ab046b8666d962e4e6f1270996a72cd2c01a..d9df9e3085c7f84407b8a0d05f5a440b20d1d0fc 100644 --- a/codemaker-core/src/main/resources/application.properties +++ b/codemaker-core/src/main/resources/application.properties @@ -19,12 +19,6 @@ spring.freemarker.settings.default_encoding=UTF-8 spring.freemarker.settings.classic_compatible=true server.port=8099 -management.port=8073 - -# 跨域 -endpoints.cors.allowed-origins=http://127.0.0.1:8083 -endpoints.cors.allowed-methods=GET,POST - #数据库配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver @@ -38,6 +32,5 @@ mybatis.mapper-locations=classpath:mapper/*.xml #配置模型路径 mybatis.type-aliases-package=com.coderman.codemaker.bean spring.application.name=codemaker -#nacos.discovery.server-addr=127.0.0.1:8848 #生成的应用类型,支持springboot,dubbo,cola application.type=dubbo \ 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 new file mode 100644 index 0000000000000000000000000000000000000000..ac34da578e30ccbc52a5e447132527c5c78bc0e1 --- /dev/null +++ b/codemaker-core/src/main/resources/ddd-plantuml/CommonAuth.puml @@ -0,0 +1,147 @@ +@startuml + + +package domain.bo { + + class "用户组-UserGroupBO" as UserBO{ + 组名:String groupName + } + + class "用户信息-UserBO" as UserBO{ + 用户名:String userName + } + + class "角色-RoleBO" as RoleBO{ + 角色名称:String roleName + } + + + class "权限-AuthorityBO" as AuthorityBO{ + 权限类型:Integer authorityType + } + + class "数据权限-DataAuthorityBO" as DataAuthorityBO { + 系统标示:String systemName + 表名:String tableName + 字段名:String columnName + } + + class "系统菜单权限-SystemAuthorityBO" as SystemAuthorityBO{ + 系统标示:String systemName + 功能:String funcName + 菜单:String categoryName + 按钮:String menuName + } + + class "行政权限-AdminAuthorityBO" as AdminAuthorityBO { + 组织部门:Long departmentId + 城市:Long cityId + 职位:Long jobId + } + class "系统设置-SystemConfig" as SystemConfig{ + 变量名:String varName + 变量描述:String varDesc + 变量值:String value + } + + AuthorityBO <|-- DataAuthorityBO + AdminAuthorityBO --|> AuthorityBO + SystemAuthorityBO --|> AuthorityBO + +} + + +package domain.msgbody { + +} + +package domain.gataway { + +} + + +package "领域工厂服务包-domain.factory" { + +} + +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 "增加用户组命令-AddUserGroupCmd" as AddUserGroupCmd{ + 组名:String groupName + 用户ID:Long userId + } + + class "增加用户命令-AddUserCmd" as AddUserCmd{ + 用户名:String userName + 用户ID:Long userId + 所属组织:Long departmentId + + } + + class "增加用户权限-AddUserAuthCmd" as AddUserAuthCmd{ + 用户ID:Long userId + 权限类型:int authorityType + 权限数据内容:String json + } + + class "更新用户权限-UpdateUserAuthCmd" as UpdateUserAuthCmd{ + 用户ID:Long userId + 角色ID:Long roleId + 权限数据内容:String json + } + + AddUserRoleCmd --|> AbstractCmd + AddUserGroupCmd --|> AbstractCmd + AddUserCmd --|> AbstractCmd + AddUserAuthCmd --|> AbstractCmd + UpdateUserAuthCmd --|> AbstractCmd + +} + + +package app.exe { + + interface "命令执行接口-CmdExeService" as CmdExeService{ + 命令执行入口:String exe(AbstractCmd abstractCmd) + } + + class "用户组cmd处理类-UserGroupCmdExe" as UserGroupCmdExe{ + + } + + class "用户cmd处理类-UserCmdExe" as UserCmdExe{ + + } + + class "用户权限cmd处理类-UserAuthCmdExe" as UserAuthCmdExe{ + 用户ID:Long userId + 权限类型:int authorityType + 权限数据内容:String json + } + + + + UserGroupCmdExe ..|> CmdExeService + UserCmdExe ..|> CmdExeService + UserAuthCmdExe ..|> CmdExeService + +} + + +@enduml \ No newline at end of file diff --git a/codemaker-core/src/main/resources/ddd-plantuml/CommonAuthWithPackage.puml b/codemaker-core/src/main/resources/ddd-plantuml/CommonAuthWithPackage.puml new file mode 100644 index 0000000000000000000000000000000000000000..dbc7ceb7f491abbb1e196aec02ca26110de21930 --- /dev/null +++ b/codemaker-core/src/main/resources/ddd-plantuml/CommonAuthWithPackage.puml @@ -0,0 +1,69 @@ +@startuml + + +package com.infosys.authplat.domain.bo { + + class "用户组-UserGroupBO" as UserBO{ + 组名:String groupName + } + + class "用户信息-UserBO" as UserBO{ + 用户名:String userName + } + + class "角色-RoleBO" as RoleBO{ + 角色名称:String roleName + } + + + class "权限-AuthorityBO" as AuthorityBO{ + 权限类型:Integer authorityType + } + + class "数据权限-DataAuthorityBO" as DataAuthorityBO { + 系统标示:String systemName + 表名:String tableName + 字段名:String columnName + } + + class "系统菜单权限-SystemAuthorityBO" as SystemAuthorityBO{ + 系统标示:String systemName + 功能:String funcName + 菜单:String categoryName + 按钮:String menuName + } + + class "行政权限-AdminAuthorityBO" as AdminAuthorityBO { + 组织部门:Long departmentId + 城市:Long cityId + 职位:Long jobId + } + + AuthorityBO <|-- DataAuthorityBO + AdminAuthorityBO --|> AuthorityBO + SystemAuthorityBO --|> AuthorityBO + +} + + +package com.infosys.authplat.domain.msgbody { + +} + +package com.infosys.authplat.domain.gataway { + +} + + +package "领域工厂服务包-com.infosys.authplat.domain.factory" { + +} + +package "防腐层包-com.infosys.authplat.infrast.acl" as com.infosys.authplat.infrast.acl { + interface "部门查询服务适配器-DepartmentServiceAdapter" as DepartmentServiceAdapter{ + 查询所有有效的部门: List queryAllDepartment(DepartmentQueryDTO queryDto) + 查询子部门: List queryDepartmentsList(Long pId) + } +} + +@enduml \ No newline at end of file diff --git a/codemaker-core/src/main/resources/ddd-plantuml/TradeOrderDomain.puml b/codemaker-core/src/main/resources/ddd-plantuml/TradeOrderDomain.puml new file mode 100644 index 0000000000000000000000000000000000000000..7aa69a25b23c8829277cf60a6e9a8c85e69a8fb7 --- /dev/null +++ b/codemaker-core/src/main/resources/ddd-plantuml/TradeOrderDomain.puml @@ -0,0 +1,109 @@ +@startuml + + + +enum "交易单类型-OrderTypeEnum" as OrderTypeEnum{ + BILL_ORDER("bill_order","账单"), + TRADE_ORDER("trade_order","主交易单"), + TRADE_SUB_ORDER("trade_sub_order","子交易单"), + TRADE_PAYMENT("trade_payment_order","支付单"); + + 交易单code:String code + 交易单描述:String desc + static OrderTypeEnum getByCode(String code) +} + + + +package com.xxx.xx.bo { + class "主交易单-tradeOrderBO" as tradeOrderBO{ + -主交易单code:String tradeOrderCode + -主交易单类型:String tradeOrderType + #主交易单状态:int status + #主业务单号:String mainBizOrderCode + -创建变更日志:TradeOrderLogBO buildTradeOrderLogBO() + } + + class "子交易单-tradeSubOrderBO" as tradeSubOrderBO{ + 子交易单code:String subOrderCode + 子交易单类型:String subOrderType + 子交易单状态: int status + 业务订单编号: String bizOrderCode + 主交易单code: String tradeOrderCode + TradeOrderLogBO buildTradeOrderLogBO() + } + + + class "交易账单-TradeBillOrderBO" as TradeBillOrderBO { + 账单号:String billOrderCode + 账单金额:Long billAmount + 关联的子交易单列表:List tradeSubOrderBOList + TradeOrderLogBO buildTradeOrderLogBO() + } + + class "账单与支付单关系-tradeBillPaymentBO" as tradeBillPaymentBO { + 账单号:String billOrderCode + 支付交易单号:String paymentOrderCode + 支付交易单金额:Long paymentAmount + 已支付金额:Long paidAmount + 签名:String sign + 支付交易单状态:int status + TradeOrderLogBO buildTradeOrderLogBO() + } + + class "单据操作变更日志-tradeOrderLogBO" as tradeOrderLogBO{ + 单据类型:String orderType + 操作类型:String operationType + 单据编号:String orderCode + 操作前状态:int beforeStatus + 操作后状态:int afterStatus + 操作前单据快照:String beforeSnapShotJson + 操作后单据快照:String afterSnapShotJson + } + +} + + +package com.xxx.xx.msgbody { + class "主交易单状态变更消息体-tradeOrderStatusChangeMsgBody" as TradeOrderStatusChangeMsgBody{ + -主交易单code:String tradeOrderCode + #主交易单状态:int status + #主交易单状态描述:String statusStr + #主业务单号:String mainBizOrderCode + } + + class "支付结果消息-paymentResultMsgBody" as PaymentResultMsgBody{ + -支付单号:String paymentOrderCode + #支付单状态:int status + #支付单状态描述:String statusStr + #支付金额:long paidAmount + } +} + +package com.xxx.xx.gataway { + interface "交易单仓库服务-TradeOrderRepository" as TradeOrderRepository{ + 创建主交易单 String createMainOrder(TradeOrderBO tradeOrderBO) + 创建子交易单 String createSubOrder(TradeSubOrderBO tradeSubOrderBO) + 创建账单 String createBillOrder(TradeBillOrderBO tradeBillBO) + 创建支付单 TradeBillPaymentBO createPaymentOrder(TradeBillPaymentBO tradeBillPaymentBO) + } + + interface "交易单查询服务-TradeOrderQueryGataway" as TradeOrderQueryGataway{ + 查询主交易单 TradeOrderBO queryMainOrder(String orderCode) + 查询子交易单 TradeSubOrderBO querySubOrder(String subOrderCode) + 查询账单 TradeBillOrderBO queryBillOrder(String billOrderCode) + 查询支付单 TradeBillPaymentBO queryPaymentOrder(String paymentOrderCode) + } +} + + +package com.xxx.xx.factory { + class "单据操作日志工厂-TradeOrderLogFactory" as TradeOrderLogFactory{ + 保存单据操作日志 String createTradeOrderLog(TradeOrderLogBO tradeOrderLogBO) + 获取某一条单据的变更历史 List getOrderLogList(String orderType,String orderCode) + } +} + + + +@enduml \ No newline at end of file diff --git a/codemaker-core/src/main/resources/projecttemplate-dubbo.properties b/codemaker-core/src/main/resources/projecttemplate-dubbo.properties index ed227136c60f6b3048ef65522856c51780c0cf7f..58be1d121125ce6aa3865e6ddfa1c2d89f4040c6 100644 --- a/codemaker-core/src/main/resources/projecttemplate-dubbo.properties +++ b/codemaker-core/src/main/resources/projecttemplate-dubbo.properties @@ -1,13 +1,14 @@ #目标工程根包名称 -dubbo.global.package=com.lightsnail.snailapp.usercrm +dubbo.global.package=com.snail.school.manager #作者 dubbo.global.author=fanchunshuai #数据库名称 -dubbo.global.dbName=snail_app_user_crm +dubbo.global.dbName=school_manager -dubbo.global.applicationName=snailapp-usercrm +dubbo.global.applicationName=school-manager -#目标工程输出目录,这里填写对应的codemaker-web工程的绝对路径 -dubbo.code.outpath.dubbbo-common=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dubbo\\dubbbo-common -dubbo.code.outpath.dubbbo-api=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dubbo\\dubbo-api -dubbo.code.outpath.dubbbo-core=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dubbo\\dubbo-core +#目标工程输出目录,这里填写对应的工程的绝对路径 +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 +#目标工程输出目录,这里填写对应的工程的绝对路径 diff --git a/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties b/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties new file mode 100644 index 0000000000000000000000000000000000000000..36c3645b086a077c080a183b11ab25c9a677417e --- /dev/null +++ b/codemaker-core/src/main/resources/projecttemplate-dynamicddd.properties @@ -0,0 +1,9 @@ +#目标工程根包名称 +dynamicddd.global.package=com.lightsnail.snailapp.usercrm +#作者 +dynamicddd.global.author=fanchunshuai + +#目标工程输出目录,这里填写对应的codemaker-dynamicddd工程的绝对路径 +dynamicddd.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-dynamicddd +#领域plantUML 类图 +dynamicddd.domain.plantuml=CommonAuth.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 31711f88b2e19ee9a70635d02adf5dde9f21bbb3..2aa23d2f132c4eb63b69f59d49f6d41823989bf0 100644 --- a/codemaker-core/src/main/resources/projecttemplate-springboot.properties +++ b/codemaker-core/src/main/resources/projecttemplate-springboot.properties @@ -1,19 +1,14 @@ #目标工程根包名称 -codemaker.global.package=com.lightsnail.schoolmanager +codemaker.global.package=com.snail.school.manager #作者 codemaker.global.author=fanchunshuai #数据库名称 -codemaker.global.dbName=snail_app_user_crm +codemaker.global.dbName=school_manager #项目名称 -codemaker.pom.projectName=snail_app_user_crm +codemaker.pom.projectName=school_manager #maven坐标-GAV -codemaker.pom.groupId=com.lightsnail.schoolmanager +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-web - -codemaker.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-springboot - -#引用的springboot版本 -codemaker.spring.parentversion=2.3.1.RELEASE \ No newline at end of file +codemaker.code.outpath=E:\\workspace\\tianhua-workspace\\code-maker\\codemaker-springboot \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dubbo/dto.ftl b/codemaker-core/src/main/resources/template/dubbo/dto.ftl index 620cb3bb8328b66bc9c9a7822bef1535cf53c92d..12465ba0cc11a90cdf0a02265ce52772ceeab0ac 100644 --- a/codemaker-core/src/main/resources/template/dubbo/dto.ftl +++ b/codemaker-core/src/main/resources/template/dubbo/dto.ftl @@ -4,6 +4,8 @@ import java.util.Date; import java.math.BigDecimal; import lombok.Data; import lombok.ToString; +import java.io.Serializable; + /** * @Description:${table.tableComment}DTO类 @@ -13,7 +15,7 @@ import lombok.ToString; */ @Data @ToString -public class ${table.humpClassName}DTO{ +public class ${table.humpClassName}DTO implements Serializable { <#list columns as column> /** ${column.columnComment} **/ diff --git a/codemaker-core/src/main/resources/template/dynamicddd/abstractexe.ftl b/codemaker-core/src/main/resources/template/dynamicddd/abstractexe.ftl new file mode 100644 index 0000000000000000000000000000000000000000..32d6d57cb6824b6e6c78eb7f8005e4cb0c33be41 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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/dynamicddd/acl.ftl b/codemaker-core/src/main/resources/template/dynamicddd/acl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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/dynamicddd/bo.ftl b/codemaker-core/src/main/resources/template/dynamicddd/bo.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5c2f634e6bcd418c79556b914b5b2c9c4701aff5 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/bo.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/enum.ftl b/codemaker-core/src/main/resources/template/dynamicddd/enum.ftl new file mode 100644 index 0000000000000000000000000000000000000000..7b24bb766f59dea1ee7b1d8c16c77e5da2656639 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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} + */ + ${method.visibility} ${method.returnClass} ${method.methodName}{ + ${method.returnBody} + } + + +} \ No newline at end of file diff --git a/codemaker-core/src/main/resources/template/dynamicddd/exeimpl.ftl b/codemaker-core/src/main/resources/template/dynamicddd/exeimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a2b72408df811370c892a9c7b85f6f5b14597713 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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/dynamicddd/factory.ftl b/codemaker-core/src/main/resources/template/dynamicddd/factory.ftl new file mode 100644 index 0000000000000000000000000000000000000000..758b640f34c009f2f7a9a7659d06586a9d51db1a --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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/dynamicddd/gataway.ftl b/codemaker-core/src/main/resources/template/dynamicddd/gataway.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f2689c4553a21b9c0f9b83b22c31b7d364c48433 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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/dynamicddd/gatawayimpl.ftl b/codemaker-core/src/main/resources/template/dynamicddd/gatawayimpl.ftl new file mode 100644 index 0000000000000000000000000000000000000000..ef69323a922b60a7ec953e7cbc952c773f6bb2b8 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/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/dynamicddd/msgbody.ftl b/codemaker-core/src/main/resources/template/dynamicddd/msgbody.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5021f8669295bce58f504a873dbd10a14878a1dc --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/msgbody.ftl @@ -0,0 +1,34 @@ +package ${class.packageName}; + +import java.util.Date; +import java.math.BigDecimal; +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/dynamicddd/service.ftl b/codemaker-core/src/main/resources/template/dynamicddd/service.ftl new file mode 100644 index 0000000000000000000000000000000000000000..381ab6fa2634a4dae50ffeaadfed77834c42e338 --- /dev/null +++ b/codemaker-core/src/main/resources/template/dynamicddd/service.ftl @@ -0,0 +1,70 @@ +package ${package}; + +import java.util.List; + +import ${package}.core.model.bo.${table.humpClassName}BO; + +/** + * @Description:${table.tableComment}Service接口 + * @Author:${class.author} + * @CreateTime:${.now?string('yyyy-MM-dd HH:mm:ss')} + * @version v1.0 + */ +public interface ${table.humpClassName}Service{ + + /** + * + * @Title: save + * @Description:新增 + * @author: + * @param @param dto + * @param @param userId + * @return ${table.humpClassName}BO 返回类型 + * @throws + */ + public ${table.humpClassName}BO save(${table.humpClassName}BO ${table.humpTableName}BO) throws Exception; + + /** + * + * @Title: delete + * @Description: 通过id删除数据 + * @author: + * @param @param id + * @return ResultDto 返回类型 + * @throws + */ + public Boolean delete(Long id); + + /** + * + * @Title: getById + * @Description: 通过id查询 + * @author: + * @param @param id + * @return ${table.humpClassName}BO + * @throws + */ + public ${table.humpClassName}BO getById(Long id) throws Exception; + + /** + * + * @Title: getAll + * @Description:查询所有数据 + * @author: + * @return List<${table.humpClassName}BO> + * @throws + */ + public List<${table.humpClassName}BO> getAll() throws Exception; + + /** + * + * @Title: update + * @Description:修改 + * @author: + * @param @param ${table.humpTableName}BO + * @return ${table.humpClassName}BO + * @throws + */ + public ${table.humpClassName}BO update(${table.humpClassName}BO ${table.humpTableName}BO) throws Exception; + +} \ No newline at end of file diff --git a/codemaker-dbops/pom.xml b/codemaker-dbops/pom.xml index 3cc1e7902d87986e26bc7ec545502830a7f387a8..710f53a72b45c9e342808e0bd8cc263d095d7de6 100644 --- a/codemaker-dbops/pom.xml +++ b/codemaker-dbops/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.1.RELEASE + 2.1.9.RELEASE com.coderman.codemaker.dbops diff --git a/codemaker-dynamicddd/pom.xml b/codemaker-dynamicddd/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..42e6961ec8f5118408112d3c80cd66ff36f1d1c2 --- /dev/null +++ b/codemaker-dynamicddd/pom.xml @@ -0,0 +1,148 @@ + + + + 4.0.0 + + com.coderman.dynamicddd + codemaker-dynamicdd + 1.0-SNAPSHOT + + codemaker-dynamicdd + + http://www.example.com + + + UTF-8 + 1.8 + 1.8 + 1.8 + 2.1.9.RELEASE + 1.2.0.Final + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + 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.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 + + + + + + + + junit + junit + 4.11 + test + + + + org.projectlombok + lombok + 1.18.8 + + + + org.springframework.boot + spring-boot + + + org.slf4j + slf4j-api + + + + + + + + diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AbstractCmd.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AbstractCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..4c6f6c2778a84db55810aee05fa55fe87094cebe --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AbstractCmd.java @@ -0,0 +1,28 @@ +package com.lightsnail.snailapp.usercrm.app.command; + +import java.util.Date; + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:抽象命令类类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class AbstractCmd { + + /** +操作时间 **/ + public Date operateTime; + /** +操作人ID **/ + public Long userId; + /** +命令类 **/ + public Class commandClass; + /** +命令数据 **/ + public String payLoad;; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserAuthCmd.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserAuthCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..171da4f6c30011288818601b6b2116499b5ced8b --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserAuthCmd.java @@ -0,0 +1,25 @@ +package com.lightsnail.snailapp.usercrm.app.command; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:增加用户权限类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class AddUserAuthCmd extends AbstractCmd{ + + /** 用户ID **/ + private Long userId; + /** 权限类型 **/ + private int authorityType; + /** 权限数据内容 **/ + private String json; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserCmd.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..0597d0c45eaef7fd0414a54abcae2465a1032149 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserCmd.java @@ -0,0 +1,25 @@ +package com.lightsnail.snailapp.usercrm.app.command; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:增加用户命令类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class AddUserCmd extends AbstractCmd{ + + /** 用户名 **/ + private String userName; + /** 用户ID **/ + private Long userId; + /** 所属组织 **/ + private Long departmentId; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserGroupCmd.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserGroupCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..8ba24edaae66e29b7061da1e86107ba4ee5c78fe --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/AddUserGroupCmd.java @@ -0,0 +1,23 @@ +package com.lightsnail.snailapp.usercrm.app.command; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:增加用户组命令类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class AddUserGroupCmd extends AbstractCmd{ + + /** 组名 **/ + private String groupName; + /** 用户ID **/ + private Long userId; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/UpdateUserAuthCmd.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/UpdateUserAuthCmd.java new file mode 100644 index 0000000000000000000000000000000000000000..c83c015f47a532735cae584575644e1b90c9c6a3 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/command/UpdateUserAuthCmd.java @@ -0,0 +1,25 @@ +package com.lightsnail.snailapp.usercrm.app.command; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:更新用户权限类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class UpdateUserAuthCmd extends AbstractCmd{ + + /** 用户ID **/ + private Long userId; + /** 角色ID **/ + private Long roleId; + /** 权限数据内容 **/ + private String json; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/CmdExeService.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/CmdExeService.java new file mode 100644 index 0000000000000000000000000000000000000000..a48783e79ea4113782f99024d7aa38a2d0949626 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/CmdExeService.java @@ -0,0 +1,19 @@ +package com.lightsnail.snailapp.usercrm.app.exe; + +import com.lightsnail.snailapp.usercrm.app.command.AbstractCmd; + + +/** + * @Description:命令执行接口接口 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +public interface CmdExeService{ + /** + * + * @Description:命令执行入口 + * @return String + */ + String exe(AbstractCmd abstractCmd); +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserAuthCmdExe.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserAuthCmdExe.java new file mode 100644 index 0000000000000000000000000000000000000000..2defff6bb358d3cc617c0627e748e6ff559ff31c --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserAuthCmdExe.java @@ -0,0 +1,26 @@ +package com.lightsnail.snailapp.usercrm.app.exe; + +import com.lightsnail.snailapp.usercrm.app.command.AbstractCmd; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import com.lightsnail.snailapp.usercrm.app.exe.UserAuthCmdExe; + +/** + * @Description:用户权限cmd处理类接口实现类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Service +public class UserAuthCmdExe implements CmdExeService{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public String exe(AbstractCmd abstractCmd){ + return null; + } + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserCmdExe.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserCmdExe.java new file mode 100644 index 0000000000000000000000000000000000000000..83483f6da7532d58a1454115918b7a44506ade3a --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserCmdExe.java @@ -0,0 +1,26 @@ +package com.lightsnail.snailapp.usercrm.app.exe; + +import com.lightsnail.snailapp.usercrm.app.command.AbstractCmd; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import com.lightsnail.snailapp.usercrm.app.exe.UserCmdExe; + +/** + * @Description:用户cmd处理类接口实现类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Service +public class UserCmdExe implements CmdExeService{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public String exe(AbstractCmd abstractCmd){ + return null; + } + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserGroupCmdExe.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserGroupCmdExe.java new file mode 100644 index 0000000000000000000000000000000000000000..5a53540262d4fd80b5f92e274b841d304d8124b6 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/app/exe/UserGroupCmdExe.java @@ -0,0 +1,26 @@ +package com.lightsnail.snailapp.usercrm.app.exe; + +import com.lightsnail.snailapp.usercrm.app.command.AbstractCmd; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import com.lightsnail.snailapp.usercrm.app.exe.UserGroupCmdExe; + +/** + * @Description:用户组cmd处理类接口实现类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Service +public class UserGroupCmdExe implements CmdExeService{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public String exe(AbstractCmd abstractCmd){ + return null; + } + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/AdminAuthorityBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/AdminAuthorityBO.java new file mode 100644 index 0000000000000000000000000000000000000000..f1a96be0593add1549b56a1c929b93cc49143aa2 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/AdminAuthorityBO.java @@ -0,0 +1,25 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:行政权限类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class AdminAuthorityBO extends AuthorityBO{ + + /** 组织部门 **/ + private Long departmentId; + /** 城市 **/ + private Long cityId; + /** 职位 **/ + private Long jobId; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/AuthorityBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/AuthorityBO.java new file mode 100644 index 0000000000000000000000000000000000000000..d99963b9010fb2a9a4a25dfdaa457fc920bc02de --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/AuthorityBO.java @@ -0,0 +1,21 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:权限类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class AuthorityBO { + + /** 权限类型 **/ + private Integer authorityType; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/DataAuthorityBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/DataAuthorityBO.java new file mode 100644 index 0000000000000000000000000000000000000000..5c0e1e9655666ae806b9f1ad16a65196aa20fb9c --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/DataAuthorityBO.java @@ -0,0 +1,25 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:数据权限类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class DataAuthorityBO extends AuthorityBO { + + /** 系统标示 **/ + private String systemName; + /** 表名 **/ + private String tableName; + /** 字段名 **/ + private String columnName; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/RoleBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/RoleBO.java new file mode 100644 index 0000000000000000000000000000000000000000..236539e7ed6900ca85483583cfc2e15116722e72 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/RoleBO.java @@ -0,0 +1,21 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:角色类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class RoleBO { + + /** 角色名称 **/ + private String roleName; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/SystemAuthorityBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/SystemAuthorityBO.java new file mode 100644 index 0000000000000000000000000000000000000000..24967fee7da2402e7389901e9372f2fd2a0c350f --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/SystemAuthorityBO.java @@ -0,0 +1,27 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:系统菜单权限类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class SystemAuthorityBO extends AuthorityBO{ + + /** 系统标示 **/ + private String systemName; + /** 功能 **/ + private String funcName; + /** 菜单 **/ + private String categoryName; + /** 按钮 **/ + private String menuName; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/SystemConfig.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/SystemConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..884b2422c9267aa22cabecfdb26ea54c2a1aea6c --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/SystemConfig.java @@ -0,0 +1,25 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:系统设置类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class SystemConfig { + + /** 变量名 **/ + private String varName; + /** 变量描述 **/ + private String varDesc; + /** 变量值 **/ + private String value; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/UserBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/UserBO.java new file mode 100644 index 0000000000000000000000000000000000000000..2929b5beeafabf94bfbe4a7aae548215499f675c --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/UserBO.java @@ -0,0 +1,21 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:用户信息类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class UserBO { + + /** 用户名 **/ + private String userName; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/UserGroupBO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/UserGroupBO.java new file mode 100644 index 0000000000000000000000000000000000000000..bb6de7367e95989d0eb8020472654765b6a4e709 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/domain/bo/UserGroupBO.java @@ -0,0 +1,21 @@ +package com.lightsnail.snailapp.usercrm.domain.bo; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:用户组类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:10 + * @version v1.0 + */ +@Data +@ToString +public class UserGroupBO { + + /** 组名 **/ + private String groupName; + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/DepartmentServiceAdapter.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/DepartmentServiceAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..88b9fd8f586da582e31290b9d6dda4be0f94ab68 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/DepartmentServiceAdapter.java @@ -0,0 +1,27 @@ +package com.lightsnail.snailapp.usercrm.infrast.acl; + +import com.lightsnail.snailapp.usercrm.infrast.acl.res.dto.DepartmentResponseDTO; +import java.util.List; +import com.lightsnail.snailapp.usercrm.infrast.acl.req.dto.DepartmentQueryDTO; + + +/** + * @Description:部门查询服务适配器接口 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +public interface DepartmentServiceAdapter{ + /** + * + * @Description:查询所有有效的部门 + * @return List + */ + List queryAllDepartment(DepartmentQueryDTO queryDto); + /** + * + * @Description:查询子部门 + * @return List + */ + List queryDepartmentsList(Long pId); +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/impl/DepartmentServiceAdapterImpl.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/impl/DepartmentServiceAdapterImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5e7e4266c941eaf48bbdd3a82f3abd741d27e00b --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/impl/DepartmentServiceAdapterImpl.java @@ -0,0 +1,33 @@ +package com.lightsnail.snailapp.usercrm.infrast.acl.impl; + +import com.lightsnail.snailapp.usercrm.infrast.acl.res.dto.DepartmentResponseDTO; +import java.util.List; +import com.lightsnail.snailapp.usercrm.infrast.acl.req.dto.DepartmentQueryDTO; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import com.lightsnail.snailapp.usercrm.infrast.acl.DepartmentServiceAdapter; + +/** + * @Description:部门查询服务适配器接口实现类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Service +public class DepartmentServiceAdapterImpl implements DepartmentServiceAdapter{ + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public List queryAllDepartment(DepartmentQueryDTO queryDto){ + return null; + } + + @Override + public List queryDepartmentsList(Long pId){ + return null; + } + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/req/dto/DepartmentQueryDTO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/req/dto/DepartmentQueryDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..d3a6d6a70034b4f2464500242884e9cd7ca3c15d --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/req/dto/DepartmentQueryDTO.java @@ -0,0 +1,19 @@ +package com.lightsnail.snailapp.usercrm.infrast.acl.req.dto; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class DepartmentQueryDTO { + + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/res/dto/DepartmentResponseDTO.java b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/res/dto/DepartmentResponseDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..f9ceac515ebafc9099ba8fb96d8e959e62eab9f5 --- /dev/null +++ b/codemaker-dynamicddd/src/main/java/com/lightsnail/snailapp/usercrm/infrast/acl/res/dto/DepartmentResponseDTO.java @@ -0,0 +1,19 @@ +package com.lightsnail.snailapp.usercrm.infrast.acl.res.dto; + + +import lombok.Data; +import lombok.ToString; + + /** + * @Description:类 + * @Author:fanchunshuai + * @CreateTime:2021-07-07 00:05:11 + * @version v1.0 + */ +@Data +@ToString +public class DepartmentResponseDTO { + + + +} \ No newline at end of file diff --git a/codemaker-dynamicddd/src/test/java/org/example/AppTest.java b/codemaker-dynamicddd/src/test/java/org/example/AppTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6a1d2d79f7878de5144c8a33c09e56d788dfdacb --- /dev/null +++ b/codemaker-dynamicddd/src/test/java/org/example/AppTest.java @@ -0,0 +1,20 @@ +package org.example; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/codemaker-springboot/pom.xml b/codemaker-springboot/pom.xml index 84e52c7e9eb51b532db4cbb3c6963c190c5666fa..9f7d25597c551e7107ffd5aea6719bc5b10928b4 100644 --- a/codemaker-springboot/pom.xml +++ b/codemaker-springboot/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.8.RELEASE + 2.1.9.RELEASE com.coderman.codemaker diff --git a/codemaker-web/pom.xml b/codemaker-web/pom.xml index a028a1a488f9751988a41b8a4a49e31dd4f2303e..559b2da55a59f1782ce3a47b7c00bd7e51690820 100644 --- a/codemaker-web/pom.xml +++ b/codemaker-web/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.8.RELEASE + 2.1.9.RELEASE com.coderman.codemaker diff --git a/moduleFile b/moduleFile index 57e6d576073a3c1d91d1d44b51df819fe4ffadb6..12e8a7d91247f7bd56e992911fe0da316391a91e 100644 --- a/moduleFile +++ b/moduleFile @@ -13,4 +13,10 @@ 2.dubbo-common:dubbo应用的持久化层子模块 3.dubbo-core:dubbo应用的provider实现层模块 -7.codemaker-cola: \ No newline at end of file +7.codemaker-dynamicddd: + 基于plantUML类图+ddd思想生成的代码会放在这个子模块里 + 这里可以认为是模块级的代码生成服务,而springboot,cola,dubbo是应用框架和架构级的代码生成服务 + + +8.codemaker-cola: + diff --git a/todoList b/todoList index 7573234e23bcc380c57dc6937afc4c127ba84d98..dc27c138dda47dbb6855f88ddcd967ac7b0822f6 100644 --- a/todoList +++ b/todoList @@ -8,5 +8,5 @@ 比如pom.xml需要的公共dependency 应用application启动类(down) [6]:增加cola架构代码生成器功能 -[7]:增加对枚举数据的代码生成 -[8]:支持dubbo应用类型的代码生成 \ No newline at end of file +[7]:增加对枚举数据的代码生成(down some) +[8]:支持dubbo应用类型的代码生成(down) \ No newline at end of file