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 3 import cn.hutool.core.util.ArrayUtil;
4 4 import cn.hutool.core.util.RandomUtil;
5 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  6 +import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
6 7 import uk.co.jemos.podam.api.PodamFactory;
7 8 import uk.co.jemos.podam.api.PodamFactoryImpl;
8 9  
... ... @@ -21,6 +22,9 @@ public class RandomUtils {
21 22  
22 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 28 private static final int RANDOM_DATE_MAX = 30;
25 29  
26 30 private static final int RANDOM_COLLECTION_LENGTH = 5;
... ... @@ -37,6 +41,10 @@ public class RandomUtils {
37 41 if (attributeMetadata.getAttributeName().equals("status")) {
38 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 48 return RandomUtil.randomInt();
41 49 });
42 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 2 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
4 3 "no" varchar(32) NOT NULL,
5 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 86 vueFilePath("api/${table.moduleName}/${classNameVar}.js"))
87 87 // SQL
88 88 .put("codegen/sql/sql.vm", "sql/sql.sql")
  89 + .put("codegen/sql/h2.vm", "sql/h2.sql")
89 90 .build();
90 91  
91 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 24  
25 25 *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础
26 26 *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口
27   -*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成
  27 +*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 测试数据库的生成
28 28 *【重构】将数据库文档调整到 tool 模块,更加明确
29 29  
30 30 ### 🐞 Bug Fixes
... ...