修改代码生成模板.

This commit is contained in:
lijiahangmax
2023-09-26 02:06:38 +08:00
parent b46541ad36
commit 5e7d5569bf
8 changed files with 416 additions and 59 deletions

View File

@@ -15,8 +15,8 @@ import com.orion.lang.utils.ansi.style.color.AnsiForeground;
import com.orion.lang.utils.ext.yml.YmlExt;
import com.orion.ops.framework.mybatis.core.domain.BaseDO;
import com.orion.ops.framework.mybatis.core.mapper.IMapper;
import com.orion.ops.launch.generator.core.GenTable;
import com.orion.ops.launch.generator.core.VelocityTemplateEngine;
import com.orion.ops.launch.generator.template.Table;
import com.orion.ops.launch.generator.engine.VelocityTemplateEngine;
import org.apache.ibatis.annotations.Mapper;
import java.io.File;
@@ -40,20 +40,14 @@ public class CodeGenerator {
// 作者
String author = Const.ORION_AUTHOR;
// 模块
String module = "asset";
String module = "infra";
// 生成的表
GenTable[] tables = {
Table[] tables = {
// new GenTable("system_user", "用户", "user")
// .vue("user", "user")
// .enums(UserStatusEnum.class),
new GenTable("host_key", "主机秘钥", "host")
.vue("asset", "host-key")
.useDrawerForm()
.ignoreTest(),
new GenTable("host_identity", "主机身份", "host")
.vue("asset", "host-identity")
.useDrawerForm()
.ignoreTest(),
new Table("preference", "用户偏好", "preference")
.vue("user", "preference")
};
// jdbc 配置 - 使用配置文件
File yamlFile = new File("orion-ops-launch/src/main/resources/application-dev.yaml");
@@ -76,7 +70,7 @@ public class CodeGenerator {
String url,
String username,
String password,
GenTable[] tables,
Table[] tables,
String module) {
// 创建引擎
VelocityTemplateEngine engine = getEngine(tables);
@@ -125,7 +119,7 @@ public class CodeGenerator {
* @param tables 表
* @return 渲染引擎
*/
private static VelocityTemplateEngine getEngine(GenTable[] tables) {
private static VelocityTemplateEngine getEngine(Table[] tables) {
return new VelocityTemplateEngine(tables);
}
@@ -184,9 +178,9 @@ public class CodeGenerator {
* @param tables 生成的表名
* @return 策略配置
*/
private static StrategyConfig getStrategyConfig(GenTable[] tables) {
private static StrategyConfig getStrategyConfig(Table[] tables) {
String[] tableNames = Arrays.stream(tables)
.map(GenTable::getTableName)
.map(Table::getTableName)
.toArray(String[]::new);
// 策略配置
return new StrategyConfig.Builder()

View File

@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.orion.ops.launch.generator.core;
package com.orion.ops.launch.generator.engine;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.config.ConstVal;
@@ -31,6 +31,7 @@ import com.orion.lang.utils.reflect.BeanMap;
import com.orion.lang.utils.reflect.Fields;
import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.constant.OrionOpsProConst;
import com.orion.ops.launch.generator.template.Table;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
@@ -56,13 +57,13 @@ import java.util.stream.Collectors;
*/
public class VelocityTemplateEngine extends AbstractTemplateEngine {
private final Map<String, GenTable> tables;
private final Map<String, Table> tables;
private VelocityEngine velocityEngine;
public VelocityTemplateEngine(GenTable[] tables) {
public VelocityTemplateEngine(Table[] tables) {
this.tables = Arrays.stream(tables)
.collect(Collectors.toMap(GenTable::getTableName, Function.identity()));
.collect(Collectors.toMap(Table::getTableName, Function.identity()));
}
{
@@ -136,30 +137,30 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine {
@NotNull TableInfo tableInfo) {
// 生成文件副本
List<CustomFile> files = originCustomerFile.stream().map(s ->
new CustomFile.Builder()
.enableFileOverride()
.templatePath(s.getTemplatePath())
.filePath(s.getFilePath())
.fileName(s.getFileName())
.packageName(s.getPackageName())
.build())
new CustomFile.Builder()
.enableFileOverride()
.templatePath(s.getTemplatePath())
.filePath(s.getFilePath())
.fileName(s.getFileName())
.packageName(s.getPackageName())
.build())
.collect(Collectors.toList());
// 获取 table
GenTable table = tables.get(tableInfo.getName());
Table table = tables.get(tableInfo.getName());
// 不生成对外 api 文件
if (!table.isGenProviderApi()) {
if (!table.isEnableProviderApi()) {
files.removeIf(file -> this.isServerProviderFile(file.getTemplatePath()));
// 不生成对外 api 单元测试文件
if (table.isGenUnitTest()) {
if (table.isEnableUnitTest()) {
files.removeIf(file -> this.isServerProviderTestFile(file.getTemplatePath()));
}
}
// 不生成单元测试文件
if (!table.isGenUnitTest()) {
if (!table.isEnableUnitTest()) {
files.removeIf(file -> this.isServerUnitTestFile(file.getTemplatePath()));
}
// 不生成 vue 文件
if (!table.isGenVue()) {
if (!table.isEnableVue()) {
files.removeIf(file -> this.isVueFile(file.getTemplatePath()));
}
return files;
@@ -298,7 +299,7 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine {
*/
private void generatorVueFile(@NotNull List<CustomFile> customFiles, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {
// 不生成 vue 文件
if (!tables.get(tableInfo.getName()).isGenVue()) {
if (!tables.get(tableInfo.getName()).isEnableVue()) {
return;
}
// 过滤文件
@@ -308,7 +309,7 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine {
// 元数据
String outPath = getConfigBuilder().getGlobalConfig().getOutputDir();
GenTable table = tables.get(tableInfo.getName());
Table table = tables.get(tableInfo.getName());
BeanMap beanMap = BeanMap.create(table, "enums");
// 模块名称实体
beanMap.put("moduleEntity", VariableStyles.SPINE.toBigHump(table.getModule()));
@@ -394,7 +395,7 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine {
* @param table table
* @return enums
*/
private Object getEnumMap(GenTable table) {
private Object getEnumMap(Table table) {
List<Class<? extends Enum<?>>> enums = table.getEnums();
Map<String, MultiLinkedHashMap<String, String, Object>> enumMap = new LinkedHashMap<>();
for (Class<? extends Enum<?>> e : enums) {

View File

@@ -0,0 +1,70 @@
package com.orion.ops.launch.generator.template;
import java.util.concurrent.TimeUnit;
/**
* 后端代码缓存模板
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/26 1:14
*/
public class CacheTemplate extends ServerTemplate {
public CacheTemplate(Table table) {
super(table);
table.enableCache = true;
table.cacheExpireTime = 1;
table.cacheExpireUnit = TimeUnit.HOURS;
}
/**
* 设置缓存 key
*
* @param key key
* @return this
*/
public CacheTemplate key(String key) {
table.cacheKey = key;
return this;
}
/**
* 设置缓存过期时间
*
* @param time time
* @return this
*/
public CacheTemplate expireTime(Integer time) {
table.cacheExpired = true;
table.cacheExpireTime = time;
return this;
}
/**
* 设置缓存过期时间单位
*
* @param unit unit
* @return this
*/
public CacheTemplate expireUnit(TimeUnit unit) {
table.cacheExpired = true;
table.cacheExpireUnit = unit;
return this;
}
/**
* 设置缓存过期时间
*
* @param time time
* @param unit unit
* @return this
*/
public CacheTemplate expire(Integer time, TimeUnit unit) {
table.cacheExpired = true;
table.cacheExpireTime = time;
table.cacheExpireUnit = unit;
return this;
}
}

View File

@@ -0,0 +1,16 @@
package com.orion.ops.launch.generator.template;
/**
* 前端代码枚举模板
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/26 1:14
*/
public class EnumsTemplate extends VueTemplate {
public EnumsTemplate(Table table) {
super(table);
}
}

View File

@@ -0,0 +1,93 @@
package com.orion.ops.launch.generator.template;
/**
* 后端代码模板
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/26 1:14
*/
public class ServerTemplate extends Template {
public ServerTemplate(Table table) {
super(table);
table.enableUnitTest = true;
}
public ServerTemplate(Table table, String tableName) {
super(table);
table.tableName = tableName;
table.enableUnitTest = true;
}
public ServerTemplate(Table table, String tableName, String comment, String bizPackage) {
super(table);
table.tableName = tableName;
table.comment = comment;
table.bizPackage = bizPackage;
table.enableUnitTest = true;
}
/**
* 设置表名称
*
* @param tableName tableName
* @return this
*/
public ServerTemplate tableName(String tableName) {
table.tableName = tableName;
return this;
}
/**
* 设置业务注释
*
* @param comment comment
* @return this
*/
public ServerTemplate comment(String comment) {
table.comment = comment;
return this;
}
/**
* 设置业务实体包名
*
* @param bizPackage bizPackage
* @return this
*/
public ServerTemplate bizPackage(String bizPackage) {
table.bizPackage = bizPackage;
return this;
}
/**
* 是否生成对外 api
*
* @return this
*/
public ServerTemplate enableProviderApi() {
table.enableProviderApi = true;
return this;
}
/**
* 不生成单元测试
*
* @return this
*/
public ServerTemplate disableUnitTest() {
table.enableUnitTest = false;
return this;
}
/**
* 设置 cache
*
* @return cache
*/
public CacheTemplate cache() {
return new CacheTemplate(table);
}
}

View File

@@ -1,10 +1,12 @@
package com.orion.ops.launch.generator.core;
package com.orion.ops.launch.generator.template;
import com.orion.lang.utils.collect.Lists;
import lombok.Data;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @author Jiahang Li
@@ -12,70 +14,105 @@ import java.util.List;
* @since 2023/7/17 10:44
*/
@Data
public class GenTable {
@Getter
public class Table {
// -------------------- 后端 --------------------
/**
* 表名称
*/
private String tableName;
protected String tableName;
/**
* 业务注释
*/
private String comment;
protected String comment;
/**
* 业务实体包名
* <p>
* request dto
*/
private String bizPackage;
protected String bizPackage;
/**
* 是否生成对外 api
*/
private boolean genProviderApi;
protected boolean enableProviderApi;
/**
* 是否生成单元测试
*/
private boolean genUnitTest;
protected boolean enableUnitTest;
/**
* 是否可缓存
*/
protected boolean enableCache;
/**
* 缓存的 key
*/
protected String cacheKey;
/**
* 缓存是否会过期
*/
protected boolean cacheExpired;
/**
* 缓存过期时间
*/
protected Integer cacheExpireTime;
/**
* 缓存过期时间单位
*/
protected TimeUnit cacheExpireUnit;
// -------------------- 前端 --------------------
/**
* 是否生成 vue 代码
*/
private boolean genVue;
protected boolean enableVue;
/**
* 模块 用于文件名称生成
*/
private String module;
protected String module;
/**
* 功能 用于文件名称生成
*/
private String feature;
protected String feature;
/**
* 使用抽屉表单
*/
private boolean drawerForm;
protected boolean enableDrawerForm;
/**
* 列表可多选
*/
protected boolean enableRowSelection;
/**
* 生成的枚举文件
* field name [k,v,k,v,k,v] label value color other
*/
private List<Class<? extends Enum<?>>> enums;
protected List<Class<? extends Enum<?>>> enums;
public GenTable(String tableName, String comment, String bizPackage) {
public Table() {
}
public Table(String tableName, String comment, String bizPackage) {
this.tableName = tableName;
this.comment = comment;
this.bizPackage = bizPackage;
this.genProviderApi = true;
this.genUnitTest = true;
this.enableProviderApi = true;
this.enableUnitTest = true;
this.enums = new ArrayList<>();
}
@@ -84,8 +121,8 @@ public class GenTable {
*
* @return this
*/
public GenTable ignoreApi() {
this.genProviderApi = false;
public Table ignoreApi() {
this.enableProviderApi = false;
return this;
}
@@ -94,8 +131,8 @@ public class GenTable {
*
* @return this
*/
public GenTable ignoreTest() {
this.genUnitTest = false;
public Table ignoreTest() {
this.enableUnitTest = false;
return this;
}
@@ -106,8 +143,8 @@ public class GenTable {
* @param feature feature
* @return this
*/
public GenTable vue(String module, String feature) {
this.genVue = true;
public Table vue(String module, String feature) {
this.enableVue = true;
this.module = module;
this.feature = feature;
return this;
@@ -118,8 +155,7 @@ public class GenTable {
*
* @return this
*/
public GenTable useDrawerForm() {
this.drawerForm = true;
public Table useDrawerForm() {
return this;
}
@@ -130,7 +166,7 @@ public class GenTable {
* @return enums
*/
@SafeVarargs
public final GenTable enums(Class<? extends Enum<?>>... enums) {
public final Table enums(Class<? extends Enum<?>>... enums) {
this.enums.addAll(Lists.of(enums));
return this;
}

View File

@@ -0,0 +1,81 @@
package com.orion.ops.launch.generator.template;
import lombok.Data;
/**
* 代码生成模板
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/26 0:51
*/
@Data
public class Template {
protected final Table table;
protected Template(Table table) {
this.table = table;
}
/**
* 创建模板
*
* @param tableName 表名称
* @return Template
*/
public static ServerTemplate create(String tableName) {
return new ServerTemplate(new Table(), tableName);
}
/**
* 创建模板
*
* @param tableName 表名称
* @param comment 业务注释
* @param bizPackage 业务包名
* @return Template
*/
public static ServerTemplate create(String tableName, String comment, String bizPackage) {
return new ServerTemplate(new Table(), tableName, comment, bizPackage);
}
/**
* 设置 server
*
* @return ServerTemplate
*/
public ServerTemplate server() {
return new ServerTemplate(table);
}
/**
* 设置 vue
*
* @return vue
*/
public VueTemplate vue() {
return new VueTemplate(table);
}
/**
* 设置 vue
*
* @param module 模块
* @param feature 功能
* @return vue
*/
public VueTemplate vue(String module, String feature) {
return new VueTemplate(table, module, feature);
}
/**
* 构建
*
* @return table
*/
public Table build() {
return table;
}
}

View File

@@ -0,0 +1,66 @@
package com.orion.ops.launch.generator.template;
/**
* 前端代码模板
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/26 1:17
*/
public class VueTemplate extends Template {
public VueTemplate(Table table) {
super(table);
table.enableVue = true;
}
public VueTemplate(Table table, String module, String feature) {
super(table);
table.enableVue = true;
table.module = module;
table.feature = feature;
}
/**
* 设置模块 用于文件名称生成
*
* @param module module
* @return this
*/
public VueTemplate module(String module) {
table.module = module;
return this;
}
/**
* 设置功能 用于文件名称生成
*
* @param feature feature
* @return this
*/
public VueTemplate feature(String feature) {
table.feature = feature;
return this;
}
/**
* 使用抽屉表单
*
* @return this
*/
public VueTemplate enableDrawerForm() {
table.enableDrawerForm = true;
return this;
}
/**
* 列表可多选
*
* @return this
*/
public VueTemplate enableRowSelection() {
table.enableRowSelection = true;
return this;
}
}