diff --git a/pom.xml b/pom.xml
index cf6a4898e..7bcc5326c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
1.5.6
3.9.1
4.5.0
- 2.3
+ 2.4.1
2.2.41
3.0.2
0.15.0
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/GenConfig.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/GenConfig.java
deleted file mode 100644
index 4b4fd16ce..000000000
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/GenConfig.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.dromara.gen.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * 代码生成相关配置
- *
- * @author ruoyi
- */
-@Component
-@ConfigurationProperties(prefix = "gen")
-public class GenConfig {
-
- /**
- * 作者
- */
- public static String author;
-
- /**
- * 生成包路径
- */
- public static String packageName;
-
- /**
- * 自动去除表前缀,默认是false
- */
- public static boolean autoRemovePre;
-
- /**
- * 表前缀(类名不会包含表前缀)
- */
- public static String tablePrefix;
-
- public static String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- GenConfig.author = author;
- }
-
- public static String getPackageName() {
- return packageName;
- }
-
- public void setPackageName(String packageName) {
- GenConfig.packageName = packageName;
- }
-
- public static boolean getAutoRemovePre() {
- return autoRemovePre;
- }
-
- public void setAutoRemovePre(boolean autoRemovePre) {
- GenConfig.autoRemovePre = autoRemovePre;
- }
-
- public static String getTablePrefix() {
- return tablePrefix;
- }
-
- public void setTablePrefix(String tablePrefix) {
- GenConfig.tablePrefix = tablePrefix;
- }
-}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java
index f9deedbfa..6ddcc8985 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java
@@ -25,6 +25,9 @@ import java.util.Map;
@Component
public class MyBatisDataSourceMonitor implements DataSourceMonitor {
+ /**
+ * 初始化 anyline 与动态数据源联动所需的元数据解析策略。
+ */
public MyBatisDataSourceMonitor() {
// 调整执行模式为自定义
ConfigTable.KEEP_ADAPTER = 2;
@@ -72,6 +75,8 @@ public class MyBatisDataSourceMonitor implements DataSourceMonitor {
/**
* 数据源唯一标识 如果不实现则默认feature
+ *
+ * @param runtime 数据运行时上下文
* @param datasource 数据源
* @return String 返回null由上层自动提取
*/
@@ -90,6 +95,7 @@ public class MyBatisDataSourceMonitor implements DataSourceMonitor {
* ConfigTable.KEEP_ADAPTER=2 : 根据当前接口判断是否保持同一个数据源绑定同一个adapter
* DynamicRoutingDataSource类型的返回false,因为同一个DynamicRoutingDataSource可能对应多类数据库, 如果项目中只有一种数据库 应该直接返回true
*
+ * @param runtime 数据运行时上下文
* @param datasource 数据源
* @return boolean
*/
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/properties/GenProperties.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/properties/GenProperties.java
new file mode 100644
index 000000000..eba7a9a14
--- /dev/null
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/properties/GenProperties.java
@@ -0,0 +1,47 @@
+package org.dromara.gen.config.properties;
+
+import cn.hutool.extra.template.TemplateConfig;
+import lombok.Data;
+import org.dromara.common.core.factory.YmlPropertySourceFactory;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 代码生成配置属性
+ *
+ * @author 秋辞未寒
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "gen")
+public class GenProperties {
+
+ /**
+ * 作者
+ */
+ private String author;
+
+ /**
+ * 生成包路径
+ */
+ private String packageName;
+
+ /**
+ * 自动去除表前缀,默认是false
+ */
+ private boolean autoRemovePre = false;
+
+ /**
+ * 表前缀(类名不会包含表前缀)
+ */
+ private String tablePrefix;
+
+ /**
+ * 模板配置
+ */
+ private TemplateConfig templateConfig = new TemplateConfig(StandardCharsets.UTF_8, null, TemplateConfig.ResourceMode.CLASSPATH);
+
+}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java
index 036252714..08d3a4e7d 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java
@@ -1,5 +1,9 @@
package org.dromara.gen.constant;
+import cn.hutool.core.collection.CollUtil;
+
+import java.util.Set;
+
/**
* 代码生成通用常量
*
@@ -69,25 +73,25 @@ public interface GenConstants {
* BO对象 不需要添加字段
*/
String[] COLUMNNAME_NOT_ADD = {"create_dept", "create_by", "create_time", "del_flag", "update_by",
- "update_time", "version", "tenant_id"};
+ "update_time", "version"};
/**
* BO对象 不需要编辑字段
*/
String[] COLUMNNAME_NOT_EDIT = {"create_dept", "create_by", "create_time", "del_flag", "update_by",
- "update_time", "version", "tenant_id"};
+ "update_time", "version"};
/**
* VO对象 不需要返回字段
*/
String[] COLUMNNAME_NOT_LIST = {"create_dept", "create_by", "create_time", "del_flag", "update_by",
- "update_time", "version", "tenant_id"};
+ "update_time", "version"};
/**
* BO对象 不需要查询字段
*/
String[] COLUMNNAME_NOT_QUERY = {"id", "create_dept", "create_by", "create_time", "del_flag", "update_by",
- "update_time", "remark", "version", "tenant_id"};
+ "update_time", "remark", "version"};
/**
* Entity基类字段
@@ -178,14 +182,57 @@ public interface GenConstants {
* 相等查询
*/
String QUERY_EQ = "EQ";
-
/**
* 范围查询
*/
String QUERY_BETWEEN = "BETWEEN";
/**
- * 需要
+ * 必填标识,对应前端表单规则中的必填字段配置。
*/
String REQUIRE = "1";
+
+ // 后端源码模板
+ String JAVA_DOMAIN_TEMPLATE_PATH = "vm/java/domain.java.vm";
+ String JAVA_VO_TEMPLATE_PATH = "vm/java/vo.java.vm";
+ String JAVA_BO_TEMPLATE_PATH = "vm/java/bo.java.vm";
+ String JAVA_MAPPER_TEMPLATE_PATH = "vm/java/mapper.java.vm";
+ String JAVA_SERVICE_TEMPLATE_PATH = "vm/java/service.java.vm";
+ String JAVA_SERVICE_IMPL_TEMPLATE_PATH = "vm/java/serviceImpl.java.vm";
+ String JAVA_CONTROLLER_TEMPLATE_PATH = "vm/java/controller.java.vm";
+ // MyBatis MapperXML 模板
+ String XML_MAPPER_TEMPLATE_PATH = "vm/xml/mapper.xml.vm";
+ // 前端接口源码模板
+ String TS_API_TEMPLATE_PATH = "vm/ts/api.ts.vm";
+ String TS_TYPES_TEMPLATE_PATH = "vm/ts/types.ts.vm";
+ // 前端页面源码模板
+ String VUE_INDEX_TEMPLATE_PATH = "vm/vue/index.vue.vm";
+ String VUE_INDEX_TREE_TEMPLATE_PATH = "vm/vue/index-tree.vue.vm";
+ // 数据库SQL模板
+ String SQL_ORACLE_TEMPLATE_PATH = "vm/sql/oracle.sql.vm";
+ String SQL_POSTGRES_TEMPLATE_PATH = "vm/sql/postgres.sql.vm";
+ String SQL_SQLSERVER_TEMPLATE_PATH = "vm/sql/sqlserver.sql.vm";
+ String SQL_MYSQL_TEMPLATE_PATH = "vm/sql/mysql.sql.vm";
+
+ /**
+ * 所有模板路径集合
+ */
+ Set TEMPLATE_PATHS = CollUtil.newHashSet(
+ JAVA_DOMAIN_TEMPLATE_PATH
+ , JAVA_VO_TEMPLATE_PATH
+ , JAVA_BO_TEMPLATE_PATH
+ , JAVA_MAPPER_TEMPLATE_PATH
+ , JAVA_SERVICE_TEMPLATE_PATH
+ , JAVA_SERVICE_IMPL_TEMPLATE_PATH
+ , JAVA_CONTROLLER_TEMPLATE_PATH
+ , XML_MAPPER_TEMPLATE_PATH
+ , TS_API_TEMPLATE_PATH
+ , TS_TYPES_TEMPLATE_PATH
+ , VUE_INDEX_TEMPLATE_PATH
+ , VUE_INDEX_TREE_TEMPLATE_PATH
+ , SQL_ORACLE_TEMPLATE_PATH
+ , SQL_POSTGRES_TEMPLATE_PATH
+ , SQL_SQLSERVER_TEMPLATE_PATH
+ , SQL_MYSQL_TEMPLATE_PATH
+ );
}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java
index 83df74d9e..3b5c1e1c4 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java
@@ -6,13 +6,13 @@ import cn.hutool.core.io.IoUtil;
import com.baomidou.lock.annotation.Lock4j;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.domain.R;
-import org.dromara.common.redis.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.core.domain.PageResult;
import org.dromara.common.mybatis.helper.DataBaseHelper;
+import org.dromara.common.redis.annotation.RepeatSubmit;
import org.dromara.common.web.core.BaseController;
import org.dromara.gen.domain.GenTable;
import org.dromara.gen.domain.GenTableColumn;
@@ -39,7 +39,11 @@ public class GenController extends BaseController {
private final IGenTableService genTableService;
/**
- * 查询代码生成列表
+ * 分页查询代码生成业务列表。
+ *
+ * @param genTable 查询条件
+ * @param pageQuery 分页参数
+ * @return 代码生成列表
*/
@SaCheckPermission("tool:gen:list")
@GetMapping("/list")
@@ -51,6 +55,7 @@ public class GenController extends BaseController {
* 修改代码生成业务
*
* @param tableId 表ID
+ * @return 表、字段与可选业务表信息
*/
@RepeatSubmit()
@SaCheckPermission("tool:gen:query")
@@ -67,7 +72,11 @@ public class GenController extends BaseController {
}
/**
- * 查询数据库列表
+ * 分页查询数据库表列表。
+ *
+ * @param genTable 查询条件
+ * @param pageQuery 分页参数
+ * @return 数据库表列表
*/
@SaCheckPermission("tool:gen:list")
@GetMapping("/db/list")
@@ -79,6 +88,7 @@ public class GenController extends BaseController {
* 查询数据表字段列表
*
* @param tableId 表ID
+ * @return 字段列表
*/
@SaCheckPermission("tool:gen:list")
@GetMapping(value = "/column/{tableId}")
@@ -90,8 +100,9 @@ public class GenController extends BaseController {
/**
* 导入表结构(保存)
*
- * @param tables 表名串
+ * @param tables 表名串
* @param dataName 数据源名称
+ * @return 操作结果
*/
@SaCheckPermission("tool:gen:import")
@Log(title = "代码生成", businessType = BusinessType.IMPORT)
@@ -107,7 +118,10 @@ public class GenController extends BaseController {
}
/**
- * 修改保存代码生成业务
+ * 保存代码生成业务配置。
+ *
+ * @param genTable 业务配置
+ * @return 操作结果
*/
@SaCheckPermission("tool:gen:edit")
@Log(title = "代码生成", businessType = BusinessType.UPDATE)
@@ -123,6 +137,7 @@ public class GenController extends BaseController {
* 删除代码生成
*
* @param tableIds 表ID串
+ * @return 操作结果
*/
@SaCheckPermission("tool:gen:remove")
@Log(title = "代码生成", businessType = BusinessType.DELETE)
@@ -136,6 +151,7 @@ public class GenController extends BaseController {
* 预览代码
*
* @param tableId 表ID
+ * @return 模板路径与生成代码内容映射
*/
@SaCheckPermission("tool:gen:preview")
@GetMapping("/preview/{tableId}")
@@ -147,6 +163,7 @@ public class GenController extends BaseController {
/**
* 生成代码(下载方式)
*
+ * @param response HTTP 响应
* @param tableId 表ID
*/
@SaCheckPermission("tool:gen:code")
@@ -161,6 +178,7 @@ public class GenController extends BaseController {
* 生成代码(自定义路径)
*
* @param tableId 表ID
+ * @return 操作结果
*/
@SaCheckPermission("tool:gen:code")
@Log(title = "代码生成", businessType = BusinessType.GENCODE)
@@ -174,6 +192,7 @@ public class GenController extends BaseController {
* 同步数据库
*
* @param tableId 表ID
+ * @return 操作结果
*/
@SaCheckPermission("tool:gen:edit")
@Log(title = "代码生成", businessType = BusinessType.UPDATE)
@@ -187,6 +206,7 @@ public class GenController extends BaseController {
/**
* 批量生成代码
*
+ * @param response HTTP 响应
* @param tableIdStr 表ID串
*/
@SaCheckPermission("tool:gen:code")
@@ -199,7 +219,10 @@ public class GenController extends BaseController {
}
/**
- * 生成zip文件
+ * 将生成结果写出为 zip 文件流。
+ *
+ * @param response HTTP 响应
+ * @param data zip 二进制数据
*/
private void genCode(HttpServletResponse response, byte[] data) throws IOException {
response.reset();
@@ -212,11 +235,13 @@ public class GenController extends BaseController {
}
/**
- * 查询数据源名称列表
+ * 查询当前可用数据源名称列表。
+ *
+ * @return 数据源名称集合
*/
@SaCheckPermission("tool:gen:list")
@GetMapping(value = "/getDataNames")
- public R