Commit 24e083b3ae93b4b1c6772244ac54db2f13a5f0b4

Authored by YunaiV
1 parent 0773a4c4

多模块重构 11:新增 H2 SQL 脚本的生成

yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.test.core.util; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.test.core.util;
3 import cn.hutool.core.util.ArrayUtil; 3 import cn.hutool.core.util.ArrayUtil;
4 import cn.hutool.core.util.RandomUtil; 4 import cn.hutool.core.util.RandomUtil;
5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  6 +import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
6 import uk.co.jemos.podam.api.PodamFactory; 7 import uk.co.jemos.podam.api.PodamFactory;
7 import uk.co.jemos.podam.api.PodamFactoryImpl; 8 import uk.co.jemos.podam.api.PodamFactoryImpl;
8 9
@@ -21,6 +22,9 @@ public class RandomUtils { @@ -21,6 +22,9 @@ public class RandomUtils {
21 22
22 private static final int RANDOM_STRING_LENGTH = 10; 23 private static final int RANDOM_STRING_LENGTH = 10;
23 24
  25 + private static final Set<String> TINYINT_FIELDS = SetUtils.asSet("type", "category");
  26 + private static final int TINYINT_MAX = 127;
  27 +
24 private static final int RANDOM_DATE_MAX = 30; 28 private static final int RANDOM_DATE_MAX = 30;
25 29
26 private static final int RANDOM_COLLECTION_LENGTH = 5; 30 private static final int RANDOM_COLLECTION_LENGTH = 5;
@@ -37,6 +41,10 @@ public class RandomUtils { @@ -37,6 +41,10 @@ public class RandomUtils {
37 if (attributeMetadata.getAttributeName().equals("status")) { 41 if (attributeMetadata.getAttributeName().equals("status")) {
38 return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); 42 return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus();
39 } 43 }
  44 + // 针对部分字段,使用 tinyint 范围
  45 + if (TINYINT_FIELDS.contains(attributeMetadata.getAttributeName())) {
  46 + return RandomUtil.randomInt(1, TINYINT_MAX + 1);
  47 + }
40 return RandomUtil.randomInt(); 48 return RandomUtil.randomInt();
41 }); 49 });
42 // Boolean 50 // Boolean
yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql
1 -CREATE TABLE IF NOT EXISTS "pay_merchant"  
2 -( 1 +CREATE TABLE IF NOT EXISTS "pay_merchant" (
3 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, 2 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
4 "no" varchar(32) NOT NULL, 3 "no" varchar(32) NOT NULL,
5 "name" varchar(64) NOT NULL, 4 "name" varchar(64) NOT NULL,
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java
@@ -86,6 +86,7 @@ public class CodegenEngine { @@ -86,6 +86,7 @@ public class CodegenEngine {
86 vueFilePath("api/${table.moduleName}/${classNameVar}.js")) 86 vueFilePath("api/${table.moduleName}/${classNameVar}.js"))
87 // SQL 87 // SQL
88 .put("codegen/sql/sql.vm", "sql/sql.sql") 88 .put("codegen/sql/sql.vm", "sql/sql.sql")
  89 + .put("codegen/sql/h2.vm", "sql/h2.sql")
89 .build(); 90 .build();
90 91
91 @Resource 92 @Resource
yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm 0 → 100644
  1 +-- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/create_tables.sql 文件里
  2 +CREATE TABLE IF NOT EXISTS "${table.tableName}" (
  3 +#foreach ($column in $columns)
  4 + #if (${column.primaryKey})##处理主键
  5 + "${column.javaField}"#if (${column.javaType} == 'String') ${column.columnType} NOT NULL#else ${column.columnType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end,
  6 + #else
  7 + #if (${column.columnName} == 'create_time')
  8 + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  9 + #elseif (${column.columnName} == 'update_time')
  10 + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  11 + #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater')
  12 + "${column.columnName}" ${column.columnType} DEFAULT '',
  13 + #elseif (${column.columnName} == 'deleted')
  14 + "deleted" bit NOT NULL DEFAULT FALSE,
  15 + #else
  16 + "${column.columnName}" ${column.columnType}#if (${column.nullable} == false) NOT NULL#end,
  17 + #end
  18 + #end
  19 +#end
  20 + PRIMARY KEY ("${primaryColumn.columnName}")
  21 +) COMMENT '${table.tableComment}';
  22 +
  23 +-- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/clean.sql 文件里
  24 +DELETE FROM "${table.tableName}";
yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql
  1 +DELETE FROM "tool_test_demo";
yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql
  1 +CREATE TABLE IF NOT EXISTS "tool_test_demo" (
  2 + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  3 + "name" varchar(100) NOT NULL,
  4 + "status" tinyint NOT NULL,
  5 + "type" tinyint NOT NULL,
  6 + "category" tinyint NOT NULL,
  7 + "remark" varchar(500),
  8 + "creator" varchar(64) DEFAULT '''',
  9 + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  10 + "updater" varchar(64) DEFAULT '''',
  11 + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  12 + "deleted" bit NOT NULL DEFAULT FALSE,
  13 + PRIMARY KEY ("id")
  14 +) COMMENT '字典类型表';
yudao-server/src/test/resources/application-unit-test.yaml deleted
1 -spring:  
2 - main:  
3 - lazy-initialization: true # 开启懒加载,加快速度  
4 - banner-mode: off # 单元测试,禁用 Banner  
5 -  
6 ---- #################### 数据库相关配置 ####################  
7 -  
8 -spring:  
9 - # 数据源配置项  
10 - datasource:  
11 - name: ruoyi-vue-pro  
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写  
13 - driver-class-name: org.h2.Driver  
14 - username: sa  
15 - password:  
16 - schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语句,使用 https://www.jooq.org/translate/ 工具  
17 - druid:  
18 - async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度  
19 - initial-size: 1 # 单元测试,配置为 1,提升启动速度  
20 -  
21 - # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优  
22 - redis:  
23 - host: 127.0.0.1 # 地址  
24 - port: 16379 # 端口(单元测试,使用 16379 端口)  
25 - database: 0 # 数据库索引  
26 -  
27 -mybatis:  
28 - lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试  
29 -  
30 ---- #################### 定时任务相关配置 ####################  
31 -  
32 ---- #################### 配置中心相关配置 ####################  
33 -  
34 ---- #################### 服务保障相关配置 ####################  
35 -  
36 -# Lock4j 配置项(单元测试,禁用 Lock4j)  
37 -  
38 -# Resilience4j 配置项  
39 -  
40 ---- #################### 监控相关配置 ####################  
41 -  
42 ---- #################### 芋道相关配置 ####################  
43 -  
44 -# 芋道配置项,设置当前项目所有自定义的配置  
yudao-server/src/test/resources/logback.xml deleted
1 -<configuration>  
2 - <!-- 由于单元测试未开启 Spring Boot 的上下文,所以只能使用 logback.xml 文件 -->  
3 -  
4 - <!-- 引用 Spring Boot 的 logback 基础配置 -->  
5 - <include resource="org/springframework/boot/logging/logback/defaults.xml" />  
6 -  
7 - <!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->  
8 - <property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%thread] [%tid] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>  
9 -  
10 - <!-- 控制台 Appender -->  
11 - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">       
12 - <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">  
13 - <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">  
14 - <pattern>${PATTERN_DEFAULT}</pattern>  
15 - </layout>  
16 - </encoder>  
17 - </appender>  
18 -  
19 - <root level="INFO">  
20 - <appender-ref ref="STDOUT"/>  
21 - </root>  
22 -  
23 -</configuration>  
yudao-server/src/test/resources/sql/clean.sql deleted
1 --- inf 开头的 DB  
2 -  
3 -  
4 --- pay 开头的 DB  
5 -DELETE FROM pay_merchant;  
6 -DELETE FROM pay_app;  
7 -DELETE FROM pay_channel;  
8 -DELETE FROM pay_order;  
9 -DELETE FROM pay_refund;  
10 -  
11 --- bpm 开头的 DB  
12 -DELETE FROM "bpm_form";  
13 -DELETE FROM "bpm_user_group";  
yudao-server/src/test/resources/sql/create_tables.sql deleted
1 --- inf 开头的 DB  
2 -  
3 -  
4 -CREATE TABLE IF NOT EXISTS "pay_merchant"  
5 -(  
6 - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
7 - "no" varchar(32) NOT NULL,  
8 - "name" varchar(64) NOT NULL,  
9 - "short_name" varchar(64) NOT NULL,  
10 - "status" tinyint NOT NULL,  
11 - "remark" varchar(255) DEFAULT NULL,  
12 - "creator" varchar(64) DEFAULT '',  
13 - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  
14 - "updater" varchar(64) DEFAULT '',  
15 - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
16 - "deleted" bit(1) NOT NULL DEFAULT FALSE,  
17 - PRIMARY KEY ("id")  
18 -) COMMENT '支付商户信息';  
19 -  
20 --- bpm 开头的 DB  
21 -  
22 -CREATE TABLE IF NOT EXISTS "pay_app" (  
23 - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
24 - "name" varchar(64) NOT NULL,  
25 - "status" tinyint NOT NULL,  
26 - "remark" varchar(255) DEFAULT NULL,  
27 - `pay_notify_url` varchar(1024) NOT NULL,  
28 - `refund_notify_url` varchar(1024) NOT NULL,  
29 - `merchant_id` bigint(20) NOT NULL,  
30 - "creator" varchar(64) DEFAULT '',  
31 - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  
32 - "updater" varchar(64) DEFAULT '',  
33 - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
34 - "deleted" bit(1) NOT NULL DEFAULT FALSE,  
35 - PRIMARY KEY ("id")  
36 -) COMMENT = '支付应用信息';  
37 -  
38 -CREATE TABLE IF NOT EXISTS "pay_channel" (  
39 - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
40 - "code" varchar(32) NOT NULL,  
41 - "status" tinyint(4) NOT NULL,  
42 - "remark" varchar(255) DEFAULT NULL,  
43 - "fee_rate" double NOT NULL DEFAULT 0,  
44 - "merchant_id" bigint(20) NOT NULL,  
45 - "app_id" bigint(20) NOT NULL,  
46 - "config" varchar(10240) NOT NULL,  
47 - "creator" varchar(64) NULL DEFAULT '',  
48 - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  
49 - "updater" varchar(64) NULL DEFAULT '',  
50 - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
51 - "deleted" bit(1) NOT NULL DEFAULT FALSE,  
52 - PRIMARY KEY ("id")  
53 -) COMMENT = '支付渠道';  
54 -  
55 -CREATE TABLE IF NOT EXISTS `pay_order` (  
56 - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
57 - `merchant_id` bigint(20) NOT NULL,  
58 - `app_id` bigint(20) NOT NULL,  
59 - `channel_id` bigint(20) DEFAULT NULL,  
60 - `channel_code` varchar(32) DEFAULT NULL,  
61 - `merchant_order_id` varchar(64) NOT NULL,  
62 - `subject` varchar(32) NOT NULL,  
63 - `body` varchar(128) NOT NULL,  
64 - `notify_url` varchar(1024) NOT NULL,  
65 - `notify_status` tinyint(4) NOT NULL,  
66 - `amount` bigint(20) NOT NULL,  
67 - `channel_fee_rate` double DEFAULT 0,  
68 - `channel_fee_amount` bigint(20) DEFAULT 0,  
69 - `status` tinyint(4) NOT NULL,  
70 - `user_ip` varchar(50) NOT NULL,  
71 - `expire_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,  
72 - `success_time` datetime(0) DEFAULT CURRENT_TIMESTAMP,  
73 - `notify_time` datetime(0) DEFAULT CURRENT_TIMESTAMP,  
74 - `success_extension_id` bigint(20) DEFAULT NULL COMMENT '支付成功的订单拓展单编号',  
75 - `refund_status` tinyint(4) NOT NULL,  
76 - `refund_times` tinyint(4) NOT NULL,  
77 - `refund_amount` bigint(20) NOT NULL,  
78 - `channel_user_id` varchar(255) DEFAULT NULL,  
79 - `channel_order_no` varchar(64) DEFAULT NULL,  
80 - `creator` varchar(64) DEFAULT '',  
81 - `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,  
82 - `updater` varchar(64) DEFAULT '',  
83 - `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
84 - `deleted` bit(1) NOT NULL DEFAULT FALSE,  
85 - PRIMARY KEY ("id")  
86 -) COMMENT = '支付订单';  
87 -  
88 -CREATE TABLE IF NOT EXISTS `pay_refund` (  
89 - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
90 - `merchant_id` bigint(20) NOT NULL,  
91 - `app_id` bigint(20) NOT NULL,  
92 - `channel_id` bigint(20) NOT NULL,  
93 - `channel_code` varchar(32) NOT NULL,  
94 - `order_id` bigint(20) NOT NULL,  
95 - `trade_no` varchar(64) NOT NULL,  
96 - `merchant_order_id` varchar(64) NOT NULL,  
97 - `merchant_refund_no` varchar(64) NOT NULL,  
98 - `notify_url` varchar(1024) NOT NULL,  
99 - `notify_status` tinyint(4) NOT NULL,  
100 - `status` tinyint(4) NOT NULL,  
101 - `type` tinyint(4) NOT NULL,  
102 - `pay_amount` bigint(20) NOT NULL,  
103 - `refund_amount` bigint(20) NOT NULL,  
104 - `reason` varchar(256) NOT NULL,  
105 - `user_ip` varchar(50) NULL DEFAULT NULL,  
106 - `channel_order_no` varchar(64) NOT NULL,  
107 - `channel_refund_no` varchar(64) NULL DEFAULT NULL,  
108 - `channel_error_code` varchar(128) NULL DEFAULT NULL,  
109 - `channel_error_msg` varchar(256) NULL DEFAULT NULL,  
110 - `channel_extras` varchar(1024) NULL DEFAULT NULL,  
111 - `expire_time` datetime(0) NULL DEFAULT NULL,  
112 - `success_time` datetime(0) NULL DEFAULT NULL,  
113 - `notify_time` datetime(0) NULL DEFAULT NULL,  
114 - `creator` varchar(64) NULL DEFAULT '',  
115 - `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,  
116 - `updater` varchar(64) NULL DEFAULT '',  
117 - `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
118 - `deleted` bit(1) NOT NULL DEFAULT FALSE,  
119 - PRIMARY KEY ("id")  
120 -) COMMENT = '退款订单';  
121 -  
122 --- bpm 开头的 DB  
123 -  
124 -CREATE TABLE IF NOT EXISTS "bpm_form" (  
125 - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
126 - "name" varchar(63) NOT NULL,  
127 - "status" tinyint NOT NULL,  
128 - "fields" varchar(255) NOT NULL,  
129 - "conf" varchar(255) NOT NULL,  
130 - "remark" varchar(255),  
131 - "creator" varchar(64) DEFAULT '',  
132 - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  
133 - "updater" varchar(64) DEFAULT '',  
134 - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  
135 - "deleted" bit NOT NULL DEFAULT FALSE,  
136 - PRIMARY KEY ("id")  
137 -) COMMENT '动态表单';  
138 -  
139 -CREATE TABLE IF NOT EXISTS "bpm_user_group" (  
140 - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,  
141 - "name" varchar(63) NOT NULL,  
142 - "description" varchar(255) NOT NULL,  
143 - "status" tinyint NOT NULL,  
144 - "member_user_ids" varchar(255) NOT NULL,  
145 - "creator" varchar(64) DEFAULT '',  
146 - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  
147 - "updater" varchar(64) DEFAULT '',  
148 - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  
149 - "deleted" bit NOT NULL DEFAULT FALSE,  
150 - PRIMARY KEY ("id")  
151 - ) COMMENT '用户组';  
更新日志.md
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 24
25 *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础 25 *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础
26 *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口 26 *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口
27 -*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成 27 +*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 测试数据库的生成
28 *【重构】将数据库文档调整到 tool 模块,更加明确 28 *【重构】将数据库文档调整到 tool 模块,更加明确
29 29
30 ### 🐞 Bug Fixes 30 ### 🐞 Bug Fixes