Просмотр исходного кода

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

YunaiV 3 лет назад
Родитель
Сommit
24e083b3ae

+ 8 - 0
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;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
 import uk.co.jemos.podam.api.PodamFactory;
 import uk.co.jemos.podam.api.PodamFactoryImpl;
 
@@ -21,6 +22,9 @@ public class RandomUtils {
 
     private static final int RANDOM_STRING_LENGTH = 10;
 
+    private static final Set<String> TINYINT_FIELDS = SetUtils.asSet("type", "category");
+    private static final int TINYINT_MAX = 127;
+
     private static final int RANDOM_DATE_MAX = 30;
 
     private static final int RANDOM_COLLECTION_LENGTH = 5;
@@ -37,6 +41,10 @@ public class RandomUtils {
             if (attributeMetadata.getAttributeName().equals("status")) {
                 return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus();
             }
+            // 针对部分字段,使用 tinyint 范围
+            if (TINYINT_FIELDS.contains(attributeMetadata.getAttributeName())) {
+                return RandomUtil.randomInt(1, TINYINT_MAX + 1);
+            }
             return RandomUtil.randomInt();
         });
         // Boolean

+ 1 - 2
yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql

@@ -1,5 +1,4 @@
-CREATE TABLE IF NOT EXISTS "pay_merchant"
-(
+CREATE TABLE IF NOT EXISTS "pay_merchant" (
     "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
     "no"          varchar(32) NOT NULL,
     "name"        varchar(64) NOT NULL,

+ 1 - 0
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 {
                     vueFilePath("api/${table.moduleName}/${classNameVar}.js"))
             // SQL
             .put("codegen/sql/sql.vm", "sql/sql.sql")
+            .put("codegen/sql/h2.vm", "sql/h2.sql")
             .build();
 
     @Resource

+ 24 - 0
yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm

@@ -0,0 +1,24 @@
+-- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/create_tables.sql 文件里
+CREATE TABLE IF NOT EXISTS "${table.tableName}" (
+#foreach ($column in $columns)
+    #if (${column.primaryKey})##处理主键
+    "${column.javaField}"#if (${column.javaType} == 'String') ${column.columnType} NOT NULL#else ${column.columnType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end,
+    #else
+    #if (${column.columnName} == 'create_time')
+    "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    #elseif (${column.columnName} == 'update_time')
+    "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater')
+    "${column.columnName}" ${column.columnType} DEFAULT '',
+    #elseif (${column.columnName} == 'deleted')
+    "deleted" bit NOT NULL DEFAULT FALSE,
+    #else
+    "${column.columnName}" ${column.columnType}#if (${column.nullable} == false) NOT NULL#end,
+    #end
+    #end
+#end
+    PRIMARY KEY ("${primaryColumn.columnName}")
+) COMMENT '${table.tableComment}';
+
+-- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/clean.sql 文件里
+DELETE FROM "${table.tableName}";

+ 1 - 0
yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql

@@ -0,0 +1 @@
+DELETE FROM "tool_test_demo";

+ 14 - 0
yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql

@@ -0,0 +1,14 @@
+CREATE TABLE IF NOT EXISTS "tool_test_demo" (
+    "id"          bigint       NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "name"        varchar(100) NOT NULL,
+    "status"      tinyint      NOT NULL,
+    "type"        tinyint      NOT NULL,
+    "category"    tinyint      NOT NULL,
+    "remark"      varchar(500),
+    "creator"     varchar(64)           DEFAULT '''',
+    "create_time" datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    "updater"     varchar(64)           DEFAULT '''',
+    "update_time" datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    "deleted"     bit          NOT NULL DEFAULT FALSE,
+    PRIMARY KEY ("id")
+) COMMENT '字典类型表';

+ 0 - 44
yudao-server/src/test/resources/application-unit-test.yaml

@@ -1,44 +0,0 @@
-spring:
-  main:
-    lazy-initialization: true # 开启懒加载,加快速度
-    banner-mode: off # 单元测试,禁用 Banner
-
---- #################### 数据库相关配置 ####################
-
-spring:
-  # 数据源配置项
-  datasource:
-    name: ruoyi-vue-pro
-    url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
-    driver-class-name: org.h2.Driver
-    username: sa
-    password:
-    schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语句,使用 https://www.jooq.org/translate/ 工具
-    druid:
-      async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度
-      initial-size: 1 # 单元测试,配置为 1,提升启动速度
-
-  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
-  redis:
-    host: 127.0.0.1 # 地址
-    port: 16379 # 端口(单元测试,使用 16379 端口)
-    database: 0 # 数据库索引
-
-mybatis:
-  lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
-
---- #################### 定时任务相关配置 ####################
-
---- #################### 配置中心相关配置 ####################
-
---- #################### 服务保障相关配置 ####################
-
-# Lock4j 配置项(单元测试,禁用 Lock4j)
-
-# Resilience4j 配置项
-
---- #################### 监控相关配置 ####################
-
---- #################### 芋道相关配置 ####################
-
-# 芋道配置项,设置当前项目所有自定义的配置

+ 0 - 23
yudao-server/src/test/resources/logback.xml

@@ -1,23 +0,0 @@
-<configuration>
-    <!-- 由于单元测试未开启 Spring Boot 的上下文,所以只能使用 logback.xml 文件 -->
-
-    <!-- 引用 Spring Boot 的 logback 基础配置 -->
-    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
-
-    <!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
-    <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}"/>
-
-    <!-- 控制台 Appender -->
-    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
-        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
-            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
-                <pattern>${PATTERN_DEFAULT}</pattern>
-            </layout>
-        </encoder>
-    </appender>
-
-    <root level="INFO">
-        <appender-ref ref="STDOUT"/>
-    </root>
-
-</configuration>

+ 0 - 10
yudao-server/src/test/resources/sql/clean.sql

@@ -1,13 +0,0 @@
-
-
-DELETE FROM pay_merchant;
-DELETE FROM pay_app;
-DELETE FROM pay_channel;
-DELETE FROM pay_order;
-DELETE FROM pay_refund;
-
-DELETE FROM "bpm_form";
-DELETE FROM "bpm_user_group";

+ 0 - 148
yudao-server/src/test/resources/sql/create_tables.sql

@@ -1,151 +0,0 @@
-
-
-CREATE TABLE IF NOT EXISTS "pay_merchant"
-(
-    "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    "no"          varchar(32) NOT NULL,
-    "name"        varchar(64) NOT NULL,
-    "short_name"  varchar(64) NOT NULL,
-    "status"      tinyint     NOT NULL,
-    "remark"      varchar(255)         DEFAULT NULL,
-    "creator"     varchar(64)          DEFAULT '',
-    "create_time" datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "updater"     varchar(64)          DEFAULT '',
-    "update_time" datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    "deleted"     bit(1)      NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-) COMMENT '支付商户信息';
-
-
-CREATE TABLE IF NOT EXISTS "pay_app" (
-    "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    "name"              varchar(64)   NOT NULL,
-    "status"            tinyint       NOT NULL,
-    "remark"            varchar(255)           DEFAULT NULL,
-    `pay_notify_url`    varchar(1024) NOT NULL,
-    `refund_notify_url` varchar(1024) NOT NULL,
-    `merchant_id`       bigint(20)    NOT NULL,
-    "creator"           varchar(64)            DEFAULT '',
-    "create_time"       datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "updater"           varchar(64)            DEFAULT '',
-    "update_time"       datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    "deleted"           bit(1)        NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-) COMMENT = '支付应用信息';
-
-CREATE TABLE IF NOT EXISTS "pay_channel" (
-    "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    "code"        varchar(32)    NOT NULL,
-    "status"      tinyint(4)     NOT NULL,
-    "remark"      varchar(255)            DEFAULT NULL,
-    "fee_rate"    double         NOT NULL DEFAULT 0,
-    "merchant_id" bigint(20)     NOT NULL,
-    "app_id"      bigint(20)     NOT NULL,
-    "config"      varchar(10240) NOT NULL,
-    "creator"     varchar(64)    NULL     DEFAULT '',
-    "create_time" datetime       NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "updater"     varchar(64)    NULL     DEFAULT '',
-    "update_time" datetime       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    "deleted"     bit(1)         NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-) COMMENT = '支付渠道';
-
-CREATE TABLE IF NOT EXISTS `pay_order` (
-    "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    `merchant_id`          bigint(20)    NOT NULL,
-    `app_id`               bigint(20)    NOT NULL,
-    `channel_id`           bigint(20)             DEFAULT NULL,
-    `channel_code`         varchar(32)            DEFAULT NULL,
-    `merchant_order_id`    varchar(64)   NOT NULL,
-    `subject`              varchar(32)   NOT NULL,
-    `body`                 varchar(128)  NOT NULL,
-    `notify_url`           varchar(1024) NOT NULL,
-    `notify_status`        tinyint(4)    NOT NULL,
-    `amount`               bigint(20)    NOT NULL,
-    `channel_fee_rate`     double                 DEFAULT 0,
-    `channel_fee_amount`   bigint(20)             DEFAULT 0,
-    `status`               tinyint(4)    NOT NULL,
-    `user_ip`              varchar(50)   NOT NULL,
-    `expire_time`          datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    `success_time`         datetime(0)            DEFAULT CURRENT_TIMESTAMP,
-    `notify_time`          datetime(0)            DEFAULT CURRENT_TIMESTAMP,
-    `success_extension_id` bigint(20)             DEFAULT NULL COMMENT '支付成功的订单拓展单编号',
-    `refund_status`        tinyint(4)    NOT NULL,
-    `refund_times`         tinyint(4)    NOT NULL,
-    `refund_amount`        bigint(20)    NOT NULL,
-    `channel_user_id`      varchar(255)           DEFAULT NULL,
-    `channel_order_no`     varchar(64)            DEFAULT NULL,
-    `creator`              varchar(64)            DEFAULT '',
-    `create_time`          datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    `updater`              varchar(64)            DEFAULT '',
-    `update_time`          datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    `deleted`              bit(1)        NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-) COMMENT = '支付订单';
-
-CREATE TABLE IF NOT EXISTS `pay_refund` (
-    "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    `merchant_id`        bigint(20)    NOT NULL,
-    `app_id`             bigint(20)    NOT NULL,
-    `channel_id`         bigint(20)    NOT NULL,
-    `channel_code`       varchar(32)   NOT NULL,
-    `order_id`           bigint(20)    NOT NULL,
-    `trade_no`           varchar(64)   NOT NULL,
-    `merchant_order_id`  varchar(64)   NOT NULL,
-    `merchant_refund_no` varchar(64)   NOT NULL,
-    `notify_url`         varchar(1024) NOT NULL,
-    `notify_status`      tinyint(4)    NOT NULL,
-    `status`             tinyint(4)    NOT NULL,
-    `type`               tinyint(4)    NOT NULL,
-    `pay_amount`         bigint(20)    NOT NULL,
-    `refund_amount`      bigint(20)    NOT NULL,
-    `reason`             varchar(256)  NOT NULL,
-    `user_ip`            varchar(50)   NULL     DEFAULT NULL,
-    `channel_order_no`   varchar(64)   NOT NULL,
-    `channel_refund_no`  varchar(64)   NULL     DEFAULT NULL,
-    `channel_error_code` varchar(128)  NULL     DEFAULT NULL,
-    `channel_error_msg`  varchar(256)  NULL     DEFAULT NULL,
-    `channel_extras`     varchar(1024) NULL     DEFAULT NULL,
-    `expire_time`        datetime(0)   NULL     DEFAULT NULL,
-    `success_time`       datetime(0)   NULL     DEFAULT NULL,
-    `notify_time`        datetime(0)   NULL     DEFAULT NULL,
-    `creator`            varchar(64)   NULL     DEFAULT '',
-    `create_time`        datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    `updater`            varchar(64)   NULL     DEFAULT '',
-    `update_time`        datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    `deleted`            bit(1)        NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-) COMMENT = '退款订单';
-
-
-CREATE TABLE IF NOT EXISTS "bpm_form" (
-    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    "name" varchar(63) NOT NULL,
-    "status" tinyint NOT NULL,
-    "fields" varchar(255) NOT NULL,
-    "conf" varchar(255) NOT NULL,
-    "remark" varchar(255),
-    "creator" varchar(64) DEFAULT '',
-    "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "updater" varchar(64) DEFAULT '',
-    "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "deleted" bit NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-) COMMENT '动态表单';
-
-CREATE TABLE IF NOT EXISTS "bpm_user_group" (
-    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
-    "name" varchar(63) NOT NULL,
-    "description" varchar(255) NOT NULL,
-    "status" tinyint NOT NULL,
-    "member_user_ids" varchar(255) NOT NULL,
-    "creator" varchar(64) DEFAULT '',
-    "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "updater" varchar(64) DEFAULT '',
-    "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "deleted" bit NOT NULL DEFAULT FALSE,
-    PRIMARY KEY ("id")
-    ) COMMENT '用户组';

+ 1 - 1
更新日志.md

@@ -24,7 +24,7 @@
 
 *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础
 *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口
-*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成
+*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 测试数据库的生成
 *【重构】将数据库文档调整到 tool 模块,更加明确
 
 ### 🐞 Bug Fixes