瀏覽代碼

!153 增加 SQLServer 的适配~
Merge pull request !153 from 芋道源码/feature/1.6.2

芋道源码 3 年之前
父節點
當前提交
e750e15b96
共有 37 個文件被更改,包括 5891 次插入1245 次删除
  1. 3 0
      sql/db2/README.md
  2. 3 0
      sql/dm/README.md
  3. 64 36
      sql/mysql/ruoyi-vue-pro.sql
  4. 1500 58
      sql/oracle/ruoyi-vue-pro.sql
  5. 37 769
      sql/postgresql/ruoyi-vue-pro.sql
  6. 0 43
      sql/ruoyi-vue-pro.sql
  7. 3870 0
      sql/sqlserver/ruoyi-vue-pro.sql
  8. 4 0
      yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml
  9. 4 1
      yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java
  10. 4 4
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
  11. 2 2
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java
  12. 3 3
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/TokenAuthenticationFilter.java
  13. 2 1
      yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java
  14. 7 9
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java
  15. 8 8
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java
  16. 6 6
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java
  17. 2 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java
  18. 10 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/UserSessionDO.java
  19. 6 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/UserPostDO.java
  20. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
  21. 17 7
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/UserSessionMapper.java
  22. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/UserPostMapper.java
  23. 1 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java
  24. 13 8
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java
  25. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/auth/UserSessionTimeoutJob.java
  26. 5 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
  27. 16 9
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java
  28. 68 51
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java
  29. 33 76
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  30. 17 8
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java
  31. 122 91
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java
  32. 42 19
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
  33. 1 1
      yudao-module-system/yudao-module-system-biz/src/test/resources/sql/clean.sql
  34. 3 2
      yudao-module-system/yudao-module-system-biz/src/test/resources/sql/create_tables.sql
  35. 0 1
      yudao-server/pom.xml
  36. 1 1
      yudao-server/src/main/resources/application-dev.yaml
  37. 13 7
      yudao-server/src/main/resources/application-local.yaml

+ 3 - 0
sql/db2/README.md

@@ -0,0 +1,3 @@
+暂未适配 IBM DB2 数据库,如果你有需要,可以微信联系 wangwenbin-server 一起建设。
+
+你需要把表结构与数据导入到 DM 数据库,我来测试与适配代码。

+ 3 - 0
sql/dm/README.md

@@ -0,0 +1,3 @@
+暂未适配国产 DM 数据库,如果你有需要,可以微信联系 wangwenbin-server 一起建设。
+
+你需要把表结构与数据导入到 DM 数据库,我来测试与适配代码。

+ 64 - 36
sql/mysql/ruoyi-vue-pro.sql

@@ -11,7 +11,7 @@
  Target Server Version : 80026
  File Encoding         : 65001
 
- Date: 01/05/2022 23:17:59
+ Date: 02/05/2022 16:13:31
 */
 
 SET NAMES utf8mb4;
@@ -2214,6 +2214,7 @@ INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `cont
 INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '[\"processInstanceName\",\"reason\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-05-01 12:33:14', b'0');
 INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '[\"processInstanceName\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', b'0');
 INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2022-04-10 23:22:49', b'0');
+INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (13, 1, 0, 'admin-sms-login', '后台用户短信登录', '您的验证码是{code}', '[\"code\"]', '', '4372216', 1, 'YUN_PIAN', '1', '2021-10-11 08:10:00', '1', '2021-10-11 08:10:00', b'0');
 COMMIT;
 
 -- ----------------------------
@@ -2329,51 +2330,29 @@ INSERT INTO `system_tenant_package` (`id`, `name`, `status`, `remark`, `menu_ids
 COMMIT;
 
 -- ----------------------------
--- Table structure for system_user
+-- Table structure for system_user_post
 -- ----------------------------
