diff --git a/README.md b/README.md index 7e848adc..c95f779e 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ npm run dev 生成通用 controller entity service dao api convert http vue ts sql junit 代码位置 -com.orion.ops.framework.mybatis.core.generator.CodeGenerator +com.orion.ops.framework.mybatis.core.generator.CodeGenerators // 生成的表为 system_role, 业务注释为 '角色', 业务包为 role Template.create("system_role", "角色", "role") diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java new file mode 100644 index 00000000..b432e436 --- /dev/null +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java @@ -0,0 +1,122 @@ +package com.orion.ops.framework.mybatis.core.generator; + +import com.orion.lang.constant.Const; +import com.orion.lang.utils.ansi.AnsiAppender; +import com.orion.lang.utils.ansi.style.AnsiFont; +import com.orion.lang.utils.ansi.style.color.AnsiForeground; +import com.orion.lang.utils.ext.yml.YmlExt; +import com.orion.ops.framework.mybatis.core.generator.core.CodeGenerator; +import com.orion.ops.framework.mybatis.core.generator.template.Table; +import com.orion.ops.framework.mybatis.core.generator.template.Template; + +import java.io.File; +import java.util.concurrent.TimeUnit; + +/** + * 代码生成器 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2022/4/20 10:33 + */ +public class CodeGenerators { + + public static void main(String[] args) { + // 输出路径 + String outputDir = "D:/MP/"; + // 作者 + String author = Const.ORION_AUTHOR; + // 模块 + String module = "infra"; + // 生成的表 + Table[] tables = { + // Template.create("preference", "用户偏好", "preference") + // .enableProviderApi() + // .cache("user:preference:{}:{}", "用户偏好 ${type} ${userId}") + // .expire(1, TimeUnit.HOURS) + // .vue("user", "preference") + // .enums("type") + // .names("APP", "HOST") + // // 同 .value(1, 2) + // .values("value", 1, 2) + // // 同 .label("应用", "主机") + // .values("label", "应用", "主机") + // .color("blue", "green") + // .build(), + // Template.create("history_value", "历史归档", "history") + // .enableProviderApi() + // .vue("meta", "history-value") + // .build(), + Template.create("dict_key", "字典配置项", "dict") + .disableOperatorLog() + .cache("dict:keys", "字典配置项") + .expire(1, TimeUnit.DAYS) + .vue("system", "dict-key") + .enums("value_type") + .names("STRING", "INTEGER", "DECIMAL", "BOOLEAN", "COLOR") + .label("字符串", "整数", "小数", "布尔值", "颜色") + .build(), + // Template.create("dict_value", "字典配置值", "dict") + // .cache("dict:value:{}", "字典配置值 ${key}") + // .expire(1, TimeUnit.DAYS) + // .vue("system", "dict-value") + // .enableRowSelection() + // .build(), + }; + // jdbc 配置 - 使用配置文件 + File yamlFile = new File("orion-ops-launch/src/main/resources/application-dev.yaml"); + YmlExt yaml = YmlExt.load(yamlFile); + String url = yaml.getValue("spring.datasource.druid.url"); + String username = yaml.getValue("spring.datasource.druid.username"); + String password = yaml.getValue("spring.datasource.druid.password"); + + // 执行 + runGenerator(outputDir, author, + tables, module, + url, username, password); + } + + /** + * 代码生成 + */ + private static void runGenerator(String outputDir, + String author, + Table[] tables, + String module, + String url, + String username, + String password) { + // 执行代码生成 + CodeGenerator.builder() + .outputDir(outputDir) + .author(author) + .tables(tables) + .module(module) + .url(url) + .username(username) + .password(password) + .build() + .exec(); + + // 打印提示信息 + printTips(); + } + + /** + * 打印提示信息 + */ + private static void printTips() { + String line = AnsiAppender.create() + .append(AnsiForeground.BRIGHT_GREEN.and(AnsiFont.BOLD), "\n:: 代码生成完毕 ^_^ ::\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码复制后请先 clean 父工程\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码需要自行修改缓存逻辑\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码修改完成后请先执行单元测试检测是否正常\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- vue 代码需要注意同一模块的 router 需要自行合并\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- vue 枚举需要自行更改数据类型\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 菜单 sql 执行完成后 需要在系统菜单页面刷新缓存\n") + .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 字典 sql 执行完成后 需要在字典配置项页面刷新缓存\n") + .toString(); + System.out.print(line); + } + +} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CodeGenerator.java similarity index 71% rename from orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java rename to orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CodeGenerator.java index b03194ca..4d117b05 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CodeGenerator.java @@ -1,4 +1,4 @@ -package com.orion.ops.framework.mybatis.core.generator; +package com.orion.ops.framework.mybatis.core.generator.core; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; @@ -8,24 +8,20 @@ import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; -import com.orion.lang.constant.Const; -import com.orion.lang.utils.ansi.AnsiAppender; -import com.orion.lang.utils.ansi.style.AnsiFont; -import com.orion.lang.utils.ansi.style.color.AnsiForeground; -import com.orion.lang.utils.ext.yml.YmlExt; +import com.orion.lang.able.Executable; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.mybatis.core.domain.BaseDO; -import com.orion.ops.framework.mybatis.core.generator.engine.VelocityTemplateEngine; import com.orion.ops.framework.mybatis.core.generator.template.Table; -import com.orion.ops.framework.mybatis.core.generator.template.Template; import com.orion.ops.framework.mybatis.core.mapper.IMapper; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; import org.apache.ibatis.annotations.Mapper; -import java.io.File; import java.sql.Types; import java.util.Arrays; import java.util.List; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -35,94 +31,74 @@ import java.util.stream.Collectors; * @version 1.0.0 * @since 2022/4/20 10:33 */ -public class CodeGenerator { +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CodeGenerator implements Executable { - public static void main(String[] args) { - // 输出路径 - String outputDir = "D:/MP/"; - // 作者 - String author = Const.ORION_AUTHOR; - // 模块 - String module = "infra"; - // 生成的表 - Table[] tables = { - // Template.create("preference", "用户偏好", "preference") - // .enableProviderApi() - // .cache("user:preference:{}:{}", "用户偏好 ${type} ${userId}") - // .expire(1, TimeUnit.HOURS) - // .vue("user", "preference") - // .enums("type") - // .names("APP", "HOST") - // // 同 .value(1, 2) - // .values("value", 1, 2) - // // 同 .label("应用", "主机") - // .values("label", "应用", "主机") - // .color("blue", "green") - // .build(), - Template.create("history_value", "历史归档", "history") - .enableProviderApi() - .vue("meta", "history-value") - .build(), - Template.create("dict_key", "字典配置项", "dict") - .cache("dict:keys", "字典配置项") - .expire(1, TimeUnit.DAYS) - .vue("system", "dict-key") - .enums("value_type") - .names("STRING", "INTEGER", "DECIMAL", "BOOLEAN", "COLOR") - .label("字符串", "整数", "小数", "布尔值", "颜色") - .build(), - Template.create("dict_value", "字典配置值", "dict") - .cache("dict:value:{}", "字典配置值 ${key}") - .expire(1, TimeUnit.DAYS) - .vue("system", "dict-value") - .enableRowSelection() - .build(), - }; - // jdbc 配置 - 使用配置文件 - File yamlFile = new File("orion-ops-launch/src/main/resources/application-dev.yaml"); - YmlExt yaml = YmlExt.load(yamlFile); - String url = yaml.getValue("spring.datasource.druid.url"); - String username = yaml.getValue("spring.datasource.druid.username"); - String password = yaml.getValue("spring.datasource.druid.password"); + /** + * 输出路径 + */ + private String outputDir; - // 执行 - runGenerator(outputDir, author, - url, username, password, - tables, module); - } + /** + * 作者 + */ + private String author; + + /** + * 模块名称 + */ + private String module; + + /** + * 表 + */ + private Table[] tables; + + /** + * 数据库 url + */ + private String url; + + /** + * 数据库用户名 + */ + private String username; + + /** + * 数据库密码 + */ + private String password; /** * 代码生成 */ - private static void runGenerator(String outputDir, - String author, - String url, - String username, - String password, - Table[] tables, - String module) { + @Override + public void exec() { Valid.notEmpty(tables, "请先配置需要生成的表"); // 创建引擎 - VelocityTemplateEngine engine = getEngine(tables); + VelocityTemplateEngine engine = this.getEngine(tables); // 获取全局配置 - GlobalConfig globalConfig = getGlobalConfig(outputDir, author); + GlobalConfig globalConfig = this.getGlobalConfig(outputDir, author); // 数据源配置 - DataSourceConfig dataSourceConfig = getDataSourceConfig(url, username, password); + DataSourceConfig dataSourceConfig = this.getDataSourceConfig(url, username, password); // 策略配置 - StrategyConfig strategyConfig = getStrategyConfig(tables); + StrategyConfig strategyConfig = this.getStrategyConfig(tables); // 包名配置 - PackageConfig packageConfig = getPackageConfig(module); + PackageConfig packageConfig = this.getPackageConfig(module); // 模板配置 - TemplateConfig templateConfig = getTemplateConfig(); + TemplateConfig templateConfig = this.getTemplateConfig(); // 注入配置 - InjectionConfig injectionConfig = getInjectionConfig(); + InjectionConfig injectionConfig = this.getInjectionConfig(); // 整合配置 AutoGenerator ag = new AutoGenerator(dataSourceConfig) @@ -139,9 +115,6 @@ public class CodeGenerator { // 执行 ag.execute(engine); - - // 打印提示信息 - printTips(); } /** @@ -150,8 +123,8 @@ public class CodeGenerator { * @param tables 表 * @return 渲染引擎 */ - private static VelocityTemplateEngine getEngine(Table[] tables) { - return new VelocityTemplateEngine(tables); + private CodeGeneratorEngine getEngine(Table[] tables) { + return new CodeGeneratorEngine(tables); } /** @@ -161,7 +134,7 @@ public class CodeGenerator { * @param author 作者 * @return config */ - private static GlobalConfig getGlobalConfig(String outputDir, String author) { + private GlobalConfig getGlobalConfig(String outputDir, String author) { return new GlobalConfig.Builder() // 设置作者 .author(author) @@ -185,7 +158,7 @@ public class CodeGenerator { * @param password password * @return 数据源配置 */ - private static DataSourceConfig getDataSourceConfig(String url, String username, String password) { + private DataSourceConfig getDataSourceConfig(String url, String username, String password) { return new DataSourceConfig.Builder(url, username, password) // 转换器 .typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { @@ -209,7 +182,7 @@ public class CodeGenerator { * @param tables 生成的表名 * @return 策略配置 */ - private static StrategyConfig getStrategyConfig(Table[] tables) { + private StrategyConfig getStrategyConfig(Table[] tables) { String[] tableNames = Arrays.stream(tables) .map(Table::getTableName) .toArray(String[]::new); @@ -281,7 +254,7 @@ public class CodeGenerator { * @param module 模块 * @return 包名配置 */ - private static PackageConfig getPackageConfig(String module) { + private PackageConfig getPackageConfig(String module) { return new PackageConfig.Builder() // 声明父包 .parent("com.orion.ops.module") @@ -308,7 +281,7 @@ public class CodeGenerator { * * @return 模板配置 */ - private static TemplateConfig getTemplateConfig() { + private TemplateConfig getTemplateConfig() { return new TemplateConfig.Builder() .controller("/templates/orion-server-module-controller.java.vm") .entity("/templates/orion-server-module-entity-do.java.vm") @@ -324,7 +297,7 @@ public class CodeGenerator { * * @return 注入配置 */ - private static InjectionConfig getInjectionConfig() { + private InjectionConfig getInjectionConfig() { String[][] customFileDefineArr = new String[][]{ // -------------------- 后端 - module -------------------- // http 文件 @@ -395,7 +368,9 @@ public class CodeGenerator { // card.fields.ts 文件 new String[]{"/templates/orion-vue-views-types-card.fields.ts.vm", "card.fields.ts", "vue/views/${module}/${feature}/types"}, // menu.sql 文件 - new String[]{"/templates/orion-sql-menu.sql.vm", "${feature}-menu.sql", "sql"}, + new String[]{"/templates/orion-sql-menu.sql.vm", "${tableName}-menu.sql", "sql"}, + // dict.sql 文件 + new String[]{"/templates/orion-sql-dict.sql.vm", "${tableName}-dict.sql", "sql"}, }; // 构建文件 @@ -420,21 +395,4 @@ public class CodeGenerator { .build(); } - /** - * 打印提示信息 - */ - private static void printTips() { - String line = AnsiAppender.create() - .append(AnsiForeground.BRIGHT_GREEN.and(AnsiFont.BOLD), "\n:: 代码生成完毕 ^_^ ::\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码复制后请先 clean 父工程\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码需要自行修改缓存逻辑\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码修改完成后请先执行单元测试检测是否正常\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- vue 代码需要注意同一模块的 router 需要自行合并\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- vue 枚举需要自行更改数据类型\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 菜单 sql 执行完成后 需要在系统菜单页面刷新缓存\n") - .append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 字典 sql 执行完成后 需要在字典配置项页面刷新缓存\n") - .toString(); - System.out.print(line); - } - } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/engine/VelocityTemplateEngine.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CodeGeneratorEngine.java similarity index 62% rename from orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/engine/VelocityTemplateEngine.java rename to orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CodeGeneratorEngine.java index f122a397..08344870 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/engine/VelocityTemplateEngine.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CodeGeneratorEngine.java @@ -1,28 +1,10 @@ -/* - * Copyright (c) 2011-2022, baomidou (jobob@qq.com). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.orion.ops.framework.mybatis.core.generator.engine; +package com.orion.ops.framework.mybatis.core.generator.core; import com.baomidou.mybatisplus.core.toolkit.StringPool; -import com.baomidou.mybatisplus.generator.config.ConstVal; import com.baomidou.mybatisplus.generator.config.OutputFile; -import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; import com.baomidou.mybatisplus.generator.config.builder.CustomFile; import com.baomidou.mybatisplus.generator.config.po.TableField; import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine; import com.orion.lang.define.collect.MultiLinkedHashMap; import com.orion.lang.utils.Strings; import com.orion.lang.utils.VariableStyles; @@ -33,16 +15,9 @@ import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.OrionOpsProConst; import com.orion.ops.framework.mybatis.core.generator.template.Table; import com.orion.ops.framework.mybatis.core.generator.template.VueEnum; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import org.apache.velocity.app.VelocityEngine; import org.jetbrains.annotations.NotNull; -import java.io.BufferedWriter; import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Function; @@ -50,68 +25,25 @@ import java.util.function.Predicate; import java.util.stream.Collectors; /** - * 代码生成器 Velocity 引擎 + * 代码生成器引擎 * * @author Jiahang Li * @version 1.0.0 - * @since 2022/4/20 10:33 + * @since 2023/10/30 11:20 */ -public class VelocityTemplateEngine extends AbstractTemplateEngine { +public class CodeGeneratorEngine extends VelocityTemplateEngine { private final Map tables; - private VelocityEngine velocityEngine; - - public VelocityTemplateEngine(Table[] tables) { + public CodeGeneratorEngine(Table[] tables) { this.tables = Arrays.stream(tables) .collect(Collectors.toMap(Table::getTableName, Function.identity())); } - { - try { - Class.forName("org.apache.velocity.util.DuckType"); - } catch (ClassNotFoundException e) { - LOGGER.warn("Velocity 1.x is outdated, please upgrade to 2.x or later."); - } - } - - @Override - @NotNull - public VelocityTemplateEngine init(@NotNull ConfigBuilder configBuilder) { - if (velocityEngine == null) { - Properties p = new Properties(); - p.setProperty(ConstVal.VM_LOAD_PATH_KEY, ConstVal.VM_LOAD_PATH_VALUE); - p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, StringPool.EMPTY); - p.setProperty(Velocity.ENCODING_DEFAULT, ConstVal.UTF8); - p.setProperty(Velocity.INPUT_ENCODING, ConstVal.UTF8); - p.setProperty("file.resource.loader.unicode", StringPool.TRUE); - this.velocityEngine = new VelocityEngine(p); - } - return this; - } - - @Override - public void writer(@NotNull Map objectMap, @NotNull String templatePath, @NotNull File outputFile) throws Exception { - Template template = velocityEngine.getTemplate(templatePath, ConstVal.UTF8); - try (FileOutputStream fos = new FileOutputStream(outputFile); - OutputStreamWriter ow = new OutputStreamWriter(fos, ConstVal.UTF8); - BufferedWriter writer = new BufferedWriter(ow)) { - template.merge(new VelocityContext(objectMap), writer); - } - LOGGER.debug("模板: " + templatePath + "; 文件: " + outputFile); - } - - @Override - @NotNull - public String templateFilePath(@NotNull String filePath) { - final String dotVm = ".vm"; - return filePath.endsWith(dotVm) ? filePath : filePath + dotVm; - } - @Override protected void outputCustomFile(@NotNull List customFiles, @NotNull TableInfo tableInfo, @NotNull Map objectMap) { - // 创建自定义文件副本文件 - customFiles = this.createCustomFilesBackup(customFiles, tableInfo); + // 过滤文件 + customFiles = new CustomFileFilter(tables.get(tableInfo.getName()), customFiles).doFilter(); // 添加表元数据 this.addTableMeta(tableInfo, objectMap); // 替换自定义包名 @@ -122,52 +54,8 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { this.generatorServerFile(customFiles, tableInfo, objectMap); // 生成前端文件 this.generatorVueFile(customFiles, tableInfo, objectMap); - } - - /** - * 创建自定义文件副本对象 - *

