From ac1f9c646378a0eeafc3cf099b97dd0ee03889db Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期五, 08 一月 2021 11:16:01 +0800
Subject: [PATCH] 代码生成模板支持主子表
---
src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java | 42 +++
src/main/resources/vm/java/sub-domain.java.vm | 76 +++++++
src/main/java/com/ruoyi/common/constant/GenConstants.java | 3
src/main/resources/vm/java/domain.java.vm | 24 ++
src/main/resources/vm/vue/index-tree.vue.vm | 2
src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java | 2
src/main/resources/vm/java/serviceImpl.java.vm | 57 +++++
src/main/resources/vm/java/mapper.java.vm | 30 +++
src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java | 83 +++++++-
src/main/resources/vm/java/controller.java.vm | 4
src/main/java/com/ruoyi/project/tool/gen/domain/GenTableColumn.java | 5
src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java | 51 +++++
sql/ry_20210108.sql | 2
src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java | 7
src/main/resources/vm/vue/index.vue.vm | 91 ++++++++
src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java | 7
src/main/resources/vm/xml/mapper.xml.vm | 42 ++++
src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java | 2
src/main/resources/mybatis/tool/GenTableMapper.xml | 54 +++--
19 files changed, 535 insertions(+), 49 deletions(-)
diff --git a/sql/ry_20201128.sql b/sql/ry_20210108.sql
similarity index 99%
rename from sql/ry_20201128.sql
rename to sql/ry_20210108.sql
index 1db0d5a..9e5dc88 100644
--- a/sql/ry_20201128.sql
+++ b/sql/ry_20210108.sql
@@ -633,6 +633,8 @@
table_id bigint(20) not null auto_increment comment '缂栧彿',
table_name varchar(200) default '' comment '琛ㄥ悕绉�',
table_comment varchar(500) default '' comment '琛ㄦ弿杩�',
+ sub_table_name varchar(64) default null comment '鍏宠仈瀛愯〃鐨勮〃鍚�',
+ sub_table_fk_name varchar(64) default null comment '瀛愯〃鍏宠仈鐨勫閿悕',
class_name varchar(100) default '' comment '瀹炰綋绫诲悕绉�',
tpl_category varchar(200) default 'crud' comment '浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛�',
package_name varchar(100) comment '鐢熸垚鍖呰矾寰�',
diff --git a/src/main/java/com/ruoyi/common/constant/GenConstants.java b/src/main/java/com/ruoyi/common/constant/GenConstants.java
index b9b9253..1d5d884 100644
--- a/src/main/java/com/ruoyi/common/constant/GenConstants.java
+++ b/src/main/java/com/ruoyi/common/constant/GenConstants.java
@@ -13,6 +13,9 @@
/** 鏍戣〃锛堝鍒犳敼鏌ワ級 */
public static final String TPL_TREE = "tree";
+ /** 涓诲瓙琛紙澧炲垹鏀规煡锛� */
+ public static final String TPL_SUB = "sub";
+
/** 鏍戠紪鐮佸瓧娈� */
public static final String TREE_CODE = "treeCode";
diff --git a/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java b/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
index 9b57268..1d49f5d 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
@@ -63,10 +63,12 @@
public AjaxResult getInfo(@PathVariable Long talbleId)
{
GenTable table = genTableService.selectGenTableById(talbleId);
+ List<GenTable> tables = genTableService.selectGenTableAll();
List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
Map<String, Object> map = new HashMap<String, Object>();
map.put("info", table);
map.put("rows", list);
+ map.put("tables", tables);
return AjaxResult.success(map);
}
diff --git a/src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java b/src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java
index c646735..4bbe7e5 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java
@@ -28,11 +28,17 @@
@NotBlank(message = "琛ㄦ弿杩颁笉鑳戒负绌�")
private String tableComment;
+ /** 鍏宠仈鐖惰〃鐨勮〃鍚� */
+ private String subTableName;
+
+ /** 鏈〃鍏宠仈鐖惰〃鐨勫閿悕 */
+ private String subTableFkName;
+
/** 瀹炰綋绫诲悕绉�(棣栧瓧姣嶅ぇ鍐�) */
@NotBlank(message = "瀹炰綋绫诲悕绉颁笉鑳戒负绌�")
private String className;
- /** 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛� */
+ /** 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔 sub涓诲瓙琛ㄦ搷浣滐級 */
private String tplCategory;
/** 鐢熸垚鍖呰矾寰� */
@@ -63,6 +69,9 @@
/** 涓婚敭淇℃伅 */
private GenTableColumn pkColumn;
+
+ /** 瀛愯〃淇℃伅 */
+ private GenTable subTable;
/** 琛ㄥ垪淇℃伅 */
@Valid
@@ -114,6 +123,26 @@
public void setTableComment(String tableComment)
{
this.tableComment = tableComment;
+ }
+
+ public String getSubTableName()
+ {
+ return subTableName;
+ }
+
+ public void setSubTableName(String subTableName)
+ {
+ this.subTableName = subTableName;
+ }
+
+ public String getSubTableFkName()
+ {
+ return subTableFkName;
+ }
+
+ public void setSubTableFkName(String subTableFkName)
+ {
+ this.subTableFkName = subTableFkName;
}
public String getClassName()
@@ -216,6 +245,16 @@
this.pkColumn = pkColumn;
}
+ public GenTable getSubTable()
+ {
+ return subTable;
+ }
+
+ public void setSubTable(GenTable subTable)
+ {
+ this.subTable = subTable;
+ }
+
public List<GenTableColumn> getColumns()
{
return columns;
@@ -286,6 +325,16 @@
this.parentMenuName = parentMenuName;
}
+ public boolean isSub()
+ {
+ return isSub(this.tplCategory);
+ }
+
+ public static boolean isSub(String tplCategory)
+ {
+ return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory);
+ }
+
public boolean isTree()
{
return isTree(this.tplCategory);
diff --git a/src/main/java/com/ruoyi/project/tool/gen/domain/GenTableColumn.java b/src/main/java/com/ruoyi/project/tool/gen/domain/GenTableColumn.java
index eeef493..e14d6e8 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/domain/GenTableColumn.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/domain/GenTableColumn.java
@@ -138,6 +138,11 @@
return javaField;
}
+ public String getCapJavaField()
+ {
+ return StringUtils.capitalize(javaField);
+ }
+
public void setIsPk(String isPk)
{
this.isPk = isPk;
diff --git a/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java b/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java
index eae10e4..ddd694b 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java
@@ -35,6 +35,13 @@
public List<GenTable> selectDbTableListByNames(String[] tableNames);
/**
+ * 鏌ヨ鎵�鏈夎〃淇℃伅
+ *
+ * @return 琛ㄤ俊鎭泦鍚�
+ */
+ public List<GenTable> selectGenTableAll();
+
+ /**
* 鏌ヨ琛↖D涓氬姟淇℃伅
*
* @param id 涓氬姟ID
diff --git a/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java b/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
index 91f0d09..d99c592 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
@@ -103,6 +103,17 @@
}
/**
+ * 鏌ヨ鎵�鏈夎〃淇℃伅
+ *
+ * @return 琛ㄤ俊鎭泦鍚�
+ */
+ @Override
+ public List<GenTable> selectGenTableAll()
+ {
+ return genTableMapper.selectGenTableAll();
+ }
+
+ /**
* 淇敼涓氬姟
*
* @param genTable 涓氬姟淇℃伅
@@ -185,9 +196,10 @@
Map<String, String> dataMap = new LinkedHashMap<>();
// 鏌ヨ琛ㄤ俊鎭�
GenTable table = genTableMapper.selectGenTableById(tableId);
- // 鏌ヨ鍒椾俊鎭�
- List<GenTableColumn> columns = table.getColumns();
- setPkColumn(table, columns);
+ // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+ setSubTable(table);
+ // 璁剧疆涓婚敭鍒椾俊鎭�
+ setPkColumn(table);
VelocityInitializer.initVelocity();
VelocityContext context = VelocityUtils.prepareContext(table);
@@ -231,9 +243,10 @@
{
// 鏌ヨ琛ㄤ俊鎭�
GenTable table = genTableMapper.selectGenTableByName(tableName);
- // 鏌ヨ鍒椾俊鎭�
- List<GenTableColumn> columns = table.getColumns();
- setPkColumn(table, columns);
+ // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+ setSubTable(table);
+ // 璁剧疆涓婚敭鍒椾俊鎭�
+ setPkColumn(table);
VelocityInitializer.initVelocity();
@@ -276,6 +289,10 @@
List<String> tableColumnNames = tableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+ if (StringUtils.isEmpty(dbTableColumns))
+ {
+ throw new CustomException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪");
+ }
List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
dbTableColumns.forEach(column -> {
@@ -319,9 +336,10 @@
{
// 鏌ヨ琛ㄤ俊鎭�
GenTable table = genTableMapper.selectGenTableByName(tableName);
- // 鏌ヨ鍒椾俊鎭�
- List<GenTableColumn> columns = table.getColumns();
- setPkColumn(table, columns);
+ // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+ setSubTable(table);
+ // 璁剧疆涓婚敭鍒椾俊鎭�
+ setPkColumn(table);
VelocityInitializer.initVelocity();
@@ -376,17 +394,27 @@
throw new CustomException("鏍戝悕绉板瓧娈典笉鑳戒负绌�");
}
}
+ else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory()))
+ {
+ if (StringUtils.isEmpty(genTable.getSubTableName()))
+ {
+ throw new CustomException("鍏宠仈瀛愯〃鐨勮〃鍚嶄笉鑳戒负绌�");
+ }
+ else if (StringUtils.isEmpty(genTable.getSubTableFkName()))
+ {
+ throw new CustomException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖");
+ }
+ }
}
/**
* 璁剧疆涓婚敭鍒椾俊鎭�
*
* @param table 涓氬姟琛ㄤ俊鎭�
- * @param columns 涓氬姟瀛楁鍒楄〃
*/
- public void setPkColumn(GenTable table, List<GenTableColumn> columns)
+ public void setPkColumn(GenTable table)
{
- for (GenTableColumn column : columns)
+ for (GenTableColumn column : table.getColumns())
{
if (column.isPk())
{
@@ -396,7 +424,36 @@
}
if (StringUtils.isNull(table.getPkColumn()))
{
- table.setPkColumn(columns.get(0));
+ table.setPkColumn(table.getColumns().get(0));
+ }
+ if (GenConstants.TPL_SUB.equals(table.getTplCategory()))
+ {
+ for (GenTableColumn column : table.getSubTable().getColumns())
+ {
+ if (column.isPk())
+ {
+ table.getSubTable().setPkColumn(column);
+ break;
+ }
+ }
+ if (StringUtils.isNull(table.getSubTable().getPkColumn()))
+ {
+ table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0));
+ }
+ }
+ }
+
+ /**
+ * 璁剧疆涓诲瓙琛ㄤ俊鎭�
+ *
+ * @param table 涓氬姟琛ㄤ俊鎭�
+ */
+ public void setSubTable(GenTable table)
+ {
+ String subTableName = table.getSubTableName();
+ if (StringUtils.isNotEmpty(subTableName))
+ {
+ table.setSubTable(genTableMapper.selectGenTableByName(subTableName));
}
}
diff --git a/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java b/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java
index 8777321..5fb4cce 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java
@@ -36,6 +36,13 @@
public List<GenTable> selectDbTableListByNames(String[] tableNames);
/**
+ * 鏌ヨ鎵�鏈夎〃淇℃伅
+ *
+ * @return 琛ㄤ俊鎭泦鍚�
+ */
+ public List<GenTable> selectGenTableAll();
+
+ /**
* 鏌ヨ涓氬姟淇℃伅
*
* @param id 涓氬姟ID
diff --git a/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java b/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java
index 7f932fc..417f1dc 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java
@@ -7,7 +7,7 @@
/**
* VelocityEngine宸ュ巶
*
- * @author RuoYi
+ * @author ruoyi
*/
public class VelocityInitializer
{
diff --git a/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java b/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java
index 77778a4..a336eb7 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java
@@ -54,7 +54,7 @@
velocityContext.put("author", genTable.getFunctionAuthor());
velocityContext.put("datetime", DateUtils.getDate());
velocityContext.put("pkColumn", genTable.getPkColumn());
- velocityContext.put("importList", getImportList(genTable.getColumns()));
+ velocityContext.put("importList", getImportList(genTable));
velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName));
velocityContext.put("columns", genTable.getColumns());
velocityContext.put("table", genTable);
@@ -62,6 +62,10 @@
if (GenConstants.TPL_TREE.equals(tplCategory))
{
setTreeVelocityContext(velocityContext, genTable);
+ }
+ if (GenConstants.TPL_SUB.equals(tplCategory))
+ {
+ setSubVelocityContext(velocityContext, genTable);
}
return velocityContext;
}
@@ -96,6 +100,23 @@
}
}
+ public static void setSubVelocityContext(VelocityContext context, GenTable genTable)
+ {
+ GenTable subTable = genTable.getSubTable();
+ String subTableName = genTable.getSubTableName();
+ String subTableFkName = genTable.getSubTableFkName();
+ String subClassName = genTable.getSubTable().getClassName();
+ String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName);
+
+ context.put("subTable", subTable);
+ context.put("subTableName", subTableName);
+ context.put("subTableFkName", subTableFkName);
+ context.put("subTableFkClassName", subTableFkClassName);
+ context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName));
+ context.put("subClassName", subClassName);
+ context.put("subclassName", StringUtils.uncapitalize(subClassName));
+ context.put("subImportList", getImportList(genTable.getSubTable()));
+ }
/**
* 鑾峰彇妯℃澘淇℃伅
*
@@ -119,6 +140,11 @@
else if (GenConstants.TPL_TREE.equals(tplCategory))
{
templates.add("vm/vue/index-tree.vue.vm");
+ }
+ else if (GenConstants.TPL_SUB.equals(tplCategory))
+ {
+ templates.add("vm/vue/index.vue.vm");
+ templates.add("vm/java/sub-domain.java.vm");
}
return templates;
}
@@ -146,6 +172,10 @@
if (template.contains("domain.java.vm"))
{
fileName = StringUtils.format("{}/domain/{}.java", javaPath, className);
+ }
+ if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory()))
+ {
+ fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());
}
else if (template.contains("mapper.java.vm"))
{
@@ -202,12 +232,18 @@
/**
* 鏍规嵁鍒楃被鍨嬭幏鍙栧鍏ュ寘
*
- * @param column 鍒楅泦鍚�
+ * @param genTable 涓氬姟琛ㄥ璞�
* @return 杩斿洖闇�瑕佸鍏ョ殑鍖呭垪琛�
*/
- public static HashSet<String> getImportList(List<GenTableColumn> columns)
+ public static HashSet<String> getImportList(GenTable genTable)
{
+ List<GenTableColumn> columns = genTable.getColumns();
+ GenTable subGenTable = genTable.getSubTable();
HashSet<String> importList = new HashSet<String>();
+ if (StringUtils.isNotNull(subGenTable))
+ {
+ importList.add("java.util.List");
+ }
for (GenTableColumn column : columns)
{
if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType()))
diff --git a/src/main/resources/mybatis/tool/GenTableMapper.xml b/src/main/resources/mybatis/tool/GenTableMapper.xml
index 4acb016..bba8e95 100644
--- a/src/main/resources/mybatis/tool/GenTableMapper.xml
+++ b/src/main/resources/mybatis/tool/GenTableMapper.xml
@@ -5,24 +5,26 @@
<mapper namespace="com.ruoyi.project.tool.gen.mapper.GenTableMapper">
<resultMap type="GenTable" id="GenTableResult">
- <id property="tableId" column="table_id" />
- <result property="tableName" column="table_name" />
- <result property="tableComment" column="table_comment" />
- <result property="className" column="class_name" />
- <result property="tplCategory" column="tpl_category" />
- <result property="packageName" column="package_name" />
- <result property="moduleName" column="module_name" />
- <result property="businessName" column="business_name" />
- <result property="functionName" column="function_name" />
- <result property="functionAuthor" column="function_author" />
- <result property="genType" column="gen_type" />
- <result property="genPath" column="gen_path" />
- <result property="options" column="options" />
- <result property="createBy" column="create_by" />
- <result property="createTime" column="create_time" />
- <result property="updateBy" column="update_by" />
- <result property="updateTime" column="update_time" />
- <result property="remark" column="remark" />
+ <id property="tableId" column="table_id" />
+ <result property="tableName" column="table_name" />
+ <result property="tableComment" column="table_comment" />
+ <result property="subTableName" column="sub_table_name" />
+ <result property="subTableFkName" column="sub_table_fk_name" />
+ <result property="className" column="class_name" />
+ <result property="tplCategory" column="tpl_category" />
+ <result property="packageName" column="package_name" />
+ <result property="moduleName" column="module_name" />
+ <result property="businessName" column="business_name" />
+ <result property="functionName" column="function_name" />
+ <result property="functionAuthor" column="function_author" />
+ <result property="genType" column="gen_type" />
+ <result property="genPath" column="gen_path" />
+ <result property="options" column="options" />
+ <result property="createBy" column="create_by" />
+ <result property="createTime" column="create_time" />
+ <result property="updateBy" column="update_by" />
+ <result property="updateTime" column="update_time" />
+ <result property="remark" column="remark" />
<collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" />
</resultMap>
@@ -52,7 +54,7 @@
</resultMap>
<sql id="selectGenTableVo">
- select table_id, table_name, table_comment, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
+ select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
</sql>
<select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
@@ -108,7 +110,7 @@
</select>
<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
- SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
+ SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t
LEFT JOIN gen_table_column c ON t.table_id = c.table_id
@@ -116,11 +118,19 @@
</select>
<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
- SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
+ SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t
LEFT JOIN gen_table_column c ON t.table_id = c.table_id
where t.table_name = #{tableName} order by c.sort
+ </select>
+
+ <select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult">
+ SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+ c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+ FROM gen_table t
+ LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+ order by c.sort
</select>
<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId">
@@ -162,6 +172,8 @@
<set>
<if test="tableName != null">table_name = #{tableName},</if>
<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
+ <if test="subTableName != null">sub_table_name = #{subTableName},</if>
+ <if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if>
<if test="className != null and className != ''">class_name = #{className},</if>
<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
<if test="genType != null and genType != ''">gen_type = #{genType},</if>
diff --git a/src/main/resources/vm/java/controller.java.vm b/src/main/resources/vm/java/controller.java.vm
index c45ba66..770bfec 100644
--- a/src/main/resources/vm/java/controller.java.vm
+++ b/src/main/resources/vm/java/controller.java.vm
@@ -18,7 +18,7 @@
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
-#if($table.crud)
+#if($table.crud || $table.sub)
import com.ruoyi.framework.web.page.TableDataInfo;
#elseif($table.tree)
#end
@@ -41,7 +41,7 @@
*/
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
@GetMapping("/list")
-#if($table.crud)
+#if($table.crud || $table.sub)
public TableDataInfo list(${ClassName} ${className})
{
startPage();
diff --git a/src/main/resources/vm/java/domain.java.vm b/src/main/resources/vm/java/domain.java.vm
index c943c1b..89de89e 100644
--- a/src/main/resources/vm/java/domain.java.vm
+++ b/src/main/resources/vm/java/domain.java.vm
@@ -6,7 +6,7 @@
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-#if($table.crud)
+#if($table.crud || $table.sub)
import com.ruoyi.framework.web.domain.BaseEntity;
#elseif($table.tree)
import com.ruoyi.framework.web.domain.TreeEntity;
@@ -18,7 +18,7 @@
* @author ${author}
* @date ${datetime}
*/
-#if($table.crud)
+#if($table.crud || $table.sub)
#set($Entity="BaseEntity")
#elseif($table.tree)
#set($Entity="TreeEntity")
@@ -50,6 +50,11 @@
#end
#end
+#if($table.sub)
+ /** $table.subTable.functionName淇℃伅 */
+ private List<${subClassName}> ${subclassName}List;
+
+#end
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
@@ -69,6 +74,18 @@
#end
#end
+#if($table.sub)
+ public List<${subClassName}> get${subClassName}List()
+ {
+ return ${subclassName}List;
+ }
+
+ public void set${subClassName}List(List<${subClassName}> ${subclassName}List)
+ {
+ this.${subclassName}List = ${subclassName}List;
+ }
+
+#end
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -80,6 +97,9 @@
#end
.append("${column.javaField}", get${AttrName}())
#end
+#if($table.sub)
+ .append("${subclassName}List", get${subClassName}List())
+#end
.toString();
}
}
diff --git a/src/main/resources/vm/java/mapper.java.vm b/src/main/resources/vm/java/mapper.java.vm
index 5502baf..4c02b0f 100644
--- a/src/main/resources/vm/java/mapper.java.vm
+++ b/src/main/resources/vm/java/mapper.java.vm
@@ -2,6 +2,9 @@
import java.util.List;
import ${packageName}.domain.${ClassName};
+#if($table.sub)
+import ${packageName}.domain.${subClassName};
+#end
/**
* ${functionName}Mapper鎺ュ彛
@@ -58,4 +61,31 @@
* @return 缁撴灉
*/
public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+#if($table.sub)
+
+ /**
+ * 鎵归噺鍒犻櫎${subTable.functionName}
+ *
+ * @param customerIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+ * @return 缁撴灉
+ */
+ public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+
+ /**
+ * 鎵归噺鏂板${subTable.functionName}
+ *
+ * @param ${subclassName}List ${subTable.functionName}鍒楄〃
+ * @return 缁撴灉
+ */
+ public int batch${subClassName}(List<${subClassName}> ${subclassName}List);
+
+
+ /**
+ * 閫氳繃${functionName}ID鍒犻櫎${subTable.functionName}淇℃伅
+ *
+ * @param roleId 瑙掕壊ID
+ * @return 缁撴灉
+ */
+ public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
+#end
}
diff --git a/src/main/resources/vm/java/serviceImpl.java.vm b/src/main/resources/vm/java/serviceImpl.java.vm
index 05a3de8..b1b3c40 100644
--- a/src/main/resources/vm/java/serviceImpl.java.vm
+++ b/src/main/resources/vm/java/serviceImpl.java.vm
@@ -9,6 +9,12 @@
#end
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+#if($table.sub)
+import java.util.ArrayList;
+import com.ruoyi.common.utils.StringUtils;
+import org.springframework.transaction.annotation.Transactional;
+import ${packageName}.domain.${subClassName};
+#end
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.domain.${ClassName};
import ${packageName}.service.I${ClassName}Service;
@@ -55,6 +61,9 @@
* @param ${className} ${functionName}
* @return 缁撴灉
*/
+#if($table.sub)
+ @Transactional
+#end
@Override
public int insert${ClassName}(${ClassName} ${className})
{
@@ -63,7 +72,13 @@
${className}.setCreateTime(DateUtils.getNowDate());
#end
#end
+#if($table.sub)
+ int rows = ${className}Mapper.insert${ClassName}(${className});
+ insert${subClassName}(${className});
+ return rows;
+#else
return ${className}Mapper.insert${ClassName}(${className});
+#end
}
/**
@@ -72,6 +87,9 @@
* @param ${className} ${functionName}
* @return 缁撴灉
*/
+#if($table.sub)
+ @Transactional
+#end
@Override
public int update${ClassName}(${ClassName} ${className})
{
@@ -79,6 +97,10 @@
#if($column.javaField == 'updateTime')
${className}.setUpdateTime(DateUtils.getNowDate());
#end
+#end
+#if($table.sub)
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
+ insert${subClassName}(${className});
#end
return ${className}Mapper.update${ClassName}(${className});
}
@@ -89,9 +111,15 @@
* @param ${pkColumn.javaField}s 闇�瑕佸垹闄ょ殑${functionName}ID
* @return 缁撴灉
*/
+#if($table.sub)
+ @Transactional
+#end
@Override
public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s)
{
+#if($table.sub)
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
+#end
return ${className}Mapper.delete${ClassName}ByIds(${pkColumn.javaField}s);
}
@@ -104,6 +132,35 @@
@Override
public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField})
{
+#if($table.sub)
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
+#end
return ${className}Mapper.delete${ClassName}ById(${pkColumn.javaField});
}
+#if($table.sub)
+
+ /**
+ * 鏂板${subTable.functionName}淇℃伅
+ *
+ * @param ${className} ${functionName}瀵硅薄
+ */
+ public void insert${subClassName}(${ClassName} ${className})
+ {
+ List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
+ Long ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
+ if (StringUtils.isNotNull(${subclassName}List))
+ {
+ List<${subClassName}> list = new ArrayList<${subClassName}>();
+ for (${subClassName} ${subclassName} : ${subclassName}List)
+ {
+ ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
+ list.add(${subclassName});
+ }
+ if (list.size() > 0)
+ {
+ ${className}Mapper.batch${subClassName}(list);
+ }
+ }
+ }
+#end
}
diff --git a/src/main/resources/vm/java/sub-domain.java.vm b/src/main/resources/vm/java/sub-domain.java.vm
new file mode 100644
index 0000000..b2dc2dc
--- /dev/null
+++ b/src/main/resources/vm/java/sub-domain.java.vm
@@ -0,0 +1,76 @@
+package ${packageName}.domain;
+
+#foreach ($import in $subImportList)
+import ${import};
+#end
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+/**
+ * ${subTable.functionName}瀵硅薄 ${subTableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public class ${subClassName} extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+#foreach ($column in $subTable.columns)
+#if(!$table.isSuperColumn($column.javaField))
+ /** $column.columnComment */
+#if($column.list)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($parentheseIndex != -1)
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+#elseif($column.javaType == 'Date')
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+#else
+ @Excel(name = "${comment}")
+#end
+#end
+ private $column.javaType $column.javaField;
+
+#end
+#end
+#foreach ($column in $subTable.columns)
+#if(!$table.isSuperColumn($column.javaField))
+#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+#set($AttrName=$column.javaField)
+#else
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#end
+ public void set${AttrName}($column.javaType $column.javaField)
+ {
+ this.$column.javaField = $column.javaField;
+ }
+
+ public $column.javaType get${AttrName}()
+ {
+ return $column.javaField;
+ }
+#end
+#end
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+#foreach ($column in $subTable.columns)
+#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+#set($AttrName=$column.javaField)
+#else
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#end
+ .append("${column.javaField}", get${AttrName}())
+#end
+ .toString();
+ }
+}
diff --git a/src/main/resources/vm/vue/index-tree.vue.vm b/src/main/resources/vm/vue/index-tree.vue.vm
index 501de87..ecc0fbc 100644
--- a/src/main/resources/vm/vue/index-tree.vue.vm
+++ b/src/main/resources/vm/vue/index-tree.vue.vm
@@ -73,7 +73,7 @@
<el-col :span="1.5">
<el-button
type="primary"
- plain
+ plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
diff --git a/src/main/resources/vm/vue/index.vue.vm b/src/main/resources/vm/vue/index.vue.vm
index 32167a2..cbf3e64 100644
--- a/src/main/resources/vm/vue/index.vue.vm
+++ b/src/main/resources/vm/vue/index.vue.vm
@@ -73,7 +73,7 @@
<el-col :span="1.5">
<el-button
type="primary"
- plain
+ plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
@@ -83,7 +83,7 @@
<el-col :span="1.5">
<el-button
type="success"
- plain
+ plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@@ -94,7 +94,7 @@
<el-col :span="1.5">
<el-button
type="danger"
- plain
+ plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@@ -105,7 +105,7 @@
<el-col :span="1.5">
<el-button
type="warning"
- plain
+ plain
icon="el-icon-download"
size="mini"
@click="handleExport"
@@ -266,6 +266,38 @@
#end
#end
#end
+#if($table.sub)
+ <el-divider content-position="center">${subTable.functionName}淇℃伅</el-divider>
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd${subClassName}">娣诲姞</el-button>
+ </el-col>
+ <el-col :span="1.5">
+ <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete${subClassName}">鍒犻櫎</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
+ <el-table-column type="selection" width="50" align="center" />
+ <el-table-column label="搴忓彿" align="center" prop="index" width="50"/>
+#foreach($column in $subTable.columns)
+#set($javaField=$column.javaField)
+#set($parentheseIndex=$column.columnComment.indexOf("锛�"))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($column.pk || $javaField == ${subTableFkclassName})
+#elseif($column.list && "" != $javaField)
+ <el-table-column label="$comment" prop="${javaField}">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.$javaField" placeholder="璇疯緭鍏�$comment" />
+ </template>
+ </el-table-column>
+#end
+#end
+ </el-table>
+#end
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
@@ -324,6 +356,10 @@
loading: true,
// 閫変腑鏁扮粍
ids: [],
+#if($table.sub)
+ // 瀛愯〃閫変腑鏁版嵁
+ checked${subClassName}: [],
+#end
// 闈炲崟涓鐢�
single: true,
// 闈炲涓鐢�
@@ -334,6 +370,10 @@
total: 0,
// ${functionName}琛ㄦ牸鏁版嵁
${businessName}List: [],
+#if($table.sub)
+ // ${subTable.functionName}琛ㄦ牸鏁版嵁
+ ${subclassName}List: [],
+#end
// 寮瑰嚭灞傛爣棰�
title: "",
// 鏄惁鏄剧ず寮瑰嚭灞�
@@ -456,6 +496,9 @@
#end
#end
};
+#if($table.sub)
+ this.${subclassName}List = [];
+#end
this.resetForm("form");
},
/** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -497,6 +540,9 @@
this.form.$column.javaField = this.form.${column.javaField}.split(",");
#end
#end
+#if($table.sub)
+ this.${subclassName}List = response.data.${subclassName}List;
+#end
this.open = true;
this.title = "淇敼${functionName}";
});
@@ -509,6 +555,9 @@
#if($column.htmlType == "checkbox")
this.form.$column.javaField = this.form.${column.javaField}.join(",");
#end
+#end
+#if($table.sub)
+ this.form.${subclassName}List = this.${subclassName}List;
#end
if (this.form.${pkColumn.javaField} != null) {
update${BusinessName}(this.form).then(response => {
@@ -540,6 +589,40 @@
this.msgSuccess("鍒犻櫎鎴愬姛");
})
},
+#if($table.sub)
+ /** ${subTable.functionName}搴忓彿 */
+ row${subClassName}Index({ row, rowIndex }) {
+ row.index = rowIndex + 1;
+ },
+ /** ${subTable.functionName}娣诲姞鎸夐挳鎿嶄綔 */
+ handleAdd${subClassName}() {
+ let obj = {};
+#foreach($column in $subTable.columns)
+#if($column.pk || $column.javaField == ${subTableFkclassName})
+#elseif($column.list && "" != $javaField)
+ obj.$column.javaField = "";
+#end
+#end
+ this.${subclassName}List.push(obj);
+ },
+ /** ${subTable.functionName}鍒犻櫎鎸夐挳鎿嶄綔 */
+ handleDelete${subClassName}() {
+ if (this.checked${subClassName}.length == 0) {
+ this.$alert("璇峰厛閫夋嫨瑕佸垹闄ょ殑${subTable.functionName}鏁版嵁", "鎻愮ず", { confirmButtonText: "纭畾", });
+ } else {
+ this.${subclassName}List.splice(this.checked${subClassName}[0].index - 1, 1);
+ }
+ },
+ /** 鍗曢�夋閫変腑鏁版嵁 */
+ handle${subClassName}SelectionChange(selection) {
+ if (selection.length > 1) {
+ this.$refs.${subclassName}.clearSelection();
+ this.$refs.${subclassName}.toggleRowSelection(selection.pop());
+ } else {
+ this.checked${subClassName} = selection;
+ }
+ },
+#end
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
handleExport() {
const queryParams = this.queryParams;
diff --git a/src/main/resources/vm/xml/mapper.xml.vm b/src/main/resources/vm/xml/mapper.xml.vm
index 6c490a4..93963ea 100644
--- a/src/main/resources/vm/xml/mapper.xml.vm
+++ b/src/main/resources/vm/xml/mapper.xml.vm
@@ -9,6 +9,18 @@
<result property="${column.javaField}" column="${column.columnName}" />
#end
</resultMap>
+#if($table.sub)
+
+ <resultMap id="${ClassName}${subClassName}Result" type="${ClassName}" extends="${ClassName}Result">
+ <collection property="${subclassName}List" notNullColumn="${subTable.pkColumn.columnName}" javaType="java.util.List" resultMap="${subClassName}Result" />
+ </resultMap>
+
+ <resultMap type="${subClassName}" id="${subClassName}Result">
+#foreach ($column in $subTable.columns)
+ <result property="${column.javaField}" column="${column.columnName}" />
+#end
+ </resultMap>
+#end
<sql id="select${ClassName}Vo">
select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName}
@@ -46,9 +58,18 @@
</where>
</select>
- <select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="${ClassName}Result">
+ <select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="#if($table.sub)${ClassName}${subClassName}Result#else${ClassName}Result#end">
+#if($table.crud || $table.tree)
<include refid="select${ClassName}Vo"/>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
+#elseif($table.sub)
+ select#foreach($column in $columns) a.$column.columnName#if($velocityCount != $columns.size()),#end#end,
+ #foreach($column in $subTable.columns) b.$column.columnName#if($velocityCount != $subTable.columns.size()),#end#end
+
+ from ${tableName} a
+ left join ${subTableName} b on b.${subTableFkName} = a.${pkColumn.columnName}
+ where a.${pkColumn.columnName} = #{${pkColumn.javaField}}
+#end
</select>
<insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
@@ -91,5 +112,24 @@
#{${pkColumn.javaField}}
</foreach>
</delete>
+#if($table.sub)
+ <delete id="delete${subClassName}By${subTableFkClassName}s" parameterType="String">
+ delete from ${subTableName} where ${subTableFkName} in
+ <foreach item="${subTableFkclassName}" collection="array" open="(" separator="," close=")">
+ #{${subTableFkclassName}}
+ </foreach>
+ </delete>
+
+ <delete id="delete${subClassName}By${subTableFkClassName}" parameterType="Long">
+ delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}}
+ </delete>
+
+ <insert id="batch${subClassName}">
+ insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($velocityCount != $subTable.columns.size()),#end#end) values
+ <foreach item="item" index="index" collection="list" separator=",">
+ (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($velocityCount != $subTable.columns.size()),#end#end)
+ </foreach>
+ </insert>
+#end
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3