-DROP TABLE IF EXISTS `system_user`;
-CREATE TABLE `system_user`  (
-  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
-  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号',
-  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码',
-  `nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称',
-  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
-  `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID',
-  `post_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '岗位编号数组',
-  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '用户邮箱',
-  `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '手机号码',
-  `sex` tinyint NULL DEFAULT 0 COMMENT '用户性别',
-  `avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '头像地址',
-  `status` tinyint NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)',
-  `login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '最后登录IP',
-  `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
+DROP TABLE IF EXISTS `system_user_post`;
+CREATE TABLE `system_user_post`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `user_id` bigint NOT NULL DEFAULT 0 COMMENT '用户ID',
+  `post_id` bigint NOT NULL DEFAULT 0 COMMENT '岗位ID',
   `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
   `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
   `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
   `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `idx_username`(`username` ASC, `update_time` ASC, `tenant_id` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 116 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息表';
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 115 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户岗位表';
 
 -- ----------------------------
--- Records of system_user
+-- Records of system_user_post
 -- ----------------------------
 BEGIN;
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/48934f2f-92d4-4250-b917-d10d2b262c6a', 0, '127.0.0.1', '2022-04-30 00:06:21', 'admin', '2021-01-05 17:03:47', NULL, '2022-04-30 00:06:21', b'0', 1);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', b'0', 1);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-01-18 00:33:40', '', '2021-01-13 23:50:35', NULL, '2022-01-18 00:33:40', b'0', 1);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$10$e5RpuDCC0GYSt0Hvd2.CjujIXwgGct4SnXi6dVGxdgFsnqgEryk5a', '测试号', NULL, 107, '[]', '111@qq.com', '15601691200', 1, '', 0, '127.0.0.1', '2022-03-19 21:46:19', '', '2021-01-21 02:13:53', NULL, '2022-03-19 21:46:19', b'0', 1);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', b'0', 118);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', b'0', 119);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', b'0', 120);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (110, 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-02-23 19:36:28', '1', '2022-02-22 00:56:14', NULL, '2022-02-27 08:26:59', b'0', 121);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '110', '2022-02-23 13:14:33', '110', '2022-02-23 13:14:33', b'0', 121);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-02-23 19:08:03', '1', '2022-02-23 19:08:03', b'0', 1);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', b'0', 122);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', '', '', 0, '', 0, '127.0.0.1', '2022-03-19 22:15:43', '1', '2022-03-19 21:50:58', NULL, '2022-03-19 22:15:43', b'0', 1);
-INSERT INTO `system_user` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (115, 'aotemane', '$2a$10$/WCwGHu1eq0wOVDd/u8HweJ0gJCHyLS6T7ndCqI8UXZAQom1etk2e', '1', '11', 100, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2022-04-30 02:55:43', b'0', 1);
+INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 1, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', b'0', 1);
+INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 100, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', b'0', 1);
+INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (114, 114, 3, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', b'0', 1);
 COMMIT;
 
 -- ----------------------------
@@ -2418,7 +2397,8 @@ COMMIT;
 -- ----------------------------
 DROP TABLE IF EXISTS `system_user_session`;
 CREATE TABLE `system_user_session`  (
-  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '会话编号',
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
+  `token` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '会话编号',
   `user_id` bigint NOT NULL COMMENT '用户编号',
   `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型',
   `session_timeout` datetime NOT NULL COMMENT '会话超时时间',
@@ -2440,4 +2420,52 @@ CREATE TABLE `system_user_session`  (
 BEGIN;
 COMMIT;
 
+-- ----------------------------
+-- Table structure for system_users
+-- ----------------------------
+DROP TABLE IF EXISTS `system_users`;
+CREATE TABLE `system_users`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
+  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号',
+  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码',
+  `nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
+  `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID',
+  `post_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '岗位编号数组',
+  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '用户邮箱',
+  `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '手机号码',
+  `sex` tinyint NULL DEFAULT 0 COMMENT '用户性别',
+  `avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '头像地址',
+  `status` tinyint NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)',
+  `login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '最后登录IP',
+  `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
+  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `idx_username`(`username` ASC, `update_time` ASC, `tenant_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 116 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息表';
+
+-- ----------------------------
+-- Records of system_users
+-- ----------------------------
+BEGIN;
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/48934f2f-92d4-4250-b917-d10d2b262c6a', 0, '127.0.0.1', '2022-05-02 12:32:50', 'admin', '2021-01-05 17:03:47', NULL, '2022-05-02 12:32:50', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-01-18 00:33:40', '', '2021-01-13 23:50:35', NULL, '2022-01-18 00:33:40', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$10$e5RpuDCC0GYSt0Hvd2.CjujIXwgGct4SnXi6dVGxdgFsnqgEryk5a', '测试号', NULL, 107, '[]', '111@qq.com', '15601691200', 1, '', 0, '127.0.0.1', '2022-03-19 21:46:19', '', '2021-01-21 02:13:53', NULL, '2022-03-19 21:46:19', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', b'0', 118);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', b'0', 119);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', b'0', 120);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (110, 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-02-23 19:36:28', '1', '2022-02-22 00:56:14', NULL, '2022-02-27 08:26:59', b'0', 121);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '110', '2022-02-23 13:14:33', '110', '2022-02-23 13:14:33', b'0', 121);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-02-23 19:08:03', '1', '2022-02-23 19:08:03', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', b'0', 122);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', '', '', 0, '', 0, '127.0.0.1', '2022-03-19 22:15:43', '1', '2022-03-19 21:50:58', NULL, '2022-03-19 22:15:43', b'0', 1);
+INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (115, 'aotemane', '$2a$10$/WCwGHu1eq0wOVDd/u8HweJ0gJCHyLS6T7ndCqI8UXZAQom1etk2e', '1', '11', 100, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2022-04-30 02:55:43', b'0', 1);
+COMMIT;
+
 SET FOREIGN_KEY_CHECKS = 1;

+ 1500 - 58
sql/oracle/ruoyi-vue-pro.sql

@@ -11,7 +11,7 @@
  Target Server Version : 110200
  File Encoding         : 65001
 
- Date: 01/05/2022 21:26:02
+ Date: 02/05/2022 16:52:06
 */
 
 
@@ -3734,6 +3734,7 @@ INSERT INTO "SYSTEM_SMS_TEMPLATE" ("ID", "TYPE", "STATUS", "CODE", "NAME", "CONT
 INSERT INTO "SYSTEM_SMS_TEMPLATE" ("ID", "TYPE", "STATUS", "CODE", "NAME", "CONTENT", "PARAMS", "REMARK", "API_TEMPLATE_ID", "CHANNEL_ID", "CHANNEL_CODE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('9', '2', '0', 'bpm_task_assigned', '【工作流】任务被分配', '您收到了一条新的待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处理链接:{detailUrl}', '["processInstanceName","taskName","startUserNickname","detailUrl"]', NULL, 'suibian', '4', 'DEBUG_DING_TALK', '1', TO_DATE('2022-01-21 22:31:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-01-22 00:03:36', 'SYYYY-MM-DD HH24:MI:SS'), '0');
 INSERT INTO "SYSTEM_SMS_TEMPLATE" ("ID", "TYPE", "STATUS", "CODE", "NAME", "CONTENT", "PARAMS", "REMARK", "API_TEMPLATE_ID", "CHANNEL_ID", "CHANNEL_CODE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('10', '2', '0', 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '["processInstanceName","reason","detailUrl"]', NULL, 'suibian', '4', 'DEBUG_DING_TALK', '1', TO_DATE('2022-01-22 00:03:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-01-22 00:24:31', 'SYYYY-MM-DD HH24:MI:SS'), '0');
 INSERT INTO "SYSTEM_SMS_TEMPLATE" ("ID", "TYPE", "STATUS", "CODE", "NAME", "CONTENT", "PARAMS", "REMARK", "API_TEMPLATE_ID", "CHANNEL_ID", "CHANNEL_CODE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('11', '2', '0', 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '["processInstanceName","detailUrl"]', NULL, 'suibian', '4', 'DEBUG_DING_TALK', '1', TO_DATE('2022-01-22 00:04:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-01-22 00:24:23', 'SYYYY-MM-DD HH24:MI:SS'), '0');
+INSERT INTO "SYSTEM_SMS_TEMPLATE" ("ID", "TYPE", "STATUS", "CODE", "NAME", "CONTENT", "PARAMS", "REMARK", "API_TEMPLATE_ID", "CHANNEL_ID", "CHANNEL_CODE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('13', '1', '0', 'admin-sms-login', '后台用户短信登录', '您的验证码是{code}', '["code"]', NULL, '4372216', '1', 'YUN_PIAN', '1', TO_DATE('2021-10-11 08:10:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2021-10-11 08:10:00', 'SYYYY-MM-DD HH24:MI:SS'), '0');
 COMMIT;
 COMMIT;
 
@@ -3919,10 +3920,10 @@ COMMIT;
 COMMIT;
 
 -- ----------------------------
--- Table structure for SYSTEM_USER
+-- Table structure for SYSTEM_USERS
 -- ----------------------------
-DROP TABLE "SYSTEM_USER";
-CREATE TABLE "SYSTEM_USER" (
+DROP TABLE "SYSTEM_USERS";
+CREATE TABLE "SYSTEM_USERS" (
   "ID" NUMBER(20,0) NOT NULL,
   "USERNAME" NVARCHAR2(30),
   "PASSWORD" NVARCHAR2(100),
@@ -3961,45 +3962,97 @@ PARALLEL 1
 NOCACHE
 DISABLE ROW MOVEMENT
 ;
-COMMENT ON COLUMN "SYSTEM_USER"."ID" IS '用户ID';
-COMMENT ON COLUMN "SYSTEM_USER"."USERNAME" IS '用户账号';
-COMMENT ON COLUMN "SYSTEM_USER"."PASSWORD" IS '密码';
-COMMENT ON COLUMN "SYSTEM_USER"."NICKNAME" IS '用户昵称';
-COMMENT ON COLUMN "SYSTEM_USER"."REMARK" IS '备注';
-COMMENT ON COLUMN "SYSTEM_USER"."DEPT_ID" IS '部门ID';
-COMMENT ON COLUMN "SYSTEM_USER"."POST_IDS" IS '岗位编号数组';
-COMMENT ON COLUMN "SYSTEM_USER"."EMAIL" IS '用户邮箱';
-COMMENT ON COLUMN "SYSTEM_USER"."MOBILE" IS '手机号码';
-COMMENT ON COLUMN "SYSTEM_USER"."SEX" IS '用户性别';
-COMMENT ON COLUMN "SYSTEM_USER"."AVATAR" IS '头像地址';
-COMMENT ON COLUMN "SYSTEM_USER"."STATUS" IS '帐号状态(0正常 1停用)';
-COMMENT ON COLUMN "SYSTEM_USER"."LOGIN_IP" IS '最后登录IP';
-COMMENT ON COLUMN "SYSTEM_USER"."LOGIN_DATE" IS '最后登录时间';
-COMMENT ON COLUMN "SYSTEM_USER"."CREATOR" IS '创建者';
-COMMENT ON COLUMN "SYSTEM_USER"."CREATE_TIME" IS '创建时间';
-COMMENT ON COLUMN "SYSTEM_USER"."UPDATER" IS '更新者';
-COMMENT ON COLUMN "SYSTEM_USER"."UPDATE_TIME" IS '更新时间';
-COMMENT ON COLUMN "SYSTEM_USER"."TENANT_ID" IS '租户编号';
-COMMENT ON COLUMN "SYSTEM_USER"."DELETED" IS '是否删除';
-COMMENT ON TABLE "SYSTEM_USER" IS '用户信息表';
-
--- ----------------------------
--- Records of SYSTEM_USER
--- ----------------------------
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('115', 'anzhen', '$2a$10$Qr2lBUuwvDMb98p/o7iSPuHb7GRi4zPHSq4g01ETuY.l4O5txXfvi', 'anzhen', NULL, '100', '[]', NULL, NULL, NULL, NULL, '0', NULL, NULL, '1', TO_DATE('2022-03-24 18:50:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-03-24 18:50:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('1', 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', '103', '[1]', 'aoteman@126.com', '15612345678', '1', 'http://test.yudao.iocoder.cn/a294ecb2-73dd-4353-bf40-296b8931d0bf', '0', '127.0.0.1', TO_DATE('2022-05-01 20:11:47', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-05-01 20:11:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('100', 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', '104', '[1]', 'yudao@iocoder.cn', '15601691300', '1', NULL, '1', NULL, NULL, NULL, TO_DATE('2021-01-07 09:07:17', 'SYYYY-MM-DD HH24:MI:SS'), '104', TO_DATE('2021-12-16 09:26:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('103', 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', '源码', NULL, '106', NULL, 'yuanma@iocoder.cn', '15601701300', '0', NULL, '0', '127.0.0.1', TO_DATE('2022-01-18 00:33:40', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-13 23:50:35', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-01-18 00:33:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('104', 'test', '$2a$10$e5RpuDCC0GYSt0Hvd2.CjujIXwgGct4SnXi6dVGxdgFsnqgEryk5a', '测试号', NULL, '107', '[]', '111@qq.com', '15601691200', '1', NULL, '0', '127.0.0.1', TO_DATE('2022-03-19 21:46:19', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-21 02:13:53', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-03-19 21:46:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('107', 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-20 22:59:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-27 08:26:51', 'SYYYY-MM-DD HH24:MI:SS'), '118', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('108', 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-20 23:00:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-27 08:26:53', 'SYYYY-MM-DD HH24:MI:SS'), '119', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('109', 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-20 23:11:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-27 08:26:56', 'SYYYY-MM-DD HH24:MI:SS'), '120', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('110', 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', '127.0.0.1', TO_DATE('2022-02-23 19:36:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-02-27 08:26:59', 'SYYYY-MM-DD HH24:MI:SS'), '121', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('111', 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', NULL, NULL, '0', NULL, '0', NULL, NULL, '110', TO_DATE('2022-02-23 13:14:33', 'SYYYY-MM-DD HH24:MI:SS'), '110', TO_DATE('2022-02-23 13:14:33', 'SYYYY-MM-DD HH24:MI:SS'), '121', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('112', 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', NULL, NULL, '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-23 19:08:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-23 19:08:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('113', 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', '127.0.0.1', TO_DATE('2022-03-19 18:38:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-03-19 18:38:51', 'SYYYY-MM-DD HH24:MI:SS'), '122', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('114', 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', NULL, NULL, '0', NULL, '0', '127.0.0.1', TO_DATE('2022-03-19 22:15:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-03-19 21:50:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-01 01:08:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
-INSERT INTO "SYSTEM_USER" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('0', 'admin2', '$2a$10$KYL8IPJPIzuZWfOgPqOuU.VeZqWistCv5pxtoaq2SwPBDgBR4uh6G', '123', NULL, NULL, '[]', NULL, NULL, NULL, NULL, '0', NULL, NULL, '1', TO_DATE('2022-05-01 01:05:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-01 01:05:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+COMMENT ON COLUMN "SYSTEM_USERS"."ID" IS '用户ID';
+COMMENT ON COLUMN "SYSTEM_USERS"."USERNAME" IS '用户账号';
+COMMENT ON COLUMN "SYSTEM_USERS"."PASSWORD" IS '密码';
+COMMENT ON COLUMN "SYSTEM_USERS"."NICKNAME" IS '用户昵称';
+COMMENT ON COLUMN "SYSTEM_USERS"."REMARK" IS '备注';
+COMMENT ON COLUMN "SYSTEM_USERS"."DEPT_ID" IS '部门ID';
+COMMENT ON COLUMN "SYSTEM_USERS"."POST_IDS" IS '岗位编号数组';
+COMMENT ON COLUMN "SYSTEM_USERS"."EMAIL" IS '用户邮箱';
+COMMENT ON COLUMN "SYSTEM_USERS"."MOBILE" IS '手机号码';
+COMMENT ON COLUMN "SYSTEM_USERS"."SEX" IS '用户性别';
+COMMENT ON COLUMN "SYSTEM_USERS"."AVATAR" IS '头像地址';
+COMMENT ON COLUMN "SYSTEM_USERS"."STATUS" IS '帐号状态(0正常 1停用)';
+COMMENT ON COLUMN "SYSTEM_USERS"."LOGIN_IP" IS '最后登录IP';
+COMMENT ON COLUMN "SYSTEM_USERS"."LOGIN_DATE" IS '最后登录时间';
+COMMENT ON COLUMN "SYSTEM_USERS"."CREATOR" IS '创建者';
+COMMENT ON COLUMN "SYSTEM_USERS"."CREATE_TIME" IS '创建时间';
+COMMENT ON COLUMN "SYSTEM_USERS"."UPDATER" IS '更新者';
+COMMENT ON COLUMN "SYSTEM_USERS"."UPDATE_TIME" IS '更新时间';
+COMMENT ON COLUMN "SYSTEM_USERS"."TENANT_ID" IS '租户编号';
+COMMENT ON COLUMN "SYSTEM_USERS"."DELETED" IS '是否删除';
+COMMENT ON TABLE "SYSTEM_USERS" IS '用户信息表';
+
+-- ----------------------------
+-- Records of SYSTEM_USERS
+-- ----------------------------
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('115', 'anzhen', '$2a$10$Qr2lBUuwvDMb98p/o7iSPuHb7GRi4zPHSq4g01ETuY.l4O5txXfvi', 'anzhen', NULL, '100', '[]', NULL, NULL, NULL, NULL, '0', NULL, NULL, '1', TO_DATE('2022-03-24 18:50:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-03-24 18:50:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('1', 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', '103', '[1,2]', 'aoteman@126.com', '15612345678', '1', 'http://test.yudao.iocoder.cn/a294ecb2-73dd-4353-bf40-296b8931d0bf', '0', '127.0.0.1', TO_DATE('2022-05-02 16:43:06', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-02 16:49:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('100', 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', '104', '[1]', 'yudao@iocoder.cn', '15601691300', '1', NULL, '1', NULL, NULL, NULL, TO_DATE('2021-01-07 09:07:17', 'SYYYY-MM-DD HH24:MI:SS'), '104', TO_DATE('2021-12-16 09:26:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('103', 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', '源码', NULL, '106', NULL, 'yuanma@iocoder.cn', '15601701300', '0', NULL, '0', '127.0.0.1', TO_DATE('2022-01-18 00:33:40', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-13 23:50:35', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-01-18 00:33:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('104', 'test', '$2a$10$e5RpuDCC0GYSt0Hvd2.CjujIXwgGct4SnXi6dVGxdgFsnqgEryk5a', '测试号', NULL, '107', '[]', '111@qq.com', '15601691200', '1', NULL, '0', '127.0.0.1', TO_DATE('2022-03-19 21:46:19', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-21 02:13:53', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-03-19 21:46:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('107', 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-20 22:59:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-27 08:26:51', 'SYYYY-MM-DD HH24:MI:SS'), '118', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('108', 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-20 23:00:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-27 08:26:53', 'SYYYY-MM-DD HH24:MI:SS'), '119', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('109', 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-20 23:11:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-27 08:26:56', 'SYYYY-MM-DD HH24:MI:SS'), '120', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('110', 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', '127.0.0.1', TO_DATE('2022-02-23 19:36:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-02-27 08:26:59', 'SYYYY-MM-DD HH24:MI:SS'), '121', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('111', 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', NULL, NULL, '0', NULL, '0', NULL, NULL, '110', TO_DATE('2022-02-23 13:14:33', 'SYYYY-MM-DD HH24:MI:SS'), '110', TO_DATE('2022-02-23 13:14:33', 'SYYYY-MM-DD HH24:MI:SS'), '121', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('112', 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', NULL, NULL, '0', NULL, '0', NULL, NULL, '1', TO_DATE('2022-02-23 19:08:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-02-23 19:08:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('113', 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, NULL, '15601691300', '0', NULL, '0', '127.0.0.1', TO_DATE('2022-03-19 18:38:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2022-03-19 18:38:51', 'SYYYY-MM-DD HH24:MI:SS'), '122', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('114', 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', NULL, NULL, '0', NULL, '0', '127.0.0.1', TO_DATE('2022-03-19 22:15:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-03-19 21:50:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-01 01:08:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+INSERT INTO "SYSTEM_USERS" ("ID", "USERNAME", "PASSWORD", "NICKNAME", "REMARK", "DEPT_ID", "POST_IDS", "EMAIL", "MOBILE", "SEX", "AVATAR", "STATUS", "LOGIN_IP", "LOGIN_DATE", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "TENANT_ID", "DELETED") VALUES ('0', 'admin2', '$2a$10$KYL8IPJPIzuZWfOgPqOuU.VeZqWistCv5pxtoaq2SwPBDgBR4uh6G', '123', NULL, NULL, '[]', NULL, NULL, NULL, NULL, '0', NULL, NULL, '1', TO_DATE('2022-05-01 01:05:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-01 01:05:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', '0');
+COMMIT;
+COMMIT;
+
+-- ----------------------------
+-- Table structure for SYSTEM_USER_POST
+-- ----------------------------
+DROP TABLE "SYSTEM_USER_POST";
+CREATE TABLE "SYSTEM_USER_POST" (
+  "ID" NUMBER(20,0) NOT NULL,
+  "USER_ID" NUMBER(20,0) NOT NULL,
+  "POST_ID" NUMBER(20,0) NOT NULL,
+  "CREATOR" NVARCHAR2(64),
+  "CREATE_TIME" DATE NOT NULL,
+  "UPDATER" NVARCHAR2(64),
+  "UPDATE_TIME" DATE NOT NULL,
+  "DELETED" NUMBER(1,0) DEFAULT 0 NOT NULL,
+  "TENANT_ID" NUMBER(20,0) DEFAULT 0 NOT NULL
+)
+LOGGING
+NOCOMPRESS
+PCTFREE 10
+INITRANS 1
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+)
+PARALLEL 1
+NOCACHE
+DISABLE ROW MOVEMENT
+;
+COMMENT ON COLUMN "SYSTEM_USER_POST"."ID" IS 'id';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."USER_ID" IS '用户ID';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."POST_ID" IS '岗位ID';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."CREATOR" IS '创建者';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."CREATE_TIME" IS '创建时间';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."UPDATER" IS '更新者';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."UPDATE_TIME" IS '更新时间';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."DELETED" IS '是否删除';
+COMMENT ON COLUMN "SYSTEM_USER_POST"."TENANT_ID" IS '租户编号';
+COMMENT ON TABLE "SYSTEM_USER_POST" IS '用户岗位表';
+
+-- ----------------------------
+-- Records of SYSTEM_USER_POST
+-- ----------------------------
+INSERT INTO "SYSTEM_USER_POST" ("ID", "USER_ID", "POST_ID", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED", "TENANT_ID") VALUES ('112', '1', '1', 'admin', TO_DATE('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', '1');
+INSERT INTO "SYSTEM_USER_POST" ("ID", "USER_ID", "POST_ID", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED", "TENANT_ID") VALUES ('113', '100', '1', 'admin', TO_DATE('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', '1');
+INSERT INTO "SYSTEM_USER_POST" ("ID", "USER_ID", "POST_ID", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED", "TENANT_ID") VALUES ('114', '114', '3', 'admin', TO_DATE('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', '1');
 COMMIT;
 COMMIT;
 
@@ -4071,7 +4124,8 @@ COMMIT;
 -- ----------------------------
 DROP TABLE "SYSTEM_USER_SESSION";
 CREATE TABLE "SYSTEM_USER_SESSION" (
-  "ID" NVARCHAR2(32) NOT NULL,
+  "ID" NUMBER(20,0) NOT NULL,
+  "TOKEN" NVARCHAR2(32) NOT NULL,
   "USER_ID" NUMBER(20,0) NOT NULL,
   "USER_TYPE" NUMBER(4,0) NOT NULL,
   "SESSION_TIMEOUT" DATE NOT NULL,
@@ -4102,17 +4156,1405 @@ PARALLEL 1
 NOCACHE
 DISABLE ROW MOVEMENT
 ;
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."ID" IS '会话编号';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."USER_ID" IS '用户编号';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."USER_TYPE" IS '用户类型';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."SESSION_TIMEOUT" IS '会话超时时间';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."USERNAME" IS '用户账号';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."USER_IP" IS '用户 IP';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."USER_AGENT" IS '浏览器 UA';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."CREATOR" IS '创建者';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."CREATE_TIME" IS '创建时间';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."UPDATER" IS '更新者';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."UPDATE_TIME" IS '更新时间';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."TENANT_ID" IS '租户编号';
-COMMENT ON COLUMN "SYSTEM_USER_SESSION"."DELETED" IS '是否删除';
-COMMENT ON TABLE "SYSTEM_USER_SESSION" IS '用户在线 Session';
+
+-- ----------------------------
+-- Records of SYSTEM_USER_SESSION
+-- ----------------------------
+COMMIT;
+COMMIT;
+
+-- ----------------------------
+-- Sequence structure for BPM_FORM_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_FORM_SEQ";
+CREATE SEQUENCE "BPM_FORM_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for BPM_OA_LEAVE_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_OA_LEAVE_SEQ";
+CREATE SEQUENCE "BPM_OA_LEAVE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for BPM_PROCESS_DEFINITION_EXT_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_PROCESS_DEFINITION_EXT_SEQ";
+CREATE SEQUENCE "BPM_PROCESS_DEFINITION_EXT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for BPM_PROCESS_INSTANCE_EXT_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_PROCESS_INSTANCE_EXT_SEQ";
+CREATE SEQUENCE "BPM_PROCESS_INSTANCE_EXT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for BPM_TASK_ASSIGN_RULE_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_TASK_ASSIGN_RULE_SEQ";
+CREATE SEQUENCE "BPM_TASK_ASSIGN_RULE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for BPM_TASK_EXT_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_TASK_EXT_SEQ";
+CREATE SEQUENCE "BPM_TASK_EXT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for BPM_USER_GROUP_SEQ
+-- ----------------------------
+DROP SEQUENCE "BPM_USER_GROUP_SEQ";
+CREATE SEQUENCE "BPM_USER_GROUP_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_API_ACCESS_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_API_ACCESS_LOG_SEQ";
+CREATE SEQUENCE "INFRA_API_ACCESS_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_API_ERROR_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_API_ERROR_LOG_SEQ";
+CREATE SEQUENCE "INFRA_API_ERROR_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_CODEGEN_COLUMN_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_CODEGEN_COLUMN_SEQ";
+CREATE SEQUENCE "INFRA_CODEGEN_COLUMN_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_CODEGEN_TABLE_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_CODEGEN_TABLE_SEQ";
+CREATE SEQUENCE "INFRA_CODEGEN_TABLE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_CONFIG_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_CONFIG_SEQ";
+CREATE SEQUENCE "INFRA_CONFIG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_DATA_SOURCE_CONFIG_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_DATA_SOURCE_CONFIG_SEQ";
+CREATE SEQUENCE "INFRA_DATA_SOURCE_CONFIG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_FILE_CONFIG_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_FILE_CONFIG_SEQ";
+CREATE SEQUENCE "INFRA_FILE_CONFIG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_FILE_CONTENT_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_FILE_CONTENT_SEQ";
+CREATE SEQUENCE "INFRA_FILE_CONTENT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_FILE_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_FILE_SEQ";
+CREATE SEQUENCE "INFRA_FILE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_JOB_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_JOB_LOG_SEQ";
+CREATE SEQUENCE "INFRA_JOB_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_JOB_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_JOB_SEQ";
+CREATE SEQUENCE "INFRA_JOB_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for INFRA_TEST_DEMO_SEQ
+-- ----------------------------
+DROP SEQUENCE "INFRA_TEST_DEMO_SEQ";
+CREATE SEQUENCE "INFRA_TEST_DEMO_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for MEMBER_USER_SEQ
+-- ----------------------------
+DROP SEQUENCE "MEMBER_USER_SEQ";
+CREATE SEQUENCE "MEMBER_USER_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_APP_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_APP_SEQ";
+CREATE SEQUENCE "PAY_APP_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_CHANNEL_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_CHANNEL_SEQ";
+CREATE SEQUENCE "PAY_CHANNEL_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_MERCHANT_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_MERCHANT_SEQ";
+CREATE SEQUENCE "PAY_MERCHANT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_NOTIFY_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_NOTIFY_LOG_SEQ";
+CREATE SEQUENCE "PAY_NOTIFY_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_NOTIFY_TASK_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_NOTIFY_TASK_SEQ";
+CREATE SEQUENCE "PAY_NOTIFY_TASK_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_ORDER_EXTENSION_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_ORDER_EXTENSION_SEQ";
+CREATE SEQUENCE "PAY_ORDER_EXTENSION_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_ORDER_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_ORDER_SEQ";
+CREATE SEQUENCE "PAY_ORDER_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for PAY_REFUND_SEQ
+-- ----------------------------
+DROP SEQUENCE "PAY_REFUND_SEQ";
+CREATE SEQUENCE "PAY_REFUND_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_DEPT_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_DEPT_SEQ";
+CREATE SEQUENCE "SYSTEM_DEPT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_DICT_DATA_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_DICT_DATA_SEQ";
+CREATE SEQUENCE "SYSTEM_DICT_DATA_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_DICT_TYPE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_DICT_TYPE_SEQ";
+CREATE SEQUENCE "SYSTEM_DICT_TYPE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_ERROR_CODE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_ERROR_CODE_SEQ";
+CREATE SEQUENCE "SYSTEM_ERROR_CODE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_LOGIN_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_LOGIN_LOG_SEQ";
+CREATE SEQUENCE "SYSTEM_LOGIN_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_MENU_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_MENU_SEQ";
+CREATE SEQUENCE "SYSTEM_MENU_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_NOTICE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_NOTICE_SEQ";
+CREATE SEQUENCE "SYSTEM_NOTICE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_OPERATE_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_OPERATE_LOG_SEQ";
+CREATE SEQUENCE "SYSTEM_OPERATE_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_POST_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_POST_SEQ";
+CREATE SEQUENCE "SYSTEM_POST_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_ROLE_MENU_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_ROLE_MENU_SEQ";
+CREATE SEQUENCE "SYSTEM_ROLE_MENU_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_ROLE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_ROLE_SEQ";
+CREATE SEQUENCE "SYSTEM_ROLE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SENSITIVE_WORD_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SENSITIVE_WORD_SEQ";
+CREATE SEQUENCE "SYSTEM_SENSITIVE_WORD_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SMS_CHANNEL_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SMS_CHANNEL_SEQ";
+CREATE SEQUENCE "SYSTEM_SMS_CHANNEL_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SMS_CODE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SMS_CODE_SEQ";
+CREATE SEQUENCE "SYSTEM_SMS_CODE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SMS_LOG_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SMS_LOG_SEQ";
+CREATE SEQUENCE "SYSTEM_SMS_LOG_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SMS_TEMPLATE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SMS_TEMPLATE_SEQ";
+CREATE SEQUENCE "SYSTEM_SMS_TEMPLATE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SOCIAL_USER_BIND_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SOCIAL_USER_BIND_SEQ";
+CREATE SEQUENCE "SYSTEM_SOCIAL_USER_BIND_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_SOCIAL_USER_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_SOCIAL_USER_SEQ";
+CREATE SEQUENCE "SYSTEM_SOCIAL_USER_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_TENANT_PACKAGE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_TENANT_PACKAGE_SEQ";
+CREATE SEQUENCE "SYSTEM_TENANT_PACKAGE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_TENANT_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_TENANT_SEQ";
+CREATE SEQUENCE "SYSTEM_TENANT_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_USER_POST_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_USER_POST_SEQ";
+CREATE SEQUENCE "SYSTEM_USER_POST_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_USER_ROLE_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_USER_ROLE_SEQ";
+CREATE SEQUENCE "SYSTEM_USER_ROLE_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_USER_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_USER_SEQ";
+CREATE SEQUENCE "SYSTEM_USER_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Sequence structure for SYSTEM_USER_SESSION_SEQ
+-- ----------------------------
+DROP SEQUENCE "SYSTEM_USER_SESSION_SEQ";
+CREATE SEQUENCE "SYSTEM_USER_SESSION_SEQ" MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 CACHE 20;
+
+-- ----------------------------
+-- Checks structure for table BPM_FORM
+-- ----------------------------
+ALTER TABLE "BPM_FORM" ADD CONSTRAINT "SYS_C007768" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_FORM" ADD CONSTRAINT "SYS_C007769" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_FORM" ADD CONSTRAINT "SYS_C007770" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_FORM" ADD CONSTRAINT "SYS_C007771" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_FORM" ADD CONSTRAINT "SYS_C007772" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_FORM" ADD CONSTRAINT "SYS_C008199" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table BPM_OA_LEAVE
+-- ----------------------------
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007773" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007774" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007775" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007776" CHECK ("START_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007777" CHECK ("END_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007778" CHECK ("DAY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007779" CHECK ("RESULT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007780" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007781" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C007782" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_OA_LEAVE" ADD CONSTRAINT "SYS_C008200" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table BPM_PROCESS_DEFINITION_EXT
+-- ----------------------------
+ALTER TABLE "BPM_PROCESS_DEFINITION_EXT" ADD CONSTRAINT "SYS_C007783" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_DEFINITION_EXT" ADD CONSTRAINT "SYS_C007784" CHECK ("FORM_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_DEFINITION_EXT" ADD CONSTRAINT "SYS_C007785" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_DEFINITION_EXT" ADD CONSTRAINT "SYS_C007786" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_DEFINITION_EXT" ADD CONSTRAINT "SYS_C007787" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_DEFINITION_EXT" ADD CONSTRAINT "SYS_C008201" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table BPM_PROCESS_INSTANCE_EXT
+-- ----------------------------
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007788" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007789" CHECK ("START_USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007790" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007791" CHECK ("RESULT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007792" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007793" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C007794" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_PROCESS_INSTANCE_EXT" ADD CONSTRAINT "SYS_C008202" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table BPM_TASK_ASSIGN_RULE
+-- ----------------------------
+ALTER TABLE "BPM_TASK_ASSIGN_RULE" ADD CONSTRAINT "SYS_C007795" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_ASSIGN_RULE" ADD CONSTRAINT "SYS_C007796" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_ASSIGN_RULE" ADD CONSTRAINT "SYS_C007797" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_ASSIGN_RULE" ADD CONSTRAINT "SYS_C007798" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_ASSIGN_RULE" ADD CONSTRAINT "SYS_C007799" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_ASSIGN_RULE" ADD CONSTRAINT "SYS_C008203" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table BPM_TASK_EXT
+-- ----------------------------
+ALTER TABLE "BPM_TASK_EXT" ADD CONSTRAINT "SYS_C007800" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_EXT" ADD CONSTRAINT "SYS_C007801" CHECK ("RESULT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_EXT" ADD CONSTRAINT "SYS_C007802" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_EXT" ADD CONSTRAINT "SYS_C007803" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_EXT" ADD CONSTRAINT "SYS_C007804" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_TASK_EXT" ADD CONSTRAINT "SYS_C008204" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table BPM_USER_GROUP
+-- ----------------------------
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C007807" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C007808" CHECK ("MEMBER_USER_IDS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C007809" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C007810" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C007811" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C007812" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BPM_USER_GROUP" ADD CONSTRAINT "SYS_C008205" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_API_ACCESS_LOG
+-- ----------------------------
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007829" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007830" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007831" CHECK ("USER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007832" CHECK ("BEGIN_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007833" CHECK ("END_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007834" CHECK ("DURATION" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007835" CHECK ("RESULT_CODE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007836" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007837" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ACCESS_LOG" ADD CONSTRAINT "SYS_C007838" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_API_ERROR_LOG
+-- ----------------------------
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007851" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007852" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007853" CHECK ("USER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007854" CHECK ("EXCEPTION_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007855" CHECK ("EXCEPTION_MESSAGE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007856" CHECK ("EXCEPTION_ROOT_CAUSE_MESSAGE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007857" CHECK ("EXCEPTION_STACK_TRACE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007858" CHECK ("EXCEPTION_LINE_NUMBER" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007859" CHECK ("PROCESS_STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007860" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007861" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_API_ERROR_LOG" ADD CONSTRAINT "SYS_C007862" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_CODEGEN_COLUMN
+-- ----------------------------
+ALTER TABLE "INFRA_CODEGEN_COLUMN" ADD CONSTRAINT "SYS_C007839" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_COLUMN" ADD CONSTRAINT "SYS_C007840" CHECK ("TABLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_COLUMN" ADD CONSTRAINT "SYS_C007841" CHECK ("ORDINAL_POSITION" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_COLUMN" ADD CONSTRAINT "SYS_C007842" CHECK ("LIST_OPERATION_CONDITION" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_COLUMN" ADD CONSTRAINT "SYS_C007843" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_COLUMN" ADD CONSTRAINT "SYS_C007844" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_CODEGEN_TABLE
+-- ----------------------------
+ALTER TABLE "INFRA_CODEGEN_TABLE" ADD CONSTRAINT "SYS_C007845" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_TABLE" ADD CONSTRAINT "SYS_C007846" CHECK ("DATA_SOURCE_CONFIG_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_TABLE" ADD CONSTRAINT "SYS_C007847" CHECK ("SCENE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_TABLE" ADD CONSTRAINT "SYS_C007848" CHECK ("TEMPLATE_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_TABLE" ADD CONSTRAINT "SYS_C007849" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CODEGEN_TABLE" ADD CONSTRAINT "SYS_C007850" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_CONFIG
+-- ----------------------------
+ALTER TABLE "INFRA_CONFIG" ADD CONSTRAINT "SYS_C007863" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CONFIG" ADD CONSTRAINT "SYS_C007864" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CONFIG" ADD CONSTRAINT "SYS_C007865" CHECK ("VISIBLE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CONFIG" ADD CONSTRAINT "SYS_C007866" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_CONFIG" ADD CONSTRAINT "SYS_C007867" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_DATA_SOURCE_CONFIG
+-- ----------------------------
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008187" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008188" CHECK ("NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008189" CHECK ("URL" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008190" CHECK ("USERNAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008191" CHECK ("PASSWORD" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008192" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008193" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_DATA_SOURCE_CONFIG" ADD CONSTRAINT "SYS_C008194" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_FILE
+-- ----------------------------
+ALTER TABLE "INFRA_FILE" ADD CONSTRAINT "SYS_C007868" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE" ADD CONSTRAINT "SYS_C007869" CHECK ("SIZE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE" ADD CONSTRAINT "SYS_C007870" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE" ADD CONSTRAINT "SYS_C007871" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_FILE_CONFIG
+-- ----------------------------
+ALTER TABLE "INFRA_FILE_CONFIG" ADD CONSTRAINT "SYS_C007872" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONFIG" ADD CONSTRAINT "SYS_C007873" CHECK ("STORAGE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONFIG" ADD CONSTRAINT "SYS_C007874" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONFIG" ADD CONSTRAINT "SYS_C007875" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_FILE_CONTENT
+-- ----------------------------
+ALTER TABLE "INFRA_FILE_CONTENT" ADD CONSTRAINT "SYS_C007876" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONTENT" ADD CONSTRAINT "SYS_C007877" CHECK ("CONFIG_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONTENT" ADD CONSTRAINT "SYS_C007878" CHECK ("CONTENT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONTENT" ADD CONSTRAINT "SYS_C007879" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_FILE_CONTENT" ADD CONSTRAINT "SYS_C007880" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_JOB
+-- ----------------------------
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007881" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007882" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007883" CHECK ("RETRY_COUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007884" CHECK ("RETRY_INTERVAL" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007885" CHECK ("MONITOR_TIMEOUT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007886" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB" ADD CONSTRAINT "SYS_C007887" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_JOB_LOG
+-- ----------------------------
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007894" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007895" CHECK ("JOB_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007896" CHECK ("EXECUTE_INDEX" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007897" CHECK ("BEGIN_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007898" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007899" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_JOB_LOG" ADD CONSTRAINT "SYS_C007900" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table INFRA_TEST_DEMO
+-- ----------------------------
+ALTER TABLE "INFRA_TEST_DEMO" ADD CONSTRAINT "SYS_C007888" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_TEST_DEMO" ADD CONSTRAINT "SYS_C007889" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_TEST_DEMO" ADD CONSTRAINT "SYS_C007890" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_TEST_DEMO" ADD CONSTRAINT "SYS_C007891" CHECK ("CATEGORY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_TEST_DEMO" ADD CONSTRAINT "SYS_C007892" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "INFRA_TEST_DEMO" ADD CONSTRAINT "SYS_C007893" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table MEMBER_USER
+-- ----------------------------
+ALTER TABLE "MEMBER_USER" ADD CONSTRAINT "SYS_C007901" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "MEMBER_USER" ADD CONSTRAINT "SYS_C007902" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "MEMBER_USER" ADD CONSTRAINT "SYS_C007903" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "MEMBER_USER" ADD CONSTRAINT "SYS_C007904" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "MEMBER_USER" ADD CONSTRAINT "SYS_C007905" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_APP
+-- ----------------------------
+ALTER TABLE "PAY_APP" ADD CONSTRAINT "SYS_C007906" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_APP" ADD CONSTRAINT "SYS_C007907" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_APP" ADD CONSTRAINT "SYS_C007908" CHECK ("MERCHANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_APP" ADD CONSTRAINT "SYS_C007909" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_APP" ADD CONSTRAINT "SYS_C007910" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_APP" ADD CONSTRAINT "SYS_C007911" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_CHANNEL
+-- ----------------------------
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007912" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007913" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007914" CHECK ("FEE_RATE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007915" CHECK ("MERCHANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007916" CHECK ("APP_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007917" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007918" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_CHANNEL" ADD CONSTRAINT "SYS_C007919" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_MERCHANT
+-- ----------------------------
+ALTER TABLE "PAY_MERCHANT" ADD CONSTRAINT "SYS_C007920" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_MERCHANT" ADD CONSTRAINT "SYS_C007921" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_MERCHANT" ADD CONSTRAINT "SYS_C007922" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_MERCHANT" ADD CONSTRAINT "SYS_C007923" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_MERCHANT" ADD CONSTRAINT "SYS_C007924" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_NOTIFY_LOG
+-- ----------------------------
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007925" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007926" CHECK ("TASK_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007927" CHECK ("NOTIFY_TIMES" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007928" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007929" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007930" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_LOG" ADD CONSTRAINT "SYS_C007931" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_NOTIFY_TASK
+-- ----------------------------
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007932" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007933" CHECK ("MERCHANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007934" CHECK ("APP_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007935" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007936" CHECK ("DATA_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007937" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007938" CHECK ("NEXT_NOTIFY_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007939" CHECK ("LAST_EXECUTE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007940" CHECK ("NOTIFY_TIMES" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007941" CHECK ("MAX_NOTIFY_TIMES" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007942" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007943" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_NOTIFY_TASK" ADD CONSTRAINT "SYS_C007944" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_ORDER
+-- ----------------------------
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007945" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007946" CHECK ("MERCHANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007947" CHECK ("APP_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007948" CHECK ("NOTIFY_STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007949" CHECK ("AMOUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007950" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007951" CHECK ("EXPIRE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007952" CHECK ("REFUND_STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007953" CHECK ("REFUND_TIMES" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007954" CHECK ("REFUND_AMOUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007955" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007956" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER" ADD CONSTRAINT "SYS_C007957" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_ORDER_EXTENSION
+-- ----------------------------
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007958" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007959" CHECK ("ORDER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007960" CHECK ("CHANNEL_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007961" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007962" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007963" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_ORDER_EXTENSION" ADD CONSTRAINT "SYS_C007964" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table PAY_REFUND
+-- ----------------------------
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007965" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007966" CHECK ("MERCHANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007967" CHECK ("APP_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007968" CHECK ("CHANNEL_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007969" CHECK ("ORDER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007970" CHECK ("NOTIFY_STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007971" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007972" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007973" CHECK ("PAY_AMOUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007974" CHECK ("REFUND_AMOUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007975" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007976" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "PAY_REFUND" ADD CONSTRAINT "SYS_C007977" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_BLOB_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CONSTRAINT "QRTZ_BLOB_TRIG_PK" PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_BLOB_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CONSTRAINT "SYS_C008266" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CONSTRAINT "SYS_C008267" CHECK ("TRIGGER_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CONSTRAINT "SYS_C008268" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_CALENDARS
+-- ----------------------------
+ALTER TABLE "QRTZ_CALENDARS" ADD CONSTRAINT "QRTZ_CALENDARS_PK" PRIMARY KEY ("SCHED_NAME", "CALENDAR_NAME");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_CALENDARS
+-- ----------------------------
+ALTER TABLE "QRTZ_CALENDARS" ADD CONSTRAINT "SYS_C008271" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_CALENDARS" ADD CONSTRAINT "SYS_C008272" CHECK ("CALENDAR_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_CALENDARS" ADD CONSTRAINT "SYS_C008273" CHECK ("CALENDAR" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_CRON_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CONSTRAINT "QRTZ_CRON_TRIG_PK" PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_CRON_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CONSTRAINT "SYS_C008255" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CONSTRAINT "SYS_C008256" CHECK ("TRIGGER_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CONSTRAINT "SYS_C008257" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CONSTRAINT "SYS_C008258" CHECK ("CRON_EXPRESSION" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_FIRED_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "QRTZ_FIRED_TRIGGER_PK" PRIMARY KEY ("SCHED_NAME", "ENTRY_ID");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_FIRED_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008278" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008279" CHECK ("ENTRY_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008280" CHECK ("TRIGGER_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008281" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008282" CHECK ("INSTANCE_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008283" CHECK ("FIRED_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008284" CHECK ("SCHED_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008285" CHECK ("PRIORITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CONSTRAINT "SYS_C008286" CHECK ("STATE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Indexes structure for table QRTZ_FIRED_TRIGGERS
+-- ----------------------------
+CREATE INDEX "IDX_QRTZ_FT_INST_JOB_REQ_RCVRY"
+  ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "INSTANCE_NAME" ASC, "REQUESTS_RECOVERY" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_FT_JG"
+  ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "JOB_GROUP" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_FT_J_G"
+  ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "JOB_NAME" ASC, "JOB_GROUP" ASC)
+  LOGGING
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_FT_TG"
+  ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_GROUP" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_FT_TRIG_INST_NAME"
+  ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "INSTANCE_NAME" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_FT_T_G"
+  ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_NAME" ASC, "TRIGGER_GROUP" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_JOB_DETAILS
+-- ----------------------------
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "QRTZ_JOB_DETAILS_PK" PRIMARY KEY ("SCHED_NAME", "JOB_NAME", "JOB_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_JOB_DETAILS
+-- ----------------------------
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008228" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008229" CHECK ("JOB_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008230" CHECK ("JOB_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008231" CHECK ("JOB_CLASS_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008232" CHECK ("IS_DURABLE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008233" CHECK ("IS_NONCONCURRENT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008234" CHECK ("IS_UPDATE_DATA" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_JOB_DETAILS" ADD CONSTRAINT "SYS_C008235" CHECK ("REQUESTS_RECOVERY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Indexes structure for table QRTZ_JOB_DETAILS
+-- ----------------------------
+CREATE INDEX "IDX_QRTZ_J_GRP"
+  ON "QRTZ_JOB_DETAILS" ("SCHED_NAME" ASC, "JOB_GROUP" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_J_REQ_RECOVERY"
+  ON "QRTZ_JOB_DETAILS" ("SCHED_NAME" ASC, "REQUESTS_RECOVERY" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_LOCKS
+-- ----------------------------
+ALTER TABLE "QRTZ_LOCKS" ADD CONSTRAINT "QRTZ_LOCKS_PK" PRIMARY KEY ("SCHED_NAME", "LOCK_NAME");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_LOCKS
+-- ----------------------------
+ALTER TABLE "QRTZ_LOCKS" ADD CONSTRAINT "SYS_C008293" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_LOCKS" ADD CONSTRAINT "SYS_C008294" CHECK ("LOCK_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_PAUSED_TRIGGER_GRPS
+-- ----------------------------
+ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CONSTRAINT "QRTZ_PAUSED_TRIG_GRPS_PK" PRIMARY KEY ("SCHED_NAME", "TRIGGER_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_PAUSED_TRIGGER_GRPS
+-- ----------------------------
+ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CONSTRAINT "SYS_C008275" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CONSTRAINT "SYS_C008276" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_SCHEDULER_STATE
+-- ----------------------------
+ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CONSTRAINT "QRTZ_SCHEDULER_STATE_PK" PRIMARY KEY ("SCHED_NAME", "INSTANCE_NAME");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_SCHEDULER_STATE
+-- ----------------------------
+ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CONSTRAINT "SYS_C008288" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CONSTRAINT "SYS_C008289" CHECK ("INSTANCE_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CONSTRAINT "SYS_C008290" CHECK ("LAST_CHECKIN_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CONSTRAINT "SYS_C008291" CHECK ("CHECKIN_INTERVAL" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_SIMPLE_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "QRTZ_SIMPLE_TRIG_PK" PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_SIMPLE_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "SYS_C008247" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "SYS_C008248" CHECK ("TRIGGER_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "SYS_C008249" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "SYS_C008250" CHECK ("REPEAT_COUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "SYS_C008251" CHECK ("REPEAT_INTERVAL" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "SYS_C008252" CHECK ("TIMES_TRIGGERED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_SIMPROP_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CONSTRAINT "QRTZ_SIMPROP_TRIG_PK" PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_SIMPROP_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CONSTRAINT "SYS_C008261" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CONSTRAINT "SYS_C008262" CHECK ("TRIGGER_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CONSTRAINT "SYS_C008263" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table QRTZ_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "QRTZ_TRIGGERS_PK" PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP");
+
+-- ----------------------------
+-- Checks structure for table QRTZ_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008237" CHECK ("SCHED_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008238" CHECK ("TRIGGER_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008239" CHECK ("TRIGGER_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008240" CHECK ("JOB_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008241" CHECK ("JOB_GROUP" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008242" CHECK ("TRIGGER_STATE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008243" CHECK ("TRIGGER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "QRTZ_TRIGGERS" ADD CONSTRAINT "SYS_C008244" CHECK ("START_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Indexes structure for table QRTZ_TRIGGERS
+-- ----------------------------
+CREATE INDEX "IDX_QRTZ_T_C"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "CALENDAR_NAME" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_G"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_GROUP" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_J"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "JOB_NAME" ASC, "JOB_GROUP" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_JG"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "JOB_GROUP" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_NEXT_FIRE_TIME"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "NEXT_FIRE_TIME" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_NFT_MISFIRE"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "MISFIRE_INSTR" ASC, "NEXT_FIRE_TIME" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_NFT_ST"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_STATE" ASC, "NEXT_FIRE_TIME" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_NFT_ST_MISFIRE"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "MISFIRE_INSTR" ASC, "NEXT_FIRE_TIME" ASC, "TRIGGER_STATE" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_NFT_ST_MISFIRE_GRP"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "MISFIRE_INSTR" ASC, "NEXT_FIRE_TIME" ASC, "TRIGGER_GROUP" ASC, "TRIGGER_STATE" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_N_G_STATE"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_GROUP" ASC, "TRIGGER_STATE" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_N_STATE"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_NAME" ASC, "TRIGGER_GROUP" ASC, "TRIGGER_STATE" ASC) LOCAL
+  LOGGING
+  ONLINE
+  NOSORT
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+CREATE INDEX "IDX_QRTZ_T_STATE"
+  ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_STATE" ASC)
+  LOGGING
+  VISIBLE
+PCTFREE 10
+INITRANS 2
+STORAGE (
+  INITIAL 65536 
+  NEXT 1048576 
+  MINEXTENTS 1
+  MAXEXTENTS 2147483645
+  FREELISTS 1
+  FREELIST GROUPS 1
+  BUFFER_POOL DEFAULT
+);
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_DEPT
+-- ----------------------------
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008030" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008031" CHECK ("PARENT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008032" CHECK ("SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008033" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008034" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008035" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008036" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DEPT" ADD CONSTRAINT "SYS_C008206" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_DICT_DATA
+-- ----------------------------
+ALTER TABLE "SYSTEM_DICT_DATA" ADD CONSTRAINT "SYS_C008037" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_DATA" ADD CONSTRAINT "SYS_C008038" CHECK ("SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_DATA" ADD CONSTRAINT "SYS_C008039" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_DATA" ADD CONSTRAINT "SYS_C008040" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_DATA" ADD CONSTRAINT "SYS_C008041" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_DATA" ADD CONSTRAINT "SYS_C008207" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_DICT_TYPE
+-- ----------------------------
+ALTER TABLE "SYSTEM_DICT_TYPE" ADD CONSTRAINT "SYS_C008042" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_TYPE" ADD CONSTRAINT "SYS_C008043" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_TYPE" ADD CONSTRAINT "SYS_C008044" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_TYPE" ADD CONSTRAINT "SYS_C008045" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_DICT_TYPE" ADD CONSTRAINT "SYS_C008208" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_ERROR_CODE
+-- ----------------------------
+ALTER TABLE "SYSTEM_ERROR_CODE" ADD CONSTRAINT "SYS_C008046" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ERROR_CODE" ADD CONSTRAINT "SYS_C008047" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ERROR_CODE" ADD CONSTRAINT "SYS_C008048" CHECK ("CODE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ERROR_CODE" ADD CONSTRAINT "SYS_C008049" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ERROR_CODE" ADD CONSTRAINT "SYS_C008050" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ERROR_CODE" ADD CONSTRAINT "SYS_C008209" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_LOGIN_LOG
+-- ----------------------------
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008056" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008057" CHECK ("LOG_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008058" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008059" CHECK ("USER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008060" CHECK ("RESULT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008061" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008062" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008063" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_LOGIN_LOG" ADD CONSTRAINT "SYS_C008210" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_MENU
+-- ----------------------------
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008064" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008065" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008066" CHECK ("SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008067" CHECK ("PARENT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008068" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008069" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008070" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008211" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008212" CHECK ("VISIBLE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_MENU" ADD CONSTRAINT "SYS_C008213" CHECK ("KEEP_ALIVE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_NOTICE
+-- ----------------------------
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008071" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008072" CHECK ("CONTENT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008073" CHECK ("NOTICE_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008074" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008075" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008076" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008077" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_NOTICE" ADD CONSTRAINT "SYS_C008214" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_OPERATE_LOG
+-- ----------------------------
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008078" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008079" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008080" CHECK ("USER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008081" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008082" CHECK ("START_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008083" CHECK ("DURATION" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008084" CHECK ("RESULT_CODE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008085" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008086" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008087" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_OPERATE_LOG" ADD CONSTRAINT "SYS_C008215" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_POST
+-- ----------------------------
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008088" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008089" CHECK ("SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008090" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008091" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008092" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008093" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_POST" ADD CONSTRAINT "SYS_C008216" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_ROLE
+-- ----------------------------
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008094" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008095" CHECK ("SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008096" CHECK ("DATA_SCOPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008097" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008098" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008099" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008100" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008101" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE" ADD CONSTRAINT "SYS_C008217" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_ROLE_MENU
+-- ----------------------------
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008108" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008109" CHECK ("ROLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008110" CHECK ("MENU_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008111" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008112" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008113" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD CONSTRAINT "SYS_C008218" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_SENSITIVE_WORD
+-- ----------------------------
+ALTER TABLE "SYSTEM_SENSITIVE_WORD" ADD CONSTRAINT "SYS_C008102" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SENSITIVE_WORD" ADD CONSTRAINT "SYS_C008103" CHECK ("NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SENSITIVE_WORD" ADD CONSTRAINT "SYS_C008104" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SENSITIVE_WORD" ADD CONSTRAINT "SYS_C008105" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SENSITIVE_WORD" ADD CONSTRAINT "SYS_C008106" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SENSITIVE_WORD" ADD CONSTRAINT "SYS_C008107" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_SMS_CHANNEL
+-- ----------------------------
+ALTER TABLE "SYSTEM_SMS_CHANNEL" ADD CONSTRAINT "SYS_C008114" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CHANNEL" ADD CONSTRAINT "SYS_C008115" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CHANNEL" ADD CONSTRAINT "SYS_C008116" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CHANNEL" ADD CONSTRAINT "SYS_C008117" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CHANNEL" ADD CONSTRAINT "SYS_C008219" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_SMS_CODE
+-- ----------------------------
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008118" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008119" CHECK ("SCENE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008120" CHECK ("TODAY_INDEX" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008121" CHECK ("USED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008122" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008123" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008124" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_CODE" ADD CONSTRAINT "SYS_C008220" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_SMS_LOG
+-- ----------------------------
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008125" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008126" CHECK ("CHANNEL_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008127" CHECK ("TEMPLATE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008128" CHECK ("TEMPLATE_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008129" CHECK ("SEND_STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008130" CHECK ("RECEIVE_STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008131" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008132" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_LOG" ADD CONSTRAINT "SYS_C008221" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_SMS_TEMPLATE
+-- ----------------------------
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008133" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008134" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008135" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008136" CHECK ("CHANNEL_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008137" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008138" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SMS_TEMPLATE" ADD CONSTRAINT "SYS_C008222" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_SOCIAL_USER
+-- ----------------------------
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008139" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008140" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008141" CHECK ("USER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008142" CHECK ("TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008143" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008144" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008145" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_SOCIAL_USER" ADD CONSTRAINT "SYS_C008223" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_TENANT
+-- ----------------------------
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008146" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008147" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008148" CHECK ("PACKAGE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008149" CHECK ("EXPIRE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008150" CHECK ("ACCOUNT_COUNT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008151" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008152" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT" ADD CONSTRAINT "SYS_C008224" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_TENANT_PACKAGE
+-- ----------------------------
+ALTER TABLE "SYSTEM_TENANT_PACKAGE" ADD CONSTRAINT "SYS_C008153" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT_PACKAGE" ADD CONSTRAINT "SYS_C008154" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT_PACKAGE" ADD CONSTRAINT "SYS_C008155" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT_PACKAGE" ADD CONSTRAINT "SYS_C008156" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_TENANT_PACKAGE" ADD CONSTRAINT "SYS_C008197" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_USERS
+-- ----------------------------
+ALTER TABLE "SYSTEM_USERS" ADD CONSTRAINT "SYS_C008157" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USERS" ADD CONSTRAINT "SYS_C008158" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USERS" ADD CONSTRAINT "SYS_C008159" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USERS" ADD CONSTRAINT "SYS_C008160" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USERS" ADD CONSTRAINT "SYS_C008161" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USERS" ADD CONSTRAINT "SYS_C008227" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_USER_POST
+-- ----------------------------
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008302" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008303" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008304" CHECK ("POST_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008305" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008306" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008307" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_POST" ADD CONSTRAINT "SYS_C008308" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_USER_ROLE
+-- ----------------------------
+ALTER TABLE "SYSTEM_USER_ROLE" ADD CONSTRAINT "SYS_C008162" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_ROLE" ADD CONSTRAINT "SYS_C008163" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_ROLE" ADD CONSTRAINT "SYS_C008164" CHECK ("ROLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_ROLE" ADD CONSTRAINT "SYS_C008165" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_ROLE" ADD CONSTRAINT "SYS_C008226" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Checks structure for table SYSTEM_USER_SESSION
+-- ----------------------------
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008310" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008311" CHECK ("TOKEN" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008312" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008313" CHECK ("USER_TYPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008314" CHECK ("SESSION_TIMEOUT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008315" CHECK ("CREATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008316" CHECK ("UPDATE_TIME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008317" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "SYSTEM_USER_SESSION" ADD CONSTRAINT "SYS_C008318" CHECK ("DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Foreign Keys structure for table QRTZ_BLOB_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CONSTRAINT "QRTZ_BLOB_TRIG_TO_TRIG_FK" FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Foreign Keys structure for table QRTZ_CRON_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CONSTRAINT "QRTZ_CRON_TRIG_TO_TRIG_FK" FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Foreign Keys structure for table QRTZ_SIMPLE_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CONSTRAINT "QRTZ_SIMPLE_TRIG_TO_TRIG_FK" FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Foreign Keys structure for table QRTZ_SIMPROP_TRIGGERS
+-- ----------------------------
+ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CONSTRAINT "QRTZ_SIMPROP_TRIG_TO_TRIG_FK" FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Foreign Keys structure for table QRTZ_TRIGGERS
+-- ----------------------------

+ 37 - 769
sql/postgresql/ruoyi-vue-pro.sql

@@ -12,7 +12,7 @@
  Target Server Version : 140002
  File Encoding         : 65001
 
- Date: 01/05/2022 23:17:07
+ Date: 02/05/2022 16:42:43
 */
 
 
@@ -470,6 +470,15 @@ INCREMENT 1
 MAXVALUE 9223372036854775807
 CACHE 1;
 
+-- ----------------------------
+-- Sequence structure for system_user_post_seq
+-- ----------------------------
+DROP SEQUENCE IF EXISTS "system_user_post_seq";
+CREATE SEQUENCE "system_user_post_seq" 
+INCREMENT 1
+MAXVALUE 9223372036854775807
+CACHE 1;
+
 -- ----------------------------
 -- Sequence structure for system_user_role_seq
 -- ----------------------------
@@ -3455,6 +3464,7 @@ INSERT INTO "system_sms_template" ("id", "type", "status", "code", "name", "cont
 INSERT INTO "system_sms_template" ("id", "type", "status", "code", "name", "content", "params", "remark", "api_template_id", "channel_id", "channel_code", "creator", "create_time", "updater", "update_time", "deleted") VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '["processInstanceName","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', 0);
 INSERT INTO "system_sms_template" ("id", "type", "status", "code", "name", "content", "params", "remark", "api_template_id", "channel_id", "channel_code", "creator", "create_time", "updater", "update_time", "deleted") VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2022-04-10 23:22:49', 0);
 INSERT INTO "system_sms_template" ("id", "type", "status", "code", "name", "content", "params", "remark", "api_template_id", "channel_id", "channel_code", "creator", "create_time", "updater", "update_time", "deleted") VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '["processInstanceName","reason","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-01-22 00:24:31', 0);
+INSERT INTO "system_sms_template" ("id", "type", "status", "code", "name", "content", "params", "remark", "api_template_id", "channel_id", "channel_code", "creator", "create_time", "updater", "update_time", "deleted") VALUES (13, 1, 0, 'admin-sms-login', '后台用户短信登录', '您的验证码是{code}', '["code"]', '', '4372216', 1, 'YUN_PIAN', '1', '2021-10-11 08:10:00', '1', '2021-10-11 08:10:00', 0);
 COMMIT;
 
 -- ----------------------------
@@ -3626,72 +3636,39 @@ INSERT INTO "system_tenant_package" ("id", "name", "status", "remark", "menu_ids
 COMMIT;
 
 -- ----------------------------
--- Table structure for system_user
+-- Table structure for system_user_post
 -- ----------------------------
-DROP TABLE IF EXISTS "system_user";
-CREATE TABLE "system_user" (
+DROP TABLE IF EXISTS "system_user_post";
+CREATE TABLE "system_user_post" (
   "id" int8 NOT NULL,
-  "username" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
-  "password" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
-  "nickname" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
-  "remark" varchar(500) COLLATE "pg_catalog"."default",
-  "dept_id" int8,
-  "post_ids" varchar(255) COLLATE "pg_catalog"."default",
-  "email" varchar(50) COLLATE "pg_catalog"."default",
-  "mobile" varchar(11) COLLATE "pg_catalog"."default",
-  "sex" int2,
-  "avatar" varchar(100) COLLATE "pg_catalog"."default",
-  "status" int2 NOT NULL,
-  "login_ip" varchar(50) COLLATE "pg_catalog"."default",
-  "login_date" timestamp(6),
+  "user_id" int8 NOT NULL,
+  "post_id" int8 NOT NULL,
   "creator" varchar(64) COLLATE "pg_catalog"."default",
   "create_time" timestamp(6) NOT NULL,
   "updater" varchar(64) COLLATE "pg_catalog"."default",
   "update_time" timestamp(6) NOT NULL,
-  "deleted" int2 NOT NULL DEFAULT 0,
-  "tenant_id" int8 NOT NULL DEFAULT 0
+  "tenant_id" int8 NOT NULL,
+  "deleted" int2 NOT NULL DEFAULT 0
 )
 ;
-COMMENT ON COLUMN "system_user"."id" IS '用户ID';
-COMMENT ON COLUMN "system_user"."username" IS '用户账号';
-COMMENT ON COLUMN "system_user"."password" IS '密码';
-COMMENT ON COLUMN "system_user"."nickname" IS '用户昵称';
-COMMENT ON COLUMN "system_user"."remark" IS '备注';
-COMMENT ON COLUMN "system_user"."dept_id" IS '部门ID';
-COMMENT ON COLUMN "system_user"."post_ids" IS '岗位编号数组';
-COMMENT ON COLUMN "system_user"."email" IS '用户邮箱';
-COMMENT ON COLUMN "system_user"."mobile" IS '手机号码';
-COMMENT ON COLUMN "system_user"."sex" IS '用户性别';
-COMMENT ON COLUMN "system_user"."avatar" IS '头像地址';
-COMMENT ON COLUMN "system_user"."status" IS '帐号状态(0正常 1停用)';
-COMMENT ON COLUMN "system_user"."login_ip" IS '最后登录IP';
-COMMENT ON COLUMN "system_user"."login_date" IS '最后登录时间';
-COMMENT ON COLUMN "system_user"."creator" IS '创建者';
-COMMENT ON COLUMN "system_user"."create_time" IS '创建时间';
-COMMENT ON COLUMN "system_user"."updater" IS '更新者';
-COMMENT ON COLUMN "system_user"."update_time" IS '更新时间';
-COMMENT ON COLUMN "system_user"."deleted" IS '是否删除';
-COMMENT ON COLUMN "system_user"."tenant_id" IS '租户编号';
-COMMENT ON TABLE "system_user" IS '用户信息表';
-
--- ----------------------------
--- Records of system_user
+COMMENT ON COLUMN "system_user_post"."id" IS 'id';
+COMMENT ON COLUMN "system_user_post"."user_id" IS '用户ID';
+COMMENT ON COLUMN "system_user_post"."post_id" IS '岗位ID';
+COMMENT ON COLUMN "system_user_post"."creator" IS '创建者';
+COMMENT ON COLUMN "system_user_post"."create_time" IS '创建时间';
+COMMENT ON COLUMN "system_user_post"."updater" IS '更新者';
+COMMENT ON COLUMN "system_user_post"."update_time" IS '更新时间';
+COMMENT ON COLUMN "system_user_post"."tenant_id" IS '租户编号';
+COMMENT ON COLUMN "system_user_post"."deleted" IS '是否删除';
+COMMENT ON TABLE "system_user_post" IS '用户岗位表';
+
+-- ----------------------------
+-- Records of system_user_post
 -- ----------------------------
 BEGIN;
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/48934f2f-92d4-4250-b917-d10d2b262c6a', 0, '127.0.0.1', '2022-04-30 00:06:21', 'admin', '2021-01-05 17:03:47', NULL, '2022-04-30 00:06:21', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (103, 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-01-18 00:33:40', '', '2021-01-13 23:50:35', NULL, '2022-01-18 00:33:40', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (104, 'test', '$2a$10$e5RpuDCC0GYSt0Hvd2.CjujIXwgGct4SnXi6dVGxdgFsnqgEryk5a', '测试号', NULL, 107, '[]', '111@qq.com', '15601691200', 1, '', 0, '127.0.0.1', '2022-03-19 21:46:19', '', '2021-01-21 02:13:53', NULL, '2022-03-19 21:46:19', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', 0, 118);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', 0, 119);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', 0, 120);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (110, 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-02-23 19:36:28', '1', '2022-02-22 00:56:14', NULL, '2022-02-27 08:26:59', 0, 121);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (111, 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '110', '2022-02-23 13:14:33', '110', '2022-02-23 13:14:33', 0, 121);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (112, 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-02-23 19:08:03', '1', '2022-02-23 19:08:03', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', 0, 122);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', '', '', 0, '', 0, '127.0.0.1', '2022-03-19 22:15:43', '1', '2022-03-19 21:50:58', NULL, '2022-03-19 22:15:43', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (115, 'aotemane', '$2a$10$/WCwGHu1eq0wOVDd/u8HweJ0gJCHyLS6T7ndCqI8UXZAQom1etk2e', '1', '11', 100, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2022-04-30 02:55:43', 0, 1);
-INSERT INTO "system_user" ("id", "username", "password", "nickname", "remark", "dept_id", "post_ids", "email", "mobile", "sex", "avatar", "status", "login_ip", "login_date", "creator", "create_time", "updater", "update_time", "deleted", "tenant_id") VALUES (0, 'admin1', '$2a$10$HXL5ExIqOYKJQiKp5uWqKOMOFdbRskMaF8ZEeaGF0PSs0GQFNyNgO', 'biu', NULL, NULL, '[]', NULL, NULL, NULL, NULL, 0, NULL, NULL, '1', '2022-04-30 20:06:11.114', '1', '2022-04-30 20:06:11.114', 0, 1);
+INSERT INTO "system_user_post" ("id", "user_id", "post_id", "creator", "create_time", "updater", "update_time", "tenant_id", "deleted") VALUES (112, 1, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', 1, 0);
+INSERT INTO "system_user_post" ("id", "user_id", "post_id", "creator", "create_time", "updater", "update_time", "tenant_id", "deleted") VALUES (113, 100, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', 1, 0);
+INSERT INTO "system_user_post" ("id", "user_id", "post_id", "creator", "create_time", "updater", "update_time", "tenant_id", "deleted") VALUES (114, 114, 3, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', 1, 0);
 COMMIT;
 
 -- ----------------------------
@@ -3746,7 +3723,8 @@ COMMIT;
 -- ----------------------------
 DROP TABLE IF EXISTS "system_user_session";
 CREATE TABLE "system_user_session" (
-  "id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
+  "id" int8 NOT NULL,
+  "token" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
   "user_id" int8 NOT NULL,
   "user_type" int2 NOT NULL,
   "session_timeout" timestamp(6) NOT NULL,
@@ -3762,6 +3740,7 @@ CREATE TABLE "system_user_session" (
 )
 ;
 COMMENT ON COLUMN "system_user_session"."id" IS '会话编号';
+COMMENT ON COLUMN "system_user_session"."token" IS 'Token 令牌';
 COMMENT ON COLUMN "system_user_session"."user_id" IS '用户编号';
 COMMENT ON COLUMN "system_user_session"."user_type" IS '用户类型';
 COMMENT ON COLUMN "system_user_session"."session_timeout" IS '会话超时时间';
@@ -3775,714 +3754,3 @@ COMMENT ON COLUMN "system_user_session"."update_time" IS '更新时间';
 COMMENT ON COLUMN "system_user_session"."deleted" IS '是否删除';
 COMMENT ON COLUMN "system_user_session"."tenant_id" IS '租户编号';
 COMMENT ON TABLE "system_user_session" IS '用户在线 Session';
-
--- ----------------------------
--- Records of system_user_session
--- ----------------------------
-BEGIN;
-COMMIT;
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-ALTER SEQUENCE "act_evt_log_log_nr__seq"
-OWNED BY "act_evt_log"."log_nr_";
-SELECT setval('"act_evt_log_log_nr__seq"', 1, false);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-ALTER SEQUENCE "act_hi_tsk_log_id__seq"
-OWNED BY "act_hi_tsk_log"."id_";
-SELECT setval('"act_hi_tsk_log_id__seq"', 1, false);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"bpm_oa_leave_seq"', 1, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"bpm_task_assign_rule_seq"', 1, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"infra_api_access_log_seq"', 286, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"infra_api_error_log_seq"', 40, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"infra_job_log_seq"', 1, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"infra_job_seq"', 2, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"system_login_log_seq"', 12, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"system_operate_log_seq"', 22, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-SELECT setval('"system_sms_log_seq"', 1, true);
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Alter sequences owned by
--- ----------------------------
-
--- ----------------------------
--- Primary Key structure for table act_evt_log
--- ----------------------------
-ALTER TABLE "act_evt_log" ADD CONSTRAINT "act_evt_log_pkey" PRIMARY KEY ("log_nr_");
-
--- ----------------------------
--- Primary Key structure for table bpm_form
--- ----------------------------
-ALTER TABLE "bpm_form" ADD CONSTRAINT "bpm_form_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table bpm_oa_leave
--- ----------------------------
-ALTER TABLE "bpm_oa_leave" ADD CONSTRAINT "bpm_oa_leave_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table bpm_process_definition_ext
--- ----------------------------
-ALTER TABLE "bpm_process_definition_ext" ADD CONSTRAINT "bpm_process_definition_ext_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table bpm_process_instance_ext
--- ----------------------------
-ALTER TABLE "bpm_process_instance_ext" ADD CONSTRAINT "bpm_process_instance_ext_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table bpm_task_assign_rule
--- ----------------------------
-ALTER TABLE "bpm_task_assign_rule" ADD CONSTRAINT "bpm_task_assign_rule_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table bpm_task_ext
--- ----------------------------
-ALTER TABLE "bpm_task_ext" ADD CONSTRAINT "bpm_task_ext_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table bpm_user_group
--- ----------------------------
-ALTER TABLE "bpm_user_group" ADD CONSTRAINT "bpm_user_group_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_api_access_log
--- ----------------------------
-ALTER TABLE "infra_api_access_log" ADD CONSTRAINT "infra_api_access_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_api_error_log
--- ----------------------------
-ALTER TABLE "infra_api_error_log" ADD CONSTRAINT "infra_api_error_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_codegen_column
--- ----------------------------
-ALTER TABLE "infra_codegen_column" ADD CONSTRAINT "infra_codegen_column_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_codegen_table
--- ----------------------------
-ALTER TABLE "infra_codegen_table" ADD CONSTRAINT "infra_codegen_table_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_config
--- ----------------------------
-ALTER TABLE "infra_config" ADD CONSTRAINT "infra_config_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_data_source_config
--- ----------------------------
-ALTER TABLE "infra_data_source_config" ADD CONSTRAINT "infra_data_source_config_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_file
--- ----------------------------
-ALTER TABLE "infra_file" ADD CONSTRAINT "infra_file_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_file_config
--- ----------------------------
-ALTER TABLE "infra_file_config" ADD CONSTRAINT "infra_file_config_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_file_content
--- ----------------------------
-ALTER TABLE "infra_file_content" ADD CONSTRAINT "infra_file_content_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_job
--- ----------------------------
-ALTER TABLE "infra_job" ADD CONSTRAINT "infra_job_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_job_log
--- ----------------------------
-ALTER TABLE "infra_job_log" ADD CONSTRAINT "infra_job_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table infra_test_demo
--- ----------------------------
-ALTER TABLE "infra_test_demo" ADD CONSTRAINT "infra_test_demo_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Indexes structure for table member_user
--- ----------------------------
-CREATE UNIQUE INDEX "uk_mobile" ON "member_user" USING btree (
-  "mobile" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-COMMENT ON INDEX "uk_mobile" IS '手机号';
-
--- ----------------------------
--- Primary Key structure for table member_user
--- ----------------------------
-ALTER TABLE "member_user" ADD CONSTRAINT "member_user_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_app
--- ----------------------------
-ALTER TABLE "pay_app" ADD CONSTRAINT "pay_app_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_channel
--- ----------------------------
-ALTER TABLE "pay_channel" ADD CONSTRAINT "pay_channel_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_merchant
--- ----------------------------
-ALTER TABLE "pay_merchant" ADD CONSTRAINT "pay_merchant_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_notify_log
--- ----------------------------
-ALTER TABLE "pay_notify_log" ADD CONSTRAINT "pay_notify_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_notify_task
--- ----------------------------
-ALTER TABLE "pay_notify_task" ADD CONSTRAINT "pay_notify_task_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_order
--- ----------------------------
-ALTER TABLE "pay_order" ADD CONSTRAINT "pay_order_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_order_extension
--- ----------------------------
-ALTER TABLE "pay_order_extension" ADD CONSTRAINT "pay_order_extension_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table pay_refund
--- ----------------------------
-ALTER TABLE "pay_refund" ADD CONSTRAINT "pay_refund_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table qrtz_blob_triggers
--- ----------------------------
-ALTER TABLE "qrtz_blob_triggers" ADD CONSTRAINT "qrtz_blob_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group");
-
--- ----------------------------
--- Primary Key structure for table qrtz_calendars
--- ----------------------------
-ALTER TABLE "qrtz_calendars" ADD CONSTRAINT "qrtz_calendars_pkey" PRIMARY KEY ("sched_name", "calendar_name");
-
--- ----------------------------
--- Primary Key structure for table qrtz_cron_triggers
--- ----------------------------
-ALTER TABLE "qrtz_cron_triggers" ADD CONSTRAINT "qrtz_cron_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group");
-
--- ----------------------------
--- Indexes structure for table qrtz_fired_triggers
--- ----------------------------
-CREATE INDEX "idx_qrtz_ft_inst_job_req_rcvry" ON "qrtz_fired_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "instance_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "requests_recovery" "pg_catalog"."bool_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_ft_j_g" ON "qrtz_fired_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_ft_jg" ON "qrtz_fired_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_ft_t_g" ON "qrtz_fired_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_ft_tg" ON "qrtz_fired_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_ft_trig_inst_name" ON "qrtz_fired_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "instance_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-
--- ----------------------------
--- Primary Key structure for table qrtz_fired_triggers
--- ----------------------------
-ALTER TABLE "qrtz_fired_triggers" ADD CONSTRAINT "qrtz_fired_triggers_pkey" PRIMARY KEY ("sched_name", "entry_id");
-
--- ----------------------------
--- Indexes structure for table qrtz_job_details
--- ----------------------------
-CREATE INDEX "idx_qrtz_j_grp" ON "qrtz_job_details" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_j_req_recovery" ON "qrtz_job_details" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "requests_recovery" "pg_catalog"."bool_ops" ASC NULLS LAST
-);
-
--- ----------------------------
--- Primary Key structure for table qrtz_job_details
--- ----------------------------
-ALTER TABLE "qrtz_job_details" ADD CONSTRAINT "qrtz_job_details_pkey" PRIMARY KEY ("sched_name", "job_name", "job_group");
-
--- ----------------------------
--- Primary Key structure for table qrtz_locks
--- ----------------------------
-ALTER TABLE "qrtz_locks" ADD CONSTRAINT "qrtz_locks_pkey" PRIMARY KEY ("sched_name", "lock_name");
-
--- ----------------------------
--- Primary Key structure for table qrtz_paused_trigger_grps
--- ----------------------------
-ALTER TABLE "qrtz_paused_trigger_grps" ADD CONSTRAINT "qrtz_paused_trigger_grps_pkey" PRIMARY KEY ("sched_name", "trigger_group");
-
--- ----------------------------
--- Primary Key structure for table qrtz_scheduler_state
--- ----------------------------
-ALTER TABLE "qrtz_scheduler_state" ADD CONSTRAINT "qrtz_scheduler_state_pkey" PRIMARY KEY ("sched_name", "instance_name");
-
--- ----------------------------
--- Primary Key structure for table qrtz_simple_triggers
--- ----------------------------
-ALTER TABLE "qrtz_simple_triggers" ADD CONSTRAINT "qrtz_simple_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group");
-
--- ----------------------------
--- Primary Key structure for table qrtz_simprop_triggers
--- ----------------------------
-ALTER TABLE "qrtz_simprop_triggers" ADD CONSTRAINT "qrtz_simprop_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group");
-
--- ----------------------------
--- Indexes structure for table qrtz_triggers
--- ----------------------------
-CREATE INDEX "idx_qrtz_t_c" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "calendar_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_g" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_j" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_jg" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_n_g_state" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_n_state" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_next_fire_time" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_nft_misfire" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "misfire_instr" "pg_catalog"."int2_ops" ASC NULLS LAST,
-  "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_nft_st" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_nft_st_misfire" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "misfire_instr" "pg_catalog"."int2_ops" ASC NULLS LAST,
-  "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST,
-  "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_nft_st_misfire_grp" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "misfire_instr" "pg_catalog"."int2_ops" ASC NULLS LAST,
-  "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST,
-  "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-CREATE INDEX "idx_qrtz_t_state" ON "qrtz_triggers" USING btree (
-  "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-
--- ----------------------------
--- Primary Key structure for table qrtz_triggers
--- ----------------------------
-ALTER TABLE "qrtz_triggers" ADD CONSTRAINT "qrtz_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group");
-
--- ----------------------------
--- Primary Key structure for table system_dept
--- ----------------------------
-ALTER TABLE "system_dept" ADD CONSTRAINT "system_dept_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_dict_data
--- ----------------------------
-ALTER TABLE "system_dict_data" ADD CONSTRAINT "system_dict_data_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Indexes structure for table system_dict_type
--- ----------------------------
-CREATE UNIQUE INDEX "dict_type" ON "system_dict_type" USING btree (
-  "type" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-
--- ----------------------------
--- Primary Key structure for table system_dict_type
--- ----------------------------
-ALTER TABLE "system_dict_type" ADD CONSTRAINT "system_dict_type_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_error_code
--- ----------------------------
-ALTER TABLE "system_error_code" ADD CONSTRAINT "system_error_code_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_login_log
--- ----------------------------
-ALTER TABLE "system_login_log" ADD CONSTRAINT "system_login_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_menu
--- ----------------------------
-ALTER TABLE "system_menu" ADD CONSTRAINT "system_menu_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_notice
--- ----------------------------
-ALTER TABLE "system_notice" ADD CONSTRAINT "system_notice_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_operate_log
--- ----------------------------
-ALTER TABLE "system_operate_log" ADD CONSTRAINT "system_operate_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_post
--- ----------------------------
-ALTER TABLE "system_post" ADD CONSTRAINT "system_post_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_role
--- ----------------------------
-ALTER TABLE "system_role" ADD CONSTRAINT "system_role_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_role_menu
--- ----------------------------
-ALTER TABLE "system_role_menu" ADD CONSTRAINT "system_role_menu_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_sensitive_word
--- ----------------------------
-ALTER TABLE "system_sensitive_word" ADD CONSTRAINT "system_sensitive_word_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_sms_channel
--- ----------------------------
-ALTER TABLE "system_sms_channel" ADD CONSTRAINT "system_sms_channel_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Indexes structure for table system_sms_code
--- ----------------------------
-CREATE INDEX "idx_mobile" ON "system_sms_code" USING btree (
-  "mobile" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
-);
-COMMENT ON INDEX "idx_mobile" IS '手机号';
-
--- ----------------------------
--- Primary Key structure for table system_sms_code
--- ----------------------------
-ALTER TABLE "system_sms_code" ADD CONSTRAINT "system_sms_code_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_sms_log
--- ----------------------------
-ALTER TABLE "system_sms_log" ADD CONSTRAINT "system_sms_log_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_sms_template
--- ----------------------------
-ALTER TABLE "system_sms_template" ADD CONSTRAINT "system_sms_template_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_social_user
--- ----------------------------
-ALTER TABLE "system_social_user" ADD CONSTRAINT "system_social_user_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_social_user_bind
--- ----------------------------
-ALTER TABLE "system_social_user_bind" ADD CONSTRAINT "system_social_user_bind_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_tenant
--- ----------------------------
-ALTER TABLE "system_tenant" ADD CONSTRAINT "system_tenant_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_tenant_package
--- ----------------------------
-ALTER TABLE "system_tenant_package" ADD CONSTRAINT "system_tenant_package_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Indexes structure for table system_user
--- ----------------------------
-CREATE UNIQUE INDEX "idx_username" ON "system_user" USING btree (
-  "username" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST,
-  "update_time" "pg_catalog"."timestamp_ops" ASC NULLS LAST,
-  "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST
-);
-
--- ----------------------------
--- Primary Key structure for table system_user
--- ----------------------------
-ALTER TABLE "system_user" ADD CONSTRAINT "system_user_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_user_role
--- ----------------------------
-ALTER TABLE "system_user_role" ADD CONSTRAINT "system_user_role_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Primary Key structure for table system_user_session
--- ----------------------------
-ALTER TABLE "system_user_session" ADD CONSTRAINT "system_user_session_pkey" PRIMARY KEY ("id");
-
--- ----------------------------
--- Foreign Keys structure for table qrtz_blob_triggers
--- ----------------------------
-ALTER TABLE "qrtz_blob_triggers" ADD CONSTRAINT "qrtz_blob_triggers_sched_name_trigger_name_trigger_group_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION;
-
--- ----------------------------
--- Foreign Keys structure for table qrtz_cron_triggers
--- ----------------------------
-ALTER TABLE "qrtz_cron_triggers" ADD CONSTRAINT "qrtz_cron_triggers_sched_name_trigger_name_trigger_group_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION;
-
--- ----------------------------
--- Foreign Keys structure for table qrtz_simple_triggers
--- ----------------------------
-ALTER TABLE "qrtz_simple_triggers" ADD CONSTRAINT "qrtz_simple_triggers_sched_name_trigger_name_trigger_group_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION;
-
--- ----------------------------
--- Foreign Keys structure for table qrtz_simprop_triggers
--- ----------------------------
-ALTER TABLE "qrtz_simprop_triggers" ADD CONSTRAINT "qrtz_simprop_triggers_sched_name_trigger_name_trigger_grou_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION;
-
--- ----------------------------
--- Foreign Keys structure for table qrtz_triggers
--- ----------------------------
-ALTER TABLE "qrtz_triggers" ADD CONSTRAINT "qrtz_triggers_sched_name_job_name_job_group_fkey" FOREIGN KEY ("sched_name", "job_name", "job_group") REFERENCES "qrtz_job_details" ("sched_name", "job_name", "job_group") ON DELETE NO ACTION ON UPDATE NO ACTION;

文件差異過大導致無法顯示
+ 0 - 43
sql/ruoyi-vue-pro.sql


文件差異過大導致無法顯示
+ 3870 - 0
sql/sqlserver/ruoyi-vue-pro.sql


+ 4 - 0
yudao-framework/yudao-spring-boot-starter-mybatis/pom.xml

@@ -46,6 +46,10 @@
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.microsoft.sqlserver</groupId>
+            <artifactId>mssql-jdbc</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>com.alibaba</groupId>

+ 4 - 1
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java

@@ -82,11 +82,14 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor
             case ORACLE_12C:
                 driverClass = "org.quartz.impl.jdbcjobstore.oracle.OracleDelegate";
                 break;
+            case SQL_SERVER:
+            case SQL_SERVER2005:
+                driverClass = "org.quartz.impl.jdbcjobstore.MSSQLDelegate";
+                break;
         }
         // 设置 driverClass 变量
         if (StrUtil.isNotEmpty(driverClass)) {
             environment.getSystemProperties().put(QUARTZ_JOB_STORE_DRIVER_KEY, driverClass);
-
         }
     }
 

+ 4 - 4
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java

@@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.security.config;
 import cn.iocoder.yudao.framework.security.core.aop.PreAuthenticatedAspect;
 import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider;
 import cn.iocoder.yudao.framework.security.core.context.TransmittableThreadLocalSecurityContextHolderStrategy;
-import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter;
+import cn.iocoder.yudao.framework.security.core.filter.TokenAuthenticationFilter;
 import cn.iocoder.yudao.framework.security.core.handler.AccessDeniedHandlerImpl;
 import cn.iocoder.yudao.framework.security.core.handler.AuthenticationEntryPointImpl;
 import cn.iocoder.yudao.framework.security.core.handler.LogoutSuccessHandlerImpl;
@@ -86,9 +86,9 @@ public class YudaoSecurityAutoConfiguration {
      * Token 认证过滤器 Bean
      */
     @Bean
-    public JWTAuthenticationTokenFilter authenticationTokenFilter(MultiUserDetailsAuthenticationProvider authenticationProvider,
-                                                                  GlobalExceptionHandler globalExceptionHandler) {
-        return new JWTAuthenticationTokenFilter(securityProperties, authenticationProvider, globalExceptionHandler);
+    public TokenAuthenticationFilter authenticationTokenFilter(MultiUserDetailsAuthenticationProvider authenticationProvider,
+                                                               GlobalExceptionHandler globalExceptionHandler) {
+        return new TokenAuthenticationFilter(securityProperties, authenticationProvider, globalExceptionHandler);
     }
 
     /**

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java

@@ -2,7 +2,7 @@ package cn.iocoder.yudao.framework.security.config;
 
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider;
-import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter;
+import cn.iocoder.yudao.framework.security.core.filter.TokenAuthenticationFilter;
 import cn.iocoder.yudao.framework.web.config.WebProperties;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
@@ -55,7 +55,7 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap
      * Token 认证过滤器 Bean
      */
     @Resource
-    private JWTAuthenticationTokenFilter authenticationTokenFilter;
+    private TokenAuthenticationFilter authenticationTokenFilter;
 
     /**
      * 自定义的权限映射 Bean 们

+ 3 - 3
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/JWTAuthenticationTokenFilter.java → yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/TokenAuthenticationFilter.java

@@ -18,13 +18,13 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 /**
- * JWT 过滤器,验证 token 的有效性
+ * Token 过滤器,验证 token 的有效性
  * 验证通过后,获得 {@link LoginUser} 信息,并加入到 Spring Security 上下文
  *
  * @author 芋道源码
  */
 @RequiredArgsConstructor
-public class JWTAuthenticationTokenFilter extends OncePerRequestFilter {
+public class TokenAuthenticationFilter extends OncePerRequestFilter {
 
     private final SecurityProperties securityProperties;
 
@@ -43,7 +43,7 @@ public class JWTAuthenticationTokenFilter extends OncePerRequestFilter {
                 LoginUser loginUser = authenticationProvider.verifyTokenAndRefresh(request, token);
                 // 模拟 Login 功能,方便日常开发调试
                 if (loginUser == null) {
-                    loginUser = this.mockLoginUser(request, token);
+                    loginUser = mockLoginUser(request, token);
                 }
                 // 设置当前用户
                 if (loginUser != null) {

+ 2 - 1
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java

@@ -27,7 +27,8 @@ public class DefaultDatabaseQueryTest {
             if (StrUtil.startWithAny(tableInfo.getName().toLowerCase(), "act_", "flw_", "qrtz_")) {
                 continue;
             }
-            System.out.println(String.format("CREATE SEQUENCE %s_seq MINVALUE 0;", tableInfo.getName()));
+//            System.out.println(String.format("CREATE SEQUENCE %s_seq MINVALUE 0;", tableInfo.getName()));
+            System.out.println(String.format("DELETE FROM %s WHERE deleted = '1';", tableInfo.getName()));
         }
         System.out.println(tableInfos.size());
         System.out.println(System.currentTimeMillis() - time);

+ 7 - 9
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java

@@ -8,8 +8,6 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
 import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken;
 import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
-import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserBindReqVO;
-import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserUnbindReqVO;
 import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
 import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
@@ -88,7 +86,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         // 使用手机 + 密码,进行登录。
         LoginUser loginUser = this.login0(reqVO.getMobile(), reqVO.getPassword());
 
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_USERNAME, userIp, userAgent);
     }
 
@@ -105,7 +103,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         // 执行登陆
         LoginUser loginUser = AuthConvert.INSTANCE.convert(user);
 
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_SMS, userIp, userAgent);
     }
 
@@ -127,7 +125,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         // 创建 LoginUser 对象
         LoginUser loginUser = AuthConvert.INSTANCE.convert(user);
 
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_SOCIAL, userIp, userAgent);
     }
 
@@ -136,18 +134,18 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         // 使用手机号、手机验证码登录
         AppAuthSmsLoginReqVO loginReqVO = AppAuthSmsLoginReqVO.builder()
                 .mobile(reqVO.getMobile()).code(reqVO.getSmsCode()).build();
-        String sessionId = this.smsLogin(loginReqVO, userIp, userAgent);
-        LoginUser loginUser = userSessionApi.getLoginUser(sessionId);
+        String token = this.smsLogin(loginReqVO, userIp, userAgent);
+        LoginUser loginUser = userSessionApi.getLoginUser(token);
 
         // 绑定社交用户
         socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO));
-        return sessionId;
+        return token;
     }
 
     private String createUserSessionAfterLoginSuccess(LoginUser loginUser, LoginLogTypeEnum logType, String userIp, String userAgent) {
         // 插入登陆日志
         createLoginLog(loginUser.getUsername(), logType, LoginResultEnum.SUCCESS);
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return userSessionApi.createUserSession(loginUser, userIp, userAgent);
     }
 

+ 8 - 8
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java

@@ -18,33 +18,33 @@ public interface UserSessionApi {
      * @param loginUser 登录用户
      * @param userIp 用户 IP
      * @param userAgent 用户 UA
-     * @return Session 编号
+     * @return Token 令牌
      */
     String createUserSession(@NotNull(message = "登录用户不能为空") LoginUser loginUser, String userIp, String userAgent);
 
     /**
      * 刷新在线用户 Session 的更新时间
      *
-     * @param sessionId Session 编号
+     * @param token Token 令牌
      * @param loginUser 登录用户
      */
-    void refreshUserSession(@NotEmpty(message = "Session编号不能为空") String sessionId,
+    void refreshUserSession(@NotEmpty(message = "Token 令牌不能为空") String token,
                             @NotNull(message = "登录用户不能为空") LoginUser loginUser);
 
     /**
      * 删除在线用户 Session
      *
-     * @param sessionId Session 编号
+     * @param token Token 令牌
      */
-    void deleteUserSession(String sessionId);
+    void deleteUserSession(String token);
 
     /**
-     * 获得 Session 编号对应的在线用户
+     * 获得 Token 令牌对应的在线用户
      *
-     * @param sessionId Session 编号
+     * @param token Token 令牌
      * @return 在线用户
      */
-    LoginUser getLoginUser(String sessionId);
+    LoginUser getLoginUser(String token);
 
     /**
      * 获得 Session 超时时间,单位:毫秒

+ 6 - 6
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java

@@ -25,18 +25,18 @@ public class UserSessionApiImpl implements UserSessionApi {
     }
 
     @Override
-    public void refreshUserSession(String sessionId, LoginUser loginUser) {
-        userSessionService.refreshUserSession(sessionId, loginUser);
+    public void refreshUserSession(String token, LoginUser loginUser) {
+        userSessionService.refreshUserSession(token, loginUser);
     }
 
     @Override
-    public void deleteUserSession(String sessionId) {
-        userSessionService.deleteUserSession(sessionId);
+    public void deleteUserSession(String token) {
+        userSessionService.deleteUserSession(token);
     }
 
     @Override
-    public LoginUser getLoginUser(String sessionId) {
-        return userSessionService.getLoginUser(sessionId);
+    public LoginUser getLoginUser(String token) {
+        return userSessionService.getLoginUser(token);
     }
 
     @Override

+ 2 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java

@@ -69,10 +69,9 @@ public class UserSessionController {
 
     @DeleteMapping("/delete")
     @ApiOperation("删除 Session")
-    @ApiImplicitParam(name = "id", value = "Session 编号", required = true, dataTypeClass = String.class,
-            example = "fe50b9f6-d177-44b1-8da9-72ea34f63db7")
+    @ApiImplicitParam(name = "id", value = "Session 编号", required = true, dataTypeClass = Long.class, example = "1024")
     @PreAuthorize("@ss.hasPermission('system:user-session:delete')")
-    public CommonResult<Boolean> deleteUserSession(@RequestParam("id") String id) {
+    public CommonResult<Boolean> deleteUserSession(@RequestParam("id") Long id) {
         userSessionService.deleteUserSession(id);
         return success(true);
     }

+ 10 - 9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/auth/UserSessionDO.java

@@ -3,10 +3,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.auth;
 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -22,18 +19,22 @@ import java.util.Date;
  *
  * @author 芋道源码
  */
-@TableName(value = "system_user_session", autoResultMap = true)
-@KeySequence("system_user_session_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@TableName(value = "system_user_session")
+@KeySequence(value = "system_user_session_seq")
 @Data
 @Builder
 @EqualsAndHashCode(callSuper = true)
 public class UserSessionDO extends BaseDO {
 
     /**
-     * 会话编号, 即 sessionId
+     * 会话编号
      */
-    @TableId(type = IdType.INPUT)
-    private String id;
+    private Long id;
+    /**
+     * 令牌
+     */
+    private String token;
+
     /**
      * 用户编号
      *

+ 6 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/UserPostDO.java

@@ -1,7 +1,7 @@
 package cn.iocoder.yudao.module.system.dal.dataobject.dept;
 
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.DbType;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import com.baomidou.mybatisplus.annotation.KeySequence;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -14,6 +14,7 @@ import lombok.EqualsAndHashCode;
  * @author ruoyi
  */
 @TableName("system_user_post")
+@KeySequence("system_user_post_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class UserPostDO extends BaseDO {
@@ -25,10 +26,14 @@ public class UserPostDO extends BaseDO {
     private Long id;
     /**
      * 用户 ID
+     *
+     * 关联 {@link AdminUserDO#getId()}
      */
     private Long userId;
     /**
      * 角色 ID
+     *
+     * 关联 {@link PostDO#getId()}
      */
     private Long postId;
 

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java

@@ -19,7 +19,7 @@ import java.util.Set;
  *
  * @author 芋道源码
  */
-@TableName(value = "system_user", autoResultMap = true)
+@TableName(value = "system_users", autoResultMap = true) // 由于 SQL Server 的 system_user 是关键字,所以使用 system_users
 @KeySequence("system_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)

+ 17 - 7
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/auth/UserSessionMapper.java

@@ -1,10 +1,10 @@
 package cn.iocoder.yudao.module.system.dal.mysql.auth;
 
-import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Collection;
@@ -15,13 +15,23 @@ import java.util.List;
 public interface UserSessionMapper extends BaseMapperX<UserSessionDO> {
 
     default PageResult<UserSessionDO> selectPage(UserSessionPageReqVO reqVO, Collection<Long> userIds) {
-        return selectPage(reqVO, new QueryWrapperX<UserSessionDO>()
-                .inIfPresent("user_id", userIds)
-                .likeIfPresent("user_ip", reqVO.getUserIp()));
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserSessionDO>()
+                .inIfPresent(UserSessionDO::getUserId, userIds)
+                .likeIfPresent(UserSessionDO::getUserIp, reqVO.getUserIp()));
     }
 
     default List<UserSessionDO> selectListBySessionTimoutLt() {
-        return selectList(new QueryWrapperX<UserSessionDO>().lt("session_timeout",new Date()));
+        return selectList(new LambdaQueryWrapperX<UserSessionDO>()
+                .lt(UserSessionDO::getSessionTimeout, new Date()));
+    }
+
+    default void updateByToken(String token, UserSessionDO updateObj) {
+        update(updateObj, new LambdaQueryWrapperX<UserSessionDO>()
+                .eq(UserSessionDO::getToken, token));
+    }
+
+    default void deleteByToken(String token) {
+        delete(new LambdaQueryWrapperX<UserSessionDO>().eq(UserSessionDO::getToken, token));
     }
 
 }

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/UserPostMapper.java

@@ -12,9 +12,9 @@ import java.util.List;
 @Mapper
 public interface UserPostMapper extends BaseMapperX<UserPostDO> {
 
-    default List<UserPostDO> selectIdList(Long id) {
+    default List<UserPostDO> selectListByUserId(Long userId) {
         return selectList(new LambdaQueryWrapperX<UserPostDO>()
-                .eq(UserPostDO::getUserId, id));
+                .eq(UserPostDO::getUserId, userId));
     }
 
     default void deleteByUserIdAndPostId(Long userId, Collection<Long> postIds) {

+ 1 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/RedisKeyConstants.java

@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.dal.redis;
 
 import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
-import me.zhyd.oauth.model.AuthUser;
 
 import java.time.Duration;
 
@@ -20,7 +19,7 @@ public interface RedisKeyConstants {
             STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC);
 
     RedisKeyDefine LOGIN_USER = new RedisKeyDefine("登录用户的缓存",
-            "login_user:%s", // 参数为 sessionId
+            "login_user:%s", // 参数为 token 令牌
             STRING, LoginUser.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC);
 
     RedisKeyDefine SOCIAL_AUTH_STATE = new RedisKeyDefine("社交登陆的 state", // 注意,它是被 JustAuth 的 justauth.type.prefix 使用到

+ 13 - 8
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/redis/auth/LoginUserRedisDAO.java

@@ -24,24 +24,29 @@ public class LoginUserRedisDAO {
     @Resource
     private SecurityProperties securityProperties;
 
-    public LoginUser get(String sessionId) {
-        String redisKey = formatKey(sessionId);
+    public LoginUser get(String token) {
+        String redisKey = formatKey(token);
         return JsonUtils.parseObject(stringRedisTemplate.opsForValue().get(redisKey), LoginUser.class);
     }
 
-    public void set(String sessionId, LoginUser loginUser) {
-        String redisKey = formatKey(sessionId);
+    public Boolean exists(String token) {
+        String redisKey = formatKey(token);
+        return stringRedisTemplate.hasKey(redisKey);
+    }
+
+    public void set(String token, LoginUser loginUser) {
+        String redisKey = formatKey(token);
         stringRedisTemplate.opsForValue().set(redisKey, JsonUtils.toJsonString(loginUser),
                 securityProperties.getSessionTimeout());
     }
 
-    public void delete(String sessionId) {
-        String redisKey = formatKey(sessionId);
+    public void delete(String token) {
+        String redisKey = formatKey(token);
         stringRedisTemplate.delete(redisKey);
     }
 
-    private static String formatKey(String sessionId) {
-        return LOGIN_USER.formatKey(sessionId);
+    private static String formatKey(String token) {
+        return LOGIN_USER.formatKey(token);
     }
 
 }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/auth/UserSessionTimeoutJob.java

@@ -24,7 +24,7 @@ public class UserSessionTimeoutJob implements JobHandler {
     @Override
     public String execute(String param) throws Exception {
         // 执行过期
-        Long timeoutCount = userSessionService.clearSessionTimeout();
+        Long timeoutCount = userSessionService.deleteTimeoutSession();
         // 返回结果,记录每次的超时数量
         return String.format("移除在线会话数量为 %s 个", timeoutCount);
     }

+ 5 - 5
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java

@@ -104,7 +104,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         // 使用账号密码,进行登录
         LoginUser loginUser = login0(reqVO.getUsername(), reqVO.getPassword());
 
-        // 缓存登陆用户到 Redis 中,返回 sessionId 编号
+        // 缓存登陆用户到 Redis 中,返回 Token 令牌
         return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_USERNAME, userIp, userAgent);
     }
 
@@ -207,7 +207,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         // 创建 LoginUser 对象
         LoginUser loginUser = buildLoginUser(user);
 
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_SOCIAL, userIp, userAgent);
     }
 
@@ -219,14 +219,14 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         // 绑定社交用户
         socialUserService.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO));
 
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_SOCIAL, userIp, userAgent);
     }
 
     private String createUserSessionAfterLoginSuccess(LoginUser loginUser, LoginLogTypeEnum logType, String userIp, String userAgent) {
         // 插入登陆日志
         createLoginLog(loginUser.getUsername(), logType, LoginResultEnum.SUCCESS);
-        // 缓存登录用户到 Redis 中,返回 sessionId 编号
+        // 缓存登录用户到 Redis 中,返回 Token 令牌
         return userSessionService.createUserSession(loginUser, userIp, userAgent);
     }
 
@@ -240,7 +240,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         // 删除 session
         userSessionService.deleteUserSession(token);
         // 记录登出日志
-        this.createLogoutLog(loginUser.getId(), loginUser.getUsername());
+        createLogoutLog(loginUser.getId(), loginUser.getUsername());
     }
 
     @Override

+ 16 - 9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionService.java

@@ -25,7 +25,7 @@ public interface UserSessionService {
      *
      * @return {@link Long } 移出的超时用户数量
      **/
-    long clearSessionTimeout();
+    long deleteTimeoutSession();
 
     /**
      * 创建在线用户 Session
@@ -33,32 +33,39 @@ public interface UserSessionService {
      * @param loginUser 登录用户
      * @param userIp 用户 IP
      * @param userAgent 用户 UA
-     * @return Session 编号
+     * @return Token 令牌
      */
     String createUserSession(LoginUser loginUser, String userIp, String userAgent);
 
     /**
      * 刷新在线用户 Session 的更新时间
      *
-     * @param sessionId Session 编号
+     * @param token 令牌
      * @param loginUser 登录用户
      */
-    void refreshUserSession(String sessionId, LoginUser loginUser);
+    void refreshUserSession(String token, LoginUser loginUser);
 
     /**
      * 删除在线用户 Session
      *
-     * @param sessionId Session 编号
+     * @param token token 令牌
      */
-    void deleteUserSession(String sessionId);
+    void deleteUserSession(String token);
 
     /**
-     * 获得 Session 编号对应的在线用户
+     * 删除在线用户 Session
+     *
+     * @param id 编号
+     */
+    void deleteUserSession(Long id);
+
+    /**
+     * 获得 Token 对应的在线用户
      *
-     * @param sessionId Session 编号
+     * @param token 令牌
      * @return 在线用户
      */
-    LoginUser getLoginUser(String sessionId);
+    LoginUser getLoginUser(String token);
 
     /**
      * 获得 Session 超时时间,单位:毫秒

+ 68 - 51
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java

@@ -3,28 +3,28 @@ package cn.iocoder.yudao.module.system.service.auth;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
 import cn.iocoder.yudao.framework.security.config.SecurityProperties;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.auth.UserSessionMapper;
+import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO;
 import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
 import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
 import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
-import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO;
-import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
-import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.time.Duration;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime;
@@ -65,82 +65,99 @@ public class UserSessionServiceImpl implements UserSessionService {
         return userSessionMapper.selectPage(reqVO, userIds);
     }
 
-    // TODO @芋艿:优化下该方法
     @Override
-    public long clearSessionTimeout() {
-        // 获取db里已经超时的用户列表
-        List<UserSessionDO> sessionTimeoutDOS = userSessionMapper.selectListBySessionTimoutLt();
-        Map<String, UserSessionDO> timeoutSessionDOMap = sessionTimeoutDOS
-                .stream()
-                .filter(sessionDO -> loginUserRedisDAO.get(sessionDO.getId()) == null)
-                .collect(Collectors.toMap(UserSessionDO::getId, o -> o));
-        // 确认已经超时,按批次移出在线用户列表
-        if (CollUtil.isNotEmpty(timeoutSessionDOMap)) {
-            Lists.partition(new ArrayList<>(timeoutSessionDOMap.keySet()), 100)
-                    .forEach(userSessionMapper::deleteBatchIds);
-            // 记录用户超时退出日志
-            createTimeoutLogoutLog(timeoutSessionDOMap.values());
+    public long deleteTimeoutSession() {
+        // 获取 db 里已经超时的用户列表
+        List<UserSessionDO> timeoutSessions = userSessionMapper.selectListBySessionTimoutLt();
+        if (CollUtil.isEmpty(timeoutSessions)) {
+            return 0L;
         }
-        return timeoutSessionDOMap.size();
-    }
 
-    private void createTimeoutLogoutLog(Collection<UserSessionDO> timeoutSessionDOS) {
-        for (UserSessionDO timeoutSessionDO : timeoutSessionDOS) {
-            LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
-            reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_TIMEOUT.getType());
-            reqDTO.setTraceId(TracerUtils.getTraceId());
-            reqDTO.setUserId(timeoutSessionDO.getUserId());
-            reqDTO.setUserType(timeoutSessionDO.getUserType());
-            reqDTO.setUsername(timeoutSessionDO.getUsername());
-            reqDTO.setUserAgent(timeoutSessionDO.getUserAgent());
-            reqDTO.setUserIp(timeoutSessionDO.getUserIp());
-            reqDTO.setResult(LoginResultEnum.SUCCESS.getResult());
-            loginLogService.createLoginLog(reqDTO);
+        // 由于过期的用户一般不多,所以顺序遍历,进行清理
+        int count = 0;
+        for (UserSessionDO session : timeoutSessions) {
+            // 基于 Redis 二次判断,同时也保证 Redis Key 的立即过期,避免延迟导致浪费内存空间
+            if (loginUserRedisDAO.exists(session.getToken())) {
+                continue;
+            }
+            userSessionMapper.deleteById(session.getId());
+            // 记录退出日志
+            createLogoutLog(session, LoginLogTypeEnum.LOGOUT_TIMEOUT);
+            count++;
         }
+        return count;
+    }
+
+    private void createLogoutLog(UserSessionDO session, LoginLogTypeEnum type) {
+        LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
+        reqDTO.setLogType(type.getType());
+        reqDTO.setTraceId(TracerUtils.getTraceId());
+        reqDTO.setUserId(session.getUserId());
+        reqDTO.setUserType(session.getUserType());
+        reqDTO.setUsername(session.getUsername());
+        reqDTO.setUserAgent(session.getUserAgent());
+        reqDTO.setUserIp(session.getUserIp());
+        reqDTO.setResult(LoginResultEnum.SUCCESS.getResult());
+        loginLogService.createLoginLog(reqDTO);
     }
 
     @Override
     public String createUserSession(LoginUser loginUser, String userIp, String userAgent) {
         // 生成 Session 编号
-        String sessionId = generateSessionId();
+        String token = generateToken();
         // 写入 Redis 缓存
         loginUser.setUpdateTime(new Date());
-        loginUserRedisDAO.set(sessionId, loginUser);
+        loginUserRedisDAO.set(token, loginUser);
         // 写入 DB 中
-        UserSessionDO userSession = UserSessionDO.builder().id(sessionId)
+        UserSessionDO userSession = UserSessionDO.builder().token(token)
                 .userId(loginUser.getId()).userType(loginUser.getUserType())
                 .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername())
                 .sessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis())))
                 .build();
         userSessionMapper.insert(userSession);
-        // 返回 Session 编号
-        return sessionId;
+        // 返回 Token 令牌
+        return token;
     }
 
     @Override
-    public void refreshUserSession(String sessionId, LoginUser loginUser) {
+    public void refreshUserSession(String token, LoginUser loginUser) {
         // 写入 Redis 缓存
         loginUser.setUpdateTime(new Date());
-        loginUserRedisDAO.set(sessionId, loginUser);
+        loginUserRedisDAO.set(token, loginUser);
         // 更新 DB 中
-        UserSessionDO updateObj = UserSessionDO.builder().id(sessionId).build();
+        UserSessionDO updateObj = UserSessionDO.builder().build();
         updateObj.setUsername(loginUser.getUsername());
         updateObj.setUpdateTime(new Date());
         updateObj.setSessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis())));
-        userSessionMapper.updateById(updateObj);
+        userSessionMapper.updateByToken(token, updateObj);
     }
 
     @Override
-    public void deleteUserSession(String sessionId) {
+    public void deleteUserSession(String token) {
+        // 删除 Redis 缓存
+        loginUserRedisDAO.delete(token);
+        // 删除 DB 记录
+        userSessionMapper.deleteByToken(token);
+        // 无需记录日志,因为退出那已经记录
+    }
+
+    @Override
+    public void deleteUserSession(Long id) {
+        UserSessionDO session = userSessionMapper.selectById(id);
+        if (session == null) {
+            return;
+        }
         // 删除 Redis 缓存
-        loginUserRedisDAO.delete(sessionId);
+        loginUserRedisDAO.delete(session.getToken());
         // 删除 DB 记录
-        userSessionMapper.deleteById(sessionId);
+        userSessionMapper.deleteById(id);
+        // 记录退出日志
+        createLogoutLog(session, LoginLogTypeEnum.LOGOUT_DELETE);
     }
 
     @Override
-    public LoginUser getLoginUser(String sessionId) {
-        return loginUserRedisDAO.get(sessionId);
+    public LoginUser getLoginUser(String token) {
+        return loginUserRedisDAO.get(token);
     }
 
     @Override
@@ -149,11 +166,11 @@ public class UserSessionServiceImpl implements UserSessionService {
     }
 
     /**
-     * 生成 Session 编号,目前采用 UUID 算法
+     * 生成 Token 令牌,目前采用 UUID 算法
      *
      * @return Session 编号
      */
-    private static String generateSessionId() {
+    private static String generateToken() {
         return IdUtil.fastSimpleUUID();
     }
 

+ 33 - 76
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -11,12 +11,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserCreateReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;
-import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
-import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserUpdateReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 import cn.iocoder.yudao.module.system.convert.user.UserConvert;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
@@ -36,25 +31,12 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
+import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_COUNT_MAX;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_EMAIL_EXISTS;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IS_DISABLE;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_MOBILE_EXISTS;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_PASSWORD_FAILED;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
 
 /**
  * 后台用户 Service 实现类
@@ -98,22 +80,17 @@ public class AdminUserServiceImpl implements AdminUserService {
             }
         });
         // 校验正确性
-        this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
+        checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
                 reqVO.getDeptId(), reqVO.getPostIds());
         // 插入用户
         AdminUserDO user = UserConvert.INSTANCE.convert(reqVO);
         user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
         user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // 加密密码
         userMapper.insert(user);
-        Set<Long> postIds = user.getPostIds();
-        if (CollectionUtil.isNotEmpty(postIds)) {
-            List<UserPostDO> insertUserPostList = CollectionUtils.convertList(postIds, postId -> {
-                UserPostDO entity = new UserPostDO();
-                entity.setUserId(user.getId());
-                entity.setPostId(postId);
-                return entity;
-            });
-            userPostMapper.insertBatch(insertUserPostList);
+        // 插入关联岗位
+        if (CollectionUtil.isNotEmpty(user.getPostIds())) {
+            userPostMapper.insertBatch(convertList(user.getPostIds(),
+                    postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId)));
         }
         return user.getId();
     }
@@ -122,48 +99,32 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Transactional(rollbackFor = Exception.class)
     public void updateUser(UserUpdateReqVO reqVO) {
         // 校验正确性
-        this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
+        checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
                 reqVO.getDeptId(), reqVO.getPostIds());
         // 更新用户
         AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO);
         userMapper.updateById(updateObj);
         // 更新岗位
         updateUserPost(reqVO, updateObj);
-
     }
 
     private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) {
-        Set<Long> postIds = updateObj.getPostIds();
         Long userId = reqVO.getId();
-        List<Long> dbPostIds = userPostMapper.selectIdList(userId)
-                .stream()
-                .map(UserPostDO::getPostId)
-                .collect(Collectors.toList());
+        Set<Long> dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId);
         // 计算新增和删除的岗位编号
+        Set<Long> postIds = updateObj.getPostIds();
         Collection<Long> createPostIds = CollUtil.subtract(postIds, dbPostIds);
         Collection<Long> deletePostIds = CollUtil.subtract(dbPostIds, postIds);
         // 执行新增和删除。对于已经授权的菜单,不用做任何处理
         if (!CollectionUtil.isEmpty(createPostIds)) {
-            List<UserPostDO> list = createUserPost(userId, createPostIds);
-            userPostMapper.insertBatch(list);
+            userPostMapper.insertBatch(convertList(createPostIds,
+                    postId -> new UserPostDO().setUserId(userId).setPostId(postId)));
         }
         if (!CollectionUtil.isEmpty(deletePostIds)) {
             userPostMapper.deleteByUserIdAndPostId(userId, deletePostIds);
         }
     }
 
-    private List<UserPostDO> createUserPost(Long userId, Collection<Long> createPostIds) {
-        return createPostIds
-                .stream()
-                .map(postId -> {
-                    UserPostDO entity = new UserPostDO();
-                    entity.setUserId(userId);
-                    entity.setPostId(postId);
-                    return entity;
-                })
-                .collect(Collectors.toList());
-    }
-
     @Override
     public void updateUserLogin(Long id, String loginIp) {
         userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date()));
@@ -172,9 +133,9 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Override
     public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) {
         // 校验正确性
-        this.checkUserExists(id);
-        this.checkEmailUnique(id, reqVO.getEmail());
-        this.checkMobileUnique(id, reqVO.getMobile());
+        checkUserExists(id);
+        checkEmailUnique(id, reqVO.getEmail());
+        checkMobileUnique(id, reqVO.getMobile());
         // 执行更新
         userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id));
     }
@@ -182,7 +143,7 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Override
     public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) {
         // 校验旧密码密码
-        this.checkOldPassword(id, reqVO.getOldPassword());
+        checkOldPassword(id, reqVO.getOldPassword());
         // 执行更新
         AdminUserDO updateObj = new AdminUserDO().setId(id);
         updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // 加密密码
@@ -191,7 +152,7 @@ public class AdminUserServiceImpl implements AdminUserService {
 
     @Override
     public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception {
-        this.checkUserExists(id);
+        checkUserExists(id);
         // 存储文件
         String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile));
         // 更新路径
@@ -205,7 +166,7 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Override
     public void updateUserPassword(Long id, String password) {
         // 校验用户存在
-        this.checkUserExists(id);
+        checkUserExists(id);
         // 更新密码
         AdminUserDO updateObj = new AdminUserDO();
         updateObj.setId(id);
@@ -216,7 +177,7 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Override
     public void updateUserStatus(Long id, Integer status) {
         // 校验用户存在
-        this.checkUserExists(id);
+        checkUserExists(id);
         // 更新状态
         AdminUserDO updateObj = new AdminUserDO();
         updateObj.setId(id);
@@ -228,7 +189,7 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Transactional(rollbackFor = Exception.class)
     public void deleteUser(Long id) {
         // 校验用户存在
-        this.checkUserExists(id);
+        checkUserExists(id);
         // 删除用户
         userMapper.deleteById(id);
         // 删除用户关联数据
@@ -244,7 +205,7 @@ public class AdminUserServiceImpl implements AdminUserService {
 
     @Override
     public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) {
-        return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId()));
+        return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
     }
 
     @Override
@@ -265,15 +226,11 @@ public class AdminUserServiceImpl implements AdminUserService {
         if (CollUtil.isEmpty(postIds)) {
             return Collections.emptyList();
         }
-        List<Long> userIdList = userPostMapper.selectListByPostIds(postIds)
-                .stream()
-                .map(UserPostDO::getUserId)
-                .distinct()
-                .collect(Collectors.toList());;
-        if (userIdList.isEmpty()) {
+        Set<Long> userIds = convertSet(userPostMapper.selectListByPostIds(postIds), UserPostDO::getUserId);
+        if (CollUtil.isEmpty(userIds)) {
             return Collections.emptyList();
         }
-        return userMapper.selectBatchIds(userIdList);
+        return userMapper.selectBatchIds(userIds);
     }
 
     @Override
@@ -306,7 +263,7 @@ public class AdminUserServiceImpl implements AdminUserService {
 
     @Override
     public List<AdminUserDO> getUsers(UserExportReqVO reqVO) {
-        return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId()));
+        return userMapper.selectList(reqVO, getDeptCondition(reqVO.getDeptId()));
     }
 
     @Override
@@ -328,7 +285,7 @@ public class AdminUserServiceImpl implements AdminUserService {
         if (deptId == null) {
             return Collections.emptySet();
         }
-        Set<Long> deptIds = CollectionUtils.convertSet(deptService.getDeptsByParentIdFromCache(
+        Set<Long> deptIds = convertSet(deptService.getDeptsByParentIdFromCache(
                 deptId, true), DeptDO::getId);
         deptIds.add(deptId); // 包括自身
         return deptIds;
@@ -337,13 +294,13 @@ public class AdminUserServiceImpl implements AdminUserService {
     private void checkCreateOrUpdate(Long id, String username, String mobile, String email,
                                      Long deptId, Set<Long> postIds) {
         // 校验用户存在
-        this.checkUserExists(id);
+        checkUserExists(id);
         // 校验用户名唯一
-        this.checkUsernameUnique(id, username);
+        checkUsernameUnique(id, username);
         // 校验手机号唯一
-        this.checkMobileUnique(id, mobile);
+        checkMobileUnique(id, mobile);
         // 校验邮箱唯一
-        this.checkEmailUnique(id, email);
+        checkEmailUnique(id, email);
         // 校验部门处于开启状态
         deptService.validDepts(CollectionUtils.singleton(deptId));
         // 校验岗位处于开启状态

+ 17 - 8
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImplTest.java

@@ -134,6 +134,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest {
         AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class);
         String userIp = randomString();
         String userAgent = randomString();
+
         // 调用, 并断言异常
         assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_NOT_FOUND);
         // 校验调用参数
@@ -148,10 +149,12 @@ public class AuthServiceImplTest extends BaseDbUnitTest {
         // 准备参数
         String userIp = randomString();
         String userAgent = randomString();
-        String code = randomString();
         AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class);
+
         // mock 验证码不正确
+        String code = randomString();
         when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(code);
+
         // 调用, 并断言异常
         assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_CAPTCHA_CODE_ERROR);
         // 校验调用参数
@@ -172,6 +175,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest {
         // mock 抛出异常
         when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(reqVO.getUsername(), reqVO.getPassword())))
                 .thenThrow(new BadCredentialsException("测试账号或密码不正确"));
+
         // 调用, 并断言异常
         assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_BAD_CREDENTIALS);
         // 校验调用参数
@@ -188,11 +192,13 @@ public class AuthServiceImplTest extends BaseDbUnitTest {
         String userIp = randomString();
         String userAgent = randomString();
         AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class);
+
         // mock 验证码正确
         when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(reqVO.getCode());
         // mock 抛出异常
         when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(reqVO.getUsername(), reqVO.getPassword())))
                 .thenThrow(new DisabledException("测试用户被禁用"));
+
         // 调用, 并断言异常
         assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_USER_DISABLED);
         // 校验调用参数
@@ -214,6 +220,7 @@ public class AuthServiceImplTest extends BaseDbUnitTest {
         // mock 抛出异常
         when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(reqVO.getUsername(), reqVO.getPassword())))
                 .thenThrow(new AuthenticationException("测试未知异常") {});
+
         // 调用, 并断言异常
         assertServiceException(() -> authService.login(reqVO, userIp, userAgent), AUTH_LOGIN_FAIL_UNKNOWN);
         // 校验调用参数
@@ -229,27 +236,29 @@ public class AuthServiceImplTest extends BaseDbUnitTest {
         // 准备参数
         String userIp = randomString();
         String userAgent = randomString();
+        AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class);
+
+        // mock 验证码正确
+        when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(reqVO.getCode());
+        // mock authentication
         Long userId = randomLongId();
         Set<Long> userRoleIds = randomSet(Long.class);
-        String sessionId = randomString();
-        AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class);
         LoginUser loginUser = randomPojo(LoginUser.class, o -> {
             o.setId(userId);
             o.setRoleIds(userRoleIds);
         });
-        // mock 验证码正确
-        when(captchaService.getCaptchaCode(reqVO.getUuid())).thenReturn(reqVO.getCode());
-        // mock authentication
         when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(reqVO.getUsername(), reqVO.getPassword())))
                 .thenReturn(authentication);
         when(authentication.getPrincipal()).thenReturn(loginUser);
         // mock 获得 User 拥有的角色编号数组
         when(permissionService.getUserRoleIds(userId, singleton(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(userRoleIds);
         // mock 缓存登录用户到 Redis
-        when(userSessionService.createUserSession(loginUser, userIp, userAgent)).thenReturn(sessionId);
+        String token = randomString();
+        when(userSessionService.createUserSession(loginUser, userIp, userAgent)).thenReturn(token);
+
         // 调用, 并断言异常
         String login = authService.login(reqVO, userIp, userAgent);
-        assertEquals(sessionId, login);
+        assertEquals(token, login);
         // 校验调用参数
         verify(captchaService, times(1)).deleteCaptchaCode(reqVO.getUuid());
         verify(loginLogService, times(1)).createLoginLog(

+ 122 - 91
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImplTest.java

@@ -1,31 +1,31 @@
 package cn.iocoder.yudao.module.system.service.auth;
 
-import cn.hutool.core.date.DateUtil;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
+import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
 import cn.iocoder.yudao.framework.security.config.SecurityProperties;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest;
 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.auth.UserSessionMapper;
-import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
-import cn.iocoder.yudao.module.system.service.user.AdminUserService;
-import cn.iocoder.yudao.module.system.dal.dataobject.auth.UserSessionDO;
 import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO;
 import cn.iocoder.yudao.module.system.enums.common.SexEnum;
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
-import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest;
+import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
+import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
+import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
 import java.time.Duration;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.util.Calendar;
 
 import static cn.hutool.core.util.RandomUtil.randomEle;
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime;
@@ -33,8 +33,9 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
 import static java.util.Collections.singletonList;
 import static org.junit.jupiter.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 /**
@@ -61,6 +62,11 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest {
     @MockBean
     private SecurityProperties securityProperties;
 
+    @BeforeEach
+    public void setUp() {
+        when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1L));
+    }
+
     @Test
     public void testGetUserSessionPage_success() {
         // mock 数据
@@ -78,15 +84,9 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest {
         });
         userSessionMapper.insert(dbSession);
         // 测试 username 不匹配
-        userSessionMapper.insert(ObjectUtils.cloneIgnoreId(dbSession, o -> {
-            o.setId(randomString());
-            o.setUserId(123456L);
-        }));
+        userSessionMapper.insert(ObjectUtils.cloneIgnoreId(dbSession, o -> o.setUserId(123456L)));
         // 测试 userIp 不匹配
-        userSessionMapper.insert(ObjectUtils.cloneIgnoreId(dbSession, o -> {
-            o.setId(randomString());
-            o.setUserIp("testUserIp");
-        }));
+        userSessionMapper.insert(ObjectUtils.cloneIgnoreId(dbSession, o -> o.setUserIp("testUserIp")));
         // 准备参数
         UserSessionPageReqVO reqVO = new UserSessionPageReqVO();
         reqVO.setUsername(dbUser.getUsername());
@@ -100,35 +100,60 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest {
         assertPojoEquals(dbSession, pageResult.getList().get(0));
     }
 
-    // TODO 芋艿:单测写的有问题
+    @Test
+    public void testClearSessionTimeout_none() {
+        // mock db 数据
+        UserSessionDO userSession = randomPojo(UserSessionDO.class, o -> {
+            o.setUserType(randomEle(UserTypeEnum.values()).getValue());
+            o.setSessionTimeout(addTime(Duration.ofDays(1)));
+        });
+        userSessionMapper.insert(userSession);
+
+        // 调用
+        long count = userSessionService.deleteTimeoutSession();
+        // 断言
+        assertEquals(0, count);
+        assertPojoEquals(userSession, userSessionMapper.selectById(userSession.getId())); // 未删除
+    }
+
+    @Test // Redis 还存在的情况
+    public void testClearSessionTimeout_exists() {
+        // mock db 数据
+        UserSessionDO userSession = randomPojo(UserSessionDO.class, o -> {
+            o.setUserType(randomEle(UserTypeEnum.values()).getValue());
+            o.setSessionTimeout(DateUtils.addDate(Calendar.DAY_OF_YEAR, -1));
+        });
+        userSessionMapper.insert(userSession);
+        // mock redis 数据
+        loginUserRedisDAO.set(userSession.getToken(), new LoginUser());
+
+        // 调用
+        long count = userSessionService.deleteTimeoutSession();
+        // 断言
+        assertEquals(0, count);
+        assertPojoEquals(userSession, userSessionMapper.selectById(userSession.getId())); // 未删除
+    }
+
     @Test
     public void testClearSessionTimeout_success() {
-        // 准备超时数据 120 条, 在线用户 1 条
-        int expectedTimeoutCount = 120, expectedTotal = 1;
-
-        // 准备数据
-        List<UserSessionDO> prepareData = Stream
-                .iterate(0, i -> i)
-                .limit(expectedTimeoutCount)
-                .map(i -> randomPojo(UserSessionDO.class, o -> {
-                    o.setUserType(randomEle(UserTypeEnum.values()).getValue());
-                    o.setSessionTimeout(DateUtil.offsetSecond(new Date(), -1));
-                }))
-                .collect(Collectors.toList());
-        UserSessionDO sessionDO = randomPojo(UserSessionDO.class, o -> {
+        // mock db 数据
+        UserSessionDO userSession = randomPojo(UserSessionDO.class, o -> {
             o.setUserType(randomEle(UserTypeEnum.values()).getValue());
-            o.setSessionTimeout(DateUtil.offsetMinute(new Date(), 30));
+            o.setSessionTimeout(DateUtils.addDate(Calendar.DAY_OF_YEAR, -1));
         });
-        prepareData.add(sessionDO);
-        prepareData.forEach(userSessionMapper::insert);
+        userSessionMapper.insert(userSession);
 
         // 清空超时数据
-        long actualTimeoutCount = userSessionService.clearSessionTimeout();
+        long count = userSessionService.deleteTimeoutSession();
         // 校验
-        assertEquals(expectedTimeoutCount, actualTimeoutCount);
-        List<UserSessionDO> userSessionDOS = userSessionMapper.selectList();
-        assertEquals(expectedTotal, userSessionDOS.size());
-        assertPojoEquals(sessionDO, userSessionDOS.get(0), "updateTime");
+        assertEquals(1, count);
+        assertNull(userSessionMapper.selectById(userSession.getId())); // 已删除
+        verify(loginLogService).createLoginLog(argThat(loginLog -> {
+            assertPojoEquals(userSession, loginLog);
+            assertEquals(LoginLogTypeEnum.LOGOUT_TIMEOUT.getType(), loginLog.getLogType());
+            assertEquals(LoginResultEnum.SUCCESS.getResult(), loginLog.getResult());
+            return true;
+        }));
     }
 
     @Test
@@ -140,80 +165,86 @@ public class UserSessionServiceImplTest extends BaseDbAndRedisUnitTest {
             o.setUserType(randomEle(UserTypeEnum.values()).getValue());
             o.setTenantId(0L); // 租户设置为 0,因为暂未启用多租户组件
         });
-        // mock 方法
-        when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1));
 
         // 调用
-        String sessionId = userSessionService.createUserSession(loginUser, userIp, userAgent);
+        String token = userSessionService.createUserSession(loginUser, userIp, userAgent);
         // 校验 UserSessionDO 记录
-        UserSessionDO userSessionDO = userSessionMapper.selectById(sessionId);
+        UserSessionDO userSessionDO = userSessionMapper.selectOne(UserSessionDO::getToken, token);
         assertPojoEquals(loginUser, userSessionDO, "id", "updateTime");
-        assertEquals(sessionId, userSessionDO.getId());
+        assertEquals(token, userSessionDO.getToken());
         assertEquals(userIp, userSessionDO.getUserIp());
         assertEquals(userAgent, userSessionDO.getUserAgent());
         // 校验 LoginUser 缓存
-        LoginUser redisLoginUser = loginUserRedisDAO.get(sessionId);
+        LoginUser redisLoginUser = loginUserRedisDAO.get(token);
         assertPojoEquals(loginUser, redisLoginUser, "username", "password");
     }
 
     @Test
-    public void testCreateRefreshUserSession_success() {
+    public void testCreateRefreshUserSession() {
         // 准备参数
-        String sessionId = randomString();
-        String userIp = randomString();
-        String userAgent = randomString();
-        long timeLong = randomLongId();
-        String userName = randomString();
-        Date date = randomDate();
+        String token = randomString();
+
+        // mock redis 数据
         LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setUserType(randomEle(UserTypeEnum.values()).getValue()));
-        // mock 方法
-        when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1));
-        // mock 数据
-        loginUser.setUpdateTime(date);
-        loginUserRedisDAO.set(sessionId, loginUser);
-        UserSessionDO userSession = UserSessionDO.builder().id(sessionId)
-                .userId(loginUser.getId()).userType(loginUser.getUserType())
-                .userIp(userIp).userAgent(userAgent).username(userName)
-                .sessionTimeout(addTime(Duration.ofMillis(timeLong)))
-                .build();
+        loginUserRedisDAO.set(token, loginUser);
+        // mock db 数据
+        UserSessionDO userSession = randomPojo(UserSessionDO.class, o -> {
+            o.setUserType(randomEle(UserTypeEnum.values()).getValue());
+            o.setToken(token);
+        });
         userSessionMapper.insert(userSession);
 
         // 调用
-        userSessionService.refreshUserSession(sessionId, loginUser);
+        userSessionService.refreshUserSession(token, loginUser);
         // 校验 LoginUser 缓存
-        LoginUser redisLoginUser = loginUserRedisDAO.get(sessionId);
-        assertNotEquals(redisLoginUser.getUpdateTime(), date);
+        LoginUser redisLoginUser = loginUserRedisDAO.get(token);
+        assertPojoEquals(redisLoginUser, loginUser, "username", "password");
         // 校验 UserSessionDO 记录
-        UserSessionDO updateDO = userSessionMapper.selectById(sessionId);
+        UserSessionDO updateDO = userSessionMapper.selectOne(UserSessionDO::getToken, token);
         assertEquals(updateDO.getUsername(), loginUser.getUsername());
-        assertNotEquals(updateDO.getUpdateTime(), userSession.getUpdateTime());
-        assertNotEquals(updateDO.getSessionTimeout(), addTime(Duration.ofMillis(timeLong)));
+        assertNotNull(userSession.getUpdateTime());
+        assertNotNull(userSession.getSessionTimeout());
     }
 
     @Test
-    public void testDeleteUserSession_success() {
+    public void testDeleteUserSession_Token() {
         // 准备参数
-        String sessionId = randomString();
-        String userIp = randomString();
-        String userAgent = randomString();
-        Long timeLong = randomLongId();
-        LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setUserType(randomEle(UserTypeEnum.values()).getValue()));
-        // mock 存入 Redis
-        when(securityProperties.getSessionTimeout()).thenReturn(Duration.ofDays(1));
-        // mock 数据
-        loginUserRedisDAO.set(sessionId, loginUser);
-        UserSessionDO userSession = UserSessionDO.builder().id(sessionId)
-                .userId(loginUser.getId()).userType(loginUser.getUserType())
-                .userIp(userIp).userAgent(userAgent).username(loginUser.getUsername())
-                .sessionTimeout(addTime(Duration.ofMillis(timeLong)))
-                .build();
+        String token = randomString();
+
+        // mock redis 数据
+        loginUserRedisDAO.set(token, new LoginUser());
+        // mock db 数据
+        UserSessionDO userSession = randomPojo(UserSessionDO.class, o -> {
+            o.setUserType(randomEle(UserTypeEnum.values()).getValue());
+            o.setToken(token);
+        });
         userSessionMapper.insert(userSession);
 
         // 调用
-        userSessionService.deleteUserSession(sessionId);
+        userSessionService.deleteUserSession(token);
+        // 校验数据不存在了
+        assertNull(loginUserRedisDAO.get(token));
+        assertNull(userSessionMapper.selectOne(UserSessionDO::getToken, token));
+    }
+
+    @Test
+    public void testDeleteUserSession_Id() {
+        // mock db 数据
+        UserSessionDO userSession = randomPojo(UserSessionDO.class, o -> {
+            o.setUserType(randomEle(UserTypeEnum.values()).getValue());
+        });
+        userSessionMapper.insert(userSession);
+        // mock redis 数据
+        loginUserRedisDAO.set(userSession.getToken(), new LoginUser());
+
+        // 准备参数
+        Long id = userSession.getId();
+
+        // 调用
+        userSessionService.deleteUserSession(id);
         // 校验数据不存在了
-        assertNull(loginUserRedisDAO.get(sessionId));
-        assertNull(userSessionMapper.selectById(sessionId));
+        assertNull(loginUserRedisDAO.get(userSession.getToken()));
+        assertNull(userSessionMapper.selectById(id));
     }
 
 }

+ 42 - 19
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java → yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java

@@ -7,21 +7,23 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
+import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
 import cn.iocoder.yudao.module.system.enums.common.SexEnum;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import cn.iocoder.yudao.module.system.service.dept.PostService;
 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
 import cn.iocoder.yudao.module.system.service.tenant.TenantService;
-import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import org.junit.jupiter.api.Test;
 import org.mockito.stubbing.Answer;
 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -30,16 +32,19 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 
 import javax.annotation.Resource;
 import java.io.ByteArrayInputStream;
+import java.util.Collection;
 import java.util.List;
 import java.util.function.Consumer;
 
 import static cn.hutool.core.util.RandomUtil.randomBytes;
 import static cn.hutool.core.util.RandomUtil.randomEle;
+import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
 import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
+import static java.util.Collections.singleton;
 import static org.assertj.core.util.Lists.newArrayList;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -47,13 +52,15 @@ import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 @Import(AdminUserServiceImpl.class)
-public class UserServiceImplTest extends BaseDbUnitTest {
+public class AdminUserServiceImplTest extends BaseDbUnitTest {
 
     @Resource
     private AdminUserServiceImpl userService;
 
     @Resource
     private AdminUserMapper userMapper;
+    @Resource
+    private UserPostMapper userPostMapper;
 
     @MockBean
     private DeptService deptService;
@@ -74,6 +81,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
         UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> {
             o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
             o.setMobile(randomString());
+            o.setPostIds(asSet(1L, 2L));
         });
         // mock 账户额度充足
         TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1));
@@ -104,6 +112,10 @@ public class UserServiceImplTest extends BaseDbUnitTest {
         assertPojoEquals(reqVO, user, "password");
         assertEquals("yudaoyuanma", user.getPassword());
         assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus());
+        // 断言关联岗位
+        List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
+        assertEquals(1L, userPosts.get(0).getPostId());
+        assertEquals(2L, userPosts.get(1).getPostId());
     }
 
     @Test
@@ -124,13 +136,16 @@ public class UserServiceImplTest extends BaseDbUnitTest {
     @Test
     public void testUpdateUser_success() {
         // mock 数据
-        AdminUserDO dbUser = randomAdminUserDO();
+        AdminUserDO dbUser = randomAdminUserDO(o -> o.setPostIds(asSet(1L, 2L)));
         userMapper.insert(dbUser);
+        userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L));
+        userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L));
         // 准备参数
         UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> {
             o.setId(dbUser.getId());
             o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
             o.setMobile(randomString());
+            o.setPostIds(asSet(2L, 3L));
         });
         // mock deptService 的方法
         DeptDO dept = randomPojo(DeptDO.class, o -> {
@@ -151,6 +166,10 @@ public class UserServiceImplTest extends BaseDbUnitTest {
         // 断言
         AdminUserDO user = userMapper.selectById(reqVO.getId());
         assertPojoEquals(reqVO, user);
+        // 断言关联岗位
+        List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
+        assertEquals(2L, userPosts.get(0).getPostId());
+        assertEquals(3L, userPosts.get(1).getPostId());
     }
 
     @Test
@@ -552,22 +571,26 @@ public class UserServiceImplTest extends BaseDbUnitTest {
         verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword()));
     }
 
-//    @Test //TODO jason 已经移到userCoreService.getUsersByPostIds
-//    public void testUsersByPostIds() {
-//        // 准备参数
-//        Collection<Long> postIds = asSet(10L, 20L);
-//        // mock 方法
-//        AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L)));
-//        userMapper.insert(user1);
-//        AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L)));
-//        userMapper.insert(user2);
-//
-//        // 调用
-//        List<AdminUserDO> result = userService.getUsersByPostIds(postIds);
-//        // 断言
-//        assertEquals(1, result.size());
-//        assertEquals(user1, result.get(0));
-//    }
+    @Test
+    public void testUsersByPostIds() {
+        // 准备参数
+        Collection<Long> postIds = asSet(10L, 20L);
+        // mock user1 数据
+        AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L)));
+        userMapper.insert(user1);
+        userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(10L));
+        userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(30L));
+        // mock user2 数据
+        AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L)));
+        userMapper.insert(user2);
+        userPostMapper.insert(new UserPostDO().setUserId(user2.getId()).setPostId(100L));
+
+        // 调用
+        List<AdminUserDO> result = userService.getUsersByPostIds(postIds);
+        // 断言
+        assertEquals(1, result.size());
+        assertEquals(user1, result.get(0));
+    }
 
     // ========== 随机对象 ==========
 

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/clean.sql

@@ -10,7 +10,7 @@ DELETE FROM "system_user_session";
 DELETE FROM "system_post";
 DELETE FROM "system_login_log";
 DELETE FROM "system_operate_log";
-DELETE FROM "system_user";
+DELETE FROM "system_users";
 DELETE FROM "system_sms_channel";
 DELETE FROM "system_sms_template";
 DELETE FROM "system_sms_log";

+ 3 - 2
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/create_tables.sql

@@ -115,7 +115,8 @@ CREATE TABLE IF NOT EXISTS "system_dict_type" (
 ) COMMENT '字典类型表';
 
 CREATE TABLE IF NOT EXISTS `system_user_session` (
-    `id` varchar(32) NOT NULL,
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    `token` varchar(32) NOT NULL,
     `user_id` bigint DEFAULT NULL,
     "user_type" tinyint NOT NULL,
     `username` varchar(50) NOT NULL DEFAULT '',
@@ -224,7 +225,7 @@ CREATE TABLE IF NOT EXISTS `system_operate_log` (
     PRIMARY KEY (`id`)
 ) COMMENT ='操作日志记录';
 
-CREATE TABLE IF NOT EXISTS "system_user" (
+CREATE TABLE IF NOT EXISTS "system_users" (
     "id" bigint not null GENERATED BY DEFAULT AS IDENTITY,
     "username" varchar(30) not null,
     "password" varchar(100) not null default '',

+ 0 - 1
yudao-server/pom.xml

@@ -21,7 +21,6 @@
     <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
 
     <dependencies>
-        <!-- TODO 芋艿:多模块 -->
         <dependency>
             <groupId>cn.iocoder.boot</groupId>
             <artifactId>yudao-module-member-biz</artifactId>

+ 1 - 1
yudao-server/src/main/resources/application-dev.yaml

@@ -60,7 +60,7 @@ spring:
     host: 400-infra.server.iocoder.cn # 地址
     port: 6379 # 端口
     database: 1 # 数据库索引
-    password: 123456
+#    password: 123456 # 密码,建议生产环境开启
 
 jasypt:
   encryptor:

+ 13 - 7
yudao-server/src/main/resources/application-local.yaml

@@ -44,25 +44,31 @@ spring:
       datasource:
         master:
           name: ruoyi-vue-pro
-          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL 连接的示例
+#          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL 连接的示例
 #          url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
 #          url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
-          username: root
-          password: 123456
+#          username: root
+#          password: 123456
+          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例
+          username: sa
+          password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
         slave: # 模拟从库,可根据自己需要修改
           name: ruoyi-vue-pro
-          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL 连接的示例
+#          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL 连接的示例
 #          url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
 #          url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
-          username: root
-          password: 123456
+#          username: root
+#          password: 123456
+          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例
+          username: sa
+          password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
 
   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
   redis:
     host: 127.0.0.1 # 地址
     port: 6379 # 端口
     database: 0 # 数据库索引
-    password: 123456
+#    password: 123456 # 密码,建议生产环境开启
 
 jasypt:
   encryptor:

部分文件因文件數量過多而無法顯示