- * - 根据类型进行移除不需要生成的模板 - * - * @param originCustomerFile originCustomerFile - * @param tableInfo tableInfo - * @return backup - */ - private List createCustomFilesBackup(@NotNull List originCustomerFile, - @NotNull TableInfo tableInfo) { - // 生成文件副本 - List files = originCustomerFile.stream().map(s -> - new CustomFile.Builder() - .enableFileOverride() - .templatePath(s.getTemplatePath()) - .filePath(s.getFilePath()) - .fileName(s.getFileName()) - .packageName(s.getPackageName()) - .build()) - .collect(Collectors.toList()); - // 获取 table - Table table = tables.get(tableInfo.getName()); - // 不生成对外 api 文件 - if (!table.isEnableProviderApi()) { - files.removeIf(file -> this.isServerProviderFile(file.getTemplatePath())); - // 不生成对外 api 单元测试文件 - if (table.isEnableUnitTest()) { - files.removeIf(file -> this.isServerProviderTestFile(file.getTemplatePath())); - } - } - // 不生成单元测试文件 - if (!table.isEnableUnitTest()) { - files.removeIf(file -> this.isServerUnitTestFile(file.getTemplatePath())); - } - // 不生成缓存文件 - if (!table.isEnableCache()) { - files.removeIf(file -> this.isServerCacheFile(file.getTemplatePath())); - } - // 不生成 vue 文件 - if (!table.isEnableVue()) { - files.removeIf(file -> this.isVueFile(file.getTemplatePath())); - } - return files; + // 生成 sql 文件 + this.generatorSqlFile(customFiles, tableInfo, objectMap); } /** @@ -184,11 +72,9 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { // 替换业务注释 tableInfo.setComment(tables.get(tableInfo.getName()).getComment()); Table table = tables.get(tableInfo.getName()); - // 缓存元数据 - Map cacheMeta = this.pickTableMeta(table, - "enableCache", "cacheKey", "cacheDesc", - "cacheExpired", "cacheExpireTime", "cacheExpireUnit"); - objectMap.put("cacheMeta", cacheMeta); + // 元数据 + Map meta = BeanMap.create(table); + objectMap.put("meta", meta); // 实体名称 String domainName = tableInfo.getEntityName(); String mappingHyphen = objectMap.get("controllerMappingHyphen").toString(); @@ -282,7 +168,7 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { private void generatorServerFile(@NotNull List customFiles, @NotNull TableInfo tableInfo, @NotNull Map objectMap) { // 过滤文件 customFiles = customFiles.stream() - .filter(s -> this.isServerFile(s.getTemplatePath())) + .filter(s -> CustomFileFilter.isServerFile(s.getTemplatePath())) .collect(Collectors.toList()); // 生成文件 @@ -319,11 +205,11 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { } // 过滤文件 customFiles = customFiles.stream() - .filter(s -> this.isVueFile(s.getTemplatePath())) + .filter(s -> CustomFileFilter.isVueFile(s.getTemplatePath())) .collect(Collectors.toList()); // 设置前端元数据 Table table = tables.get(tableInfo.getName()); - Map vueMeta = this.pickTableMeta(table, "module", "feature", "enableDrawerForm", "enableRowSelection", "enableCardView"); + Map vueMeta = BeanMap.create(table); // 模块名称实体 vueMeta.put("moduleEntity", VariableStyles.SPINE.toBigHump(table.getModule())); // 模块名称实体 @@ -352,80 +238,29 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { } /** - * 是否为后端文件 + * 生成 sql 文件 * - * @param templatePath templatePath - * @return 是否为后端文件 + * @param customFiles customFiles + * @param tableInfo tableInfo + * @param objectMap objectMap */ - private boolean isServerFile(String templatePath) { - return templatePath.contains("orion-server"); - } - - /** - * 是否为后端 provider 文件 - * - * @param templatePath templatePath - * @return 是否为后端 provider 文件 - */ - private boolean isServerProviderFile(String templatePath) { - return templatePath.contains("orion-server-provider"); - } - - /** - * 是否为后端 provider 单元测试文件 - * - * @param templatePath templatePath - * @return 是否为后端 provider 单元测试文件 - */ - private boolean isServerProviderTestFile(String templatePath) { - return templatePath.contains("orion-server-test-api"); - } - - /** - * 是否为后端单元测试文件 - * - * @param templatePath templatePath - * @return 是否为后端单元测试文件 - */ - private boolean isServerUnitTestFile(String templatePath) { - return templatePath.contains("orion-server-test"); - } - - /** - * 是否为后端缓存文件 - * - * @param templatePath templatePath - * @return 是否为后端缓存文件 - */ - private boolean isServerCacheFile(String templatePath) { - return templatePath.contains("orion-server-module-cache"); - } - - /** - * 是否为 vue 文件 - * - * @param templatePath templatePath - * @return 是否为 vue 文件 - */ - private boolean isVueFile(String templatePath) { - return templatePath.contains("orion-vue-") || - templatePath.contains("orion-sql-menu.sql"); - } - - /** - * 获取表元数据 - * - * @param table table - * @param keys keys - * @return meta - */ - private Map pickTableMeta(Table table, String... keys) { - BeanMap beanMap = BeanMap.create(table); - Map tableMeta = new HashMap<>(); - for (String key : keys) { - tableMeta.put(key, beanMap.get(key)); - } - return tableMeta; + private void generatorSqlFile(@NotNull List customFiles, @NotNull TableInfo tableInfo, @NotNull Map objectMap) { + // 过滤文件 + customFiles = customFiles.stream() + .filter(s -> CustomFileFilter.isDataSqlFile(s.getTemplatePath())) + .collect(Collectors.toList()); + // 设置元数据 + Table table = tables.get(tableInfo.getName()); + Map meta = BeanMap.create(table); + // 生成文件 + customFiles.forEach(file -> { + // 文件路径 + String filePath = getConfigBuilder().getGlobalConfig().getOutputDir() + + "/" + Strings.format(file.getPackageName(), meta) + + "/" + Strings.format(file.getFileName(), meta); + // 渲染文件 + this.outputFile(Files1.newFile(filePath), objectMap, file.getTemplatePath(), file.isFileOverride()); + }); } /** @@ -493,7 +328,6 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { } else { return null; } - } } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CustomFileFilter.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CustomFileFilter.java new file mode 100644 index 00000000..4796bfe6 --- /dev/null +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/CustomFileFilter.java @@ -0,0 +1,183 @@ +package com.orion.ops.framework.mybatis.core.generator.core; + +import com.baomidou.mybatisplus.generator.config.builder.CustomFile; +import com.orion.ops.framework.mybatis.core.generator.template.Table; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 自定义文件过滤器 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/30 11:08 + */ +public class CustomFileFilter { + + /** + * 表 + */ + private final Table table; + + /** + * 原始文件 + */ + private final List originCustomerFile; + + public CustomFileFilter(Table table, List originCustomerFile) { + this.table = table; + this.originCustomerFile = originCustomerFile; + } + + /** + * 执行过滤 + * + * @return clone filter files + */ + public List doFilter() { + // 生成文件副本 + List files = originCustomerFile.stream().map(s -> + new CustomFile.Builder() + .enableFileOverride() + .templatePath(s.getTemplatePath()) + .filePath(s.getFilePath()) + .fileName(s.getFileName()) + .packageName(s.getPackageName()) + .build()) + .collect(Collectors.toList()); + // 不生成对外 api 文件 + if (!table.isEnableProviderApi()) { + files.removeIf(file -> isServerProviderFile(file.getTemplatePath())); + // 不生成对外 api 单元测试文件 + if (table.isEnableUnitTest()) { + files.removeIf(file -> isServerProviderTestFile(file.getTemplatePath())); + } + } + // 不生成单元测试文件 + if (!table.isEnableUnitTest()) { + files.removeIf(file -> isServerUnitTestFile(file.getTemplatePath())); + } + // 不生成缓存文件 + if (!table.isEnableCache()) { + files.removeIf(file -> isServerCacheFile(file.getTemplatePath())); + } + // 不生成导出文件 + if (!table.isEnableExport()) { + files.removeIf(file -> isExportFile(file.getTemplatePath())); + } + // 不生成操作日志文件 + if (!table.isEnableOperatorLog()) { + files.removeIf(file -> isOperatorLogFile(file.getTemplatePath())); + } + // 不生成 vue 文件 + if (!table.isEnableVue()) { + files.removeIf(file -> isVueFile(file.getTemplatePath())); + // 不生成菜单 sql 文件 + files.removeIf(file -> isMenuDataFile(file.getTemplatePath())); + } + return files; + } + + /** + * 是否为后端文件 + * + * @param templatePath templatePath + * @return 是否为后端文件 + */ + public static boolean isServerFile(String templatePath) { + return templatePath.contains("orion-server"); + } + + /** + * 是否为后端 provider 文件 + * + * @param templatePath templatePath + * @return 是否为后端 provider 文件 + */ + public static boolean isServerProviderFile(String templatePath) { + return templatePath.contains("orion-server-provider"); + } + + /** + * 是否为后端 provider 单元测试文件 + * + * @param templatePath templatePath + * @return 是否为后端 provider 单元测试文件 + */ + public static boolean isServerProviderTestFile(String templatePath) { + return templatePath.contains("orion-server-test-api"); + } + + /** + * 是否为后端单元测试文件 + * + * @param templatePath templatePath + * @return 是否为后端单元测试文件 + */ + public static boolean isServerUnitTestFile(String templatePath) { + return templatePath.contains("orion-server-test"); + } + + /** + * 是否为后端缓存文件 + * + * @param templatePath templatePath + * @return 是否为后端缓存文件 + */ + public static boolean isServerCacheFile(String templatePath) { + return templatePath.contains("orion-server-module-cache"); + } + + /** + * 是否为导出文件 + * + * @param templatePath templatePath + * @return 是否为导出文件 + */ + public static boolean isExportFile(String templatePath) { + return templatePath.contains("orion-server-module-entity-export"); + } + + /** + * 是否为操作日志文件 + * + * @param templatePath templatePath + * @return 是否为操作日志文件 + */ + public static boolean isOperatorLogFile(String templatePath) { + return templatePath.contains("orion-server-module-operator-key-define"); + } + + /** + * 是否为菜单 sql 文件 + * + * @param templatePath templatePath + * @return 是否为菜单 sql 文件 + */ + public static boolean isMenuDataFile(String templatePath) { + return templatePath.contains("orion-sql-menu"); + } + + /** + * 是否为 sql ddl 文件 + * + * @param templatePath templatePath + * @return 是否为数据库数据文件 + */ + public static boolean isDataSqlFile(String templatePath) { + return templatePath.contains("orion-sql-menu") || + templatePath.contains("orion-sql-dict"); + } + + /** + * 是否为 vue 文件 + * + * @param templatePath templatePath + * @return 是否为 vue 文件 + */ + public static boolean isVueFile(String templatePath) { + return templatePath.contains("orion-vue-"); + } + +} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/engine/EnumMeta.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/EnumMeta.java similarity index 89% rename from orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/engine/EnumMeta.java rename to orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/EnumMeta.java index 69154fe4..62247007 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/engine/EnumMeta.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/EnumMeta.java @@ -1,4 +1,4 @@ -package com.orion.ops.framework.mybatis.core.generator.engine; +package com.orion.ops.framework.mybatis.core.generator.core; import com.orion.lang.define.collect.MultiLinkedHashMap; import lombok.AllArgsConstructor; diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/VelocityTemplateEngine.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/VelocityTemplateEngine.java new file mode 100644 index 00000000..f3143261 --- /dev/null +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/core/VelocityTemplateEngine.java @@ -0,0 +1,72 @@ +package com.orion.ops.framework.mybatis.core.generator.core; + +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.generator.config.ConstVal; +import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; +import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.app.VelocityEngine; +import org.jetbrains.annotations.NotNull; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.util.Map; +import java.util.Properties; + +/** + * 代码生成器 Velocity 引擎 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2022/4/20 10:33 + */ +public class VelocityTemplateEngine extends AbstractTemplateEngine { + + private VelocityEngine velocityEngine; + + { + try { + Class.forName("org.apache.velocity.util.DuckType"); + } catch (ClassNotFoundException e) { + LOGGER.warn("Velocity 1.x is outdated, please upgrade to 2.x or later."); + } + } + + @Override + @NotNull + public VelocityTemplateEngine init(@NotNull ConfigBuilder configBuilder) { + if (velocityEngine == null) { + Properties p = new Properties(); + p.setProperty(ConstVal.VM_LOAD_PATH_KEY, ConstVal.VM_LOAD_PATH_VALUE); + p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, StringPool.EMPTY); + p.setProperty(Velocity.ENCODING_DEFAULT, ConstVal.UTF8); + p.setProperty(Velocity.INPUT_ENCODING, ConstVal.UTF8); + p.setProperty("file.resource.loader.unicode", StringPool.TRUE); + this.velocityEngine = new VelocityEngine(p); + } + return this; + } + + @Override + public void writer(@NotNull Map objectMap, @NotNull String templatePath, @NotNull File outputFile) throws Exception { + Template template = velocityEngine.getTemplate(templatePath, ConstVal.UTF8); + try (FileOutputStream fos = new FileOutputStream(outputFile); + OutputStreamWriter ow = new OutputStreamWriter(fos, ConstVal.UTF8); + BufferedWriter writer = new BufferedWriter(ow)) { + template.merge(new VelocityContext(objectMap), writer); + } + LOGGER.debug("模板: " + templatePath + "; 文件: " + outputFile); + } + + @Override + @NotNull + public String templateFilePath(@NotNull String filePath) { + final String dotVm = ".vm"; + return filePath.endsWith(dotVm) ? filePath : filePath + dotVm; + } + +} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/ServerTemplate.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/ServerTemplate.java index 28e12a44..9705f965 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/ServerTemplate.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/ServerTemplate.java @@ -72,7 +72,6 @@ public class ServerTemplate extends Template { return this; } - // fixme /** * 生成导出 * @@ -93,14 +92,13 @@ public class ServerTemplate extends Template { return this; } - // fixme /** * 不生成操作日志 * * @return this */ public ServerTemplate disableOperatorLog() { - table.enableUnitTest = false; + table.enableOperatorLog = false; return this; } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-cache-key-define.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-cache-key-define.java.vm index e498e485..d16d8623 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-cache-key-define.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-cache-key-define.java.vm @@ -18,11 +18,11 @@ import java.util.concurrent.TimeUnit; public interface ${type}CacheKeyDefine { CacheKeyDefine $typeConst = new CacheKeyBuilder() - .key("$cacheMeta.cacheKey") - .desc("$cacheMeta.cacheDesc") + .key("$meta.cacheKey") + .desc("$meta.cacheDesc") .type(${type}CacheDTO.class) - #if($cacheMeta.cacheExpired) - .timeout($cacheMeta.cacheExpireTime, TimeUnit.$cacheMeta.cacheExpireUnit.name()) + #if($meta.cacheExpired) + .timeout($meta.cacheExpireTime, TimeUnit.$meta.cacheExpireUnit.name()) #end .build(); diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.http.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.http.vm index ba61726d..64401343 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.http.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.http.vm @@ -68,6 +68,7 @@ Authorization: {{token}} ${httpComment} ${apiComment.batchDelete} DELETE {{baseUrl}}/${package.ModuleName}/${typeHyphen}/batch-delete?idList=1,2,3 Authorization: {{token}} +#if($meta.enableExport) ${httpComment} ${apiComment.export} @@ -80,6 +81,6 @@ Authorization: {{token}} "${field.propertyName}": ""#if($foreach.hasNext),#end #end } - +#end ${httpComment} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.java.vm index 46abc566..35611c56 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-controller.java.vm @@ -1,7 +1,9 @@ package ${package.Controller}; import com.orion.lang.define.wrapper.DataGrid; +#if($meta.enableOperatorLog) import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; +#end import com.orion.ops.framework.common.validator.group.Page; import com.orion.ops.framework.log.core.annotation.IgnoreLog; import com.orion.ops.framework.log.core.enums.IgnoreLogMode; @@ -49,7 +51,9 @@ public class ${table.controllerName} { @Resource private ${type}Service ${typeLower}Service; + #if($meta.enableOperatorLog) @OperatorLog(${type}OperatorType.CREATE) + #end @PostMapping("/create") @Operation(summary = "${apiComment.create}") @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:create')") @@ -57,7 +61,9 @@ public class ${table.controllerName} { return ${typeLower}Service.create${type}(request); } + #if($meta.enableOperatorLog) @OperatorLog(${type}OperatorType.UPDATE) + #end @PutMapping("/update") @Operation(summary = "${apiComment.updateById}") @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:update')") @@ -99,7 +105,9 @@ public class ${table.controllerName} { return ${typeLower}Service.get${type}Page(request); } + #if($meta.enableOperatorLog) @OperatorLog(${type}OperatorType.DELETE) + #end @DeleteMapping("/delete") @Operation(summary = "${apiComment.deleteById}") @Parameter(name = "id", description = "id", required = true) @@ -108,7 +116,9 @@ public class ${table.controllerName} { return ${typeLower}Service.delete${type}ById(id); } + #if($meta.enableOperatorLog) @OperatorLog(${type}OperatorType.DELETE) + #end @DeleteMapping("/batch-delete") @Operation(summary = "${apiComment.batchDelete}") @Parameter(name = "idList", description = "idList", required = true) @@ -116,8 +126,11 @@ public class ${table.controllerName} { public Integer batchDelete${type}(@RequestParam("idList") List idList) { return ${typeLower}Service.delete${type}ByIdList(idList); } + #if($meta.enableExport) + #if($meta.enableOperatorLog) @OperatorLog(${type}OperatorType.EXPORT) + #end @PostMapping("/export") @Operation(summary = "${apiComment.export}") @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:export')") @@ -125,6 +138,7 @@ public class ${table.controllerName} { HttpServletResponse response) throws IOException { ${typeLower}Service.export${type}(request, response); } + #end } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-convert.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-convert.java.vm index b6e07d02..2c815ac6 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-convert.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-convert.java.vm @@ -28,12 +28,14 @@ public interface ${type}Convert { ${type}DO to(${type}QueryRequest request); ${type}VO to(${type}DO domain); + #if($meta.enableExport) ${type}Export toExport(${type}DO domain); + #end List<${type}VO> to(List<${type}DO> list); - #if($cacheMeta.enableCache) + #if($meta.enableCache) ${type}VO to(${type}CacheDTO cache); ${type}CacheDTO toCache(${type}DO domain); diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-operator-key-define.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-operator-key-define.java.vm index 0bdf42bd..a15138a9 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-operator-key-define.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-operator-key-define.java.vm @@ -21,8 +21,10 @@ public class ${type}OperatorType extends InitializingOperatorTypes { public static final String UPDATE = "${typeHyphen}:update"; public static final String DELETE = "${typeHyphen}:delete"; + #if($meta.enableExport) public static final String EXPORT = "${typeHyphen}:export"; + #end @Override public OperatorType[] types() { @@ -30,7 +32,9 @@ public class ${type}OperatorType extends InitializingOperatorTypes { new OperatorType(L, CREATE, "创建$!{table.comment}"), new OperatorType(M, UPDATE, "更新$!{table.comment}"), new OperatorType(H, DELETE, "删除$!{table.comment}"), + #if($meta.enableExport) new OperatorType(M, EXPORT, "导出$!{table.comment}"), + #end }; } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm index b1757f4a..95dd095f 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service-impl.java.vm @@ -5,14 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.Strings; import com.orion.lang.utils.collect.Lists; +#if($meta.enableExport) import com.orion.office.excel.writer.exporting.ExcelExport; -#if($cacheMeta.enableCache) +#end +#if($meta.enableCache) import com.orion.ops.framework.common.constant.Const; #end import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.utils.FileNames; import com.orion.ops.framework.common.utils.Valid; -#if($cacheMeta.enableCache) +#if($meta.enableCache) import com.orion.ops.framework.redis.core.utils.RedisMaps; #end #foreach($pkg in ${customModuleFilePackages}) @@ -57,7 +59,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { int effect = ${typeLower}DAO.insert(record); Long id = record.getId(); log.info("${type}Service-create${type} id: {}, effect: {}", id, effect); - #if($cacheMeta.enableCache) + #if($meta.enableCache) // 删除缓存 RedisMaps.delete(${type}CacheKeyDefine.${typeConst}); #end @@ -78,7 +80,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { // 更新 int effect = ${typeLower}DAO.updateById(updateRecord); log.info("${type}Service-update${type}ById effect: {}", effect); - #if($cacheMeta.enableCache) + #if($meta.enableCache) // 删除缓存 RedisMaps.delete(${type}CacheKeyDefine.${typeConst}); #end @@ -95,7 +97,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { // 更新 int effect = ${typeLower}DAO.update(updateRecord, wrapper); log.info("${type}Service.update${type} effect: {}", effect); - #if($cacheMeta.enableCache) + #if($meta.enableCache) // 删除缓存 RedisMaps.delete(${type}CacheKeyDefine.${typeConst}); #end @@ -130,7 +132,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { return ${typeLower}DAO.of(wrapper).list(${type}Convert.MAPPER::to); } - #if($cacheMeta.enableCache) + #if($meta.enableCache) @Override public List<${type}VO> get${type}ListByCache() { // 查询缓存 @@ -183,7 +185,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { // 删除 int effect = ${typeLower}DAO.deleteById(id); log.info("${type}Service-delete${type}ById id: {}, effect: {}", id, effect); - #if($cacheMeta.enableCache) + #if($meta.enableCache) // 删除缓存 RedisMaps.delete(${type}CacheKeyDefine.${typeConst}, id); #end @@ -195,7 +197,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { log.info("${type}Service-delete${type}ByIdList idList: {}", idList); int effect = ${typeLower}DAO.deleteBatchIds(idList); log.info("${type}Service-delete${type}ByIdList effect: {}", effect); - #if($cacheMeta.enableCache) + #if($meta.enableCache) // 删除缓存 RedisMaps.delete(${type}CacheKeyDefine.${typeConst}, idList); #end @@ -210,12 +212,13 @@ public class ${table.serviceImplName} implements ${table.serviceName} { // 删除 int effect = ${typeLower}DAO.delete(wrapper); log.info("${type}Service.delete${type} effect: {}", effect); - #if($cacheMeta.enableCache) + #if($meta.enableCache) // 删除缓存 RedisMaps.delete(${type}CacheKeyDefine.${typeConst}); #end return effect; } + #if($meta.enableExport) @Override public void export${type}(${type}QueryRequest request, HttpServletResponse response) throws IOException { @@ -234,6 +237,7 @@ public class ${table.serviceImplName} implements ${table.serviceName} { // 传输 Servlets.transfer(response, out.toByteArray(), FileNames.exportName(${type}Export.TITLE)); } + #end /** * 检查对象是否存在 diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service.java.vm index f23e5825..4b0328e7 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-module-service.java.vm @@ -67,7 +67,7 @@ public interface ${table.serviceName} { */ List<${type}VO> get${type}List(${type}QueryRequest request); - #if($cacheMeta.enableCache) + #if($meta.enableCache) /** * ${apiComment.queryListByCache} * @@ -115,6 +115,7 @@ public interface ${table.serviceName} { * @return effect */ Integer delete${type}(${type}QueryRequest request); + #if($meta.enableExport) /** * ${apiComment.export} @@ -124,5 +125,6 @@ public interface ${table.serviceName} { * @throws IOException IOException */ void export${type}(${type}QueryRequest request, HttpServletResponse response) throws IOException; + #end } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api-impl.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api-impl.java.vm index c8a2594e..df894d72 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api-impl.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api-impl.java.vm @@ -106,7 +106,7 @@ public class ${type}ApiImpl implements ${type}Api { return ${typeLower}DAO.of(wrapper).list(${type}ProviderConvert.MAPPER::to); } - #if($cacheMeta.enableCache) + #if($meta.enableCache) @Override public List<${type}DTO> get${type}ListByCache() { return ${typeLower}Service.get${type}ListByCache() diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api.java.vm index 22e1ed4a..efaf4f90 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-provider-api.java.vm @@ -64,7 +64,7 @@ public interface ${type}Api { */ List<${type}DTO> get${type}List(${type}QueryDTO dto); - #if($cacheMeta.enableCache) + #if($meta.enableCache) /** * ${apiComment.queryListByCache} * diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-api-impl-tests.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-api-impl-tests.java.vm index e998725c..fa06a360 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-api-impl-tests.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-api-impl-tests.java.vm @@ -110,7 +110,7 @@ public class ${type}ApiImplTests extends BaseUnitTest { Integer effect = ${typeLower}Api.delete${type}(dto); assertEquals(effect, 0); } - #if($cacheMeta.enableCache) + #if($meta.enableCache) // -------------------- cache -------------------- diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-service-impl-tests.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-service-impl-tests.java.vm index 2abd02c4..826d4642 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-service-impl-tests.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-server-test-service-impl-tests.java.vm @@ -121,7 +121,7 @@ public class ${type}ServiceImplTests extends BaseUnitTest { Integer effect = ${typeLower}Service.delete${type}(query); assertEquals(effect, 0); } - #if($cacheMeta.enableCache) + #if($meta.enableCache) // -------------------- cache -------------------- diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-sql-dict.sql.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-sql-dict.sql.vm new file mode 100644 index 00000000..cc2c6305 --- /dev/null +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-sql-dict.sql.vm @@ -0,0 +1,30 @@ +-- 执行完成后 需要在菜单页面刷新缓存 + +-- 父菜单 +INSERT INTO system_menu + (parent_id, name, type, sort, visible, status, cache, component) +VALUES + (0, '${table.comment}管理', 1, 10, 1, 1, 1, '$vue.moduleEntityFirstLower'); + +-- 设置临时父菜单id +SELECT @TMP_PARENT_ID:=LAST_INSERT_ID(); + +-- 子菜单 +INSERT INTO system_menu + (parent_id, name, type, sort, visible, status, cache, component) +VALUES + (@TMP_PARENT_ID, '$table.comment', 2, 10, 1, 1, 1, '$vue.moduleEntityFirstLower$vue.featureEntity'); + +-- 设置临时子菜单id +SELECT @TMP_SUB_ID:=LAST_INSERT_ID(); + +-- 功能 +INSERT INTO system_menu + (parent_id, name, permission, type, sort) +VALUES + (@TMP_SUB_ID, '查询$table.comment', '${package.ModuleName}:${typeHyphen}:query', 3, 10), + (@TMP_SUB_ID, '创建$table.comment', '${package.ModuleName}:${typeHyphen}:create', 3, 20), + (@TMP_SUB_ID, '修改$table.comment', '${package.ModuleName}:${typeHyphen}:update', 3, 30), + (@TMP_SUB_ID, '删除$table.comment', '${package.ModuleName}:${typeHyphen}:delete', 3, 40), + (@TMP_SUB_ID, '导出$table.comment', '${package.ModuleName}:${typeHyphen}:export', 3, 50), + (@TMP_SUB_ID, '导入$table.comment', '${package.ModuleName}:${typeHyphen}:import', 3, 60); diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm index 23fa7ce9..0647d0cb 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-api.ts.vm @@ -133,6 +133,7 @@ export function batchDelete${vue.featureEntity}(idList: Array) { } }); } +#if($meta.enableExport) /** * $apiComment.export @@ -140,3 +141,4 @@ export function batchDelete${vue.featureEntity}(idList: Array) { export function export${vue.featureEntity}(request: ${vue.featureEntity}QueryRequest) { return axios.post('/${package.ModuleName}/${typeHyphen}/export', request); } +#end