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