Commit a8ed2111f88f3e0155f0199dfde55aa2df95b8a0
Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/iot
# Conflicts: # yudao-dependencies/pom.xml
Showing
224 changed files
with
6526 additions
and
2613 deletions
Too many changes.
To preserve performance only 100 of 224 files are displayed.
README.md
| ... | ... | @@ -232,18 +232,19 @@ |
| 232 | 232 | |
| 233 | 233 | ### 微信公众号 |
| 234 | 234 | |
| 235 | -| | 功能 | 描述 | | |
| 236 | -|-----|--------|-------------------------------| | |
| 237 | -| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 | | |
| 238 | -| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 | | |
| 239 | -| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 | | |
| 240 | -| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 | | |
| 241 | -| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 | | |
| 242 | -| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 | | |
| 243 | -| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 | | |
| 244 | -| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 | | |
| 245 | -| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 | | |
| 246 | -| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 | | |
| 235 | +| | 功能 | 描述 | | |
| 236 | +|----|--------|-------------------------------| | |
| 237 | +| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 | | |
| 238 | +| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 | | |
| 239 | +| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 | | |
| 240 | +| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 | | |
| 241 | +| 🚀 | 模版消息 | 配置和发送模版消息,用于向粉丝推送通知类消息 | | |
| 242 | +| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 | | |
| 243 | +| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 | | |
| 244 | +| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 | | |
| 245 | +| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 | | |
| 246 | +| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 | | |
| 247 | +| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 | | |
| 247 | 248 | |
| 248 | 249 | ### 商城系统 |
| 249 | 250 | ... | ... |
pom.xml
| ... | ... | @@ -32,7 +32,7 @@ |
| 32 | 32 | <url>https://github.com/YunaiV/ruoyi-vue-pro</url> |
| 33 | 33 | |
| 34 | 34 | <properties> |
| 35 | - <revision>2025.09-SNAPSHOT</revision> | |
| 35 | + <revision>2025.12-SNAPSHOT</revision> | |
| 36 | 36 | <!-- Maven 相关 --> |
| 37 | 37 | <java.version>17</java.version> |
| 38 | 38 | <maven.compiler.source>${java.version}</maven.compiler.source> |
| ... | ... | @@ -41,8 +41,8 @@ |
| 41 | 41 | <maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version> |
| 42 | 42 | <flatten-maven-plugin.version>1.7.2</flatten-maven-plugin.version> |
| 43 | 43 | <!-- maven-surefire-plugin 暂时无法通过 bom 的依赖读取(兼容老版本 IDEA 2024 及以前版本) --> |
| 44 | - <lombok.version>1.18.38</lombok.version> | |
| 45 | - <spring.boot.version>3.5.5</spring.boot.version> | |
| 44 | + <lombok.version>1.18.42</lombok.version> | |
| 45 | + <spring.boot.version>3.5.9</spring.boot.version> | |
| 46 | 46 | <mapstruct.version>1.6.3</mapstruct.version> |
| 47 | 47 | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| 48 | 48 | </properties> | ... | ... |
sql/dm/ruoyi-vue-pro-dm8.sql
| ... | ... | @@ -1063,7 +1063,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1063 | 1063 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1690, 5, '向量', '5', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:15', '1', '2025-03-03 12:28:15', '0'); |
| 1064 | 1064 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1691, 6, '重排', '6', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:26', '1', '2025-03-03 12:28:26', '0'); |
| 1065 | 1065 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1692, 14, 'MiniMax', 'MiniMax', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:04:51', '1', '2025-03-11 20:04:51', '0'); |
| 1066 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗灭', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1066 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗面', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1067 | 1067 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2000, 0, '标准数据格式(JSON)', '0', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:26', '1', '2025-03-17 09:28:16', '0'); |
| 1068 | 1068 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2001, 1, '透传/自定义', '1', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:37', '1', '2025-03-17 09:28:19', '0'); |
| 1069 | 1069 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2002, 0, '直连设备', '0', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:54:58', '1', '2025-03-17 09:28:22', '0'); |
| ... | ... | @@ -1240,6 +1240,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1240 | 1240 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3000, 16, '百川智能', 'BaiChuan', 'ai_platform', 0, '', '', '', '1', '2025-03-23 12:15:46', '1', '2025-03-23 12:15:46', '0'); |
| 1241 | 1241 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3001, 50, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-05-02 12:01:15', '0'); |
| 1242 | 1242 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3002, 6, '支付宝余额', '6', 'brokerage_withdraw_type', 0, '', '', 'API 打款', '1', '2025-05-10 08:24:49', '1', '2025-05-10 08:24:49', '0'); |
| 1243 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3035, 40, '支付宝小程序', '40', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', '0'); | |
| 1243 | 1244 | COMMIT; |
| 1244 | 1245 | SET IDENTITY_INSERT system_dict_data OFF; |
| 1245 | 1246 | -- @formatter:on |
| ... | ... | @@ -4179,7 +4180,8 @@ CREATE TABLE system_social_client |
| 4179 | 4180 | social_type smallint NOT NULL, |
| 4180 | 4181 | user_type smallint NOT NULL, |
| 4181 | 4182 | client_id varchar(255) NOT NULL, |
| 4182 | - client_secret varchar(255) NOT NULL, | |
| 4183 | + client_secret varchar(2048) NOT NULL, | |
| 4184 | + public_key varchar(2048) DEFAULT NULL NULL, | |
| 4183 | 4185 | agent_id varchar(255) DEFAULT NULL NULL, |
| 4184 | 4186 | status smallint NOT NULL, |
| 4185 | 4187 | creator varchar(64) DEFAULT '' NULL, |
| ... | ... | @@ -4195,6 +4197,7 @@ COMMENT ON COLUMN system_social_client.name IS '应用名'; |
| 4195 | 4197 | COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; |
| 4196 | 4198 | COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; |
| 4197 | 4199 | COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; |
| 4200 | +COMMENT ON COLUMN system_social_client.public_key IS 'publicKey公钥'; | |
| 4198 | 4201 | COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; |
| 4199 | 4202 | COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; |
| 4200 | 4203 | COMMENT ON COLUMN system_social_client.status IS '状态'; | ... | ... |
sql/kingbase/ruoyi-vue-pro.sql
| ... | ... | @@ -1177,7 +1177,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1177 | 1177 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1690, 5, '向量', '5', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:15', '1', '2025-03-03 12:28:15', '0'); |
| 1178 | 1178 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1691, 6, '重排', '6', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:26', '1', '2025-03-03 12:28:26', '0'); |
| 1179 | 1179 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1692, 14, 'MiniMax', 'MiniMax', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:04:51', '1', '2025-03-11 20:04:51', '0'); |
| 1180 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗灭', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1180 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗面', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1181 | 1181 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2000, 0, '标准数据格式(JSON)', '0', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:26', '1', '2025-03-17 09:28:16', '0'); |
| 1182 | 1182 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2001, 1, '透传/自定义', '1', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:37', '1', '2025-03-17 09:28:19', '0'); |
| 1183 | 1183 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2002, 0, '直连设备', '0', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:54:58', '1', '2025-03-17 09:28:22', '0'); |
| ... | ... | @@ -1354,6 +1354,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1354 | 1354 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3000, 16, '百川智能', 'BaiChuan', 'ai_platform', 0, '', '', '', '1', '2025-03-23 12:15:46', '1', '2025-03-23 12:15:46', '0'); |
| 1355 | 1355 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3001, 50, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-05-02 12:01:15', '0'); |
| 1356 | 1356 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3002, 6, '支付宝余额', '6', 'brokerage_withdraw_type', 0, '', '', 'API 打款', '1', '2025-05-10 08:24:49', '1', '2025-05-10 08:24:49', '0'); |
| 1357 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3035, 40, '支付宝小程序', 40, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', '0'); | |
| 1357 | 1358 | COMMIT; |
| 1358 | 1359 | -- @formatter:on |
| 1359 | 1360 | |
| ... | ... | @@ -4461,7 +4462,8 @@ CREATE TABLE system_social_client |
| 4461 | 4462 | social_type int2 NOT NULL, |
| 4462 | 4463 | user_type int2 NOT NULL, |
| 4463 | 4464 | client_id varchar(255) NOT NULL, |
| 4464 | - client_secret varchar(255) NOT NULL, | |
| 4465 | + client_secret varchar(2048) NOT NULL, | |
| 4466 | + public_key varchar(2048) NULL DEFAULT NULL, | |
| 4465 | 4467 | agent_id varchar(255) NULL DEFAULT NULL, |
| 4466 | 4468 | status int2 NOT NULL, |
| 4467 | 4469 | creator varchar(64) NULL DEFAULT '', |
| ... | ... | @@ -4481,6 +4483,7 @@ COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; |
| 4481 | 4483 | COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; |
| 4482 | 4484 | COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; |
| 4483 | 4485 | COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; |
| 4486 | +COMMENT ON COLUMN system_social_client.public_key IS 'publicKey公钥'; | |
| 4484 | 4487 | COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; |
| 4485 | 4488 | COMMENT ON COLUMN system_social_client.status IS '状态'; |
| 4486 | 4489 | COMMENT ON COLUMN system_social_client.creator IS '创建者'; | ... | ... |
sql/mysql/ruoyi-vue-pro.sql
| ... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 | Target Server Version : 80200 (8.2.0) |
| 12 | 12 | File Encoding : 65001 |
| 13 | 13 | |
| 14 | - Date: 31/08/2025 11:12:28 | |
| 14 | + Date: 26/11/2025 22:43:12 | |
| 15 | 15 | */ |
| 16 | 16 | |
| 17 | 17 | SET NAMES utf8mb4; |
| ... | ... | @@ -91,7 +91,7 @@ CREATE TABLE `infra_api_error_log` ( |
| 91 | 91 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 92 | 92 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 93 | 93 | PRIMARY KEY (`id`) USING BTREE |
| 94 | -) ENGINE = InnoDB AUTO_INCREMENT = 22656 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统异常日志'; | |
| 94 | +) ENGINE = InnoDB AUTO_INCREMENT = 23210 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统异常日志'; | |
| 95 | 95 | |
| 96 | 96 | -- ---------------------------- |
| 97 | 97 | -- Records of infra_api_error_log |
| ... | ... | @@ -128,7 +128,7 @@ CREATE TABLE `infra_codegen_column` ( |
| 128 | 128 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 129 | 129 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 130 | 130 | PRIMARY KEY (`id`) USING BTREE |
| 131 | -) ENGINE = InnoDB AUTO_INCREMENT = 2603 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表字段定义'; | |
| 131 | +) ENGINE = InnoDB AUTO_INCREMENT = 2659 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表字段定义'; | |
| 132 | 132 | |
| 133 | 133 | -- ---------------------------- |
| 134 | 134 | -- Records of infra_codegen_column |
| ... | ... | @@ -166,7 +166,7 @@ CREATE TABLE `infra_codegen_table` ( |
| 166 | 166 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 167 | 167 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 168 | 168 | PRIMARY KEY (`id`) USING BTREE |
| 169 | -) ENGINE = InnoDB AUTO_INCREMENT = 196 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表定义'; | |
| 169 | +) ENGINE = InnoDB AUTO_INCREMENT = 197 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表定义'; | |
| 170 | 170 | |
| 171 | 171 | -- ---------------------------- |
| 172 | 172 | -- Records of infra_codegen_table |
| ... | ... | @@ -251,7 +251,7 @@ CREATE TABLE `infra_file` ( |
| 251 | 251 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 252 | 252 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 253 | 253 | PRIMARY KEY (`id`) USING BTREE |
| 254 | -) ENGINE = InnoDB AUTO_INCREMENT = 1983 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件表'; | |
| 254 | +) ENGINE = InnoDB AUTO_INCREMENT = 2142 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件表'; | |
| 255 | 255 | |
| 256 | 256 | -- ---------------------------- |
| 257 | 257 | -- Records of infra_file |
| ... | ... | @@ -276,22 +276,23 @@ CREATE TABLE `infra_file_config` ( |
| 276 | 276 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 277 | 277 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 278 | 278 | PRIMARY KEY (`id`) USING BTREE |
| 279 | -) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件配置表'; | |
| 279 | +) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件配置表'; | |
| 280 | 280 | |
| 281 | 281 | -- ---------------------------- |
| 282 | 282 | -- Records of infra_file_config |
| 283 | 283 | -- ---------------------------- |
| 284 | 284 | BEGIN; |
| 285 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (4, '数据库(示例)', 1, '我是数据库', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2022-03-15 23:56:24', '1', '2025-08-18 08:35:14', b'0'); | |
| 286 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, '七牛存储器(示例)', 20, '请换成你自己的密钥!!!', b'1', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3.cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS\",\"accessSecret\":\"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-01-13 22:11:12', '1', '2025-08-18 08:35:14', b'0'); | |
| 287 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (24, '腾讯云存储(示例)', 20, '请换成你的密钥!!!', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"https://cos.ap-shanghai.myqcloud.com\",\"domain\":\"http://tengxun-oss.iocoder.cn\",\"bucket\":\"aoteman-1255880240\",\"accessKey\":\"AKIDAF6WSh1uiIjwqtrOsGSN3WryqTM6cTMt\",\"accessSecret\":\"X\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 16:03:22', '1', '2025-08-18 08:35:14', b'0'); | |
| 288 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (25, '阿里云存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"domain\":\"http://ali-oss.iocoder.cn\",\"bucket\":\"yunai-aoteman\",\"accessKey\":\"LTAI5tEQLgnDyjh3WpNcdMKA\",\"accessSecret\":\"X\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 16:47:08', '1', '2025-08-18 08:35:14', b'0'); | |
| 289 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (26, '火山云存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"tos-s3-cn-beijing.volces.com\",\"domain\":null,\"bucket\":\"yunai\",\"accessKey\":\"AKLTZjc3Zjc4MzZmMjU3NDk0ZTgxYmIyMmFkNTIwMDI1ZGE\",\"accessSecret\":\"X==\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 16:56:42', '1', '2025-08-18 08:35:14', b'0'); | |
| 290 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (27, '华为云存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"obs.cn-east-3.myhuaweicloud.com\",\"domain\":\"\",\"bucket\":\"yudao\",\"accessKey\":\"PVDONDEIOTW88LF8DC4U\",\"accessSecret\":\"X\",\"enablePathStyleAccess\":false}', '1', '2024-11-09 17:18:41', '1', '2025-08-18 08:35:14', b'0'); | |
| 291 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (28, 'MinIO 存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"http://127.0.0.1:9000\",\"domain\":\"http://127.0.0.1:9000/yudao\",\"bucket\":\"yudao\",\"accessKey\":\"admin\",\"accessSecret\":\"password\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 17:43:10', '1', '2025-08-18 08:35:14', b'0'); | |
| 292 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (29, '本地存储(示例)', 10, '仅适合 mac 或 windows', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig\",\"basePath\":\"/Users/yunai/tmp/file\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2025-05-02 11:25:45', '1', '2025-08-18 08:35:14', b'0'); | |
| 293 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (30, 'SFTP 存储(示例)', 12, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig\",\"basePath\":\"/upload\",\"domain\":\"http://127.0.0.1:48080\",\"host\":\"127.0.0.1\",\"port\":2222,\"username\":\"foo\",\"password\":\"pass\"}', '1', '2025-05-02 16:34:10', '1', '2025-08-18 08:35:14', b'0'); | |
| 294 | -INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (34, '七牛云存储【私有】(示例)', 20, '请换成你自己的密钥!!!', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3.cn-south-1.qiniucs.com\",\"domain\":\"http://t151glocd.hn-bkt.clouddn.com\",\"bucket\":\"ruoyi-vue-pro-private\",\"accessKey\":\"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS\",\"accessSecret\":\"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":false}', '1', '2025-08-17 21:22:00', '1', '2025-08-18 08:35:55', b'0'); | |
| 285 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (4, '数据库(示例)', 1, '我是数据库', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2022-03-15 23:56:24', '1', '2025-11-24 20:57:14', b'0'); | |
| 286 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, '七牛存储器(示例)', 20, '请换成你自己的密钥!!!', b'1', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3.cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS\",\"accessSecret\":\"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-01-13 22:11:12', '1', '2025-11-24 20:57:14', b'0'); | |
| 287 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (24, '腾讯云存储(示例)', 20, '请换成你的密钥!!!', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"https://cos.ap-shanghai.myqcloud.com\",\"domain\":\"http://tengxun-oss.iocoder.cn\",\"bucket\":\"aoteman-1255880240\",\"accessKey\":\"AKIDAF6WSh1uiIjwqtrOsGSN3WryqTM6cTMt\",\"accessSecret\":\"X\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 16:03:22', '1', '2025-11-24 20:57:14', b'0'); | |
| 288 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (25, '阿里云存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"domain\":\"http://ali-oss.iocoder.cn\",\"bucket\":\"yunai-aoteman\",\"accessKey\":\"LTAI5tEQLgnDyjh3WpNcdMKA\",\"accessSecret\":\"X\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 16:47:08', '1', '2025-11-24 20:57:14', b'0'); | |
| 289 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (26, '火山云存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"tos-s3-cn-beijing.volces.com\",\"domain\":null,\"bucket\":\"yunai\",\"accessKey\":\"AKLTZjc3Zjc4MzZmMjU3NDk0ZTgxYmIyMmFkNTIwMDI1ZGE\",\"accessSecret\":\"X==\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 16:56:42', '1', '2025-11-24 20:57:14', b'0'); | |
| 290 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (27, '华为云存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"obs.cn-east-3.myhuaweicloud.com\",\"domain\":\"\",\"bucket\":\"yudao\",\"accessKey\":\"PVDONDEIOTW88LF8DC4U\",\"accessSecret\":\"X\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 17:18:41', '1', '2025-11-24 20:57:14', b'0'); | |
| 291 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (28, 'MinIO 存储(示例)', 20, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"http://127.0.0.1:9000\",\"domain\":\"http://127.0.0.1:9000/yudao\",\"bucket\":\"yudao\",\"accessKey\":\"admin\",\"accessSecret\":\"password\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":true}', '1', '2024-11-09 17:43:10', '1', '2025-11-24 20:57:14', b'0'); | |
| 292 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (29, '本地存储(示例)', 10, 'mac/linux 使用 /,windows 使用 \\', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig\",\"basePath\":\"/Users/yunai/tmp/file\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2025-05-02 11:25:45', '1', '2025-11-24 20:57:14', b'0'); | |
| 293 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (30, 'SFTP 存储(示例)', 12, '', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig\",\"basePath\":\"/upload\",\"domain\":\"http://127.0.0.1:48080\",\"host\":\"127.0.0.1\",\"port\":2222,\"username\":\"foo\",\"password\":\"pass\"}', '1', '2025-05-02 16:34:10', '1', '2025-11-24 20:57:14', b'0'); | |
| 294 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (34, '七牛云存储【私有】(示例)', 20, '请换成你自己的密钥!!!', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3.cn-south-1.qiniucs.com\",\"domain\":\"http://t151glocd.hn-bkt.clouddn.com\",\"bucket\":\"ruoyi-vue-pro-private\",\"accessKey\":\"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS\",\"accessSecret\":\"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":false}', '1', '2025-08-17 21:22:00', '1', '2025-11-24 20:57:14', b'0'); | |
| 295 | +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (35, '1', 20, '1', b'0', '{\"@class\":\"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"http://www.baidu.com\",\"domain\":\"http://www.xxx.com\",\"bucket\":\"1\",\"accessKey\":\"2\",\"accessSecret\":\"3\",\"enablePathStyleAccess\":false,\"enablePublicAccess\":false}', '1', '2025-10-02 14:32:12', '1', '2025-11-24 20:57:14', b'0'); | |
| 295 | 296 | COMMIT; |
| 296 | 297 | |
| 297 | 298 | -- ---------------------------- |
| ... | ... | @@ -337,7 +338,7 @@ CREATE TABLE `infra_job` ( |
| 337 | 338 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 338 | 339 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 339 | 340 | PRIMARY KEY (`id`) USING BTREE |
| 340 | -) ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务表'; | |
| 341 | +) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务表'; | |
| 341 | 342 | |
| 342 | 343 | -- ---------------------------- |
| 343 | 344 | -- Records of infra_job |
| ... | ... | @@ -347,10 +348,10 @@ INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param` |
| 347 | 348 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (17, '支付订单同步 Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 14:36:26', '1', '2023-07-22 15:39:08', b'0'); |
| 348 | 349 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (18, '支付订单过期 Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 15:36:23', '1', '2023-07-22 15:39:54', b'0'); |
| 349 | 350 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (19, '退款订单的同步 Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-23 21:03:44', '1', '2023-07-23 21:09:00', b'0'); |
| 350 | -INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (21, '交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2023-09-26 19:23:30', b'0'); | |
| 351 | -INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, '交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2023-09-26 23:38:08', b'0'); | |
| 352 | -INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (23, '交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2023-09-27 11:03:10', b'0'); | |
| 353 | -INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (24, '佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2023-09-28 22:01:56', b'0'); | |
| 351 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (21, 'Mall 交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2025-10-02 11:08:34', b'0'); | |
| 352 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, 'Mall 交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2025-10-02 11:08:36', b'0'); | |
| 353 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (23, 'Mall 交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2025-10-02 11:08:38', b'0'); | |
| 354 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (24, 'Mall 佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2025-10-02 11:08:04', b'0'); | |
| 354 | 355 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (25, '访问日志清理 Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 10:59:41', '1', '2023-10-03 11:01:10', b'0'); |
| 355 | 356 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (26, '错误日志清理 Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:00:43', '1', '2023-10-03 11:01:12', b'0'); |
| 356 | 357 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (27, '任务日志清理 Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:01:33', '1', '2024-09-12 13:40:34', b'0'); |
| ... | ... | @@ -358,6 +359,9 @@ INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param` |
| 358 | 359 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (35, '转账订单的同步 Job', 2, 'payTransferSyncJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-05-10 17:35:54', '1', '2025-05-10 18:13:52', b'0'); |
| 359 | 360 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (36, 'IoT 设备离线检查 Job', 2, 'iotDeviceOfflineCheckJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-07-03 23:48:44', '\"1\"', '2025-07-03 23:48:47', b'0'); |
| 360 | 361 | INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (37, 'IoT OTA 升级推送 Job', 2, 'iotOtaUpgradeJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-07-03 23:49:07', '\"1\"', '2025-07-03 23:49:13', b'0'); |
| 362 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (38, 'Mall 拼团过期 Job', 2, 'combinationRecordExpireJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-10-02 11:07:11', '1', '2025-10-02 11:07:14', b'0'); | |
| 363 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (39, 'Mall 优惠券过期 Job', 2, 'couponExpireJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-10-02 11:07:34', '1', '2025-10-02 11:07:37', b'0'); | |
| 364 | +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (40, 'Mall 商品统计 Job', 2, 'productStatisticsJob', '', '0 0 0 * * ?', 0, 0, 0, '1', '2025-11-22 18:51:25', '1', '2025-11-22 18:56:21', b'0'); | |
| 361 | 365 | COMMIT; |
| 362 | 366 | |
| 363 | 367 | -- ---------------------------- |
| ... | ... | @@ -381,7 +385,7 @@ CREATE TABLE `infra_job_log` ( |
| 381 | 385 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 382 | 386 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 383 | 387 | PRIMARY KEY (`id`) USING BTREE |
| 384 | -) ENGINE = InnoDB AUTO_INCREMENT = 980 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务日志表'; | |
| 388 | +) ENGINE = InnoDB AUTO_INCREMENT = 987 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务日志表'; | |
| 385 | 389 | |
| 386 | 390 | -- ---------------------------- |
| 387 | 391 | -- Records of infra_job_log |
| ... | ... | @@ -409,7 +413,7 @@ CREATE TABLE `system_dept` ( |
| 409 | 413 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 410 | 414 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 411 | 415 | PRIMARY KEY (`id`) USING BTREE |
| 412 | -) ENGINE = InnoDB AUTO_INCREMENT = 115 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '部门表'; | |
| 416 | +) ENGINE = InnoDB AUTO_INCREMENT = 116 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '部门表'; | |
| 413 | 417 | |
| 414 | 418 | -- ---------------------------- |
| 415 | 419 | -- Records of system_dept |
| ... | ... | @@ -451,7 +455,7 @@ CREATE TABLE `system_dict_data` ( |
| 451 | 455 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 452 | 456 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 453 | 457 | PRIMARY KEY (`id`) USING BTREE |
| 454 | -) ENGINE = InnoDB AUTO_INCREMENT = 3031 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典数据表'; | |
| 458 | +) ENGINE = InnoDB AUTO_INCREMENT = 3035 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典数据表'; | |
| 455 | 459 | |
| 456 | 460 | -- ---------------------------- |
| 457 | 461 | -- Records of system_dict_data |
| ... | ... | @@ -883,7 +887,7 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st |
| 883 | 887 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1690, 5, '向量', '5', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:15', '1', '2025-03-03 12:28:15', b'0'); |
| 884 | 888 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1691, 6, '重排', '6', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:26', '1', '2025-03-03 12:28:26', b'0'); |
| 885 | 889 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1692, 14, 'MiniMax', 'MiniMax', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:04:51', '1', '2025-03-11 20:04:51', b'0'); |
| 886 | -INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1693, 15, '月之暗灭', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', b'0'); | |
| 890 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1693, 15, '月之暗面', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-11-24 07:17:39', b'0'); | |
| 887 | 891 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2002, 0, '直连设备', '0', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:54:58', '1', '2025-03-17 09:28:22', b'0'); |
| 888 | 892 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2003, 2, '网关设备', '2', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:55:08', '1', '2025-03-17 09:28:28', b'0'); |
| 889 | 893 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2004, 1, '网关子设备', '1', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:55:20', '1', '2025-03-17 09:28:31', b'0'); |
| ... | ... | @@ -1054,7 +1058,7 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st |
| 1054 | 1058 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2185, 2, '设备服务调用', '2', 'iot_rule_scene_action_type_enum', 0, 'primary', '', '', '1', '2025-03-28 15:27:25', '\"1\"', '2025-07-06 10:37:41', b'0'); |
| 1055 | 1059 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2186, 100, '告警触发', '100', 'iot_rule_scene_action_type_enum', 0, 'primary', '', '', '1', '2025-03-28 15:27:35', '\"1\"', '2025-07-06 10:37:50', b'0'); |
| 1056 | 1060 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3000, 16, '百川智能', 'BaiChuan', 'ai_platform', 0, '', '', '', '1', '2025-03-23 12:15:46', '1', '2025-03-23 12:15:46', b'0'); |
| 1057 | -INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3001, 50, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-05-02 12:01:15', b'0'); | |
| 1061 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3001, 40, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-09-04 23:25:12', b'0'); | |
| 1058 | 1062 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3002, 6, '支付宝余额', '6', 'brokerage_withdraw_type', 0, '', '', 'API 打款', '1', '2025-05-10 08:24:49', '1', '2025-05-10 08:24:49', b'0'); |
| 1059 | 1063 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3003, 1, 'Alink', 'Alink', 'iot_codec_type', 0, '', '', '阿里云 Alink', '1', '2025-06-12 22:56:06', '1', '2025-06-12 23:22:24', b'0'); |
| 1060 | 1064 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3004, 3, 'WARN', '3', 'iot_alert_level', 0, 'warning', '', '', '1', '2025-06-27 20:32:22', '1', '2025-06-27 20:34:31', b'0'); |
| ... | ... | @@ -1084,6 +1088,11 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st |
| 1084 | 1088 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3028, 2, 'Anthropic', 'Anthropic', 'ai_platform', 0, '', '', '', '1', '2025-08-21 22:54:24', '1', '2025-08-21 22:57:58', b'0'); |
| 1085 | 1089 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3029, 2, '谷歌 Gemini', 'Gemini', 'ai_platform', 0, '', '', '', '1', '2025-08-22 22:39:35', '1', '2025-08-22 22:44:49', b'0'); |
| 1086 | 1090 | INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3030, 1, '文件系统', 'filesystem', 'ai_mcp_client_name', 0, '', '', '', '1', '2025-08-28 13:58:43', '1', '2025-08-28 21:19:42', b'0'); |
| 1091 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3031, 41, 'Vben5.0 Ant Design 标准模版', '41', 'infra_codegen_front_type', 0, '', '', '', '1', '2025-09-04 23:26:07', '1', '2025-09-04 23:26:07', b'0'); | |
| 1092 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3032, 50, 'Vben5.0 Element Plus Schema 模版', '50', 'infra_codegen_front_type', 0, '', '', '', '1', '2025-09-04 23:26:38', '1', '2025-09-04 23:26:38', b'0'); | |
| 1093 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3033, 51, 'Vben5.0 Element Plus 标准模版', '51', 'infra_codegen_front_type', 0, '', '', '', '1', '2025-09-04 23:26:49', '1', '2025-09-04 23:26:49', b'0'); | |
| 1094 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3034, 1, 'ttt', 'tt', 'iot_ota_task_record_status', 0, 'success', '', NULL, '1', '2025-09-06 00:02:21', '1', '2025-09-06 00:02:31', b'0'); | |
| 1095 | +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3035, 40, '支付宝小程序', '40', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', b'0'); | |
| 1087 | 1096 | COMMIT; |
| 1088 | 1097 | |
| 1089 | 1098 | -- ---------------------------- |
| ... | ... | @@ -1243,7 +1252,7 @@ CREATE TABLE `system_login_log` ( |
| 1243 | 1252 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 1244 | 1253 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 1245 | 1254 | PRIMARY KEY (`id`) USING BTREE |
| 1246 | -) ENGINE = InnoDB AUTO_INCREMENT = 4021 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录'; | |
| 1255 | +) ENGINE = InnoDB AUTO_INCREMENT = 4066 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录'; | |
| 1247 | 1256 | |
| 1248 | 1257 | -- ---------------------------- |
| 1249 | 1258 | -- Records of system_login_log |
| ... | ... | @@ -1311,7 +1320,7 @@ CREATE TABLE `system_mail_log` ( |
| 1311 | 1320 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 1312 | 1321 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 1313 | 1322 | PRIMARY KEY (`id`) USING BTREE |
| 1314 | -) ENGINE = InnoDB AUTO_INCREMENT = 367 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件日志表'; | |
| 1323 | +) ENGINE = InnoDB AUTO_INCREMENT = 368 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件日志表'; | |
| 1315 | 1324 | |
| 1316 | 1325 | -- ---------------------------- |
| 1317 | 1326 | -- Records of system_mail_log |
| ... | ... | @@ -1376,7 +1385,7 @@ CREATE TABLE `system_menu` ( |
| 1376 | 1385 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 1377 | 1386 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 1378 | 1387 | PRIMARY KEY (`id`) USING BTREE |
| 1379 | -) ENGINE = InnoDB AUTO_INCREMENT = 5042 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表'; | |
| 1388 | +) ENGINE = InnoDB AUTO_INCREMENT = 5047 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表'; | |
| 1380 | 1389 | |
| 1381 | 1390 | -- ---------------------------- |
| 1382 | 1391 | -- Records of system_menu |
| ... | ... | @@ -1594,7 +1603,7 @@ INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_i |
| 1594 | 1603 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2010, '品牌创建', 'product:brand:create', 3, 2, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); |
| 1595 | 1604 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2011, '品牌更新', 'product:brand:update', 3, 3, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); |
| 1596 | 1605 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2012, '品牌删除', 'product:brand:delete', 3, 4, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); |
| 1597 | -INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '1', '2023-08-21 10:27:01', b'0'); | |
| 1606 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '1', '2025-10-08 10:36:52', b'0'); | |
| 1598 | 1607 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2015, '商品查询', 'product:spu:query', 3, 1, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); |
| 1599 | 1608 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2016, '商品创建', 'product:spu:create', 3, 2, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); |
| 1600 | 1609 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2017, '商品更新', 'product:spu:update', 3, 3, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); |
| ... | ... | @@ -2313,6 +2322,11 @@ INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_i |
| 2313 | 2322 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5039, 'OTA 升级任务创建', 'iot:ota-task:create', 3, 12, 5032, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-07-02 23:57:52', '1', '2025-07-02 23:57:52', b'0'); |
| 2314 | 2323 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5040, 'OTA 升级记录查询', 'iot:ota-task-record:query', 3, 21, 5032, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-07-02 23:58:30', '1', '2025-07-02 23:58:30', b'0'); |
| 2315 | 2324 | INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5041, 'OTA 升级记录取消', 'iot:ota-task-record:cancel', 3, 23, 5032, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-07-02 23:59:18', '1', '2025-07-02 23:59:18', b'0'); |
| 2325 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5042, '模版消息', '', 2, 5, 2084, 'message-template', 'ep:notebook', 'mp/messageTemplate/index', 'MpMessageTemplate', 0, b'1', b'1', b'1', '1', '2025-11-26 16:45:35', '1', '2025-11-26 18:44:52', b'0'); | |
| 2326 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5043, '查询模版消息', 'mp:message-template:query', 3, 1, 5042, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-11-26 17:00:15', '1', '2025-11-26 18:45:00', b'0'); | |
| 2327 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5044, '删除模版消息', 'mp:message-template:delete', 3, 2, 5042, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-11-26 17:00:31', '1', '2025-11-26 18:45:05', b'0'); | |
| 2328 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5045, '同步公众号模板', 'mp:message-template:sync', 3, 3, 5042, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-11-26 17:00:55', '1', '2025-11-26 17:00:55', b'0'); | |
| 2329 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5046, '给粉丝发送模版消息', 'mp:message-template:send', 3, 4, 5042, '', '', '', '', 0, b'1', b'1', b'1', '1', '2025-11-26 17:01:11', '1', '2025-11-26 17:01:11', b'0'); | |
| 2316 | 2330 | COMMIT; |
| 2317 | 2331 | |
| 2318 | 2332 | -- ---------------------------- |
| ... | ... | @@ -2434,7 +2448,7 @@ CREATE TABLE `system_oauth2_access_token` ( |
| 2434 | 2448 | PRIMARY KEY (`id`) USING BTREE, |
| 2435 | 2449 | INDEX `idx_access_token`(`access_token` ASC) USING BTREE, |
| 2436 | 2450 | INDEX `idx_refresh_token`(`refresh_token` ASC) USING BTREE |
| 2437 | -) ENGINE = InnoDB AUTO_INCREMENT = 20179 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌'; | |
| 2451 | +) ENGINE = InnoDB AUTO_INCREMENT = 39737 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌'; | |
| 2438 | 2452 | |
| 2439 | 2453 | -- ---------------------------- |
| 2440 | 2454 | -- Records of system_oauth2_access_token |
| ... | ... | @@ -2505,7 +2519,7 @@ BEGIN; |
| 2505 | 2519 | INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/20250502/sort2_1746189740718.png', '我是描述', 0, 1800, 2592000, '[\"https://www.iocoder.cn\",\"https://doc.iocoder.cn\"]', '[\"password\",\"authorization_code\",\"implicit\",\"refresh_token\",\"client_credentials\"]', '[\"user.read\",\"user.write\"]', '[]', '[\"user.read\",\"user.write\"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2025-08-21 10:04:50', b'0'); |
| 2506 | 2520 | INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.yudao.iocoder.cn/xx/20250502/ed07110a37464b5299f8bd7c67ad65c7_1746187077009.jpg', '啦啦啦啦', 0, 1800, 43200, '[\"https://www.iocoder.cn\"]', '[\"password\",\"authorization_code\",\"implicit\"]', '[\"user_info\",\"projects\"]', '[\"user_info\"]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2025-05-02 19:58:08', b'0'); |
| 2507 | 2521 | INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (41, 'yudao-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.yudao.iocoder.cn/it/20250502/sign_1746181948685.png', NULL, 0, 1800, 43200, '[\"http://127.0.0.1:18080\"]', '[\"authorization_code\",\"refresh_token\"]', '[\"user.read\",\"user.write\"]', '[]', '[]', '[]', NULL, '1', '2022-09-29 13:28:31', '1', '2025-05-02 18:32:30', b'0'); |
| 2508 | -INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (42, 'yudao-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.yudao.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '[\"http://127.0.0.1:18080\"]', '[\"password\",\"refresh_token\"]', '[\"user.read\",\"user.write\"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2025-05-04 16:00:46', b'0'); | |
| 2522 | +INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (42, 'yudao-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.yudao.iocoder.cn/20251025/images (3)_1761360515810.jpeg', NULL, 0, 1800, 43200, '[\"http://127.0.0.1:18080\"]', '[\"password\",\"refresh_token\"]', '[\"user.read\",\"user.write\"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2025-10-25 10:49:40', b'0'); | |
| 2509 | 2523 | COMMIT; |
| 2510 | 2524 | |
| 2511 | 2525 | -- ---------------------------- |
| ... | ... | @@ -2556,7 +2570,7 @@ CREATE TABLE `system_oauth2_refresh_token` ( |
| 2556 | 2570 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 2557 | 2571 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 2558 | 2572 | PRIMARY KEY (`id`) USING BTREE |
| 2559 | -) ENGINE = InnoDB AUTO_INCREMENT = 2201 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌'; | |
| 2573 | +) ENGINE = InnoDB AUTO_INCREMENT = 2243 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌'; | |
| 2560 | 2574 | |
| 2561 | 2575 | -- ---------------------------- |
| 2562 | 2576 | -- Records of system_oauth2_refresh_token |
| ... | ... | @@ -2590,7 +2604,7 @@ CREATE TABLE `system_operate_log` ( |
| 2590 | 2604 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 2591 | 2605 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 2592 | 2606 | PRIMARY KEY (`id`) USING BTREE |
| 2593 | -) ENGINE = InnoDB AUTO_INCREMENT = 9134 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志记录 V2 版本'; | |
| 2607 | +) ENGINE = InnoDB AUTO_INCREMENT = 9178 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志记录 V2 版本'; | |
| 2594 | 2608 | |
| 2595 | 2609 | -- ---------------------------- |
| 2596 | 2610 | -- Records of system_operate_log |
| ... | ... | @@ -2616,16 +2630,16 @@ CREATE TABLE `system_post` ( |
| 2616 | 2630 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 2617 | 2631 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 2618 | 2632 | PRIMARY KEY (`id`) USING BTREE |
| 2619 | -) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '岗位信息表'; | |
| 2633 | +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '岗位信息表'; | |
| 2620 | 2634 | |
| 2621 | 2635 | -- ---------------------------- |
| 2622 | 2636 | -- Records of system_post |
| 2623 | 2637 | -- ---------------------------- |
| 2624 | 2638 | BEGIN; |
| 2625 | -INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-06 17:03:48', '1', '2023-02-11 15:19:04', b'0', 1); | |
| 2626 | 2639 | INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 'se', '项目经理', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 09:18:20', b'0', 1); |
| 2627 | 2640 | INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 'user', '普通员工', 4, 0, '111222', 'admin', '2021-01-05 17:03:48', '1', '2025-03-24 21:32:40', b'0', 1); |
| 2628 | 2641 | INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 'HR', '人力资源', 5, 0, '`', '1', '2024-03-24 20:45:40', '1', '2025-03-29 19:08:10', b'0', 1); |
| 2642 | +INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (7, 'test', '测试', 10, 0, NULL, '1', '2025-09-02 08:45:57', '1', '2025-09-02 08:45:57', b'0', 1); | |
| 2629 | 2643 | COMMIT; |
| 2630 | 2644 | |
| 2631 | 2645 | -- ---------------------------- |
| ... | ... | @@ -2660,7 +2674,7 @@ INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_sco |
| 2660 | 2674 | INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 'CRM 管理员', 'crm_admin', 2, 1, '', 0, 1, 'CRM 专属角色', '1', '2024-02-24 10:51:13', '1', '2024-02-24 02:51:32', b'0', 1); |
| 2661 | 2675 | INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); |
| 2662 | 2676 | INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); |
| 2663 | -INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (155, '测试数据权限', 'test-dp', 3, 2, '[100,102,103,104,105,108]', 0, 2, '', '1', '2025-03-31 14:58:06', '1', '2025-04-17 23:07:44', b'0', 1); | |
| 2677 | +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (155, '测试数据权限', 'test-dp', 3, 2, '[112,100,102,103,104,105,107,108]', 0, 2, '', '1', '2025-03-31 14:58:06', '1', '2025-09-06 20:15:13', b'0', 1); | |
| 2664 | 2678 | COMMIT; |
| 2665 | 2679 | |
| 2666 | 2680 | -- ---------------------------- |
| ... | ... | @@ -2678,7 +2692,7 @@ CREATE TABLE `system_role_menu` ( |
| 2678 | 2692 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 2679 | 2693 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 2680 | 2694 | PRIMARY KEY (`id`) USING BTREE |
| 2681 | -) ENGINE = InnoDB AUTO_INCREMENT = 6139 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色和菜单关联表'; | |
| 2695 | +) ENGINE = InnoDB AUTO_INCREMENT = 6293 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色和菜单关联表'; | |
| 2682 | 2696 | |
| 2683 | 2697 | -- ---------------------------- |
| 2684 | 2698 | -- Records of system_role_menu |
| ... | ... | @@ -3344,6 +3358,160 @@ INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_t |
| 3344 | 3358 | INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6135, 155, 4017, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', b'0', 1); |
| 3345 | 3359 | INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6136, 155, 4018, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', b'0', 1); |
| 3346 | 3360 | INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6137, 155, 4031, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', b'0', 1); |
| 3361 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6139, 109, 1117, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3362 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6140, 109, 1126, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3363 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6141, 109, 1127, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3364 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6142, 109, 1128, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3365 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6143, 109, 1129, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3366 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6144, 109, 1130, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3367 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6145, 109, 1132, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3368 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6146, 109, 1133, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3369 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6147, 109, 1134, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3370 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6148, 109, 1135, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3371 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6149, 109, 1136, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3372 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6150, 109, 1137, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3373 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6151, 109, 2161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3374 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6152, 109, 1150, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3375 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6153, 109, 1161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3376 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6154, 109, 1162, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3377 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6155, 109, 1166, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3378 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6156, 109, 1173, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3379 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6157, 109, 1174, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3380 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6158, 109, 1178, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3381 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6159, 109, 2745, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3382 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6160, 109, 2746, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3383 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6161, 109, 2747, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3384 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6162, 109, 2748, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3385 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6163, 109, 2301, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3386 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6164, 109, 2302, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3387 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6165, 109, 5011, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3388 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6166, 109, 5012, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3389 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6167, 109, 2549, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3390 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6168, 109, 2550, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3391 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6169, 109, 2551, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3392 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6170, 109, 2552, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3393 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6171, 109, 2553, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3394 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6172, 109, 2554, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3395 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6173, 109, 2555, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3396 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6174, 109, 2556, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3397 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6175, 109, 2557, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3398 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6176, 109, 2558, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3399 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6177, 109, 2559, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 121); | |
| 3400 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6178, 111, 1117, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3401 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6179, 111, 1126, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3402 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6180, 111, 1127, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3403 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6181, 111, 1128, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3404 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6182, 111, 1129, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3405 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6183, 111, 1130, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3406 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6184, 111, 1132, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3407 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6185, 111, 1133, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3408 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6186, 111, 1134, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3409 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6187, 111, 1135, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3410 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6188, 111, 1136, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3411 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6189, 111, 1137, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3412 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6190, 111, 2161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3413 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6191, 111, 1150, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3414 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6192, 111, 1161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3415 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6193, 111, 1162, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3416 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6194, 111, 1166, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3417 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6195, 111, 1173, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3418 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6196, 111, 1174, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3419 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6197, 111, 1178, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3420 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6198, 111, 2745, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3421 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6199, 111, 2746, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3422 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6200, 111, 2747, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3423 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6201, 111, 2748, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3424 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6202, 111, 2301, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3425 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6203, 111, 2302, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3426 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6204, 111, 5011, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3427 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6205, 111, 5012, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3428 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6206, 111, 2549, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3429 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6207, 111, 2550, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3430 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6208, 111, 2551, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3431 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6209, 111, 2552, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3432 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6210, 111, 2553, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3433 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6211, 111, 2554, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3434 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6212, 111, 2555, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3435 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6213, 111, 2556, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3436 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6214, 111, 2557, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3437 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6215, 111, 2558, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3438 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6216, 111, 2559, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', b'0', 122); | |
| 3439 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6217, 109, 2756, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3440 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6218, 109, 2757, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3441 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6219, 109, 2262, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3442 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6220, 109, 2275, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3443 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6221, 109, 2276, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3444 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6222, 109, 2277, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3445 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6223, 109, 2281, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3446 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6224, 109, 2282, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3447 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6225, 109, 2283, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3448 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6226, 109, 2284, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3449 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6227, 109, 2285, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3450 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6228, 109, 2287, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3451 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6229, 109, 2288, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3452 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6230, 109, 2293, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3453 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6231, 109, 2294, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3454 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6232, 109, 2297, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3455 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6233, 109, 2300, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3456 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6234, 109, 2317, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3457 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6235, 109, 2318, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3458 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6236, 109, 2319, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3459 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6237, 109, 2320, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3460 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6238, 109, 2321, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3461 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6239, 109, 2322, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3462 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6240, 109, 2323, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3463 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6241, 109, 2324, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3464 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6242, 109, 2325, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3465 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6243, 109, 2326, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3466 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6244, 109, 2327, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3467 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6245, 109, 2328, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3468 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6246, 109, 2329, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3469 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6247, 109, 2330, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3470 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6248, 109, 2331, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3471 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6249, 109, 2332, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3472 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6250, 109, 2333, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3473 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6251, 109, 2334, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3474 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6252, 109, 2335, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3475 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6253, 109, 2363, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3476 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6254, 109, 2364, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 121); | |
| 3477 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6255, 111, 2756, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3478 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6256, 111, 2757, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3479 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6257, 111, 2262, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3480 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6258, 111, 2275, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3481 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6259, 111, 2276, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3482 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6260, 111, 2277, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3483 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6261, 111, 2281, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3484 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6262, 111, 2282, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3485 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6263, 111, 2283, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3486 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6264, 111, 2284, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3487 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6265, 111, 2285, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3488 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6266, 111, 2287, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3489 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6267, 111, 2288, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3490 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6268, 111, 2293, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3491 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6269, 111, 2294, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3492 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6270, 111, 2297, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3493 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6271, 111, 2300, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3494 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6272, 111, 2317, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3495 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6273, 111, 2318, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3496 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6274, 111, 2319, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3497 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6275, 111, 2320, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3498 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6276, 111, 2321, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3499 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6277, 111, 2322, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3500 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6278, 111, 2323, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3501 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6279, 111, 2324, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3502 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6280, 111, 2325, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3503 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6281, 111, 2326, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3504 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6282, 111, 2327, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3505 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6283, 111, 2328, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3506 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6284, 111, 2329, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3507 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6285, 111, 2330, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3508 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6286, 111, 2331, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3509 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6287, 111, 2332, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3510 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6288, 111, 2333, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3511 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6289, 111, 2334, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3512 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6290, 111, 2335, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3513 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6291, 111, 2363, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3514 | +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6292, 111, 2364, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', b'0', 122); | |
| 3347 | 3515 | COMMIT; |
| 3348 | 3516 | |
| 3349 | 3517 | -- ---------------------------- |
| ... | ... | @@ -3398,7 +3566,7 @@ CREATE TABLE `system_sms_code` ( |
| 3398 | 3566 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 3399 | 3567 | PRIMARY KEY (`id`) USING BTREE, |
| 3400 | 3568 | INDEX `idx_mobile`(`mobile` ASC) USING BTREE COMMENT '手机号' |
| 3401 | -) ENGINE = InnoDB AUTO_INCREMENT = 681 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '手机验证码'; | |
| 3569 | +) ENGINE = InnoDB AUTO_INCREMENT = 682 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '手机验证码'; | |
| 3402 | 3570 | |
| 3403 | 3571 | -- ---------------------------- |
| 3404 | 3572 | -- Records of system_sms_code |
| ... | ... | @@ -3439,7 +3607,7 @@ CREATE TABLE `system_sms_log` ( |
| 3439 | 3607 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 3440 | 3608 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 3441 | 3609 | PRIMARY KEY (`id`) USING BTREE |
| 3442 | -) ENGINE = InnoDB AUTO_INCREMENT = 1491 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信日志'; | |
| 3610 | +) ENGINE = InnoDB AUTO_INCREMENT = 1528 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信日志'; | |
| 3443 | 3611 | |
| 3444 | 3612 | -- ---------------------------- |
| 3445 | 3613 | -- Records of system_sms_log |
| ... | ... | @@ -3502,7 +3670,8 @@ CREATE TABLE `system_social_client` ( |
| 3502 | 3670 | `social_type` tinyint NOT NULL COMMENT '社交平台的类型', |
| 3503 | 3671 | `user_type` tinyint NOT NULL COMMENT '用户类型', |
| 3504 | 3672 | `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', |
| 3505 | - `client_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端密钥', | |
| 3673 | + `client_secret` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端密钥', | |
| 3674 | + `public_key` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT 'publicKey公钥', | |
| 3506 | 3675 | `agent_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '代理编号', |
| 3507 | 3676 | `status` tinyint NOT NULL COMMENT '状态', |
| 3508 | 3677 | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', |
| ... | ... | @@ -3512,7 +3681,7 @@ CREATE TABLE `system_social_client` ( |
| 3512 | 3681 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 3513 | 3682 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 3514 | 3683 | PRIMARY KEY (`id`) USING BTREE |
| 3515 | -) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交客户端表'; | |
| 3684 | +) ENGINE = InnoDB AUTO_INCREMENT = 46 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交客户端表'; | |
| 3516 | 3685 | |
| 3517 | 3686 | -- ---------------------------- |
| 3518 | 3687 | -- Records of system_social_client |
| ... | ... | @@ -3523,6 +3692,7 @@ INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `c |
| 3523 | 3692 | INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, '微信公众号', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', '2023-10-18 16:07:46', '1', '2023-12-20 21:28:23', b'1', 1); |
| 3524 | 3693 | INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (43, '微信小程序', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', '2023-10-19 13:37:41', '1', '2023-12-20 21:28:25', b'1', 1); |
| 3525 | 3694 | INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (44, '1', 10, 1, '2', '3', NULL, 0, '1', '2025-04-06 20:36:28', '1', '2025-04-06 20:43:12', b'1', 1); |
| 3695 | +INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (45, '1', 10, 1, '2', '3', NULL, 1, '1', '2025-09-06 20:26:15', '1', '2025-09-06 20:27:55', b'1', 1); | |
| 3526 | 3696 | COMMIT; |
| 3527 | 3697 | |
| 3528 | 3698 | -- ---------------------------- |
| ... | ... | @@ -3609,7 +3779,7 @@ CREATE TABLE `system_tenant` ( |
| 3609 | 3779 | BEGIN; |
| 3610 | 3780 | INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `websites`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'www.iocoder.cn,127.0.0.1:3000,wxc4598c446f8a9cb3', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2025-08-19 05:18:41', b'0'); |
| 3611 | 3781 | INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `websites`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'zsxq.iocoder.cn,123321', 111, '2026-07-10 00:00:00', 30, '1', '2022-02-22 00:56:14', '1', '2025-08-19 21:19:29', b'0'); |
| 3612 | -INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `websites`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn', 111, '2022-04-29 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2025-08-24 14:46:15', b'0'); | |
| 3782 | +INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `websites`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn,222,333', 111, '2022-04-29 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2025-09-06 20:44:42', b'0'); | |
| 3613 | 3783 | COMMIT; |
| 3614 | 3784 | |
| 3615 | 3785 | -- ---------------------------- |
| ... | ... | @@ -3634,7 +3804,7 @@ CREATE TABLE `system_tenant_package` ( |
| 3634 | 3804 | -- Records of system_tenant_package |
| 3635 | 3805 | -- ---------------------------- |
| 3636 | 3806 | BEGIN; |
| 3637 | -INSERT INTO `system_tenant_package` (`id`, `name`, `status`, `remark`, `menu_ids`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,114,1138,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,2721,1185,2722,1186,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,2729,1193,1194,2730,1195,2731,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2739,2483,2484,2740,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', '2022-02-22 00:54:00', '1', '2025-05-14 14:06:34', b'0'); | |
| 3807 | +INSERT INTO `system_tenant_package` (`id`, `name`, `status`, `remark`, `menu_ids`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1117,1118,1119,1120,100,101,102,1126,103,1127,1128,1129,106,1130,107,1132,1133,110,1134,111,1135,112,1136,113,1137,2161,114,1138,1139,115,1140,116,1141,1142,1143,1150,1161,1162,1166,1173,1174,2713,2714,1178,2715,2716,2717,2718,2720,2721,1185,2722,1186,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,1192,2728,2729,1193,1194,2730,1195,2731,2732,1197,2733,1198,2734,1199,2735,1200,1201,1202,2739,2740,1207,1208,1209,2745,1210,2746,1211,2747,1212,2748,1213,1215,1216,1217,1218,1219,1220,2756,1221,2757,1222,1224,1225,1226,1227,1228,1229,1237,1238,2262,1239,1240,1241,1242,1243,2275,2276,2277,1255,1256,1257,2281,1258,2282,1259,2283,1260,2284,2285,2287,2288,2293,2294,2297,2300,2301,2302,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2363,2364,5011,5012,2472,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2497,2525,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,2549,1014,2550,1015,2551,1016,2552,1017,2553,1018,2554,1019,2555,1020,2556,2557,2558,2559]', '1', '2022-02-22 00:54:00', '1', '2025-09-06 20:52:25', b'0'); | |
| 3638 | 3808 | COMMIT; |
| 3639 | 3809 | |
| 3640 | 3810 | -- ---------------------------- |
| ... | ... | @@ -3684,7 +3854,7 @@ CREATE TABLE `system_user_role` ( |
| 3684 | 3854 | `deleted` bit(1) NULL DEFAULT b'0' COMMENT '是否删除', |
| 3685 | 3855 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 3686 | 3856 | PRIMARY KEY (`id`) USING BTREE |
| 3687 | -) ENGINE = InnoDB AUTO_INCREMENT = 50 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户和角色关联表'; | |
| 3857 | +) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户和角色关联表'; | |
| 3688 | 3858 | |
| 3689 | 3859 | -- ---------------------------- |
| 3690 | 3860 | -- Records of system_user_role |
| ... | ... | @@ -3706,6 +3876,7 @@ INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_t |
| 3706 | 3876 | INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (47, 104, 2, '1', '2025-01-04 10:40:33', '1', '2025-01-04 10:40:33', b'0', 1); |
| 3707 | 3877 | INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (48, 100, 155, '1', '2025-04-04 10:41:14', '1', '2025-04-04 10:41:14', b'0', 1); |
| 3708 | 3878 | INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (49, 142, 1, '1', '2025-07-23 09:11:42', '1', '2025-07-23 09:11:42', b'0', 1); |
| 3879 | +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (50, 142, 2, '1', '2025-10-07 20:50:37', '1', '2025-10-07 20:50:37', b'0', 1); | |
| 3709 | 3880 | COMMIT; |
| 3710 | 3881 | |
| 3711 | 3882 | -- ---------------------------- |
| ... | ... | @@ -3740,7 +3911,7 @@ CREATE TABLE `system_users` ( |
| 3740 | 3911 | -- Records of system_users |
| 3741 | 3912 | -- ---------------------------- |
| 3742 | 3913 | BEGIN; |
| 3743 | -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$04$KljJDa/LK7QfDm0lF5OhuePhlPfjRH3tB2Wu351Uidz.oQGJXevPi', '芋道源码', '管理员', 103, '[1,2]', '11aoteman@126.com', '18818260272', 2, 'http://test.yudao.iocoder.cn/user/avatar/20250709/blob_1752042302026.jpg', 0, '0:0:0:0:0:0:0:1', '2025-08-30 19:57:52', 'admin', '2021-01-05 17:03:47', NULL, '2025-08-30 19:57:52', b'0', 1); | |
| 3914 | +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$04$KljJDa/LK7QfDm0lF5OhuePhlPfjRH3tB2Wu351Uidz.oQGJXevPi', '芋道源码', '管理员', 103, '[1,2]', '11aoteman@126.com', '18818260272', 2, 'http://test.yudao.iocoder.cn/20250921/avatar_1758423875594.png', 0, '0:0:0:0:0:0:0:1', '2025-11-22 18:50:21', 'admin', '2021-01-05 17:03:47', NULL, '2025-11-22 18:50:21', b'0', 1); | |
| 3744 | 3915 | 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$04$h.aaPKgO.odHepnk5PCsWeEwKdojFWdTItxGKfx1r0e1CSeBzsTJ6', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2025-04-08 09:36:40', '', '2021-01-07 09:07:17', NULL, '2025-04-21 14:23:08', b'0', 1); |
| 3745 | 3916 | 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$04$fUBSmjKCPYAUmnMzOb6qE.eZCGPhHi1JmAKclODbfS/O7fHOl2bH6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, NULL, 0, '0:0:0:0:0:0:0:1', '2024-08-11 17:48:12', '', '2021-01-13 23:50:35', '1', '2025-07-09 23:41:58', b'0', 1); |
| 3746 | 3917 | 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$04$BrwaYn303hjA/6TnXqdGoOLhyHOAA0bVrAFu6.1dJKycqKUnIoRz2', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2025-03-28 20:01:16', '', '2021-01-21 02:13:53', NULL, '2025-04-21 14:23:08', b'0', 1); |
| ... | ... | @@ -3754,10 +3925,10 @@ INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, |
| 3754 | 3925 | 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, '[5]', '', '15601691236', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-03-24 22:21:05', '1', '2022-03-19 21:50:58', NULL, '2025-04-21 14:23:08', b'0', 1); |
| 3755 | 3926 | 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$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '阿呆', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, NULL, 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2025-04-21 14:23:08', b'0', 1); |
| 3756 | 3927 | 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 (117, 'admin123', '$2a$04$sEtimsHu9YCkYY4/oqElHem2Ijc9ld20eYO6lN.g/21NfLUTDLB9W', '测试号02', '1111', 100, '[2]', '', '15601691234', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-10-02 10:16:20', '1', '2022-07-09 17:40:26', '1', '2025-05-14 09:56:04', b'0', 1); |
| 3757 | -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 (118, 'goudan', '$2a$04$jth0yOj8cSJq84D6vrzusOHDwW/LpBfgBnQ6bfFlD8zNZfM632Ta2', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-03-17 09:10:27', '1', '2022-07-09 17:44:43', '1', '2025-07-09 23:52:36', b'0', 1); | |
| 3928 | +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 (118, 'goudan', '$2a$04$3suGZjnA6rM5bErf38u1felbgqbsPHGdRG3l9NkxPCEt2ah9Y6aJi', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2025-11-23 15:28:25', '1', '2022-07-09 17:44:43', NULL, '2025-11-23 15:28:25', b'0', 1); | |
| 3758 | 3929 | 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 (139, 'wwbwwb', '$2a$04$aOHoFbQU6zfBk/1Z9raF/ugTdhjNdx7culC1HhO0zvoczAnahCiMq', '小秃头', NULL, NULL, NULL, '', '', 0, NULL, 0, '0:0:0:0:0:0:0:1', '2024-09-10 21:03:58', NULL, '2024-09-10 21:03:58', NULL, '2025-04-21 14:23:08', b'0', 1); |
| 3759 | 3930 | 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 (141, 'admin1', '$2a$04$oj6F6d7HrZ70kYVD3TNzEu.m3TPUzajOVuC66zdKna8KRerK1FmVa', '新用户', NULL, NULL, NULL, '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2025-04-08 13:09:07', '1', '2025-04-08 13:09:07', '1', '2025-05-14 19:11:48', b'0', 1); |
| 3760 | -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 (142, 'test01', '$2a$04$vxfBq9d3vVIfUbo6Dw7Mt.KOJfvG7RJ.l2/B3Kw09NtNyAZ1vbB1m', 'test01', '', NULL, '[]', '', '', 1, '', 0, '0:0:0:0:0:0:0:1', '2025-07-29 19:47:17', '1', '2025-07-09 21:07:10', NULL, '2025-07-29 19:47:17', b'0', 1); | |
| 3931 | +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 (142, 'test01', '$2a$04$IaR0fGYtalIDURMMdcaD2.4JDWZ15ueQZwap9oPUuxkwSbL66vIRG', 'test01', '', NULL, '[]', '', '19021719925', 1, '', 0, '0:0:0:0:0:0:0:1', '2025-07-29 19:47:17', '1', '2025-07-09 21:07:10', '1', '2025-11-25 19:49:08', b'0', 1); | |
| 3761 | 3932 | COMMIT; |
| 3762 | 3933 | |
| 3763 | 3934 | -- ---------------------------- |
| ... | ... | @@ -3802,7 +3973,7 @@ CREATE TABLE `yudao_demo02_category` ( |
| 3802 | 3973 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 3803 | 3974 | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', |
| 3804 | 3975 | PRIMARY KEY (`id`) USING BTREE |
| 3805 | -) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '示例分类表'; | |
| 3976 | +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '示例分类表'; | |
| 3806 | 3977 | |
| 3807 | 3978 | -- ---------------------------- |
| 3808 | 3979 | -- Records of yudao_demo02_category |
| ... | ... | @@ -3814,6 +3985,7 @@ INSERT INTO `yudao_demo02_category` (`id`, `name`, `parent_id`, `creator`, `crea |
| 3814 | 3985 | INSERT INTO `yudao_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, '小番茄', 2, '1', '2023-11-16 20:24:39', '1', '2023-11-16 20:24:39', b'0', 1); |
| 3815 | 3986 | INSERT INTO `yudao_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, '大番茄', 2, '1', '2023-11-16 20:24:46', '1', '2023-11-16 20:24:46', b'0', 1); |
| 3816 | 3987 | INSERT INTO `yudao_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, '11', 3, '1', '2023-11-24 19:29:34', '1', '2023-11-24 19:29:34', b'0', 1); |
| 3988 | +INSERT INTO `yudao_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (7, '1', 0, '1', '2025-10-01 09:19:20', '1', '2025-10-01 09:19:20', b'0', 1); | |
| 3817 | 3989 | COMMIT; |
| 3818 | 3990 | |
| 3819 | 3991 | -- ---------------------------- | ... | ... |
sql/opengauss/ruoyi-vue-pro.sql
| ... | ... | @@ -1177,7 +1177,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1177 | 1177 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1690, 5, '向量', '5', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:15', '1', '2025-03-03 12:28:15', '0'); |
| 1178 | 1178 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1691, 6, '重排', '6', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:26', '1', '2025-03-03 12:28:26', '0'); |
| 1179 | 1179 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1692, 14, 'MiniMax', 'MiniMax', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:04:51', '1', '2025-03-11 20:04:51', '0'); |
| 1180 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗灭', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1180 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗面', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1181 | 1181 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2000, 0, '标准数据格式(JSON)', '0', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:26', '1', '2025-03-17 09:28:16', '0'); |
| 1182 | 1182 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2001, 1, '透传/自定义', '1', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:37', '1', '2025-03-17 09:28:19', '0'); |
| 1183 | 1183 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2002, 0, '直连设备', '0', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:54:58', '1', '2025-03-17 09:28:22', '0'); |
| ... | ... | @@ -1354,6 +1354,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1354 | 1354 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3000, 16, '百川智能', 'BaiChuan', 'ai_platform', 0, '', '', '', '1', '2025-03-23 12:15:46', '1', '2025-03-23 12:15:46', '0'); |
| 1355 | 1355 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3001, 50, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-05-02 12:01:15', '0'); |
| 1356 | 1356 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3002, 6, '支付宝余额', '6', 'brokerage_withdraw_type', 0, '', '', 'API 打款', '1', '2025-05-10 08:24:49', '1', '2025-05-10 08:24:49', '0'); |
| 1357 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3035, 40, '支付宝小程序', '40', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', '0'); | |
| 1357 | 1358 | COMMIT; |
| 1358 | 1359 | -- @formatter:on |
| 1359 | 1360 | |
| ... | ... | @@ -4461,7 +4462,8 @@ CREATE TABLE system_social_client |
| 4461 | 4462 | social_type int2 NOT NULL, |
| 4462 | 4463 | user_type int2 NOT NULL, |
| 4463 | 4464 | client_id varchar(255) NOT NULL, |
| 4464 | - client_secret varchar(255) NOT NULL, | |
| 4465 | + client_secret varchar(2048) NOT NULL, | |
| 4466 | + public_key varchar(2048) NULL DEFAULT NULL, | |
| 4465 | 4467 | agent_id varchar(255) NULL DEFAULT NULL, |
| 4466 | 4468 | status int2 NOT NULL, |
| 4467 | 4469 | creator varchar(64) NULL DEFAULT '', |
| ... | ... | @@ -4481,6 +4483,7 @@ COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; |
| 4481 | 4483 | COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; |
| 4482 | 4484 | COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; |
| 4483 | 4485 | COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; |
| 4486 | +COMMENT ON COLUMN system_social_client.public_key IS 'publicKey公钥'; | |
| 4484 | 4487 | COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; |
| 4485 | 4488 | COMMENT ON COLUMN system_social_client.status IS '状态'; |
| 4486 | 4489 | COMMENT ON COLUMN system_social_client.creator IS '创建者'; | ... | ... |
sql/oracle/ruoyi-vue-pro.sql
| ... | ... | @@ -1129,7 +1129,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1129 | 1129 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1690, 5, '向量', '5', 'ai_model_type', 0, '', '', '', '1', to_date('2025-03-03 12:28:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-03 12:28:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1130 | 1130 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1691, 6, '重排', '6', 'ai_model_type', 0, '', '', '', '1', to_date('2025-03-03 12:28:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-03 12:28:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1131 | 1131 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1692, 14, 'MiniMax', 'MiniMax', 'ai_platform', 0, '', '', '', '1', to_date('2025-03-11 20:04:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-11 20:04:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1132 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗灭', 'Moonshot', 'ai_platform', 0, '', '', '', '1', to_date('2025-03-11 20:05:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-11 20:05:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); | |
| 1132 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗面', 'Moonshot', 'ai_platform', 0, '', '', '', '1', to_date('2025-03-11 20:05:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-11 20:05:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); | |
| 1133 | 1133 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2000, 0, '标准数据格式(JSON)', '0', 'iot_data_format', 0, 'default', '', '', '1', to_date('2024-08-10 11:53:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-17 09:28:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1134 | 1134 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2001, 1, '透传/自定义', '1', 'iot_data_format', 0, 'default', '', '', '1', to_date('2024-08-10 11:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-17 09:28:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1135 | 1135 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2002, 0, '直连设备', '0', 'iot_product_device_type', 0, 'default', '', '', '1', to_date('2024-08-10 11:54:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-17 09:28:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| ... | ... | @@ -1306,6 +1306,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1306 | 1306 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3000, 16, '百川智能', 'BaiChuan', 'ai_platform', 0, '', '', '', '1', to_date('2025-03-23 12:15:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-03-23 12:15:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1307 | 1307 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3001, 50, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', to_date('2025-04-23 21:47:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-05-02 12:01:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1308 | 1308 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3002, 6, '支付宝余额', '6', 'brokerage_withdraw_type', 0, '', '', 'API 打款', '1', to_date('2025-05-10 08:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2025-05-10 08:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); |
| 1309 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3035, 40, '支付宝小程序', '40', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:05:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:07:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); | |
| 1309 | 1310 | COMMIT; |
| 1310 | 1311 | -- @formatter:on |
| 1311 | 1312 | |
| ... | ... | @@ -4355,7 +4356,8 @@ CREATE TABLE system_social_client |
| 4355 | 4356 | social_type smallint NOT NULL, |
| 4356 | 4357 | user_type smallint NOT NULL, |
| 4357 | 4358 | client_id varchar2(255) NULL, |
| 4358 | - client_secret varchar2(255) NULL, | |
| 4359 | + client_secret varchar2(2048) NULL, | |
| 4360 | + public_key varchar2(2048) DEFAULT NULL NULL, | |
| 4359 | 4361 | agent_id varchar2(255) DEFAULT NULL NULL, |
| 4360 | 4362 | status smallint NOT NULL, |
| 4361 | 4363 | creator varchar2(64) DEFAULT '' NULL, |
| ... | ... | @@ -4375,6 +4377,7 @@ COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; |
| 4375 | 4377 | COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; |
| 4376 | 4378 | COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; |
| 4377 | 4379 | COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; |
| 4380 | +COMMENT ON COLUMN system_social_client.public_key IS 'publicKey公钥'; | |
| 4378 | 4381 | COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; |
| 4379 | 4382 | COMMENT ON COLUMN system_social_client.status IS '状态'; |
| 4380 | 4383 | COMMENT ON COLUMN system_social_client.creator IS '创建者'; | ... | ... |
sql/postgresql/ruoyi-vue-pro.sql
| ... | ... | @@ -5,7 +5,7 @@ |
| 5 | 5 | |
| 6 | 6 | Target Server Type : PostgreSQL |
| 7 | 7 | |
| 8 | - Date: 2025-05-22 21:03:59 | |
| 8 | + Date: 2025-12-27 19:04:22 | |
| 9 | 9 | */ |
| 10 | 10 | |
| 11 | 11 | |
| ... | ... | @@ -31,37 +31,35 @@ INSERT INTO dual VALUES (1); |
| 31 | 31 | -- Table structure for infra_api_access_log |
| 32 | 32 | -- ---------------------------- |
| 33 | 33 | DROP TABLE IF EXISTS infra_api_access_log; |
| 34 | -CREATE TABLE infra_api_access_log | |
| 35 | -( | |
| 36 | - id int8 NOT NULL, | |
| 37 | - trace_id varchar(64) NOT NULL DEFAULT '', | |
| 38 | - user_id int8 NOT NULL DEFAULT 0, | |
| 39 | - user_type int2 NOT NULL DEFAULT 0, | |
| 40 | - application_name varchar(50) NOT NULL, | |
| 41 | - request_method varchar(16) NOT NULL DEFAULT '', | |
| 42 | - request_url varchar(255) NOT NULL DEFAULT '', | |
| 43 | - request_params text NULL, | |
| 44 | - response_body text NULL, | |
| 45 | - user_ip varchar(50) NOT NULL, | |
| 46 | - user_agent varchar(512) NOT NULL, | |
| 47 | - operate_module varchar(50) NULL DEFAULT NULL, | |
| 48 | - operate_name varchar(50) NULL DEFAULT NULL, | |
| 49 | - operate_type int2 NULL DEFAULT 0, | |
| 50 | - begin_time timestamp NOT NULL, | |
| 51 | - end_time timestamp NOT NULL, | |
| 52 | - duration int4 NOT NULL, | |
| 53 | - result_code int4 NOT NULL DEFAULT 0, | |
| 54 | - result_msg varchar(512) NULL DEFAULT '', | |
| 55 | - creator varchar(64) NULL DEFAULT '', | |
| 56 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 57 | - updater varchar(64) NULL DEFAULT '', | |
| 58 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 59 | - deleted int2 NOT NULL DEFAULT 0, | |
| 60 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 34 | +CREATE TABLE infra_api_access_log ( | |
| 35 | + id int8 NOT NULL, | |
| 36 | + trace_id varchar(64) NOT NULL DEFAULT '', | |
| 37 | + user_id int8 NOT NULL DEFAULT 0, | |
| 38 | + user_type int2 NOT NULL DEFAULT 0, | |
| 39 | + application_name varchar(50) NOT NULL, | |
| 40 | + request_method varchar(16) NOT NULL DEFAULT '', | |
| 41 | + request_url varchar(255) NOT NULL DEFAULT '', | |
| 42 | + request_params text NULL, | |
| 43 | + response_body text NULL, | |
| 44 | + user_ip varchar(50) NOT NULL, | |
| 45 | + user_agent varchar(512) NOT NULL, | |
| 46 | + operate_module varchar(50) NULL DEFAULT NULL, | |
| 47 | + operate_name varchar(50) NULL DEFAULT NULL, | |
| 48 | + operate_type int2 NULL DEFAULT 0, | |
| 49 | + begin_time timestamp NOT NULL, | |
| 50 | + end_time timestamp NOT NULL, | |
| 51 | + duration int4 NOT NULL, | |
| 52 | + result_code int4 NOT NULL DEFAULT 0, | |
| 53 | + result_msg varchar(512) NULL DEFAULT '', | |
| 54 | + creator varchar(64) NULL DEFAULT '', | |
| 55 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 56 | + updater varchar(64) NULL DEFAULT '', | |
| 57 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 58 | + deleted int2 NOT NULL DEFAULT 0, | |
| 59 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 61 | 60 | ); |
| 62 | 61 | |
| 63 | -ALTER TABLE infra_api_access_log | |
| 64 | - ADD CONSTRAINT pk_infra_api_access_log PRIMARY KEY (id); | |
| 62 | +ALTER TABLE infra_api_access_log ADD CONSTRAINT pk_infra_api_access_log PRIMARY KEY (id); | |
| 65 | 63 | |
| 66 | 64 | CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create_time); |
| 67 | 65 | |
| ... | ... | @@ -100,40 +98,38 @@ CREATE SEQUENCE infra_api_access_log_seq |
| 100 | 98 | -- Table structure for infra_api_error_log |
| 101 | 99 | -- ---------------------------- |
| 102 | 100 | DROP TABLE IF EXISTS infra_api_error_log; |
| 103 | -CREATE TABLE infra_api_error_log | |
| 104 | -( | |
| 105 | - id int8 NOT NULL, | |
| 106 | - trace_id varchar(64) NOT NULL, | |
| 107 | - user_id int8 NOT NULL DEFAULT 0, | |
| 108 | - user_type int2 NOT NULL DEFAULT 0, | |
| 109 | - application_name varchar(50) NOT NULL, | |
| 110 | - request_method varchar(16) NOT NULL, | |
| 111 | - request_url varchar(255) NOT NULL, | |
| 112 | - request_params varchar(8000) NOT NULL, | |
| 113 | - user_ip varchar(50) NOT NULL, | |
| 114 | - user_agent varchar(512) NOT NULL, | |
| 115 | - exception_time timestamp NOT NULL, | |
| 116 | - exception_name varchar(128) NOT NULL DEFAULT '', | |
| 117 | - exception_message text NOT NULL, | |
| 118 | - exception_root_cause_message text NOT NULL, | |
| 119 | - exception_stack_trace text NOT NULL, | |
| 120 | - exception_class_name varchar(512) NOT NULL, | |
| 121 | - exception_file_name varchar(512) NOT NULL, | |
| 122 | - exception_method_name varchar(512) NOT NULL, | |
| 123 | - exception_line_number int4 NOT NULL, | |
| 124 | - process_status int2 NOT NULL, | |
| 125 | - process_time timestamp NULL DEFAULT NULL, | |
| 126 | - process_user_id int4 NULL DEFAULT 0, | |
| 127 | - creator varchar(64) NULL DEFAULT '', | |
| 128 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 129 | - updater varchar(64) NULL DEFAULT '', | |
| 130 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 131 | - deleted int2 NOT NULL DEFAULT 0, | |
| 132 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 101 | +CREATE TABLE infra_api_error_log ( | |
| 102 | + id int8 NOT NULL, | |
| 103 | + trace_id varchar(64) NOT NULL, | |
| 104 | + user_id int8 NOT NULL DEFAULT 0, | |
| 105 | + user_type int2 NOT NULL DEFAULT 0, | |
| 106 | + application_name varchar(50) NOT NULL, | |
| 107 | + request_method varchar(16) NOT NULL, | |
| 108 | + request_url varchar(255) NOT NULL, | |
| 109 | + request_params varchar(8000) NOT NULL, | |
| 110 | + user_ip varchar(50) NOT NULL, | |
| 111 | + user_agent varchar(512) NOT NULL, | |
| 112 | + exception_time timestamp NOT NULL, | |
| 113 | + exception_name varchar(128) NOT NULL DEFAULT '', | |
| 114 | + exception_message text NOT NULL, | |
| 115 | + exception_root_cause_message text NOT NULL, | |
| 116 | + exception_stack_trace text NOT NULL, | |
| 117 | + exception_class_name varchar(512) NOT NULL, | |
| 118 | + exception_file_name varchar(512) NOT NULL, | |
| 119 | + exception_method_name varchar(512) NOT NULL, | |
| 120 | + exception_line_number int4 NOT NULL, | |
| 121 | + process_status int2 NOT NULL, | |
| 122 | + process_time timestamp NULL DEFAULT NULL, | |
| 123 | + process_user_id int4 NULL DEFAULT 0, | |
| 124 | + creator varchar(64) NULL DEFAULT '', | |
| 125 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 126 | + updater varchar(64) NULL DEFAULT '', | |
| 127 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 128 | + deleted int2 NOT NULL DEFAULT 0, | |
| 129 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 133 | 130 | ); |
| 134 | 131 | |
| 135 | -ALTER TABLE infra_api_error_log | |
| 136 | - ADD CONSTRAINT pk_infra_api_error_log PRIMARY KEY (id); | |
| 132 | +ALTER TABLE infra_api_error_log ADD CONSTRAINT pk_infra_api_error_log PRIMARY KEY (id); | |
| 137 | 133 | |
| 138 | 134 | COMMENT ON COLUMN infra_api_error_log.id IS '编号'; |
| 139 | 135 | COMMENT ON COLUMN infra_api_error_log.trace_id IS '链路追踪编号'; |
| ... | ... | @@ -173,35 +169,33 @@ CREATE SEQUENCE infra_api_error_log_seq |
| 173 | 169 | -- Table structure for infra_codegen_column |
| 174 | 170 | -- ---------------------------- |
| 175 | 171 | DROP TABLE IF EXISTS infra_codegen_column; |
| 176 | -CREATE TABLE infra_codegen_column | |
| 177 | -( | |
| 178 | - id int8 NOT NULL, | |
| 179 | - table_id int8 NOT NULL, | |
| 180 | - column_name varchar(200) NOT NULL, | |
| 181 | - data_type varchar(100) NOT NULL, | |
| 182 | - column_comment varchar(500) NOT NULL, | |
| 183 | - nullable bool NOT NULL, | |
| 184 | - primary_key bool NOT NULL, | |
| 185 | - ordinal_position int4 NOT NULL, | |
| 186 | - java_type varchar(32) NOT NULL, | |
| 187 | - java_field varchar(64) NOT NULL, | |
| 188 | - dict_type varchar(200) NULL DEFAULT '', | |
| 189 | - example varchar(64) NULL DEFAULT NULL, | |
| 190 | - create_operation bool NOT NULL, | |
| 191 | - update_operation bool NOT NULL, | |
| 192 | - list_operation bool NOT NULL, | |
| 193 | - list_operation_condition varchar(32) NOT NULL DEFAULT '=', | |
| 194 | - list_operation_result bool NOT NULL, | |
| 195 | - html_type varchar(32) NOT NULL, | |
| 196 | - creator varchar(64) NULL DEFAULT '', | |
| 197 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 198 | - updater varchar(64) NULL DEFAULT '', | |
| 199 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 200 | - deleted int2 NOT NULL DEFAULT 0 | |
| 172 | +CREATE TABLE infra_codegen_column ( | |
| 173 | + id int8 NOT NULL, | |
| 174 | + table_id int8 NOT NULL, | |
| 175 | + column_name varchar(200) NOT NULL, | |
| 176 | + data_type varchar(100) NOT NULL, | |
| 177 | + column_comment varchar(500) NOT NULL, | |
| 178 | + nullable bool NOT NULL, | |
| 179 | + primary_key bool NOT NULL, | |
| 180 | + ordinal_position int4 NOT NULL, | |
| 181 | + java_type varchar(32) NOT NULL, | |
| 182 | + java_field varchar(64) NOT NULL, | |
| 183 | + dict_type varchar(200) NULL DEFAULT '', | |
| 184 | + example varchar(64) NULL DEFAULT NULL, | |
| 185 | + create_operation bool NOT NULL, | |
| 186 | + update_operation bool NOT NULL, | |
| 187 | + list_operation bool NOT NULL, | |
| 188 | + list_operation_condition varchar(32) NOT NULL DEFAULT '=', | |
| 189 | + list_operation_result bool NOT NULL, | |
| 190 | + html_type varchar(32) NOT NULL, | |
| 191 | + creator varchar(64) NULL DEFAULT '', | |
| 192 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 193 | + updater varchar(64) NULL DEFAULT '', | |
| 194 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 195 | + deleted int2 NOT NULL DEFAULT 0 | |
| 201 | 196 | ); |
| 202 | 197 | |
| 203 | -ALTER TABLE infra_codegen_column | |
| 204 | - ADD CONSTRAINT pk_infra_codegen_column PRIMARY KEY (id); | |
| 198 | +ALTER TABLE infra_codegen_column ADD CONSTRAINT pk_infra_codegen_column PRIMARY KEY (id); | |
| 205 | 199 | |
| 206 | 200 | COMMENT ON COLUMN infra_codegen_column.id IS '编号'; |
| 207 | 201 | COMMENT ON COLUMN infra_codegen_column.table_id IS '表编号'; |
| ... | ... | @@ -236,36 +230,34 @@ CREATE SEQUENCE infra_codegen_column_seq |
| 236 | 230 | -- Table structure for infra_codegen_table |
| 237 | 231 | -- ---------------------------- |
| 238 | 232 | DROP TABLE IF EXISTS infra_codegen_table; |
| 239 | -CREATE TABLE infra_codegen_table | |
| 240 | -( | |
| 241 | - id int8 NOT NULL, | |
| 242 | - data_source_config_id int8 NOT NULL, | |
| 243 | - scene int2 NOT NULL DEFAULT 1, | |
| 244 | - table_name varchar(200) NOT NULL DEFAULT '', | |
| 245 | - table_comment varchar(500) NOT NULL DEFAULT '', | |
| 246 | - remark varchar(500) NULL DEFAULT NULL, | |
| 247 | - module_name varchar(30) NOT NULL, | |
| 248 | - business_name varchar(30) NOT NULL, | |
| 249 | - class_name varchar(100) NOT NULL DEFAULT '', | |
| 250 | - class_comment varchar(50) NOT NULL, | |
| 251 | - author varchar(50) NOT NULL, | |
| 252 | - template_type int2 NOT NULL DEFAULT 1, | |
| 253 | - front_type int2 NOT NULL, | |
| 254 | - parent_menu_id int8 NULL DEFAULT NULL, | |
| 255 | - master_table_id int8 NULL DEFAULT NULL, | |
| 256 | - sub_join_column_id int8 NULL DEFAULT NULL, | |
| 257 | - sub_join_many bool NULL DEFAULT NULL, | |
| 258 | - tree_parent_column_id int8 NULL DEFAULT NULL, | |
| 259 | - tree_name_column_id int8 NULL DEFAULT NULL, | |
| 260 | - creator varchar(64) NULL DEFAULT '', | |
| 261 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 262 | - updater varchar(64) NULL DEFAULT '', | |
| 263 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 264 | - deleted int2 NOT NULL DEFAULT 0 | |
| 233 | +CREATE TABLE infra_codegen_table ( | |
| 234 | + id int8 NOT NULL, | |
| 235 | + data_source_config_id int8 NOT NULL, | |
| 236 | + scene int2 NOT NULL DEFAULT 1, | |
| 237 | + table_name varchar(200) NOT NULL DEFAULT '', | |
| 238 | + table_comment varchar(500) NOT NULL DEFAULT '', | |
| 239 | + remark varchar(500) NULL DEFAULT NULL, | |
| 240 | + module_name varchar(30) NOT NULL, | |
| 241 | + business_name varchar(30) NOT NULL, | |
| 242 | + class_name varchar(100) NOT NULL DEFAULT '', | |
| 243 | + class_comment varchar(50) NOT NULL, | |
| 244 | + author varchar(50) NOT NULL, | |
| 245 | + template_type int2 NOT NULL DEFAULT 1, | |
| 246 | + front_type int2 NOT NULL, | |
| 247 | + parent_menu_id int8 NULL DEFAULT NULL, | |
| 248 | + master_table_id int8 NULL DEFAULT NULL, | |
| 249 | + sub_join_column_id int8 NULL DEFAULT NULL, | |
| 250 | + sub_join_many bool NULL DEFAULT NULL, | |
| 251 | + tree_parent_column_id int8 NULL DEFAULT NULL, | |
| 252 | + tree_name_column_id int8 NULL DEFAULT NULL, | |
| 253 | + creator varchar(64) NULL DEFAULT '', | |
| 254 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 255 | + updater varchar(64) NULL DEFAULT '', | |
| 256 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 257 | + deleted int2 NOT NULL DEFAULT 0 | |
| 265 | 258 | ); |
| 266 | 259 | |
| 267 | -ALTER TABLE infra_codegen_table | |
| 268 | - ADD CONSTRAINT pk_infra_codegen_table PRIMARY KEY (id); | |
| 260 | +ALTER TABLE infra_codegen_table ADD CONSTRAINT pk_infra_codegen_table PRIMARY KEY (id); | |
| 269 | 261 | |
| 270 | 262 | COMMENT ON COLUMN infra_codegen_table.id IS '编号'; |
| 271 | 263 | COMMENT ON COLUMN infra_codegen_table.data_source_config_id IS '数据源配置的编号'; |
| ... | ... | @@ -301,25 +293,23 @@ CREATE SEQUENCE infra_codegen_table_seq |
| 301 | 293 | -- Table structure for infra_config |
| 302 | 294 | -- ---------------------------- |
| 303 | 295 | DROP TABLE IF EXISTS infra_config; |
| 304 | -CREATE TABLE infra_config | |
| 305 | -( | |
| 306 | - id int8 NOT NULL, | |
| 307 | - category varchar(50) NOT NULL, | |
| 308 | - type int2 NOT NULL, | |
| 309 | - name varchar(100) NOT NULL DEFAULT '', | |
| 310 | - config_key varchar(100) NOT NULL DEFAULT '', | |
| 311 | - value varchar(500) NOT NULL DEFAULT '', | |
| 312 | - visible bool NOT NULL, | |
| 313 | - remark varchar(500) NULL DEFAULT NULL, | |
| 314 | - creator varchar(64) NULL DEFAULT '', | |
| 315 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 316 | - updater varchar(64) NULL DEFAULT '', | |
| 317 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 318 | - deleted int2 NOT NULL DEFAULT 0 | |
| 296 | +CREATE TABLE infra_config ( | |
| 297 | + id int8 NOT NULL, | |
| 298 | + category varchar(50) NOT NULL, | |
| 299 | + type int2 NOT NULL, | |
| 300 | + name varchar(100) NOT NULL DEFAULT '', | |
| 301 | + config_key varchar(100) NOT NULL DEFAULT '', | |
| 302 | + value varchar(500) NOT NULL DEFAULT '', | |
| 303 | + visible bool NOT NULL, | |
| 304 | + remark varchar(500) NULL DEFAULT NULL, | |
| 305 | + creator varchar(64) NULL DEFAULT '', | |
| 306 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 307 | + updater varchar(64) NULL DEFAULT '', | |
| 308 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 309 | + deleted int2 NOT NULL DEFAULT 0 | |
| 319 | 310 | ); |
| 320 | 311 | |
| 321 | -ALTER TABLE infra_config | |
| 322 | - ADD CONSTRAINT pk_infra_config PRIMARY KEY (id); | |
| 312 | +ALTER TABLE infra_config ADD CONSTRAINT pk_infra_config PRIMARY KEY (id); | |
| 323 | 313 | |
| 324 | 314 | COMMENT ON COLUMN infra_config.id IS '参数主键'; |
| 325 | 315 | COMMENT ON COLUMN infra_config.category IS '参数分组'; |
| ... | ... | @@ -360,22 +350,20 @@ CREATE SEQUENCE infra_config_seq |
| 360 | 350 | -- Table structure for infra_data_source_config |
| 361 | 351 | -- ---------------------------- |
| 362 | 352 | DROP TABLE IF EXISTS infra_data_source_config; |
| 363 | -CREATE TABLE infra_data_source_config | |
| 364 | -( | |
| 365 | - id int8 NOT NULL, | |
| 366 | - name varchar(100) NOT NULL DEFAULT '', | |
| 367 | - url varchar(1024) NOT NULL, | |
| 368 | - username varchar(255) NOT NULL, | |
| 369 | - password varchar(255) NOT NULL DEFAULT '', | |
| 370 | - creator varchar(64) NULL DEFAULT '', | |
| 371 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 372 | - updater varchar(64) NULL DEFAULT '', | |
| 373 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 374 | - deleted int2 NOT NULL DEFAULT 0 | |
| 353 | +CREATE TABLE infra_data_source_config ( | |
| 354 | + id int8 NOT NULL, | |
| 355 | + name varchar(100) NOT NULL DEFAULT '', | |
| 356 | + url varchar(1024) NOT NULL, | |
| 357 | + username varchar(255) NOT NULL, | |
| 358 | + password varchar(255) NOT NULL DEFAULT '', | |
| 359 | + creator varchar(64) NULL DEFAULT '', | |
| 360 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 361 | + updater varchar(64) NULL DEFAULT '', | |
| 362 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 363 | + deleted int2 NOT NULL DEFAULT 0 | |
| 375 | 364 | ); |
| 376 | 365 | |
| 377 | -ALTER TABLE infra_data_source_config | |
| 378 | - ADD CONSTRAINT pk_infra_data_source_config PRIMARY KEY (id); | |
| 366 | +ALTER TABLE infra_data_source_config ADD CONSTRAINT pk_infra_data_source_config PRIMARY KEY (id); | |
| 379 | 367 | |
| 380 | 368 | COMMENT ON COLUMN infra_data_source_config.id IS '主键编号'; |
| 381 | 369 | COMMENT ON COLUMN infra_data_source_config.name IS '参数名称'; |
| ... | ... | @@ -397,24 +385,22 @@ CREATE SEQUENCE infra_data_source_config_seq |
| 397 | 385 | -- Table structure for infra_file |
| 398 | 386 | -- ---------------------------- |
| 399 | 387 | DROP TABLE IF EXISTS infra_file; |
| 400 | -CREATE TABLE infra_file | |
| 401 | -( | |
| 402 | - id int8 NOT NULL, | |
| 403 | - config_id int8 NULL DEFAULT NULL, | |
| 404 | - name varchar(256) NULL DEFAULT NULL, | |
| 405 | - path varchar(512) NOT NULL, | |
| 406 | - url varchar(1024) NOT NULL, | |
| 407 | - type varchar(128) NULL DEFAULT NULL, | |
| 408 | - size int4 NOT NULL, | |
| 409 | - creator varchar(64) NULL DEFAULT '', | |
| 410 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 411 | - updater varchar(64) NULL DEFAULT '', | |
| 412 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 413 | - deleted int2 NOT NULL DEFAULT 0 | |
| 388 | +CREATE TABLE infra_file ( | |
| 389 | + id int8 NOT NULL, | |
| 390 | + config_id int8 NULL DEFAULT NULL, | |
| 391 | + name varchar(256) NULL DEFAULT NULL, | |
| 392 | + path varchar(512) NOT NULL, | |
| 393 | + url varchar(1024) NOT NULL, | |
| 394 | + type varchar(128) NULL DEFAULT NULL, | |
| 395 | + size int4 NOT NULL, | |
| 396 | + creator varchar(64) NULL DEFAULT '', | |
| 397 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 398 | + updater varchar(64) NULL DEFAULT '', | |
| 399 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 400 | + deleted int2 NOT NULL DEFAULT 0 | |
| 414 | 401 | ); |
| 415 | 402 | |
| 416 | -ALTER TABLE infra_file | |
| 417 | - ADD CONSTRAINT pk_infra_file PRIMARY KEY (id); | |
| 403 | +ALTER TABLE infra_file ADD CONSTRAINT pk_infra_file PRIMARY KEY (id); | |
| 418 | 404 | |
| 419 | 405 | COMMENT ON COLUMN infra_file.id IS '文件编号'; |
| 420 | 406 | COMMENT ON COLUMN infra_file.config_id IS '配置编号'; |
| ... | ... | @@ -438,23 +424,21 @@ CREATE SEQUENCE infra_file_seq |
| 438 | 424 | -- Table structure for infra_file_config |
| 439 | 425 | -- ---------------------------- |
| 440 | 426 | DROP TABLE IF EXISTS infra_file_config; |
| 441 | -CREATE TABLE infra_file_config | |
| 442 | -( | |
| 443 | - id int8 NOT NULL, | |
| 444 | - name varchar(63) NOT NULL, | |
| 445 | - storage int2 NOT NULL, | |
| 446 | - remark varchar(255) NULL DEFAULT NULL, | |
| 447 | - master bool NOT NULL, | |
| 448 | - config varchar(4096) NOT NULL, | |
| 449 | - creator varchar(64) NULL DEFAULT '', | |
| 450 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 451 | - updater varchar(64) NULL DEFAULT '', | |
| 452 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 453 | - deleted int2 NOT NULL DEFAULT 0 | |
| 427 | +CREATE TABLE infra_file_config ( | |
| 428 | + id int8 NOT NULL, | |
| 429 | + name varchar(63) NOT NULL, | |
| 430 | + storage int2 NOT NULL, | |
| 431 | + remark varchar(255) NULL DEFAULT NULL, | |
| 432 | + master bool NOT NULL, | |
| 433 | + config varchar(4096) NOT NULL, | |
| 434 | + creator varchar(64) NULL DEFAULT '', | |
| 435 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 436 | + updater varchar(64) NULL DEFAULT '', | |
| 437 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 438 | + deleted int2 NOT NULL DEFAULT 0 | |
| 454 | 439 | ); |
| 455 | 440 | |
| 456 | -ALTER TABLE infra_file_config | |
| 457 | - ADD CONSTRAINT pk_infra_file_config PRIMARY KEY (id); | |
| 441 | +ALTER TABLE infra_file_config ADD CONSTRAINT pk_infra_file_config PRIMARY KEY (id); | |
| 458 | 442 | |
| 459 | 443 | COMMENT ON COLUMN infra_file_config.id IS '编号'; |
| 460 | 444 | COMMENT ON COLUMN infra_file_config.name IS '配置名'; |
| ... | ... | @@ -474,41 +458,41 @@ COMMENT ON TABLE infra_file_config IS '文件配置表'; |
| 474 | 458 | -- ---------------------------- |
| 475 | 459 | -- @formatter:off |
| 476 | 460 | BEGIN; |
| 477 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '数据库(示例)', 1, '我是数据库', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '2025-05-02 18:30:28', '0'); | |
| 478 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, '七牛存储器(示例)', 20, '请换成你自己的密钥!!!', '1', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.yudao.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY","enablePathStyleAccess":false}', '1', '2024-01-13 22:11:12', '1', '2025-05-02 18:30:28', '0'); | |
| 479 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (24, '腾讯云存储(示例)', 20, '请换成你的密钥!!!', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"https://cos.ap-shanghai.myqcloud.com","domain":"http://tengxun-oss.iocoder.cn","bucket":"aoteman-1255880240","accessKey":"AKIDAF6WSh1uiIjwqtrOsGSN3WryqTM6cTMt","accessSecret":"X"}', '1', '2024-11-09 16:03:22', '1', '2025-05-02 18:30:28', '0'); | |
| 480 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (25, '阿里云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"oss-cn-beijing.aliyuncs.com","domain":"http://ali-oss.iocoder.cn","bucket":"yunai-aoteman","accessKey":"LTAI5tEQLgnDyjh3WpNcdMKA","accessSecret":"X","enablePathStyleAccess":false}', '1', '2024-11-09 16:47:08', '1', '2025-05-02 18:30:28', '0'); | |
| 481 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (26, '火山云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"tos-s3-cn-beijing.volces.com","domain":null,"bucket":"yunai","accessKey":"AKLTZjc3Zjc4MzZmMjU3NDk0ZTgxYmIyMmFkNTIwMDI1ZGE","accessSecret":"X==","enablePathStyleAccess":false}', '1', '2024-11-09 16:56:42', '1', '2025-05-02 18:30:28', '0'); | |
| 482 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (27, '华为云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"obs.cn-east-3.myhuaweicloud.com","domain":"","bucket":"yudao","accessKey":"PVDONDEIOTW88LF8DC4U","accessSecret":"X","enablePathStyleAccess":false}', '1', '2024-11-09 17:18:41', '1', '2025-05-02 18:30:28', '0'); | |
| 483 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (28, 'MinIO 存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"http://127.0.0.1:9000","domain":"http://127.0.0.1:9000/yudao","bucket":"yudao","accessKey":"admin","accessSecret":"password","enablePathStyleAccess":false}', '1', '2024-11-09 17:43:10', '1', '2025-05-02 18:30:28', '0'); | |
| 484 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (29, '本地存储(示例)', 10, '仅适合 mac 或 windows', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig","basePath":"/Users/yunai/tmp/file","domain":"http://127.0.0.1:48080"}', '1', '2025-05-02 11:25:45', '1', '2025-05-02 18:30:28', '0'); | |
| 485 | -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (30, 'SFTP 存储(示例)', 12, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig","basePath":"/upload","domain":"http://127.0.0.1:48080","host":"127.0.0.1","port":2222,"username":"foo","password":"pass"}', '1', '2025-05-02 16:34:10', '1', '2025-05-02 18:30:28', '0'); | |
| 461 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '数据库(示例)', 1, '我是数据库', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '2025-11-24 20:57:14', '0'); | |
| 462 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, '七牛存储器(示例)', 20, '请换成你自己的密钥!!!', '1', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.yudao.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY","enablePathStyleAccess":false,"enablePublicAccess":true}', '1', '2024-01-13 22:11:12', '1', '2025-11-24 20:57:14', '0'); | |
| 463 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (24, '腾讯云存储(示例)', 20, '请换成你的密钥!!!', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"https://cos.ap-shanghai.myqcloud.com","domain":"http://tengxun-oss.iocoder.cn","bucket":"aoteman-1255880240","accessKey":"AKIDAF6WSh1uiIjwqtrOsGSN3WryqTM6cTMt","accessSecret":"X","enablePathStyleAccess":false,"enablePublicAccess":true}', '1', '2024-11-09 16:03:22', '1', '2025-11-24 20:57:14', '0'); | |
| 464 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (25, '阿里云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"oss-cn-beijing.aliyuncs.com","domain":"http://ali-oss.iocoder.cn","bucket":"yunai-aoteman","accessKey":"LTAI5tEQLgnDyjh3WpNcdMKA","accessSecret":"X","enablePathStyleAccess":false,"enablePublicAccess":true}', '1', '2024-11-09 16:47:08', '1', '2025-11-24 20:57:14', '0'); | |
| 465 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (26, '火山云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"tos-s3-cn-beijing.volces.com","domain":null,"bucket":"yunai","accessKey":"AKLTZjc3Zjc4MzZmMjU3NDk0ZTgxYmIyMmFkNTIwMDI1ZGE","accessSecret":"X==","enablePathStyleAccess":false,"enablePublicAccess":true}', '1', '2024-11-09 16:56:42', '1', '2025-11-24 20:57:14', '0'); | |
| 466 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (27, '华为云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"obs.cn-east-3.myhuaweicloud.com","domain":"","bucket":"yudao","accessKey":"PVDONDEIOTW88LF8DC4U","accessSecret":"X","enablePathStyleAccess":false,"enablePublicAccess":true}', '1', '2024-11-09 17:18:41', '1', '2025-11-24 20:57:14', '0'); | |
| 467 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (28, 'MinIO 存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"http://127.0.0.1:9000","domain":"http://127.0.0.1:9000/yudao","bucket":"yudao","accessKey":"admin","accessSecret":"password","enablePathStyleAccess":false,"enablePublicAccess":true}', '1', '2024-11-09 17:43:10', '1', '2025-11-24 20:57:14', '0'); | |
| 468 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (29, '本地存储(示例)', 10, 'mac/linux 使用 /,windows 使用 \\', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig","basePath":"/Users/yunai/tmp/file","domain":"http://127.0.0.1:48080"}', '1', '2025-05-02 11:25:45', '1', '2025-11-24 20:57:14', '0'); | |
| 469 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (30, 'SFTP 存储(示例)', 12, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig","basePath":"/upload","domain":"http://127.0.0.1:48080","host":"127.0.0.1","port":2222,"username":"foo","password":"pass"}', '1', '2025-05-02 16:34:10', '1', '2025-11-24 20:57:14', '0'); | |
| 470 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (34, '七牛云存储【私有】(示例)', 20, '请换成你自己的密钥!!!', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://t151glocd.hn-bkt.clouddn.com","bucket":"ruoyi-vue-pro-private","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY","enablePathStyleAccess":false,"enablePublicAccess":false}', '1', '2025-08-17 21:22:00', '1', '2025-11-24 20:57:14', '0'); | |
| 471 | +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (35, '1', 20, '1', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"http://www.baidu.com","domain":"http://www.xxx.com","bucket":"1","accessKey":"2","accessSecret":"3","enablePathStyleAccess":false,"enablePublicAccess":false}', '1', '2025-10-02 14:32:12', '1', '2025-11-24 20:57:14', '0'); | |
| 486 | 472 | COMMIT; |
| 487 | 473 | -- @formatter:on |
| 488 | 474 | |
| 489 | 475 | DROP SEQUENCE IF EXISTS infra_file_config_seq; |
| 490 | 476 | CREATE SEQUENCE infra_file_config_seq |
| 491 | - START 31; | |
| 477 | + START 36; | |
| 492 | 478 | |
| 493 | 479 | -- ---------------------------- |
| 494 | 480 | -- Table structure for infra_file_content |
| 495 | 481 | -- ---------------------------- |
| 496 | 482 | DROP TABLE IF EXISTS infra_file_content; |
| 497 | -CREATE TABLE infra_file_content | |
| 498 | -( | |
| 499 | - id int8 NOT NULL, | |
| 500 | - config_id int8 NOT NULL, | |
| 501 | - path varchar(512) NOT NULL, | |
| 502 | - content bytea NOT NULL, | |
| 503 | - creator varchar(64) NULL DEFAULT '', | |
| 504 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 505 | - updater varchar(64) NULL DEFAULT '', | |
| 506 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 507 | - deleted int2 NOT NULL DEFAULT 0 | |
| 483 | +CREATE TABLE infra_file_content ( | |
| 484 | + id int8 NOT NULL, | |
| 485 | + config_id int8 NOT NULL, | |
| 486 | + path varchar(512) NOT NULL, | |
| 487 | + content bytea NOT NULL, | |
| 488 | + creator varchar(64) NULL DEFAULT '', | |
| 489 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 490 | + updater varchar(64) NULL DEFAULT '', | |
| 491 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 492 | + deleted int2 NOT NULL DEFAULT 0 | |
| 508 | 493 | ); |
| 509 | 494 | |
| 510 | -ALTER TABLE infra_file_content | |
| 511 | - ADD CONSTRAINT pk_infra_file_content PRIMARY KEY (id); | |
| 495 | +ALTER TABLE infra_file_content ADD CONSTRAINT pk_infra_file_content PRIMARY KEY (id); | |
| 512 | 496 | |
| 513 | 497 | COMMENT ON COLUMN infra_file_content.id IS '编号'; |
| 514 | 498 | COMMENT ON COLUMN infra_file_content.config_id IS '配置编号'; |
| ... | ... | @@ -529,26 +513,24 @@ CREATE SEQUENCE infra_file_content_seq |
| 529 | 513 | -- Table structure for infra_job |
| 530 | 514 | -- ---------------------------- |
| 531 | 515 | DROP TABLE IF EXISTS infra_job; |
| 532 | -CREATE TABLE infra_job | |
| 533 | -( | |
| 534 | - id int8 NOT NULL, | |
| 535 | - name varchar(32) NOT NULL, | |
| 536 | - status int2 NOT NULL, | |
| 537 | - handler_name varchar(64) NOT NULL, | |
| 538 | - handler_param varchar(255) NULL DEFAULT NULL, | |
| 539 | - cron_expression varchar(32) NOT NULL, | |
| 540 | - retry_count int4 NOT NULL DEFAULT 0, | |
| 541 | - retry_interval int4 NOT NULL DEFAULT 0, | |
| 542 | - monitor_timeout int4 NOT NULL DEFAULT 0, | |
| 543 | - creator varchar(64) NULL DEFAULT '', | |
| 544 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 545 | - updater varchar(64) NULL DEFAULT '', | |
| 546 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 547 | - deleted int2 NOT NULL DEFAULT 0 | |
| 516 | +CREATE TABLE infra_job ( | |
| 517 | + id int8 NOT NULL, | |
| 518 | + name varchar(32) NOT NULL, | |
| 519 | + status int2 NOT NULL, | |
| 520 | + handler_name varchar(64) NOT NULL, | |
| 521 | + handler_param varchar(255) NULL DEFAULT NULL, | |
| 522 | + cron_expression varchar(32) NOT NULL, | |
| 523 | + retry_count int4 NOT NULL DEFAULT 0, | |
| 524 | + retry_interval int4 NOT NULL DEFAULT 0, | |
| 525 | + monitor_timeout int4 NOT NULL DEFAULT 0, | |
| 526 | + creator varchar(64) NULL DEFAULT '', | |
| 527 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 528 | + updater varchar(64) NULL DEFAULT '', | |
| 529 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 530 | + deleted int2 NOT NULL DEFAULT 0 | |
| 548 | 531 | ); |
| 549 | 532 | |
| 550 | -ALTER TABLE infra_job | |
| 551 | - ADD CONSTRAINT pk_infra_job PRIMARY KEY (id); | |
| 533 | +ALTER TABLE infra_job ADD CONSTRAINT pk_infra_job PRIMARY KEY (id); | |
| 552 | 534 | |
| 553 | 535 | COMMENT ON COLUMN infra_job.id IS '任务编号'; |
| 554 | 536 | COMMENT ON COLUMN infra_job.name IS '任务名称'; |
| ... | ... | @@ -575,47 +557,50 @@ INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expre |
| 575 | 557 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (17, '支付订单同步 Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 14:36:26', '1', '2023-07-22 15:39:08', '0'); |
| 576 | 558 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (18, '支付订单过期 Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 15:36:23', '1', '2023-07-22 15:39:54', '0'); |
| 577 | 559 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (19, '退款订单的同步 Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-23 21:03:44', '1', '2023-07-23 21:09:00', '0'); |
| 578 | -INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (21, '交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2023-09-26 19:23:30', '0'); | |
| 579 | -INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (22, '交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2023-09-26 23:38:08', '0'); | |
| 580 | -INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (23, '交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2023-09-27 11:03:10', '0'); | |
| 581 | -INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (24, '佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2023-09-28 22:01:56', '0'); | |
| 560 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (21, 'Mall 交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2025-10-02 11:08:34', '0'); | |
| 561 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (22, 'Mall 交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2025-10-02 11:08:36', '0'); | |
| 562 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (23, 'Mall 交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2025-10-02 11:08:38', '0'); | |
| 563 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (24, 'Mall 佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2025-10-02 11:08:04', '0'); | |
| 582 | 564 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (25, '访问日志清理 Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 10:59:41', '1', '2023-10-03 11:01:10', '0'); |
| 583 | 565 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (26, '错误日志清理 Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:00:43', '1', '2023-10-03 11:01:12', '0'); |
| 584 | 566 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (27, '任务日志清理 Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:01:33', '1', '2024-09-12 13:40:34', '0'); |
| 585 | 567 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (33, 'demoJob', 2, 'demoJob', '', '0 * * * * ?', 1, 1, 0, '1', '2024-10-27 19:38:46', '1', '2025-05-10 18:13:54', '0'); |
| 586 | 568 | INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (35, '转账订单的同步 Job', 2, 'payTransferSyncJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-05-10 17:35:54', '1', '2025-05-10 18:13:52', '0'); |
| 569 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (36, 'IoT 设备离线检查 Job', 2, 'iotDeviceOfflineCheckJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-07-03 23:48:44', '"1"', '2025-07-03 23:48:47', '0'); | |
| 570 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (37, 'IoT OTA 升级推送 Job', 2, 'iotOtaUpgradeJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-07-03 23:49:07', '"1"', '2025-07-03 23:49:13', '0'); | |
| 571 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (38, 'Mall 拼团过期 Job', 2, 'combinationRecordExpireJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-10-02 11:07:11', '1', '2025-10-02 11:07:14', '0'); | |
| 572 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (39, 'Mall 优惠券过期 Job', 2, 'couponExpireJob', '', '0 * * * * ?', 0, 0, 0, '1', '2025-10-02 11:07:34', '1', '2025-10-02 11:07:37', '0'); | |
| 573 | +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (40, 'Mall 商品统计 Job', 2, 'productStatisticsJob', '', '0 0 0 * * ?', 0, 0, 0, '1', '2025-11-22 18:51:25', '1', '2025-11-22 18:56:21', '0'); | |
| 587 | 574 | COMMIT; |
| 588 | 575 | -- @formatter:on |
| 589 | 576 | |
| 590 | 577 | DROP SEQUENCE IF EXISTS infra_job_seq; |
| 591 | 578 | CREATE SEQUENCE infra_job_seq |
| 592 | - START 36; | |
| 579 | + START 41; | |
| 593 | 580 | |
| 594 | 581 | -- ---------------------------- |
| 595 | 582 | -- Table structure for infra_job_log |
| 596 | 583 | -- ---------------------------- |
| 597 | 584 | DROP TABLE IF EXISTS infra_job_log; |
| 598 | -CREATE TABLE infra_job_log | |
| 599 | -( | |
| 600 | - id int8 NOT NULL, | |
| 601 | - job_id int8 NOT NULL, | |
| 602 | - handler_name varchar(64) NOT NULL, | |
| 603 | - handler_param varchar(255) NULL DEFAULT NULL, | |
| 604 | - execute_index int2 NOT NULL DEFAULT 1, | |
| 605 | - begin_time timestamp NOT NULL, | |
| 606 | - end_time timestamp NULL DEFAULT NULL, | |
| 607 | - duration int4 NULL DEFAULT NULL, | |
| 608 | - status int2 NOT NULL, | |
| 609 | - result varchar(4000) NULL DEFAULT '', | |
| 610 | - creator varchar(64) NULL DEFAULT '', | |
| 611 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 612 | - updater varchar(64) NULL DEFAULT '', | |
| 613 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 614 | - deleted int2 NOT NULL DEFAULT 0 | |
| 585 | +CREATE TABLE infra_job_log ( | |
| 586 | + id int8 NOT NULL, | |
| 587 | + job_id int8 NOT NULL, | |
| 588 | + handler_name varchar(64) NOT NULL, | |
| 589 | + handler_param varchar(255) NULL DEFAULT NULL, | |
| 590 | + execute_index int2 NOT NULL DEFAULT 1, | |
| 591 | + begin_time timestamp NOT NULL, | |
| 592 | + end_time timestamp NULL DEFAULT NULL, | |
| 593 | + duration int4 NULL DEFAULT NULL, | |
| 594 | + status int2 NOT NULL, | |
| 595 | + result varchar(4000) NULL DEFAULT '', | |
| 596 | + creator varchar(64) NULL DEFAULT '', | |
| 597 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 598 | + updater varchar(64) NULL DEFAULT '', | |
| 599 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 600 | + deleted int2 NOT NULL DEFAULT 0 | |
| 615 | 601 | ); |
| 616 | 602 | |
| 617 | -ALTER TABLE infra_job_log | |
| 618 | - ADD CONSTRAINT pk_infra_job_log PRIMARY KEY (id); | |
| 603 | +ALTER TABLE infra_job_log ADD CONSTRAINT pk_infra_job_log PRIMARY KEY (id); | |
| 619 | 604 | |
| 620 | 605 | COMMENT ON COLUMN infra_job_log.id IS '日志编号'; |
| 621 | 606 | COMMENT ON COLUMN infra_job_log.job_id IS '任务编号'; |
| ... | ... | @@ -642,26 +627,24 @@ CREATE SEQUENCE infra_job_log_seq |
| 642 | 627 | -- Table structure for system_dept |
| 643 | 628 | -- ---------------------------- |
| 644 | 629 | DROP TABLE IF EXISTS system_dept; |
| 645 | -CREATE TABLE system_dept | |
| 646 | -( | |
| 647 | - id int8 NOT NULL, | |
| 648 | - name varchar(30) NOT NULL DEFAULT '', | |
| 649 | - parent_id int8 NOT NULL DEFAULT 0, | |
| 650 | - sort int4 NOT NULL DEFAULT 0, | |
| 651 | - leader_user_id int8 NULL DEFAULT NULL, | |
| 652 | - phone varchar(11) NULL DEFAULT NULL, | |
| 653 | - email varchar(50) NULL DEFAULT NULL, | |
| 654 | - status int2 NOT NULL, | |
| 655 | - creator varchar(64) NULL DEFAULT '', | |
| 656 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 657 | - updater varchar(64) NULL DEFAULT '', | |
| 658 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 659 | - deleted int2 NOT NULL DEFAULT 0, | |
| 660 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 630 | +CREATE TABLE system_dept ( | |
| 631 | + id int8 NOT NULL, | |
| 632 | + name varchar(30) NOT NULL DEFAULT '', | |
| 633 | + parent_id int8 NOT NULL DEFAULT 0, | |
| 634 | + sort int4 NOT NULL DEFAULT 0, | |
| 635 | + leader_user_id int8 NULL DEFAULT NULL, | |
| 636 | + phone varchar(11) NULL DEFAULT NULL, | |
| 637 | + email varchar(50) NULL DEFAULT NULL, | |
| 638 | + status int2 NOT NULL, | |
| 639 | + creator varchar(64) NULL DEFAULT '', | |
| 640 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 641 | + updater varchar(64) NULL DEFAULT '', | |
| 642 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 643 | + deleted int2 NOT NULL DEFAULT 0, | |
| 644 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 661 | 645 | ); |
| 662 | 646 | |
| 663 | -ALTER TABLE system_dept | |
| 664 | - ADD CONSTRAINT pk_system_dept PRIMARY KEY (id); | |
| 647 | +ALTER TABLE system_dept ADD CONSTRAINT pk_system_dept PRIMARY KEY (id); | |
| 665 | 648 | |
| 666 | 649 | COMMENT ON COLUMN system_dept.id IS '部门id'; |
| 667 | 650 | COMMENT ON COLUMN system_dept.name IS '部门名称'; |
| ... | ... | @@ -709,26 +692,24 @@ CREATE SEQUENCE system_dept_seq |
| 709 | 692 | -- Table structure for system_dict_data |
| 710 | 693 | -- ---------------------------- |
| 711 | 694 | DROP TABLE IF EXISTS system_dict_data; |
| 712 | -CREATE TABLE system_dict_data | |
| 713 | -( | |
| 714 | - id int8 NOT NULL, | |
| 715 | - sort int4 NOT NULL DEFAULT 0, | |
| 716 | - label varchar(100) NOT NULL DEFAULT '', | |
| 717 | - value varchar(100) NOT NULL DEFAULT '', | |
| 718 | - dict_type varchar(100) NOT NULL DEFAULT '', | |
| 719 | - status int2 NOT NULL DEFAULT 0, | |
| 720 | - color_type varchar(100) NULL DEFAULT '', | |
| 721 | - css_class varchar(100) NULL DEFAULT '', | |
| 722 | - remark varchar(500) NULL DEFAULT NULL, | |
| 723 | - creator varchar(64) NULL DEFAULT '', | |
| 724 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 725 | - updater varchar(64) NULL DEFAULT '', | |
| 726 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 727 | - deleted int2 NOT NULL DEFAULT 0 | |
| 695 | +CREATE TABLE system_dict_data ( | |
| 696 | + id int8 NOT NULL, | |
| 697 | + sort int4 NOT NULL DEFAULT 0, | |
| 698 | + label varchar(100) NOT NULL DEFAULT '', | |
| 699 | + value varchar(100) NOT NULL DEFAULT '', | |
| 700 | + dict_type varchar(100) NOT NULL DEFAULT '', | |
| 701 | + status int2 NOT NULL DEFAULT 0, | |
| 702 | + color_type varchar(100) NULL DEFAULT '', | |
| 703 | + css_class varchar(100) NULL DEFAULT '', | |
| 704 | + remark varchar(500) NULL DEFAULT NULL, | |
| 705 | + creator varchar(64) NULL DEFAULT '', | |
| 706 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 707 | + updater varchar(64) NULL DEFAULT '', | |
| 708 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 709 | + deleted int2 NOT NULL DEFAULT 0 | |
| 728 | 710 | ); |
| 729 | 711 | |
| 730 | -ALTER TABLE system_dict_data | |
| 731 | - ADD CONSTRAINT pk_system_dict_data PRIMARY KEY (id); | |
| 712 | +ALTER TABLE system_dict_data ADD CONSTRAINT pk_system_dict_data PRIMARY KEY (id); | |
| 732 | 713 | |
| 733 | 714 | COMMENT ON COLUMN system_dict_data.id IS '字典编码'; |
| 734 | 715 | COMMENT ON COLUMN system_dict_data.sort IS '字典排序'; |
| ... | ... | @@ -936,7 +917,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 936 | 917 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1230, 13, '支付宝条码支付', 'alipay_bar', 'pay_channel_code', 0, 'primary', '', '支付宝条码支付', '1', '2023-02-18 23:32:24', '1', '2023-07-19 20:09:23', '0'); |
| 937 | 918 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1231, 10, 'Vue2 Element UI 标准模版', '10', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:03:55', '1', '2023-04-13 00:03:55', '0'); |
| 938 | 919 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1232, 20, 'Vue3 Element Plus 标准模版', '20', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:08', '1', '2023-04-13 00:04:08', '0'); |
| 939 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1234, 30, 'Vben2.0 Ant Design Schema 模版', '30', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2025-04-23 21:27:34', '0'); | |
| 920 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1234, 30, 'Vben2.0 Ant Design Schema 模版', '30', 'infra_codegen_front_type', 1, '', '', '', '1', '2023-04-13 00:04:26', '1', '2025-07-27 10:55:14', '0'); | |
| 940 | 921 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1244, 0, '按件', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:40', '1', '2023-05-21 22:46:40', '0'); |
| 941 | 922 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1245, 1, '按重量', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:58', '1', '2023-05-21 22:46:58', '0'); |
| 942 | 923 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1246, 2, '按体积', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:47:18', '1', '2023-05-21 22:47:18', '0'); |
| ... | ... | @@ -1177,37 +1158,22 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1177 | 1158 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1690, 5, '向量', '5', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:15', '1', '2025-03-03 12:28:15', '0'); |
| 1178 | 1159 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1691, 6, '重排', '6', 'ai_model_type', 0, '', '', '', '1', '2025-03-03 12:28:26', '1', '2025-03-03 12:28:26', '0'); |
| 1179 | 1160 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1692, 14, 'MiniMax', 'MiniMax', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:04:51', '1', '2025-03-11 20:04:51', '0'); |
| 1180 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗灭', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-03-11 20:05:08', '0'); | |
| 1181 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2000, 0, '标准数据格式(JSON)', '0', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:26', '1', '2025-03-17 09:28:16', '0'); | |
| 1182 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2001, 1, '透传/自定义', '1', 'iot_data_format', 0, 'default', '', '', '1', '2024-08-10 11:53:37', '1', '2025-03-17 09:28:19', '0'); | |
| 1161 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, '月之暗面', 'Moonshot', 'ai_platform', 0, '', '', '', '1', '2025-03-11 20:05:08', '1', '2025-11-24 07:17:39', '0'); | |
| 1183 | 1162 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2002, 0, '直连设备', '0', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:54:58', '1', '2025-03-17 09:28:22', '0'); |
| 1184 | 1163 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2003, 2, '网关设备', '2', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:55:08', '1', '2025-03-17 09:28:28', '0'); |
| 1185 | 1164 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2004, 1, '网关子设备', '1', 'iot_product_device_type', 0, 'default', '', '', '1', '2024-08-10 11:55:20', '1', '2025-03-17 09:28:31', '0'); |
| 1186 | 1165 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2005, 1, '已发布', '1', 'iot_product_status', 0, 'success', '', '', '1', '2024-08-10 12:10:33', '1', '2025-03-17 09:28:34', '0'); |
| 1187 | 1166 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2006, 0, '开发中', '0', 'iot_product_status', 0, 'default', '', '', '1', '2024-08-10 14:19:18', '1', '2025-03-17 09:28:39', '0'); |
| 1188 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2007, 0, '弱校验', '0', 'iot_validate_type', 0, '', '', '', '1', '2024-09-06 20:05:48', '1', '2025-03-17 09:28:41', '0'); | |
| 1189 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2008, 1, '免校验', '1', 'iot_validate_type', 0, '', '', '', '1', '2024-09-06 20:06:03', '1', '2025-03-17 09:28:44', '0'); | |
| 1190 | 1167 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2009, 0, 'Wi-Fi', '0', 'iot_net_type', 0, '', '', '', '1', '2024-09-06 22:04:47', '1', '2025-03-17 09:28:47', '0'); |
| 1191 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2010, 1, '蜂窝(2G / 3G / 4G / 5G)', '1', 'iot_net_type', 0, '', '', '', '1', '2024-09-06 22:05:14', '1', '2025-03-17 09:28:49', '0'); | |
| 1168 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2010, 1, '移动网络', '1', 'iot_net_type', 0, '', '', '', '1', '2024-09-06 22:05:14', '1', '2025-06-12 23:27:19', '0'); | |
| 1192 | 1169 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2011, 2, '以太网', '2', 'iot_net_type', 0, '', '', '', '1', '2024-09-06 22:05:35', '1', '2025-03-17 09:28:51', '0'); |
| 1193 | 1170 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2012, 3, '其他', '3', 'iot_net_type', 0, '', '', '', '1', '2024-09-06 22:05:52', '1', '2025-03-17 09:28:54', '0'); |
| 1194 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2013, 0, '自定义', '0', 'iot_protocol_type', 0, '', '', '', '1', '2024-09-06 22:26:10', '1', '2025-03-17 09:28:56', '0'); | |
| 1195 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2014, 1, 'Modbus', '1', 'iot_protocol_type', 0, '', '', '', '1', '2024-09-06 22:26:21', '1', '2025-03-17 09:28:58', '0'); | |
| 1196 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2015, 2, 'OPC UA', '2', 'iot_protocol_type', 0, '', '', '', '1', '2024-09-06 22:26:31', '1', '2025-03-17 09:29:00', '0'); | |
| 1197 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2016, 3, 'ZigBee', '3', 'iot_protocol_type', 0, '', '', '', '1', '2024-09-06 22:26:39', '1', '2025-03-17 09:29:04', '0'); | |
| 1198 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2017, 4, 'BLE', '4', 'iot_protocol_type', 0, '', '', '', '1', '2024-09-06 22:26:48', '1', '2025-03-17 09:29:06', '0'); | |
| 1199 | 1171 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2018, 0, '未激活', '0', 'iot_device_state', 0, '', '', '', '1', '2024-09-21 08:13:34', '1', '2025-03-17 09:29:09', '0'); |
| 1200 | 1172 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2019, 1, '在线', '1', 'iot_device_state', 0, '', '', '', '1', '2024-09-21 08:13:48', '1', '2025-03-17 09:29:12', '0'); |
| 1201 | 1173 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2020, 2, '离线', '2', 'iot_device_state', 0, '', '', '', '1', '2024-09-21 08:13:59', '1', '2025-03-17 09:29:14', '0'); |
| 1202 | 1174 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2021, 1, '属性', '1', 'iot_thing_model_type', 0, '', '', '', '1', '2024-09-29 20:03:01', '1', '2025-03-17 09:29:24', '0'); |
| 1203 | 1175 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2022, 2, '服务', '2', 'iot_thing_model_type', 0, '', '', '', '1', '2024-09-29 20:03:11', '1', '2025-03-17 09:29:27', '0'); |
| 1204 | 1176 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2023, 3, '事件', '3', 'iot_thing_model_type', 0, '', '', '', '1', '2024-09-29 20:03:20', '1', '2025-03-17 09:29:29', '0'); |
| 1205 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2024, 1, 'JAR 部署', '0', 'iot_plugin_deploy_type', 0, '', '', '', '1', '2024-12-13 10:55:32', '1', '2025-03-17 09:29:32', '0'); | |
| 1206 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2025, 2, '独立部署', '1', 'iot_plugin_deploy_type', 0, '', '', '', '1', '2024-12-13 10:55:43', '1', '2025-03-17 09:29:34', '0'); | |
| 1207 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2026, 0, '停止', '0', 'iot_plugin_status', 0, 'danger', '', '', '1', '2024-12-13 11:07:37', '1', '2025-03-17 09:29:37', '0'); | |
| 1208 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2027, 1, '运行', '1', 'iot_plugin_status', 0, '', '', '', '1', '2024-12-13 11:07:45', '1', '2025-03-17 09:34:17', '0'); | |
| 1209 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2028, 0, '普通插件', '0', 'iot_plugin_type', 0, '', '', '', '1', '2024-12-13 11:08:32', '1', '2025-03-17 09:34:19', '0'); | |
| 1210 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2029, 1, '设备插件', '1', 'iot_plugin_type', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:34:22', '0'); | |
| 1211 | 1177 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2030, 1, '升每分钟', 'L/min', 'iot_thing_model_unit', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:34:24', '0'); |
| 1212 | 1178 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2031, 2, '毫克每千克', 'mg/kg', 'iot_thing_model_unit', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:34:27', '0'); |
| 1213 | 1179 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2032, 3, '浊度', 'NTU', 'iot_thing_model_unit', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:34:31', '0'); |
| ... | ... | @@ -1340,48 +1306,90 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 1340 | 1306 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2160, 130, '分米', 'dm', 'iot_thing_model_unit', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:40:46', '0'); |
| 1341 | 1307 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2161, 131, '千米', 'km', 'iot_thing_model_unit', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:40:46', '0'); |
| 1342 | 1308 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2162, 132, '米', 'm', 'iot_thing_model_unit', 0, '', '', '', '1', '2024-12-13 11:08:41', '1', '2025-03-17 09:40:46', '0'); |
| 1343 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2163, 1, '输入', '1', 'iot_data_bridge_direction_enum', 0, 'primary', '', '', '1', '2025-03-09 12:38:24', '1', '2025-03-17 09:40:46', '0'); | |
| 1344 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2164, 2, '输出', '2', 'iot_data_bridge_direction_enum', 0, 'primary', '', '', '1', '2025-03-09 12:38:36', '1', '2025-03-17 09:40:46', '0'); | |
| 1345 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2165, 1, 'HTTP', '1', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:39:54', '1', '2025-03-17 09:40:46', '0'); | |
| 1346 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2166, 2, 'TCP', '2', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:40:06', '1', '2025-03-17 09:40:46', '0'); | |
| 1347 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2167, 3, 'WEBSOCKET', '3', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:40:24', '1', '2025-03-17 09:40:46', '0'); | |
| 1348 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2168, 10, 'MQTT', '10', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:40:37', '1', '2025-03-17 09:40:46', '0'); | |
| 1349 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2169, 20, 'DATABASE', '20', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:41:05', '1', '2025-03-17 09:40:46', '0'); | |
| 1350 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2170, 21, 'REDIS_STREAM', '21', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:41:18', '1', '2025-03-17 09:40:46', '0'); | |
| 1351 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2171, 30, 'ROCKETMQ', '30', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:41:30', '1', '2025-03-17 09:40:46', '0'); | |
| 1352 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2172, 31, 'RABBITMQ', '31', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:41:47', '1', '2025-03-17 09:40:46', '0'); | |
| 1353 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2173, 32, 'KAFKA', '32', 'iot_data_bridge_type_enum', 0, 'primary', '', '', '1', '2025-03-09 12:41:59', '1', '2025-03-17 09:40:46', '0'); | |
| 1309 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2165, 1, 'HTTP', '1', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:39:54', '1', '2025-06-24 12:44:47', '0'); | |
| 1310 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2166, 2, 'TCP', '2', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:40:06', '1', '2025-06-24 12:44:46', '0'); | |
| 1311 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2167, 3, 'WebSocket', '3', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:40:24', '1', '2025-06-24 12:44:45', '0'); | |
| 1312 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2168, 10, 'MQTT', '10', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:40:37', '1', '2025-06-24 12:44:44', '0'); | |
| 1313 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2169, 20, 'Database', '20', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:41:05', '1', '2025-06-24 12:44:44', '0'); | |
| 1314 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2170, 21, 'Redis Stream', '21', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:41:18', '1', '2025-06-24 12:44:43', '0'); | |
| 1315 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2171, 30, 'RocketMQ', '30', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:41:30', '1', '2025-06-24 12:44:42', '0'); | |
| 1316 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2172, 31, 'RabbitMQ', '31', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:41:47', '1', '2025-06-24 12:44:41', '0'); | |
| 1317 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2173, 32, 'Kafka', '32', 'iot_data_sink_type_enum', 0, 'default', '', '', '1', '2025-03-09 12:41:59', '1', '2025-06-24 12:44:39', '0'); | |
| 1318 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2174, 1, '设备上下线变更', '1', 'iot_rule_scene_trigger_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:00:01', '"1"', '2025-07-06 10:28:16', '0'); | |
| 1319 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2175, 2, '物模型属性上报', '2', 'iot_rule_scene_trigger_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:00:09', '"1"', '2025-07-06 10:28:22', '0'); | |
| 1320 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2176, 1, '设备状态', 'state', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:24:58', '1', '2025-03-20 15:24:58', '0'); | |
| 1321 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2177, 2, '设备属性', 'property', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:25:09', '1', '2025-03-20 15:25:09', '0'); | |
| 1322 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2178, 3, '设备事件', 'event', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:25:23', '1', '2025-03-20 15:25:23', '0'); | |
| 1323 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2179, 4, '设备服务', 'service', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:25:39', '1', '2025-03-20 15:25:39', '0'); | |
| 1324 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2180, 5, '设备配置', 'config', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:25:51', '1', '2025-03-20 15:25:57', '0'); | |
| 1325 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2181, 6, '设备 OTA', 'ota', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:26:17', '1', '2025-03-20 15:26:17', '0'); | |
| 1326 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2182, 7, '设备注册', 'register', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:26:35', '1', '2025-03-20 15:26:35', '0'); | |
| 1327 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2183, 8, '设备拓扑', 'topology', 'iot_device_message_type_enum', 0, 'primary', '', '', '1', '2025-03-20 15:26:46', '1', '2025-03-20 15:26:46', '0'); | |
| 1328 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2184, 1, '设备属性设置', '1', 'iot_rule_scene_action_type_enum', 0, 'primary', '', '', '1', '2025-03-28 15:27:12', '"1"', '2025-07-06 10:37:33', '0'); | |
| 1329 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2185, 2, '设备服务调用', '2', 'iot_rule_scene_action_type_enum', 0, 'primary', '', '', '1', '2025-03-28 15:27:25', '"1"', '2025-07-06 10:37:41', '0'); | |
| 1330 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2186, 100, '告警触发', '100', 'iot_rule_scene_action_type_enum', 0, 'primary', '', '', '1', '2025-03-28 15:27:35', '"1"', '2025-07-06 10:37:50', '0'); | |
| 1354 | 1331 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3000, 16, '百川智能', 'BaiChuan', 'ai_platform', 0, '', '', '', '1', '2025-03-23 12:15:46', '1', '2025-03-23 12:15:46', '0'); |
| 1355 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3001, 50, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-05-02 12:01:15', '0'); | |
| 1332 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3001, 40, 'Vben5.0 Ant Design Schema 模版', '40', 'infra_codegen_front_type', 0, '', '', NULL, '1', '2025-04-23 21:47:47', '1', '2025-09-04 23:25:12', '0'); | |
| 1356 | 1333 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3002, 6, '支付宝余额', '6', 'brokerage_withdraw_type', 0, '', '', 'API 打款', '1', '2025-05-10 08:24:49', '1', '2025-05-10 08:24:49', '0'); |
| 1334 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3003, 1, 'Alink', 'Alink', 'iot_codec_type', 0, '', '', '阿里云 Alink', '1', '2025-06-12 22:56:06', '1', '2025-06-12 23:22:24', '0'); | |
| 1335 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3004, 3, 'WARN', '3', 'iot_alert_level', 0, 'warning', '', '', '1', '2025-06-27 20:32:22', '1', '2025-06-27 20:34:31', '0'); | |
| 1336 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3005, 1, 'INFO', '1', 'iot_alert_level', 0, 'primary', '', '', '1', '2025-06-27 20:33:28', '1', '2025-06-27 20:34:35', '0'); | |
| 1337 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3006, 5, 'ERROR', '5', 'iot_alert_level', 0, 'danger', '', '', '1', '2025-06-27 20:33:50', '1', '2025-06-27 20:33:50', '0'); | |
| 1338 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3007, 1, '短信', '1', 'iot_alert_receive_type', 0, '', '', '', '1', '2025-06-27 22:49:30', '1', '2025-06-27 22:49:30', '0'); | |
| 1339 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3008, 2, '邮箱', '2', 'iot_alert_receive_type', 0, '', '', '', '1', '2025-06-27 22:49:39', '1', '2025-06-27 22:50:07', '0'); | |
| 1340 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3009, 3, '站内信', '3', 'iot_alert_receive_type', 0, '', '', '', '1', '2025-06-27 22:50:20', '1', '2025-06-27 22:50:20', '0'); | |
| 1341 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3010, 1, '全部设备', '1', 'iot_ota_task_device_scope', 0, '', '', '', '1', '2025-07-02 09:43:09', '1', '2025-07-02 09:43:09', '0'); | |
| 1342 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3011, 2, '指定设备', '2', 'iot_ota_task_device_scope', 0, '', '', '', '1', '2025-07-02 09:43:15', '1', '2025-07-02 09:43:15', '0'); | |
| 1343 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3012, 10, '进行中', '10', 'iot_ota_task_status', 0, 'primary', '', '', '1', '2025-07-02 09:44:01', '"1"', '2025-07-02 09:44:21', '0'); | |
| 1344 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3013, 20, '已结束', '20', 'iot_ota_task_status', 0, 'success', '', '', '1', '2025-07-02 09:44:14', '"1"', '2025-07-02 23:56:12', '0'); | |
| 1345 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3014, 30, '已取消', '30', 'iot_ota_task_status', 0, 'danger', '', '', '1', '2025-07-02 09:44:36', '1', '2025-07-02 09:44:36', '0'); | |
| 1346 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3015, 0, '待推送', '0', 'iot_ota_task_record_status', 0, '', '', '', '1', '2025-07-02 09:45:16', '1', '2025-07-02 09:45:16', '0'); | |
| 1347 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3016, 10, '已推送', '10', 'iot_ota_task_record_status', 0, '', '', '', '1', '2025-07-02 09:45:25', '1', '2025-07-02 09:45:25', '0'); | |
| 1348 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3017, 20, '升级中', '20', 'iot_ota_task_record_status', 0, 'primary', '', '', '1', '2025-07-02 09:45:37', '1', '2025-07-02 09:45:37', '0'); | |
| 1349 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3018, 30, '升级成功', '30', 'iot_ota_task_record_status', 0, 'success', '', '', '1', '2025-07-02 09:45:47', '1', '2025-07-02 09:45:47', '0'); | |
| 1350 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3019, 40, '升级失败', '40', 'iot_ota_task_record_status', 0, 'danger', '', '', '1', '2025-07-02 09:46:02', '1', '2025-07-02 09:46:02', '0'); | |
| 1351 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3020, 50, '升级取消', '50', 'iot_ota_task_record_status', 0, 'warning', '', '', '1', '2025-07-02 09:46:09', '"1"', '2025-07-02 09:46:27', '0'); | |
| 1352 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3021, 1, 'IP 定位', '1', 'iot_location_type', 0, '', '', '', '1', '2025-07-05 09:56:46', '1', '2025-07-05 09:56:46', '0'); | |
| 1353 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3022, 2, '设备上报', '2', 'iot_location_type', 0, '', '', '', '1', '2025-07-05 09:56:57', '1', '2025-07-05 09:56:57', '0'); | |
| 1354 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3023, 3, '手动定位', '3', 'iot_location_type', 0, '', '', '', '1', '2025-07-05 09:57:05', '1', '2025-07-05 09:57:05', '0'); | |
| 1355 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3024, 3, '设备事件上报', '3', 'iot_rule_scene_trigger_type_enum', 0, '', '', '', '1', '2025-07-06 10:28:29', '1', '2025-07-06 10:28:29', '0'); | |
| 1356 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3025, 4, '设备服务调用', '4', 'iot_rule_scene_trigger_type_enum', 0, '', '', '', '1', '2025-07-06 10:28:35', '1', '2025-07-06 10:28:35', '0'); | |
| 1357 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3026, 100, '定时触发', '100', 'iot_rule_scene_trigger_type_enum', 0, '', '', '', '1', '2025-07-06 10:28:48', '1', '2025-07-06 10:28:48', '0'); | |
| 1358 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3027, 101, '告警恢复', '101', 'iot_rule_scene_action_type_enum', 0, '', '', '', '1', '2025-07-06 10:37:57', '1', '2025-07-06 10:37:57', '0'); | |
| 1359 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3028, 2, 'Anthropic', 'Anthropic', 'ai_platform', 0, '', '', '', '1', '2025-08-21 22:54:24', '1', '2025-08-21 22:57:58', '0'); | |
| 1360 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3029, 2, '谷歌 Gemini', 'Gemini', 'ai_platform', 0, '', '', '', '1', '2025-08-22 22:39:35', '1', '2025-08-22 22:44:49', '0'); | |
| 1361 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3030, 1, '文件系统', 'filesystem', 'ai_mcp_client_name', 0, '', '', '', '1', '2025-08-28 13:58:43', '1', '2025-08-28 21:19:42', '0'); | |
| 1362 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3031, 41, 'Vben5.0 Ant Design 标准模版', '41', 'infra_codegen_front_type', 0, '', '', '', '1', '2025-09-04 23:26:07', '1', '2025-09-04 23:26:07', '0'); | |
| 1363 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3032, 50, 'Vben5.0 Element Plus Schema 模版', '50', 'infra_codegen_front_type', 0, '', '', '', '1', '2025-09-04 23:26:38', '1', '2025-09-04 23:26:38', '0'); | |
| 1364 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3033, 51, 'Vben5.0 Element Plus 标准模版', '51', 'infra_codegen_front_type', 0, '', '', '', '1', '2025-09-04 23:26:49', '1', '2025-09-04 23:26:49', '0'); | |
| 1365 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3034, 1, 'ttt', 'tt', 'iot_ota_task_record_status', 0, 'success', '', NULL, '1', '2025-09-06 00:02:21', '1', '2025-09-06 00:02:31', '0'); | |
| 1366 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3035, 40, '支付宝小程序', '40', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', '0'); | |
| 1357 | 1367 | COMMIT; |
| 1358 | 1368 | -- @formatter:on |
| 1359 | 1369 | |
| 1360 | 1370 | DROP SEQUENCE IF EXISTS system_dict_data_seq; |
| 1361 | 1371 | CREATE SEQUENCE system_dict_data_seq |
| 1362 | - START 3003; | |
| 1372 | + START 3036; | |
| 1363 | 1373 | |
| 1364 | 1374 | -- ---------------------------- |
| 1365 | 1375 | -- Table structure for system_dict_type |
| 1366 | 1376 | -- ---------------------------- |
| 1367 | 1377 | DROP TABLE IF EXISTS system_dict_type; |
| 1368 | -CREATE TABLE system_dict_type | |
| 1369 | -( | |
| 1370 | - id int8 NOT NULL, | |
| 1371 | - name varchar(100) NOT NULL DEFAULT '', | |
| 1372 | - type varchar(100) NOT NULL DEFAULT '', | |
| 1373 | - status int2 NOT NULL DEFAULT 0, | |
| 1374 | - remark varchar(500) NULL DEFAULT NULL, | |
| 1375 | - creator varchar(64) NULL DEFAULT '', | |
| 1376 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1377 | - updater varchar(64) NULL DEFAULT '', | |
| 1378 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1379 | - deleted int2 NOT NULL DEFAULT 0, | |
| 1380 | - deleted_time timestamp NULL DEFAULT NULL | |
| 1378 | +CREATE TABLE system_dict_type ( | |
| 1379 | + id int8 NOT NULL, | |
| 1380 | + name varchar(100) NOT NULL DEFAULT '', | |
| 1381 | + type varchar(100) NOT NULL DEFAULT '', | |
| 1382 | + status int2 NOT NULL DEFAULT 0, | |
| 1383 | + remark varchar(500) NULL DEFAULT NULL, | |
| 1384 | + creator varchar(64) NULL DEFAULT '', | |
| 1385 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1386 | + updater varchar(64) NULL DEFAULT '', | |
| 1387 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1388 | + deleted int2 NOT NULL DEFAULT 0, | |
| 1389 | + deleted_time timestamp NULL DEFAULT NULL | |
| 1381 | 1390 | ); |
| 1382 | 1391 | |
| 1383 | -ALTER TABLE system_dict_type | |
| 1384 | - ADD CONSTRAINT pk_system_dict_type PRIMARY KEY (id); | |
| 1392 | +ALTER TABLE system_dict_type ADD CONSTRAINT pk_system_dict_type PRIMARY KEY (id); | |
| 1385 | 1393 | |
| 1386 | 1394 | COMMENT ON COLUMN system_dict_type.id IS '字典主键'; |
| 1387 | 1395 | COMMENT ON COLUMN system_dict_type.name IS '字典名称'; |
| ... | ... | @@ -1494,52 +1502,54 @@ INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_ti |
| 1494 | 1502 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (628, 'AI 写作类型', 'ai_write_type', 0, '', '1', '2024-07-10 21:25:29', '1', '2024-07-10 21:25:29', '0', '1970-01-01 00:00:00'); |
| 1495 | 1503 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (629, 'BPM 流程模型类型', 'bpm_model_type', 0, '', '1', '2024-08-26 15:21:43', '1', '2024-08-26 15:21:43', '0', '1970-01-01 00:00:00'); |
| 1496 | 1504 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (640, 'AI 模型类型', 'ai_model_type', 0, '', '1', '2025-03-03 12:24:07', '1', '2025-03-03 12:24:07', '0', '1970-01-01 00:00:00'); |
| 1497 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1000, 'IoT 数据格式', 'iot_data_format', 0, '', '1', '2024-08-10 11:52:58', '1', '2025-03-17 09:25:06', '0', '1970-01-01 00:00:00'); | |
| 1498 | 1505 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1001, 'IoT 产品设备类型', 'iot_product_device_type', 0, '', '1', '2024-08-10 11:54:30', '1', '2025-03-17 09:25:08', '0', '1970-01-01 00:00:00'); |
| 1499 | 1506 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1002, 'IoT 产品状态', 'iot_product_status', 0, '', '1', '2024-08-10 12:06:09', '1', '2025-03-17 09:25:10', '0', '1970-01-01 00:00:00'); |
| 1500 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1003, 'IoT 数据校验级别', 'iot_validate_type', 0, '', '1', '2024-09-06 20:05:13', '1', '2025-03-17 09:25:12', '0', '1970-01-01 00:00:00'); | |
| 1501 | 1507 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1004, 'IoT 联网方式', 'iot_net_type', 0, '', '1', '2024-09-06 22:04:13', '1', '2025-03-17 09:25:14', '0', '1970-01-01 00:00:00'); |
| 1502 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1005, 'IoT 接入网关协议', 'iot_protocol_type', 0, '', '1', '2024-09-06 22:20:17', '1', '2025-03-17 09:25:16', '0', '1970-01-01 00:00:00'); | |
| 1503 | 1508 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1006, 'IoT 设备状态', 'iot_device_state', 0, '', '1', '2024-09-21 08:12:55', '1', '2025-03-17 09:25:19', '0', '1970-01-01 00:00:00'); |
| 1504 | 1509 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1007, 'IoT 物模型功能类型', 'iot_thing_model_type', 0, '', '1', '2024-09-29 20:02:36', '1', '2025-03-17 09:25:24', '0', '1970-01-01 00:00:00'); |
| 1505 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1008, 'IoT 插件部署方式', 'iot_plugin_deploy_type', 0, '', '1', '2024-12-13 10:55:13', '1', '2025-03-17 09:25:27', '0', '1970-01-01 00:00:00'); | |
| 1506 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1009, 'IoT 插件状态', 'iot_plugin_status', 0, '', '1', '2024-12-13 11:05:34', '1', '2025-03-17 09:25:30', '0', '1970-01-01 00:00:00'); | |
| 1507 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1010, 'IoT 插件类型', 'iot_plugin_type', 0, '', '1', '2024-12-13 11:08:19', '1', '2025-03-17 09:25:32', '0', '1970-01-01 00:00:00'); | |
| 1508 | 1510 | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1011, 'IoT 物模型单位', 'iot_thing_model_unit', 0, '', '1', '2024-12-25 17:36:46', '1', '2025-03-17 09:25:35', '0', '1970-01-01 00:00:00'); |
| 1509 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1012, 'IoT 数据桥接的方向枚举', 'iot_data_bridge_direction_enum', 0, '', '1', '2025-03-09 12:37:40', '1', '2025-03-17 09:25:39', '0', '1970-01-01 00:00:00'); | |
| 1510 | -INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1013, 'IoT 数据桥梁的类型枚举', 'iot_data_bridge_type_enum', 0, '', '1', '2025-03-09 12:39:36', '1', '2025-04-06 17:09:46', '0', '1970-01-01 00:00:00'); | |
| 1511 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1013, 'IoT 数据流转目的的类型枚举', 'iot_data_sink_type_enum', 0, '', '1', '2025-03-09 12:39:36', '1', '2025-06-24 12:45:24', '0', '1970-01-01 00:00:00'); | |
| 1512 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1014, 'IoT 场景流转的触发类型枚举', 'iot_rule_scene_trigger_type_enum', 0, '', '1', '2025-03-20 14:59:44', '1', '2025-03-20 14:59:44', '0', '1970-01-01 00:00:00'); | |
| 1513 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1015, 'IoT 设备消息类型枚举', 'iot_device_message_type_enum', 0, '', '1', '2025-03-20 15:01:15', '1', '2025-03-20 15:01:15', '0', '1970-01-01 00:00:00'); | |
| 1514 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1016, 'IoT 规则场景的触发类型枚举', 'iot_rule_scene_action_type_enum', 0, '', '1', '2025-03-28 15:26:54', '1', '2025-03-28 15:29:13', '0', '1970-01-01 00:00:00'); | |
| 1515 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2000, 'IoT 数据格式', 'iot_codec_type', 0, 'IoT 编解码器类型', '1', '2025-06-12 22:55:46', '1', '2025-06-12 22:55:46', '0', '1970-01-01 00:00:00'); | |
| 1516 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2001, 'IoT 告警级别', 'iot_alert_level', 0, '', '1', '2025-06-27 20:30:57', '1', '2025-06-27 20:30:57', '0', '1970-01-01 00:00:00'); | |
| 1517 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2002, 'IoT 告警', 'iot_alert_receive_type', 0, '', '1', '2025-06-27 22:49:19', '1', '2025-06-27 22:49:19', '0', '1970-01-01 00:00:00'); | |
| 1518 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2003, 'IoT 固件设备范围', 'iot_ota_task_device_scope', 0, '', '1', '2025-07-02 09:42:49', '1', '2025-07-02 09:42:49', '0', '1970-01-01 00:00:00'); | |
| 1519 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2004, 'IoT 固件升级任务状态', 'iot_ota_task_status', 0, '', '1', '2025-07-02 09:43:43', '1', '2025-07-02 09:43:43', '0', '1970-01-01 00:00:00'); | |
| 1520 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2005, 'IoT 固件升级记录状态', 'iot_ota_task_record_status', 0, '', '1', '2025-07-02 09:45:02', '1', '2025-07-02 09:45:02', '0', '1970-01-01 00:00:00'); | |
| 1521 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2006, 'IoT 定位类型', 'iot_location_type', 0, '', '1', '2025-07-05 09:56:25', '1', '2025-07-05 09:56:25', '0', '1970-01-01 00:00:00'); | |
| 1522 | +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (2007, 'AI MCP 客户端名字', 'ai_mcp_client_name', 0, '', '1', '2025-08-28 13:57:40', '1', '2025-08-28 13:57:40', '0', '1970-01-01 00:00:00'); | |
| 1511 | 1523 | COMMIT; |
| 1512 | 1524 | -- @formatter:on |
| 1513 | 1525 | |
| 1514 | 1526 | DROP SEQUENCE IF EXISTS system_dict_type_seq; |
| 1515 | 1527 | CREATE SEQUENCE system_dict_type_seq |
| 1516 | - START 1014; | |
| 1528 | + START 2008; | |
| 1517 | 1529 | |
| 1518 | 1530 | -- ---------------------------- |
| 1519 | 1531 | -- Table structure for system_login_log |
| 1520 | 1532 | -- ---------------------------- |
| 1521 | 1533 | DROP TABLE IF EXISTS system_login_log; |
| 1522 | -CREATE TABLE system_login_log | |
| 1523 | -( | |
| 1524 | - id int8 NOT NULL, | |
| 1525 | - log_type int8 NOT NULL, | |
| 1526 | - trace_id varchar(64) NOT NULL DEFAULT '', | |
| 1527 | - user_id int8 NOT NULL DEFAULT 0, | |
| 1528 | - user_type int2 NOT NULL DEFAULT 0, | |
| 1529 | - username varchar(50) NOT NULL DEFAULT '', | |
| 1530 | - result int2 NOT NULL, | |
| 1531 | - user_ip varchar(50) NOT NULL, | |
| 1532 | - user_agent varchar(512) NOT NULL, | |
| 1533 | - creator varchar(64) NULL DEFAULT '', | |
| 1534 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1535 | - updater varchar(64) NULL DEFAULT '', | |
| 1536 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1537 | - deleted int2 NOT NULL DEFAULT 0, | |
| 1538 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 1534 | +CREATE TABLE system_login_log ( | |
| 1535 | + id int8 NOT NULL, | |
| 1536 | + log_type int8 NOT NULL, | |
| 1537 | + trace_id varchar(64) NOT NULL DEFAULT '', | |
| 1538 | + user_id int8 NOT NULL DEFAULT 0, | |
| 1539 | + user_type int2 NOT NULL DEFAULT 0, | |
| 1540 | + username varchar(50) NOT NULL DEFAULT '', | |
| 1541 | + result int2 NOT NULL, | |
| 1542 | + user_ip varchar(50) NOT NULL, | |
| 1543 | + user_agent varchar(512) NOT NULL, | |
| 1544 | + creator varchar(64) NULL DEFAULT '', | |
| 1545 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1546 | + updater varchar(64) NULL DEFAULT '', | |
| 1547 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1548 | + deleted int2 NOT NULL DEFAULT 0, | |
| 1549 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 1539 | 1550 | ); |
| 1540 | 1551 | |
| 1541 | -ALTER TABLE system_login_log | |
| 1542 | - ADD CONSTRAINT pk_system_login_log PRIMARY KEY (id); | |
| 1552 | +ALTER TABLE system_login_log ADD CONSTRAINT pk_system_login_log PRIMARY KEY (id); | |
| 1543 | 1553 | |
| 1544 | 1554 | COMMENT ON COLUMN system_login_log.id IS '访问ID'; |
| 1545 | 1555 | COMMENT ON COLUMN system_login_log.log_type IS '日志类型'; |
| ... | ... | @@ -1566,25 +1576,23 @@ CREATE SEQUENCE system_login_log_seq |
| 1566 | 1576 | -- Table structure for system_mail_account |
| 1567 | 1577 | -- ---------------------------- |
| 1568 | 1578 | DROP TABLE IF EXISTS system_mail_account; |
| 1569 | -CREATE TABLE system_mail_account | |
| 1570 | -( | |
| 1571 | - id int8 NOT NULL, | |
| 1572 | - mail varchar(255) NOT NULL, | |
| 1573 | - username varchar(255) NOT NULL, | |
| 1574 | - password varchar(255) NOT NULL, | |
| 1575 | - host varchar(255) NOT NULL, | |
| 1576 | - port int4 NOT NULL, | |
| 1577 | - ssl_enable bool NOT NULL DEFAULT '0', | |
| 1578 | - starttls_enable bool NOT NULL DEFAULT '0', | |
| 1579 | - creator varchar(64) NULL DEFAULT '', | |
| 1580 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1581 | - updater varchar(64) NULL DEFAULT '', | |
| 1582 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1583 | - deleted int2 NOT NULL DEFAULT 0 | |
| 1579 | +CREATE TABLE system_mail_account ( | |
| 1580 | + id int8 NOT NULL, | |
| 1581 | + mail varchar(255) NOT NULL, | |
| 1582 | + username varchar(255) NOT NULL, | |
| 1583 | + password varchar(255) NOT NULL, | |
| 1584 | + host varchar(255) NOT NULL, | |
| 1585 | + port int4 NOT NULL, | |
| 1586 | + ssl_enable bool NOT NULL DEFAULT '0', | |
| 1587 | + starttls_enable bool NOT NULL DEFAULT '0', | |
| 1588 | + creator varchar(64) NULL DEFAULT '', | |
| 1589 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1590 | + updater varchar(64) NULL DEFAULT '', | |
| 1591 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1592 | + deleted int2 NOT NULL DEFAULT 0 | |
| 1584 | 1593 | ); |
| 1585 | 1594 | |
| 1586 | -ALTER TABLE system_mail_account | |
| 1587 | - ADD CONSTRAINT pk_system_mail_account PRIMARY KEY (id); | |
| 1595 | +ALTER TABLE system_mail_account ADD CONSTRAINT pk_system_mail_account PRIMARY KEY (id); | |
| 1588 | 1596 | |
| 1589 | 1597 | COMMENT ON COLUMN system_mail_account.id IS '主键'; |
| 1590 | 1598 | COMMENT ON COLUMN system_mail_account.mail IS '邮箱'; |
| ... | ... | @@ -1607,7 +1615,7 @@ COMMENT ON TABLE system_mail_account IS '邮箱账号表'; |
| 1607 | 1615 | -- @formatter:off |
| 1608 | 1616 | BEGIN; |
| 1609 | 1617 | INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, '0', '0', '1', '2023-01-25 17:39:52', '1', '2025-04-04 16:34:40', '0'); |
| 1610 | -INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, '1', '0', '1', '2023-01-26 01:26:03', '1', '2023-04-12 22:39:38', '0'); | |
| 1618 | +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, '1', '0', '1', '2023-01-26 01:26:03', '1', '2025-07-26 21:57:55', '0'); | |
| 1611 | 1619 | INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (3, '76854114@qq.com', '3335', '11234', 'yunai1.cn', 466, '0', '0', '1', '2023-01-27 15:06:38', '1', '2023-01-27 07:08:36', '1'); |
| 1612 | 1620 | INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (4, '7685413x@qq.com', '2', '3', '4', 5, '1', '0', '1', '2023-04-12 23:05:06', '1', '2023-04-12 15:05:11', '1'); |
| 1613 | 1621 | COMMIT; |
| ... | ... | @@ -1621,38 +1629,40 @@ CREATE SEQUENCE system_mail_account_seq |
| 1621 | 1629 | -- Table structure for system_mail_log |
| 1622 | 1630 | -- ---------------------------- |
| 1623 | 1631 | DROP TABLE IF EXISTS system_mail_log; |
| 1624 | -CREATE TABLE system_mail_log | |
| 1625 | -( | |
| 1626 | - id int8 NOT NULL, | |
| 1627 | - user_id int8 NULL DEFAULT NULL, | |
| 1628 | - user_type int2 NULL DEFAULT NULL, | |
| 1629 | - to_mail varchar(255) NOT NULL, | |
| 1630 | - account_id int8 NOT NULL, | |
| 1631 | - from_mail varchar(255) NOT NULL, | |
| 1632 | - template_id int8 NOT NULL, | |
| 1633 | - template_code varchar(63) NOT NULL, | |
| 1634 | - template_nickname varchar(255) NULL DEFAULT NULL, | |
| 1635 | - template_title varchar(255) NOT NULL, | |
| 1636 | - template_content varchar(10240) NOT NULL, | |
| 1637 | - template_params varchar(255) NOT NULL, | |
| 1638 | - send_status int2 NOT NULL DEFAULT 0, | |
| 1639 | - send_time timestamp NULL DEFAULT NULL, | |
| 1640 | - send_message_id varchar(255) NULL DEFAULT NULL, | |
| 1641 | - send_exception varchar(4096) NULL DEFAULT NULL, | |
| 1642 | - creator varchar(64) NULL DEFAULT '', | |
| 1643 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1644 | - updater varchar(64) NULL DEFAULT '', | |
| 1645 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1646 | - deleted int2 NOT NULL DEFAULT 0 | |
| 1632 | +CREATE TABLE system_mail_log ( | |
| 1633 | + id int8 NOT NULL, | |
| 1634 | + user_id int8 NULL DEFAULT NULL, | |
| 1635 | + user_type int2 NULL DEFAULT NULL, | |
| 1636 | + to_mails varchar(1024) NOT NULL, | |
| 1637 | + cc_mails varchar(1024) NULL DEFAULT NULL, | |
| 1638 | + bcc_mails varchar(1024) NULL DEFAULT NULL, | |
| 1639 | + account_id int8 NOT NULL, | |
| 1640 | + from_mail varchar(255) NOT NULL, | |
| 1641 | + template_id int8 NOT NULL, | |
| 1642 | + template_code varchar(63) NOT NULL, | |
| 1643 | + template_nickname varchar(255) NULL DEFAULT NULL, | |
| 1644 | + template_title varchar(255) NOT NULL, | |
| 1645 | + template_content text NOT NULL, | |
| 1646 | + template_params varchar(255) NOT NULL, | |
| 1647 | + send_status int2 NOT NULL DEFAULT 0, | |
| 1648 | + send_time timestamp NULL DEFAULT NULL, | |
| 1649 | + send_message_id varchar(255) NULL DEFAULT NULL, | |
| 1650 | + send_exception varchar(4096) NULL DEFAULT NULL, | |
| 1651 | + creator varchar(64) NULL DEFAULT '', | |
| 1652 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1653 | + updater varchar(64) NULL DEFAULT '', | |
| 1654 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1655 | + deleted int2 NOT NULL DEFAULT 0 | |
| 1647 | 1656 | ); |
| 1648 | 1657 | |
| 1649 | -ALTER TABLE system_mail_log | |
| 1650 | - ADD CONSTRAINT pk_system_mail_log PRIMARY KEY (id); | |
| 1658 | +ALTER TABLE system_mail_log ADD CONSTRAINT pk_system_mail_log PRIMARY KEY (id); | |
| 1651 | 1659 | |
| 1652 | 1660 | COMMENT ON COLUMN system_mail_log.id IS '编号'; |
| 1653 | 1661 | COMMENT ON COLUMN system_mail_log.user_id IS '用户编号'; |
| 1654 | 1662 | COMMENT ON COLUMN system_mail_log.user_type IS '用户类型'; |
| 1655 | -COMMENT ON COLUMN system_mail_log.to_mail IS '接收邮箱地址'; | |
| 1663 | +COMMENT ON COLUMN system_mail_log.to_mails IS '接收邮箱地址'; | |
| 1664 | +COMMENT ON COLUMN system_mail_log.cc_mails IS '抄送邮箱地址'; | |
| 1665 | +COMMENT ON COLUMN system_mail_log.bcc_mails IS '密送邮箱地址'; | |
| 1656 | 1666 | COMMENT ON COLUMN system_mail_log.account_id IS '邮箱账号编号'; |
| 1657 | 1667 | COMMENT ON COLUMN system_mail_log.from_mail IS '发送邮箱地址'; |
| 1658 | 1668 | COMMENT ON COLUMN system_mail_log.template_id IS '模板编号'; |
| ... | ... | @@ -1680,27 +1690,25 @@ CREATE SEQUENCE system_mail_log_seq |
| 1680 | 1690 | -- Table structure for system_mail_template |
| 1681 | 1691 | -- ---------------------------- |
| 1682 | 1692 | DROP TABLE IF EXISTS system_mail_template; |
| 1683 | -CREATE TABLE system_mail_template | |
| 1684 | -( | |
| 1685 | - id int8 NOT NULL, | |
| 1686 | - name varchar(63) NOT NULL, | |
| 1687 | - code varchar(63) NOT NULL, | |
| 1688 | - account_id int8 NOT NULL, | |
| 1689 | - nickname varchar(255) NULL DEFAULT NULL, | |
| 1690 | - title varchar(255) NOT NULL, | |
| 1691 | - content varchar(10240) NOT NULL, | |
| 1692 | - params varchar(255) NOT NULL, | |
| 1693 | - status int2 NOT NULL, | |
| 1694 | - remark varchar(255) NULL DEFAULT NULL, | |
| 1695 | - creator varchar(64) NULL DEFAULT '', | |
| 1696 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1697 | - updater varchar(64) NULL DEFAULT '', | |
| 1698 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1699 | - deleted int2 NOT NULL DEFAULT 0 | |
| 1693 | +CREATE TABLE system_mail_template ( | |
| 1694 | + id int8 NOT NULL, | |
| 1695 | + name varchar(63) NOT NULL, | |
| 1696 | + code varchar(63) NOT NULL, | |
| 1697 | + account_id int8 NOT NULL, | |
| 1698 | + nickname varchar(255) NULL DEFAULT NULL, | |
| 1699 | + title varchar(255) NOT NULL, | |
| 1700 | + content varchar(10240) NOT NULL, | |
| 1701 | + params varchar(255) NOT NULL, | |
| 1702 | + status int2 NOT NULL, | |
| 1703 | + remark varchar(255) NULL DEFAULT NULL, | |
| 1704 | + creator varchar(64) NULL DEFAULT '', | |
| 1705 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1706 | + updater varchar(64) NULL DEFAULT '', | |
| 1707 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1708 | + deleted int2 NOT NULL DEFAULT 0 | |
| 1700 | 1709 | ); |
| 1701 | 1710 | |
| 1702 | -ALTER TABLE system_mail_template | |
| 1703 | - ADD CONSTRAINT pk_system_mail_template PRIMARY KEY (id); | |
| 1711 | +ALTER TABLE system_mail_template ADD CONSTRAINT pk_system_mail_template PRIMARY KEY (id); | |
| 1704 | 1712 | |
| 1705 | 1713 | COMMENT ON COLUMN system_mail_template.id IS '编号'; |
| 1706 | 1714 | COMMENT ON COLUMN system_mail_template.name IS '模板名称'; |
| ... | ... | @@ -1725,8 +1733,8 @@ COMMENT ON TABLE system_mail_template IS '邮件模版表'; |
| 1725 | 1733 | -- @formatter:off |
| 1726 | 1734 | BEGIN; |
| 1727 | 1735 | INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (13, '后台用户短信登录', 'admin-sms-login', 1, '奥特曼', '你猜我猜', '<p>您的验证码是{code},名字是{name}</p>', '["code","name"]', 0, '3', '1', '2021-10-11 08:10:00', '1', '2023-12-02 19:51:14', '0'); |
| 1728 | -INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (14, '测试模版', 'test_01', 2, '芋艿', '一个标题', '<p>你是 {key01} 吗?</p><p><br></p><p>是的话,赶紧 {key02} 一下!</p>', '["key01","key02"]', 0, NULL, '1', '2023-01-26 01:27:40', '1', '2023-01-27 10:32:16', '0'); | |
| 1729 | -INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (15, '3', '2', 2, '7', '4', '<p>45</p>', '[]', 1, '80', '1', '2023-01-27 15:50:35', '1', '2023-01-27 16:34:49', '0'); | |
| 1736 | +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (14, '测试模版', 'test_01', 2, '芋艿', '一个标题', '<p>你是 {key01} 吗?</p><p><br></p><p>是的话,赶紧 {key02} 一下!</p>', '["key01","key02"]', 0, NULL, '1', '2023-01-26 01:27:40', '1', '2025-07-26 21:48:45', '0'); | |
| 1737 | +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (15, '3', '2', 2, '7', '4', '<p>45</p>', '[]', 1, '80', '1', '2023-01-27 15:50:35', '1', '2025-07-26 21:47:49', '1'); | |
| 1730 | 1738 | COMMIT; |
| 1731 | 1739 | -- @formatter:on |
| 1732 | 1740 | |
| ... | ... | @@ -1738,31 +1746,29 @@ CREATE SEQUENCE system_mail_template_seq |
| 1738 | 1746 | -- Table structure for system_menu |
| 1739 | 1747 | -- ---------------------------- |
| 1740 | 1748 | DROP TABLE IF EXISTS system_menu; |
| 1741 | -CREATE TABLE system_menu | |
| 1742 | -( | |
| 1743 | - id int8 NOT NULL, | |
| 1744 | - name varchar(50) NOT NULL, | |
| 1745 | - permission varchar(100) NOT NULL DEFAULT '', | |
| 1746 | - type int2 NOT NULL, | |
| 1747 | - sort int4 NOT NULL DEFAULT 0, | |
| 1748 | - parent_id int8 NOT NULL DEFAULT 0, | |
| 1749 | - path varchar(200) NULL DEFAULT '', | |
| 1750 | - icon varchar(100) NULL DEFAULT '#', | |
| 1751 | - component varchar(255) NULL DEFAULT NULL, | |
| 1752 | - component_name varchar(255) NULL DEFAULT NULL, | |
| 1753 | - status int2 NOT NULL DEFAULT 0, | |
| 1754 | - visible bool NOT NULL DEFAULT '1', | |
| 1755 | - keep_alive bool NOT NULL DEFAULT '1', | |
| 1756 | - always_show bool NOT NULL DEFAULT '1', | |
| 1757 | - creator varchar(64) NULL DEFAULT '', | |
| 1758 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1759 | - updater varchar(64) NULL DEFAULT '', | |
| 1760 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1761 | - deleted int2 NOT NULL DEFAULT 0 | |
| 1749 | +CREATE TABLE system_menu ( | |
| 1750 | + id int8 NOT NULL, | |
| 1751 | + name varchar(50) NOT NULL, | |
| 1752 | + permission varchar(100) NOT NULL DEFAULT '', | |
| 1753 | + type int2 NOT NULL, | |
| 1754 | + sort int4 NOT NULL DEFAULT 0, | |
| 1755 | + parent_id int8 NOT NULL DEFAULT 0, | |
| 1756 | + path varchar(200) NULL DEFAULT '', | |
| 1757 | + icon varchar(100) NULL DEFAULT '#', | |
| 1758 | + component varchar(255) NULL DEFAULT NULL, | |
| 1759 | + component_name varchar(255) NULL DEFAULT NULL, | |
| 1760 | + status int2 NOT NULL DEFAULT 0, | |
| 1761 | + visible bool NOT NULL DEFAULT '1', | |
| 1762 | + keep_alive bool NOT NULL DEFAULT '1', | |
| 1763 | + always_show bool NOT NULL DEFAULT '1', | |
| 1764 | + creator varchar(64) NULL DEFAULT '', | |
| 1765 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1766 | + updater varchar(64) NULL DEFAULT '', | |
| 1767 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 1768 | + deleted int2 NOT NULL DEFAULT 0 | |
| 1762 | 1769 | ); |
| 1763 | 1770 | |
| 1764 | -ALTER TABLE system_menu | |
| 1765 | - ADD CONSTRAINT pk_system_menu PRIMARY KEY (id); | |
| 1771 | +ALTER TABLE system_menu ADD CONSTRAINT pk_system_menu PRIMARY KEY (id); | |
| 1766 | 1772 | |
| 1767 | 1773 | COMMENT ON COLUMN system_menu.id IS '菜单ID'; |
| 1768 | 1774 | COMMENT ON COLUMN system_menu.name IS '菜单名称'; |
| ... | ... | @@ -2002,7 +2008,7 @@ INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon |
| 2002 | 2008 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2010, '品牌创建', 'product:brand:create', 3, 2, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); |
| 2003 | 2009 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2011, '品牌更新', 'product:brand:update', 3, 3, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); |
| 2004 | 2010 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2012, '品牌删除', 'product:brand:delete', 3, 4, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); |
| 2005 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, '1', '1', '1', '', '2022-07-30 14:22:58', '1', '2023-08-21 10:27:01', '0'); | |
| 2011 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, '1', '1', '1', '', '2022-07-30 14:22:58', '1', '2025-10-08 10:36:52', '0'); | |
| 2006 | 2012 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2015, '商品查询', 'product:spu:query', 3, 1, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); |
| 2007 | 2013 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2016, '商品创建', 'product:spu:create', 3, 2, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); |
| 2008 | 2014 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2017, '商品更新', 'product:spu:update', 3, 3, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); |
| ... | ... | @@ -2642,55 +2648,47 @@ INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon |
| 2642 | 2648 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2924, '工具删除', 'ai:tool:delete', 3, 4, 2920, '', '', '', NULL, 0, '1', '1', '1', '', '2025-03-14 11:19:29', '', '2025-03-14 11:19:29', '0'); |
| 2643 | 2649 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4000, 'IoT 物联网', '', 1, 500, 0, '/iot', 'fa-solid:hdd', '', '', 0, '1', '1', '1', '1', '2024-08-10 09:55:28', '1', '2024-12-07 15:58:34', '0'); |
| 2644 | 2650 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4001, '设备接入', '', 1, 2, 4000, 'device', 'ep:platform', '', '', 0, '1', '1', '1', '1', '2024-08-10 09:57:56', '1', '2025-02-27 08:39:49', '0'); |
| 2645 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4002, '产品管理', '', 2, 2, 4001, 'product', 'fa-solid:tools', 'iot/product/product/index', 'IoTProduct', 0, '1', '1', '1', '', '2024-08-10 02:38:02', '1', '2024-12-07 18:47:53', '0'); | |
| 2651 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4002, '产品管理', '', 2, 1, 4001, 'product', 'fa-solid:tools', 'iot/product/product/index', 'IoTProduct', 0, '1', '1', '1', '', '2024-08-10 02:38:02', '1', '2025-06-15 20:56:06', '0'); | |
| 2646 | 2652 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4003, '产品查询', 'iot:product:query', 3, 1, 4002, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 02:38:02', '', '2024-12-07 15:55:00', '0'); |
| 2647 | 2653 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4004, '产品创建', 'iot:product:create', 3, 2, 4002, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 02:38:02', '', '2024-12-07 15:55:03', '0'); |
| 2648 | 2654 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4005, '产品更新', 'iot:product:update', 3, 3, 4002, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 02:38:02', '', '2024-12-07 15:55:05', '0'); |
| 2649 | 2655 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4006, '产品删除', 'iot:product:delete', 3, 4, 4002, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 02:38:02', '', '2024-12-07 15:55:06', '0'); |
| 2650 | 2656 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4007, '产品导出', 'iot:product:export', 3, 5, 4002, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 02:38:02', '', '2024-12-07 15:55:13', '0'); |
| 2651 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4008, '设备管理', '', 2, 4, 4001, 'device', 'fa:mobile', 'iot/device/device/index', 'IoTDevice', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2024-12-14 11:39:30', '0'); | |
| 2657 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4008, '设备管理', '', 2, 2, 4001, 'device', 'fa:mobile', 'iot/device/device/index', 'IoTDevice', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2025-06-15 20:56:10', '0'); | |
| 2652 | 2658 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4009, '设备查询', 'iot:device:query', 3, 1, 4008, '', '', '', '', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2024-12-07 15:55:40', '0'); |
| 2653 | 2659 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4010, '设备创建', 'iot:device:create', 3, 2, 4008, '', '', '', '', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2024-12-07 15:55:41', '0'); |
| 2654 | 2660 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4011, '设备更新', 'iot:device:update', 3, 3, 4008, '', '', '', '', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2024-12-07 15:55:42', '0'); |
| 2655 | 2661 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4012, '设备删除', 'iot:device:delete', 3, 4, 4008, '', '', '', '', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2024-12-07 15:55:43', '0'); |
| 2656 | 2662 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4013, '设备导出', 'iot:device:export', 3, 5, 4008, '', '', '', '', 0, '1', '1', '1', '', '2024-09-16 18:48:19', '1', '2024-12-07 15:55:44', '0'); |
| 2657 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4014, '产品分类', '', 2, 1, 4001, 'product-category', 'ep:notebook', 'iot/product/category/index', 'IotProductCategory', 0, '1', '1', '1', '', '2024-12-07 16:01:35', '1', '2024-12-07 16:31:52', '0'); | |
| 2663 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4014, '产品分类', '', 2, 3, 4001, 'product-category', 'ep:notebook', 'iot/product/category/index', 'IotProductCategory', 0, '1', '1', '1', '', '2024-12-07 16:01:35', '1', '2025-06-15 20:56:39', '0'); | |
| 2658 | 2664 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4015, '产品分类查询', 'iot:product-category:query', 3, 1, 4014, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-07 16:01:35', '', '2024-12-07 16:01:35', '0'); |
| 2659 | 2665 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4016, '产品分类创建', 'iot:product-category:create', 3, 2, 4014, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-07 16:01:35', '', '2024-12-07 16:01:35', '0'); |
| 2660 | 2666 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4017, '产品分类更新', 'iot:product-category:update', 3, 3, 4014, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-07 16:01:35', '', '2024-12-07 16:01:35', '0'); |
| 2661 | 2667 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4018, '产品分类删除', 'iot:product-category:delete', 3, 4, 4014, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-07 16:01:35', '', '2024-12-07 16:01:35', '0'); |
| 2662 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4025, '插件管理', '', 2, 5, 4047, 'plugin-config', 'ep:folder-opened', 'iot/plugin/index', 'IoTPlugin', 0, '1', '1', '1', '', '2024-12-09 21:25:06', '1', '2025-02-05 22:23:12', '0'); | |
| 2663 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4026, '插件查询', 'iot:plugin-config:query', 3, 1, 4025, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-09 21:25:06', '', '2025-02-05 21:23:20', '0'); | |
| 2664 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4027, '插件创建', 'iot:plugin-config:create', 3, 2, 4025, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-09 21:25:06', '', '2025-02-05 21:23:16', '0'); | |
| 2665 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4028, '插件更新', 'iot:plugin-config:update', 3, 3, 4025, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-09 21:25:06', '', '2025-02-05 21:23:12', '0'); | |
| 2666 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4029, '插件删除', 'iot:plugin-config:delete', 3, 4, 4025, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-09 21:25:06', '', '2025-02-05 21:23:09', '0'); | |
| 2667 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4030, '插件导出', 'iot:plugin-config:export', 3, 5, 4025, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-09 21:25:06', '', '2025-02-05 21:23:06', '0'); | |
| 2668 | 2668 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4031, '设备分组', '', 2, 3, 4001, 'device-group', 'fa-solid:layer-group', 'iot/device/group/index', 'IotDeviceGroup', 0, '1', '1', '1', '', '2024-12-14 17:08:29', '1', '2024-12-14 17:09:17', '0'); |
| 2669 | 2669 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4032, '设备分组查询', 'iot:device-group:query', 3, 1, 4031, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-14 17:08:29', '', '2024-12-14 17:08:29', '0'); |
| 2670 | 2670 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4033, '设备分组创建', 'iot:device-group:create', 3, 2, 4031, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-14 17:08:29', '', '2024-12-14 17:08:29', '0'); |
| 2671 | 2671 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4034, '设备分组更新', 'iot:device-group:update', 3, 3, 4031, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-14 17:08:29', '', '2024-12-14 17:08:29', '0'); |
| 2672 | 2672 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4035, '设备分组删除', 'iot:device-group:delete', 3, 4, 4031, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-14 17:08:29', '', '2024-12-14 17:08:29', '0'); |
| 2673 | 2673 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4036, '设备导入', 'iot:device:import', 3, 6, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2024-12-15 10:35:47', '1', '2024-12-15 10:35:47', '0'); |
| 2674 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4037, '产品物模型', '', 2, 2, 4001, 'thing-model', 'ep:mostly-cloudy', 'iot/thingmodel/index', 'IoTThingModel', 0, '0', '0', '0', '', '2024-12-16 17:17:50', '1', '2024-12-27 11:03:37', '0'); | |
| 2674 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4037, '产品物模型', '', 2, 99, 4001, 'thing-model', 'ep:mostly-cloudy', 'iot/thingmodel/index', 'IoTThingModel', 0, '0', '0', '0', '', '2024-12-16 17:17:50', '1', '2025-06-15 20:56:19', '0'); | |
| 2675 | 2675 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4038, '产品物模型功能查询', 'iot:thing-model:query', 3, 1, 4037, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-16 17:17:51', '', '2025-03-17 09:14:54', '0'); |
| 2676 | 2676 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4039, '产品物模型功能创建', 'iot:thing-model:create', 3, 2, 4037, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-16 17:17:52', '', '2025-03-17 09:14:58', '0'); |
| 2677 | 2677 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4040, '产品物模型功能更新', 'iot:thing-model:update', 3, 3, 4037, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-16 17:17:52', '', '2025-03-17 09:15:03', '0'); |
| 2678 | 2678 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4041, '产品物模型功能删除', 'iot:thing-model:delete', 3, 4, 4037, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-16 17:17:52', '', '2025-03-17 09:15:06', '0'); |
| 2679 | 2679 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4042, '产品物模型功能导出', 'iot:thing-model:export', 3, 5, 4037, '', '', '', NULL, 0, '1', '1', '1', '', '2024-12-16 17:17:53', '', '2025-03-17 09:15:09', '0'); |
| 2680 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4043, '设备上行', 'iot:device:upstream', 3, 7, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2025-01-28 04:40:16', '1', '2025-01-31 22:45:53', '0'); | |
| 2680 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4043, '设备消息发送', 'iot:device:message-send', 3, 12, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2025-01-28 04:40:16', '1', '2025-06-14 14:09:26', '0'); | |
| 2681 | 2681 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4044, '设备属性查询', 'iot:device:property-query', 3, 10, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2025-01-28 11:52:54', '1', '2025-01-28 11:52:54', '0'); |
| 2682 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4045, '设备日志查询', 'iot:device:log-query', 3, 11, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2025-01-28 11:53:22', '1', '2025-01-28 11:53:22', '0'); | |
| 2683 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4046, '设备下行', 'iot:device:downstream', 3, 8, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2025-01-31 22:46:11', '1', '2025-01-31 22:46:11', '0'); | |
| 2684 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4047, '运维管理', '', 1, 2, 4000, 'operations', 'fa:cog', '', '', 0, '1', '1', '1', '1', '2025-02-05 22:21:37', '1', '2025-02-05 22:22:53', '0'); | |
| 2682 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4045, '设备消息查询', 'iot:device:message-query', 3, 11, 4008, '', '', '', '', 0, '1', '1', '1', '1', '2025-01-28 11:53:22', '1', '2025-06-14 11:11:20', '0'); | |
| 2683 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4047, '运维管理', '', 1, 4, 4000, 'operation', 'fa:align-center', '', '', 0, '1', '1', '1', '1', '2025-02-05 22:21:37', '"1"', '2025-06-30 20:12:48', '0'); | |
| 2685 | 2684 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4048, '规则引擎', '', 1, 3, 4000, 'rule', 'fa-solid:cogs', '', '', 0, '1', '1', '1', '1', '2025-02-11 14:10:54', '1', '2025-02-11 14:10:54', '0'); |
| 2686 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4049, '场景联动', '', 2, 1, 4048, 'scene', 'ep:link', 'iot/rule/scene/index', 'Scene', 0, '1', '1', '1', '1', '2025-02-11 14:12:44', '1', '2025-02-12 10:15:36', '0'); | |
| 2687 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4050, 'IoT首页', '', 2, 1, 4000, 'home', 'ep:home-filled', 'iot/home/index', 'IotHome', 0, '1', '1', '1', '1', '2025-02-27 08:39:35', '1', '2025-02-27 08:40:28', '0'); | |
| 2688 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4051, '数据桥梁', '', 2, 0, 4048, 'data-bridge', 'ep:guide', 'iot/rule/databridge/index', 'IotDataBridge', 0, '1', '1', '1', '', '2025-03-09 13:47:11', '1', '2025-03-09 13:47:51', '0'); | |
| 2689 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4052, 'IoT 数据桥梁查询', 'iot:data-bridge:query', 3, 1, 4051, '', '', '', NULL, 0, '1', '1', '1', '', '2025-03-09 13:47:11', '', '2025-03-09 13:47:11', '0'); | |
| 2690 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4053, 'IoT 数据桥梁创建', 'iot:data-bridge:create', 3, 2, 4051, '', '', '', NULL, 0, '1', '1', '1', '', '2025-03-09 13:47:11', '', '2025-03-09 13:47:11', '0'); | |
| 2691 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4054, 'IoT 数据桥梁更新', 'iot:data-bridge:update', 3, 3, 4051, '', '', '', NULL, 0, '1', '1', '1', '', '2025-03-09 13:47:11', '', '2025-03-09 13:47:11', '0'); | |
| 2692 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4055, 'IoT 数据桥梁删除', 'iot:data-bridge:delete', 3, 4, 4051, '', '', '', NULL, 0, '1', '1', '1', '', '2025-03-09 13:47:12', '', '2025-03-09 13:47:12', '0'); | |
| 2693 | -INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4056, 'IoT 数据桥梁导出', 'iot:data-bridge:export', 3, 5, 4051, '', '', '', NULL, 0, '1', '1', '1', '', '2025-03-09 13:47:12', '', '2025-03-09 13:47:12', '0'); | |
| 2685 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4049, '场景联动', '', 2, 1, 4048, 'scene', 'ep:link', 'iot/rule/scene/index', 'IoTSceneRule', 0, '1', '1', '1', '1', '2025-02-11 14:12:44', '"1"', '2025-08-09 15:38:32', '0'); | |
| 2686 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4050, 'IoT 首页', '', 2, 1, 4000, 'home', 'ep:home-filled', 'iot/home/index', 'IotHome', 0, '1', '1', '1', '1', '2025-02-27 08:39:35', '1', '2025-06-24 14:22:50', '0'); | |
| 2687 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4051, '数据流转', '', 2, 2, 4048, 'data-rule', 'ep:guide', 'iot/rule/data/index', 'IoTDataRule', 0, '1', '1', '1', '', '2025-03-09 13:47:11', '"1"', '2025-08-09 15:38:37', '0'); | |
| 2688 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4052, '数据流转规则查询', 'iot:data-rule:query', 3, 1, 4051, '', '', '', '', 0, '1', '1', '1', '', '2025-03-09 13:47:11', '1', '2025-06-24 20:48:04', '0'); | |
| 2689 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4053, '数据流转规则创建', 'iot:data-rule:create', 3, 2, 4051, '', '', '', '', 0, '1', '1', '1', '', '2025-03-09 13:47:11', '1', '2025-06-24 20:48:08', '0'); | |
| 2690 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4054, '数据流转规则更新', 'iot:data-rule:update', 3, 3, 4051, '', '', '', '', 0, '1', '1', '1', '', '2025-03-09 13:47:11', '1', '2025-06-24 20:48:11', '0'); | |
| 2691 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (4055, '数据流转规则删除', 'iot:data-rule:delete', 3, 4, 4051, '', '', '', '', 0, '1', '1', '1', '', '2025-03-09 13:47:12', '1', '2025-06-24 20:48:15', '0'); | |
| 2694 | 2692 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5000, 'AI 工作流', '', 2, 5, 2758, 'workflow', 'fa:hand-grab-o', 'ai/workflow/index.vue', 'AiWorkflow', 0, '1', '1', '1', '1', '2025-03-25 09:50:27', '1', '2025-05-03 18:55:12', '0'); |
| 2695 | 2693 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5001, 'AI 工作流查询', 'ai:workflow:query', 3, 1, 5000, '', '', '', '', 0, '1', '1', '1', '1', '2025-03-25 09:51:11', '1', '2025-03-25 09:51:11', '0'); |
| 2696 | 2694 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5002, 'AI 工作流创建', 'ai:workflow:create', 3, 2, 5000, '', '', '', '', 0, '1', '1', '1', '1', '2025-03-25 09:51:28', '1', '2025-03-25 09:51:28', '0'); |
| ... | ... | @@ -2701,34 +2699,65 @@ INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon |
| 2701 | 2699 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5010, '租户切换', 'system:tenant:visit', 3, 999, 1138, '', '', '', '', 0, '1', '1', '1', '1', '2025-05-05 15:25:32', '1', '2025-05-05 15:25:32', '0'); |
| 2702 | 2700 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5011, '转账订单查询', 'pay:transfer:query', 3, 1, 2559, '', '', '', '', 0, '1', '1', '1', '1', '2025-05-08 12:46:53', '1', '2025-05-08 12:46:53', '0'); |
| 2703 | 2701 | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5012, '转账订单导出', 'pay:transfer:export', 3, 2, 2559, '', '', '', '', 0, '1', '1', '1', '1', '2025-05-10 17:00:28', '1', '2025-05-10 17:00:28', '0'); |
| 2702 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5013, '场景联动查询', 'iot:rule-scene:query', 3, 1, 4049, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-20 16:53:01', '1', '2025-06-20 16:53:01', '0'); | |
| 2703 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5014, '场景联动创建', 'iot:rule-scene:create', 3, 2, 4049, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-20 16:54:31', '1', '2025-06-20 16:54:31', '0'); | |
| 2704 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5015, '场景联动更新', 'iot:rule-scene:update', 3, 3, 4049, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-20 16:54:47', '1', '2025-06-20 16:54:47', '0'); | |
| 2705 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5016, '场景联动删除', 'iot:rule-scene:delete', 3, 4, 4049, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-20 16:55:04', '1', '2025-06-20 16:55:27', '0'); | |
| 2706 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5017, '场景联动导出', 'iot:rule-scene:export', 3, 5, 4049, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-20 16:57:56', '1', '2025-06-20 16:57:56', '0'); | |
| 2707 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5018, '数据流转目的查询', 'iot:data-sink:query', 3, 11, 4051, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-24 20:48:40', '1', '2025-06-24 20:48:40', '0'); | |
| 2708 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5019, '数据流转目的创建', 'iot:data-sink:create', 3, 12, 4051, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-24 20:48:57', '1', '2025-06-24 20:48:57', '0'); | |
| 2709 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5020, '数据流转目的更新', 'iot:data-sink:update', 3, 13, 4051, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-24 20:49:10', '1', '2025-06-24 20:49:10', '0'); | |
| 2710 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5021, '数据流转目的删除', 'iot:data-sink:delete', 3, 14, 4051, '', '', '', '', 0, '1', '1', '1', '1', '2025-06-24 20:49:23', '1', '2025-06-24 20:49:23', '0'); | |
| 2711 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5022, '告警配置', '', 2, 1, 5028, 'config', 'fa:connectdevelop', 'iot/alert/config/index', 'IotAlertConfig', 0, '1', '1', '1', '', '2025-06-27 14:28:59', '1', '2025-06-27 22:31:19', '0'); | |
| 2712 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5023, '告警配置查询', 'iot:alert-config:query', 3, 1, 5022, '', '', '', '', 0, '1', '1', '1', '', '2025-06-27 14:28:59', '1', '2025-06-28 16:00:31', '0'); | |
| 2713 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5024, '告警配置创建', 'iot:alert-config:create', 3, 2, 5022, '', '', '', '', 0, '1', '1', '1', '', '2025-06-27 14:28:59', '1', '2025-06-28 16:00:35', '0'); | |
| 2714 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5025, '告警配置更新', 'iot:alert-config:update', 3, 3, 5022, '', '', '', '', 0, '1', '1', '1', '', '2025-06-27 14:28:59', '1', '2025-06-28 16:00:43', '0'); | |
| 2715 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5026, '告警配置删除', 'iot:alert-config:delete', 3, 4, 5022, '', '', '', '', 0, '1', '1', '1', '', '2025-06-27 14:29:00', '1', '2025-06-28 16:00:39', '0'); | |
| 2716 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5028, '告警中心', '', 1, 3, 4000, 'alert', 'fa:soundcloud', '', '', 0, '1', '1', '1', '1', '2025-06-27 22:30:04', '1', '2025-06-27 22:30:19', '0'); | |
| 2717 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5029, '告警记录', '', 2, 2, 5028, 'record', 'fa-solid:record-vinyl', 'iot/alert/record/index', 'IotAlertRecord', 0, '1', '1', '1', '', '2025-06-28 07:59:32', '1', '2025-06-28 16:01:48', '0'); | |
| 2718 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5030, '告警记录查询', 'iot:alert-record:query', 3, 1, 5029, '', '', '', '', 0, '1', '1', '1', '', '2025-06-28 07:59:32', '1', '2025-06-28 16:00:53', '0'); | |
| 2719 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5031, '告警记录处理', 'iot:alert-record:process', 3, 2, 5029, '', '', '', '', 0, '1', '1', '1', '', '2025-06-28 07:59:32', '1', '2025-06-28 16:01:04', '0'); | |
| 2720 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5032, 'OTA 固件', '', 2, 1, 4047, 'ota/firmware', 'fa-solid:award', 'iot/ota/firmware/index', 'IoTOtaFirmware', 0, '1', '1', '1', '', '2025-06-30 07:50:29', '"1"', '2025-06-30 20:13:28', '0'); | |
| 2721 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5033, 'OTA 固件查询', 'iot:ota-firmware:query', 3, 1, 5032, '', '', '', '', 0, '1', '1', '1', '', '2025-06-30 07:50:29', '"1"', '2025-06-30 17:38:12', '0'); | |
| 2722 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5034, 'OTA 固件创建', 'iot:ota-firmware:create', 3, 2, 5032, '', '', '', '', 0, '1', '1', '1', '', '2025-06-30 07:50:29', '"1"', '2025-06-30 17:38:21', '0'); | |
| 2723 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5035, 'OTA 固件更新', 'iot:ota-firmware:update', 3, 3, 5032, '', '', '', '', 0, '1', '1', '1', '', '2025-06-30 07:50:29', '"1"', '2025-06-30 17:38:29', '0'); | |
| 2724 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5036, 'OTA 固件删除', 'iot:ota-firmware:delete', 3, 4, 5032, '', '', '', '', 0, '1', '1', '1', '', '2025-06-30 07:50:29', '"1"', '2025-06-30 17:38:37', '0'); | |
| 2725 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5037, 'OTA 升级任务查询', 'iot:ota-task:create', 3, 11, 5032, '', '', '', '', 0, '1', '1', '1', '1', '2025-07-02 23:56:56', '1', '2025-07-02 23:56:56', '0'); | |
| 2726 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5038, 'OTA 升级任务取消', 'iot:ota-task:cancel', 3, 13, 5032, '', '', '', '', 0, '1', '1', '1', '1', '2025-07-02 23:57:26', '1', '2025-07-02 23:57:26', '0'); | |
| 2727 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5039, 'OTA 升级任务创建', 'iot:ota-task:create', 3, 12, 5032, '', '', '', '', 0, '1', '1', '1', '1', '2025-07-02 23:57:52', '1', '2025-07-02 23:57:52', '0'); | |
| 2728 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5040, 'OTA 升级记录查询', 'iot:ota-task-record:query', 3, 21, 5032, '', '', '', '', 0, '1', '1', '1', '1', '2025-07-02 23:58:30', '1', '2025-07-02 23:58:30', '0'); | |
| 2729 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5041, 'OTA 升级记录取消', 'iot:ota-task-record:cancel', 3, 23, 5032, '', '', '', '', 0, '1', '1', '1', '1', '2025-07-02 23:59:18', '1', '2025-07-02 23:59:18', '0'); | |
| 2730 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5042, '模版消息', '', 2, 5, 2084, 'message-template', 'ep:notebook', 'mp/messageTemplate/index', 'MpMessageTemplate', 0, '1', '1', '1', '1', '2025-11-26 16:45:35', '1', '2025-11-26 18:44:52', '0'); | |
| 2731 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5043, '查询模版消息', 'mp:message-template:query', 3, 1, 5042, '', '', '', '', 0, '1', '1', '1', '1', '2025-11-26 17:00:15', '1', '2025-11-26 18:45:00', '0'); | |
| 2732 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5044, '删除模版消息', 'mp:message-template:delete', 3, 2, 5042, '', '', '', '', 0, '1', '1', '1', '1', '2025-11-26 17:00:31', '1', '2025-11-26 18:45:05', '0'); | |
| 2733 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5045, '同步公众号模板', 'mp:message-template:sync', 3, 3, 5042, '', '', '', '', 0, '1', '1', '1', '1', '2025-11-26 17:00:55', '1', '2025-11-26 17:00:55', '0'); | |
| 2734 | +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5046, '给粉丝发送模版消息', 'mp:message-template:send', 3, 4, 5042, '', '', '', '', 0, '1', '1', '1', '1', '2025-11-26 17:01:11', '1', '2025-11-26 17:01:11', '0'); | |
| 2704 | 2735 | COMMIT; |
| 2705 | 2736 | -- @formatter:on |
| 2706 | 2737 | |
| 2707 | 2738 | DROP SEQUENCE IF EXISTS system_menu_seq; |
| 2708 | 2739 | CREATE SEQUENCE system_menu_seq |
| 2709 | - START 5013; | |
| 2740 | + START 5047; | |
| 2710 | 2741 | |
| 2711 | 2742 | -- ---------------------------- |
| 2712 | 2743 | -- Table structure for system_notice |
| 2713 | 2744 | -- ---------------------------- |
| 2714 | 2745 | DROP TABLE IF EXISTS system_notice; |
| 2715 | -CREATE TABLE system_notice | |
| 2716 | -( | |
| 2717 | - id int8 NOT NULL, | |
| 2718 | - title varchar(50) NOT NULL, | |
| 2719 | - content text NOT NULL, | |
| 2720 | - type int2 NOT NULL, | |
| 2721 | - status int2 NOT NULL DEFAULT 0, | |
| 2722 | - creator varchar(64) NULL DEFAULT '', | |
| 2723 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2724 | - updater varchar(64) NULL DEFAULT '', | |
| 2725 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2726 | - deleted int2 NOT NULL DEFAULT 0, | |
| 2727 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 2746 | +CREATE TABLE system_notice ( | |
| 2747 | + id int8 NOT NULL, | |
| 2748 | + title varchar(50) NOT NULL, | |
| 2749 | + content text NOT NULL, | |
| 2750 | + type int2 NOT NULL, | |
| 2751 | + status int2 NOT NULL DEFAULT 0, | |
| 2752 | + creator varchar(64) NULL DEFAULT '', | |
| 2753 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2754 | + updater varchar(64) NULL DEFAULT '', | |
| 2755 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2756 | + deleted int2 NOT NULL DEFAULT 0, | |
| 2757 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 2728 | 2758 | ); |
| 2729 | 2759 | |
| 2730 | -ALTER TABLE system_notice | |
| 2731 | - ADD CONSTRAINT pk_system_notice PRIMARY KEY (id); | |
| 2760 | +ALTER TABLE system_notice ADD CONSTRAINT pk_system_notice PRIMARY KEY (id); | |
| 2732 | 2761 | |
| 2733 | 2762 | COMMENT ON COLUMN system_notice.id IS '公告ID'; |
| 2734 | 2763 | COMMENT ON COLUMN system_notice.title IS '公告标题'; |
| ... | ... | @@ -2748,7 +2777,7 @@ COMMENT ON TABLE system_notice IS '通知公告表'; |
| 2748 | 2777 | -- ---------------------------- |
| 2749 | 2778 | -- @formatter:off |
| 2750 | 2779 | BEGIN; |
| 2751 | -INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '芋道的公众', '<p>新版本内容133</p>', 1, 0, 'admin', '2021-01-05 17:03:48', '1', '2022-05-04 21:00:20', '0', 1); | |
| 2780 | +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '芋道的公众', '<p>新版本内容133222</p>', 1, 0, 'admin', '2021-01-05 17:03:48', '"1"', '2025-08-31 09:38:22', '0', 1); | |
| 2752 | 2781 | INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '维护通知:2018-07-01 系统凌晨维护', '<p><img src="http://test.yudao.iocoder.cn/b7cb3cf49b4b3258bf7309a09dd2f4e5.jpg" alt="" data-href="">11112222<img src="http://test.yudao.iocoder.cn/fe44fc7bdb82ca421184b2eebbaee9e2148d4a1827479a4eb4521e11d2a062ba.png" alt="image" data-href="http://test.yudao.iocoder.cn/fe44fc7bdb82ca421184b2eebbaee9e2148d4a1827479a4eb4521e11d2a062ba.png">3333</p>', 2, 1, 'admin', '2021-01-05 17:03:48', '1', '2025-04-18 23:56:40', '0', 1); |
| 2753 | 2782 | INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '我是测试标题', '<p>哈哈哈哈123</p>', 1, 0, '110', '2022-02-22 01:01:25', '110', '2022-02-22 01:01:46', '0', 121); |
| 2754 | 2783 | COMMIT; |
| ... | ... | @@ -2762,29 +2791,27 @@ CREATE SEQUENCE system_notice_seq |
| 2762 | 2791 | -- Table structure for system_notify_message |
| 2763 | 2792 | -- ---------------------------- |
| 2764 | 2793 | DROP TABLE IF EXISTS system_notify_message; |
| 2765 | -CREATE TABLE system_notify_message | |
| 2766 | -( | |
| 2767 | - id int8 NOT NULL, | |
| 2768 | - user_id int8 NOT NULL, | |
| 2769 | - user_type int2 NOT NULL, | |
| 2770 | - template_id int8 NOT NULL, | |
| 2771 | - template_code varchar(64) NOT NULL, | |
| 2772 | - template_nickname varchar(63) NOT NULL, | |
| 2773 | - template_content varchar(1024) NOT NULL, | |
| 2774 | - template_type int4 NOT NULL, | |
| 2775 | - template_params varchar(255) NOT NULL, | |
| 2776 | - read_status bool NOT NULL, | |
| 2777 | - read_time timestamp NULL DEFAULT NULL, | |
| 2778 | - creator varchar(64) NULL DEFAULT '', | |
| 2779 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2780 | - updater varchar(64) NULL DEFAULT '', | |
| 2781 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2782 | - deleted int2 NOT NULL DEFAULT 0, | |
| 2783 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 2794 | +CREATE TABLE system_notify_message ( | |
| 2795 | + id int8 NOT NULL, | |
| 2796 | + user_id int8 NOT NULL, | |
| 2797 | + user_type int2 NOT NULL, | |
| 2798 | + template_id int8 NOT NULL, | |
| 2799 | + template_code varchar(64) NOT NULL, | |
| 2800 | + template_nickname varchar(63) NOT NULL, | |
| 2801 | + template_content varchar(1024) NOT NULL, | |
| 2802 | + template_type int4 NOT NULL, | |
| 2803 | + template_params varchar(255) NOT NULL, | |
| 2804 | + read_status bool NOT NULL, | |
| 2805 | + read_time timestamp NULL DEFAULT NULL, | |
| 2806 | + creator varchar(64) NULL DEFAULT '', | |
| 2807 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2808 | + updater varchar(64) NULL DEFAULT '', | |
| 2809 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2810 | + deleted int2 NOT NULL DEFAULT 0, | |
| 2811 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 2784 | 2812 | ); |
| 2785 | 2813 | |
| 2786 | -ALTER TABLE system_notify_message | |
| 2787 | - ADD CONSTRAINT pk_system_notify_message PRIMARY KEY (id); | |
| 2814 | +ALTER TABLE system_notify_message ADD CONSTRAINT pk_system_notify_message PRIMARY KEY (id); | |
| 2788 | 2815 | |
| 2789 | 2816 | COMMENT ON COLUMN system_notify_message.id IS '用户ID'; |
| 2790 | 2817 | COMMENT ON COLUMN system_notify_message.user_id IS '用户id'; |
| ... | ... | @@ -2830,26 +2857,24 @@ CREATE SEQUENCE system_notify_message_seq |
| 2830 | 2857 | -- Table structure for system_notify_template |
| 2831 | 2858 | -- ---------------------------- |
| 2832 | 2859 | DROP TABLE IF EXISTS system_notify_template; |
| 2833 | -CREATE TABLE system_notify_template | |
| 2834 | -( | |
| 2835 | - id int8 NOT NULL, | |
| 2836 | - name varchar(63) NOT NULL, | |
| 2837 | - code varchar(64) NOT NULL, | |
| 2838 | - nickname varchar(255) NOT NULL, | |
| 2839 | - content varchar(1024) NOT NULL, | |
| 2840 | - type int2 NOT NULL, | |
| 2841 | - params varchar(255) NULL DEFAULT NULL, | |
| 2842 | - status int2 NOT NULL, | |
| 2843 | - remark varchar(255) NULL DEFAULT NULL, | |
| 2844 | - creator varchar(64) NULL DEFAULT '', | |
| 2845 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2846 | - updater varchar(64) NULL DEFAULT '', | |
| 2847 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2848 | - deleted int2 NOT NULL DEFAULT 0 | |
| 2860 | +CREATE TABLE system_notify_template ( | |
| 2861 | + id int8 NOT NULL, | |
| 2862 | + name varchar(63) NOT NULL, | |
| 2863 | + code varchar(64) NOT NULL, | |
| 2864 | + nickname varchar(255) NOT NULL, | |
| 2865 | + content varchar(1024) NOT NULL, | |
| 2866 | + type int2 NOT NULL, | |
| 2867 | + params varchar(255) NULL DEFAULT NULL, | |
| 2868 | + status int2 NOT NULL, | |
| 2869 | + remark varchar(255) NULL DEFAULT NULL, | |
| 2870 | + creator varchar(64) NULL DEFAULT '', | |
| 2871 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2872 | + updater varchar(64) NULL DEFAULT '', | |
| 2873 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2874 | + deleted int2 NOT NULL DEFAULT 0 | |
| 2849 | 2875 | ); |
| 2850 | 2876 | |
| 2851 | -ALTER TABLE system_notify_template | |
| 2852 | - ADD CONSTRAINT pk_system_notify_template PRIMARY KEY (id); | |
| 2877 | +ALTER TABLE system_notify_template ADD CONSTRAINT pk_system_notify_template PRIMARY KEY (id); | |
| 2853 | 2878 | |
| 2854 | 2879 | COMMENT ON COLUMN system_notify_template.id IS '主键'; |
| 2855 | 2880 | COMMENT ON COLUMN system_notify_template.name IS '模板名称'; |
| ... | ... | @@ -2875,27 +2900,25 @@ CREATE SEQUENCE system_notify_template_seq |
| 2875 | 2900 | -- Table structure for system_oauth2_access_token |
| 2876 | 2901 | -- ---------------------------- |
| 2877 | 2902 | DROP TABLE IF EXISTS system_oauth2_access_token; |
| 2878 | -CREATE TABLE system_oauth2_access_token | |
| 2879 | -( | |
| 2880 | - id int8 NOT NULL, | |
| 2881 | - user_id int8 NOT NULL, | |
| 2882 | - user_type int2 NOT NULL, | |
| 2883 | - user_info varchar(512) NOT NULL, | |
| 2884 | - access_token varchar(255) NOT NULL, | |
| 2885 | - refresh_token varchar(32) NOT NULL, | |
| 2886 | - client_id varchar(255) NOT NULL, | |
| 2887 | - scopes varchar(255) NULL DEFAULT NULL, | |
| 2888 | - expires_time timestamp NOT NULL, | |
| 2889 | - creator varchar(64) NULL DEFAULT '', | |
| 2890 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2891 | - updater varchar(64) NULL DEFAULT '', | |
| 2892 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2893 | - deleted int2 NOT NULL DEFAULT 0, | |
| 2894 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 2903 | +CREATE TABLE system_oauth2_access_token ( | |
| 2904 | + id int8 NOT NULL, | |
| 2905 | + user_id int8 NOT NULL, | |
| 2906 | + user_type int2 NOT NULL, | |
| 2907 | + user_info varchar(512) NOT NULL, | |
| 2908 | + access_token varchar(255) NOT NULL, | |
| 2909 | + refresh_token varchar(32) NOT NULL, | |
| 2910 | + client_id varchar(255) NOT NULL, | |
| 2911 | + scopes varchar(255) NULL DEFAULT NULL, | |
| 2912 | + expires_time timestamp NOT NULL, | |
| 2913 | + creator varchar(64) NULL DEFAULT '', | |
| 2914 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2915 | + updater varchar(64) NULL DEFAULT '', | |
| 2916 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2917 | + deleted int2 NOT NULL DEFAULT 0, | |
| 2918 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 2895 | 2919 | ); |
| 2896 | 2920 | |
| 2897 | -ALTER TABLE system_oauth2_access_token | |
| 2898 | - ADD CONSTRAINT pk_system_oauth2_access_token PRIMARY KEY (id); | |
| 2921 | +ALTER TABLE system_oauth2_access_token ADD CONSTRAINT pk_system_oauth2_access_token PRIMARY KEY (id); | |
| 2899 | 2922 | |
| 2900 | 2923 | CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_token (access_token); |
| 2901 | 2924 | CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_token (refresh_token); |
| ... | ... | @@ -2925,25 +2948,23 @@ CREATE SEQUENCE system_oauth2_access_token_seq |
| 2925 | 2948 | -- Table structure for system_oauth2_approve |
| 2926 | 2949 | -- ---------------------------- |
| 2927 | 2950 | DROP TABLE IF EXISTS system_oauth2_approve; |
| 2928 | -CREATE TABLE system_oauth2_approve | |
| 2929 | -( | |
| 2930 | - id int8 NOT NULL, | |
| 2931 | - user_id int8 NOT NULL, | |
| 2932 | - user_type int2 NOT NULL, | |
| 2933 | - client_id varchar(255) NOT NULL, | |
| 2934 | - scope varchar(255) NOT NULL DEFAULT '', | |
| 2935 | - approved bool NOT NULL DEFAULT '0', | |
| 2936 | - expires_time timestamp NOT NULL, | |
| 2937 | - creator varchar(64) NULL DEFAULT '', | |
| 2938 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2939 | - updater varchar(64) NULL DEFAULT '', | |
| 2940 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2941 | - deleted int2 NOT NULL DEFAULT 0, | |
| 2942 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 2951 | +CREATE TABLE system_oauth2_approve ( | |
| 2952 | + id int8 NOT NULL, | |
| 2953 | + user_id int8 NOT NULL, | |
| 2954 | + user_type int2 NOT NULL, | |
| 2955 | + client_id varchar(255) NOT NULL, | |
| 2956 | + scope varchar(255) NOT NULL DEFAULT '', | |
| 2957 | + approved bool NOT NULL DEFAULT '0', | |
| 2958 | + expires_time timestamp NOT NULL, | |
| 2959 | + creator varchar(64) NULL DEFAULT '', | |
| 2960 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2961 | + updater varchar(64) NULL DEFAULT '', | |
| 2962 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2963 | + deleted int2 NOT NULL DEFAULT 0, | |
| 2964 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 2943 | 2965 | ); |
| 2944 | 2966 | |
| 2945 | -ALTER TABLE system_oauth2_approve | |
| 2946 | - ADD CONSTRAINT pk_system_oauth2_approve PRIMARY KEY (id); | |
| 2967 | +ALTER TABLE system_oauth2_approve ADD CONSTRAINT pk_system_oauth2_approve PRIMARY KEY (id); | |
| 2947 | 2968 | |
| 2948 | 2969 | COMMENT ON COLUMN system_oauth2_approve.id IS '编号'; |
| 2949 | 2970 | COMMENT ON COLUMN system_oauth2_approve.user_id IS '用户编号'; |
| ... | ... | @@ -2968,33 +2989,31 @@ CREATE SEQUENCE system_oauth2_approve_seq |
| 2968 | 2989 | -- Table structure for system_oauth2_client |
| 2969 | 2990 | -- ---------------------------- |
| 2970 | 2991 | DROP TABLE IF EXISTS system_oauth2_client; |
| 2971 | -CREATE TABLE system_oauth2_client | |
| 2972 | -( | |
| 2973 | - id int8 NOT NULL, | |
| 2974 | - client_id varchar(255) NOT NULL, | |
| 2975 | - secret varchar(255) NOT NULL, | |
| 2976 | - name varchar(255) NOT NULL, | |
| 2977 | - logo varchar(255) NOT NULL, | |
| 2978 | - description varchar(255) NULL DEFAULT NULL, | |
| 2979 | - status int2 NOT NULL, | |
| 2980 | - access_token_validity_seconds int4 NOT NULL, | |
| 2981 | - refresh_token_validity_seconds int4 NOT NULL, | |
| 2982 | - redirect_uris varchar(255) NOT NULL, | |
| 2983 | - authorized_grant_types varchar(255) NOT NULL, | |
| 2984 | - scopes varchar(255) NULL DEFAULT NULL, | |
| 2985 | - auto_approve_scopes varchar(255) NULL DEFAULT NULL, | |
| 2986 | - authorities varchar(255) NULL DEFAULT NULL, | |
| 2987 | - resource_ids varchar(255) NULL DEFAULT NULL, | |
| 2988 | - additional_information varchar(4096) NULL DEFAULT NULL, | |
| 2989 | - creator varchar(64) NULL DEFAULT '', | |
| 2990 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2991 | - updater varchar(64) NULL DEFAULT '', | |
| 2992 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 2993 | - deleted int2 NOT NULL DEFAULT 0 | |
| 2992 | +CREATE TABLE system_oauth2_client ( | |
| 2993 | + id int8 NOT NULL, | |
| 2994 | + client_id varchar(255) NOT NULL, | |
| 2995 | + secret varchar(255) NOT NULL, | |
| 2996 | + name varchar(255) NOT NULL, | |
| 2997 | + logo varchar(255) NOT NULL, | |
| 2998 | + description varchar(255) NULL DEFAULT NULL, | |
| 2999 | + status int2 NOT NULL, | |
| 3000 | + access_token_validity_seconds int4 NOT NULL, | |
| 3001 | + refresh_token_validity_seconds int4 NOT NULL, | |
| 3002 | + redirect_uris varchar(255) NOT NULL, | |
| 3003 | + authorized_grant_types varchar(255) NOT NULL, | |
| 3004 | + scopes varchar(255) NULL DEFAULT NULL, | |
| 3005 | + auto_approve_scopes varchar(255) NULL DEFAULT NULL, | |
| 3006 | + authorities varchar(255) NULL DEFAULT NULL, | |
| 3007 | + resource_ids varchar(255) NULL DEFAULT NULL, | |
| 3008 | + additional_information varchar(4096) NULL DEFAULT NULL, | |
| 3009 | + creator varchar(64) NULL DEFAULT '', | |
| 3010 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3011 | + updater varchar(64) NULL DEFAULT '', | |
| 3012 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3013 | + deleted int2 NOT NULL DEFAULT 0 | |
| 2994 | 3014 | ); |
| 2995 | 3015 | |
| 2996 | -ALTER TABLE system_oauth2_client | |
| 2997 | - ADD CONSTRAINT pk_system_oauth2_client PRIMARY KEY (id); | |
| 3016 | +ALTER TABLE system_oauth2_client ADD CONSTRAINT pk_system_oauth2_client PRIMARY KEY (id); | |
| 2998 | 3017 | |
| 2999 | 3018 | COMMENT ON COLUMN system_oauth2_client.id IS '编号'; |
| 3000 | 3019 | COMMENT ON COLUMN system_oauth2_client.client_id IS '客户端编号'; |
| ... | ... | @@ -3024,10 +3043,10 @@ COMMENT ON TABLE system_oauth2_client IS 'OAuth2 客户端表'; |
| 3024 | 3043 | -- ---------------------------- |
| 3025 | 3044 | -- @formatter:off |
| 3026 | 3045 | BEGIN; |
| 3027 | -INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/20250502/sort2_1746189740718.png', '我是描述', 0, 1800, 2592000, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '["password","authorization_code","implicit","refresh_token"]', '["user.read","user.write"]', '[]', '["user.read","user.write"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2025-05-02 20:42:22', '0'); | |
| 3046 | +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/20250502/sort2_1746189740718.png', '我是描述', 0, 1800, 2592000, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '["password","authorization_code","implicit","refresh_token","client_credentials"]', '["user.read","user.write"]', '[]', '["user.read","user.write"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2025-08-21 10:04:50', '0'); | |
| 3028 | 3047 | INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.yudao.iocoder.cn/xx/20250502/ed07110a37464b5299f8bd7c67ad65c7_1746187077009.jpg', '啦啦啦啦', 0, 1800, 43200, '["https://www.iocoder.cn"]', '["password","authorization_code","implicit"]', '["user_info","projects"]', '["user_info"]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2025-05-02 19:58:08', '0'); |
| 3029 | 3048 | INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (41, 'yudao-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.yudao.iocoder.cn/it/20250502/sign_1746181948685.png', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["authorization_code","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-09-29 13:28:31', '1', '2025-05-02 18:32:30', '0'); |
| 3030 | -INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (42, 'yudao-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.yudao.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["password","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2025-05-04 16:00:46', '0'); | |
| 3049 | +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (42, 'yudao-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.yudao.iocoder.cn/20251025/images (3)_1761360515810.jpeg', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["password","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2025-10-25 10:49:40', '0'); | |
| 3031 | 3050 | COMMIT; |
| 3032 | 3051 | -- @formatter:on |
| 3033 | 3052 | |
| ... | ... | @@ -3039,27 +3058,25 @@ CREATE SEQUENCE system_oauth2_client_seq |
| 3039 | 3058 | -- Table structure for system_oauth2_code |
| 3040 | 3059 | -- ---------------------------- |
| 3041 | 3060 | DROP TABLE IF EXISTS system_oauth2_code; |
| 3042 | -CREATE TABLE system_oauth2_code | |
| 3043 | -( | |
| 3044 | - id int8 NOT NULL, | |
| 3045 | - user_id int8 NOT NULL, | |
| 3046 | - user_type int2 NOT NULL, | |
| 3047 | - code varchar(32) NOT NULL, | |
| 3048 | - client_id varchar(255) NOT NULL, | |
| 3049 | - scopes varchar(255) NULL DEFAULT '', | |
| 3050 | - expires_time timestamp NOT NULL, | |
| 3051 | - redirect_uri varchar(255) NULL DEFAULT NULL, | |
| 3052 | - state varchar(255) NOT NULL DEFAULT '', | |
| 3053 | - creator varchar(64) NULL DEFAULT '', | |
| 3054 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3055 | - updater varchar(64) NULL DEFAULT '', | |
| 3056 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3057 | - deleted int2 NOT NULL DEFAULT 0, | |
| 3058 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 3061 | +CREATE TABLE system_oauth2_code ( | |
| 3062 | + id int8 NOT NULL, | |
| 3063 | + user_id int8 NOT NULL, | |
| 3064 | + user_type int2 NOT NULL, | |
| 3065 | + code varchar(32) NOT NULL, | |
| 3066 | + client_id varchar(255) NOT NULL, | |
| 3067 | + scopes varchar(255) NULL DEFAULT '', | |
| 3068 | + expires_time timestamp NOT NULL, | |
| 3069 | + redirect_uri varchar(255) NULL DEFAULT NULL, | |
| 3070 | + state varchar(255) NOT NULL DEFAULT '', | |
| 3071 | + creator varchar(64) NULL DEFAULT '', | |
| 3072 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3073 | + updater varchar(64) NULL DEFAULT '', | |
| 3074 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3075 | + deleted int2 NOT NULL DEFAULT 0, | |
| 3076 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 3059 | 3077 | ); |
| 3060 | 3078 | |
| 3061 | -ALTER TABLE system_oauth2_code | |
| 3062 | - ADD CONSTRAINT pk_system_oauth2_code PRIMARY KEY (id); | |
| 3079 | +ALTER TABLE system_oauth2_code ADD CONSTRAINT pk_system_oauth2_code PRIMARY KEY (id); | |
| 3063 | 3080 | |
| 3064 | 3081 | COMMENT ON COLUMN system_oauth2_code.id IS '编号'; |
| 3065 | 3082 | COMMENT ON COLUMN system_oauth2_code.user_id IS '用户编号'; |
| ... | ... | @@ -3086,25 +3103,23 @@ CREATE SEQUENCE system_oauth2_code_seq |
| 3086 | 3103 | -- Table structure for system_oauth2_refresh_token |
| 3087 | 3104 | -- ---------------------------- |
| 3088 | 3105 | DROP TABLE IF EXISTS system_oauth2_refresh_token; |
| 3089 | -CREATE TABLE system_oauth2_refresh_token | |
| 3090 | -( | |
| 3091 | - id int8 NOT NULL, | |
| 3092 | - user_id int8 NOT NULL, | |
| 3093 | - refresh_token varchar(32) NOT NULL, | |
| 3094 | - user_type int2 NOT NULL, | |
| 3095 | - client_id varchar(255) NOT NULL, | |
| 3096 | - scopes varchar(255) NULL DEFAULT NULL, | |
| 3097 | - expires_time timestamp NOT NULL, | |
| 3098 | - creator varchar(64) NULL DEFAULT '', | |
| 3099 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3100 | - updater varchar(64) NULL DEFAULT '', | |
| 3101 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3102 | - deleted int2 NOT NULL DEFAULT 0, | |
| 3103 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 3106 | +CREATE TABLE system_oauth2_refresh_token ( | |
| 3107 | + id int8 NOT NULL, | |
| 3108 | + user_id int8 NOT NULL, | |
| 3109 | + refresh_token varchar(32) NOT NULL, | |
| 3110 | + user_type int2 NOT NULL, | |
| 3111 | + client_id varchar(255) NOT NULL, | |
| 3112 | + scopes varchar(255) NULL DEFAULT NULL, | |
| 3113 | + expires_time timestamp NOT NULL, | |
| 3114 | + creator varchar(64) NULL DEFAULT '', | |
| 3115 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3116 | + updater varchar(64) NULL DEFAULT '', | |
| 3117 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3118 | + deleted int2 NOT NULL DEFAULT 0, | |
| 3119 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 3104 | 3120 | ); |
| 3105 | 3121 | |
| 3106 | -ALTER TABLE system_oauth2_refresh_token | |
| 3107 | - ADD CONSTRAINT pk_system_oauth2_refresh_token PRIMARY KEY (id); | |
| 3122 | +ALTER TABLE system_oauth2_refresh_token ADD CONSTRAINT pk_system_oauth2_refresh_token PRIMARY KEY (id); | |
| 3108 | 3123 | |
| 3109 | 3124 | COMMENT ON COLUMN system_oauth2_refresh_token.id IS '编号'; |
| 3110 | 3125 | COMMENT ON COLUMN system_oauth2_refresh_token.user_id IS '用户编号'; |
| ... | ... | @@ -3129,32 +3144,30 @@ CREATE SEQUENCE system_oauth2_refresh_token_seq |
| 3129 | 3144 | -- Table structure for system_operate_log |
| 3130 | 3145 | -- ---------------------------- |
| 3131 | 3146 | DROP TABLE IF EXISTS system_operate_log; |
| 3132 | -CREATE TABLE system_operate_log | |
| 3133 | -( | |
| 3134 | - id int8 NOT NULL, | |
| 3135 | - trace_id varchar(64) NOT NULL DEFAULT '', | |
| 3136 | - user_id int8 NOT NULL, | |
| 3137 | - user_type int2 NOT NULL DEFAULT 0, | |
| 3138 | - type varchar(50) NOT NULL, | |
| 3139 | - sub_type varchar(50) NOT NULL, | |
| 3140 | - biz_id int8 NOT NULL, | |
| 3141 | - action varchar(2000) NOT NULL DEFAULT '', | |
| 3142 | - success bool NOT NULL DEFAULT '1', | |
| 3143 | - extra varchar(2000) NOT NULL DEFAULT '', | |
| 3144 | - request_method varchar(16) NULL DEFAULT '', | |
| 3145 | - request_url varchar(255) NULL DEFAULT '', | |
| 3146 | - user_ip varchar(50) NULL DEFAULT NULL, | |
| 3147 | - user_agent varchar(512) NULL DEFAULT NULL, | |
| 3148 | - creator varchar(64) NULL DEFAULT '', | |
| 3149 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3150 | - updater varchar(64) NULL DEFAULT '', | |
| 3151 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3152 | - deleted int2 NOT NULL DEFAULT 0, | |
| 3153 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 3147 | +CREATE TABLE system_operate_log ( | |
| 3148 | + id int8 NOT NULL, | |
| 3149 | + trace_id varchar(64) NOT NULL DEFAULT '', | |
| 3150 | + user_id int8 NOT NULL, | |
| 3151 | + user_type int2 NOT NULL DEFAULT 0, | |
| 3152 | + type varchar(50) NOT NULL, | |
| 3153 | + sub_type varchar(50) NOT NULL, | |
| 3154 | + biz_id int8 NOT NULL, | |
| 3155 | + action varchar(2000) NOT NULL DEFAULT '', | |
| 3156 | + success bool NOT NULL DEFAULT '1', | |
| 3157 | + extra varchar(2000) NOT NULL DEFAULT '', | |
| 3158 | + request_method varchar(16) NULL DEFAULT '', | |
| 3159 | + request_url varchar(255) NULL DEFAULT '', | |
| 3160 | + user_ip varchar(50) NULL DEFAULT NULL, | |
| 3161 | + user_agent varchar(512) NULL DEFAULT NULL, | |
| 3162 | + creator varchar(64) NULL DEFAULT '', | |
| 3163 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3164 | + updater varchar(64) NULL DEFAULT '', | |
| 3165 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3166 | + deleted int2 NOT NULL DEFAULT 0, | |
| 3167 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 3154 | 3168 | ); |
| 3155 | 3169 | |
| 3156 | -ALTER TABLE system_operate_log | |
| 3157 | - ADD CONSTRAINT pk_system_operate_log PRIMARY KEY (id); | |
| 3170 | +ALTER TABLE system_operate_log ADD CONSTRAINT pk_system_operate_log PRIMARY KEY (id); | |
| 3158 | 3171 | |
| 3159 | 3172 | COMMENT ON COLUMN system_operate_log.id IS '日志主键'; |
| 3160 | 3173 | COMMENT ON COLUMN system_operate_log.trace_id IS '链路追踪编号'; |
| ... | ... | @@ -3186,24 +3199,22 @@ CREATE SEQUENCE system_operate_log_seq |
| 3186 | 3199 | -- Table structure for system_post |
| 3187 | 3200 | -- ---------------------------- |
| 3188 | 3201 | DROP TABLE IF EXISTS system_post; |
| 3189 | -CREATE TABLE system_post | |
| 3190 | -( | |
| 3191 | - id int8 NOT NULL, | |
| 3192 | - code varchar(64) NOT NULL, | |
| 3193 | - name varchar(50) NOT NULL, | |
| 3194 | - sort int4 NOT NULL, | |
| 3195 | - status int2 NOT NULL, | |
| 3196 | - remark varchar(500) NULL DEFAULT NULL, | |
| 3197 | - creator varchar(64) NULL DEFAULT '', | |
| 3198 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3199 | - updater varchar(64) NULL DEFAULT '', | |
| 3200 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3201 | - deleted int2 NOT NULL DEFAULT 0, | |
| 3202 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 3202 | +CREATE TABLE system_post ( | |
| 3203 | + id int8 NOT NULL, | |
| 3204 | + code varchar(64) NOT NULL, | |
| 3205 | + name varchar(50) NOT NULL, | |
| 3206 | + sort int4 NOT NULL, | |
| 3207 | + status int2 NOT NULL, | |
| 3208 | + remark varchar(500) NULL DEFAULT NULL, | |
| 3209 | + creator varchar(64) NULL DEFAULT '', | |
| 3210 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3211 | + updater varchar(64) NULL DEFAULT '', | |
| 3212 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3213 | + deleted int2 NOT NULL DEFAULT 0, | |
| 3214 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 3203 | 3215 | ); |
| 3204 | 3216 | |
| 3205 | -ALTER TABLE system_post | |
| 3206 | - ADD CONSTRAINT pk_system_post PRIMARY KEY (id); | |
| 3217 | +ALTER TABLE system_post ADD CONSTRAINT pk_system_post PRIMARY KEY (id); | |
| 3207 | 3218 | |
| 3208 | 3219 | COMMENT ON COLUMN system_post.id IS '岗位ID'; |
| 3209 | 3220 | COMMENT ON COLUMN system_post.code IS '岗位编码'; |
| ... | ... | @@ -3224,49 +3235,47 @@ COMMENT ON TABLE system_post IS '岗位信息表'; |
| 3224 | 3235 | -- ---------------------------- |
| 3225 | 3236 | -- @formatter:off |
| 3226 | 3237 | BEGIN; |
| 3227 | -INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-06 17:03:48', '1', '2023-02-11 15:19:04', '0', 1); | |
| 3228 | 3238 | INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 'se', '项目经理', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 09:18:20', '0', 1); |
| 3229 | 3239 | INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 'user', '普通员工', 4, 0, '111222', 'admin', '2021-01-05 17:03:48', '1', '2025-03-24 21:32:40', '0', 1); |
| 3230 | 3240 | INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 'HR', '人力资源', 5, 0, '`', '1', '2024-03-24 20:45:40', '1', '2025-03-29 19:08:10', '0', 1); |
| 3241 | +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 'test', '测试', 10, 0, NULL, '1', '2025-09-02 08:45:57', '1', '2025-09-02 08:45:57', '0', 1); | |
| 3231 | 3242 | COMMIT; |
| 3232 | 3243 | -- @formatter:on |
| 3233 | 3244 | |
| 3234 | 3245 | DROP SEQUENCE IF EXISTS system_post_seq; |
| 3235 | 3246 | CREATE SEQUENCE system_post_seq |
| 3236 | - START 6; | |
| 3247 | + START 8; | |
| 3237 | 3248 | |
| 3238 | 3249 | -- ---------------------------- |
| 3239 | 3250 | -- Table structure for system_role |
| 3240 | 3251 | -- ---------------------------- |
| 3241 | 3252 | DROP TABLE IF EXISTS system_role; |
| 3242 | -CREATE TABLE system_role | |
| 3243 | -( | |
| 3244 | - id int8 NOT NULL, | |
| 3245 | - name varchar(30) NOT NULL, | |
| 3246 | - code varchar(100) NOT NULL, | |
| 3247 | - sort int4 NOT NULL, | |
| 3248 | - data_scope int2 NOT NULL DEFAULT 1, | |
| 3249 | - data_scope_dept_ids varchar(500) NOT NULL DEFAULT '', | |
| 3250 | - status int2 NOT NULL, | |
| 3251 | - type int2 NOT NULL, | |
| 3252 | - remark varchar(500) NULL DEFAULT NULL, | |
| 3253 | - creator varchar(64) NULL DEFAULT '', | |
| 3254 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3255 | - updater varchar(64) NULL DEFAULT '', | |
| 3256 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3257 | - deleted int2 NOT NULL DEFAULT 0, | |
| 3258 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 3253 | +CREATE TABLE system_role ( | |
| 3254 | + id int8 NOT NULL, | |
| 3255 | + name varchar(30) NOT NULL, | |
| 3256 | + code varchar(100) NOT NULL, | |
| 3257 | + sort int4 NOT NULL, | |
| 3258 | + data_scope int2 NOT NULL DEFAULT 1, | |
| 3259 | + data_scope_dept_ids varchar(500) NOT NULL DEFAULT '', | |
| 3260 | + status int2 NOT NULL, | |
| 3261 | + type int2 NOT NULL, | |
| 3262 | + remark varchar(500) NULL DEFAULT NULL, | |
| 3263 | + creator varchar(64) NULL DEFAULT '', | |
| 3264 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3265 | + updater varchar(64) NULL DEFAULT '', | |
| 3266 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3267 | + deleted int2 NOT NULL DEFAULT 0, | |
| 3268 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 3259 | 3269 | ); |
| 3260 | 3270 | |
| 3261 | -ALTER TABLE system_role | |
| 3262 | - ADD CONSTRAINT pk_system_role PRIMARY KEY (id); | |
| 3271 | +ALTER TABLE system_role ADD CONSTRAINT pk_system_role PRIMARY KEY (id); | |
| 3263 | 3272 | |
| 3264 | 3273 | COMMENT ON COLUMN system_role.id IS '角色ID'; |
| 3265 | 3274 | COMMENT ON COLUMN system_role.name IS '角色名称'; |
| 3266 | 3275 | COMMENT ON COLUMN system_role.code IS '角色权限字符串'; |
| 3267 | 3276 | COMMENT ON COLUMN system_role.sort IS '显示顺序'; |
| 3268 | 3277 | COMMENT ON COLUMN system_role.data_scope IS '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)'; |
| 3269 | -COMMENT ON COLUMN system_role.data_scope_dept_ids IS '数据范围 ( 指定部门数组)'; | |
| 3278 | +COMMENT ON COLUMN system_role.data_scope_dept_ids IS '数据范围 ( 指定部门数组 ) '; | |
| 3270 | 3279 | COMMENT ON COLUMN system_role.status IS '角色状态(0正常 1停用)'; |
| 3271 | 3280 | COMMENT ON COLUMN system_role.type IS '角色类型'; |
| 3272 | 3281 | COMMENT ON COLUMN system_role.remark IS '备注'; |
| ... | ... | @@ -3286,37 +3295,33 @@ BEGIN; |
| 3286 | 3295 | INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '超级管理员', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:21', '0', 1); |
| 3287 | 3296 | INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:20', '0', 1); |
| 3288 | 3297 | INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 'CRM 管理员', 'crm_admin', 2, 1, '', 0, 1, 'CRM 专属角色', '1', '2024-02-24 10:51:13', '1', '2024-02-24 02:51:32', '0', 1); |
| 3289 | -INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '测试账号', 'test', 0, 1, '[]', 0, 2, '123', '', '2021-01-06 13:49:35', '1', '2025-04-30 17:38:28', '0', 1); | |
| 3290 | 3298 | INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); |
| 3291 | 3299 | INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); |
| 3292 | -INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (155, '测试数据权限', 'test-dp', 3, 2, '[100,102,103,104,105,108]', 0, 2, '', '1', '2025-03-31 14:58:06', '1', '2025-04-17 23:07:44', '0', 1); | |
| 3293 | -INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (158, '2', '3', 4, 1, '', 0, 2, NULL, '1', '2025-04-17 20:08:08', '1', '2025-04-17 23:05:31', '0', 1); | |
| 3300 | +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (155, '测试数据权限', 'test-dp', 3, 2, '[112,100,102,103,104,105,107,108]', 0, 2, '', '1', '2025-03-31 14:58:06', '1', '2025-09-06 20:15:13', '0', 1); | |
| 3294 | 3301 | COMMIT; |
| 3295 | 3302 | -- @formatter:on |
| 3296 | 3303 | |
| 3297 | 3304 | DROP SEQUENCE IF EXISTS system_role_seq; |
| 3298 | 3305 | CREATE SEQUENCE system_role_seq |
| 3299 | - START 159; | |
| 3306 | + START 156; | |
| 3300 | 3307 | |
| 3301 | 3308 | -- ---------------------------- |
| 3302 | 3309 | -- Table structure for system_role_menu |
| 3303 | 3310 | -- ---------------------------- |
| 3304 | 3311 | DROP TABLE IF EXISTS system_role_menu; |
| 3305 | -CREATE TABLE system_role_menu | |
| 3306 | -( | |
| 3307 | - id int8 NOT NULL, | |
| 3308 | - role_id int8 NOT NULL, | |
| 3309 | - menu_id int8 NOT NULL, | |
| 3310 | - creator varchar(64) NULL DEFAULT '', | |
| 3311 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3312 | - updater varchar(64) NULL DEFAULT '', | |
| 3313 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3314 | - deleted int2 NOT NULL DEFAULT 0, | |
| 3315 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 3312 | +CREATE TABLE system_role_menu ( | |
| 3313 | + id int8 NOT NULL, | |
| 3314 | + role_id int8 NOT NULL, | |
| 3315 | + menu_id int8 NOT NULL, | |
| 3316 | + creator varchar(64) NULL DEFAULT '', | |
| 3317 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3318 | + updater varchar(64) NULL DEFAULT '', | |
| 3319 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 3320 | + deleted int2 NOT NULL DEFAULT 0, | |
| 3321 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 3316 | 3322 | ); |
| 3317 | 3323 | |
| 3318 | -ALTER TABLE system_role_menu | |
| 3319 | - ADD CONSTRAINT pk_system_role_menu PRIMARY KEY (id); | |
| 3324 | +ALTER TABLE system_role_menu ADD CONSTRAINT pk_system_role_menu PRIMARY KEY (id); | |
| 3320 | 3325 | |
| 3321 | 3326 | COMMENT ON COLUMN system_role_menu.id IS '自增编号'; |
| 3322 | 3327 | COMMENT ON COLUMN system_role_menu.role_id IS '角色ID'; |
| ... | ... | @@ -3369,87 +3374,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 3369 | 3374 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (707, 2, 113, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); |
| 3370 | 3375 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1296, 110, 1, '110', '2022-02-23 00:23:55', '110', '2022-02-23 00:23:55', '0', 121); |
| 3371 | 3376 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); |
| 3372 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1604, 101, 1216, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3373 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1605, 101, 1217, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3374 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1606, 101, 1218, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3375 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1607, 101, 1219, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3376 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1608, 101, 1220, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3377 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1609, 101, 1221, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3378 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1610, 101, 5, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3379 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1611, 101, 1222, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3380 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1612, 101, 1118, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3381 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1613, 101, 1119, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3382 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1614, 101, 1120, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3383 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1615, 101, 1185, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3384 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1616, 101, 1186, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3385 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1617, 101, 1187, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3386 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1618, 101, 1188, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3387 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1619, 101, 1189, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3388 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1620, 101, 1190, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3389 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1621, 101, 1191, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3390 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1622, 101, 1192, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3391 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1623, 101, 1193, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3392 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1624, 101, 1194, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3393 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1625, 101, 1195, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3394 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1627, 101, 1197, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3395 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1628, 101, 1198, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3396 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1629, 101, 1199, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3397 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1630, 101, 1200, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3398 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1631, 101, 1201, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3399 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1632, 101, 1202, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3400 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1633, 101, 1207, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3401 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1634, 101, 1208, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3402 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1635, 101, 1209, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3403 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1636, 101, 1210, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3404 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1637, 101, 1211, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3405 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1638, 101, 1212, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3406 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1639, 101, 1213, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3407 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1640, 101, 1215, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); | |
| 3408 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1641, 101, 2, '1', '2022-04-01 22:21:24', '1', '2022-04-01 22:21:24', '0', 1); | |
| 3409 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1642, 101, 1031, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3410 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1643, 101, 1032, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3411 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1644, 101, 1033, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3412 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1645, 101, 1034, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3413 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1646, 101, 1035, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3414 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1647, 101, 1050, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3415 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1648, 101, 1051, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3416 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1649, 101, 1052, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3417 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1650, 101, 1053, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3418 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1651, 101, 1054, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3419 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1652, 101, 1056, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3420 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1653, 101, 1057, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3421 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1654, 101, 1058, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3422 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1655, 101, 1059, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3423 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1656, 101, 1060, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3424 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1657, 101, 1066, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3425 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1658, 101, 1067, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3426 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1659, 101, 1070, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3427 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1664, 101, 1075, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3428 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1666, 101, 1077, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3429 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1667, 101, 1078, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3430 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1668, 101, 1082, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3431 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1669, 101, 1083, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3432 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1670, 101, 1084, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3433 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1671, 101, 1085, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3434 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1672, 101, 1086, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3435 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1673, 101, 1087, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3436 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1674, 101, 1088, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3437 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1675, 101, 1089, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3438 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1679, 101, 1237, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3439 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1680, 101, 1238, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3440 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1681, 101, 1239, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3441 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1682, 101, 1240, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3442 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1683, 101, 1241, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3443 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1684, 101, 1242, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3444 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1685, 101, 1243, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3445 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1687, 101, 106, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3446 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1688, 101, 110, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3447 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1689, 101, 111, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3448 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1690, 101, 112, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3449 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1691, 101, 113, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3450 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1692, 101, 114, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3451 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1693, 101, 115, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3452 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1694, 101, 116, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); | |
| 3453 | 3377 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1729, 109, 100, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); |
| 3454 | 3378 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1730, 109, 101, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); |
| 3455 | 3379 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1731, 109, 1063, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); |
| ... | ... | @@ -3729,119 +3653,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 3729 | 3653 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2182, 2, 2016, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); |
| 3730 | 3654 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2183, 2, 2017, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); |
| 3731 | 3655 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2184, 2, 2018, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); |
| 3732 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2188, 101, 1024, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3733 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2189, 101, 1, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3734 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2190, 101, 1025, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3735 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2191, 101, 1026, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3736 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2192, 101, 1027, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3737 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2193, 101, 1028, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3738 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2194, 101, 1029, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3739 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2195, 101, 1030, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3740 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2196, 101, 1036, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3741 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2197, 101, 1037, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3742 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2198, 101, 1038, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3743 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2199, 101, 1039, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3744 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2200, 101, 1040, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3745 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2201, 101, 1042, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3746 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2202, 101, 1043, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3747 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2203, 101, 1045, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3748 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2204, 101, 1046, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3749 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2205, 101, 1048, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3750 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2206, 101, 2083, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3751 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2207, 101, 1063, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3752 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2208, 101, 1064, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3753 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2209, 101, 1065, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3754 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2210, 101, 1093, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3755 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2211, 101, 1094, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3756 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2212, 101, 1095, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3757 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2213, 101, 1096, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3758 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2214, 101, 1097, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3759 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2215, 101, 1098, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3760 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2216, 101, 1100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3761 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2217, 101, 1101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3762 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2218, 101, 1102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3763 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2219, 101, 1103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3764 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2220, 101, 1104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3765 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2221, 101, 1105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3766 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2222, 101, 1106, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3767 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2223, 101, 2130, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3768 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2224, 101, 1107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3769 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2225, 101, 2131, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3770 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2226, 101, 1108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3771 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2227, 101, 2132, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3772 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2228, 101, 1109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3773 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2229, 101, 2133, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3774 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2230, 101, 2134, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3775 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2232, 101, 2135, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3776 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2234, 101, 2136, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3777 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2236, 101, 2137, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3778 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2238, 101, 2138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3779 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2240, 101, 2139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3780 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2242, 101, 2140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3781 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2243, 101, 2141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3782 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2244, 101, 2142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3783 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2245, 101, 2143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3784 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2246, 101, 2144, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3785 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2247, 101, 2145, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3786 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2248, 101, 2146, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3787 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2249, 101, 2147, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3788 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2250, 101, 100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3789 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2251, 101, 2148, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3790 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2252, 101, 101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3791 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2253, 101, 2149, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3792 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2254, 101, 102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3793 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2255, 101, 2150, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3794 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2256, 101, 103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3795 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2257, 101, 2151, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3796 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2258, 101, 104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3797 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2259, 101, 2152, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3798 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2260, 101, 105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3799 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2261, 101, 107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3800 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2262, 101, 108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3801 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2263, 101, 109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3802 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2264, 101, 1138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3803 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2265, 101, 1139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3804 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2266, 101, 1140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3805 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2267, 101, 1141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3806 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2268, 101, 1142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3807 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2269, 101, 1143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3808 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2270, 101, 1224, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3809 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2271, 101, 1225, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3810 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2272, 101, 1226, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3811 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2273, 101, 1227, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3812 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2274, 101, 1228, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3813 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2275, 101, 1229, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3814 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2282, 101, 1261, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3815 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2283, 101, 1263, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3816 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2284, 101, 1264, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3817 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2285, 101, 1265, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3818 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2286, 101, 1266, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3819 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2287, 101, 1267, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3820 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2288, 101, 1001, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3821 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2289, 101, 1002, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3822 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2290, 101, 1003, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3823 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2291, 101, 1004, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3824 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2292, 101, 1005, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3825 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2293, 101, 1006, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3826 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2294, 101, 1007, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3827 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2295, 101, 1008, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3828 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2296, 101, 1009, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3829 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2297, 101, 1010, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3830 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2298, 101, 1011, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3831 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2299, 101, 1012, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3832 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2300, 101, 500, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3833 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2301, 101, 1013, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3834 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2302, 101, 501, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3835 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2303, 101, 1014, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3836 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2304, 101, 1015, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3837 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2305, 101, 1016, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3838 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2306, 101, 1017, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3839 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2307, 101, 1018, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3840 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2308, 101, 1019, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3841 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2309, 101, 1020, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3842 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2310, 101, 1021, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3843 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2311, 101, 1022, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3844 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2312, 101, 1023, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); | |
| 3845 | 3656 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2929, 109, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); |
| 3846 | 3657 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2930, 109, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); |
| 3847 | 3658 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2931, 109, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); |
| ... | ... | @@ -4059,7 +3870,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 4059 | 3870 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4193, 109, 2730, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); |
| 4060 | 3871 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4194, 109, 1195, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); |
| 4061 | 3872 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4195, 109, 2731, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); |
| 4062 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4196, 109, 1196, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); | |
| 4063 | 3873 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4197, 109, 2732, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); |
| 4064 | 3874 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4198, 109, 1197, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); |
| 4065 | 3875 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4199, 109, 2733, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); |
| ... | ... | @@ -4118,7 +3928,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 4118 | 3928 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4252, 111, 2730, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4119 | 3929 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4253, 111, 1195, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4120 | 3930 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4254, 111, 2731, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4121 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4255, 111, 1196, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); | |
| 4122 | 3931 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4256, 111, 2732, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4123 | 3932 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4257, 111, 1197, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4124 | 3933 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4258, 111, 2733, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| ... | ... | @@ -4144,8 +3953,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 4144 | 3953 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4278, 111, 1220, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4145 | 3954 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4279, 111, 1221, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4146 | 3955 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4280, 111, 1222, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); |
| 4147 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5777, 101, 2739, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', '0', 1); | |
| 4148 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5778, 101, 2740, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', '0', 1); | |
| 4149 | 3956 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5779, 2, 2739, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); |
| 4150 | 3957 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5780, 2, 2740, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); |
| 4151 | 3958 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5781, 2, 2758, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); |
| ... | ... | @@ -4153,9 +3960,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 4153 | 3960 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5783, 2, 2362, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); |
| 4154 | 3961 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5784, 2, 2387, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); |
| 4155 | 3962 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5785, 2, 2030, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); |
| 4156 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5786, 101, 2758, '1', '2024-07-07 20:39:55', '1', '2024-07-07 20:39:55', '0', 1); | |
| 4157 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5787, 101, 2759, '1', '2024-07-07 20:39:55', '1', '2024-07-07 20:39:55', '0', 1); | |
| 4158 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5788, 101, 2783, '1', '2024-07-07 20:39:55', '1', '2024-07-07 20:39:55', '0', 1); | |
| 4159 | 3963 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5789, 109, 2739, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 121); |
| 4160 | 3964 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5790, 109, 2740, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 121); |
| 4161 | 3965 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5791, 111, 2739, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 122); |
| ... | ... | @@ -4176,7 +3980,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 4176 | 3980 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6115, 155, 4043, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4177 | 3981 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6116, 155, 4044, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4178 | 3982 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6117, 155, 4045, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4179 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6118, 155, 4046, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); | |
| 4180 | 3983 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6119, 155, 4001, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4181 | 3984 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6120, 155, 4002, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4182 | 3985 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6121, 155, 4003, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| ... | ... | @@ -4196,37 +3999,188 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update |
| 4196 | 3999 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6135, 155, 4017, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4197 | 4000 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6136, 155, 4018, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4198 | 4001 | INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6137, 155, 4031, '1', '2025-04-01 13:49:30', '1', '2025-04-01 13:49:30', '0', 1); |
| 4199 | -INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6138, 101, 5010, '1', '2025-05-05 17:49:17', '1', '2025-05-05 17:49:17', '0', 1); | |
| 4002 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6139, 109, 1117, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4003 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6140, 109, 1126, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4004 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6141, 109, 1127, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4005 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6142, 109, 1128, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4006 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6143, 109, 1129, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4007 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6144, 109, 1130, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4008 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6145, 109, 1132, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4009 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6146, 109, 1133, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4010 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6147, 109, 1134, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4011 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6148, 109, 1135, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4012 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6149, 109, 1136, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4013 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6150, 109, 1137, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4014 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6151, 109, 2161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4015 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6152, 109, 1150, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4016 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6153, 109, 1161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4017 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6154, 109, 1162, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4018 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6155, 109, 1166, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4019 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6156, 109, 1173, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4020 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6157, 109, 1174, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4021 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6158, 109, 1178, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4022 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6159, 109, 2745, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4023 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6160, 109, 2746, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4024 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6161, 109, 2747, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4025 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6162, 109, 2748, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4026 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6163, 109, 2301, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4027 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6164, 109, 2302, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4028 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6165, 109, 5011, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4029 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6166, 109, 5012, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4030 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6167, 109, 2549, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4031 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6168, 109, 2550, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4032 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6169, 109, 2551, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4033 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6170, 109, 2552, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4034 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6171, 109, 2553, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4035 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6172, 109, 2554, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4036 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6173, 109, 2555, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4037 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6174, 109, 2556, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4038 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6175, 109, 2557, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4039 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6176, 109, 2558, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4040 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6177, 109, 2559, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 121); | |
| 4041 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6178, 111, 1117, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4042 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6179, 111, 1126, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4043 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6180, 111, 1127, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4044 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6181, 111, 1128, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4045 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6182, 111, 1129, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4046 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6183, 111, 1130, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4047 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6184, 111, 1132, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4048 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6185, 111, 1133, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4049 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6186, 111, 1134, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4050 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6187, 111, 1135, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4051 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6188, 111, 1136, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4052 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6189, 111, 1137, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4053 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6190, 111, 2161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4054 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6191, 111, 1150, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4055 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6192, 111, 1161, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4056 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6193, 111, 1162, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4057 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6194, 111, 1166, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4058 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6195, 111, 1173, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4059 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6196, 111, 1174, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4060 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6197, 111, 1178, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4061 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6198, 111, 2745, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4062 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6199, 111, 2746, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4063 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6200, 111, 2747, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4064 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6201, 111, 2748, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4065 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6202, 111, 2301, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4066 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6203, 111, 2302, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4067 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6204, 111, 5011, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4068 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6205, 111, 5012, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4069 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6206, 111, 2549, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4070 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6207, 111, 2550, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4071 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6208, 111, 2551, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4072 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6209, 111, 2552, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4073 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6210, 111, 2553, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4074 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6211, 111, 2554, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4075 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6212, 111, 2555, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4076 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6213, 111, 2556, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4077 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6214, 111, 2557, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4078 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6215, 111, 2558, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4079 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6216, 111, 2559, '1', '2025-09-06 20:52:12', '1', '2025-09-06 20:52:12', '0', 122); | |
| 4080 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6217, 109, 2756, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4081 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6218, 109, 2757, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4082 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6219, 109, 2262, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4083 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6220, 109, 2275, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4084 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6221, 109, 2276, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4085 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6222, 109, 2277, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4086 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6223, 109, 2281, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4087 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6224, 109, 2282, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4088 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6225, 109, 2283, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4089 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6226, 109, 2284, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4090 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6227, 109, 2285, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4091 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6228, 109, 2287, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4092 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6229, 109, 2288, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4093 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6230, 109, 2293, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4094 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6231, 109, 2294, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4095 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6232, 109, 2297, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4096 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6233, 109, 2300, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4097 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6234, 109, 2317, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4098 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6235, 109, 2318, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4099 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6236, 109, 2319, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4100 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6237, 109, 2320, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4101 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6238, 109, 2321, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4102 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6239, 109, 2322, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4103 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6240, 109, 2323, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4104 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6241, 109, 2324, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4105 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6242, 109, 2325, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4106 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6243, 109, 2326, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4107 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6244, 109, 2327, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4108 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6245, 109, 2328, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4109 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6246, 109, 2329, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4110 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6247, 109, 2330, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4111 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6248, 109, 2331, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4112 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6249, 109, 2332, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4113 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6250, 109, 2333, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4114 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6251, 109, 2334, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4115 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6252, 109, 2335, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4116 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6253, 109, 2363, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4117 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6254, 109, 2364, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 121); | |
| 4118 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6255, 111, 2756, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4119 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6256, 111, 2757, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4120 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6257, 111, 2262, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4121 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6258, 111, 2275, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4122 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6259, 111, 2276, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4123 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6260, 111, 2277, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4124 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6261, 111, 2281, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4125 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6262, 111, 2282, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4126 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6263, 111, 2283, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4127 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6264, 111, 2284, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4128 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6265, 111, 2285, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4129 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6266, 111, 2287, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4130 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6267, 111, 2288, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4131 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6268, 111, 2293, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4132 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6269, 111, 2294, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4133 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6270, 111, 2297, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4134 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6271, 111, 2300, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4135 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6272, 111, 2317, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4136 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6273, 111, 2318, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4137 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6274, 111, 2319, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4138 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6275, 111, 2320, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4139 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6276, 111, 2321, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4140 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6277, 111, 2322, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4141 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6278, 111, 2323, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4142 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6279, 111, 2324, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4143 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6280, 111, 2325, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4144 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6281, 111, 2326, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4145 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6282, 111, 2327, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4146 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6283, 111, 2328, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4147 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6284, 111, 2329, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4148 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6285, 111, 2330, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4149 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6286, 111, 2331, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4150 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6287, 111, 2332, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4151 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6288, 111, 2333, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4152 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6289, 111, 2334, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4153 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6290, 111, 2335, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4154 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6291, 111, 2363, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4155 | +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6292, 111, 2364, '1', '2025-09-06 20:52:25', '1', '2025-09-06 20:52:25', '0', 122); | |
| 4200 | 4156 | COMMIT; |
| 4201 | 4157 | -- @formatter:on |
| 4202 | 4158 | |
| 4203 | 4159 | DROP SEQUENCE IF EXISTS system_role_menu_seq; |
| 4204 | 4160 | CREATE SEQUENCE system_role_menu_seq |
| 4205 | - START 6139; | |
| 4161 | + START 6293; | |
| 4206 | 4162 | |
| 4207 | 4163 | -- ---------------------------- |
| 4208 | 4164 | -- Table structure for system_sms_channel |
| 4209 | 4165 | -- ---------------------------- |
| 4210 | 4166 | DROP TABLE IF EXISTS system_sms_channel; |
| 4211 | -CREATE TABLE system_sms_channel | |
| 4212 | -( | |
| 4213 | - id int8 NOT NULL, | |
| 4214 | - signature varchar(12) NOT NULL, | |
| 4215 | - code varchar(63) NOT NULL, | |
| 4216 | - status int2 NOT NULL, | |
| 4217 | - remark varchar(255) NULL DEFAULT NULL, | |
| 4218 | - api_key varchar(128) NOT NULL, | |
| 4219 | - api_secret varchar(128) NULL DEFAULT NULL, | |
| 4220 | - callback_url varchar(255) NULL DEFAULT NULL, | |
| 4221 | - creator varchar(64) NULL DEFAULT '', | |
| 4222 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4223 | - updater varchar(64) NULL DEFAULT '', | |
| 4224 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4225 | - deleted int2 NOT NULL DEFAULT 0 | |
| 4167 | +CREATE TABLE system_sms_channel ( | |
| 4168 | + id int8 NOT NULL, | |
| 4169 | + signature varchar(12) NOT NULL, | |
| 4170 | + code varchar(63) NOT NULL, | |
| 4171 | + status int2 NOT NULL, | |
| 4172 | + remark varchar(255) NULL DEFAULT NULL, | |
| 4173 | + api_key varchar(128) NOT NULL, | |
| 4174 | + api_secret varchar(128) NULL DEFAULT NULL, | |
| 4175 | + callback_url varchar(255) NULL DEFAULT NULL, | |
| 4176 | + creator varchar(64) NULL DEFAULT '', | |
| 4177 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4178 | + updater varchar(64) NULL DEFAULT '', | |
| 4179 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4180 | + deleted int2 NOT NULL DEFAULT 0 | |
| 4226 | 4181 | ); |
| 4227 | 4182 | |
| 4228 | -ALTER TABLE system_sms_channel | |
| 4229 | - ADD CONSTRAINT pk_system_sms_channel PRIMARY KEY (id); | |
| 4183 | +ALTER TABLE system_sms_channel ADD CONSTRAINT pk_system_sms_channel PRIMARY KEY (id); | |
| 4230 | 4184 | |
| 4231 | 4185 | COMMENT ON COLUMN system_sms_channel.id IS '编号'; |
| 4232 | 4186 | COMMENT ON COLUMN system_sms_channel.signature IS '短信签名'; |
| ... | ... | @@ -4262,27 +4216,25 @@ CREATE SEQUENCE system_sms_channel_seq |
| 4262 | 4216 | -- Table structure for system_sms_code |
| 4263 | 4217 | -- ---------------------------- |
| 4264 | 4218 | DROP TABLE IF EXISTS system_sms_code; |
| 4265 | -CREATE TABLE system_sms_code | |
| 4266 | -( | |
| 4267 | - id int8 NOT NULL, | |
| 4268 | - mobile varchar(11) NOT NULL, | |
| 4269 | - code varchar(6) NOT NULL, | |
| 4270 | - create_ip varchar(15) NOT NULL, | |
| 4271 | - scene int2 NOT NULL, | |
| 4272 | - today_index int2 NOT NULL, | |
| 4273 | - used int2 NOT NULL, | |
| 4274 | - used_time timestamp NULL DEFAULT NULL, | |
| 4275 | - used_ip varchar(255) NULL DEFAULT NULL, | |
| 4276 | - creator varchar(64) NULL DEFAULT '', | |
| 4277 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4278 | - updater varchar(64) NULL DEFAULT '', | |
| 4279 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4280 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4281 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4219 | +CREATE TABLE system_sms_code ( | |
| 4220 | + id int8 NOT NULL, | |
| 4221 | + mobile varchar(11) NOT NULL, | |
| 4222 | + code varchar(6) NOT NULL, | |
| 4223 | + create_ip varchar(15) NOT NULL, | |
| 4224 | + scene int2 NOT NULL, | |
| 4225 | + today_index int2 NOT NULL, | |
| 4226 | + used int2 NOT NULL, | |
| 4227 | + used_time timestamp NULL DEFAULT NULL, | |
| 4228 | + used_ip varchar(255) NULL DEFAULT NULL, | |
| 4229 | + creator varchar(64) NULL DEFAULT '', | |
| 4230 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4231 | + updater varchar(64) NULL DEFAULT '', | |
| 4232 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4233 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4234 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4282 | 4235 | ); |
| 4283 | 4236 | |
| 4284 | -ALTER TABLE system_sms_code | |
| 4285 | - ADD CONSTRAINT pk_system_sms_code PRIMARY KEY (id); | |
| 4237 | +ALTER TABLE system_sms_code ADD CONSTRAINT pk_system_sms_code PRIMARY KEY (id); | |
| 4286 | 4238 | |
| 4287 | 4239 | CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile); |
| 4288 | 4240 | |
| ... | ... | @@ -4311,39 +4263,37 @@ CREATE SEQUENCE system_sms_code_seq |
| 4311 | 4263 | -- Table structure for system_sms_log |
| 4312 | 4264 | -- ---------------------------- |
| 4313 | 4265 | DROP TABLE IF EXISTS system_sms_log; |
| 4314 | -CREATE TABLE system_sms_log | |
| 4315 | -( | |
| 4316 | - id int8 NOT NULL, | |
| 4317 | - channel_id int8 NOT NULL, | |
| 4318 | - channel_code varchar(63) NOT NULL, | |
| 4319 | - template_id int8 NOT NULL, | |
| 4320 | - template_code varchar(63) NOT NULL, | |
| 4321 | - template_type int2 NOT NULL, | |
| 4322 | - template_content varchar(255) NOT NULL, | |
| 4323 | - template_params varchar(255) NOT NULL, | |
| 4324 | - api_template_id varchar(63) NOT NULL, | |
| 4325 | - mobile varchar(11) NOT NULL, | |
| 4326 | - user_id int8 NULL DEFAULT NULL, | |
| 4327 | - user_type int2 NULL DEFAULT NULL, | |
| 4328 | - send_status int2 NOT NULL DEFAULT 0, | |
| 4329 | - send_time timestamp NULL DEFAULT NULL, | |
| 4330 | - api_send_code varchar(63) NULL DEFAULT NULL, | |
| 4331 | - api_send_msg varchar(255) NULL DEFAULT NULL, | |
| 4332 | - api_request_id varchar(255) NULL DEFAULT NULL, | |
| 4333 | - api_serial_no varchar(255) NULL DEFAULT NULL, | |
| 4334 | - receive_status int2 NOT NULL DEFAULT 0, | |
| 4335 | - receive_time timestamp NULL DEFAULT NULL, | |
| 4336 | - api_receive_code varchar(63) NULL DEFAULT NULL, | |
| 4337 | - api_receive_msg varchar(255) NULL DEFAULT NULL, | |
| 4338 | - creator varchar(64) NULL DEFAULT '', | |
| 4339 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4340 | - updater varchar(64) NULL DEFAULT '', | |
| 4341 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4342 | - deleted int2 NOT NULL DEFAULT 0 | |
| 4266 | +CREATE TABLE system_sms_log ( | |
| 4267 | + id int8 NOT NULL, | |
| 4268 | + channel_id int8 NOT NULL, | |
| 4269 | + channel_code varchar(63) NOT NULL, | |
| 4270 | + template_id int8 NOT NULL, | |
| 4271 | + template_code varchar(63) NOT NULL, | |
| 4272 | + template_type int2 NOT NULL, | |
| 4273 | + template_content varchar(255) NOT NULL, | |
| 4274 | + template_params varchar(255) NOT NULL, | |
| 4275 | + api_template_id varchar(63) NOT NULL, | |
| 4276 | + mobile varchar(11) NOT NULL, | |
| 4277 | + user_id int8 NULL DEFAULT NULL, | |
| 4278 | + user_type int2 NULL DEFAULT NULL, | |
| 4279 | + send_status int2 NOT NULL DEFAULT 0, | |
| 4280 | + send_time timestamp NULL DEFAULT NULL, | |
| 4281 | + api_send_code varchar(63) NULL DEFAULT NULL, | |
| 4282 | + api_send_msg varchar(255) NULL DEFAULT NULL, | |
| 4283 | + api_request_id varchar(255) NULL DEFAULT NULL, | |
| 4284 | + api_serial_no varchar(255) NULL DEFAULT NULL, | |
| 4285 | + receive_status int2 NOT NULL DEFAULT 0, | |
| 4286 | + receive_time timestamp NULL DEFAULT NULL, | |
| 4287 | + api_receive_code varchar(63) NULL DEFAULT NULL, | |
| 4288 | + api_receive_msg varchar(255) NULL DEFAULT NULL, | |
| 4289 | + creator varchar(64) NULL DEFAULT '', | |
| 4290 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4291 | + updater varchar(64) NULL DEFAULT '', | |
| 4292 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4293 | + deleted int2 NOT NULL DEFAULT 0 | |
| 4343 | 4294 | ); |
| 4344 | 4295 | |
| 4345 | -ALTER TABLE system_sms_log | |
| 4346 | - ADD CONSTRAINT pk_system_sms_log PRIMARY KEY (id); | |
| 4296 | +ALTER TABLE system_sms_log ADD CONSTRAINT pk_system_sms_log PRIMARY KEY (id); | |
| 4347 | 4297 | |
| 4348 | 4298 | COMMENT ON COLUMN system_sms_log.id IS '编号'; |
| 4349 | 4299 | COMMENT ON COLUMN system_sms_log.channel_id IS '短信渠道编号'; |
| ... | ... | @@ -4382,28 +4332,26 @@ CREATE SEQUENCE system_sms_log_seq |
| 4382 | 4332 | -- Table structure for system_sms_template |
| 4383 | 4333 | -- ---------------------------- |
| 4384 | 4334 | DROP TABLE IF EXISTS system_sms_template; |
| 4385 | -CREATE TABLE system_sms_template | |
| 4386 | -( | |
| 4387 | - id int8 NOT NULL, | |
| 4388 | - type int2 NOT NULL, | |
| 4389 | - status int2 NOT NULL, | |
| 4390 | - code varchar(63) NOT NULL, | |
| 4391 | - name varchar(63) NOT NULL, | |
| 4392 | - content varchar(255) NOT NULL, | |
| 4393 | - params varchar(255) NOT NULL, | |
| 4394 | - remark varchar(255) NULL DEFAULT NULL, | |
| 4395 | - api_template_id varchar(63) NOT NULL, | |
| 4396 | - channel_id int8 NOT NULL, | |
| 4397 | - channel_code varchar(63) NOT NULL, | |
| 4398 | - creator varchar(64) NULL DEFAULT '', | |
| 4399 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4400 | - updater varchar(64) NULL DEFAULT '', | |
| 4401 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4402 | - deleted int2 NOT NULL DEFAULT 0 | |
| 4335 | +CREATE TABLE system_sms_template ( | |
| 4336 | + id int8 NOT NULL, | |
| 4337 | + type int2 NOT NULL, | |
| 4338 | + status int2 NOT NULL, | |
| 4339 | + code varchar(63) NOT NULL, | |
| 4340 | + name varchar(63) NOT NULL, | |
| 4341 | + content varchar(255) NOT NULL, | |
| 4342 | + params varchar(255) NOT NULL, | |
| 4343 | + remark varchar(255) NULL DEFAULT NULL, | |
| 4344 | + api_template_id varchar(63) NOT NULL, | |
| 4345 | + channel_id int8 NOT NULL, | |
| 4346 | + channel_code varchar(63) NOT NULL, | |
| 4347 | + creator varchar(64) NULL DEFAULT '', | |
| 4348 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4349 | + updater varchar(64) NULL DEFAULT '', | |
| 4350 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4351 | + deleted int2 NOT NULL DEFAULT 0 | |
| 4403 | 4352 | ); |
| 4404 | 4353 | |
| 4405 | -ALTER TABLE system_sms_template | |
| 4406 | - ADD CONSTRAINT pk_system_sms_template PRIMARY KEY (id); | |
| 4354 | +ALTER TABLE system_sms_template ADD CONSTRAINT pk_system_sms_template PRIMARY KEY (id); | |
| 4407 | 4355 | |
| 4408 | 4356 | COMMENT ON COLUMN system_sms_template.id IS '编号'; |
| 4409 | 4357 | COMMENT ON COLUMN system_sms_template.type IS '模板类型'; |
| ... | ... | @@ -4454,26 +4402,25 @@ CREATE SEQUENCE system_sms_template_seq |
| 4454 | 4402 | -- Table structure for system_social_client |
| 4455 | 4403 | -- ---------------------------- |
| 4456 | 4404 | DROP TABLE IF EXISTS system_social_client; |
| 4457 | -CREATE TABLE system_social_client | |
| 4458 | -( | |
| 4459 | - id int8 NOT NULL, | |
| 4460 | - name varchar(255) NOT NULL, | |
| 4461 | - social_type int2 NOT NULL, | |
| 4462 | - user_type int2 NOT NULL, | |
| 4463 | - client_id varchar(255) NOT NULL, | |
| 4464 | - client_secret varchar(255) NOT NULL, | |
| 4465 | - agent_id varchar(255) NULL DEFAULT NULL, | |
| 4466 | - status int2 NOT NULL, | |
| 4467 | - creator varchar(64) NULL DEFAULT '', | |
| 4468 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4469 | - updater varchar(64) NULL DEFAULT '', | |
| 4470 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4471 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4472 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4405 | +CREATE TABLE system_social_client ( | |
| 4406 | + id int8 NOT NULL, | |
| 4407 | + name varchar(255) NOT NULL, | |
| 4408 | + social_type int2 NOT NULL, | |
| 4409 | + user_type int2 NOT NULL, | |
| 4410 | + client_id varchar(255) NOT NULL, | |
| 4411 | + client_secret varchar(2048) NOT NULL, | |
| 4412 | + public_key varchar(2048) NULL, | |
| 4413 | + agent_id varchar(255) NULL DEFAULT NULL, | |
| 4414 | + status int2 NOT NULL, | |
| 4415 | + creator varchar(64) NULL DEFAULT '', | |
| 4416 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4417 | + updater varchar(64) NULL DEFAULT '', | |
| 4418 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4419 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4420 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4473 | 4421 | ); |
| 4474 | 4422 | |
| 4475 | -ALTER TABLE system_social_client | |
| 4476 | - ADD CONSTRAINT pk_system_social_client PRIMARY KEY (id); | |
| 4423 | +ALTER TABLE system_social_client ADD CONSTRAINT pk_system_social_client PRIMARY KEY (id); | |
| 4477 | 4424 | |
| 4478 | 4425 | COMMENT ON COLUMN system_social_client.id IS '编号'; |
| 4479 | 4426 | COMMENT ON COLUMN system_social_client.name IS '应用名'; |
| ... | ... | @@ -4481,6 +4428,7 @@ COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; |
| 4481 | 4428 | COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; |
| 4482 | 4429 | COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; |
| 4483 | 4430 | COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; |
| 4431 | +COMMENT ON COLUMN system_social_client.public_key IS 'publicKey公钥'; | |
| 4484 | 4432 | COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; |
| 4485 | 4433 | COMMENT ON COLUMN system_social_client.status IS '状态'; |
| 4486 | 4434 | COMMENT ON COLUMN system_social_client.creator IS '创建者'; |
| ... | ... | @@ -4501,41 +4449,40 @@ INSERT INTO system_social_client (id, name, social_type, user_type, client_id, c |
| 4501 | 4449 | INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '微信公众号', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', '2023-10-18 16:07:46', '1', '2023-12-20 21:28:23', '1', 1); |
| 4502 | 4450 | INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (43, '微信小程序', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', '2023-10-19 13:37:41', '1', '2023-12-20 21:28:25', '1', 1); |
| 4503 | 4451 | INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (44, '1', 10, 1, '2', '3', NULL, 0, '1', '2025-04-06 20:36:28', '1', '2025-04-06 20:43:12', '1', 1); |
| 4452 | +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (45, '1', 10, 1, '2', '3', NULL, 1, '1', '2025-09-06 20:26:15', '1', '2025-09-06 20:27:55', '1', 1); | |
| 4504 | 4453 | COMMIT; |
| 4505 | 4454 | -- @formatter:on |
| 4506 | 4455 | |
| 4507 | 4456 | DROP SEQUENCE IF EXISTS system_social_client_seq; |
| 4508 | 4457 | CREATE SEQUENCE system_social_client_seq |
| 4509 | - START 45; | |
| 4458 | + START 46; | |
| 4510 | 4459 | |
| 4511 | 4460 | -- ---------------------------- |
| 4512 | 4461 | -- Table structure for system_social_user |
| 4513 | 4462 | -- ---------------------------- |
| 4514 | 4463 | DROP TABLE IF EXISTS system_social_user; |
| 4515 | -CREATE TABLE system_social_user | |
| 4516 | -( | |
| 4517 | - id int8 NOT NULL, | |
| 4518 | - type int2 NOT NULL, | |
| 4519 | - openid varchar(32) NOT NULL, | |
| 4520 | - token varchar(256) NULL DEFAULT NULL, | |
| 4521 | - raw_token_info varchar(1024) NOT NULL, | |
| 4522 | - nickname varchar(32) NOT NULL, | |
| 4523 | - avatar varchar(255) NULL DEFAULT NULL, | |
| 4524 | - raw_user_info varchar(1024) NOT NULL, | |
| 4525 | - code varchar(256) NOT NULL, | |
| 4526 | - state varchar(256) NULL DEFAULT NULL, | |
| 4527 | - creator varchar(64) NULL DEFAULT '', | |
| 4528 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4529 | - updater varchar(64) NULL DEFAULT '', | |
| 4530 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4531 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4532 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4464 | +CREATE TABLE system_social_user ( | |
| 4465 | + id int8 NOT NULL, | |
| 4466 | + type int2 NOT NULL, | |
| 4467 | + openid varchar(32) NOT NULL, | |
| 4468 | + token varchar(256) NULL DEFAULT NULL, | |
| 4469 | + raw_token_info varchar(1024) NOT NULL, | |
| 4470 | + nickname varchar(32) NOT NULL, | |
| 4471 | + avatar varchar(255) NULL DEFAULT NULL, | |
| 4472 | + raw_user_info varchar(1024) NOT NULL, | |
| 4473 | + code varchar(256) NOT NULL, | |
| 4474 | + state varchar(256) NULL DEFAULT NULL, | |
| 4475 | + creator varchar(64) NULL DEFAULT '', | |
| 4476 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4477 | + updater varchar(64) NULL DEFAULT '', | |
| 4478 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4479 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4480 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4533 | 4481 | ); |
| 4534 | 4482 | |
| 4535 | -ALTER TABLE system_social_user | |
| 4536 | - ADD CONSTRAINT pk_system_social_user PRIMARY KEY (id); | |
| 4483 | +ALTER TABLE system_social_user ADD CONSTRAINT pk_system_social_user PRIMARY KEY (id); | |
| 4537 | 4484 | |
| 4538 | -COMMENT ON COLUMN system_social_user.id IS '主键 ( 自增策略)'; | |
| 4485 | +COMMENT ON COLUMN system_social_user.id IS '主键 ( 自增策略 ) '; | |
| 4539 | 4486 | COMMENT ON COLUMN system_social_user.type IS '社交平台的类型'; |
| 4540 | 4487 | COMMENT ON COLUMN system_social_user.openid IS '社交 openid'; |
| 4541 | 4488 | COMMENT ON COLUMN system_social_user.token IS '社交 token'; |
| ... | ... | @@ -4561,25 +4508,23 @@ CREATE SEQUENCE system_social_user_seq |
| 4561 | 4508 | -- Table structure for system_social_user_bind |
| 4562 | 4509 | -- ---------------------------- |
| 4563 | 4510 | DROP TABLE IF EXISTS system_social_user_bind; |
| 4564 | -CREATE TABLE system_social_user_bind | |
| 4565 | -( | |
| 4566 | - id int8 NOT NULL, | |
| 4567 | - user_id int8 NOT NULL, | |
| 4568 | - user_type int2 NOT NULL, | |
| 4569 | - social_type int2 NOT NULL, | |
| 4570 | - social_user_id int8 NOT NULL, | |
| 4571 | - creator varchar(64) NULL DEFAULT '', | |
| 4572 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4573 | - updater varchar(64) NULL DEFAULT '', | |
| 4574 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4575 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4576 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4511 | +CREATE TABLE system_social_user_bind ( | |
| 4512 | + id int8 NOT NULL, | |
| 4513 | + user_id int8 NOT NULL, | |
| 4514 | + user_type int2 NOT NULL, | |
| 4515 | + social_type int2 NOT NULL, | |
| 4516 | + social_user_id int8 NOT NULL, | |
| 4517 | + creator varchar(64) NULL DEFAULT '', | |
| 4518 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4519 | + updater varchar(64) NULL DEFAULT '', | |
| 4520 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4521 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4522 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4577 | 4523 | ); |
| 4578 | 4524 | |
| 4579 | -ALTER TABLE system_social_user_bind | |
| 4580 | - ADD CONSTRAINT pk_system_social_user_bind PRIMARY KEY (id); | |
| 4525 | +ALTER TABLE system_social_user_bind ADD CONSTRAINT pk_system_social_user_bind PRIMARY KEY (id); | |
| 4581 | 4526 | |
| 4582 | -COMMENT ON COLUMN system_social_user_bind.id IS '主键 ( 自增策略)'; | |
| 4527 | +COMMENT ON COLUMN system_social_user_bind.id IS '主键 ( 自增策略 ) '; | |
| 4583 | 4528 | COMMENT ON COLUMN system_social_user_bind.user_id IS '用户编号'; |
| 4584 | 4529 | COMMENT ON COLUMN system_social_user_bind.user_type IS '用户类型'; |
| 4585 | 4530 | COMMENT ON COLUMN system_social_user_bind.social_type IS '社交平台的类型'; |
| ... | ... | @@ -4600,34 +4545,32 @@ CREATE SEQUENCE system_social_user_bind_seq |
| 4600 | 4545 | -- Table structure for system_tenant |
| 4601 | 4546 | -- ---------------------------- |
| 4602 | 4547 | DROP TABLE IF EXISTS system_tenant; |
| 4603 | -CREATE TABLE system_tenant | |
| 4604 | -( | |
| 4605 | - id int8 NOT NULL, | |
| 4606 | - name varchar(30) NOT NULL, | |
| 4607 | - contact_user_id int8 NULL DEFAULT NULL, | |
| 4608 | - contact_name varchar(30) NOT NULL, | |
| 4609 | - contact_mobile varchar(500) NULL DEFAULT NULL, | |
| 4610 | - status int2 NOT NULL DEFAULT 0, | |
| 4611 | - websites varchar(256) NULL DEFAULT '', | |
| 4612 | - package_id int8 NOT NULL, | |
| 4613 | - expire_time timestamp NOT NULL, | |
| 4614 | - account_count int4 NOT NULL, | |
| 4615 | - creator varchar(64) NOT NULL DEFAULT '', | |
| 4616 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4617 | - updater varchar(64) NULL DEFAULT '', | |
| 4618 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4619 | - deleted int2 NOT NULL DEFAULT 0 | |
| 4548 | +CREATE TABLE system_tenant ( | |
| 4549 | + id int8 NOT NULL, | |
| 4550 | + name varchar(30) NOT NULL, | |
| 4551 | + contact_user_id int8 NULL DEFAULT NULL, | |
| 4552 | + contact_name varchar(30) NOT NULL, | |
| 4553 | + contact_mobile varchar(500) NULL DEFAULT NULL, | |
| 4554 | + status int2 NOT NULL DEFAULT 0, | |
| 4555 | + websites varchar(1024) NULL DEFAULT '', | |
| 4556 | + package_id int8 NOT NULL, | |
| 4557 | + expire_time timestamp NOT NULL, | |
| 4558 | + account_count int4 NOT NULL, | |
| 4559 | + creator varchar(64) NOT NULL DEFAULT '', | |
| 4560 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4561 | + updater varchar(64) NULL DEFAULT '', | |
| 4562 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4563 | + deleted int2 NOT NULL DEFAULT 0 | |
| 4620 | 4564 | ); |
| 4621 | 4565 | |
| 4622 | -ALTER TABLE system_tenant | |
| 4623 | - ADD CONSTRAINT pk_system_tenant PRIMARY KEY (id); | |
| 4566 | +ALTER TABLE system_tenant ADD CONSTRAINT pk_system_tenant PRIMARY KEY (id); | |
| 4624 | 4567 | |
| 4625 | 4568 | COMMENT ON COLUMN system_tenant.id IS '租户编号'; |
| 4626 | 4569 | COMMENT ON COLUMN system_tenant.name IS '租户名'; |
| 4627 | 4570 | COMMENT ON COLUMN system_tenant.contact_user_id IS '联系人的用户编号'; |
| 4628 | 4571 | COMMENT ON COLUMN system_tenant.contact_name IS '联系人'; |
| 4629 | 4572 | COMMENT ON COLUMN system_tenant.contact_mobile IS '联系手机'; |
| 4630 | -COMMENT ON COLUMN system_tenant.status IS '租户状态(0正常 1停用)'; | |
| 4573 | +COMMENT ON COLUMN system_tenant.status IS '租户状态'; | |
| 4631 | 4574 | COMMENT ON COLUMN system_tenant.websites IS '绑定域名数组'; |
| 4632 | 4575 | COMMENT ON COLUMN system_tenant.package_id IS '租户套餐编号'; |
| 4633 | 4576 | COMMENT ON COLUMN system_tenant.expire_time IS '过期时间'; |
| ... | ... | @@ -4644,9 +4587,9 @@ COMMENT ON TABLE system_tenant IS '租户表'; |
| 4644 | 4587 | -- ---------------------------- |
| 4645 | 4588 | -- @formatter:off |
| 4646 | 4589 | BEGIN; |
| 4647 | -INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, websites, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'www.iocoder.cn', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2023-11-06 11:41:41', '0'); | |
| 4648 | -INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, websites, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'zsxq.iocoder.cn', 111, '2026-07-10 00:00:00', 30, '1', '2022-02-22 00:56:14', '1', '2025-04-03 21:33:01', '0'); | |
| 4649 | -INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, websites, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn', 111, '2022-04-29 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2024-09-22 12:10:50', '0'); | |
| 4590 | +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, websites, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'www.iocoder.cn,127.0.0.1:3000,wxc4598c446f8a9cb3', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2025-08-19 05:18:41', '0'); | |
| 4591 | +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, websites, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'zsxq.iocoder.cn,123321', 111, '2026-07-10 00:00:00', 30, '1', '2022-02-22 00:56:14', '1', '2025-08-19 21:19:29', '0'); | |
| 4592 | +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, websites, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn,222,333', 111, '2022-04-29 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2025-09-06 20:44:42', '0'); | |
| 4650 | 4593 | COMMIT; |
| 4651 | 4594 | -- @formatter:on |
| 4652 | 4595 | |
| ... | ... | @@ -4658,22 +4601,20 @@ CREATE SEQUENCE system_tenant_seq |
| 4658 | 4601 | -- Table structure for system_tenant_package |
| 4659 | 4602 | -- ---------------------------- |
| 4660 | 4603 | DROP TABLE IF EXISTS system_tenant_package; |
| 4661 | -CREATE TABLE system_tenant_package | |
| 4662 | -( | |
| 4663 | - id int8 NOT NULL, | |
| 4664 | - name varchar(30) NOT NULL, | |
| 4665 | - status int2 NOT NULL DEFAULT 0, | |
| 4666 | - remark varchar(256) NULL DEFAULT '', | |
| 4667 | - menu_ids varchar(4096) NOT NULL, | |
| 4668 | - creator varchar(64) NOT NULL DEFAULT '', | |
| 4669 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4670 | - updater varchar(64) NULL DEFAULT '', | |
| 4671 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4672 | - deleted int2 NOT NULL DEFAULT 0 | |
| 4604 | +CREATE TABLE system_tenant_package ( | |
| 4605 | + id int8 NOT NULL, | |
| 4606 | + name varchar(30) NOT NULL, | |
| 4607 | + status int2 NOT NULL DEFAULT 0, | |
| 4608 | + remark varchar(256) NULL DEFAULT '', | |
| 4609 | + menu_ids varchar(4096) NOT NULL, | |
| 4610 | + creator varchar(64) NOT NULL DEFAULT '', | |
| 4611 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4612 | + updater varchar(64) NULL DEFAULT '', | |
| 4613 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4614 | + deleted int2 NOT NULL DEFAULT 0 | |
| 4673 | 4615 | ); |
| 4674 | 4616 | |
| 4675 | -ALTER TABLE system_tenant_package | |
| 4676 | - ADD CONSTRAINT pk_system_tenant_package PRIMARY KEY (id); | |
| 4617 | +ALTER TABLE system_tenant_package ADD CONSTRAINT pk_system_tenant_package PRIMARY KEY (id); | |
| 4677 | 4618 | |
| 4678 | 4619 | COMMENT ON COLUMN system_tenant_package.id IS '套餐编号'; |
| 4679 | 4620 | COMMENT ON COLUMN system_tenant_package.name IS '套餐名'; |
| ... | ... | @@ -4692,34 +4633,31 @@ COMMENT ON TABLE system_tenant_package IS '租户套餐表'; |
| 4692 | 4633 | -- ---------------------------- |
| 4693 | 4634 | -- @formatter:off |
| 4694 | 4635 | BEGIN; |
| 4695 | -INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2739,2484,2740,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', '2022-02-22 00:54:00', '1', '2024-07-13 22:37:24', '0'); | |
| 4696 | -INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (112, '再来一个套餐', 0, '1234', '[1024,1,1025,1026,2,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1042,1043,1045,1046,1048,1050,1051,1052,1053,1054,1056,1057,1058,2083,1059,1060,1063,1064,1065,1066,1067,1070,1075,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1100,1101,1102,1103,1104,1105,1106,2130,1107,2131,1108,2132,1109,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,100,2148,101,2149,102,2150,103,2151,104,2152,105,106,107,108,109,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2739,2740,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,1255,1256,1257,1258,1259,1260,1261,1263,1264,1265,1266,1267,2447,2448,2449,2450,2451,2452,2453,2472,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2497,2525,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,500,1013,501,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023]', '1', '2025-04-04 08:15:02', '1', '2025-04-04 08:15:21', '0'); | |
| 4636 | +INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1117,1118,1119,1120,100,101,102,1126,103,1127,1128,1129,106,1130,107,1132,1133,110,1134,111,1135,112,1136,113,1137,2161,114,1138,1139,115,1140,116,1141,1142,1143,1150,1161,1162,1166,1173,1174,2713,2714,1178,2715,2716,2717,2718,2720,2721,1185,2722,1186,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,1192,2728,2729,1193,1194,2730,1195,2731,2732,1197,2733,1198,2734,1199,2735,1200,1201,1202,2739,2740,1207,1208,1209,2745,1210,2746,1211,2747,1212,2748,1213,1215,1216,1217,1218,1219,1220,2756,1221,2757,1222,1224,1225,1226,1227,1228,1229,1237,1238,2262,1239,1240,1241,1242,1243,2275,2276,2277,1255,1256,1257,2281,1258,2282,1259,2283,1260,2284,2285,2287,2288,2293,2294,2297,2300,2301,2302,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2363,2364,5011,5012,2472,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2497,2525,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,2549,1014,2550,1015,2551,1016,2552,1017,2553,1018,2554,1019,2555,1020,2556,2557,2558,2559]', '1', '2022-02-22 00:54:00', '1', '2025-09-06 20:52:25', '0'); | |
| 4697 | 4637 | COMMIT; |
| 4698 | 4638 | -- @formatter:on |
| 4699 | 4639 | |
| 4700 | 4640 | DROP SEQUENCE IF EXISTS system_tenant_package_seq; |
| 4701 | 4641 | CREATE SEQUENCE system_tenant_package_seq |
| 4702 | - START 113; | |
| 4642 | + START 112; | |
| 4703 | 4643 | |
| 4704 | 4644 | -- ---------------------------- |
| 4705 | 4645 | -- Table structure for system_user_post |
| 4706 | 4646 | -- ---------------------------- |
| 4707 | 4647 | DROP TABLE IF EXISTS system_user_post; |
| 4708 | -CREATE TABLE system_user_post | |
| 4709 | -( | |
| 4710 | - id int8 NOT NULL, | |
| 4711 | - user_id int8 NOT NULL DEFAULT 0, | |
| 4712 | - post_id int8 NOT NULL DEFAULT 0, | |
| 4713 | - creator varchar(64) NULL DEFAULT '', | |
| 4714 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4715 | - updater varchar(64) NULL DEFAULT '', | |
| 4716 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4717 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4718 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4648 | +CREATE TABLE system_user_post ( | |
| 4649 | + id int8 NOT NULL, | |
| 4650 | + user_id int8 NOT NULL DEFAULT 0, | |
| 4651 | + post_id int8 NOT NULL DEFAULT 0, | |
| 4652 | + creator varchar(64) NULL DEFAULT '', | |
| 4653 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4654 | + updater varchar(64) NULL DEFAULT '', | |
| 4655 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4656 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4657 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4719 | 4658 | ); |
| 4720 | 4659 | |
| 4721 | -ALTER TABLE system_user_post | |
| 4722 | - ADD CONSTRAINT pk_system_user_post PRIMARY KEY (id); | |
| 4660 | +ALTER TABLE system_user_post ADD CONSTRAINT pk_system_user_post PRIMARY KEY (id); | |
| 4723 | 4661 | |
| 4724 | 4662 | COMMENT ON COLUMN system_user_post.id IS 'id'; |
| 4725 | 4663 | COMMENT ON COLUMN system_user_post.user_id IS '用户ID'; |
| ... | ... | @@ -4757,21 +4695,19 @@ CREATE SEQUENCE system_user_post_seq |
| 4757 | 4695 | -- Table structure for system_user_role |
| 4758 | 4696 | -- ---------------------------- |
| 4759 | 4697 | DROP TABLE IF EXISTS system_user_role; |
| 4760 | -CREATE TABLE system_user_role | |
| 4761 | -( | |
| 4762 | - id int8 NOT NULL, | |
| 4763 | - user_id int8 NOT NULL, | |
| 4764 | - role_id int8 NOT NULL, | |
| 4765 | - creator varchar(64) NULL DEFAULT '', | |
| 4766 | - create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4767 | - updater varchar(64) NULL DEFAULT '', | |
| 4768 | - update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4769 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4770 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4698 | +CREATE TABLE system_user_role ( | |
| 4699 | + id int8 NOT NULL, | |
| 4700 | + user_id int8 NOT NULL, | |
| 4701 | + role_id int8 NOT NULL, | |
| 4702 | + creator varchar(64) NULL DEFAULT '', | |
| 4703 | + create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4704 | + updater varchar(64) NULL DEFAULT '', | |
| 4705 | + update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4706 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4707 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4771 | 4708 | ); |
| 4772 | 4709 | |
| 4773 | -ALTER TABLE system_user_role | |
| 4774 | - ADD CONSTRAINT pk_system_user_role PRIMARY KEY (id); | |
| 4710 | +ALTER TABLE system_user_role ADD CONSTRAINT pk_system_user_role PRIMARY KEY (id); | |
| 4775 | 4711 | |
| 4776 | 4712 | COMMENT ON COLUMN system_user_role.id IS '自增编号'; |
| 4777 | 4713 | COMMENT ON COLUMN system_user_role.user_id IS '用户ID'; |
| ... | ... | @@ -4791,7 +4727,6 @@ COMMENT ON TABLE system_user_role IS '用户和角色关联表'; |
| 4791 | 4727 | BEGIN; |
| 4792 | 4728 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 1, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:17', '0', 1); |
| 4793 | 4729 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', '0', 1); |
| 4794 | -INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 100, 101, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', '0', 1); | |
| 4795 | 4730 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 100, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:12', '0', 1); |
| 4796 | 4731 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 100, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:11', '0', 1); |
| 4797 | 4732 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', '0', 1); |
| ... | ... | @@ -4802,47 +4737,46 @@ INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, update |
| 4802 | 4737 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (22, 115, 2, '1', '2022-07-21 22:08:30', '1', '2022-07-21 22:08:30', '0', 1); |
| 4803 | 4738 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (35, 112, 1, '1', '2024-03-15 20:00:24', '1', '2024-03-15 20:00:24', '0', 1); |
| 4804 | 4739 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (36, 118, 1, '1', '2024-03-17 09:12:08', '1', '2024-03-17 09:12:08', '0', 1); |
| 4805 | -INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (38, 114, 101, '1', '2024-03-24 22:23:03', '1', '2024-03-24 22:23:03', '0', 1); | |
| 4806 | 4740 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (46, 117, 1, '1', '2024-10-02 10:16:11', '1', '2024-10-02 10:16:11', '0', 1); |
| 4807 | 4741 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (47, 104, 2, '1', '2025-01-04 10:40:33', '1', '2025-01-04 10:40:33', '0', 1); |
| 4808 | 4742 | INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (48, 100, 155, '1', '2025-04-04 10:41:14', '1', '2025-04-04 10:41:14', '0', 1); |
| 4743 | +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (49, 142, 1, '1', '2025-07-23 09:11:42', '1', '2025-07-23 09:11:42', '0', 1); | |
| 4744 | +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (50, 142, 2, '1', '2025-10-07 20:50:37', '1', '2025-10-07 20:50:37', '0', 1); | |
| 4809 | 4745 | COMMIT; |
| 4810 | 4746 | -- @formatter:on |
| 4811 | 4747 | |
| 4812 | 4748 | DROP SEQUENCE IF EXISTS system_user_role_seq; |
| 4813 | 4749 | CREATE SEQUENCE system_user_role_seq |
| 4814 | - START 49; | |
| 4750 | + START 51; | |
| 4815 | 4751 | |
| 4816 | 4752 | -- ---------------------------- |
| 4817 | 4753 | -- Table structure for system_users |
| 4818 | 4754 | -- ---------------------------- |
| 4819 | 4755 | DROP TABLE IF EXISTS system_users; |
| 4820 | -CREATE TABLE system_users | |
| 4821 | -( | |
| 4822 | - id int8 NOT NULL, | |
| 4823 | - username varchar(30) NOT NULL, | |
| 4824 | - password varchar(100) NOT NULL DEFAULT '', | |
| 4825 | - nickname varchar(30) NOT NULL, | |
| 4826 | - remark varchar(500) NULL DEFAULT NULL, | |
| 4827 | - dept_id int8 NULL DEFAULT NULL, | |
| 4828 | - post_ids varchar(255) NULL DEFAULT NULL, | |
| 4829 | - email varchar(50) NULL DEFAULT '', | |
| 4830 | - mobile varchar(11) NULL DEFAULT '', | |
| 4831 | - sex int2 NULL DEFAULT 0, | |
| 4832 | - avatar varchar(512) NULL DEFAULT '', | |
| 4833 | - status int2 NOT NULL DEFAULT 0, | |
| 4834 | - login_ip varchar(50) NULL DEFAULT '', | |
| 4835 | - login_date timestamp NULL DEFAULT NULL, | |
| 4836 | - creator varchar(64) NULL DEFAULT '', | |
| 4837 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4838 | - updater varchar(64) NULL DEFAULT '', | |
| 4839 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4840 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4841 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4756 | +CREATE TABLE system_users ( | |
| 4757 | + id int8 NOT NULL, | |
| 4758 | + username varchar(30) NOT NULL, | |
| 4759 | + password varchar(100) NOT NULL DEFAULT '', | |
| 4760 | + nickname varchar(30) NOT NULL, | |
| 4761 | + remark varchar(500) NULL DEFAULT NULL, | |
| 4762 | + dept_id int8 NULL DEFAULT NULL, | |
| 4763 | + post_ids varchar(255) NULL DEFAULT NULL, | |
| 4764 | + email varchar(50) NULL DEFAULT '', | |
| 4765 | + mobile varchar(11) NULL DEFAULT '', | |
| 4766 | + sex int2 NULL DEFAULT 0, | |
| 4767 | + avatar varchar(512) NULL DEFAULT '', | |
| 4768 | + status int2 NOT NULL DEFAULT 0, | |
| 4769 | + login_ip varchar(50) NULL DEFAULT '', | |
| 4770 | + login_date timestamp NULL DEFAULT NULL, | |
| 4771 | + creator varchar(64) NULL DEFAULT '', | |
| 4772 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4773 | + updater varchar(64) NULL DEFAULT '', | |
| 4774 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4775 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4776 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4842 | 4777 | ); |
| 4843 | 4778 | |
| 4844 | -ALTER TABLE system_users | |
| 4845 | - ADD CONSTRAINT pk_system_users PRIMARY KEY (id); | |
| 4779 | +ALTER TABLE system_users ADD CONSTRAINT pk_system_users PRIMARY KEY (id); | |
| 4846 | 4780 | |
| 4847 | 4781 | COMMENT ON COLUMN system_users.id IS '用户ID'; |
| 4848 | 4782 | COMMENT ON COLUMN system_users.username IS '用户账号'; |
| ... | ... | @@ -4871,9 +4805,9 @@ COMMENT ON TABLE system_users IS '用户信息表'; |
| 4871 | 4805 | -- ---------------------------- |
| 4872 | 4806 | -- @formatter:off |
| 4873 | 4807 | BEGIN; |
| 4874 | -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$04$KljJDa/LK7QfDm0lF5OhuePhlPfjRH3tB2Wu351Uidz.oQGJXevPi', '芋道源码', '管理员', 103, '[1,2]', '11aoteman@126.com', '18818260277', 2, 'http://test.yudao.iocoder.cn/test/20250502/avatar_1746154660449.png', 0, '0:0:0:0:0:0:0:1', '2025-05-10 18:03:15', 'admin', '2021-01-05 17:03:47', NULL, '2025-05-10 18:03:15', '0', 1); | |
| 4808 | +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$04$KljJDa/LK7QfDm0lF5OhuePhlPfjRH3tB2Wu351Uidz.oQGJXevPi', '芋道源码', '管理员', 103, '[1,2]', '11aoteman@126.com', '18818260272', 2, 'http://test.yudao.iocoder.cn/20250921/avatar_1758423875594.png', 0, '0:0:0:0:0:0:0:1', '2025-11-22 18:50:21', 'admin', '2021-01-05 17:03:47', NULL, '2025-11-22 18:50:21', '0', 1); | |
| 4875 | 4809 | 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$04$h.aaPKgO.odHepnk5PCsWeEwKdojFWdTItxGKfx1r0e1CSeBzsTJ6', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2025-04-08 09:36:40', '', '2021-01-07 09:07:17', NULL, '2025-04-21 14:23:08', '0', 1); |
| 4876 | -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$04$fUBSmjKCPYAUmnMzOb6qE.eZCGPhHi1JmAKclODbfS/O7fHOl2bH6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, NULL, 0, '0:0:0:0:0:0:0:1', '2024-08-11 17:48:12', '', '2021-01-13 23:50:35', NULL, '2025-04-21 14:23:08', '0', 1); | |
| 4810 | +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$04$fUBSmjKCPYAUmnMzOb6qE.eZCGPhHi1JmAKclODbfS/O7fHOl2bH6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, NULL, 0, '0:0:0:0:0:0:0:1', '2024-08-11 17:48:12', '', '2021-01-13 23:50:35', '1', '2025-07-09 23:41:58', '0', 1); | |
| 4877 | 4811 | 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$04$BrwaYn303hjA/6TnXqdGoOLhyHOAA0bVrAFu6.1dJKycqKUnIoRz2', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2025-03-28 20:01:16', '', '2021-01-21 02:13:53', NULL, '2025-04-21 14:23:08', '0', 1); |
| 4878 | 4812 | 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, NULL, 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2025-04-21 14:23:08', '0', 118); |
| 4879 | 4813 | 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, NULL, 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2025-04-21 14:23:08', '0', 119); |
| ... | ... | @@ -4884,40 +4818,38 @@ INSERT INTO system_users (id, username, password, nickname, remark, dept_id, pos |
| 4884 | 4818 | 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', '芋道1', NULL, NULL, NULL, '', '15601691300', 0, NULL, 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', '1', '2025-05-05 15:30:53', '0', 122); |
| 4885 | 4819 | 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, '[5]', '', '15601691236', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-03-24 22:21:05', '1', '2022-03-19 21:50:58', NULL, '2025-04-21 14:23:08', '0', 1); |
| 4886 | 4820 | 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$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '阿呆', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, NULL, 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2025-04-21 14:23:08', '0', 1); |
| 4887 | -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 (117, 'admin123', '$2a$04$sEtimsHu9YCkYY4/oqElHem2Ijc9ld20eYO6lN.g/21NfLUTDLB9W', '测试号02', '1111', 100, '[2]', '', '15601691234', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-10-02 10:16:20', '1', '2022-07-09 17:40:26', NULL, '2025-04-21 14:23:08', '0', 1); | |
| 4888 | -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 (118, 'goudan', '$2a$04$jth0yOj8cSJq84D6vrzusOHDwW/LpBfgBnQ6bfFlD8zNZfM632Ta2', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-03-17 09:10:27', '1', '2022-07-09 17:44:43', '1', '2025-04-21 14:23:08', '0', 1); | |
| 4889 | -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 (131, 'hh', '$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', '呵呵', NULL, 100, '[]', '777@qq.com', '15601882312', 1, NULL, 0, '', NULL, '1', '2024-04-27 08:45:56', '1', '2025-04-21 14:23:08', '0', 1); | |
| 4821 | +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 (117, 'admin123', '$2a$04$sEtimsHu9YCkYY4/oqElHem2Ijc9ld20eYO6lN.g/21NfLUTDLB9W', '测试号02', '1111', 100, '[2]', '', '15601691234', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2024-10-02 10:16:20', '1', '2022-07-09 17:40:26', '1', '2025-05-14 09:56:04', '0', 1); | |
| 4822 | +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 (118, 'goudan', '$2a$04$3suGZjnA6rM5bErf38u1felbgqbsPHGdRG3l9NkxPCEt2ah9Y6aJi', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, NULL, 0, '0:0:0:0:0:0:0:1', '2025-11-23 15:28:25', '1', '2022-07-09 17:44:43', NULL, '2025-11-23 15:28:25', '0', 1); | |
| 4890 | 4823 | 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 (139, 'wwbwwb', '$2a$04$aOHoFbQU6zfBk/1Z9raF/ugTdhjNdx7culC1HhO0zvoczAnahCiMq', '小秃头', NULL, NULL, NULL, '', '', 0, NULL, 0, '0:0:0:0:0:0:0:1', '2024-09-10 21:03:58', NULL, '2024-09-10 21:03:58', NULL, '2025-04-21 14:23:08', '0', 1); |
| 4891 | -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 (141, 'admin1', '$2a$04$oj6F6d7HrZ70kYVD3TNzEu.m3TPUzajOVuC66zdKna8KRerK1FmVa', '新用户', NULL, NULL, NULL, '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2025-04-08 13:09:07', '1', '2025-04-08 13:09:07', '1', '2025-04-08 13:09:07', '0', 1); | |
| 4824 | +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 (141, 'admin1', '$2a$04$oj6F6d7HrZ70kYVD3TNzEu.m3TPUzajOVuC66zdKna8KRerK1FmVa', '新用户', NULL, NULL, NULL, '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2025-04-08 13:09:07', '1', '2025-04-08 13:09:07', '1', '2025-05-14 19:11:48', '0', 1); | |
| 4825 | +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 (142, 'test01', '$2a$04$IaR0fGYtalIDURMMdcaD2.4JDWZ15ueQZwap9oPUuxkwSbL66vIRG', 'test01', '', NULL, '[]', '', '19021719925', 1, '', 0, '0:0:0:0:0:0:0:1', '2025-07-29 19:47:17', '1', '2025-07-09 21:07:10', '1', '2025-11-25 19:49:08', '0', 1); | |
| 4892 | 4826 | COMMIT; |
| 4893 | 4827 | -- @formatter:on |
| 4894 | 4828 | |
| 4895 | 4829 | DROP SEQUENCE IF EXISTS system_users_seq; |
| 4896 | 4830 | CREATE SEQUENCE system_users_seq |
| 4897 | - START 142; | |
| 4831 | + START 143; | |
| 4898 | 4832 | |
| 4899 | 4833 | -- ---------------------------- |
| 4900 | 4834 | -- Table structure for yudao_demo01_contact |
| 4901 | 4835 | -- ---------------------------- |
| 4902 | 4836 | DROP TABLE IF EXISTS yudao_demo01_contact; |
| 4903 | -CREATE TABLE yudao_demo01_contact | |
| 4904 | -( | |
| 4905 | - id int8 NOT NULL, | |
| 4906 | - name varchar(100) NOT NULL DEFAULT '', | |
| 4907 | - sex int2 NOT NULL, | |
| 4908 | - birthday timestamp NOT NULL, | |
| 4909 | - description varchar(255) NOT NULL, | |
| 4910 | - avatar varchar(512) NULL DEFAULT NULL, | |
| 4911 | - creator varchar(64) NULL DEFAULT '', | |
| 4912 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4913 | - updater varchar(64) NULL DEFAULT '', | |
| 4914 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4915 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4916 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4837 | +CREATE TABLE yudao_demo01_contact ( | |
| 4838 | + id int8 NOT NULL, | |
| 4839 | + name varchar(100) NOT NULL DEFAULT '', | |
| 4840 | + sex int2 NOT NULL, | |
| 4841 | + birthday timestamp NOT NULL, | |
| 4842 | + description varchar(255) NOT NULL, | |
| 4843 | + avatar varchar(512) NULL DEFAULT NULL, | |
| 4844 | + creator varchar(64) NULL DEFAULT '', | |
| 4845 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4846 | + updater varchar(64) NULL DEFAULT '', | |
| 4847 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4848 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4849 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4917 | 4850 | ); |
| 4918 | 4851 | |
| 4919 | -ALTER TABLE yudao_demo01_contact | |
| 4920 | - ADD CONSTRAINT pk_yudao_demo01_contact PRIMARY KEY (id); | |
| 4852 | +ALTER TABLE yudao_demo01_contact ADD CONSTRAINT pk_yudao_demo01_contact PRIMARY KEY (id); | |
| 4921 | 4853 | |
| 4922 | 4854 | COMMENT ON COLUMN yudao_demo01_contact.id IS '编号'; |
| 4923 | 4855 | COMMENT ON COLUMN yudao_demo01_contact.name IS '名字'; |
| ... | ... | @@ -4950,21 +4882,19 @@ CREATE SEQUENCE yudao_demo01_contact_seq |
| 4950 | 4882 | -- Table structure for yudao_demo02_category |
| 4951 | 4883 | -- ---------------------------- |
| 4952 | 4884 | DROP TABLE IF EXISTS yudao_demo02_category; |
| 4953 | -CREATE TABLE yudao_demo02_category | |
| 4954 | -( | |
| 4955 | - id int8 NOT NULL, | |
| 4956 | - name varchar(100) NOT NULL DEFAULT '', | |
| 4957 | - parent_id int8 NOT NULL, | |
| 4958 | - creator varchar(64) NULL DEFAULT '', | |
| 4959 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4960 | - updater varchar(64) NULL DEFAULT '', | |
| 4961 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4962 | - deleted int2 NOT NULL DEFAULT 0, | |
| 4963 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4885 | +CREATE TABLE yudao_demo02_category ( | |
| 4886 | + id int8 NOT NULL, | |
| 4887 | + name varchar(100) NOT NULL DEFAULT '', | |
| 4888 | + parent_id int8 NOT NULL, | |
| 4889 | + creator varchar(64) NULL DEFAULT '', | |
| 4890 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4891 | + updater varchar(64) NULL DEFAULT '', | |
| 4892 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4893 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4894 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 4964 | 4895 | ); |
| 4965 | 4896 | |
| 4966 | -ALTER TABLE yudao_demo02_category | |
| 4967 | - ADD CONSTRAINT pk_yudao_demo02_category PRIMARY KEY (id); | |
| 4897 | +ALTER TABLE yudao_demo02_category ADD CONSTRAINT pk_yudao_demo02_category PRIMARY KEY (id); | |
| 4968 | 4898 | |
| 4969 | 4899 | COMMENT ON COLUMN yudao_demo02_category.id IS '编号'; |
| 4970 | 4900 | COMMENT ON COLUMN yudao_demo02_category.name IS '名字'; |
| ... | ... | @@ -4988,33 +4918,32 @@ INSERT INTO yudao_demo02_category (id, name, parent_id, creator, create_time, up |
| 4988 | 4918 | INSERT INTO yudao_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '小番茄', 2, '1', '2023-11-16 20:24:39', '1', '2023-11-16 20:24:39', '0', 1); |
| 4989 | 4919 | INSERT INTO yudao_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '大番茄', 2, '1', '2023-11-16 20:24:46', '1', '2023-11-16 20:24:46', '0', 1); |
| 4990 | 4920 | INSERT INTO yudao_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, '11', 3, '1', '2023-11-24 19:29:34', '1', '2023-11-24 19:29:34', '0', 1); |
| 4921 | +INSERT INTO yudao_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, '1', 0, '1', '2025-10-01 09:19:20', '1', '2025-10-01 09:19:20', '0', 1); | |
| 4991 | 4922 | COMMIT; |
| 4992 | 4923 | -- @formatter:on |
| 4993 | 4924 | |
| 4994 | 4925 | DROP SEQUENCE IF EXISTS yudao_demo02_category_seq; |
| 4995 | 4926 | CREATE SEQUENCE yudao_demo02_category_seq |
| 4996 | - START 7; | |
| 4927 | + START 8; | |
| 4997 | 4928 | |
| 4998 | 4929 | -- ---------------------------- |
| 4999 | 4930 | -- Table structure for yudao_demo03_course |
| 5000 | 4931 | -- ---------------------------- |
| 5001 | 4932 | DROP TABLE IF EXISTS yudao_demo03_course; |
| 5002 | -CREATE TABLE yudao_demo03_course | |
| 5003 | -( | |
| 5004 | - id int8 NOT NULL, | |
| 5005 | - student_id int8 NOT NULL, | |
| 5006 | - name varchar(100) NOT NULL DEFAULT '', | |
| 5007 | - score int2 NOT NULL, | |
| 5008 | - creator varchar(64) NULL DEFAULT '', | |
| 5009 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5010 | - updater varchar(64) NULL DEFAULT '', | |
| 5011 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5012 | - deleted int2 NOT NULL DEFAULT 0, | |
| 5013 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4933 | +CREATE TABLE yudao_demo03_course ( | |
| 4934 | + id int8 NOT NULL, | |
| 4935 | + student_id int8 NOT NULL, | |
| 4936 | + name varchar(100) NOT NULL DEFAULT '', | |
| 4937 | + score int2 NOT NULL, | |
| 4938 | + creator varchar(64) NULL DEFAULT '', | |
| 4939 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4940 | + updater varchar(64) NULL DEFAULT '', | |
| 4941 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 4942 | + deleted int2 NOT NULL DEFAULT 0, | |
| 4943 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 5014 | 4944 | ); |
| 5015 | 4945 | |
| 5016 | -ALTER TABLE yudao_demo03_course | |
| 5017 | - ADD CONSTRAINT pk_yudao_demo03_course PRIMARY KEY (id); | |
| 4946 | +ALTER TABLE yudao_demo03_course ADD CONSTRAINT pk_yudao_demo03_course PRIMARY KEY (id); | |
| 5018 | 4947 | |
| 5019 | 4948 | COMMENT ON COLUMN yudao_demo03_course.id IS '编号'; |
| 5020 | 4949 | COMMENT ON COLUMN yudao_demo03_course.student_id IS '学生编号'; |
| ... | ... | @@ -5061,22 +4990,20 @@ CREATE SEQUENCE yudao_demo03_course_seq |
| 5061 | 4990 | -- Table structure for yudao_demo03_grade |
| 5062 | 4991 | -- ---------------------------- |
| 5063 | 4992 | DROP TABLE IF EXISTS yudao_demo03_grade; |
| 5064 | -CREATE TABLE yudao_demo03_grade | |
| 5065 | -( | |
| 5066 | - id int8 NOT NULL, | |
| 5067 | - student_id int8 NOT NULL, | |
| 5068 | - name varchar(100) NOT NULL DEFAULT '', | |
| 5069 | - teacher varchar(255) NOT NULL, | |
| 5070 | - creator varchar(64) NULL DEFAULT '', | |
| 5071 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5072 | - updater varchar(64) NULL DEFAULT '', | |
| 5073 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5074 | - deleted int2 NOT NULL DEFAULT 0, | |
| 5075 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 4993 | +CREATE TABLE yudao_demo03_grade ( | |
| 4994 | + id int8 NOT NULL, | |
| 4995 | + student_id int8 NOT NULL, | |
| 4996 | + name varchar(100) NOT NULL DEFAULT '', | |
| 4997 | + teacher varchar(255) NOT NULL, | |
| 4998 | + creator varchar(64) NULL DEFAULT '', | |
| 4999 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5000 | + updater varchar(64) NULL DEFAULT '', | |
| 5001 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5002 | + deleted int2 NOT NULL DEFAULT 0, | |
| 5003 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 5076 | 5004 | ); |
| 5077 | 5005 | |
| 5078 | -ALTER TABLE yudao_demo03_grade | |
| 5079 | - ADD CONSTRAINT pk_yudao_demo03_grade PRIMARY KEY (id); | |
| 5006 | +ALTER TABLE yudao_demo03_grade ADD CONSTRAINT pk_yudao_demo03_grade PRIMARY KEY (id); | |
| 5080 | 5007 | |
| 5081 | 5008 | COMMENT ON COLUMN yudao_demo03_grade.id IS '编号'; |
| 5082 | 5009 | COMMENT ON COLUMN yudao_demo03_grade.student_id IS '学生编号'; |
| ... | ... | @@ -5109,23 +5036,21 @@ CREATE SEQUENCE yudao_demo03_grade_seq |
| 5109 | 5036 | -- Table structure for yudao_demo03_student |
| 5110 | 5037 | -- ---------------------------- |
| 5111 | 5038 | DROP TABLE IF EXISTS yudao_demo03_student; |
| 5112 | -CREATE TABLE yudao_demo03_student | |
| 5113 | -( | |
| 5114 | - id int8 NOT NULL, | |
| 5115 | - name varchar(100) NOT NULL DEFAULT '', | |
| 5116 | - sex int2 NOT NULL, | |
| 5117 | - birthday timestamp NOT NULL, | |
| 5118 | - description varchar(255) NOT NULL, | |
| 5119 | - creator varchar(64) NULL DEFAULT '', | |
| 5120 | - create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5121 | - updater varchar(64) NULL DEFAULT '', | |
| 5122 | - update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5123 | - deleted int2 NOT NULL DEFAULT 0, | |
| 5124 | - tenant_id int8 NOT NULL DEFAULT 0 | |
| 5039 | +CREATE TABLE yudao_demo03_student ( | |
| 5040 | + id int8 NOT NULL, | |
| 5041 | + name varchar(100) NOT NULL DEFAULT '', | |
| 5042 | + sex int2 NOT NULL, | |
| 5043 | + birthday timestamp NOT NULL, | |
| 5044 | + description varchar(255) NOT NULL, | |
| 5045 | + creator varchar(64) NULL DEFAULT '', | |
| 5046 | + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5047 | + updater varchar(64) NULL DEFAULT '', | |
| 5048 | + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 5049 | + deleted int2 NOT NULL DEFAULT 0, | |
| 5050 | + tenant_id int8 NOT NULL DEFAULT 0 | |
| 5125 | 5051 | ); |
| 5126 | 5052 | |
| 5127 | -ALTER TABLE yudao_demo03_student | |
| 5128 | - ADD CONSTRAINT pk_yudao_demo03_student PRIMARY KEY (id); | |
| 5053 | +ALTER TABLE yudao_demo03_student ADD CONSTRAINT pk_yudao_demo03_student PRIMARY KEY (id); | |
| 5129 | 5054 | |
| 5130 | 5055 | COMMENT ON COLUMN yudao_demo03_student.id IS '编号'; |
| 5131 | 5056 | COMMENT ON COLUMN yudao_demo03_student.name IS '名字'; | ... | ... |
sql/sqlserver/ruoyi-vue-pro.sql
| ... | ... | @@ -2945,7 +2945,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 2945 | 2945 | GO |
| 2946 | 2946 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1692, 14, N'MiniMax', N'MiniMax', N'ai_platform', 0, N'', N'', N'', N'1', N'2025-03-11 20:04:51', N'1', N'2025-03-11 20:04:51', N'0') |
| 2947 | 2947 | GO |
| 2948 | -INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, N'月之暗灭', N'Moonshot', N'ai_platform', 0, N'', N'', N'', N'1', N'2025-03-11 20:05:08', N'1', N'2025-03-11 20:05:08', N'0') | |
| 2948 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1693, 15, N'月之暗面', N'Moonshot', N'ai_platform', 0, N'', N'', N'', N'1', N'2025-03-11 20:05:08', N'1', N'2025-03-11 20:05:08', N'0') | |
| 2949 | 2949 | GO |
| 2950 | 2950 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2000, 0, N'标准数据格式(JSON)', N'0', N'iot_data_format', 0, N'default', N'', N'', N'1', N'2024-08-10 11:53:26', N'1', N'2025-03-17 09:28:16', N'0') |
| 2951 | 2951 | GO |
| ... | ... | @@ -3299,6 +3299,8 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t |
| 3299 | 3299 | GO |
| 3300 | 3300 | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3002, 6, N'支付宝余额', N'6', N'brokerage_withdraw_type', 0, N'', N'', N'API 打款', N'1', N'2025-05-10 08:24:49', N'1', N'2025-05-10 08:24:49', N'0') |
| 3301 | 3301 | GO |
| 3302 | +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (3035, 40, N'支付宝小程序', N'40', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:05:38', N'1', N'2023-11-04 13:07:16', N'0') | |
| 3303 | +GO | |
| 3302 | 3304 | SET IDENTITY_INSERT system_dict_data OFF |
| 3303 | 3305 | GO |
| 3304 | 3306 | COMMIT |
| ... | ... | @@ -10433,7 +10435,8 @@ CREATE TABLE system_social_client |
| 10433 | 10435 | social_type tinyint NOT NULL, |
| 10434 | 10436 | user_type tinyint NOT NULL, |
| 10435 | 10437 | client_id nvarchar(255) NOT NULL, |
| 10436 | - client_secret nvarchar(255) NOT NULL, | |
| 10438 | + client_secret nvarchar(2048) NOT NULL, | |
| 10439 | + public_key nvarchar(2048) DEFAULT NULL NULL, | |
| 10437 | 10440 | agent_id nvarchar(255) DEFAULT NULL NULL, |
| 10438 | 10441 | status tinyint NOT NULL, |
| 10439 | 10442 | creator nvarchar(64) DEFAULT '' NULL, |
| ... | ... | @@ -10488,6 +10491,13 @@ EXEC sp_addextendedproperty |
| 10488 | 10491 | GO |
| 10489 | 10492 | |
| 10490 | 10493 | EXEC sp_addextendedproperty |
| 10494 | + 'MS_Description', N'publicKey公钥', | |
| 10495 | + 'SCHEMA', N'dbo', | |
| 10496 | + 'TABLE', N'system_social_client', | |
| 10497 | + 'COLUMN', N'public_key' | |
| 10498 | +GO | |
| 10499 | + | |
| 10500 | +EXEC sp_addextendedproperty | |
| 10491 | 10501 | 'MS_Description', N'代理编号', |
| 10492 | 10502 | 'SCHEMA', N'dbo', |
| 10493 | 10503 | 'TABLE', N'system_social_client', | ... | ... |
sql/tools/convertor.py
| ... | ... | @@ -6,12 +6,12 @@ Author: dhb52 (https://gitee.com/dhb52) |
| 6 | 6 | pip install simple-ddl-parser |
| 7 | 7 | |
| 8 | 8 | or with uv |
| 9 | -uv run --with simple-ddl-parser convertor.py postgres > ../postgresql/ruoyi-vue-pro.sql 239ms 四 5/22 21:03:16 2025 | |
| 10 | -uv run --with simple-ddl-parser convertor.py sqlserver > ../sqlserver/ruoyi-vue-pro.sql | |
| 11 | -uv run --with simple-ddl-parser convertor.py kingbase > ../kingbase/ruoyi-vue-pro.sql | |
| 12 | -uv run --with simple-ddl-parser convertor.py opengauss > ../opengauss/ruoyi-vue-pro.sql | |
| 13 | -uv run --with simple-ddl-parser convertor.py oracle > ../oracle/ruoyi-vue-pro.sql | |
| 14 | -uv run --with simple-ddl-parser convertor.py dm8 > ../dm/ruoyi-vue-pro-dm8.sql | |
| 9 | +uv run --with simple-ddl-parser convertor.py postgres ../mysql/ruoyi-vue-pro.sql > ../postgresql/ruoyi-vue-pro.sql | |
| 10 | +uv run --with simple-ddl-parser convertor.py sqlserver ../mysql/ruoyi-vue-pro.sql > ../sqlserver/ruoyi-vue-pro.sql | |
| 11 | +uv run --with simple-ddl-parser convertor.py kingbase ../mysql/ruoyi-vue-pro.sql > ../kingbase/ruoyi-vue-pro.sql | |
| 12 | +uv run --with simple-ddl-parser convertor.py opengauss ../mysql/ruoyi-vue-pro.sql > ../opengauss/ruoyi-vue-pro.sql | |
| 13 | +uv run --with simple-ddl-parser convertor.py oracle ../mysql/ruoyi-vue-pro.sql > ../oracle/ruoyi-vue-pro.sql | |
| 14 | +uv run --with simple-ddl-parser convertor.py dm8 ../mysql/ruoyi-vue-pro.sql > ../dm/ruoyi-vue-pro-dm8.sql | |
| 15 | 15 | """ |
| 16 | 16 | |
| 17 | 17 | import argparse |
| ... | ... | @@ -24,6 +24,9 @@ from typing import Dict, Generator, Optional, Tuple, Union |
| 24 | 24 | |
| 25 | 25 | from simple_ddl_parser import DDLParser |
| 26 | 26 | |
| 27 | +# 避免 Windows 系统使用默认的 GBK 编码 | |
| 28 | +sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf-8', buffering=1) | |
| 29 | + | |
| 27 | 30 | PREAMBLE = """/* |
| 28 | 31 | Yudao Database Transfer Tool |
| 29 | 32 | |
| ... | ... | @@ -49,6 +52,7 @@ def load_and_clean(sql_file: str) -> str: |
| 49 | 52 | REPLACE_PAIR_LIST = ( |
| 50 | 53 | (")\nVALUES ", ") VALUES "), |
| 51 | 54 | (" CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ", " "), |
| 55 | + (" CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ", " "), | |
| 52 | 56 | (" KEY `", " INDEX `"), |
| 53 | 57 | ("UNIQUE INDEX", "UNIQUE KEY"), |
| 54 | 58 | ("b'0'", "'0'"), |
| ... | ... | @@ -58,6 +62,11 @@ def load_and_clean(sql_file: str) -> str: |
| 58 | 62 | content = open(sql_file, encoding="utf-8").read() |
| 59 | 63 | for replace_pair in REPLACE_PAIR_LIST: |
| 60 | 64 | content = content.replace(*replace_pair) |
| 65 | + # 移除索引字段的前缀长度定义,例如: `name`(32) -> `name` | |
| 66 | + # 移除索引定义上的 USING BTREE COMMENT 部分 | |
| 67 | + # 相关 issue:https://t.zsxq.com/96IFc 、https://t.zsxq.com/rC3A3 | |
| 68 | + content = re.sub(r'`([^`]+)`\(\d+\)', r'`\1`', content) | |
| 69 | + content = re.sub(r'\s+USING\s+BTREE\s+COMMENT\s+\'[^\']+\'', '', content) | |
| 61 | 70 | content = re.sub(r"ENGINE.*COMMENT", "COMMENT", content) |
| 62 | 71 | content = re.sub(r"ENGINE.*;", ";", content) |
| 63 | 72 | return content |
| ... | ... | @@ -259,10 +268,10 @@ class Convertor(ABC): |
| 259 | 268 | # 解析注释 |
| 260 | 269 | for column in table_ddl["columns"]: |
| 261 | 270 | column["comment"] = bytes(column["comment"], "utf-8").decode( |
| 262 | - "unicode_escape" | |
| 271 | + r"unicode_escape" | |
| 263 | 272 | )[1:-1] |
| 264 | 273 | table_ddl["comment"] = bytes(table_ddl["comment"], "utf-8").decode( |
| 265 | - "unicode_escape" | |
| 274 | + r"unicode_escape" | |
| 266 | 275 | )[1:-1] |
| 267 | 276 | |
| 268 | 277 | # 为每个表生成个6个基本部分 |
| ... | ... | @@ -919,9 +928,15 @@ def main(): |
| 919 | 928 | help="目标数据库类型", |
| 920 | 929 | choices=["postgres", "oracle", "sqlserver", "dm8", "kingbase", "opengauss"], |
| 921 | 930 | ) |
| 931 | + parser.add_argument( | |
| 932 | + "path", | |
| 933 | + type=str, | |
| 934 | + help="源数据库脚本路径", | |
| 935 | + default="../mysql/ruoyi-vue-pro.sql" | |
| 936 | + ) | |
| 922 | 937 | args = parser.parse_args() |
| 923 | 938 | |
| 924 | - sql_file = pathlib.Path("../mysql/ruoyi-vue-pro.sql").resolve().as_posix() | |
| 939 | + sql_file = pathlib.Path(args.path).resolve().as_posix() | |
| 925 | 940 | convertor = None |
| 926 | 941 | if args.type == "postgres": |
| 927 | 942 | convertor = PostgreSQLConvertor(sql_file) | ... | ... |
yudao-dependencies/pom.xml
| ... | ... | @@ -14,68 +14,68 @@ |
| 14 | 14 | <url>https://github.com/YunaiV/ruoyi-vue-pro</url> |
| 15 | 15 | |
| 16 | 16 | <properties> |
| 17 | - <revision>2025.09-SNAPSHOT</revision> | |
| 17 | + <revision>2025.12-SNAPSHOT</revision> | |
| 18 | 18 | <flatten-maven-plugin.version>1.7.2</flatten-maven-plugin.version> |
| 19 | 19 | <!-- 统一依赖管理 --> |
| 20 | - <spring.boot.version>3.5.5</spring.boot.version> | |
| 20 | + <spring.boot.version>3.5.9</spring.boot.version> | |
| 21 | 21 | <!-- Web 相关 --> |
| 22 | - <springdoc.version>2.8.11</springdoc.version> | |
| 22 | + <springdoc.version>2.8.14</springdoc.version> | |
| 23 | 23 | <knife4j.version>4.5.0</knife4j.version> |
| 24 | 24 | <!-- DB 相关 --> |
| 25 | 25 | <druid.version>1.2.27</druid.version> |
| 26 | 26 | <mybatis.version>3.5.19</mybatis.version> |
| 27 | - <mybatis-plus.version>3.5.14</mybatis-plus.version> | |
| 28 | - <mybatis-plus-join.version>1.5.4</mybatis-plus-join.version> | |
| 29 | - <dynamic-datasource.version>4.3.1</dynamic-datasource.version> | |
| 27 | + <mybatis-plus.version>3.5.15</mybatis-plus.version> | |
| 28 | + <mybatis-plus-join.version>1.5.5</mybatis-plus-join.version> | |
| 29 | + <dynamic-datasource.version>4.5.0</dynamic-datasource.version> | |
| 30 | 30 | <easy-trans.version>3.0.6</easy-trans.version> |
| 31 | - <redisson.version>3.51.0</redisson.version> | |
| 31 | + <redisson.version>3.52.0</redisson.version> | |
| 32 | 32 | <dm8.jdbc.version>8.1.3.140</dm8.jdbc.version> |
| 33 | 33 | <kingbase.jdbc.version>8.6.0</kingbase.jdbc.version> |
| 34 | 34 | <opengauss.jdbc.version>5.1.0</opengauss.jdbc.version> |
| 35 | - <taos.version>3.7.3</taos.version> | |
| 35 | + <taos.version>3.7.9</taos.version> | |
| 36 | 36 | <!-- 消息队列 --> |
| 37 | - <rocketmq-spring.version>2.3.4</rocketmq-spring.version> | |
| 37 | + <rocketmq-spring.version>2.3.5</rocketmq-spring.version> | |
| 38 | 38 | <!-- 服务保障相关 --> |
| 39 | 39 | <lock4j.version>2.2.7</lock4j.version> |
| 40 | 40 | <!-- 监控相关 --> |
| 41 | 41 | <skywalking.version>9.5.0</skywalking.version> |
| 42 | - <spring-boot-admin.version>3.5.2</spring-boot-admin.version> | |
| 42 | + <spring-boot-admin.version>3.5.6</spring-boot-admin.version> | |
| 43 | 43 | <opentracing.version>0.33.0</opentracing.version> |
| 44 | 44 | <!-- Test 测试相关 --> |
| 45 | 45 | <podam.version>8.0.2.RELEASE</podam.version> |
| 46 | - <jedis-mock.version>1.1.11</jedis-mock.version> | |
| 46 | + <jedis-mock.version>1.1.12</jedis-mock.version> | |
| 47 | 47 | <mockito-inline.version>5.2.0</mockito-inline.version> |
| 48 | 48 | <!-- Bpm 工作流相关 --> |
| 49 | - <flowable.version>7.0.1</flowable.version> | |
| 49 | + <flowable.version>7.2.0</flowable.version> | |
| 50 | 50 | <!-- 工具类相关 --> |
| 51 | 51 | <anji-plus-captcha.version>1.4.0</anji-plus-captcha.version> |
| 52 | 52 | <jsoup.version>1.21.2</jsoup.version> |
| 53 | - <lombok.version>1.18.38</lombok.version> | |
| 53 | + <lombok.version>1.18.42</lombok.version> | |
| 54 | 54 | <mapstruct.version>1.6.3</mapstruct.version> |
| 55 | - <hutool-5.version>5.8.40</hutool-5.version> | |
| 55 | + <hutool-5.version>5.8.42</hutool-5.version> | |
| 56 | 56 | <hutool-6.version>6.0.0-M22</hutool-6.version> |
| 57 | 57 | <fastexcel.version>1.3.0</fastexcel.version> |
| 58 | 58 | <velocity.version>2.4.1</velocity.version> |
| 59 | 59 | <fastjson.version>1.2.83</fastjson.version> |
| 60 | - <guava.version>33.4.8-jre</guava.version> | |
| 60 | + <guava.version>33.5.0-jre</guava.version> | |
| 61 | 61 | <transmittable-thread-local.version>2.14.5</transmittable-thread-local.version> |
| 62 | - <commons-net.version>3.11.1</commons-net.version> | |
| 63 | - <commons-lang3.version>3.18.0</commons-lang3.version> | |
| 64 | - <jsch.version>2.27.3</jsch.version> | |
| 65 | - <tika-core.version>3.2.2</tika-core.version> | |
| 62 | + <commons-net.version>3.12.0</commons-net.version> | |
| 63 | + <commons-lang3.version>3.20.0</commons-lang3.version> | |
| 64 | + <jsch.version>2.27.7</jsch.version> | |
| 65 | + <tika-core.version>3.2.3</tika-core.version> | |
| 66 | 66 | <ip2region.version>2.7.0</ip2region.version> |
| 67 | 67 | <bizlog-sdk.version>3.0.6</bizlog-sdk.version> |
| 68 | - <netty.version>4.2.4.Final</netty.version> | |
| 68 | + <netty.version>4.2.9.Final</netty.version> | |
| 69 | 69 | <mqtt.version>1.2.5</mqtt.version> |
| 70 | - <pf4j-spring.version>0.9.0</pf4j-spring.version> | |
| 71 | - <vertx.version>4.5.21</vertx.version> | |
| 70 | + <vertx.version>4.5.22</vertx.version> | |
| 72 | 71 | <!-- 三方云服务相关 --> |
| 73 | - <awssdk.version>2.30.14</awssdk.version> | |
| 72 | + <awssdk.version>2.40.15</awssdk.version> | |
| 74 | 73 | <justauth.version>1.16.7</justauth.version> |
| 75 | 74 | <justauth-starter.version>1.4.0</justauth-starter.version> |
| 76 | - <jimureport.version>2.1.1</jimureport.version> | |
| 77 | - <jimubi.version>2.1.0</jimubi.version> | |
| 78 | - <weixin-java.version>4.7.7-20250808.182223</weixin-java.version> | |
| 75 | + <jimureport.version>2.1.3</jimureport.version> | |
| 76 | + <jimubi.version>2.3.0</jimubi.version> | |
| 77 | + <weixin-java.version>4.7.9-20251224.161447</weixin-java.version> | |
| 78 | + <alipay-sdk-java.version>4.40.607.ALL</alipay-sdk-java.version> | |
| 79 | 79 | </properties> |
| 80 | 80 | |
| 81 | 81 | <dependencyManagement> |
| ... | ... | @@ -581,6 +581,18 @@ |
| 581 | 581 | </dependency> |
| 582 | 582 | |
| 583 | 583 | <dependency> |
| 584 | + <groupId>com.alipay.sdk</groupId> | |
| 585 | + <artifactId>alipay-sdk-java</artifactId> | |
| 586 | + <version>${alipay-sdk-java.version}</version> | |
| 587 | + <exclusions> | |
| 588 | + <exclusion> | |
| 589 | + <groupId>org.bouncycastle</groupId> | |
| 590 | + <artifactId>bcprov-jdk15on</artifactId> | |
| 591 | + </exclusion> | |
| 592 | + </exclusions> | |
| 593 | + </dependency> | |
| 594 | + | |
| 595 | + <dependency> | |
| 584 | 596 | <groupId>com.github.binarywang</groupId> |
| 585 | 597 | <artifactId>weixin-java-pay</artifactId> |
| 586 | 598 | <version>${weixin-java.version}</version> |
| ... | ... | @@ -618,19 +630,6 @@ |
| 618 | 630 | </exclusions> |
| 619 | 631 | </dependency> |
| 620 | 632 | |
| 621 | - <!-- PF4J --> | |
| 622 | - <dependency> | |
| 623 | - <groupId>org.pf4j</groupId> | |
| 624 | - <artifactId>pf4j-spring</artifactId> | |
| 625 | - <version>${pf4j-spring.version}</version> | |
| 626 | - <exclusions> | |
| 627 | - <exclusion> | |
| 628 | - <groupId>org.slf4j</groupId> | |
| 629 | - <artifactId>slf4j-log4j12</artifactId> | |
| 630 | - </exclusion> | |
| 631 | - </exclusions> | |
| 632 | - </dependency> | |
| 633 | - | |
| 634 | 633 | <!-- Vert.x --> |
| 635 | 634 | <dependency> |
| 636 | 635 | <groupId>io.vertx</groupId> | ... | ... |
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java
| ... | ... | @@ -27,10 +27,10 @@ public class PageParam implements Serializable { |
| 27 | 27 | @Min(value = 1, message = "页码最小值为 1") |
| 28 | 28 | private Integer pageNo = PAGE_NO; |
| 29 | 29 | |
| 30 | - @Schema(description = "每页条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | |
| 30 | + @Schema(description = "每页条数,最大值为 200", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | |
| 31 | 31 | @NotNull(message = "每页条数不能为空") |
| 32 | 32 | @Min(value = 1, message = "每页条数最小值为 1") |
| 33 | - @Max(value = 100, message = "每页条数最大值为 100") | |
| 33 | + @Max(value = 200, message = "每页条数最大值为 200") | |
| 34 | 34 | private Integer pageSize = PAGE_SIZE; |
| 35 | 35 | |
| 36 | 36 | } | ... | ... |
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java
| ... | ... | @@ -13,6 +13,7 @@ import org.springframework.web.util.UriComponents; |
| 13 | 13 | import org.springframework.web.util.UriComponentsBuilder; |
| 14 | 14 | |
| 15 | 15 | import java.net.URI; |
| 16 | +import java.net.URLDecoder; | |
| 16 | 17 | import java.net.URLEncoder; |
| 17 | 18 | import java.nio.charset.Charset; |
| 18 | 19 | import java.nio.charset.StandardCharsets; |
| ... | ... | @@ -35,6 +36,16 @@ public class HttpUtils { |
| 35 | 36 | return URLEncoder.encode(value, StandardCharsets.UTF_8); |
| 36 | 37 | } |
| 37 | 38 | |
| 39 | + /** | |
| 40 | + * 解码 URL 参数 | |
| 41 | + * | |
| 42 | + * @param value 参数 | |
| 43 | + * @return 解码后的参数 | |
| 44 | + */ | |
| 45 | + public static String decodeUtf8(String value) { | |
| 46 | + return URLDecoder.decode(value, StandardCharsets.UTF_8); | |
| 47 | + } | |
| 48 | + | |
| 38 | 49 | @SuppressWarnings("unchecked") |
| 39 | 50 | public static String replaceUrlQuery(String url, String key, String value) { |
| 40 | 51 | UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset()); | ... | ... |
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java
| 1 | 1 | package cn.iocoder.yudao.framework.common.util.json.databind; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ObjUtil; | |
| 4 | +import cn.hutool.core.util.ReflectUtil; | |
| 5 | +import cn.hutool.core.util.StrUtil; | |
| 6 | +import com.fasterxml.jackson.annotation.JsonFormat; | |
| 7 | +import com.fasterxml.jackson.annotation.JsonProperty; | |
| 3 | 8 | import com.fasterxml.jackson.core.JsonGenerator; |
| 4 | 9 | import com.fasterxml.jackson.databind.JsonSerializer; |
| 5 | 10 | import com.fasterxml.jackson.databind.SerializerProvider; |
| 11 | +import lombok.extern.slf4j.Slf4j; | |
| 6 | 12 | |
| 7 | 13 | import java.io.IOException; |
| 14 | +import java.lang.reflect.Field; | |
| 8 | 15 | import java.time.LocalDateTime; |
| 9 | 16 | import java.time.ZoneId; |
| 17 | +import java.time.format.DateTimeFormatter; | |
| 18 | +import java.util.HashMap; | |
| 19 | +import java.util.Map; | |
| 20 | +import java.util.concurrent.ConcurrentHashMap; | |
| 10 | 21 | |
| 11 | 22 | /** |
| 12 | 23 | * 基于时间戳的 LocalDateTime 序列化器 |
| 13 | 24 | * |
| 14 | 25 | * @author 老五 |
| 15 | 26 | */ |
| 27 | +@Slf4j | |
| 16 | 28 | public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { |
| 17 | 29 | |
| 18 | 30 | public static final TimestampLocalDateTimeSerializer INSTANCE = new TimestampLocalDateTimeSerializer(); |
| 19 | 31 | |
| 32 | + private static final Map<Class<?>, Map<String, Field>> FIELD_CACHE = new ConcurrentHashMap<>(); | |
| 33 | + | |
| 20 | 34 | @Override |
| 21 | 35 | public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { |
| 22 | - // 将 LocalDateTime 对象,转换为 Long 时间戳 | |
| 36 | + // 情况一:有 JsonFormat 自定义注解,则使用它。https://github.com/YunaiV/ruoyi-vue-pro/pull/1019 | |
| 37 | + String fieldName = gen.getOutputContext().getCurrentName(); | |
| 38 | + if (fieldName != null) { | |
| 39 | + Object currentValue = gen.getOutputContext().getCurrentValue(); | |
| 40 | + if (currentValue != null) { | |
| 41 | + Class<?> clazz = currentValue.getClass(); | |
| 42 | + Map<String, Field> fieldMap = FIELD_CACHE.computeIfAbsent(clazz, this::buildFieldMap); | |
| 43 | + Field field = fieldMap.get(fieldName); | |
| 44 | + // 进一步修复:https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1480 | |
| 45 | + if (field != null && field.isAnnotationPresent(JsonFormat.class)) { | |
| 46 | + JsonFormat jsonFormat = field.getAnnotation(JsonFormat.class); | |
| 47 | + try { | |
| 48 | + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(jsonFormat.pattern()); | |
| 49 | + gen.writeString(formatter.format(value)); | |
| 50 | + return; | |
| 51 | + } catch (Exception ex) { | |
| 52 | + log.warn("[serialize][({}#{}) 使用 JsonFormat pattern 失败,尝试使用默认的 Long 时间戳]", | |
| 53 | + clazz.getName(), fieldName, ex); | |
| 54 | + } | |
| 55 | + } | |
| 56 | + } | |
| 57 | + } | |
| 58 | + | |
| 59 | + // 情况二:默认将 LocalDateTime 对象,转换为 Long 时间戳 | |
| 23 | 60 | gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); |
| 24 | 61 | } |
| 25 | 62 | |
| 63 | + /** | |
| 64 | + * 构建字段映射(缓存) | |
| 65 | + * | |
| 66 | + * @param clazz 类 | |
| 67 | + * @return 字段映射 | |
| 68 | + */ | |
| 69 | + private Map<String, Field> buildFieldMap(Class<?> clazz) { | |
| 70 | + Map<String, Field> fieldMap = new HashMap<>(); | |
| 71 | + for (Field field : ReflectUtil.getFields(clazz)) { | |
| 72 | + String fieldName = field.getName(); | |
| 73 | + JsonProperty jsonProperty = field.getAnnotation(JsonProperty.class); | |
| 74 | + if (jsonProperty != null) { | |
| 75 | + String value = jsonProperty.value(); | |
| 76 | + if (StrUtil.isNotEmpty(value) && ObjUtil.notEqual("\u0000", value)) { | |
| 77 | + fieldName = value; | |
| 78 | + } | |
| 79 | + } | |
| 80 | + fieldMap.put(fieldName, field); | |
| 81 | + } | |
| 82 | + return fieldMap; | |
| 83 | + } | |
| 84 | + | |
| 26 | 85 | } | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java
| ... | ... | @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.ArrayUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; |
| 6 | 6 | import cn.iocoder.yudao.framework.datapermission.core.aop.DataPermissionContextHolder; |
| 7 | +import com.fhs.trans.service.impl.SimpleTransService; | |
| 7 | 8 | import lombok.RequiredArgsConstructor; |
| 8 | 9 | |
| 9 | 10 | import java.util.Collections; |
| ... | ... | @@ -31,32 +32,53 @@ public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory |
| 31 | 32 | |
| 32 | 33 | @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + DataPermission 进行缓存 |
| 33 | 34 | public List<DataPermissionRule> getDataPermissionRule(String mappedStatementId) { |
| 34 | - // 1. 无数据权限 | |
| 35 | + // 1.1 无数据权限 | |
| 35 | 36 | if (CollUtil.isEmpty(rules)) { |
| 36 | 37 | return Collections.emptyList(); |
| 37 | 38 | } |
| 38 | - // 2. 未配置,则默认开启 | |
| 39 | + // 1.2 未配置,则默认开启 | |
| 39 | 40 | DataPermission dataPermission = DataPermissionContextHolder.get(); |
| 40 | 41 | if (dataPermission == null) { |
| 41 | 42 | return rules; |
| 42 | 43 | } |
| 43 | - // 3. 已配置,但禁用 | |
| 44 | + // 1.3 已配置,但禁用 | |
| 44 | 45 | if (!dataPermission.enable()) { |
| 45 | 46 | return Collections.emptyList(); |
| 46 | 47 | } |
| 48 | + // 1.4 特殊:数据翻译时,强制忽略数据权限 https://github.com/YunaiV/ruoyi-vue-pro/issues/1007 | |
| 49 | + if (isTranslateCall()) { | |
| 50 | + return Collections.emptyList(); | |
| 51 | + } | |
| 47 | 52 | |
| 48 | - // 4. 已配置,只选择部分规则 | |
| 53 | + // 2.1 情况一:已配置,只选择部分规则 | |
| 49 | 54 | if (ArrayUtil.isNotEmpty(dataPermission.includeRules())) { |
| 50 | 55 | return rules.stream().filter(rule -> ArrayUtil.contains(dataPermission.includeRules(), rule.getClass())) |
| 51 | 56 | .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 |
| 52 | 57 | } |
| 53 | - // 5. 已配置,只排除部分规则 | |
| 58 | + // 2.2 已配置,只排除部分规则 | |
| 54 | 59 | if (ArrayUtil.isNotEmpty(dataPermission.excludeRules())) { |
| 55 | 60 | return rules.stream().filter(rule -> !ArrayUtil.contains(dataPermission.excludeRules(), rule.getClass())) |
| 56 | 61 | .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 |
| 57 | 62 | } |
| 58 | - // 6. 已配置,全部规则 | |
| 63 | + // 2.3 已配置,全部规则 | |
| 59 | 64 | return rules; |
| 60 | 65 | } |
| 61 | 66 | |
| 67 | + /** | |
| 68 | + * 判断是否为数据翻译 {@link com.fhs.core.trans.anno.Trans} 的调用 | |
| 69 | + * | |
| 70 | + * 目前暂时只有这个办法,已经和 easy-trans 做过沟通 | |
| 71 | + * | |
| 72 | + * @return 是否 | |
| 73 | + */ | |
| 74 | + private boolean isTranslateCall() { | |
| 75 | + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); | |
| 76 | + for (StackTraceElement e : stack) { | |
| 77 | + if (SimpleTransService.class.getName().equals(e.getClassName())) { | |
| 78 | + return true; | |
| 79 | + } | |
| 80 | + } | |
| 81 | + return false; | |
| 82 | + } | |
| 83 | + | |
| 62 | 84 | } | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java
| ... | ... | @@ -136,7 +136,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 136 | 136 | JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(deptDataPermission)); |
| 137 | 137 | // throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 构建的条件为空", |
| 138 | 138 | // loginUser.getId(), tableName, tableAlias.getName())); |
| 139 | - return EXPRESSION_NULL; | |
| 139 | + return new EqualsTo(null, null); // WHERE null = null,可以保证返回的数据为空 | |
| 140 | 140 | } |
| 141 | 141 | if (deptExpression == null) { |
| 142 | 142 | return userExpression; | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java
| 1 | 1 | package cn.iocoder.yudao.framework.tenant.core.redis; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.util.StrUtil; | |
| 4 | 5 | import cn.iocoder.yudao.framework.redis.core.TimeoutRedisCacheManager; |
| 5 | 6 | import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; |
| 6 | 7 | import lombok.extern.slf4j.Slf4j; |
| ... | ... | @@ -21,6 +22,8 @@ import java.util.Set; |
| 21 | 22 | @Slf4j |
| 22 | 23 | public class TenantRedisCacheManager extends TimeoutRedisCacheManager { |
| 23 | 24 | |
| 25 | + private static final String SPLIT = "#"; | |
| 26 | + | |
| 24 | 27 | private final Set<String> ignoreCaches; |
| 25 | 28 | |
| 26 | 29 | public TenantRedisCacheManager(RedisCacheWriter cacheWriter, |
| ... | ... | @@ -32,10 +35,11 @@ public class TenantRedisCacheManager extends TimeoutRedisCacheManager { |
| 32 | 35 | |
| 33 | 36 | @Override |
| 34 | 37 | public Cache getCache(String name) { |
| 38 | + String[] names = StrUtil.splitToArray(name, SPLIT); | |
| 35 | 39 | // 如果开启多租户,则 name 拼接租户后缀 |
| 36 | 40 | if (!TenantContextHolder.isIgnore() |
| 37 | - && TenantContextHolder.getTenantId() != null | |
| 38 | - && !CollUtil.contains(ignoreCaches, name)) { | |
| 41 | + && TenantContextHolder.getTenantId() != null | |
| 42 | + && !CollUtil.contains(ignoreCaches, names[0])) { | |
| 39 | 43 | name = name + ":" + TenantContextHolder.getTenantId(); |
| 40 | 44 | } |
| 41 | 45 | |
| ... | ... | @@ -43,4 +47,4 @@ public class TenantRedisCacheManager extends TimeoutRedisCacheManager { |
| 43 | 47 | return super.getCache(name); |
| 44 | 48 | } |
| 45 | 49 | |
| 46 | 50 | -} |
| 51 | +} | |
| 47 | 52 | \ No newline at end of file | ... | ... |
yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java
| ... | ... | @@ -9,6 +9,7 @@ import jakarta.servlet.http.HttpServletResponse; |
| 9 | 9 | import org.springframework.web.multipart.MultipartFile; |
| 10 | 10 | |
| 11 | 11 | import java.io.IOException; |
| 12 | +import java.io.InputStream; | |
| 12 | 13 | import java.util.List; |
| 13 | 14 | |
| 14 | 15 | /** |
| ... | ... | @@ -44,9 +45,12 @@ public class ExcelUtils { |
| 44 | 45 | } |
| 45 | 46 | |
| 46 | 47 | public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException { |
| 47 | - return FastExcelFactory.read(file.getInputStream(), head, null) | |
| 48 | - .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 | |
| 49 | - .doReadAllSync(); | |
| 48 | + // 参考 https://t.zsxq.com/zM77F 帖子,增加 try 处理,兼容 windows 场景 | |
| 49 | + try (InputStream inputStream = file.getInputStream()) { | |
| 50 | + return FastExcelFactory.read(inputStream, head, null) | |
| 51 | + .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 | |
| 52 | + .doReadAllSync(); | |
| 53 | + } | |
| 50 | 54 | } |
| 51 | 55 | |
| 52 | 56 | } | ... | ... |
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java
| ... | ... | @@ -9,7 +9,10 @@ import lombok.extern.slf4j.Slf4j; |
| 9 | 9 | import org.springframework.boot.SpringApplication; |
| 10 | 10 | import org.springframework.boot.env.EnvironmentPostProcessor; |
| 11 | 11 | import org.springframework.core.env.ConfigurableEnvironment; |
| 12 | +import org.springframework.core.env.MapPropertySource; | |
| 12 | 13 | |
| 14 | +import java.util.HashMap; | |
| 15 | +import java.util.Map; | |
| 13 | 16 | import java.util.Set; |
| 14 | 17 | |
| 15 | 18 | /** |
| ... | ... | @@ -56,11 +59,19 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor |
| 56 | 59 | } |
| 57 | 60 | |
| 58 | 61 | public IdType getIdType(ConfigurableEnvironment environment) { |
| 59 | - return environment.getProperty(ID_TYPE_KEY, IdType.class); | |
| 62 | + String value = environment.getProperty(ID_TYPE_KEY); | |
| 63 | + try { | |
| 64 | + return StrUtil.isNotBlank(value) ? IdType.valueOf(value) : IdType.NONE; | |
| 65 | + } catch (IllegalArgumentException ex) { | |
| 66 | + log.error("[getIdType][无法解析 id-type 配置值({})]", value, ex); | |
| 67 | + return IdType.NONE; | |
| 68 | + } | |
| 60 | 69 | } |
| 61 | 70 | |
| 62 | 71 | public void setIdType(ConfigurableEnvironment environment, IdType idType) { |
| 63 | - environment.getSystemProperties().put(ID_TYPE_KEY, idType); | |
| 72 | + Map<String, Object> map = new HashMap<>(); | |
| 73 | + map.put(ID_TYPE_KEY, idType); | |
| 74 | + environment.getPropertySources().addFirst(new MapPropertySource("mybatisPlusIdType", map)); | |
| 64 | 75 | log.info("[setIdType][修改 MyBatis Plus 的 idType 为({})]", idType); |
| 65 | 76 | } |
| 66 | 77 | ... | ... |
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java
| ... | ... | @@ -60,6 +60,12 @@ public enum DbTypeEnum { |
| 60 | 60 | * 人大金仓 |
| 61 | 61 | */ |
| 62 | 62 | KINGBASE_ES(DbType.KINGBASE_ES, "KingbaseES", "POSITION('#{value}' IN #{column}) <> 0"), |
| 63 | + | |
| 64 | + /** | |
| 65 | + * OceanBase | |
| 66 | + */ | |
| 67 | + OCEAN_BASE(DbType.OCEAN_BASE, "OceanBase", "FIND_IN_SET('#{value}', #{column}) <> 0") | |
| 68 | + | |
| 63 | 69 | ; |
| 64 | 70 | |
| 65 | 71 | public static final Map<String, DbTypeEnum> MAP_BY_NAME = Arrays.stream(values()) | ... | ... |
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
| ... | ... | @@ -68,6 +68,29 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { |
| 68 | 68 | return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); |
| 69 | 69 | } |
| 70 | 70 | |
| 71 | + /** | |
| 72 | + * 执行分页查询并返回结果。 | |
| 73 | + * | |
| 74 | + * @param pageParam 分页参数,包含页码、每页条数和排序字段信息。如果 pageSize 为 {@link PageParam#PAGE_SIZE_NONE},则不分页,直接查询所有数据。 | |
| 75 | + * @param clazz 结果集的类类型 | |
| 76 | + * @param lambdaWrapper MyBatis Plus Join 查询条件包装器 | |
| 77 | + * @param <D> 结果集的泛型类型 | |
| 78 | + * @return 返回分页查询的结果,包括总记录数和当前页的数据列表 | |
| 79 | + */ | |
| 80 | + default <D> PageResult<D> selectJoinPage(SortablePageParam pageParam, Class<D> clazz, MPJLambdaWrapper<T> lambdaWrapper) { | |
| 81 | + // 特殊:不分页,直接查询全部 | |
| 82 | + if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { | |
| 83 | + List<D> list = selectJoinList(clazz, lambdaWrapper); | |
| 84 | + return new PageResult<>(list, (long) list.size()); | |
| 85 | + } | |
| 86 | + | |
| 87 | + // MyBatis Plus Join 查询 | |
| 88 | + IPage<D> mpPage = MyBatisUtils.buildPage(pageParam, pageParam.getSortingFields()); | |
| 89 | + mpPage = selectJoinPage(mpPage, clazz, lambdaWrapper); | |
| 90 | + // 转换返回 | |
| 91 | + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); | |
| 92 | + } | |
| 93 | + | |
| 71 | 94 | default <DTO> PageResult<DTO> selectJoinPage(PageParam pageParam, Class<DTO> resultTypeClass, MPJBaseJoin<T> joinQueryWrapper) { |
| 72 | 95 | IPage<DTO> mpPage = MyBatisUtils.buildPage(pageParam); |
| 73 | 96 | selectJoinPage(mpPage, resultTypeClass, joinQueryWrapper); | ... | ... |
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java
| ... | ... | @@ -38,6 +38,7 @@ public class MyBatisUtils { |
| 38 | 38 | public static <T> Page<T> buildPage(PageParam pageParam, Collection<SortingField> sortingFields) { |
| 39 | 39 | // 页码 + 数量 |
| 40 | 40 | Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); |
| 41 | + page.setOptimizeJoinOfCountSql(false); // 关联 issue:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID2QLL | |
| 41 | 42 | // 排序字段 |
| 42 | 43 | if (CollUtil.isNotEmpty(sortingFields)) { |
| 43 | 44 | for (SortingField sortingField : sortingFields) { | ... | ... |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/encrypt/core/filter/ApiEncryptResponseWrapper.java
| ... | ... | @@ -42,15 +42,16 @@ public class ApiEncryptResponseWrapper extends HttpServletResponseWrapper { |
| 42 | 42 | this.flushBuffer(); |
| 43 | 43 | byte[] body = byteArrayOutputStream.toByteArray(); |
| 44 | 44 | |
| 45 | - // 2. 加密 body | |
| 46 | - String encryptedBody = symmetricEncryptor != null ? symmetricEncryptor.encryptBase64(body) | |
| 47 | - : asymmetricEncryptor.encryptBase64(body, KeyType.PublicKey); | |
| 48 | - response.getWriter().write(encryptedBody); | |
| 49 | - | |
| 50 | - // 3. 添加加密 header 标识 | |
| 45 | + // 2. 添加加密 header 标识 | |
| 51 | 46 | this.addHeader(properties.getHeader(), "true"); |
| 52 | 47 | // 特殊:特殊:https://juejin.cn/post/6867327674675625992 |
| 53 | 48 | this.addHeader("Access-Control-Expose-Headers", properties.getHeader()); |
| 49 | + | |
| 50 | + // 3.1 加密 body | |
| 51 | + String encryptedBody = symmetricEncryptor != null ? symmetricEncryptor.encryptBase64(body) | |
| 52 | + : asymmetricEncryptor.encryptBase64(body, KeyType.PublicKey); | |
| 53 | + // 3.2 输出加密后的 body:(设置 header 要放在 response 的 write 之前) | |
| 54 | + response.getWriter().write(encryptedBody); | |
| 54 | 55 | } |
| 55 | 56 | |
| 56 | 57 | @Override | ... | ... |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java
| ... | ... | @@ -9,7 +9,6 @@ import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; |
| 9 | 9 | import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler; |
| 10 | 10 | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; |
| 11 | 11 | import com.google.common.collect.Maps; |
| 12 | -import jakarta.annotation.Resource; | |
| 13 | 12 | import jakarta.servlet.Filter; |
| 14 | 13 | import org.springframework.beans.factory.annotation.Value; |
| 15 | 14 | import org.springframework.boot.autoconfigure.AutoConfiguration; |
| ... | ... | @@ -21,14 +20,13 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties |
| 21 | 20 | import org.springframework.boot.web.client.RestTemplateBuilder; |
| 22 | 21 | import org.springframework.boot.web.servlet.FilterRegistrationBean; |
| 23 | 22 | import org.springframework.context.annotation.Bean; |
| 23 | +import org.springframework.core.annotation.Order; | |
| 24 | 24 | import org.springframework.util.AntPathMatcher; |
| 25 | 25 | import org.springframework.web.bind.annotation.RestController; |
| 26 | 26 | import org.springframework.web.client.RestTemplate; |
| 27 | 27 | import org.springframework.web.cors.CorsConfiguration; |
| 28 | 28 | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; |
| 29 | 29 | import org.springframework.web.filter.CorsFilter; |
| 30 | -import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; | |
| 31 | -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | |
| 32 | 30 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; |
| 33 | 31 | |
| 34 | 32 | import java.util.Map; |
| ... | ... | @@ -50,7 +48,7 @@ public class YudaoWebAutoConfiguration { |
| 50 | 48 | |
| 51 | 49 | @Override |
| 52 | 50 | public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { |
| 53 | - var mapping = new RequestMappingHandlerMapping(); | |
| 51 | + RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping(); | |
| 54 | 52 | // 实例化时就带上前缀 |
| 55 | 53 | mapping.setPathPrefixes(buildPathPrefixes(webProperties)); |
| 56 | 54 | return mapping; |
| ... | ... | @@ -106,6 +104,7 @@ public class YudaoWebAutoConfiguration { |
| 106 | 104 | * 创建 CorsFilter Bean,解决跨域问题 |
| 107 | 105 | */ |
| 108 | 106 | @Bean |
| 107 | + @Order(value = WebFilterOrderEnum.CORS_FILTER) // 特殊:修复因执行顺序影响到跨域配置不生效问题 | |
| 109 | 108 | public FilterRegistrationBean<CorsFilter> corsFilterBean() { |
| 110 | 109 | // 创建 CorsConfiguration 对象 |
| 111 | 110 | CorsConfiguration config = new CorsConfiguration(); | ... | ... |
yudao-module-ai/pom.xml
| ... | ... | @@ -19,9 +19,10 @@ |
| 19 | 19 | 国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno |
| 20 | 20 | </description> |
| 21 | 21 | <properties> |
| 22 | - <spring-ai.version>1.0.1</spring-ai.version> | |
| 23 | - <alibaba-ai.version>1.0.0.3</alibaba-ai.version> | |
| 24 | - <tinyflow.version>1.0.2</tinyflow.version> | |
| 22 | + <spring-ai.version>1.1.2</spring-ai.version> | |
| 23 | + <!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba --> | |
| 24 | + <alibaba-ai.version>1.1.0.0-RC2</alibaba-ai.version> | |
| 25 | + <tinyflow.version>1.2.6</tinyflow.version> | |
| 25 | 26 | </properties> |
| 26 | 27 | |
| 27 | 28 | <dependencies> |
| ... | ... | @@ -136,7 +137,7 @@ |
| 136 | 137 | <version>1.0.0</version> |
| 137 | 138 | </dependency> |
| 138 | 139 | <dependency> |
| 139 | - <!-- 月之暗灭 --> | |
| 140 | + <!-- 月之暗面 --> | |
| 140 | 141 | <groupId>org.springaicommunity</groupId> |
| 141 | 142 | <artifactId>moonshot-spring-boot-starter</artifactId> |
| 142 | 143 | <version>1.0.0</version> |
| ... | ... | @@ -227,6 +228,11 @@ |
| 227 | 228 | <artifactId>agents-flex-store-elasticsearch</artifactId> |
| 228 | 229 | </exclusion> |
| 229 | 230 | <exclusion> |
| 231 | + <!-- 解决 https://t.zsxq.com/pCBZC 问题 --> | |
| 232 | + <groupId>com.agentsflex</groupId> | |
| 233 | + <artifactId>agents-flex-search-engine-es</artifactId> | |
| 234 | + </exclusion> | |
| 235 | + <exclusion> | |
| 230 | 236 | <!-- TODO @芋艿:暂时移除 groovy,和 iot 冲突 --> |
| 231 | 237 | <groupId>org.codehaus.groovy</groupId> |
| 232 | 238 | <artifactId>groovy-all</artifactId> | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentPageReqVO.java
| ... | ... | @@ -11,7 +11,7 @@ import lombok.Data; |
| 11 | 11 | public class AiKnowledgeSegmentPageReqVO extends PageParam { |
| 12 | 12 | |
| 13 | 13 | @Schema(description = "文档编号", example = "1") |
| 14 | - private Integer documentId; | |
| 14 | + private Long documentId; | |
| 15 | 15 | |
| 16 | 16 | @Schema(description = "分段内容关键字", example = "Java 开发") |
| 17 | 17 | private String content; | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatMessageDO.java
| ... | ... | @@ -27,7 +27,7 @@ import java.util.List; |
| 27 | 27 | * @since 2024/4/14 17:35 |
| 28 | 28 | */ |
| 29 | 29 | @TableName(value = "ai_chat_message", autoResultMap = true) |
| 30 | -@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 30 | +@KeySequence("ai_chat_message_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 31 | 31 | @Data |
| 32 | 32 | @Builder |
| 33 | 33 | @NoArgsConstructor | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiApiKeyDO.java
| ... | ... | @@ -14,7 +14,7 @@ import lombok.*; |
| 14 | 14 | * @author 芋道源码 |
| 15 | 15 | */ |
| 16 | 16 | @TableName("ai_api_key") |
| 17 | -@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 17 | +@KeySequence("ai_api_key_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 18 | 18 | @Data |
| 19 | 19 | @Builder |
| 20 | 20 | @NoArgsConstructor | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeSegmentMapper.java
| ... | ... | @@ -51,8 +51,7 @@ public interface AiKnowledgeSegmentMapper extends BaseMapperX<AiKnowledgeSegment |
| 51 | 51 | MPJLambdaWrapper<AiKnowledgeSegmentDO> wrapper = new MPJLambdaWrapperX<AiKnowledgeSegmentDO>() |
| 52 | 52 | .selectAs(AiKnowledgeSegmentDO::getDocumentId, AiKnowledgeSegmentProcessRespVO::getDocumentId) |
| 53 | 53 | .selectCount(AiKnowledgeSegmentDO::getId, "count") |
| 54 | - .select("COUNT(CASE WHEN vector_id > '" + AiKnowledgeSegmentDO.VECTOR_ID_EMPTY | |
| 55 | - + "' THEN 1 ELSE NULL END) AS embeddingCount") | |
| 54 | + .select("COUNT(CASE WHEN vector_id IS NOT NULL AND vector_id <> '" + AiKnowledgeSegmentDO.VECTOR_ID_EMPTY + "' THEN 1 ELSE NULL END) AS embeddingCount") | |
| 56 | 55 | .in(AiKnowledgeSegmentDO::getDocumentId, documentIds) |
| 57 | 56 | .groupBy(AiKnowledgeSegmentDO::getDocumentId); |
| 58 | 57 | return selectJoinList(AiKnowledgeSegmentProcessRespVO.class, wrapper); | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/enums/AiDocumentSplitStrategyEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.enums; | |
| 2 | + | |
| 3 | +import lombok.AllArgsConstructor; | |
| 4 | +import lombok.Getter; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * AI 知识库文档切片策略枚举 | |
| 8 | + * | |
| 9 | + * @author runzhen | |
| 10 | + */ | |
| 11 | +@AllArgsConstructor | |
| 12 | +@Getter | |
| 13 | +public enum AiDocumentSplitStrategyEnum { | |
| 14 | + | |
| 15 | + /** | |
| 16 | + * 自动识别文档类型并选择最佳切片策略 | |
| 17 | + */ | |
| 18 | + AUTO("auto", "自动识别"), | |
| 19 | + | |
| 20 | + /** | |
| 21 | + * 基于 Token 数量机械切分(默认策略) | |
| 22 | + */ | |
| 23 | + TOKEN("token", "Token 切分"), | |
| 24 | + | |
| 25 | + /** | |
| 26 | + * 按段落切分(以双换行符为分隔) | |
| 27 | + */ | |
| 28 | + PARAGRAPH("paragraph", "段落切分"), | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * Markdown QA 格式专用切片器 | |
| 32 | + * 识别二级标题作为问题,保持问答对完整性 | |
| 33 | + * 长答案智能切分但保留问题作为上下文 | |
| 34 | + */ | |
| 35 | + MARKDOWN_QA("markdown_qa", "Markdown QA 切分"), | |
| 36 | + | |
| 37 | + /** | |
| 38 | + * 语义化切分,保留句子完整性 | |
| 39 | + * 在段落和句子边界处切分,避免截断 | |
| 40 | + */ | |
| 41 | + SEMANTIC("semantic", "语义切分"); | |
| 42 | + | |
| 43 | + /** | |
| 44 | + * 策略代码 | |
| 45 | + */ | |
| 46 | + private final String code; | |
| 47 | + | |
| 48 | + /** | |
| 49 | + * 策略名称 | |
| 50 | + */ | |
| 51 | + private final String name; | |
| 52 | + | |
| 53 | +} | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/enums/model/AiPlatformEnum.java
| ... | ... | @@ -26,7 +26,7 @@ public enum AiPlatformEnum implements ArrayValuable<String> { |
| 26 | 26 | HUN_YUAN("HunYuan", "混元"), // 腾讯 |
| 27 | 27 | SILICON_FLOW("SiliconFlow", "硅基流动"), // 硅基流动 |
| 28 | 28 | MINI_MAX("MiniMax", "MiniMax"), // 稀宇科技 |
| 29 | - MOONSHOT("Moonshot", "月之暗灭"), // KIMI | |
| 29 | + MOONSHOT("Moonshot", "月之暗面"), // KIMI | |
| 30 | 30 | BAI_CHUAN("BaiChuan", "百川智能"), // 百川智能 |
| 31 | 31 | |
| 32 | 32 | // ========== 国外平台 ========== |
| ... | ... | @@ -40,6 +40,7 @@ public enum AiPlatformEnum implements ArrayValuable<String> { |
| 40 | 40 | STABLE_DIFFUSION("StableDiffusion", "StableDiffusion"), // Stability AI |
| 41 | 41 | MIDJOURNEY("Midjourney", "Midjourney"), // Midjourney |
| 42 | 42 | SUNO("Suno", "Suno"), // Suno AI |
| 43 | + GROK("Grok","Grok"), // Grok | |
| 43 | 44 | |
| 44 | 45 | ; |
| 45 | 46 | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/config/AiAutoConfiguration.java
| ... | ... | @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.ai.framework.ai.core.model.AiModelFactoryImpl; |
| 7 | 7 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.baichuan.BaiChuanChatModel; |
| 8 | 8 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.doubao.DouBaoChatModel; |
| 9 | 9 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.gemini.GeminiChatModel; |
| 10 | +import cn.iocoder.yudao.module.ai.framework.ai.core.model.grok.GrokChatModel; | |
| 10 | 11 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.hunyuan.HunYuanChatModel; |
| 11 | 12 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.midjourney.api.MidjourneyApi; |
| 12 | 13 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlowApiConstants; |
| ... | ... | @@ -16,7 +17,9 @@ import cn.iocoder.yudao.module.ai.framework.ai.core.model.xinghuo.XingHuoChatMod |
| 16 | 17 | import cn.iocoder.yudao.module.ai.framework.ai.core.webserch.AiWebSearchClient; |
| 17 | 18 | import cn.iocoder.yudao.module.ai.framework.ai.core.webserch.bocha.AiBoChaWebSearchClient; |
| 18 | 19 | import cn.iocoder.yudao.module.ai.tool.method.PersonService; |
| 20 | +import io.micrometer.observation.ObservationRegistry; | |
| 19 | 21 | import lombok.extern.slf4j.Slf4j; |
| 22 | +import org.springframework.ai.chat.model.ChatModel; | |
| 20 | 23 | import org.springframework.ai.deepseek.DeepSeekChatModel; |
| 21 | 24 | import org.springframework.ai.deepseek.DeepSeekChatOptions; |
| 22 | 25 | import org.springframework.ai.deepseek.api.DeepSeekApi; |
| ... | ... | @@ -34,12 +37,14 @@ import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusServiceClie |
| 34 | 37 | import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreProperties; |
| 35 | 38 | import org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreProperties; |
| 36 | 39 | import org.springframework.ai.vectorstore.redis.autoconfigure.RedisVectorStoreProperties; |
| 40 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |
| 37 | 41 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| 38 | 42 | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
| 39 | 43 | import org.springframework.context.annotation.Bean; |
| 40 | 44 | import org.springframework.context.annotation.Configuration; |
| 41 | 45 | |
| 42 | 46 | import java.util.List; |
| 47 | +import java.util.Optional; | |
| 43 | 48 | |
| 44 | 49 | /** |
| 45 | 50 | * 芋道 AI 自动配置 |
| ... | ... | @@ -60,6 +65,13 @@ public class AiAutoConfiguration { |
| 60 | 65 | return new AiModelFactoryImpl(); |
| 61 | 66 | } |
| 62 | 67 | |
| 68 | + @Bean | |
| 69 | + @ConditionalOnMissingBean | |
| 70 | + public ObservationRegistry observationRegistry() { | |
| 71 | + // 特殊:兜底有 ObservationRegistry Bean,避免相关的 ChatModel 创建报错。相关 issue:https://t.zsxq.com/CuPu4 | |
| 72 | + return ObservationRegistry.NOOP; | |
| 73 | + } | |
| 74 | + | |
| 63 | 75 | // ========== 各种 AI Client 创建 ========== |
| 64 | 76 | |
| 65 | 77 | @Bean |
| ... | ... | @@ -252,6 +264,28 @@ public class AiAutoConfiguration { |
| 252 | 264 | return new SunoApi(yudaoAiProperties.getSuno().getBaseUrl()); |
| 253 | 265 | } |
| 254 | 266 | |
| 267 | + public ChatModel buildGrokChatClient(YudaoAiProperties.Grok properties) { | |
| 268 | + if (StrUtil.isEmpty(properties.getModel())) { | |
| 269 | + properties.setModel(GrokChatModel.MODEL_DEFAULT); | |
| 270 | + } | |
| 271 | + OpenAiChatModel openAiChatModel = OpenAiChatModel.builder() | |
| 272 | + .openAiApi(OpenAiApi.builder() | |
| 273 | + .baseUrl(Optional.ofNullable(properties.getBaseUrl()) | |
| 274 | + .orElse(GrokChatModel.BASE_URL)) | |
| 275 | + .completionsPath(GrokChatModel.COMPLETE_PATH) | |
| 276 | + .apiKey(properties.getApiKey()) | |
| 277 | + .build()) | |
| 278 | + .defaultOptions(OpenAiChatOptions.builder() | |
| 279 | + .model(properties.getModel()) | |
| 280 | + .temperature(properties.getTemperature()) | |
| 281 | + .maxTokens(properties.getMaxTokens()) | |
| 282 | + .topP(properties.getTopP()) | |
| 283 | + .build()) | |
| 284 | + .toolCallingManager(getToolCallingManager()) | |
| 285 | + .build(); | |
| 286 | + return new DouBaoChatModel(openAiChatModel); | |
| 287 | + } | |
| 288 | + | |
| 255 | 289 | // ========== RAG 相关 ========== |
| 256 | 290 | |
| 257 | 291 | @Bean | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/config/YudaoAiProperties.java
| ... | ... | @@ -161,6 +161,20 @@ public class YudaoAiProperties { |
| 161 | 161 | } |
| 162 | 162 | |
| 163 | 163 | @Data |
| 164 | + public static class Grok { | |
| 165 | + | |
| 166 | + private String enable; | |
| 167 | + private String apiKey; | |
| 168 | + private String baseUrl; | |
| 169 | + | |
| 170 | + private String model; | |
| 171 | + private Double temperature; | |
| 172 | + private Integer maxTokens; | |
| 173 | + private Double topP; | |
| 174 | + | |
| 175 | + } | |
| 176 | + | |
| 177 | + @Data | |
| 164 | 178 | public static class WebSearch { |
| 165 | 179 | |
| 166 | 180 | private boolean enable; | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/AiModelFactoryImpl.java
| ... | ... | @@ -87,7 +87,7 @@ import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiImageAutoConfig |
| 87 | 87 | import org.springframework.ai.ollama.OllamaChatModel; |
| 88 | 88 | import org.springframework.ai.ollama.OllamaEmbeddingModel; |
| 89 | 89 | import org.springframework.ai.ollama.api.OllamaApi; |
| 90 | -import org.springframework.ai.ollama.api.OllamaOptions; | |
| 90 | +import org.springframework.ai.ollama.api.OllamaEmbeddingOptions; | |
| 91 | 91 | import org.springframework.ai.openai.OpenAiChatModel; |
| 92 | 92 | import org.springframework.ai.openai.OpenAiEmbeddingModel; |
| 93 | 93 | import org.springframework.ai.openai.OpenAiEmbeddingOptions; |
| ... | ... | @@ -178,6 +178,8 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 178 | 178 | return buildGeminiChatModel(apiKey); |
| 179 | 179 | case OLLAMA: |
| 180 | 180 | return buildOllamaChatModel(url); |
| 181 | + case GROK: | |
| 182 | + return buildGrokChatModel(apiKey,url); | |
| 181 | 183 | default: |
| 182 | 184 | throw new IllegalArgumentException(StrUtil.format("未知平台({})", platform)); |
| 183 | 185 | } |
| ... | ... | @@ -436,10 +438,12 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 436 | 438 | * 可参考 {@link ZhiPuAiChatAutoConfiguration} 的 zhiPuAiChatModel 方法 |
| 437 | 439 | */ |
| 438 | 440 | private ZhiPuAiChatModel buildZhiPuChatModel(String apiKey, String url) { |
| 439 | - ZhiPuAiApi zhiPuAiApi = StrUtil.isEmpty(url) ? new ZhiPuAiApi(apiKey) | |
| 440 | - : new ZhiPuAiApi(url, apiKey); | |
| 441 | + ZhiPuAiApi.Builder zhiPuAiApiBuilder = ZhiPuAiApi.builder().apiKey(apiKey); | |
| 442 | + if (StrUtil.isNotEmpty(url)) { | |
| 443 | + zhiPuAiApiBuilder.baseUrl(url); | |
| 444 | + } | |
| 441 | 445 | ZhiPuAiChatOptions options = ZhiPuAiChatOptions.builder().model(ZhiPuAiApi.DEFAULT_CHAT_MODEL).temperature(0.7).build(); |
| 442 | - return new ZhiPuAiChatModel(zhiPuAiApi, options, getToolCallingManager(), DEFAULT_RETRY_TEMPLATE, | |
| 446 | + return new ZhiPuAiChatModel(zhiPuAiApiBuilder.build(), options, getToolCallingManager(), DEFAULT_RETRY_TEMPLATE, | |
| 443 | 447 | getObservationRegistry().getIfAvailable()); |
| 444 | 448 | } |
| 445 | 449 | |
| ... | ... | @@ -586,6 +590,13 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 586 | 590 | return new StabilityAiImageModel(stabilityAiApi); |
| 587 | 591 | } |
| 588 | 592 | |
| 593 | + private ChatModel buildGrokChatModel(String apiKey,String url) { | |
| 594 | + YudaoAiProperties.Grok properties = new YudaoAiProperties.Grok() | |
| 595 | + .setBaseUrl(url) | |
| 596 | + .setApiKey(apiKey); | |
| 597 | + return new AiAutoConfiguration().buildGrokChatClient(properties); | |
| 598 | + } | |
| 599 | + | |
| 589 | 600 | // ========== 各种创建 EmbeddingModel 的方法 ========== |
| 590 | 601 | |
| 591 | 602 | /** |
| ... | ... | @@ -601,10 +612,12 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 601 | 612 | * 可参考 {@link ZhiPuAiEmbeddingAutoConfiguration} 的 zhiPuAiEmbeddingModel 方法 |
| 602 | 613 | */ |
| 603 | 614 | private ZhiPuAiEmbeddingModel buildZhiPuEmbeddingModel(String apiKey, String url, String model) { |
| 604 | - ZhiPuAiApi zhiPuAiApi = StrUtil.isEmpty(url) ? new ZhiPuAiApi(apiKey) | |
| 605 | - : new ZhiPuAiApi(url, apiKey); | |
| 615 | + ZhiPuAiApi.Builder zhiPuAiApiBuilder = ZhiPuAiApi.builder().apiKey(apiKey); | |
| 616 | + if (StrUtil.isNotEmpty(url)) { | |
| 617 | + zhiPuAiApiBuilder.baseUrl(url); | |
| 618 | + } | |
| 606 | 619 | ZhiPuAiEmbeddingOptions zhiPuAiEmbeddingOptions = ZhiPuAiEmbeddingOptions.builder().model(model).build(); |
| 607 | - return new ZhiPuAiEmbeddingModel(zhiPuAiApi, MetadataMode.EMBED, zhiPuAiEmbeddingOptions); | |
| 620 | + return new ZhiPuAiEmbeddingModel(zhiPuAiApiBuilder.build(), MetadataMode.EMBED, zhiPuAiEmbeddingOptions); | |
| 608 | 621 | } |
| 609 | 622 | |
| 610 | 623 | /** |
| ... | ... | @@ -632,7 +645,7 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 632 | 645 | |
| 633 | 646 | private OllamaEmbeddingModel buildOllamaEmbeddingModel(String url, String model) { |
| 634 | 647 | OllamaApi ollamaApi = OllamaApi.builder().baseUrl(url).build(); |
| 635 | - OllamaOptions ollamaOptions = OllamaOptions.builder().model(model).build(); | |
| 648 | + OllamaEmbeddingOptions ollamaOptions = OllamaEmbeddingOptions.builder().model(model).build(); | |
| 636 | 649 | return OllamaEmbeddingModel.builder() |
| 637 | 650 | .ollamaApi(ollamaApi) |
| 638 | 651 | .defaultOptions(ollamaOptions) | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/grok/GrokChatModel.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.framework.ai.core.model.grok; | |
| 2 | + | |
| 3 | +import lombok.RequiredArgsConstructor; | |
| 4 | +import lombok.extern.slf4j.Slf4j; | |
| 5 | +import org.springframework.ai.chat.model.ChatModel; | |
| 6 | +import org.springframework.ai.chat.model.ChatResponse; | |
| 7 | +import org.springframework.ai.chat.prompt.ChatOptions; | |
| 8 | +import org.springframework.ai.chat.prompt.Prompt; | |
| 9 | +import reactor.core.publisher.Flux; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * Grok {@link ChatModel} 实现类 | |
| 13 | + * | |
| 14 | + * | |
| 15 | + */ | |
| 16 | +@Slf4j | |
| 17 | +@RequiredArgsConstructor | |
| 18 | +public class GrokChatModel implements ChatModel { | |
| 19 | + | |
| 20 | + public static final String BASE_URL = "https://api.x.ai"; | |
| 21 | + public static final String COMPLETE_PATH = "/v1/chat/completions"; | |
| 22 | + public static final String MODEL_DEFAULT = "grok-4-fast-reasoning"; | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 兼容 OpenAI 接口,进行复用 | |
| 26 | + */ | |
| 27 | + private final ChatModel openAiChatModel; | |
| 28 | + | |
| 29 | + @Override | |
| 30 | + public ChatResponse call(Prompt prompt) { | |
| 31 | + return openAiChatModel.call(prompt); | |
| 32 | + } | |
| 33 | + | |
| 34 | + @Override | |
| 35 | + public Flux<ChatResponse> stream(Prompt prompt) { | |
| 36 | + return openAiChatModel.stream(prompt); | |
| 37 | + } | |
| 38 | + | |
| 39 | + @Override | |
| 40 | + public ChatOptions getDefaultOptions() { | |
| 41 | + return openAiChatModel.getDefaultOptions(); | |
| 42 | + } | |
| 43 | + | |
| 44 | +} | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/security/config/SecurityConfiguration.java
| ... | ... | @@ -2,7 +2,8 @@ package cn.iocoder.yudao.module.ai.framework.security.config; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; |
| 4 | 4 | import jakarta.annotation.Resource; |
| 5 | -import org.springframework.ai.mcp.server.autoconfigure.McpServerProperties; | |
| 5 | +import org.springframework.ai.mcp.server.common.autoconfigure.properties.McpServerSseProperties; | |
| 6 | +import org.springframework.ai.mcp.server.common.autoconfigure.properties.McpServerStreamableHttpProperties; | |
| 6 | 7 | import org.springframework.context.annotation.Bean; |
| 7 | 8 | import org.springframework.context.annotation.Configuration; |
| 8 | 9 | import org.springframework.security.config.annotation.web.builders.HttpSecurity; |
| ... | ... | @@ -17,7 +18,9 @@ import java.util.Optional; |
| 17 | 18 | public class SecurityConfiguration { |
| 18 | 19 | |
| 19 | 20 | @Resource |
| 20 | - private Optional<McpServerProperties> serverProperties; | |
| 21 | + private Optional<McpServerSseProperties> mcpServerSseProperties; | |
| 22 | + @Resource | |
| 23 | + private Optional<McpServerStreamableHttpProperties> mcpServerStreamableHttpProperties; | |
| 21 | 24 | |
| 22 | 25 | @Bean("aiAuthorizeRequestsCustomizer") |
| 23 | 26 | public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { |
| ... | ... | @@ -25,11 +28,12 @@ public class SecurityConfiguration { |
| 25 | 28 | |
| 26 | 29 | @Override |
| 27 | 30 | public void customize(AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry registry) { |
| 28 | - // MCP Server | |
| 29 | - serverProperties.ifPresent(properties -> { | |
| 31 | + mcpServerSseProperties.ifPresent(properties -> { | |
| 30 | 32 | registry.requestMatchers(properties.getSseEndpoint()).permitAll(); |
| 31 | 33 | registry.requestMatchers(properties.getSseMessageEndpoint()).permitAll(); |
| 32 | 34 | }); |
| 35 | + mcpServerStreamableHttpProperties.ifPresent(properties -> | |
| 36 | + registry.requestMatchers(properties.getMcpEndpoint()).permitAll()); | |
| 33 | 37 | } |
| 34 | 38 | |
| 35 | 39 | }; | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java
| ... | ... | @@ -49,7 +49,7 @@ import org.springframework.ai.chat.model.StreamingChatModel; |
| 49 | 49 | import org.springframework.ai.chat.prompt.ChatOptions; |
| 50 | 50 | import org.springframework.ai.chat.prompt.Prompt; |
| 51 | 51 | import org.springframework.ai.mcp.SyncMcpToolCallbackProvider; |
| 52 | -import org.springframework.ai.mcp.client.autoconfigure.properties.McpClientCommonProperties; | |
| 52 | +import org.springframework.ai.mcp.client.common.autoconfigure.properties.McpClientCommonProperties; | |
| 53 | 53 | import org.springframework.ai.tool.ToolCallback; |
| 54 | 54 | import org.springframework.ai.tool.resolution.ToolCallbackResolver; |
| 55 | 55 | import org.springframework.beans.factory.annotation.Autowired; |
| ... | ... | @@ -59,6 +59,8 @@ import reactor.core.publisher.Flux; |
| 59 | 59 | |
| 60 | 60 | import java.time.LocalDateTime; |
| 61 | 61 | import java.util.*; |
| 62 | +import java.util.concurrent.atomic.AtomicBoolean; | |
| 63 | +import java.util.concurrent.atomic.AtomicReference; | |
| 62 | 64 | import java.util.stream.Collectors; |
| 63 | 65 | |
| 64 | 66 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| ... | ... | @@ -231,20 +233,24 @@ public class AiChatMessageServiceImpl implements AiChatMessageService { |
| 231 | 233 | // 4.3 流式返回 |
| 232 | 234 | StringBuffer contentBuffer = new StringBuffer(); |
| 233 | 235 | StringBuffer reasoningContentBuffer = new StringBuffer(); |
| 236 | + | |
| 237 | + // 防止执行多次知识库和联网搜索 | |
| 238 | + AtomicBoolean firstExecuteFlag = new AtomicBoolean(true); | |
| 239 | + AtomicReference<List<AiChatMessageRespVO.KnowledgeSegment>> cacheSegments = new AtomicReference<>(); | |
| 240 | + AtomicReference<List<AiWebSearchResponse.WebPage>> cacheWebSearchPages = new AtomicReference<>(); | |
| 234 | 241 | return streamResponse.map(chunk -> { |
| 235 | 242 | // 仅首次:返回知识库、联网搜索 |
| 236 | - List<AiChatMessageRespVO.KnowledgeSegment> segments = null; | |
| 237 | - List<AiWebSearchResponse.WebPage> webSearchPages = null; | |
| 238 | 243 | if (StrUtil.isEmpty(contentBuffer)) { |
| 239 | - Map<Long, AiKnowledgeDocumentDO> documentMap = TenantUtils.executeIgnore(() -> | |
| 240 | - knowledgeDocumentService.getKnowledgeDocumentMap( | |
| 241 | - convertSet(knowledgeSegments, AiKnowledgeSegmentSearchRespBO::getDocumentId))); | |
| 242 | - segments = BeanUtils.toBean(knowledgeSegments, AiChatMessageRespVO.KnowledgeSegment.class, segment -> { | |
| 243 | - AiKnowledgeDocumentDO document = documentMap.get(segment.getDocumentId()); | |
| 244 | - segment.setDocumentName(document != null ? document.getName() : null); | |
| 245 | - }); | |
| 246 | - if (webSearchResponse != null) { | |
| 247 | - webSearchPages = webSearchResponse.getLists(); | |
| 244 | + if (firstExecuteFlag.compareAndSet(true, false)) { // CAS 操作,确保仅执行一次 | |
| 245 | + Map<Long, AiKnowledgeDocumentDO> documentMap = TenantUtils.executeIgnore(() -> knowledgeDocumentService.getKnowledgeDocumentMap( | |
| 246 | + convertSet(knowledgeSegments, AiKnowledgeSegmentSearchRespBO::getDocumentId))); | |
| 247 | + cacheSegments.set(BeanUtils.toBean(knowledgeSegments, AiChatMessageRespVO.KnowledgeSegment.class, segment -> { | |
| 248 | + AiKnowledgeDocumentDO document = documentMap.get(segment.getDocumentId()); | |
| 249 | + segment.setDocumentName(document != null ? document.getName() : null); | |
| 250 | + })); | |
| 251 | + if (webSearchResponse != null) { | |
| 252 | + cacheWebSearchPages.set(webSearchResponse.getLists()); | |
| 253 | + } | |
| 248 | 254 | } |
| 249 | 255 | } |
| 250 | 256 | // 响应结果 |
| ... | ... | @@ -261,7 +267,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService { |
| 261 | 267 | .setReceive(BeanUtils.toBean(assistantMessage, AiChatMessageSendRespVO.Message.class) |
| 262 | 268 | .setContent(StrUtil.nullToDefault(newContent, "")) // 避免 null 的 情况 |
| 263 | 269 | .setReasoningContent(StrUtil.nullToDefault(newReasoningContent, "")) // 避免 null 的 情况 |
| 264 | - .setSegments(segments).setWebSearchPages(webSearchPages))); // 知识库 + 联网搜索 | |
| 270 | + .setSegments(cacheSegments.get()).setWebSearchPages(cacheWebSearchPages.get()))); // 知识库 + 联网搜索 | |
| 265 | 271 | }).doOnComplete(() -> { |
| 266 | 272 | // 忽略租户,因为 Flux 异步无法透传租户 |
| 267 | 273 | TenantUtils.executeIgnore(() -> chatMessageMapper.updateById( | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeSegmentServiceImpl.java
| ... | ... | @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.collection.ListUtil; |
| 5 | 5 | import cn.hutool.core.util.ObjUtil; |
| 6 | 6 | import cn.hutool.core.util.StrUtil; |
| 7 | + | |
| 7 | 8 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 8 | 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | 10 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| ... | ... | @@ -15,8 +16,11 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDO; |
| 15 | 16 | import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDocumentDO; |
| 16 | 17 | import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeSegmentDO; |
| 17 | 18 | import cn.iocoder.yudao.module.ai.dal.mysql.knowledge.AiKnowledgeSegmentMapper; |
| 19 | +import cn.iocoder.yudao.module.ai.enums.AiDocumentSplitStrategyEnum; | |
| 18 | 20 | import cn.iocoder.yudao.module.ai.service.knowledge.bo.AiKnowledgeSegmentSearchReqBO; |
| 19 | 21 | import cn.iocoder.yudao.module.ai.service.knowledge.bo.AiKnowledgeSegmentSearchRespBO; |
| 22 | +import cn.iocoder.yudao.module.ai.service.knowledge.splitter.MarkdownQaSplitter; | |
| 23 | +import cn.iocoder.yudao.module.ai.service.knowledge.splitter.SemanticTextSplitter; | |
| 20 | 24 | import cn.iocoder.yudao.module.ai.service.model.AiModelService; |
| 21 | 25 | import com.alibaba.cloud.ai.dashscope.rerank.DashScopeRerankOptions; |
| 22 | 26 | import com.alibaba.cloud.ai.model.RerankModel; |
| ... | ... | @@ -39,8 +43,7 @@ import java.util.*; |
| 39 | 43 | |
| 40 | 44 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 41 | 45 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| 42 | -import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.KNOWLEDGE_SEGMENT_CONTENT_TOO_LONG; | |
| 43 | -import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.KNOWLEDGE_SEGMENT_NOT_EXISTS; | |
| 46 | +import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.*; | |
| 44 | 47 | import static org.springframework.ai.vectorstore.SearchRequest.SIMILARITY_THRESHOLD_ACCEPT_ALL; |
| 45 | 48 | |
| 46 | 49 | /** |
| ... | ... | @@ -95,8 +98,9 @@ public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService |
| 95 | 98 | AiKnowledgeDO knowledgeDO = knowledgeService.validateKnowledgeExists(documentDO.getKnowledgeId()); |
| 96 | 99 | VectorStore vectorStore = getVectorStoreById(knowledgeDO); |
| 97 | 100 | |
| 98 | - // 2. 文档切片 | |
| 99 | - List<Document> documentSegments = splitContentByToken(content, documentDO.getSegmentMaxTokens()); | |
| 101 | + // 2. 文档切片(使用自动检测策略) | |
| 102 | + List<Document> documentSegments = splitContentByStrategy(content, documentDO.getSegmentMaxTokens(), | |
| 103 | + AiDocumentSplitStrategyEnum.AUTO, documentDO.getUrl()); | |
| 100 | 104 | |
| 101 | 105 | // 3.1 存储切片 |
| 102 | 106 | List<AiKnowledgeSegmentDO> segmentDOs = convertList(documentSegments, segment -> { |
| ... | ... | @@ -227,6 +231,9 @@ public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService |
| 227 | 231 | |
| 228 | 232 | // 2. 检索 |
| 229 | 233 | List<Document> documents = searchDocument(knowledge, reqBO); |
| 234 | + if (CollUtil.isEmpty(documents)) { | |
| 235 | + return ListUtil.empty(); | |
| 236 | + } | |
| 230 | 237 | |
| 231 | 238 | // 3.1 段落召回 |
| 232 | 239 | List<AiKnowledgeSegmentDO> segments = segmentMapper |
| ... | ... | @@ -292,8 +299,10 @@ public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService |
| 292 | 299 | // 1. 读取 URL 内容 |
| 293 | 300 | String content = knowledgeDocumentService.readUrl(url); |
| 294 | 301 | |
| 295 | - // 2. 文档切片 | |
| 296 | - List<Document> documentSegments = splitContentByToken(content, segmentMaxTokens); | |
| 302 | + // 2.1 自动检测文档类型并选择策略 | |
| 303 | + AiDocumentSplitStrategyEnum strategy = detectDocumentStrategy(content, url); | |
| 304 | + // 2.2 文档切片 | |
| 305 | + List<Document> documentSegments = splitContentByStrategy(content, segmentMaxTokens, strategy, url); | |
| 297 | 306 | |
| 298 | 307 | // 3. 转换为段落对象 |
| 299 | 308 | return convertList(documentSegments, segment -> { |
| ... | ... | @@ -330,11 +339,103 @@ public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService |
| 330 | 339 | return getVectorStoreById(knowledge); |
| 331 | 340 | } |
| 332 | 341 | |
| 333 | - private static List<Document> splitContentByToken(String content, Integer segmentMaxTokens) { | |
| 334 | - TextSplitter textSplitter = buildTokenTextSplitter(segmentMaxTokens); | |
| 342 | + /** | |
| 343 | + * 根据策略切分内容 | |
| 344 | + * | |
| 345 | + * @param content 文档内容 | |
| 346 | + * @param segmentMaxTokens 分段的最大 Token 数 | |
| 347 | + * @param strategy 切片策略 | |
| 348 | + * @param url 文档 URL(用于自动检测文件类型) | |
| 349 | + * @return 切片后的文档列表 | |
| 350 | + */ | |
| 351 | + @SuppressWarnings("EnhancedSwitchMigration") | |
| 352 | + private List<Document> splitContentByStrategy(String content, Integer segmentMaxTokens, | |
| 353 | + AiDocumentSplitStrategyEnum strategy, String url) { | |
| 354 | + // 自动检测策略 | |
| 355 | + if (strategy == AiDocumentSplitStrategyEnum.AUTO) { | |
| 356 | + strategy = detectDocumentStrategy(content, url); | |
| 357 | + log.info("[splitContentByStrategy][自动检测到文档策略: {}]", strategy.getName()); | |
| 358 | + } | |
| 359 | + // 根据策略切分 | |
| 360 | + TextSplitter textSplitter; | |
| 361 | + switch (strategy) { | |
| 362 | + case MARKDOWN_QA: | |
| 363 | + textSplitter = new MarkdownQaSplitter(segmentMaxTokens); | |
| 364 | + break; | |
| 365 | + case SEMANTIC: | |
| 366 | + textSplitter = new SemanticTextSplitter(segmentMaxTokens); | |
| 367 | + break; | |
| 368 | + case PARAGRAPH: | |
| 369 | + textSplitter = new SemanticTextSplitter(segmentMaxTokens, 0); // 段落切分,无重叠 | |
| 370 | + break; | |
| 371 | + case TOKEN: | |
| 372 | + default: | |
| 373 | + textSplitter = buildTokenTextSplitter(segmentMaxTokens); | |
| 374 | + break; | |
| 375 | + } | |
| 376 | + // 执行切分 | |
| 335 | 377 | return textSplitter.apply(Collections.singletonList(new Document(content))); |
| 336 | 378 | } |
| 337 | 379 | |
| 380 | + /** | |
| 381 | + * 自动检测文档类型并选择切片策略 | |
| 382 | + * | |
| 383 | + * @param content 文档内容 | |
| 384 | + * @param url 文档 URL | |
| 385 | + * @return 推荐的切片策略 | |
| 386 | + */ | |
| 387 | + private AiDocumentSplitStrategyEnum detectDocumentStrategy(String content, String url) { | |
| 388 | + if (StrUtil.isEmpty(content)) { | |
| 389 | + return AiDocumentSplitStrategyEnum.TOKEN; | |
| 390 | + } | |
| 391 | + // 1. 检测 Markdown QA 格式 | |
| 392 | + if (isMarkdownQaFormat(content, url)) { | |
| 393 | + return AiDocumentSplitStrategyEnum.MARKDOWN_QA; | |
| 394 | + } | |
| 395 | + // 2. 检测普通 Markdown 文档 | |
| 396 | + if (isMarkdownDocument(url)) { | |
| 397 | + return AiDocumentSplitStrategyEnum.SEMANTIC; | |
| 398 | + } | |
| 399 | + // 3. 默认使用语义切分(比 Token 切分更智能) | |
| 400 | + return AiDocumentSplitStrategyEnum.SEMANTIC; | |
| 401 | + } | |
| 402 | + | |
| 403 | + /** | |
| 404 | + * 检测是否为 Markdown QA 格式 | |
| 405 | + * 特征:包含多个二级标题(## )且标题后紧跟答案内容 | |
| 406 | + */ | |
| 407 | + private boolean isMarkdownQaFormat(String content, String url) { | |
| 408 | + // 文件扩展名判断 | |
| 409 | + if (StrUtil.isNotEmpty(url) && !url.toLowerCase().endsWith(".md")) { | |
| 410 | + return false; | |
| 411 | + } | |
| 412 | + | |
| 413 | + // 统计二级标题数量 | |
| 414 | + long h2Count = content.lines() | |
| 415 | + .filter(line -> line.trim().startsWith("## ")) | |
| 416 | + .count(); | |
| 417 | + | |
| 418 | + // 要求一:至少包含 2 个二级标题才认为是 QA 格式 | |
| 419 | + if (h2Count < 2) { | |
| 420 | + return false; | |
| 421 | + } | |
| 422 | + | |
| 423 | + // 要求二:检查标题占比(QA 文档标题行数相对较多),如果二级标题占比超过 10%,认为是 QA 格式 | |
| 424 | + long totalLines = content.lines().count(); | |
| 425 | + double h2Ratio = (double) h2Count / totalLines; | |
| 426 | + return h2Ratio > 0.1; | |
| 427 | + } | |
| 428 | + | |
| 429 | + /** | |
| 430 | + * 检测是否为 Markdown 文档 | |
| 431 | + */ | |
| 432 | + private boolean isMarkdownDocument(String url) { | |
| 433 | + return StrUtil.endWithAnyIgnoreCase(url, ".md", ".markdown"); | |
| 434 | + } | |
| 435 | + | |
| 436 | + /** | |
| 437 | + * 构建基于 Token 的文本切片器(原有逻辑保留) | |
| 438 | + */ | |
| 338 | 439 | private static TextSplitter buildTokenTextSplitter(Integer segmentMaxTokens) { |
| 339 | 440 | return TokenTextSplitter.builder() |
| 340 | 441 | .withChunkSize(segmentMaxTokens) | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/splitter/MarkdownQaSplitter.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.knowledge.splitter; | |
| 2 | + | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 4 | +import cn.hutool.core.util.StrUtil; | |
| 5 | +import lombok.AllArgsConstructor; | |
| 6 | +import lombok.extern.slf4j.Slf4j; | |
| 7 | +import org.springframework.ai.transformer.splitter.TextSplitter; | |
| 8 | + | |
| 9 | +import java.util.ArrayList; | |
| 10 | +import java.util.Collections; | |
| 11 | +import java.util.List; | |
| 12 | +import java.util.regex.Matcher; | |
| 13 | +import java.util.regex.Pattern; | |
| 14 | + | |
| 15 | +/** | |
| 16 | + * Markdown QA 格式专用切片器 | |
| 17 | + * | |
| 18 | + * <p>功能特点: | |
| 19 | + * <ul> | |
| 20 | + * <li>识别二级标题(## )作为问题标记</li> | |
| 21 | + * <li>短 QA 对保持完整(不超过 Token 限制)</li> | |
| 22 | + * <li>长答案智能切分,每个片段保留完整问题作为上下文</li> | |
| 23 | + * <li>支持自定义 Token 估算器</li> | |
| 24 | + * </ul> | |
| 25 | + * | |
| 26 | + * @author runzhen | |
| 27 | + */ | |
| 28 | +@Slf4j | |
| 29 | +@SuppressWarnings("SizeReplaceableByIsEmpty") | |
| 30 | +public class MarkdownQaSplitter extends TextSplitter { | |
| 31 | + | |
| 32 | + /** | |
| 33 | + * 二级标题正则:匹配 "## " 开头的行 | |
| 34 | + */ | |
| 35 | + private static final Pattern H2_PATTERN = Pattern.compile("^##\\s+(.+)$", Pattern.MULTILINE); | |
| 36 | + | |
| 37 | + /** | |
| 38 | + * 段落分隔符:双换行 | |
| 39 | + */ | |
| 40 | + private static final String PARAGRAPH_SEPARATOR = "\n\n"; | |
| 41 | + | |
| 42 | + /** | |
| 43 | + * 句子分隔符 | |
| 44 | + */ | |
| 45 | + private static final Pattern SENTENCE_PATTERN = Pattern.compile("[。!?.!?]\\s*"); | |
| 46 | + | |
| 47 | + /** | |
| 48 | + * 分段的最大 Token 数 | |
| 49 | + */ | |
| 50 | + private final int chunkSize; | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * Token 估算器(简单实现:中文按字符数,英文按单词数的 1.3 倍) | |
| 54 | + */ | |
| 55 | + private final TokenEstimator tokenEstimator; | |
| 56 | + | |
| 57 | + public MarkdownQaSplitter(int chunkSize) { | |
| 58 | + this.chunkSize = chunkSize; | |
| 59 | + this.tokenEstimator = new SimpleTokenEstimator(); | |
| 60 | + } | |
| 61 | + | |
| 62 | + @Override | |
| 63 | + protected List<String> splitText(String text) { | |
| 64 | + if (StrUtil.isEmpty(text)) { | |
| 65 | + return Collections.emptyList(); | |
| 66 | + } | |
| 67 | + | |
| 68 | + // 解析 QA 对 | |
| 69 | + List<QaPair> qaPairs = parseQaPairs(text); | |
| 70 | + if (CollUtil.isEmpty(qaPairs)) { | |
| 71 | + // 如果没有识别到 QA 格式,按段落切分 | |
| 72 | + return fallbackSplit(text); | |
| 73 | + } | |
| 74 | + | |
| 75 | + // 处理每个 QA 对 | |
| 76 | + List<String> result = new ArrayList<>(); | |
| 77 | + for (QaPair qaPair : qaPairs) { | |
| 78 | + result.addAll(splitQaPair(qaPair)); | |
| 79 | + } | |
| 80 | + return result; | |
| 81 | + } | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * 解析 Markdown QA 对 | |
| 85 | + * | |
| 86 | + * @param content 文本内容 | |
| 87 | + * @return QA 对列表 | |
| 88 | + */ | |
| 89 | + private List<QaPair> parseQaPairs(String content) { | |
| 90 | + // 找到所有二级标题位置 | |
| 91 | + List<QaPair> qaPairs = new ArrayList<>(); | |
| 92 | + List<Integer> headingPositions = new ArrayList<>(); | |
| 93 | + List<String> questions = new ArrayList<>(); | |
| 94 | + Matcher matcher = H2_PATTERN.matcher(content); | |
| 95 | + while (matcher.find()) { | |
| 96 | + headingPositions.add(matcher.start()); | |
| 97 | + questions.add(matcher.group(1).trim()); | |
| 98 | + } | |
| 99 | + if (CollUtil.isEmpty(headingPositions)) { | |
| 100 | + return qaPairs; | |
| 101 | + } | |
| 102 | + | |
| 103 | + // 提取每个 QA 对 | |
| 104 | + for (int i = 0; i < headingPositions.size(); i++) { | |
| 105 | + int start = headingPositions.get(i); | |
| 106 | + int end = (i + 1 < headingPositions.size()) | |
| 107 | + ? headingPositions.get(i + 1) | |
| 108 | + : content.length(); | |
| 109 | + String qaText = content.substring(start, end).trim(); | |
| 110 | + String question = questions.get(i); | |
| 111 | + // 提取答案部分(去掉问题标题) | |
| 112 | + String answer = qaText.substring(qaText.indexOf('\n') + 1).trim(); | |
| 113 | + qaPairs.add(new QaPair(question, answer, qaText)); | |
| 114 | + } | |
| 115 | + return qaPairs; | |
| 116 | + } | |
| 117 | + | |
| 118 | + /** | |
| 119 | + * 切分单个 QA 对 | |
| 120 | + * | |
| 121 | + * @param qaPair QA 对 | |
| 122 | + * @return 切分后的文本片段列表 | |
| 123 | + */ | |
| 124 | + private List<String> splitQaPair(QaPair qaPair) { | |
| 125 | + // 如果整个 QA 对不超过限制,保持完整 | |
| 126 | + List<String> chunks = new ArrayList<>(); | |
| 127 | + String fullQa = qaPair.fullText; | |
| 128 | + int qaTokens = tokenEstimator.estimate(fullQa); | |
| 129 | + if (qaTokens <= chunkSize) { | |
| 130 | + chunks.add(fullQa); | |
| 131 | + return chunks; | |
| 132 | + } | |
| 133 | + | |
| 134 | + // 长答案需要切分 | |
| 135 | + log.debug("QA 对超过 Token 限制 ({} > {}),开始智能切分: {}", qaTokens, chunkSize, qaPair.question); | |
| 136 | + List<String> answerChunks = splitLongAnswer(qaPair.answer, qaPair.question); | |
| 137 | + for (String answerChunk : answerChunks) { | |
| 138 | + // 每个片段都包含完整问题 | |
| 139 | + String chunkText = "## " + qaPair.question + "\n" + answerChunk; | |
| 140 | + chunks.add(chunkText); | |
| 141 | + } | |
| 142 | + return chunks; | |
| 143 | + } | |
| 144 | + | |
| 145 | + /** | |
| 146 | + * 切分长答案 | |
| 147 | + * | |
| 148 | + * @param answer 答案文本 | |
| 149 | + * @param question 问题文本 | |
| 150 | + * @return 切分后的答案片段列表 | |
| 151 | + */ | |
| 152 | + private List<String> splitLongAnswer(String answer, String question) { | |
| 153 | + List<String> chunks = new ArrayList<>(); | |
| 154 | + // 预留问题的 Token 空间 | |
| 155 | + String questionHeader = "## " + question + "\n"; | |
| 156 | + int questionTokens = tokenEstimator.estimate(questionHeader); | |
| 157 | + int availableTokens = chunkSize - questionTokens - 10; // 预留 10 个 Token 的缓冲 | |
| 158 | + | |
| 159 | + // 先按段落切分 | |
| 160 | + String[] paragraphs = answer.split(PARAGRAPH_SEPARATOR); | |
| 161 | + StringBuilder currentChunk = new StringBuilder(); | |
| 162 | + int currentTokens = 0; | |
| 163 | + for (String paragraph : paragraphs) { | |
| 164 | + if (StrUtil.isEmpty(paragraph)) { | |
| 165 | + continue; | |
| 166 | + } | |
| 167 | + int paragraphTokens = tokenEstimator.estimate(paragraph); | |
| 168 | + // 如果单个段落就超过限制,需要按句子切分 | |
| 169 | + if (paragraphTokens > availableTokens) { | |
| 170 | + // 先保存当前块 | |
| 171 | + if (currentChunk.length() > 0) { | |
| 172 | + chunks.add(currentChunk.toString().trim()); | |
| 173 | + currentChunk = new StringBuilder(); | |
| 174 | + currentTokens = 0; | |
| 175 | + } | |
| 176 | + // 按句子切分长段落 | |
| 177 | + chunks.addAll(splitLongParagraph(paragraph, availableTokens)); | |
| 178 | + continue; | |
| 179 | + } | |
| 180 | + // 如果加上这个段落会超过限制 | |
| 181 | + if (currentTokens + paragraphTokens > availableTokens && currentChunk.length() > 0) { | |
| 182 | + chunks.add(currentChunk.toString().trim()); | |
| 183 | + currentChunk = new StringBuilder(); | |
| 184 | + currentTokens = 0; | |
| 185 | + } | |
| 186 | + if (currentChunk.length() > 0) { | |
| 187 | + currentChunk.append("\n\n"); | |
| 188 | + } | |
| 189 | + // 添加段落 | |
| 190 | + currentChunk.append(paragraph); | |
| 191 | + currentTokens += paragraphTokens; | |
| 192 | + } | |
| 193 | + | |
| 194 | + // 添加最后一块 | |
| 195 | + if (currentChunk.length() > 0) { | |
| 196 | + chunks.add(currentChunk.toString().trim()); | |
| 197 | + } | |
| 198 | + return CollUtil.isEmpty(chunks) ? Collections.singletonList(answer) : chunks; | |
| 199 | + } | |
| 200 | + | |
| 201 | + /** | |
| 202 | + * 切分长段落(按句子) | |
| 203 | + * | |
| 204 | + * @param paragraph 段落文本 | |
| 205 | + * @param availableTokens 可用的 Token 数 | |
| 206 | + * @return 切分后的文本片段列表 | |
| 207 | + */ | |
| 208 | + private List<String> splitLongParagraph(String paragraph, int availableTokens) { | |
| 209 | + // 按句子切分 | |
| 210 | + List<String> chunks = new ArrayList<>(); | |
| 211 | + String[] sentences = SENTENCE_PATTERN.split(paragraph); | |
| 212 | + | |
| 213 | + // 按句子累积切分 | |
| 214 | + StringBuilder currentChunk = new StringBuilder(); | |
| 215 | + int currentTokens = 0; | |
| 216 | + for (String sentence : sentences) { | |
| 217 | + if (StrUtil.isEmpty(sentence)) { | |
| 218 | + continue; | |
| 219 | + } | |
| 220 | + int sentenceTokens = tokenEstimator.estimate(sentence); | |
| 221 | + // 如果单个句子就超过限制,强制切分 | |
| 222 | + if (sentenceTokens > availableTokens) { | |
| 223 | + if (currentChunk.length() > 0) { | |
| 224 | + chunks.add(currentChunk.toString().trim()); | |
| 225 | + currentChunk = new StringBuilder(); | |
| 226 | + currentTokens = 0; | |
| 227 | + } | |
| 228 | + chunks.add(sentence.trim()); | |
| 229 | + continue; | |
| 230 | + } | |
| 231 | + // 如果加上这个句子会超过限制 | |
| 232 | + if (currentTokens + sentenceTokens > availableTokens && currentChunk.length() > 0) { | |
| 233 | + chunks.add(currentChunk.toString().trim()); | |
| 234 | + currentChunk = new StringBuilder(); | |
| 235 | + currentTokens = 0; | |
| 236 | + } | |
| 237 | + // 添加句子 | |
| 238 | + currentChunk.append(sentence); | |
| 239 | + currentTokens += sentenceTokens; | |
| 240 | + } | |
| 241 | + | |
| 242 | + // 添加最后一块 | |
| 243 | + if (currentChunk.length() > 0) { | |
| 244 | + chunks.add(currentChunk.toString().trim()); | |
| 245 | + } | |
| 246 | + return chunks.isEmpty() ? Collections.singletonList(paragraph) : chunks; | |
| 247 | + } | |
| 248 | + | |
| 249 | + /** | |
| 250 | + * 降级切分策略(当未识别到 QA 格式时) | |
| 251 | + * | |
| 252 | + * @param content 文本内容 | |
| 253 | + * @return 切分后的文本片段列表 | |
| 254 | + */ | |
| 255 | + private List<String> fallbackSplit(String content) { | |
| 256 | + // 按段落切分 | |
| 257 | + List<String> chunks = new ArrayList<>(); | |
| 258 | + String[] paragraphs = content.split(PARAGRAPH_SEPARATOR); | |
| 259 | + | |
| 260 | + // 按段落累积切分 | |
| 261 | + StringBuilder currentChunk = new StringBuilder(); | |
| 262 | + int currentTokens = 0; | |
| 263 | + for (String paragraph : paragraphs) { | |
| 264 | + if (StrUtil.isEmpty(paragraph)) { | |
| 265 | + continue; | |
| 266 | + } | |
| 267 | + int paragraphTokens = tokenEstimator.estimate(paragraph); | |
| 268 | + // 如果加上这个段落会超过限制 | |
| 269 | + if (currentTokens + paragraphTokens > chunkSize && currentChunk.length() > 0) { | |
| 270 | + chunks.add(currentChunk.toString().trim()); | |
| 271 | + currentChunk = new StringBuilder(); | |
| 272 | + currentTokens = 0; | |
| 273 | + } | |
| 274 | + // 添加段落 | |
| 275 | + if (currentChunk.length() > 0) { | |
| 276 | + currentChunk.append("\n\n"); | |
| 277 | + } | |
| 278 | + currentChunk.append(paragraph); | |
| 279 | + currentTokens += paragraphTokens; | |
| 280 | + } | |
| 281 | + | |
| 282 | + // 添加最后一块 | |
| 283 | + if (currentChunk.length() > 0) { | |
| 284 | + chunks.add(currentChunk.toString().trim()); | |
| 285 | + } | |
| 286 | + return chunks.isEmpty() ? Collections.singletonList(content) : chunks; | |
| 287 | + } | |
| 288 | + | |
| 289 | + /** | |
| 290 | + * QA 对数据结构 | |
| 291 | + */ | |
| 292 | + @AllArgsConstructor | |
| 293 | + private static class QaPair { | |
| 294 | + | |
| 295 | + String question; | |
| 296 | + String answer; | |
| 297 | + String fullText; | |
| 298 | + | |
| 299 | + } | |
| 300 | + | |
| 301 | + /** | |
| 302 | + * Token 估算器接口 | |
| 303 | + */ | |
| 304 | + public interface TokenEstimator { | |
| 305 | + | |
| 306 | + int estimate(String text); | |
| 307 | + | |
| 308 | + } | |
| 309 | + | |
| 310 | + /** | |
| 311 | + * 简单的 Token 估算器实现 | |
| 312 | + * 中文:1 字符 ≈ 1 Token | |
| 313 | + * 英文:1 单词 ≈ 1.3 Token | |
| 314 | + */ | |
| 315 | + private static class SimpleTokenEstimator implements TokenEstimator { | |
| 316 | + | |
| 317 | + @Override | |
| 318 | + public int estimate(String text) { | |
| 319 | + if (StrUtil.isEmpty(text)) { | |
| 320 | + return 0; | |
| 321 | + } | |
| 322 | + | |
| 323 | + int chineseChars = 0; | |
| 324 | + int englishWords = 0; | |
| 325 | + // 简单统计中英文 | |
| 326 | + for (char c : text.toCharArray()) { | |
| 327 | + if (c >= 0x4E00 && c <= 0x9FA5) { | |
| 328 | + chineseChars++; | |
| 329 | + } | |
| 330 | + } | |
| 331 | + // 英文单词估算 | |
| 332 | + String[] words = text.split("\\s+"); | |
| 333 | + for (String word : words) { | |
| 334 | + if (word.matches(".*[a-zA-Z].*")) { | |
| 335 | + englishWords++; | |
| 336 | + } | |
| 337 | + } | |
| 338 | + return chineseChars + (int) (englishWords * 1.3); | |
| 339 | + } | |
| 340 | + } | |
| 341 | + | |
| 342 | +} | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/splitter/SemanticTextSplitter.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.knowledge.splitter; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.StrUtil; | |
| 4 | +import lombok.extern.slf4j.Slf4j; | |
| 5 | +import org.springframework.ai.transformer.splitter.TextSplitter; | |
| 6 | + | |
| 7 | +import java.util.ArrayList; | |
| 8 | +import java.util.Arrays; | |
| 9 | +import java.util.Collections; | |
| 10 | +import java.util.List; | |
| 11 | +import java.util.regex.Matcher; | |
| 12 | +import java.util.regex.Pattern; | |
| 13 | + | |
| 14 | +/** | |
| 15 | + * 语义化文本切片器 | |
| 16 | + * | |
| 17 | + * <p>功能特点: | |
| 18 | + * <ul> | |
| 19 | + * <li>优先在段落边界(双换行)处切分</li> | |
| 20 | + * <li>其次在句子边界(句号、问号、感叹号)处切分</li> | |
| 21 | + * <li>避免在句子中间截断,保持语义完整性</li> | |
| 22 | + * <li>支持中英文标点符号识别</li> | |
| 23 | + * </ul> | |
| 24 | + * | |
| 25 | + * @author runzhen | |
| 26 | + */ | |
| 27 | +@Slf4j | |
| 28 | +public class SemanticTextSplitter extends TextSplitter { | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * 分段的最大 Token 数 | |
| 32 | + */ | |
| 33 | + private final int chunkSize; | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * 段落重叠大小(用于保持上下文连贯性) | |
| 37 | + */ | |
| 38 | + private final int chunkOverlap; | |
| 39 | + | |
| 40 | + /** | |
| 41 | + * 段落分隔符(按优先级排序) | |
| 42 | + */ | |
| 43 | + private static final List<String> PARAGRAPH_SEPARATORS = Arrays.asList( | |
| 44 | + "\n\n\n", // 三个换行 | |
| 45 | + "\n\n", // 双换行 | |
| 46 | + "\n" // 单换行 | |
| 47 | + ); | |
| 48 | + | |
| 49 | + /** | |
| 50 | + * 句子结束标记(中英文标点) | |
| 51 | + */ | |
| 52 | + private static final Pattern SENTENCE_END_PATTERN = Pattern.compile( | |
| 53 | + "[。!?.!?]+[\\s\"'))】\\]]*" | |
| 54 | + ); | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * Token 估算器 | |
| 58 | + */ | |
| 59 | + private final MarkdownQaSplitter.TokenEstimator tokenEstimator; | |
| 60 | + | |
| 61 | + public SemanticTextSplitter(int chunkSize, int chunkOverlap) { | |
| 62 | + this.chunkSize = chunkSize; | |
| 63 | + this.chunkOverlap = Math.min(chunkOverlap, chunkSize / 2); // 重叠不超过一半 | |
| 64 | + this.tokenEstimator = new SimpleTokenEstimator(); | |
| 65 | + } | |
| 66 | + | |
| 67 | + public SemanticTextSplitter(int chunkSize) { | |
| 68 | + this(chunkSize, 50); // 默认重叠 50 个 Token | |
| 69 | + } | |
| 70 | + | |
| 71 | + @Override | |
| 72 | + protected List<String> splitText(String text) { | |
| 73 | + if (StrUtil.isEmpty(text)) { | |
| 74 | + return Collections.emptyList(); | |
| 75 | + } | |
| 76 | + return splitTextRecursive(text); | |
| 77 | + } | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * 切分文本(递归策略) | |
| 81 | + * | |
| 82 | + * @param text 待切分文本 | |
| 83 | + * @return 切分后的文本块列表 | |
| 84 | + */ | |
| 85 | + private List<String> splitTextRecursive(String text) { | |
| 86 | + List<String> chunks = new ArrayList<>(); | |
| 87 | + | |
| 88 | + // 如果文本不超过限制,直接返回 | |
| 89 | + int textTokens = tokenEstimator.estimate(text); | |
| 90 | + if (textTokens <= chunkSize) { | |
| 91 | + chunks.add(text.trim()); | |
| 92 | + return chunks; | |
| 93 | + } | |
| 94 | + | |
| 95 | + // 尝试按不同分隔符切分 | |
| 96 | + List<String> splits = null; | |
| 97 | + String usedSeparator = null; | |
| 98 | + for (String separator : PARAGRAPH_SEPARATORS) { | |
| 99 | + if (text.contains(separator)) { | |
| 100 | + splits = Arrays.asList(text.split(Pattern.quote(separator))); | |
| 101 | + usedSeparator = separator; | |
| 102 | + break; | |
| 103 | + } | |
| 104 | + } | |
| 105 | + | |
| 106 | + // 如果没有找到段落分隔符,按句子切分 | |
| 107 | + if (splits == null || splits.size() == 1) { | |
| 108 | + splits = splitBySentences(text); | |
| 109 | + usedSeparator = ""; // 句子切分不需要分隔符 | |
| 110 | + } | |
| 111 | + | |
| 112 | + // 合并小片段 | |
| 113 | + chunks = mergeSplits(splits, usedSeparator); | |
| 114 | + return chunks; | |
| 115 | + } | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * 按句子切分 | |
| 119 | + * | |
| 120 | + * @param text 待切分文本 | |
| 121 | + * @return 句子列表 | |
| 122 | + */ | |
| 123 | + private List<String> splitBySentences(String text) { | |
| 124 | + // 使用正则表达式匹配句子结束位置 | |
| 125 | + List<String> sentences = new ArrayList<>(); | |
| 126 | + int lastEnd = 0; | |
| 127 | + Matcher matcher = SENTENCE_END_PATTERN.matcher(text); | |
| 128 | + while (matcher.find()) { | |
| 129 | + String sentence = text.substring(lastEnd, matcher.end()).trim(); | |
| 130 | + if (StrUtil.isNotEmpty(sentence)) { | |
| 131 | + sentences.add(sentence); | |
| 132 | + } | |
| 133 | + lastEnd = matcher.end(); | |
| 134 | + } | |
| 135 | + | |
| 136 | + // 添加剩余部分 | |
| 137 | + if (lastEnd < text.length()) { | |
| 138 | + String remaining = text.substring(lastEnd).trim(); | |
| 139 | + if (StrUtil.isNotEmpty(remaining)) { | |
| 140 | + sentences.add(remaining); | |
| 141 | + } | |
| 142 | + } | |
| 143 | + return sentences.isEmpty() ? Collections.singletonList(text) : sentences; | |
| 144 | + } | |
| 145 | + | |
| 146 | + /** | |
| 147 | + * 合并切分后的小片段 | |
| 148 | + * | |
| 149 | + * @param splits 切分后的片段列表 | |
| 150 | + * @param separator 片段间的分隔符 | |
| 151 | + * @return 合并后的文本块列表 | |
| 152 | + */ | |
| 153 | + private List<String> mergeSplits(List<String> splits, String separator) { | |
| 154 | + List<String> chunks = new ArrayList<>(); | |
| 155 | + List<String> currentChunks = new ArrayList<>(); | |
| 156 | + int currentLength = 0; | |
| 157 | + | |
| 158 | + for (String split : splits) { | |
| 159 | + if (StrUtil.isEmpty(split)) { | |
| 160 | + continue; | |
| 161 | + } | |
| 162 | + int splitTokens = tokenEstimator.estimate(split); | |
| 163 | + // 如果单个片段就超过限制,进一步递归切分 | |
| 164 | + if (splitTokens > chunkSize) { | |
| 165 | + // 先保存当前累积的块 | |
| 166 | + if (!currentChunks.isEmpty()) { | |
| 167 | + String chunkText = String.join(separator, currentChunks); | |
| 168 | + chunks.add(chunkText.trim()); | |
| 169 | + currentChunks.clear(); | |
| 170 | + currentLength = 0; | |
| 171 | + } | |
| 172 | + // 递归切分大片段 | |
| 173 | + if (!separator.isEmpty()) { | |
| 174 | + // 如果是段落分隔符,尝试按句子切分 | |
| 175 | + chunks.addAll(splitTextRecursive(split)); | |
| 176 | + } else { | |
| 177 | + // 如果已经是句子级别,强制按字符切分 | |
| 178 | + chunks.addAll(forceSplitLongText(split)); | |
| 179 | + } | |
| 180 | + continue; | |
| 181 | + } | |
| 182 | + // 计算加上分隔符的 Token 数 | |
| 183 | + int separatorTokens = StrUtil.isEmpty(separator) ? 0 : tokenEstimator.estimate(separator); | |
| 184 | + // 如果加上这个片段会超过限制 | |
| 185 | + if (!currentChunks.isEmpty() && currentLength + splitTokens + separatorTokens > chunkSize) { | |
| 186 | + // 保存当前块 | |
| 187 | + String chunkText = String.join(separator, currentChunks); | |
| 188 | + chunks.add(chunkText.trim()); | |
| 189 | + | |
| 190 | + // 处理重叠:保留最后几个片段 | |
| 191 | + currentChunks = getOverlappingChunks(currentChunks, separator); | |
| 192 | + currentLength = estimateTokens(currentChunks, separator); | |
| 193 | + } | |
| 194 | + // 添加当前片段 | |
| 195 | + currentChunks.add(split); | |
| 196 | + currentLength += splitTokens + separatorTokens; | |
| 197 | + } | |
| 198 | + | |
| 199 | + // 添加最后一块 | |
| 200 | + if (!currentChunks.isEmpty()) { | |
| 201 | + String chunkText = String.join(separator, currentChunks); | |
| 202 | + chunks.add(chunkText.trim()); | |
| 203 | + } | |
| 204 | + return chunks; | |
| 205 | + } | |
| 206 | + | |
| 207 | + /** | |
| 208 | + * 获取重叠的片段(用于保持上下文) | |
| 209 | + * | |
| 210 | + * @param chunks 当前片段列表 | |
| 211 | + * @param separator 片段间的分隔符 | |
| 212 | + * @return 重叠的片段列表 | |
| 213 | + */ | |
| 214 | + private List<String> getOverlappingChunks(List<String> chunks, String separator) { | |
| 215 | + if (chunkOverlap == 0 || chunks.isEmpty()) { | |
| 216 | + return new ArrayList<>(); | |
| 217 | + } | |
| 218 | + | |
| 219 | + // 从后往前取片段,直到达到重叠大小 | |
| 220 | + List<String> overlapping = new ArrayList<>(); | |
| 221 | + int tokens = 0; | |
| 222 | + for (int i = chunks.size() - 1; i >= 0; i--) { | |
| 223 | + String chunk = chunks.get(i); | |
| 224 | + int chunkTokens = tokenEstimator.estimate(chunk); | |
| 225 | + if (tokens + chunkTokens > chunkOverlap) { | |
| 226 | + break; | |
| 227 | + } | |
| 228 | + // 添加到重叠列表前端 | |
| 229 | + overlapping.add(0, chunk); | |
| 230 | + tokens += chunkTokens + (StrUtil.isEmpty(separator) ? 0 : tokenEstimator.estimate(separator)); | |
| 231 | + } | |
| 232 | + return overlapping; | |
| 233 | + } | |
| 234 | + | |
| 235 | + /** | |
| 236 | + * 估算片段列表的总 Token 数 | |
| 237 | + * | |
| 238 | + * @param chunks 片段列表 | |
| 239 | + * @param separator 片段间的分隔符 | |
| 240 | + * @return 总 Token 数 | |
| 241 | + */ | |
| 242 | + private int estimateTokens(List<String> chunks, String separator) { | |
| 243 | + int total = 0; | |
| 244 | + for (int i = 0; i < chunks.size(); i++) { | |
| 245 | + total += tokenEstimator.estimate(chunks.get(i)); | |
| 246 | + if (i < chunks.size() - 1 && StrUtil.isNotEmpty(separator)) { | |
| 247 | + total += tokenEstimator.estimate(separator); | |
| 248 | + } | |
| 249 | + } | |
| 250 | + return total; | |
| 251 | + } | |
| 252 | + | |
| 253 | + /** | |
| 254 | + * 强制切分长文本(当语义切分失败时) | |
| 255 | + * | |
| 256 | + * @param text 待切分文本 | |
| 257 | + * @return 切分后的文本块列表 | |
| 258 | + */ | |
| 259 | + private List<String> forceSplitLongText(String text) { | |
| 260 | + List<String> chunks = new ArrayList<>(); | |
| 261 | + int charsPerChunk = (int) (chunkSize * 0.8); // 保守估计 | |
| 262 | + for (int i = 0; i < text.length(); i += charsPerChunk) { | |
| 263 | + int end = Math.min(i + charsPerChunk, text.length()); | |
| 264 | + String chunk = text.substring(i, end); | |
| 265 | + chunks.add(chunk.trim()); | |
| 266 | + } | |
| 267 | + log.warn("文本过长,已强制按字符切分,可能影响语义完整性"); | |
| 268 | + return chunks; | |
| 269 | + } | |
| 270 | + | |
| 271 | + /** | |
| 272 | + * 简单的 Token 估算器实现 | |
| 273 | + */ | |
| 274 | + private static class SimpleTokenEstimator implements MarkdownQaSplitter.TokenEstimator { | |
| 275 | + | |
| 276 | + @Override | |
| 277 | + public int estimate(String text) { | |
| 278 | + if (StrUtil.isEmpty(text)) { | |
| 279 | + return 0; | |
| 280 | + } | |
| 281 | + | |
| 282 | + int chineseChars = 0; | |
| 283 | + int englishWords = 0; | |
| 284 | + // 简单统计中英文 | |
| 285 | + for (char c : text.toCharArray()) { | |
| 286 | + if (c >= 0x4E00 && c <= 0x9FA5) { | |
| 287 | + chineseChars++; | |
| 288 | + } | |
| 289 | + } | |
| 290 | + // 英文单词估算 | |
| 291 | + String[] words = text.split("\\s+"); | |
| 292 | + for (String word : words) { | |
| 293 | + if (word.matches(".*[a-zA-Z].*")) { | |
| 294 | + englishWords++; | |
| 295 | + } | |
| 296 | + } | |
| 297 | + return chineseChars + (int) (englishWords * 1.3); | |
| 298 | + } | |
| 299 | + } | |
| 300 | + | |
| 301 | +} | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/util/AiUtils.java
| ... | ... | @@ -16,7 +16,7 @@ import org.springframework.ai.chat.prompt.ChatOptions; |
| 16 | 16 | import org.springframework.ai.deepseek.DeepSeekAssistantMessage; |
| 17 | 17 | import org.springframework.ai.deepseek.DeepSeekChatOptions; |
| 18 | 18 | import org.springframework.ai.minimax.MiniMaxChatOptions; |
| 19 | -import org.springframework.ai.ollama.api.OllamaOptions; | |
| 19 | +import org.springframework.ai.ollama.api.OllamaChatOptions; | |
| 20 | 20 | import org.springframework.ai.openai.OpenAiChatOptions; |
| 21 | 21 | import org.springframework.ai.tool.ToolCallback; |
| 22 | 22 | import org.springframework.ai.zhipuai.ZhiPuAiChatOptions; |
| ... | ... | @@ -68,6 +68,7 @@ public class AiUtils { |
| 68 | 68 | case OPENAI: |
| 69 | 69 | case GEMINI: // 复用 OpenAI 客户端 |
| 70 | 70 | case BAI_CHUAN: // 复用 OpenAI 客户端 |
| 71 | + case GROK: // 复用 OpenAI 客户端 | |
| 71 | 72 | return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) |
| 72 | 73 | .toolCallbacks(toolCallbacks).toolContext(toolContext).build(); |
| 73 | 74 | case AZURE_OPENAI: |
| ... | ... | @@ -77,7 +78,7 @@ public class AiUtils { |
| 77 | 78 | return AnthropicChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) |
| 78 | 79 | .toolCallbacks(toolCallbacks).toolContext(toolContext).build(); |
| 79 | 80 | case OLLAMA: |
| 80 | - return OllamaOptions.builder().model(model).temperature(temperature).numPredict(maxTokens) | |
| 81 | + return OllamaChatOptions.builder().model(model).temperature(temperature).numPredict(maxTokens) | |
| 81 | 82 | .toolCallbacks(toolCallbacks).toolContext(toolContext).build(); |
| 82 | 83 | default: |
| 83 | 84 | throw new IllegalArgumentException(StrUtil.format("未知平台({})", platform)); | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/AnthropicChatModelTest.java
| ... | ... | @@ -28,7 +28,7 @@ public class AnthropicChatModelTest { |
| 28 | 28 | .baseUrl("https://aihubmix.com") |
| 29 | 29 | .build()) |
| 30 | 30 | .defaultOptions(AnthropicChatOptions.builder() |
| 31 | - .model(AnthropicApi.ChatModel.CLAUDE_SONNET_4) | |
| 31 | + .model(AnthropicApi.ChatModel.CLAUDE_SONNET_4_5) | |
| 32 | 32 | .temperature(0.7) |
| 33 | 33 | .maxTokens(4096) |
| 34 | 34 | .build()) |
| ... | ... | @@ -70,7 +70,7 @@ public class AnthropicChatModelTest { |
| 70 | 70 | List<Message> messages = new ArrayList<>(); |
| 71 | 71 | messages.add(new UserMessage("thkinking 下,1+1 为什么等于 2 ")); |
| 72 | 72 | AnthropicChatOptions options = AnthropicChatOptions.builder() |
| 73 | - .model(AnthropicApi.ChatModel.CLAUDE_SONNET_4) | |
| 73 | + .model(AnthropicApi.ChatModel.CLAUDE_SONNET_4_5) | |
| 74 | 74 | .thinking(AnthropicApi.ThinkingType.ENABLED, 3096) |
| 75 | 75 | .temperature(1D) |
| 76 | 76 | .build(); | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/LlamaChatModelTests.java
| ... | ... | @@ -9,8 +9,8 @@ import org.springframework.ai.chat.model.ChatResponse; |
| 9 | 9 | import org.springframework.ai.chat.prompt.Prompt; |
| 10 | 10 | import org.springframework.ai.ollama.OllamaChatModel; |
| 11 | 11 | import org.springframework.ai.ollama.api.OllamaApi; |
| 12 | +import org.springframework.ai.ollama.api.OllamaChatOptions; | |
| 12 | 13 | import org.springframework.ai.ollama.api.OllamaModel; |
| 13 | -import org.springframework.ai.ollama.api.OllamaOptions; | |
| 14 | 14 | import reactor.core.publisher.Flux; |
| 15 | 15 | |
| 16 | 16 | import java.util.ArrayList; |
| ... | ... | @@ -27,7 +27,7 @@ public class LlamaChatModelTests { |
| 27 | 27 | .ollamaApi(OllamaApi.builder() |
| 28 | 28 | .baseUrl("http://127.0.0.1:11434") // Ollama 服务地址 |
| 29 | 29 | .build()) |
| 30 | - .defaultOptions(OllamaOptions.builder() | |
| 30 | + .defaultOptions(OllamaChatOptions.builder() | |
| 31 | 31 | .model(OllamaModel.LLAMA3.getName()) // 模型 |
| 32 | 32 | .build()) |
| 33 | 33 | .build(); |
| ... | ... | @@ -70,7 +70,7 @@ public class LlamaChatModelTests { |
| 70 | 70 | // 准备参数 |
| 71 | 71 | List<Message> messages = new ArrayList<>(); |
| 72 | 72 | messages.add(new UserMessage("详细分析下,如何设计一个电商系统?")); |
| 73 | - OllamaOptions options = OllamaOptions.builder() | |
| 73 | + OllamaChatOptions options = OllamaChatOptions.builder() | |
| 74 | 74 | .model("qwen3") |
| 75 | 75 | .build(); |
| 76 | 76 | |
| ... | ... | @@ -83,5 +83,4 @@ public class LlamaChatModelTests { |
| 83 | 83 | }).then().block(); |
| 84 | 84 | } |
| 85 | 85 | |
| 86 | - | |
| 87 | 86 | } | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/OllamaChatModelTests.java
| ... | ... | @@ -9,7 +9,7 @@ import org.springframework.ai.chat.model.ChatResponse; |
| 9 | 9 | import org.springframework.ai.chat.prompt.Prompt; |
| 10 | 10 | import org.springframework.ai.ollama.OllamaChatModel; |
| 11 | 11 | import org.springframework.ai.ollama.api.OllamaApi; |
| 12 | -import org.springframework.ai.ollama.api.OllamaOptions; | |
| 12 | +import org.springframework.ai.ollama.api.OllamaChatOptions; | |
| 13 | 13 | import reactor.core.publisher.Flux; |
| 14 | 14 | |
| 15 | 15 | import java.util.ArrayList; |
| ... | ... | @@ -26,7 +26,7 @@ public class OllamaChatModelTests { |
| 26 | 26 | .ollamaApi(OllamaApi.builder() |
| 27 | 27 | .baseUrl("http://127.0.0.1:11434") // Ollama 服务地址 |
| 28 | 28 | .build()) |
| 29 | - .defaultOptions(OllamaOptions.builder() | |
| 29 | + .defaultOptions(OllamaChatOptions.builder() | |
| 30 | 30 | // .model("qwen") // 模型(https://ollama.com/library/qwen) |
| 31 | 31 | .model("deepseek-r1") // 模型(https://ollama.com/library/deepseek-r1) |
| 32 | 32 | .build()) | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/ZhiPuAiChatModelTests.java
| ... | ... | @@ -23,7 +23,7 @@ import java.util.List; |
| 23 | 23 | public class ZhiPuAiChatModelTests { |
| 24 | 24 | |
| 25 | 25 | private final ZhiPuAiChatModel chatModel = new ZhiPuAiChatModel( |
| 26 | - new ZhiPuAiApi("2f35fb6ca4ea41fab898729b7fac086c.6ESSfPcCkxaKEUlR"), // 密钥 | |
| 26 | + ZhiPuAiApi.builder().apiKey("2f35fb6ca4ea41fab898729b7fac086c.6ESSfPcCkxaKEUlR").build(), // 密钥 | |
| 27 | 27 | ZhiPuAiChatOptions.builder() |
| 28 | 28 | .model(ZhiPuAiApi.ChatModel.GLM_4.getName()) // 模型 |
| 29 | 29 | .build() | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/websearch/AiBoChaWebSearchClientTest.java
| ... | ... | @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 4 | 4 | import cn.iocoder.yudao.module.ai.framework.ai.core.webserch.AiWebSearchRequest; |
| 5 | 5 | import cn.iocoder.yudao.module.ai.framework.ai.core.webserch.AiWebSearchResponse; |
| 6 | 6 | import cn.iocoder.yudao.module.ai.framework.ai.core.webserch.bocha.AiBoChaWebSearchClient; |
| 7 | +import org.junit.jupiter.api.Disabled; | |
| 7 | 8 | import org.junit.jupiter.api.Test; |
| 8 | 9 | |
| 9 | 10 | /** |
| ... | ... | @@ -17,6 +18,7 @@ public class AiBoChaWebSearchClientTest { |
| 17 | 18 | "sk-40500e52840f4d24b956d0b1d80d9abe"); |
| 18 | 19 | |
| 19 | 20 | @Test |
| 21 | + @Disabled | |
| 20 | 22 | public void testSearch() { |
| 21 | 23 | AiWebSearchRequest request = new AiWebSearchRequest() |
| 22 | 24 | .setQuery("阿里巴巴") | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java
| ... | ... | @@ -100,6 +100,10 @@ public class BpmModelMetaInfoVO { |
| 100 | 100 | @Schema(description = "任务后置通知设置", example = "{}") |
| 101 | 101 | private HttpRequestSetting taskAfterTriggerSetting; |
| 102 | 102 | |
| 103 | + @Schema(description = "自定义打印模板设置", example = "{}") | |
| 104 | + @Valid | |
| 105 | + private PrintTemplateSetting printTemplateSetting; | |
| 106 | + | |
| 103 | 107 | @Schema(description = "流程 ID 规则") |
| 104 | 108 | @Data |
| 105 | 109 | @Valid |
| ... | ... | @@ -180,4 +184,17 @@ public class BpmModelMetaInfoVO { |
| 180 | 184 | |
| 181 | 185 | } |
| 182 | 186 | |
| 187 | + @Schema(description = "自定义打印模板设置") | |
| 188 | + @Data | |
| 189 | + public static class PrintTemplateSetting { | |
| 190 | + | |
| 191 | + @Schema(description = "是否自定义打印模板", example = "false") | |
| 192 | + @NotNull(message = "是否自定义打印模板不能为空") | |
| 193 | + private Boolean enable; | |
| 194 | + | |
| 195 | + @Schema(description = "打印模板", example = "<p></p>") | |
| 196 | + private String template; | |
| 197 | + | |
| 198 | + } | |
| 199 | + | |
| 183 | 200 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
| ... | ... | @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 9 | +import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | |
| 9 | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; |
| 10 | 11 | import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; |
| 11 | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| ... | ... | @@ -26,6 +27,7 @@ import jakarta.validation.Valid; |
| 26 | 27 | import org.flowable.engine.history.HistoricProcessInstance; |
| 27 | 28 | import org.flowable.engine.repository.ProcessDefinition; |
| 28 | 29 | import org.flowable.task.api.Task; |
| 30 | +import org.flowable.task.api.history.HistoricTaskInstance; | |
| 29 | 31 | import org.springframework.security.access.prepost.PreAuthorize; |
| 30 | 32 | import org.springframework.validation.annotation.Validated; |
| 31 | 33 | import org.springframework.web.bind.annotation.*; |
| ... | ... | @@ -34,9 +36,11 @@ import java.util.List; |
| 34 | 36 | import java.util.Map; |
| 35 | 37 | import java.util.Set; |
| 36 | 38 | |
| 39 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | |
| 37 | 40 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 38 | 41 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| 39 | 42 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| 43 | +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS; | |
| 40 | 44 | |
| 41 | 45 | @Tag(name = "管理后台 - 流程实例") // 流程实例,通过流程定义创建的一次“申请” |
| 42 | 46 | @RestController |
| ... | ... | @@ -192,8 +196,30 @@ public class BpmProcessInstanceController { |
| 192 | 196 | @GetMapping("/get-bpmn-model-view") |
| 193 | 197 | @Operation(summary = "获取流程实例的 BPMN 模型视图", description = "在【流程详细】界面中,进行调用") |
| 194 | 198 | @Parameter(name = "id", description = "流程实例的编号", required = true) |
| 195 | - public CommonResult<BpmProcessInstanceBpmnModelViewRespVO> getProcessInstanceBpmnModelView(@RequestParam(value = "id") String id) { | |
| 199 | + public CommonResult<BpmProcessInstanceBpmnModelViewRespVO> getProcessInstanceBpmnModelView( | |
| 200 | + @RequestParam(value = "id") String id) { | |
| 196 | 201 | return success(processInstanceService.getProcessInstanceBpmnModelView(id)); |
| 197 | 202 | } |
| 198 | 203 | |
| 204 | + @GetMapping("/get-print-data") | |
| 205 | + @Operation(summary = "获得流程实例的打印数据") | |
| 206 | + @Parameter(name = "id", description = "流程实例的编号", required = true) | |
| 207 | + @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") | |
| 208 | + public CommonResult<BpmProcessPrintDataRespVO> getProcessInstancePrintData( | |
| 209 | + @RequestParam("processInstanceId") String processInstanceId) { | |
| 210 | + HistoricProcessInstance historicProcessInstance = processInstanceService.getHistoricProcessInstance(processInstanceId); | |
| 211 | + if (historicProcessInstance == null) { | |
| 212 | + throw exception(PROCESS_INSTANCE_NOT_EXISTS); | |
| 213 | + } | |
| 214 | + AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(historicProcessInstance.getStartUserId())); | |
| 215 | + DeptRespDTO dept = deptApi.getDept(startUser.getDeptId()); | |
| 216 | + List<HistoricTaskInstance> tasks = taskService.getFinishedTaskListByProcessInstanceIdWithoutCancel(processInstanceId); | |
| 217 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | |
| 218 | + convertSet(tasks, item -> Long.valueOf(item.getAssignee()))); | |
| 219 | + return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePrintData(historicProcessInstance, | |
| 220 | + processDefinitionService.getProcessDefinitionInfo(historicProcessInstance.getProcessDefinitionId()), | |
| 221 | + tasks, userMap, | |
| 222 | + new UserSimpleBaseVO().setNickname(startUser.getNickname()).setDeptName(dept.getName()))); | |
| 223 | + } | |
| 224 | + | |
| 199 | 225 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
| ... | ... | @@ -100,7 +100,7 @@ public class BpmTaskController { |
| 100 | 100 | |
| 101 | 101 | @GetMapping("manager-page") |
| 102 | 102 | @Operation(summary = "获取全部任务的分页", description = "用于【流程任务】菜单") |
| 103 | - @PreAuthorize("@ss.hasPermission('bpm:task:mananger-query')") | |
| 103 | + @PreAuthorize("@ss.hasPermission('bpm:task:manager-query')") | |
| 104 | 104 | public CommonResult<PageResult<BpmTaskRespVO>> getTaskManagerPage(@Valid BpmTaskPageReqVO pageVO) { |
| 105 | 105 | PageResult<HistoricTaskInstance> pageResult = taskService.getTaskPage(getLoginUserId(), pageVO); |
| 106 | 106 | if (CollUtil.isEmpty(pageResult.getList())) { | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import java.util.List; | |
| 7 | + | |
| 8 | +@Schema(description = "管理后台 - 流程实例的打印数据 Response VO") | |
| 9 | +@Data | |
| 10 | +public class BpmProcessPrintDataRespVO { | |
| 11 | + | |
| 12 | + @Schema(description = "流程实例数据") | |
| 13 | + private BpmProcessInstanceRespVO processInstance; | |
| 14 | + | |
| 15 | + @Schema(description = "是否开启自定义打印模板", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | |
| 16 | + private Boolean printTemplateEnable; | |
| 17 | + | |
| 18 | + @Schema(description = "自定义打印模板 HTML") | |
| 19 | + private String printTemplateHtml; | |
| 20 | + | |
| 21 | + @Schema(description = "审批任务列表") | |
| 22 | + private List<Task> tasks; | |
| 23 | + | |
| 24 | + @Schema(description = "流程任务") | |
| 25 | + @Data | |
| 26 | + public static class Task { | |
| 27 | + | |
| 28 | + @Schema(description = "流程任务的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | |
| 29 | + private String id; | |
| 30 | + | |
| 31 | + @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") | |
| 32 | + private String name; | |
| 33 | + | |
| 34 | + @Schema(description = "签名 URL", example = "https://www.iocoder.cn/sign.png") | |
| 35 | + private String signPicUrl; | |
| 36 | + | |
| 37 | + @Schema(description = "任务描述", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 38 | + private String description; // 该字段由后端拼接 | |
| 39 | + | |
| 40 | + } | |
| 41 | + | |
| 42 | +} | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.java
| ... | ... | @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.util.date.DateUtils; |
| 5 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 6 | +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; | |
| 5 | 7 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | 8 | import lombok.Data; |
| 7 | 9 | import org.springframework.format.annotation.DateTimeFormat; |
| ... | ... | @@ -21,6 +23,10 @@ public class BpmTaskPageReqVO extends PageParam { |
| 21 | 23 | @Schema(description = "流程定义的标识", example = "2048") |
| 22 | 24 | private String processDefinitionKey; // 精准匹配 |
| 23 | 25 | |
| 26 | + @Schema(description = "审批状态", example = "1") | |
| 27 | + @InEnum(BpmTaskStatusEnum.class) | |
| 28 | + private Integer status; // 仅【已办】使用 | |
| 29 | + | |
| 24 | 30 | @Schema(description = "创建时间") |
| 25 | 31 | @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 26 | 32 | private LocalDateTime[] createTime; | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.convert.task; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.date.DateUtil; | |
| 4 | 5 | import cn.hutool.core.util.StrUtil; |
| 5 | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | 7 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 7 | 8 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; |
| 9 | +import cn.iocoder.yudao.framework.common.util.date.DateUtils; | |
| 8 | 10 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 9 | 11 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 10 | 12 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 13 | +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelMetaInfoVO; | |
| 11 | 14 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
| 12 | 15 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; |
| 13 | 16 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO; |
| 14 | 17 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceBpmnModelViewRespVO; |
| 15 | 18 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; |
| 19 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessPrintDataRespVO; | |
| 16 | 20 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; |
| 17 | 21 | import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert; |
| 18 | 22 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| 19 | 23 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| 20 | 24 | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent; |
| 25 | +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; | |
| 26 | +import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; | |
| 21 | 27 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; |
| 22 | 28 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; |
| 23 | 29 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; |
| ... | ... | @@ -35,10 +41,7 @@ import org.mapstruct.Mapping; |
| 35 | 41 | import org.mapstruct.MappingTarget; |
| 36 | 42 | import org.mapstruct.factory.Mappers; |
| 37 | 43 | |
| 38 | -import java.util.HashSet; | |
| 39 | -import java.util.List; | |
| 40 | -import java.util.Map; | |
| 41 | -import java.util.Set; | |
| 44 | +import java.util.*; | |
| 42 | 45 | |
| 43 | 46 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| 44 | 47 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| ... | ... | @@ -293,4 +296,47 @@ public interface BpmProcessInstanceConvert { |
| 293 | 296 | .setActivityNodes(activityNodes); |
| 294 | 297 | } |
| 295 | 298 | |
| 299 | + default BpmProcessPrintDataRespVO buildProcessInstancePrintData(HistoricProcessInstance historicProcessInstance, | |
| 300 | + BpmProcessDefinitionInfoDO processDefinitionInfo, | |
| 301 | + List<HistoricTaskInstance> tasks, | |
| 302 | + Map<Long, AdminUserRespDTO> userMap, | |
| 303 | + UserSimpleBaseVO startUser) { | |
| 304 | + BpmModelMetaInfoVO.PrintTemplateSetting printTemplateSetting = processDefinitionInfo.getPrintTemplateSetting(); | |
| 305 | + BpmProcessPrintDataRespVO printData = new BpmProcessPrintDataRespVO(); | |
| 306 | + // 打印模板是否开启 | |
| 307 | + printData.setPrintTemplateEnable(printTemplateSetting != null && Boolean.TRUE.equals(printTemplateSetting.getEnable())); | |
| 308 | + // 流程相关数据 | |
| 309 | + BpmProcessInstanceRespVO processInstance = new BpmProcessInstanceRespVO() | |
| 310 | + .setId(historicProcessInstance.getId()).setName(historicProcessInstance.getName()) | |
| 311 | + .setBusinessKey(historicProcessInstance.getBusinessKey()) | |
| 312 | + .setStartTime(DateUtils.of(historicProcessInstance.getStartTime())) | |
| 313 | + .setEndTime(DateUtils.of(historicProcessInstance.getEndTime())) | |
| 314 | + .setStartUser(startUser).setStatus(FlowableUtils.getProcessInstanceStatus(historicProcessInstance)) | |
| 315 | + .setFormVariables(historicProcessInstance.getProcessVariables()) | |
| 316 | + .setProcessDefinition(BeanUtils.toBean(processDefinitionInfo, BpmProcessDefinitionRespVO.class)); | |
| 317 | + printData.setProcessInstance(processInstance); | |
| 318 | + // 审批历史 | |
| 319 | + List<BpmProcessPrintDataRespVO.Task> approveTasks = new ArrayList<>(tasks.size()); | |
| 320 | + tasks.forEach(item -> { | |
| 321 | + Map<String, Object> taskLocalVariables = item.getTaskLocalVariables(); | |
| 322 | + BpmProcessPrintDataRespVO.Task approveTask = new BpmProcessPrintDataRespVO.Task(); | |
| 323 | + approveTask.setName(item.getName()); | |
| 324 | + approveTask.setId(item.getId()); | |
| 325 | + approveTask.setSignPicUrl((String) taskLocalVariables.get(BpmnVariableConstants.TASK_SIGN_PIC_URL)); | |
| 326 | + approveTask.setDescription(StrUtil.format("{} / {} / {} / {} / {}", | |
| 327 | + userMap.get(Long.valueOf(item.getAssignee())).getNickname(), | |
| 328 | + item.getName(), | |
| 329 | + DateUtil.formatDateTime(item.getEndTime()), | |
| 330 | + BpmTaskStatusEnum.valueOf((Integer) taskLocalVariables.get(BpmnVariableConstants.TASK_VARIABLE_STATUS)).getName(), | |
| 331 | + taskLocalVariables.get(BpmnVariableConstants.TASK_VARIABLE_REASON))); | |
| 332 | + approveTasks.add(approveTask); | |
| 333 | + }); | |
| 334 | + printData.setTasks(approveTasks); | |
| 335 | + // 自定义模板 | |
| 336 | + if (printData.getPrintTemplateEnable() && printTemplateSetting != null) { | |
| 337 | + printData.setPrintTemplateHtml(printTemplateSetting.getTemplate()); | |
| 338 | + } | |
| 339 | + return printData; | |
| 340 | + } | |
| 341 | + | |
| 296 | 342 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java
| ... | ... | @@ -224,4 +224,10 @@ public class BpmProcessDefinitionInfoDO extends BaseDO { |
| 224 | 224 | @TableField(typeHandler = JacksonTypeHandler.class) |
| 225 | 225 | private BpmModelMetaInfoVO.HttpRequestSetting taskAfterTriggerSetting; |
| 226 | 226 | |
| 227 | + /** | |
| 228 | + * 自定义打印模板设置 | |
| 229 | + */ | |
| 230 | + @TableField(typeHandler = JacksonTypeHandler.class) | |
| 231 | + private BpmModelMetaInfoVO.PrintTemplateSetting printTemplateSetting; | |
| 232 | + | |
| 227 | 233 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
| ... | ... | @@ -63,7 +63,7 @@ public interface ErrorCodeConstants { |
| 63 | 63 | ErrorCode TASK_WITHDRAW_FAIL_PROCESS_NOT_RUNNING = new ErrorCode(1_009_005_017, "撤回失败,流程实例未运行!"); |
| 64 | 64 | ErrorCode TASK_WITHDRAW_FAIL_TASK_NOT_EXISTS = new ErrorCode(1_009_005_018, "撤回失败,未查询到用户已办任务!"); |
| 65 | 65 | ErrorCode TASK_WITHDRAW_FAIL_NOT_ALLOW = new ErrorCode(1_009_005_019, "撤回失败,此流程不允许撤回操作!"); |
| 66 | - ErrorCode TASK_WITHDRAW_FAIL_NEXT_TASK_NOT_ALLOW = new ErrorCode(1_009_005_019, "撤回失败,下一节点不满足撤回条件!"); | |
| 66 | + ErrorCode TASK_WITHDRAW_FAIL_NEXT_TASK_NOT_ALLOW = new ErrorCode(1_009_005_020, "撤回失败,下一节点不满足撤回条件!"); | |
| 67 | 67 | |
| 68 | 68 | // ========== 动态表单模块 1-009-010-000 ========== |
| 69 | 69 | ErrorCode FORM_NOT_EXISTS = new ErrorCode(1_009_010_000, "动态表单不存在"); | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.enums.task; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ArrayUtil; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.core.ArrayValuable; |
| 4 | 5 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 5 | 6 | import lombok.AllArgsConstructor; |
| ... | ... | @@ -47,4 +48,8 @@ public enum BpmProcessInstanceStatusEnum implements ArrayValuable<Integer> { |
| 47 | 48 | APPROVE.getStatus(), REJECT.getStatus(), CANCEL.getStatus()); |
| 48 | 49 | } |
| 49 | 50 | |
| 51 | + public static BpmProcessInstanceStatusEnum valueOf(Integer status) { | |
| 52 | + return ArrayUtil.firstMatch(item -> item.getStatus().equals(status), values()); | |
| 53 | + } | |
| 54 | + | |
| 50 | 55 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskStatusEnum.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.enums.task; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ArrayUtil; | |
| 3 | 4 | import cn.hutool.core.util.ObjUtil; |
| 5 | +import cn.iocoder.yudao.framework.common.core.ArrayValuable; | |
| 4 | 6 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 5 | 7 | import lombok.AllArgsConstructor; |
| 6 | 8 | import lombok.Getter; |
| 7 | 9 | |
| 10 | +import java.util.Arrays; | |
| 11 | + | |
| 8 | 12 | /** |
| 9 | 13 | * 流程任务 Task 的状态枚举 |
| 10 | 14 | * |
| ... | ... | @@ -12,7 +16,7 @@ import lombok.Getter; |
| 12 | 16 | */ |
| 13 | 17 | @Getter |
| 14 | 18 | @AllArgsConstructor |
| 15 | -public enum BpmTaskStatusEnum { | |
| 19 | +public enum BpmTaskStatusEnum implements ArrayValuable<Integer> { | |
| 16 | 20 | |
| 17 | 21 | SKIP(-2, "跳过"), |
| 18 | 22 | NOT_START(-1, "未开始"), |
| ... | ... | @@ -35,6 +39,8 @@ public enum BpmTaskStatusEnum { |
| 35 | 39 | */ |
| 36 | 40 | WAIT(0, "待审批"); |
| 37 | 41 | |
| 42 | + public static final Integer[] ARRAYS = Arrays.stream(values()).map(BpmTaskStatusEnum::getStatus).toArray(Integer[]::new); | |
| 43 | + | |
| 38 | 44 | /** |
| 39 | 45 | * 状态 |
| 40 | 46 | * <p> |
| ... | ... | @@ -46,6 +52,11 @@ public enum BpmTaskStatusEnum { |
| 46 | 52 | */ |
| 47 | 53 | private final String name; |
| 48 | 54 | |
| 55 | + @Override | |
| 56 | + public Integer[] array() { | |
| 57 | + return ARRAYS; | |
| 58 | + } | |
| 59 | + | |
| 49 | 60 | public static boolean isRejectStatus(Integer status) { |
| 50 | 61 | return REJECT.getStatus().equals(status); |
| 51 | 62 | } |
| ... | ... | @@ -68,4 +79,8 @@ public enum BpmTaskStatusEnum { |
| 68 | 79 | return ObjUtil.equal(status, CANCEL.getStatus()); |
| 69 | 80 | } |
| 70 | 81 | |
| 82 | + public static BpmTaskStatusEnum valueOf(Integer status) { | |
| 83 | + return ArrayUtil.firstMatch(item -> item.getStatus().equals(status), values()); | |
| 84 | + } | |
| 85 | + | |
| 71 | 86 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java
| ... | ... | @@ -34,6 +34,12 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav |
| 34 | 34 | public BpmParallelMultiInstanceBehavior(Activity activity, |
| 35 | 35 | AbstractBpmnActivityBehavior innerActivityBehavior) { |
| 36 | 36 | super(activity, innerActivityBehavior); |
| 37 | + // 关联 Pull Request:https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1483 | |
| 38 | + // 在解析/构造阶段基于 activityId 初始化与 activity 绑定且不变的字段,避免在运行期修改 Behavior 实例状态 | |
| 39 | + super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的 | |
| 40 | + super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(activity.getId()); | |
| 41 | + // 从 execution.getVariable() 读取当前所有任务处理的人的 key | |
| 42 | + super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(activity.getId()); | |
| 37 | 43 | } |
| 38 | 44 | |
| 39 | 45 | /** | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java
| ... | ... | @@ -30,6 +30,12 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB |
| 30 | 30 | |
| 31 | 31 | public BpmSequentialMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior innerActivityBehavior) { |
| 32 | 32 | super(activity, innerActivityBehavior); |
| 33 | + // 关联 Pull Request:https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1483 | |
| 34 | + // 在解析/构造阶段基于 activityId 初始化与 activity 绑定且不变的字段,避免在运行期修改 Behavior 实例状态 | |
| 35 | + super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的 | |
| 36 | + super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(activity.getId()); | |
| 37 | + // 从 execution.getVariable() 读取当前所有任务处理的人的 key | |
| 38 | + super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(activity.getId()); | |
| 33 | 39 | } |
| 34 | 40 | |
| 35 | 41 | /** |
| ... | ... | @@ -88,10 +94,6 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB |
| 88 | 94 | super.executeOriginalBehavior(execution, multiInstanceRootExecution, loopCounter); |
| 89 | 95 | return; |
| 90 | 96 | } |
| 91 | - // 参见 https://gitee.com/zhijiantianya/yudao-cloud/issues/IC239F | |
| 92 | - super.collectionExpression = null; | |
| 93 | - super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId()); | |
| 94 | - super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); | |
| 95 | 97 | super.executeOriginalBehavior(execution, multiInstanceRootExecution, loopCounter); |
| 96 | 98 | } |
| 97 | 99 | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateInvoker.java
| ... | ... | @@ -125,6 +125,7 @@ public class BpmTaskCandidateInvoker { |
| 125 | 125 | }); |
| 126 | 126 | } |
| 127 | 127 | |
| 128 | + @DataPermission(enable = false) // 忽略数据权限,避免因为过滤,导致找不到候选人 | |
| 128 | 129 | public Set<Long> calculateUsersByActivity(BpmnModel bpmnModel, String activityId, |
| 129 | 130 | Long startUserId, String processDefinitionId, Map<String, Object> processVariables) { |
| 130 | 131 | // 如果是 CallActivity 子流程,不进行计算候选人 | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java
| ... | ... | @@ -43,14 +43,23 @@ public class BpmnVariableConstants { |
| 43 | 43 | * @see ProcessInstance#getProcessVariables() |
| 44 | 44 | */ |
| 45 | 45 | public static final String PROCESS_INSTANCE_VARIABLE_START_USER_ID = "PROCESS_START_USER_ID"; |
| 46 | + | |
| 46 | 47 | /** |
| 47 | - * 流程实例的变量 - 用于判断流程实例变量节点是否驳回. 格式 RETURN_FLAG_{节点 id} | |
| 48 | + * 流程实例的变量 - 用于判断流程实例变量节点是否驳回:格式 RETURN_FLAG_{节点 id} | |
| 48 | 49 | * |
| 49 | - * 目的是:驳回到发起节点时,因为审批人与发起人相同,所以被自动通过。但是,此时还是希望不要自动通过 | |
| 50 | + * 目的是:退回到发起节点时,因为审批人与发起人相同,所以被自动通过。但是,此时还是希望不要自动通过 | |
| 50 | 51 | * |
| 51 | 52 | * @see ProcessInstance#getProcessVariables() |
| 52 | 53 | */ |
| 53 | 54 | public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s"; |
| 55 | + | |
| 56 | + /** | |
| 57 | + * 流程实例的变量 - 用于退回操作,记录需要预测的节点 ids, 变量值类型为 Set | |
| 58 | + * | |
| 59 | + * 目的是:退回操作,预测节点会不准,在流程变量中记录需要预测的节点,来辅助预测 | |
| 60 | + */ | |
| 61 | + public static final String PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS = "NEED_SIMULATE_TASK_IDS"; | |
| 62 | + | |
| 54 | 63 | /** |
| 55 | 64 | * 流程实例的变量 - 是否跳过表达式 |
| 56 | 65 | * | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmCopyTaskDelegate.java
| ... | ... | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.listener; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; |
| 5 | +import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; | |
| 5 | 6 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceCopyService; |
| 6 | 7 | import jakarta.annotation.Resource; |
| 7 | 8 | import org.flowable.bpmn.model.FlowElement; |
| ... | ... | @@ -40,8 +41,9 @@ public class BpmCopyTaskDelegate implements JavaDelegate { |
| 40 | 41 | } |
| 41 | 42 | // 2. 执行抄送 |
| 42 | 43 | FlowElement currentFlowElement = execution.getCurrentFlowElement(); |
| 43 | - processInstanceCopyService.createProcessInstanceCopy(userIds, null, execution.getProcessInstanceId(), | |
| 44 | - currentFlowElement.getId(), currentFlowElement.getName(), null); | |
| 44 | + FlowableUtils.execute(execution.getTenantId(), () -> | |
| 45 | + processInstanceCopyService.createProcessInstanceCopy(userIds, null, execution.getProcessInstanceId(), | |
| 46 | + currentFlowElement.getId(), currentFlowElement.getName(), null)); | |
| 45 | 47 | } |
| 46 | 48 | |
| 47 | 49 | } | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| ... | ... | @@ -18,11 +18,11 @@ import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConsta |
| 18 | 18 | import com.google.common.collect.Maps; |
| 19 | 19 | import lombok.extern.slf4j.Slf4j; |
| 20 | 20 | import org.flowable.bpmn.converter.BpmnXMLConverter; |
| 21 | -import org.flowable.bpmn.model.Process; | |
| 22 | 21 | import org.flowable.bpmn.model.*; |
| 22 | +import org.flowable.bpmn.model.Process; | |
| 23 | 23 | import org.flowable.common.engine.api.FlowableException; |
| 24 | +import org.flowable.common.engine.api.delegate.Expression; | |
| 24 | 25 | import org.flowable.common.engine.impl.util.io.BytesStreamSource; |
| 25 | -import org.flowable.engine.impl.el.FixedValue; | |
| 26 | 26 | |
| 27 | 27 | import java.util.*; |
| 28 | 28 | |
| ... | ... | @@ -406,7 +406,7 @@ public class BpmnModelUtils { |
| 406 | 406 | flowableListener.getFieldExtensions().add(fieldExtension); |
| 407 | 407 | } |
| 408 | 408 | |
| 409 | - public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(FixedValue fixedValue) { | |
| 409 | + public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(Expression fixedValue) { | |
| 410 | 410 | String expressionText = fixedValue.getExpressionText(); |
| 411 | 411 | Assert.notNull(expressionText, "监听器扩展字段({})不能为空", expressionText); |
| 412 | 412 | return JsonUtils.parseObject(expressionText, BpmSimpleModelNodeVO.ListenerHandler.class); |
| ... | ... | @@ -658,10 +658,11 @@ public class BpmnModelUtils { |
| 658 | 658 | |
| 659 | 659 | // 根据类型,获取入口连线 |
| 660 | 660 | List<SequenceFlow> sequenceFlows = getElementIncomingFlows(source); |
| 661 | + // 1. 没有入口连线,则返回 false | |
| 661 | 662 | if (CollUtil.isEmpty(sequenceFlows)) { |
| 662 | - return true; | |
| 663 | + return false; | |
| 663 | 664 | } |
| 664 | - // 循环找到目标元素 | |
| 665 | + // 2. 循环找目标元素, 找到目标节点 | |
| 665 | 666 | for (SequenceFlow sequenceFlow : sequenceFlows) { |
| 666 | 667 | // 如果发现连线重复,说明循环了,跳过这个循环 |
| 667 | 668 | if (visitedElements.contains(sequenceFlow.getId())) { |
| ... | ... | @@ -669,21 +670,22 @@ public class BpmnModelUtils { |
| 669 | 670 | } |
| 670 | 671 | // 添加已经走过的连线 |
| 671 | 672 | visitedElements.add(sequenceFlow.getId()); |
| 672 | - // 这条线路存在目标节点,这条线路完成,进入下个线路 | |
| 673 | + // 这条线路存在目标节点,直接返回 true | |
| 673 | 674 | FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement(); |
| 674 | 675 | if (target.getId().equals(sourceFlowElement.getId())) { |
| 675 | - continue; | |
| 676 | + return true; | |
| 676 | 677 | } |
| 677 | - // 如果目标节点为并行网关,则不继续 | |
| 678 | + // 如果目标节点为并行网关,跳过这个循环 (TODO 疑问:这个判断作用是防止回退到并行网关分支上的节点吗?) | |
| 678 | 679 | if (sourceFlowElement instanceof ParallelGateway) { |
| 679 | - return false; | |
| 680 | + continue; | |
| 680 | 681 | } |
| 681 | - // 否则就继续迭代 | |
| 682 | - if (!isSequentialReachable(sourceFlowElement, target, visitedElements)) { | |
| 683 | - return false; | |
| 682 | + // 继续迭代,如果找到目标节点直接返回 true | |
| 683 | + if (isSequentialReachable(sourceFlowElement, target, visitedElements)) { | |
| 684 | + return true; | |
| 684 | 685 | } |
| 685 | 686 | } |
| 686 | - return true; | |
| 687 | + // 未找到返回 false | |
| 688 | + return false; | |
| 687 | 689 | } |
| 688 | 690 | |
| 689 | 691 | /** |
| ... | ... | @@ -783,7 +785,6 @@ public class BpmnModelUtils { |
| 783 | 785 | return resultElements; |
| 784 | 786 | } |
| 785 | 787 | |
| 786 | - @SuppressWarnings("PatternVariableCanBeUsed") | |
| 787 | 788 | private static void simulateNextFlowElements(FlowElement currentElement, Map<String, Object> variables, |
| 788 | 789 | List<FlowElement> resultElements, Set<FlowElement> visitElements) { |
| 789 | 790 | // 如果为空,或者已经遍历过,则直接结束 | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java
| ... | ... | @@ -54,7 +54,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy |
| 54 | 54 | } |
| 55 | 55 | // 执行抄送 |
| 56 | 56 | createProcessInstanceCopy(userIds, reason, |
| 57 | - task.getProcessInstanceId(), task.getTaskDefinitionKey(), task.getId(), task.getName()); | |
| 57 | + task.getProcessInstanceId(), task.getTaskDefinitionKey(), task.getName(), task.getId()); | |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | @Override | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
| ... | ... | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.service.task; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.collection.ListUtil; |
| 5 | +import cn.hutool.core.convert.Convert; | |
| 5 | 6 | import cn.hutool.core.date.DateUtil; |
| 6 | 7 | import cn.hutool.core.lang.Assert; |
| 7 | 8 | import cn.hutool.core.util.*; |
| ... | ... | @@ -11,6 +12,7 @@ import cn.iocoder.yudao.framework.common.util.date.DateUtils; |
| 11 | 12 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 12 | 13 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 13 | 14 | import cn.iocoder.yudao.framework.common.util.object.PageUtils; |
| 15 | +import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; | |
| 14 | 16 | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| 15 | 17 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelMetaInfoVO; |
| 16 | 18 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
| ... | ... | @@ -70,7 +72,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU |
| 70 | 72 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| 71 | 73 | import static cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO.ActivityNode; |
| 72 | 74 | import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; |
| 73 | -import static cn.iocoder.yudao.module.bpm.enums.task.BpmReasonEnum.REJECT_CHILD_PROCESS; | |
| 74 | 75 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.START_USER_NODE_ID; |
| 75 | 76 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.parseNodeType; |
| 76 | 77 | import static java.util.Arrays.asList; |
| ... | ... | @@ -187,6 +188,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 187 | 188 | if (CollUtil.isNotEmpty(reqVO.getProcessVariables())) { |
| 188 | 189 | processVariables.putAll(reqVO.getProcessVariables()); |
| 189 | 190 | } |
| 191 | + // 特殊:如果是未发起的场景,则设置发起用户,解决“发起流程”时,需要使用到该变量的问题。例如说:https://t.zsxq.com/fMw5g | |
| 192 | + if (historicProcessInstance == null) { | |
| 193 | + processVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_ID, loginUserId); | |
| 194 | + } | |
| 190 | 195 | // 1.3 读取其它相关数据 |
| 191 | 196 | ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition( |
| 192 | 197 | historicProcessInstance != null ? historicProcessInstance.getProcessDefinitionId() |
| ... | ... | @@ -218,10 +223,22 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 218 | 223 | |
| 219 | 224 | // 3.1 计算当前登录用户的待办任务 |
| 220 | 225 | BpmTaskRespVO todoTask = taskService.getTodoTask(loginUserId, reqVO.getTaskId(), reqVO.getProcessInstanceId()); |
| 221 | - // 3.2 预测未运行节点的审批信息 | |
| 226 | + | |
| 227 | + // 3.2 获取由于退回操作,需要预测的节点。从流程变量中获取,回退操作会设置这些变量 | |
| 228 | + Set<String> needSimulateTaskDefKeysByReturn = new HashSet<>(); | |
| 229 | + if (StrUtil.isNotEmpty(reqVO.getProcessInstanceId())) { | |
| 230 | + Object needSimulateTaskIds = runtimeService.getVariable(reqVO.getProcessInstanceId(), BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS); | |
| 231 | + needSimulateTaskDefKeysByReturn.addAll(Convert.toSet(String.class, needSimulateTaskIds)); | |
| 232 | + } | |
| 233 | + // 移除运行中的节点,运行中的节点无需预测 | |
| 234 | + if (CollUtil.isNotEmpty(runActivityNodes)) { | |
| 235 | + runActivityNodes.forEach( activityNode -> needSimulateTaskDefKeysByReturn.remove(activityNode.getId())); | |
| 236 | + } | |
| 237 | + | |
| 238 | + // 3.3 预测未运行节点的审批信息 | |
| 222 | 239 | List<ActivityNode> simulateActivityNodes = getSimulateApproveNodeList(startUserId, bpmnModel, |
| 223 | 240 | processDefinitionInfo, |
| 224 | - processVariables, activities); | |
| 241 | + processVariables, activities, needSimulateTaskDefKeysByReturn); | |
| 225 | 242 | |
| 226 | 243 | // 4. 拼接最终数据 |
| 227 | 244 | return buildApprovalDetail(reqVO, bpmnModel, processDefinition, processDefinitionInfo, historicProcessInstance, |
| ... | ... | @@ -461,7 +478,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 461 | 478 | } |
| 462 | 479 | |
| 463 | 480 | /** |
| 464 | - * 获取结束节点的状态 | |
| 481 | + * 获取结束节点的状态 | |
| 465 | 482 | */ |
| 466 | 483 | private Integer getEndActivityNodeStatus(HistoricTaskInstance task) { |
| 467 | 484 | Integer status = FlowableUtils.getTaskStatus(task); |
| ... | ... | @@ -546,7 +563,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 546 | 563 | private List<ActivityNode> getSimulateApproveNodeList(Long startUserId, BpmnModel bpmnModel, |
| 547 | 564 | BpmProcessDefinitionInfoDO processDefinitionInfo, |
| 548 | 565 | Map<String, Object> processVariables, |
| 549 | - List<HistoricActivityInstance> activities) { | |
| 566 | + List<HistoricActivityInstance> activities, | |
| 567 | + Set<String> needSimulateTaskDefKeysByReturn) { | |
| 550 | 568 | // TODO @芋艿:【可优化】在驳回场景下,未来的预测准确性不高。原因是,驳回后,HistoricActivityInstance |
| 551 | 569 | // 包括了历史的操作,不是只有 startEvent 到当前节点的记录 |
| 552 | 570 | Set<String> runActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId); |
| ... | ... | @@ -555,7 +573,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 555 | 573 | List<FlowElement> flowElements = BpmnModelUtils.simulateProcess(bpmnModel, processVariables); |
| 556 | 574 | return convertList(flowElements, flowElement -> buildNotRunApproveNodeForBpmn( |
| 557 | 575 | startUserId, bpmnModel, flowElements, |
| 558 | - processDefinitionInfo, processVariables, flowElement, runActivityIds)); | |
| 576 | + processDefinitionInfo, processVariables, flowElement, runActivityIds, needSimulateTaskDefKeysByReturn)); | |
| 559 | 577 | } |
| 560 | 578 | // 情况二:SIMPLE 设计器 |
| 561 | 579 | if (Objects.equals(BpmModelTypeEnum.SIMPLE.getType(), processDefinitionInfo.getModelType())) { |
| ... | ... | @@ -564,17 +582,19 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 564 | 582 | List<BpmSimpleModelNodeVO> simpleNodes = SimpleModelUtils.simulateProcess(simpleModel, processVariables); |
| 565 | 583 | return convertList(simpleNodes, simpleNode -> buildNotRunApproveNodeForSimple( |
| 566 | 584 | startUserId, bpmnModel, |
| 567 | - processDefinitionInfo, processVariables, simpleNode, runActivityIds)); | |
| 585 | + processDefinitionInfo, processVariables, simpleNode, runActivityIds, needSimulateTaskDefKeysByReturn)); | |
| 568 | 586 | } |
| 569 | 587 | throw new IllegalArgumentException("未知设计器类型:" + processDefinitionInfo.getModelType()); |
| 570 | 588 | } |
| 571 | 589 | |
| 572 | 590 | private ActivityNode buildNotRunApproveNodeForSimple(Long startUserId, BpmnModel bpmnModel, |
| 573 | 591 | BpmProcessDefinitionInfoDO processDefinitionInfo, Map<String, Object> processVariables, |
| 574 | - BpmSimpleModelNodeVO node, Set<String> runActivityIds) { | |
| 592 | + BpmSimpleModelNodeVO node, Set<String> runActivityIds, | |
| 593 | + Set<String> needSimulateTaskDefKeysByReturn) { | |
| 575 | 594 | // TODO @芋艿:【可优化】在驳回场景下,未来的预测准确性不高。原因是,驳回后,HistoricActivityInstance |
| 576 | 595 | // 包括了历史的操作,不是只有 startEvent 到当前节点的记录 |
| 577 | - if (runActivityIds.contains(node.getId())) { | |
| 596 | + if (runActivityIds.contains(node.getId()) | |
| 597 | + && !needSimulateTaskDefKeysByReturn.contains(node.getId())) { // 特殊:回退操作时候,会记录需要预测的节点到流程变量中。即使在历史操作中,也需要预测 | |
| 578 | 598 | return null; |
| 579 | 599 | } |
| 580 | 600 | Integer status = BpmTaskStatusEnum.NOT_START.getStatus(); |
| ... | ... | @@ -621,13 +641,16 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 621 | 641 | private ActivityNode buildNotRunApproveNodeForBpmn(Long startUserId, BpmnModel bpmnModel, List<FlowElement> flowElements, |
| 622 | 642 | BpmProcessDefinitionInfoDO processDefinitionInfo, |
| 623 | 643 | Map<String, Object> processVariables, |
| 624 | - FlowElement node, Set<String> runActivityIds) { | |
| 625 | - if (runActivityIds.contains(node.getId())) { | |
| 644 | + FlowElement node, Set<String> runActivityIds, | |
| 645 | + Set<String> needSimulateTaskDefKeysByReturn) { | |
| 646 | + // 回退操作时候,会记录需要预测的节点到流程变量中。即使节点在历史操作中,也需要预测。 | |
| 647 | + if (!needSimulateTaskDefKeysByReturn.contains(node.getId()) && runActivityIds.contains(node.getId())) { | |
| 626 | 648 | return null; |
| 627 | 649 | } |
| 650 | + | |
| 628 | 651 | Integer status = BpmTaskStatusEnum.NOT_START.getStatus(); |
| 629 | 652 | // 如果节点被跳过,状态设置为跳过 |
| 630 | - if(BpmnModelUtils.isSkipNode(node, processVariables)){ | |
| 653 | + if (BpmnModelUtils.isSkipNode(node, processVariables)) { | |
| 631 | 654 | status = BpmTaskStatusEnum.SKIP.getStatus(); |
| 632 | 655 | } |
| 633 | 656 | ActivityNode activityNode = new ActivityNode().setId(node.getId()) |
| ... | ... | @@ -730,6 +753,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 730 | 753 | |
| 731 | 754 | @Override |
| 732 | 755 | @Transactional(rollbackFor = Exception.class) |
| 756 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 733 | 757 | public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO) { |
| 734 | 758 | // 获得流程定义 |
| 735 | 759 | ProcessDefinition definition = processDefinitionService |
| ... | ... | @@ -740,6 +764,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 740 | 764 | } |
| 741 | 765 | |
| 742 | 766 | @Override |
| 767 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 743 | 768 | public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) { |
| 744 | 769 | return FlowableUtils.executeAuthenticatedUserId(userId, () -> { |
| 745 | 770 | // 获得流程定义 |
| ... | ... | @@ -856,6 +881,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 856 | 881 | } |
| 857 | 882 | |
| 858 | 883 | @Override |
| 884 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 859 | 885 | public void cancelProcessInstanceByStartUser(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO) { |
| 860 | 886 | // 1.1 校验流程实例存在 |
| 861 | 887 | ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); |
| ... | ... | @@ -885,6 +911,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 885 | 911 | } |
| 886 | 912 | |
| 887 | 913 | @Override |
| 914 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 888 | 915 | public void cancelProcessInstanceByAdmin(Long userId, BpmProcessInstanceCancelReqVO cancelReqVO) { |
| 889 | 916 | // 1.1 校验流程实例存在 |
| 890 | 917 | ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
| ... | ... | @@ -176,6 +176,14 @@ public interface BpmTaskService { |
| 176 | 176 | */ |
| 177 | 177 | List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId); |
| 178 | 178 | |
| 179 | + /** | |
| 180 | + * 获得指定流程实例的已完成的流程任务列表,不包含取消状态 | |
| 181 | + * | |
| 182 | + * @param processInstanceId 流程实例的编号 | |
| 183 | + * @return 流程任务列表 | |
| 184 | + */ | |
| 185 | + List<HistoricTaskInstance> getFinishedTaskListByProcessInstanceIdWithoutCancel(String processInstanceId); | |
| 186 | + | |
| 179 | 187 | // ========== Update 写入相关方法 ========== |
| 180 | 188 | |
| 181 | 189 | /** | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| ... | ... | @@ -6,6 +6,7 @@ import cn.hutool.core.lang.Assert; |
| 6 | 6 | import cn.hutool.core.util.*; |
| 7 | 7 | import cn.hutool.extra.spring.SpringUtil; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | |
| 9 | 10 | import cn.iocoder.yudao.framework.common.util.date.DateUtils; |
| 10 | 11 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 11 | 12 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| ... | ... | @@ -68,8 +69,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU |
| 68 | 69 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| 69 | 70 | import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; |
| 70 | 71 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.START_USER_NODE_ID; |
| 71 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG; | |
| 72 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE; | |
| 73 | 72 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.*; |
| 74 | 73 | |
| 75 | 74 | /** |
| ... | ... | @@ -230,6 +229,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 230 | 229 | if (StrUtil.isNotBlank(pageVO.getName())) { |
| 231 | 230 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); |
| 232 | 231 | } |
| 232 | + if (pageVO.getStatus() != null) { | |
| 233 | + taskQuery.taskVariableValueEquals(BpmnVariableConstants.TASK_VARIABLE_STATUS, pageVO.getStatus()); | |
| 234 | + } | |
| 233 | 235 | // if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) { |
| 234 | 236 | // taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0])); |
| 235 | 237 | // taskQuery.taskCreatedBefore(DateUtils.of(pageVO.getCreateTime()[1])); |
| ... | ... | @@ -374,6 +376,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 374 | 376 | } |
| 375 | 377 | // 2.2 过滤:只有串行可到达的节点,才可以退回。类似非串行、子流程无法退回 |
| 376 | 378 | previousUserList.removeIf(userTask -> !BpmnModelUtils.isSequentialReachable(source, userTask, null)); |
| 379 | + | |
| 380 | + // 2.3 过滤:只能退回到已经处理过的节点(排除审批未经过的节点)。相关 issue:https://github.com/YunaiV/ruoyi-vue-pro/issues/982 | |
| 381 | + List<HistoricTaskInstance> finishedTasks = getFinishedTaskListByProcessInstanceIdWithoutCancel(task.getProcessInstanceId()); | |
| 382 | + Set<String> finishedTaskDefinitionKeys = convertSet(finishedTasks, HistoricTaskInstance::getTaskDefinitionKey); | |
| 383 | + previousUserList.removeIf(userTask -> !finishedTaskDefinitionKeys.contains(userTask.getId())); | |
| 377 | 384 | return previousUserList; |
| 378 | 385 | } |
| 379 | 386 | |
| ... | ... | @@ -491,6 +498,17 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 491 | 498 | return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list(); |
| 492 | 499 | } |
| 493 | 500 | |
| 501 | + @Override | |
| 502 | + public List<HistoricTaskInstance> getFinishedTaskListByProcessInstanceIdWithoutCancel(String processInstanceId) { | |
| 503 | + return historyService.createHistoricTaskInstanceQuery() | |
| 504 | + .finished() | |
| 505 | + .includeTaskLocalVariables() | |
| 506 | + .processInstanceId(processInstanceId) | |
| 507 | + .taskVariableValueNotEquals(BpmnVariableConstants.TASK_VARIABLE_STATUS, | |
| 508 | + BpmTaskStatusEnum.CANCEL.getStatus()) | |
| 509 | + .orderByHistoricTaskInstanceStartTime().asc().list(); | |
| 510 | + } | |
| 511 | + | |
| 494 | 512 | /** |
| 495 | 513 | * 判断指定用户,是否是当前任务的审批人 |
| 496 | 514 | * |
| ... | ... | @@ -531,6 +549,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 531 | 549 | |
| 532 | 550 | @Override |
| 533 | 551 | @Transactional(rollbackFor = Exception.class) |
| 552 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 534 | 553 | public void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO) { |
| 535 | 554 | // 1.1 校验任务存在 |
| 536 | 555 | Task task = validateTask(userId, reqVO.getId()); |
| ... | ... | @@ -590,7 +609,15 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 590 | 609 | bpmnModel, reqVO.getNextAssignees(), instance); |
| 591 | 610 | runtimeService.setVariables(task.getProcessInstanceId(), variables); |
| 592 | 611 | |
| 593 | - // 5. 调用 BPM complete 去完成任务 | |
| 612 | + // 5. 如果当前节点 Id 存在于需要预测的流程节点中,从中移除。 流程变量在回退操作中设置 | |
| 613 | + Object needSimulateTaskIds = runtimeService.getVariable(task.getProcessInstanceId(), BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS); | |
| 614 | + Set<String> needSimulateTaskIdsByReturn = Convert.toSet(String.class, needSimulateTaskIds); | |
| 615 | + if (needSimulateTaskIdsByReturn.contains(task.getTaskDefinitionKey())) { | |
| 616 | + needSimulateTaskIdsByReturn.remove(task.getTaskDefinitionKey()); | |
| 617 | + runtimeService.setVariable(task.getProcessInstanceId(), BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS, needSimulateTaskIdsByReturn); | |
| 618 | + } | |
| 619 | + | |
| 620 | + // 6. 调用 BPM complete 去完成任务 | |
| 594 | 621 | taskService.complete(task.getId(), variables, true); |
| 595 | 622 | |
| 596 | 623 | // 【加签专属】处理加签任务 |
| ... | ... | @@ -767,6 +794,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 767 | 794 | |
| 768 | 795 | @Override |
| 769 | 796 | @Transactional(rollbackFor = Exception.class) |
| 797 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 770 | 798 | public void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO) { |
| 771 | 799 | // 1.1 校验任务存在 |
| 772 | 800 | Task task = validateTask(userId, reqVO.getId()); |
| ... | ... | @@ -834,40 +862,41 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 834 | 862 | |
| 835 | 863 | @Override |
| 836 | 864 | @Transactional(rollbackFor = Exception.class) |
| 865 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 837 | 866 | public void returnTask(Long userId, BpmTaskReturnReqVO reqVO) { |
| 838 | 867 | // 1.1 当前任务 task |
| 839 | 868 | Task task = validateTask(userId, reqVO.getId()); |
| 840 | 869 | if (task.isSuspended()) { |
| 841 | 870 | throw exception(TASK_IS_PENDING); |
| 842 | 871 | } |
| 843 | - // 1.2 校验源头和目标节点的关系,并返回目标元素 | |
| 844 | - FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), | |
| 845 | - reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); | |
| 872 | + // 1.2 获取流程模型信息 | |
| 873 | + BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(task.getProcessDefinitionId()); | |
| 874 | + // 1.3 校验源头和目标节点的关系,并返回目标元素 | |
| 875 | + FlowElement targetElement = validateTargetTaskCanReturn(bpmnModel, task.getTaskDefinitionKey(), | |
| 876 | + reqVO.getTargetTaskDefinitionKey()); | |
| 846 | 877 | |
| 847 | 878 | // 2. 调用 Flowable 框架的退回逻辑 |
| 848 | - returnTask(userId, task, targetElement, reqVO); | |
| 879 | + returnTask(userId, bpmnModel, task, targetElement, reqVO); | |
| 849 | 880 | } |
| 850 | 881 | |
| 851 | 882 | /** |
| 852 | 883 | * 退回流程节点时,校验目标任务节点是否可退回 |
| 853 | 884 | * |
| 854 | - * @param sourceKey 当前任务节点 Key | |
| 855 | - * @param targetKey 目标任务节点 key | |
| 856 | - * @param processDefinitionId 当前流程定义 ID | |
| 885 | + * @param bpmnModel 流程模型 | |
| 886 | + * @param sourceKey 当前任务节点 Key | |
| 887 | + * @param targetKey 目标任务节点 key | |
| 857 | 888 | * @return 目标任务节点元素 |
| 858 | 889 | */ |
| 859 | - private FlowElement validateTargetTaskCanReturn(String sourceKey, String targetKey, String processDefinitionId) { | |
| 860 | - // 1.1 获取流程模型信息 | |
| 861 | - BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(processDefinitionId); | |
| 862 | - // 1.3 获取当前任务节点元素 | |
| 890 | + private FlowElement validateTargetTaskCanReturn(BpmnModel bpmnModel, String sourceKey, String targetKey) { | |
| 891 | + // 1.1 获取当前任务节点元素 | |
| 863 | 892 | FlowElement source = BpmnModelUtils.getFlowElementById(bpmnModel, sourceKey); |
| 864 | - // 1.3 获取跳转的节点元素 | |
| 893 | + // 1.2 获取跳转的节点元素 | |
| 865 | 894 | FlowElement target = BpmnModelUtils.getFlowElementById(bpmnModel, targetKey); |
| 866 | 895 | if (target == null) { |
| 867 | 896 | throw exception(TASK_TARGET_NODE_NOT_EXISTS); |
| 868 | 897 | } |
| 869 | 898 | |
| 870 | - // 2.2 只有串行可到达的节点,才可以退回。类似非串行、子流程无法退回 | |
| 899 | + // 2. 只有串行可到达的节点,才可以退回。类似非串行、子流程无法退回 | |
| 871 | 900 | if (!BpmnModelUtils.isSequentialReachable(source, target, null)) { |
| 872 | 901 | throw exception(TASK_RETURN_FAIL_SOURCE_TARGET_ERROR); |
| 873 | 902 | } |
| ... | ... | @@ -878,11 +907,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 878 | 907 | * 执行退回逻辑 |
| 879 | 908 | * |
| 880 | 909 | * @param userId 用户编号 |
| 910 | + * @param bpmnModel 流程模型 | |
| 881 | 911 | * @param currentTask 当前退回的任务 |
| 882 | 912 | * @param targetElement 需要退回到的目标任务 |
| 883 | 913 | * @param reqVO 前端参数封装 |
| 884 | 914 | */ |
| 885 | - public void returnTask(Long userId, Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { | |
| 915 | + public void returnTask(Long userId, BpmnModel bpmnModel, Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { | |
| 886 | 916 | // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 |
| 887 | 917 | // 1.1 获取所有正常进行的任务节点 Key |
| 888 | 918 | List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); |
| ... | ... | @@ -892,16 +922,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 892 | 922 | List<UserTask> returnUserTaskList = BpmnModelUtils.iteratorFindChildUserTasks(targetElement, runTaskKeyList, null, null); |
| 893 | 923 | List<String> returnTaskKeyList = convertList(returnUserTaskList, UserTask::getId); |
| 894 | 924 | |
| 895 | - List<String> runExecutionIds = new ArrayList<>(); | |
| 896 | 925 | // 2. 给当前要被退回的 task 数组,设置退回意见 |
| 897 | 926 | taskList.forEach(task -> { |
| 898 | 927 | // 需要排除掉,不需要设置退回意见的任务 |
| 899 | 928 | if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { |
| 900 | 929 | return; |
| 901 | 930 | } |
| 902 | - if (task.getExecutionId() != null) { | |
| 903 | - runExecutionIds.add(task.getExecutionId()); | |
| 904 | - } | |
| 905 | 931 | |
| 906 | 932 | // 判断是否分配给自己任务,因为会签任务,一个节点会有多个任务 |
| 907 | 933 | if (isAssignUserTask(userId, task)) { // 情况一:自己的任务,进行 RETURN 标记 |
| ... | ... | @@ -915,20 +941,55 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 915 | 941 | } |
| 916 | 942 | }); |
| 917 | 943 | |
| 918 | - // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过 | |
| 919 | - runtimeService.setVariable(currentTask.getProcessInstanceId(), | |
| 920 | - String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); | |
| 944 | + // 3. 构建需要预测的任务流程变量 | |
| 945 | + Set<String> needSimulateTaskDefinitionKeys = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement); | |
| 946 | + | |
| 921 | 947 | // 4. 执行驳回 |
| 922 | - // 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId 原因: | |
| 923 | - // 当多实例任务回退的时候有问题。相关 issue: https://github.com/flowable/flowable-engine/issues/3944 | |
| 948 | + // ① 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId。原因:当多实例任务回退的时候有问题。 | |
| 949 | + // 相关 issue: https://github.com/flowable/flowable-engine/issues/3944 | |
| 950 | + // ② flowable 7.2.0 版本后,继续使用 moveActivityIdsToSingleActivityId 方法。原因:flowable 7.2.0 版本修复了该问题。 | |
| 951 | + // 相关 issue:https://github.com/YunaiV/ruoyi-vue-pro/issues/1018 | |
| 924 | 952 | runtimeService.createChangeActivityStateBuilder() |
| 925 | 953 | .processInstanceId(currentTask.getProcessInstanceId()) |
| 926 | - .moveExecutionsToSingleActivityId(runExecutionIds, reqVO.getTargetTaskDefinitionKey()) | |
| 954 | + .moveActivityIdsToSingleActivityId(returnTaskKeyList, reqVO.getTargetTaskDefinitionKey()) | |
| 955 | + // 设置需要预测的任务 ids 的流程变量,用于辅助预测 | |
| 956 | + .processVariable(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS, needSimulateTaskDefinitionKeys) | |
| 957 | + // 设置流程变量(local)节点退回标记, 用于退回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略,导致自动通过 | |
| 958 | + .localVariable(reqVO.getTargetTaskDefinitionKey(), | |
| 959 | + String.format(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE) | |
| 927 | 960 | .changeState(); |
| 928 | 961 | } |
| 929 | 962 | |
| 963 | + private Set<String> getNeedSimulateTaskDefinitionKeys(BpmnModel bpmnModel, Task currentTask, FlowElement targetElement) { | |
| 964 | + // 1. 获取需要预测的任务的 definition key。因为当前任务还没完成,也需要预测 | |
| 965 | + Set<String> taskDefinitionKeys = CollUtil.newHashSet(currentTask.getTaskDefinitionKey()); | |
| 966 | + | |
| 967 | + // 2.1 获取已结束任务按时间倒序排序 | |
| 968 | + List<HistoricTaskInstance> endTaskList = CollectionUtils.filterList( | |
| 969 | + getTaskListByProcessInstanceId(currentTask.getProcessInstanceId(), Boolean.FALSE), | |
| 970 | + item -> item.getEndTime() != null); | |
| 971 | + // 2.2 从结束任务中找到最近一个的目标任务 | |
| 972 | + HistoricTaskInstance targetTask = findFirst(endTaskList, | |
| 973 | + item -> item.getTaskDefinitionKey().equals(targetElement.getId())); | |
| 974 | + if (targetTask == null) { | |
| 975 | + return taskDefinitionKeys; | |
| 976 | + } | |
| 977 | + // 2.3 遍历已结束的任务,找到在 targetTask 之后生成的任务,且串行可达的任务 | |
| 978 | + endTaskList.forEach(item -> { | |
| 979 | + FlowElement element = getFlowElementById(bpmnModel, item.getTaskDefinitionKey()); | |
| 980 | + // 如果已结束的任务在回退目标节点之后生成,且串行可达,则加到需要预测节点中 | |
| 981 | + // TODO 串行可达的方法需要和判断可回退节点 validateTargetTaskCanReturn 分开吗? 并行网关可能会有问题。 | |
| 982 | + if (item.getCreateTime().compareTo(targetTask.getCreateTime()) > 0 | |
| 983 | + && BpmnModelUtils.isSequentialReachable(element, targetElement, null)) { | |
| 984 | + taskDefinitionKeys.add(item.getTaskDefinitionKey()); | |
| 985 | + } | |
| 986 | + }); | |
| 987 | + return taskDefinitionKeys; | |
| 988 | + } | |
| 989 | + | |
| 930 | 990 | @Override |
| 931 | 991 | @Transactional(rollbackFor = Exception.class) |
| 992 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 932 | 993 | public void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO) { |
| 933 | 994 | String taskId = reqVO.getId(); |
| 934 | 995 | // 1.1 校验任务 |
| ... | ... | @@ -958,6 +1019,8 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 958 | 1019 | } |
| 959 | 1020 | |
| 960 | 1021 | @Override |
| 1022 | + @Transactional(rollbackFor = Exception.class) | |
| 1023 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 961 | 1024 | public void transferTask(Long userId, BpmTaskTransferReqVO reqVO) { |
| 962 | 1025 | String taskId = reqVO.getId(); |
| 963 | 1026 | // 1.1 校验任务 |
| ... | ... | @@ -988,6 +1051,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 988 | 1051 | |
| 989 | 1052 | @Override |
| 990 | 1053 | @Transactional(rollbackFor = Exception.class) |
| 1054 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 991 | 1055 | public void moveTaskToEnd(String processInstanceId, String reason) { |
| 992 | 1056 | List<Task> taskList = getRunningTaskListByProcessInstanceId(processInstanceId, null, null); |
| 993 | 1057 | if (CollUtil.isEmpty(taskList)) { |
| ... | ... | @@ -1026,6 +1090,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 1026 | 1090 | |
| 1027 | 1091 | @Override |
| 1028 | 1092 | @Transactional(rollbackFor = Exception.class) |
| 1093 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 1029 | 1094 | public void createSignTask(Long userId, BpmTaskSignCreateReqVO reqVO) { |
| 1030 | 1095 | // 1. 获取和校验任务 |
| 1031 | 1096 | TaskEntityImpl taskEntity = validateTaskCanCreateSign(userId, reqVO); |
| ... | ... | @@ -1142,6 +1207,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 1142 | 1207 | |
| 1143 | 1208 | @Override |
| 1144 | 1209 | @Transactional(rollbackFor = Exception.class) |
| 1210 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 1145 | 1211 | @SuppressWarnings("DataFlowIssue") |
| 1146 | 1212 | public void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO) { |
| 1147 | 1213 | // 1.1 校验 task 可以被减签 |
| ... | ... | @@ -1181,6 +1247,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 1181 | 1247 | |
| 1182 | 1248 | @Override |
| 1183 | 1249 | @Transactional(rollbackFor = Exception.class) |
| 1250 | + @DataPermission(enable = false) // 关闭数据权限,避免查询不到用户数据。相关案例:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID1UYA | |
| 1184 | 1251 | public void withdrawTask(Long userId, String taskId) { |
| 1185 | 1252 | // 1.1 查询本人已办任务 |
| 1186 | 1253 | HistoricTaskInstance taskInstance = historyService.createHistoricTaskInstanceQuery() |
| ... | ... | @@ -1396,7 +1463,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 1396 | 1463 | return; |
| 1397 | 1464 | } |
| 1398 | 1465 | |
| 1399 | - // 自动去重,通过自动审批的方式 TODO @芋艿 驳回的情况得考虑一下;@lesan:驳回后,又自动审批么? | |
| 1466 | + // 自动去重,通过自动审批的方式 | |
| 1400 | 1467 | BpmProcessDefinitionInfoDO processDefinitionInfo = bpmProcessDefinitionService.getProcessDefinitionInfo(task.getProcessDefinitionId()); |
| 1401 | 1468 | if (processDefinitionInfo == null) { |
| 1402 | 1469 | log.error("[processTaskAssigned][taskId({}) 没有找到流程定义({})]", task.getId(), task.getProcessDefinitionId()); |
| ... | ... | @@ -1438,12 +1505,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 1438 | 1505 | return; |
| 1439 | 1506 | } |
| 1440 | 1507 | FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey()); |
| 1441 | - // 判断是否为退回或者驳回:如果是退回或者驳回不走这个策略 | |
| 1442 | - // TODO 芋艿:【优化】未来有没更好的判断方式?!另外,还要考虑清理机制。就是说,下次处理了之后,就移除这个标识 | |
| 1443 | - Boolean returnTaskFlag = runtimeService.getVariable(processInstance.getProcessInstanceId(), | |
| 1444 | - String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, task.getTaskDefinitionKey()), Boolean.class); | |
| 1508 | + // 判断是否为退回或者驳回:如果是退回或者驳回不走这个策略(使用 local variable) | |
| 1509 | + Boolean returnTaskFlag = runtimeService.getVariableLocal(task.getExecutionId(), | |
| 1510 | + String.format(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, task.getTaskDefinitionKey()), Boolean.class); | |
| 1445 | 1511 | Boolean skipStartUserNodeFlag = Convert.toBool(runtimeService.getVariable(processInstance.getProcessInstanceId(), |
| 1446 | - PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE, String.class)); | |
| 1512 | + BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE, String.class)); | |
| 1447 | 1513 | if (userTaskElement.getId().equals(START_USER_NODE_ID) |
| 1448 | 1514 | && (skipStartUserNodeFlag == null // 目的:一般是“主流程”,发起人节点,自动通过审核 |
| 1449 | 1515 | || BooleanUtil.isTrue(skipStartUserNodeFlag)) // 目的:一般是“子流程”,发起人节点,按配置自动通过审核 | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmCallActivityListener.java
| ... | ... | @@ -14,9 +14,9 @@ import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 14 | 14 | import jakarta.annotation.Resource; |
| 15 | 15 | import lombok.Setter; |
| 16 | 16 | import lombok.extern.slf4j.Slf4j; |
| 17 | +import org.flowable.common.engine.api.delegate.Expression; | |
| 17 | 18 | import org.flowable.engine.delegate.DelegateExecution; |
| 18 | 19 | import org.flowable.engine.delegate.ExecutionListener; |
| 19 | -import org.flowable.engine.impl.el.FixedValue; | |
| 20 | 20 | import org.flowable.engine.runtime.ProcessInstance; |
| 21 | 21 | import org.springframework.stereotype.Component; |
| 22 | 22 | |
| ... | ... | @@ -34,7 +34,7 @@ public class BpmCallActivityListener implements ExecutionListener { |
| 34 | 34 | public static final String DELEGATE_EXPRESSION = "${bpmCallActivityListener}"; |
| 35 | 35 | |
| 36 | 36 | @Setter |
| 37 | - private FixedValue listenerConfig; | |
| 37 | + private Expression listenerConfig; | |
| 38 | 38 | |
| 39 | 39 | @Resource |
| 40 | 40 | private BpmProcessDefinitionService processDefinitionService; | ... | ... |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java
| ... | ... | @@ -7,8 +7,8 @@ import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 7 | 7 | import jakarta.annotation.Resource; |
| 8 | 8 | import lombok.Setter; |
| 9 | 9 | import lombok.extern.slf4j.Slf4j; |
| 10 | +import org.flowable.common.engine.api.delegate.Expression; | |
| 10 | 11 | import org.flowable.engine.delegate.TaskListener; |
| 11 | -import org.flowable.engine.impl.el.FixedValue; | |
| 12 | 12 | import org.flowable.engine.runtime.ProcessInstance; |
| 13 | 13 | import org.flowable.task.service.delegate.DelegateTask; |
| 14 | 14 | import org.springframework.context.annotation.Scope; |
| ... | ... | @@ -33,7 +33,7 @@ public class BpmUserTaskListener implements TaskListener { |
| 33 | 33 | private BpmProcessInstanceService processInstanceService; |
| 34 | 34 | |
| 35 | 35 | @Setter |
| 36 | - private FixedValue listenerConfig; | |
| 36 | + private Expression listenerConfig; | |
| 37 | 37 | |
| 38 | 38 | @Override |
| 39 | 39 | public void notify(DelegateTask delegateTask) { | ... | ... |
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/plan/CrmReceivablePlanRespVO.java
| ... | ... | @@ -59,7 +59,6 @@ public class CrmReceivablePlanRespVO { |
| 59 | 59 | @ExcelProperty("回款编号") |
| 60 | 60 | private Long receivableId; |
| 61 | 61 | @Schema(description = "回款信息") |
| 62 | - @ExcelProperty("回款信息") | |
| 63 | 62 | private CrmReceivableRespVO receivable; |
| 64 | 63 | |
| 65 | 64 | @Schema(description = "提前几天提醒", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java
| ... | ... | @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.infra.service.file.FileService; |
| 13 | 13 | import io.swagger.v3.oas.annotations.Operation; |
| 14 | 14 | import io.swagger.v3.oas.annotations.Parameter; |
| 15 | 15 | import io.swagger.v3.oas.annotations.Parameters; |
| 16 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 16 | 17 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 17 | 18 | import jakarta.annotation.Resource; |
| 18 | 19 | import jakarta.annotation.security.PermitAll; |
| ... | ... | @@ -44,6 +45,8 @@ public class FileController { |
| 44 | 45 | |
| 45 | 46 | @PostMapping("/upload") |
| 46 | 47 | @Operation(summary = "上传文件", description = "模式一:后端上传文件") |
| 48 | + @Parameter(name = "file", description = "文件附件", required = true, | |
| 49 | + schema = @Schema(type = "string", format = "binary")) | |
| 47 | 50 | public CommonResult<String> uploadFile(@Valid FileUploadReqVO uploadReqVO) throws Exception { |
| 48 | 51 | MultipartFile file = uploadReqVO.getFile(); |
| 49 | 52 | byte[] content = IoUtil.readBytes(file.getInputStream()); |
| ... | ... | @@ -69,6 +72,14 @@ public class FileController { |
| 69 | 72 | return success(fileService.createFile(createReqVO)); |
| 70 | 73 | } |
| 71 | 74 | |
| 75 | + @GetMapping("/get") | |
| 76 | + @Operation(summary = "获得文件") | |
| 77 | + @Parameter(name = "id", description = "编号", required = true) | |
| 78 | + @PreAuthorize("@ss.hasPermission('infra:file:query')") | |
| 79 | + public CommonResult<FileRespVO> getFile(@RequestParam("id") Long id) { | |
| 80 | + return success(BeanUtils.toBean(fileService.getFile(id), FileRespVO.class)); | |
| 81 | + } | |
| 82 | + | |
| 72 | 83 | @DeleteMapping("/delete") |
| 73 | 84 | @Operation(summary = "删除文件") |
| 74 | 85 | @Parameter(name = "id", description = "编号", required = true) | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileCreateReqVO.java
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java
| ... | ... | @@ -28,7 +28,7 @@ public class FileRespVO { |
| 28 | 28 | private String type; |
| 29 | 29 | |
| 30 | 30 | @Schema(description = "文件大小", example = "2048", requiredMode = Schema.RequiredMode.REQUIRED) |
| 31 | - private Integer size; | |
| 31 | + private Long size; | |
| 32 | 32 | |
| 33 | 33 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 34 | 34 | private LocalDateTime createTime; | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java
| ... | ... | @@ -22,7 +22,14 @@ public class FileUploadReqVO { |
| 22 | 22 | @AssertTrue(message = "文件目录不正确") |
| 23 | 23 | @JsonIgnore |
| 24 | 24 | public boolean isDirectoryValid() { |
| 25 | - return !StrUtil.containsAny(directory, "..", "/", "\\"); | |
| 25 | + return isDirectoryValid(directory); | |
| 26 | + } | |
| 27 | + | |
| 28 | + public static boolean isDirectoryValid(String directory) { | |
| 29 | + // 1. 不能包含 .. 防止目录穿越 | |
| 30 | + // 2. 不能以 / 或 \ 开头,防止上传到根目录 | |
| 31 | + return !StrUtil.contains(directory, "..") | |
| 32 | + && !StrUtil.startWithAny(directory, "/", "\\"); | |
| 26 | 33 | } |
| 27 | 34 | |
| 28 | 35 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java
| ... | ... | @@ -49,7 +49,7 @@ public class JobLogRespVO { |
| 49 | 49 | |
| 50 | 50 | @Schema(description = "任务状态,参见 JobLogStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 51 | 51 | @ExcelProperty(value = "任务状态", converter = DictConvert.class) |
| 52 | - @DictFormat(DictTypeConstants.JOB_STATUS) | |
| 52 | + @DictFormat(DictTypeConstants.JOB_LOG_STATUS) | |
| 53 | 53 | private Integer status; |
| 54 | 54 | |
| 55 | 55 | @Schema(description = "结果数据", example = "执行成功") | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiAccessLogController.java
| ... | ... | @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.Api |
| 11 | 11 | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; |
| 12 | 12 | import cn.iocoder.yudao.module.infra.service.logger.ApiAccessLogService; |
| 13 | 13 | import io.swagger.v3.oas.annotations.Operation; |
| 14 | +import io.swagger.v3.oas.annotations.Parameter; | |
| 14 | 15 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 15 | 16 | import jakarta.annotation.Resource; |
| 16 | 17 | import jakarta.servlet.http.HttpServletResponse; |
| ... | ... | @@ -19,6 +20,7 @@ import org.springframework.security.access.prepost.PreAuthorize; |
| 19 | 20 | import org.springframework.validation.annotation.Validated; |
| 20 | 21 | import org.springframework.web.bind.annotation.GetMapping; |
| 21 | 22 | import org.springframework.web.bind.annotation.RequestMapping; |
| 23 | +import org.springframework.web.bind.annotation.RequestParam; | |
| 22 | 24 | import org.springframework.web.bind.annotation.RestController; |
| 23 | 25 | |
| 24 | 26 | import java.io.IOException; |
| ... | ... | @@ -36,6 +38,15 @@ public class ApiAccessLogController { |
| 36 | 38 | @Resource |
| 37 | 39 | private ApiAccessLogService apiAccessLogService; |
| 38 | 40 | |
| 41 | + @GetMapping("/get") | |
| 42 | + @Operation(summary = "获得 API 访问日志") | |
| 43 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | |
| 44 | + @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") | |
| 45 | + public CommonResult<ApiAccessLogRespVO> getApiAccessLog(@RequestParam("id") Long id) { | |
| 46 | + ApiAccessLogDO apiAccessLog = apiAccessLogService.getApiAccessLog(id); | |
| 47 | + return success(BeanUtils.toBean(apiAccessLog, ApiAccessLogRespVO.class)); | |
| 48 | + } | |
| 49 | + | |
| 39 | 50 | @GetMapping("/page") |
| 40 | 51 | @Operation(summary = "获得API 访问日志分页") |
| 41 | 52 | @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/logger/ApiErrorLogController.java
| ... | ... | @@ -50,6 +50,15 @@ public class ApiErrorLogController { |
| 50 | 50 | return success(true); |
| 51 | 51 | } |
| 52 | 52 | |
| 53 | + @GetMapping("/get") | |
| 54 | + @Operation(summary = "获得 API 错误日志") | |
| 55 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | |
| 56 | + @PreAuthorize("@ss.hasPermission('infra:api-error-log:query')") | |
| 57 | + public CommonResult<ApiErrorLogRespVO> getApiErrorLog(@RequestParam("id") Long id) { | |
| 58 | + ApiErrorLogDO apiErrorLog = apiErrorLogService.getApiErrorLog(id); | |
| 59 | + return success(BeanUtils.toBean(apiErrorLog, ApiErrorLogRespVO.class)); | |
| 60 | + } | |
| 61 | + | |
| 53 | 62 | @GetMapping("/page") |
| 54 | 63 | @Operation(summary = "获得 API 错误日志分页") |
| 55 | 64 | @PreAuthorize("@ss.hasPermission('infra:api-error-log:query')") | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/AppFileController.java
| ... | ... | @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.infra.service.file.FileService; |
| 9 | 9 | import io.swagger.v3.oas.annotations.Operation; |
| 10 | 10 | import io.swagger.v3.oas.annotations.Parameter; |
| 11 | 11 | import io.swagger.v3.oas.annotations.Parameters; |
| 12 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 12 | 13 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 13 | 14 | import jakarta.annotation.Resource; |
| 14 | 15 | import jakarta.annotation.security.PermitAll; |
| ... | ... | @@ -32,6 +33,8 @@ public class AppFileController { |
| 32 | 33 | |
| 33 | 34 | @PostMapping("/upload") |
| 34 | 35 | @Operation(summary = "上传文件") |
| 36 | + @Parameter(name = "file", description = "文件附件", required = true, | |
| 37 | + schema = @Schema(type = "string", format = "binary")) | |
| 35 | 38 | @PermitAll |
| 36 | 39 | public CommonResult<String> uploadFile(AppFileUploadReqVO uploadReqVO) throws Exception { |
| 37 | 40 | MultipartFile file = uploadReqVO.getFile(); | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/vo/AppFileUploadReqVO.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.controller.app.file.vo; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.util.StrUtil; | |
| 3 | +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileUploadReqVO; | |
| 4 | 4 | import com.fasterxml.jackson.annotation.JsonIgnore; |
| 5 | 5 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | 6 | import jakarta.validation.constraints.AssertTrue; |
| ... | ... | @@ -22,7 +22,7 @@ public class AppFileUploadReqVO { |
| 22 | 22 | @AssertTrue(message = "文件目录不正确") |
| 23 | 23 | @JsonIgnore |
| 24 | 24 | public boolean isDirectoryValid() { |
| 25 | - return !StrUtil.containsAny(directory, "..", "/", "\\"); | |
| 25 | + return FileUploadReqVO.isDirectoryValid(directory); | |
| 26 | 26 | } |
| 27 | 27 | |
| 28 | 28 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenFrontTypeEnum.java
| ... | ... | @@ -21,9 +21,10 @@ public enum CodegenFrontTypeEnum { |
| 21 | 21 | VUE3_VBEN5_ANTD_SCHEMA(40), // Vue3 VBEN5 + ANTD + schema 模版 |
| 22 | 22 | VUE3_VBEN5_ANTD_GENERAL(41), // Vue3 VBEN5 + ANTD 标准模版 |
| 23 | 23 | |
| 24 | - // TODO @puhui999::50、51 会好点; | |
| 25 | - VUE3_VBEN5_EP_SCHEMA(42), // Vue3 VBEN5 + EP + schema 模版 | |
| 26 | - VUE3_VBEN5_EP_GENERAL(43), // Vue3 VBEN5 + EP 标准模版 | |
| 24 | + VUE3_VBEN5_EP_SCHEMA(50), // Vue3 VBEN5 + EP + schema 模版 | |
| 25 | + VUE3_VBEN5_EP_GENERAL(51), // Vue3 VBEN5 + EP 标准模版 | |
| 26 | + | |
| 27 | + VUE3_ADMIN_UNIAPP_WOT(60), // Vue3 Admin + Uniapp + WOT 标准模版 | |
| 27 | 28 | ; |
| 28 | 29 | |
| 29 | 30 | /** | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/AbstractFileClient.java
| ... | ... | @@ -19,10 +19,18 @@ public abstract class AbstractFileClient<Config extends FileClientConfig> implem |
| 19 | 19 | * 文件配置 |
| 20 | 20 | */ |
| 21 | 21 | protected Config config; |
| 22 | + /** | |
| 23 | + * 原始的文件配置 | |
| 24 | + * | |
| 25 | + * 原因:{@link #config} 可能被子类所修改,无法用于判断配置是否变更 | |
| 26 | + * @link <a href="https://t.zsxq.com/29wkW">相关案例</a> | |
| 27 | + */ | |
| 28 | + private Config originalConfig; | |
| 22 | 29 | |
| 23 | 30 | public AbstractFileClient(Long id, Config config) { |
| 24 | 31 | this.id = id; |
| 25 | 32 | this.config = config; |
| 33 | + this.originalConfig = config; | |
| 26 | 34 | } |
| 27 | 35 | |
| 28 | 36 | /** |
| ... | ... | @@ -40,11 +48,12 @@ public abstract class AbstractFileClient<Config extends FileClientConfig> implem |
| 40 | 48 | |
| 41 | 49 | public final void refresh(Config config) { |
| 42 | 50 | // 判断是否更新 |
| 43 | - if (config.equals(this.config)) { | |
| 51 | + if (config.equals(this.originalConfig)) { | |
| 44 | 52 | return; |
| 45 | 53 | } |
| 46 | 54 | log.info("[refresh][配置({})发生变化,重新初始化]", config); |
| 47 | 55 | this.config = config; |
| 56 | + this.originalConfig = config; | |
| 48 | 57 | // 初始化 |
| 49 | 58 | this.init(); |
| 50 | 59 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java
| ... | ... | @@ -47,7 +47,9 @@ public class S3FileClient extends AbstractFileClient<S3FileClientConfig> { |
| 47 | 47 | config.setDomain(buildDomain()); |
| 48 | 48 | } |
| 49 | 49 | // 初始化 S3 客户端 |
| 50 | - Region region = Region.of("us-east-1"); // 必须填,但填什么都行,常见的值有 "us-east-1",不填会报错 | |
| 50 | + // 优先级:配置的 region > 从 endpoint 解析的 region > 默认值 us-east-1 | |
| 51 | + String regionStr = resolveRegion(); | |
| 52 | + Region region = Region.of(regionStr); | |
| 51 | 53 | AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( |
| 52 | 54 | AwsBasicCredentials.create(config.getAccessKey(), config.getAccessSecret())); |
| 53 | 55 | URI endpoint = URI.create(buildEndpoint()); |
| ... | ... | @@ -114,7 +116,7 @@ public class S3FileClient extends AbstractFileClient<S3FileClientConfig> { |
| 114 | 116 | public String presignGetUrl(String url, Integer expirationSeconds) { |
| 115 | 117 | // 1. 将 url 转换为 path |
| 116 | 118 | String path = StrUtil.removePrefix(url, config.getDomain() + "/"); |
| 117 | - path = HttpUtils.removeUrlQuery(path); | |
| 119 | + path = HttpUtils.decodeUtf8(HttpUtils.removeUrlQuery(path)); | |
| 118 | 120 | |
| 119 | 121 | // 2.1 情况一:公开访问:无需签名 |
| 120 | 122 | // 考虑到老版本的兼容,所以必须是 config.getEnablePublicAccess() 为 false 时,才进行签名 |
| ... | ... | @@ -159,4 +161,73 @@ public class S3FileClient extends AbstractFileClient<S3FileClientConfig> { |
| 159 | 161 | return StrUtil.format("https://{}", config.getEndpoint()); |
| 160 | 162 | } |
| 161 | 163 | |
| 164 | + /** | |
| 165 | + * 解析 AWS 区域 | |
| 166 | + * 优先级:配置的 region > 从 endpoint 解析的 region > 默认值 us-east-1 | |
| 167 | + * | |
| 168 | + * @return 区域字符串 | |
| 169 | + */ | |
| 170 | + private String resolveRegion() { | |
| 171 | + // 1. 如果配置了 region,直接使用 | |
| 172 | + if (StrUtil.isNotEmpty(config.getRegion())) { | |
| 173 | + return config.getRegion(); | |
| 174 | + } | |
| 175 | + | |
| 176 | + // 2.1 尝试从 endpoint 中解析 region | |
| 177 | + String endpoint = config.getEndpoint(); | |
| 178 | + if (StrUtil.isEmpty(endpoint)) { | |
| 179 | + return "us-east-1"; | |
| 180 | + } | |
| 181 | + | |
| 182 | + // 2.2 移除协议头(http:// 或 https://) | |
| 183 | + String host = endpoint; | |
| 184 | + if (HttpUtil.isHttp(endpoint) || HttpUtil.isHttps(endpoint)) { | |
| 185 | + try { | |
| 186 | + host = URI.create(endpoint).getHost(); | |
| 187 | + } catch (Exception e) { | |
| 188 | + // 解析失败,使用默认值 | |
| 189 | + return "us-east-1"; | |
| 190 | + } | |
| 191 | + } | |
| 192 | + if (StrUtil.isEmpty(host)) { | |
| 193 | + return "us-east-1"; | |
| 194 | + } | |
| 195 | + | |
| 196 | + // 3.1 AWS S3 格式:s3.us-west-2.amazonaws.com 或 s3.amazonaws.com | |
| 197 | + if (host.contains("amazonaws.com")) { | |
| 198 | + // 匹配 s3.{region}.amazonaws.com 格式 | |
| 199 | + if (host.startsWith("s3.") && host.contains(".amazonaws.com")) { | |
| 200 | + String regionPart = host.substring(3, host.indexOf(".amazonaws.com")); | |
| 201 | + if (StrUtil.isNotEmpty(regionPart) && !regionPart.equals("accelerate")) { | |
| 202 | + return regionPart; | |
| 203 | + } | |
| 204 | + } | |
| 205 | + // s3.amazonaws.com 或 s3-accelerate.amazonaws.com 使用默认值 | |
| 206 | + return "us-east-1"; | |
| 207 | + } | |
| 208 | + // 3.2 阿里云 OSS 格式:oss-cn-beijing.aliyuncs.com | |
| 209 | + if (host.contains(S3FileClientConfig.ENDPOINT_ALIYUN)) { | |
| 210 | + // 匹配 oss-{region}.aliyuncs.com 格式 | |
| 211 | + if (host.startsWith("oss-") && host.contains("." + S3FileClientConfig.ENDPOINT_ALIYUN)) { | |
| 212 | + String regionPart = host.substring(4, host.indexOf("." + S3FileClientConfig.ENDPOINT_ALIYUN)); | |
| 213 | + if (StrUtil.isNotEmpty(regionPart)) { | |
| 214 | + return regionPart; | |
| 215 | + } | |
| 216 | + } | |
| 217 | + } | |
| 218 | + // 3.3 腾讯云 COS 格式:cos.ap-shanghai.myqcloud.com | |
| 219 | + if (host.contains(S3FileClientConfig.ENDPOINT_TENCENT)) { | |
| 220 | + // 匹配 cos.{region}.myqcloud.com 格式 | |
| 221 | + if (host.startsWith("cos.") && host.contains("." + S3FileClientConfig.ENDPOINT_TENCENT)) { | |
| 222 | + String regionPart = host.substring(4, host.indexOf("." + S3FileClientConfig.ENDPOINT_TENCENT)); | |
| 223 | + if (StrUtil.isNotEmpty(regionPart)) { | |
| 224 | + return regionPart; | |
| 225 | + } | |
| 226 | + } | |
| 227 | + } | |
| 228 | + | |
| 229 | + // 3.4 其他情况(MinIO、七牛云等)使用默认值 | |
| 230 | + return "us-east-1"; | |
| 231 | + } | |
| 232 | + | |
| 162 | 233 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClientConfig.java
| ... | ... | @@ -82,6 +82,18 @@ public class S3FileClientConfig implements FileClientConfig { |
| 82 | 82 | @NotNull(message = "是否公开访问不能为空") |
| 83 | 83 | private Boolean enablePublicAccess; |
| 84 | 84 | |
| 85 | + /** | |
| 86 | + * 区域 | |
| 87 | + * 1. AWS S3:https://docs.aws.amazon.com/general/latest/gr/s3.html 例如说,us-east-1、us-west-2 | |
| 88 | + * 2. MinIO:可以填任意值,通常使用 us-east-1 | |
| 89 | + * 3. 阿里云:不需要填写,会自动识别 | |
| 90 | + * 4. 腾讯云:不需要填写,会自动识别 | |
| 91 | + * 5. 七牛云:不需要填写,会自动识别 | |
| 92 | + * 6. 华为云:不需要填写,会自动识别 | |
| 93 | + * 7. 火山云:不需要填写,会自动识别 | |
| 94 | + */ | |
| 95 | + private String region; | |
| 96 | + | |
| 85 | 97 | @SuppressWarnings("RedundantIfStatement") |
| 86 | 98 | @AssertTrue(message = "domain 不能为空") |
| 87 | 99 | @JsonIgnore | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java
| ... | ... | @@ -91,9 +91,8 @@ public class FileTypeUtils { |
| 91 | 91 | } |
| 92 | 92 | // 针对 video 的特殊处理,解决视频地址在移动端播放的兼容性问题 |
| 93 | 93 | if (StrUtil.containsIgnoreCase(mineType, "video")) { |
| 94 | - response.setHeader("Content-Length", String.valueOf(content.length)); | |
| 95 | - response.setHeader("Content-Range", "bytes 0-" + (content.length - 1) + "/" + content.length); | |
| 96 | 94 | response.setHeader("Accept-Ranges", "bytes"); |
| 95 | + response.setHeader("Content-Length", String.valueOf(content.length)); | |
| 97 | 96 | } |
| 98 | 97 | // 输出附件 |
| 99 | 98 | IoUtil.write(response.getOutputStream(), false, content); | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/monitor/config/AdminServerConfiguration.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.framework.monitor.config; |
| 2 | 2 | |
| 3 | 3 | import de.codecentric.boot.admin.server.config.EnableAdminServer; |
| 4 | +import jakarta.servlet.DispatcherType; | |
| 5 | +import org.springframework.beans.factory.annotation.Value; | |
| 6 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | |
| 7 | +import org.springframework.context.annotation.Bean; | |
| 4 | 8 | import org.springframework.context.annotation.Configuration; |
| 9 | +import org.springframework.core.annotation.Order; | |
| 10 | +import org.springframework.security.config.Customizer; | |
| 11 | +import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
| 12 | +import org.springframework.security.core.userdetails.User; | |
| 13 | +import org.springframework.security.core.userdetails.UserDetails; | |
| 14 | +import org.springframework.security.crypto.password.PasswordEncoder; | |
| 15 | +import org.springframework.security.provisioning.InMemoryUserDetailsManager; | |
| 16 | +import org.springframework.security.web.SecurityFilterChain; | |
| 17 | +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; | |
| 18 | +import org.springframework.security.web.csrf.CookieCsrfTokenRepository; | |
| 5 | 19 | |
| 20 | +/** | |
| 21 | + * Spring Boot Admin Server 配置 | |
| 22 | + * | |
| 23 | + * 包含 Admin Server 的启用配置和安全配置 | |
| 24 | + * 安全配置独立于 {@link cn.iocoder.yudao.framework.security.config.YudaoWebSecurityConfigurerAdapter}, | |
| 25 | + * 使用 HTTP Basic 认证保护 Admin Server 端点,不影响现有的 Token 认证机制 | |
| 26 | + * | |
| 27 | + * @author 芋道源码 | |
| 28 | + */ | |
| 6 | 29 | @Configuration(proxyBeanMethods = false) |
| 7 | 30 | @EnableAdminServer |
| 31 | +@ConditionalOnClass(name = "de.codecentric.boot.admin.server.config.AdminServerProperties") // 目的:按需启动 spring boot admin 监控服务 | |
| 8 | 32 | public class AdminServerConfiguration { |
| 33 | + | |
| 34 | + @Value("${spring.boot.admin.context-path:''}") | |
| 35 | + private String adminSeverContextPath; | |
| 36 | + | |
| 37 | + @Value("${spring.boot.admin.client.username:admin}") | |
| 38 | + private String username; | |
| 39 | + | |
| 40 | + @Value("${spring.boot.admin.client.password:admin}") | |
| 41 | + private String password; | |
| 42 | + | |
| 43 | + /** | |
| 44 | + * Spring Boot Admin 专用的 InMemoryUserDetailsManager | |
| 45 | + * 使用内存存储,与系统用户隔离 | |
| 46 | + */ | |
| 47 | + @Bean("adminUserDetailsManager") | |
| 48 | + public InMemoryUserDetailsManager adminUserDetailsManager(PasswordEncoder passwordEncoder) { | |
| 49 | + UserDetails adminUser = User.builder() | |
| 50 | + .username(username) | |
| 51 | + .password(passwordEncoder.encode(password)) | |
| 52 | + .roles("ADMIN_SERVER") | |
| 53 | + .build(); | |
| 54 | + return new InMemoryUserDetailsManager(adminUser); | |
| 55 | + } | |
| 56 | + | |
| 57 | + /** | |
| 58 | + * Spring Boot Admin Server 的 SecurityFilterChain | |
| 59 | + * 使用 @Order(1) 确保优先于默认的 SecurityFilterChain 匹配 | |
| 60 | + */ | |
| 61 | + @Bean("adminServerSecurityFilterChain") | |
| 62 | + @Order(1) | |
| 63 | + public SecurityFilterChain adminServerSecurityFilterChain(HttpSecurity httpSecurity, | |
| 64 | + InMemoryUserDetailsManager adminUserDetailsManager) throws Exception { | |
| 65 | + // 登录成功后的处理器 | |
| 66 | + SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); | |
| 67 | + successHandler.setTargetUrlParameter("redirectTo"); | |
| 68 | + successHandler.setDefaultTargetUrl(adminSeverContextPath + "/"); | |
| 69 | + | |
| 70 | + // 配置 HttpSecurity 对象 | |
| 71 | + httpSecurity | |
| 72 | + // 仅匹配 Admin Server 的路径 | |
| 73 | + .securityMatcher(adminSeverContextPath + "/**") | |
| 74 | + // 使用独立的 UserDetailsManager | |
| 75 | + .userDetailsService(adminUserDetailsManager) | |
| 76 | + // 授权配置 | |
| 77 | + .authorizeHttpRequests(auth -> auth | |
| 78 | + .requestMatchers(adminSeverContextPath + "/assets/**").permitAll() // 静态资源允许匿名访问 | |
| 79 | + .requestMatchers(adminSeverContextPath + "/login").permitAll() // 登录页面允许匿名访问 | |
| 80 | + .dispatcherTypeMatchers(DispatcherType.ASYNC).permitAll() // 异步请求允许 | |
| 81 | + .anyRequest().authenticated() // 其他请求需要认证 | |
| 82 | + ) | |
| 83 | + // 表单登录配置(用于 Admin UI 访问) | |
| 84 | + .formLogin(form -> form | |
| 85 | + .loginPage(adminSeverContextPath + "/login") | |
| 86 | + .successHandler(successHandler) | |
| 87 | + .permitAll() | |
| 88 | + ) | |
| 89 | + // 登出配置 | |
| 90 | + .logout(logout -> logout | |
| 91 | + .logoutUrl(adminSeverContextPath + "/logout") | |
| 92 | + .logoutSuccessUrl(adminSeverContextPath + "/login") | |
| 93 | + ) | |
| 94 | + // HTTP Basic 认证(用于 Admin Client 注册) | |
| 95 | + .httpBasic(Customizer.withDefaults()) | |
| 96 | + // CSRF 配置 | |
| 97 | + .csrf(csrf -> csrf | |
| 98 | + .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) | |
| 99 | + .ignoringRequestMatchers( | |
| 100 | + adminSeverContextPath + "/instances", // Admin Client 注册端点忽略 CSRF | |
| 101 | + adminSeverContextPath + "/actuator/**" // Actuator 端点忽略 CSRF | |
| 102 | + ) | |
| 103 | + ); | |
| 104 | + return httpSecurity.build(); | |
| 105 | + } | |
| 106 | + | |
| 9 | 107 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/security/config/SecurityConfiguration.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.framework.security.config; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; |
| 4 | -import org.springframework.beans.factory.annotation.Value; | |
| 5 | 4 | import org.springframework.context.annotation.Bean; |
| 6 | 5 | import org.springframework.context.annotation.Configuration; |
| 7 | 6 | import org.springframework.security.config.annotation.web.builders.HttpSecurity; |
| ... | ... | @@ -13,9 +12,6 @@ import org.springframework.security.config.annotation.web.configurers.AuthorizeH |
| 13 | 12 | @Configuration(proxyBeanMethods = false, value = "infraSecurityConfiguration") |
| 14 | 13 | public class SecurityConfiguration { |
| 15 | 14 | |
| 16 | - @Value("${spring.boot.admin.context-path:''}") | |
| 17 | - private String adminSeverContextPath; | |
| 18 | - | |
| 19 | 15 | @Bean("infraAuthorizeRequestsCustomizer") |
| 20 | 16 | public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { |
| 21 | 17 | return new AuthorizeRequestsCustomizer() { |
| ... | ... | @@ -32,9 +28,6 @@ public class SecurityConfiguration { |
| 32 | 28 | .requestMatchers("/actuator/**").permitAll(); |
| 33 | 29 | // Druid 监控 |
| 34 | 30 | registry.requestMatchers("/druid/**").permitAll(); |
| 35 | - // Spring Boot Admin Server 的安全配置 | |
| 36 | - registry.requestMatchers(adminSeverContextPath).permitAll() | |
| 37 | - .requestMatchers(adminSeverContextPath + "/**").permitAll(); | |
| 38 | 31 | // 文件读取 |
| 39 | 32 | registry.requestMatchers(buildAdminApi("/infra/file/*/get/**")).permitAll(); |
| 40 | 33 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
| ... | ... | @@ -4,12 +4,14 @@ import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 7 | +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; | |
| 7 | 8 | import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenCreateListReqVO; |
| 8 | 9 | import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; |
| 9 | 10 | import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; |
| 10 | 11 | import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.DatabaseTableRespVO; |
| 11 | 12 | import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; |
| 12 | 13 | import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; |
| 14 | +import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO; | |
| 13 | 15 | import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper; |
| 14 | 16 | import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper; |
| 15 | 17 | import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum; |
| ... | ... | @@ -17,7 +19,9 @@ import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; |
| 17 | 19 | import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties; |
| 18 | 20 | import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder; |
| 19 | 21 | import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine; |
| 22 | +import cn.iocoder.yudao.module.infra.service.db.DataSourceConfigService; | |
| 20 | 23 | import cn.iocoder.yudao.module.infra.service.db.DatabaseTableService; |
| 24 | +import com.baomidou.mybatisplus.annotation.DbType; | |
| 21 | 25 | import com.baomidou.mybatisplus.generator.config.po.TableField; |
| 22 | 26 | import com.baomidou.mybatisplus.generator.config.po.TableInfo; |
| 23 | 27 | import com.google.common.annotations.VisibleForTesting; |
| ... | ... | @@ -45,6 +49,8 @@ public class CodegenServiceImpl implements CodegenService { |
| 45 | 49 | |
| 46 | 50 | @Resource |
| 47 | 51 | private DatabaseTableService databaseTableService; |
| 52 | + @Resource | |
| 53 | + private DataSourceConfigService dataSourceConfigService; | |
| 48 | 54 | |
| 49 | 55 | @Resource |
| 50 | 56 | private CodegenTableMapper codegenTableMapper; |
| ... | ... | @@ -284,8 +290,11 @@ public class CodegenServiceImpl implements CodegenService { |
| 284 | 290 | } |
| 285 | 291 | } |
| 286 | 292 | |
| 293 | + // 获取数据源对应的数据库类型 | |
| 294 | + DataSourceConfigDO dataSourceConfig = dataSourceConfigService.getDataSourceConfig(table.getDataSourceConfigId()); | |
| 295 | + DbType dbType = JdbcUtils.getDbType(dataSourceConfig.getUrl()); | |
| 287 | 296 | // 执行生成 |
| 288 | - return codegenEngine.execute(table, columns, subTables, subColumnsList); | |
| 297 | + return codegenEngine.execute(dbType, table, columns, subTables, subColumnsList); | |
| 289 | 298 | } |
| 290 | 299 | |
| 291 | 300 | @Override | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
| ... | ... | @@ -33,6 +33,7 @@ import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum; |
| 33 | 33 | import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; |
| 34 | 34 | import cn.iocoder.yudao.module.infra.enums.codegen.CodegenVOTypeEnum; |
| 35 | 35 | import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties; |
| 36 | +import com.baomidou.mybatisplus.annotation.DbType; | |
| 36 | 37 | import com.google.common.annotations.VisibleForTesting; |
| 37 | 38 | import com.google.common.collect.ImmutableTable; |
| 38 | 39 | import com.google.common.collect.Maps; |
| ... | ... | @@ -96,7 +97,7 @@ public class CodegenEngine { |
| 96 | 97 | .build(); |
| 97 | 98 | |
| 98 | 99 | /** |
| 99 | - * 后端的配置模版 | |
| 100 | + * 前端的配置模版 | |
| 100 | 101 | * |
| 101 | 102 | * key1:UI 模版的类型 {@link CodegenFrontTypeEnum#getType()} |
| 102 | 103 | * key2:模板在 resources 的地址 |
| ... | ... | @@ -137,6 +138,16 @@ public class CodegenEngine { |
| 137 | 138 | vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue")) |
| 138 | 139 | .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("api/api.ts"), |
| 139 | 140 | vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts")) |
| 141 | + .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("api/api.ts"), | |
| 142 | + vue3UniappFilePath("api/${table.moduleName}/${table.businessName}/index.ts")) | |
| 143 | + .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("views/index.vue"), | |
| 144 | + vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/index.vue")) | |
| 145 | + .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("components/search-form.vue"), | |
| 146 | + vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/components/search-form.vue")) | |
| 147 | + .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("views/form/index.vue"), | |
| 148 | + vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/form/index.vue")) | |
| 149 | + .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("views/detail/index.vue"), | |
| 150 | + vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/detail/index.vue")) | |
| 140 | 151 | // VUE3_VBEN2_ANTD_SCHEMA |
| 141 | 152 | .put(CodegenFrontTypeEnum.VUE3_VBEN2_ANTD_SCHEMA.getType(), vue3VbenTemplatePath("views/data.ts"), |
| 142 | 153 | vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/${classNameVar}.data.ts")) |
| ... | ... | @@ -300,16 +311,17 @@ public class CodegenEngine { |
| 300 | 311 | /** |
| 301 | 312 | * 生成代码 |
| 302 | 313 | * |
| 314 | + * @param dbType 数据库类型 | |
| 303 | 315 | * @param table 表定义 |
| 304 | 316 | * @param columns table 的字段定义数组 |
| 305 | 317 | * @param subTables 子表数组,当且仅当主子表时使用 |
| 306 | 318 | * @param subColumnsList subTables 的字段定义数组 |
| 307 | 319 | * @return 生成的代码,key 是路径,value 是对应代码 |
| 308 | 320 | */ |
| 309 | - public Map<String, String> execute(CodegenTableDO table, List<CodegenColumnDO> columns, | |
| 321 | + public Map<String, String> execute(DbType dbType, CodegenTableDO table, List<CodegenColumnDO> columns, | |
| 310 | 322 | List<CodegenTableDO> subTables, List<List<CodegenColumnDO>> subColumnsList) { |
| 311 | 323 | // 1.1 初始化 bindMap 上下文 |
| 312 | - Map<String, Object> bindingMap = initBindingMap(table, columns, subTables, subColumnsList); | |
| 324 | + Map<String, Object> bindingMap = initBindingMap(dbType, table, columns, subTables, subColumnsList); | |
| 313 | 325 | // 1.2 获得模版 |
| 314 | 326 | Map<String, String> templates = getTemplates(table.getFrontType()); |
| 315 | 327 | |
| ... | ... | @@ -343,7 +355,7 @@ public class CodegenEngine { |
| 343 | 355 | filePath = formatFilePath(filePath, bindingMap); |
| 344 | 356 | String content = templateEngine.getTemplate(vmPath).render(bindingMap); |
| 345 | 357 | // 格式化代码 |
| 346 | - content = prettyCode(content); | |
| 358 | + content = prettyCode(content, vmPath); | |
| 347 | 359 | result.put(filePath, content); |
| 348 | 360 | } |
| 349 | 361 | |
| ... | ... | @@ -383,11 +395,14 @@ public class CodegenEngine { |
| 383 | 395 | * 如果不处理,Vue 的 Pretty 格式校验可能会报错 |
| 384 | 396 | * |
| 385 | 397 | * @param content 格式化前的代码 |
| 398 | + * @param vmPath 模板路径 | |
| 386 | 399 | * @return 格式化后的代码 |
| 387 | 400 | */ |
| 388 | - private String prettyCode(String content) { | |
| 389 | - // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错 | |
| 390 | - content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }"); | |
| 401 | + private String prettyCode(String content, String vmPath) { | |
| 402 | + // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错(需要排除 vben5、vue3_admin_uniapp) | |
| 403 | + if (!StrUtil.containsAny(vmPath, "vben5", "vue3_admin_uniapp")) { | |
| 404 | + content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }"); | |
| 405 | + } | |
| 391 | 406 | // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到 |
| 392 | 407 | if (StrUtil.count(content, "dateFormatter") == 1) { |
| 393 | 408 | content = StrUtils.removeLineContains(content, "dateFormatter"); |
| ... | ... | @@ -412,10 +427,11 @@ public class CodegenEngine { |
| 412 | 427 | return content; |
| 413 | 428 | } |
| 414 | 429 | |
| 415 | - private Map<String, Object> initBindingMap(CodegenTableDO table, List<CodegenColumnDO> columns, | |
| 430 | + private Map<String, Object> initBindingMap(DbType dbType, CodegenTableDO table, List<CodegenColumnDO> columns, | |
| 416 | 431 | List<CodegenTableDO> subTables, List<List<CodegenColumnDO>> subColumnsList) { |
| 417 | 432 | // 创建 bindingMap |
| 418 | 433 | Map<String, Object> bindingMap = new HashMap<>(globalBindingMap); |
| 434 | + bindingMap.put("dbType", dbType); | |
| 419 | 435 | bindingMap.put("table", table); |
| 420 | 436 | bindingMap.put("columns", columns); |
| 421 | 437 | bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段 |
| ... | ... | @@ -614,6 +630,15 @@ public class CodegenEngine { |
| 614 | 630 | "src/" + path; |
| 615 | 631 | } |
| 616 | 632 | |
| 633 | + private static String vue3AdminUniappTemplatePath(String path) { | |
| 634 | + return "codegen/vue3_admin_uniapp/" + path + ".vm"; | |
| 635 | + } | |
| 636 | + | |
| 637 | + private static String vue3UniappFilePath(String path) { | |
| 638 | + return "yudao-ui-${sceneEnum.basePackage}-uniapp/" + // 顶级目录 | |
| 639 | + "src/" + path; | |
| 640 | + } | |
| 641 | + | |
| 617 | 642 | private static String vue3VbenFilePath(String path) { |
| 618 | 643 | return "yudao-ui-${sceneEnum.basePackage}-vben/" + // 顶级目录 |
| 619 | 644 | "src/" + path; | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java
| ... | ... | @@ -59,9 +59,9 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { |
| 59 | 59 | strategyConfig.addInclude(name); |
| 60 | 60 | } else { |
| 61 | 61 | // 移除工作流和定时任务前缀的表名 |
| 62 | - strategyConfig.addExclude("ACT_[\\S\\s]+|QRTZ_[\\S\\s]+|FLW_[\\S\\s]+"); | |
| 62 | + strategyConfig.addExclude("ACT_[\\S\\s]+|QRTZ_[\\S\\s]+|FLW_[\\S\\s]+|act_[\\S\\s]+|qrtz_[\\S\\s]+|flw_[\\S\\s]+"); | |
| 63 | 63 | // 移除 ORACLE 相关的系统表 |
| 64 | - strategyConfig.addExclude("IMPDP_[\\S\\s]+|ALL_[\\S\\s]+|HS_[\\S\\\s]+"); | |
| 64 | + strategyConfig.addExclude("IMPDP_[\\S\\s]+|ALL_[\\S\\s]+|HS_[\\S\\s]+|impdp_[\\S\\s]+|all_[\\S\\s]+|hs_[\\S\s]+"); | |
| 65 | 65 | strategyConfig.addExclude("[\\S\\s]+\\$[\\S\\s]+|[\\S\\s]+\\$"); // 表里不能有 $,一般有都是系统的表 |
| 66 | 66 | } |
| 67 | 67 | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
| ... | ... | @@ -88,7 +88,7 @@ public class FileServiceImpl implements FileService { |
| 88 | 88 | // 3. 保存到数据库 |
| 89 | 89 | fileMapper.insert(new FileDO().setConfigId(client.getId()) |
| 90 | 90 | .setName(name).setPath(path).setUrl(url) |
| 91 | - .setType(type).setSize(content.length)); | |
| 91 | + .setType(type).setSize((long) content.length)); | |
| 92 | 92 | return url; |
| 93 | 93 | } |
| 94 | 94 | |
| ... | ... | @@ -153,6 +153,11 @@ public class FileServiceImpl implements FileService { |
| 153 | 153 | } |
| 154 | 154 | |
| 155 | 155 | @Override |
| 156 | + public FileDO getFile(Long id) { | |
| 157 | + return validateFileExists(id); | |
| 158 | + } | |
| 159 | + | |
| 160 | + @Override | |
| 156 | 161 | public void deleteFile(Long id) throws Exception { |
| 157 | 162 | // 校验存在 |
| 158 | 163 | FileDO file = validateFileExists(id); | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogService.java
| ... | ... | @@ -20,6 +20,14 @@ public interface ApiAccessLogService { |
| 20 | 20 | void createApiAccessLog(ApiAccessLogCreateReqDTO createReqDTO); |
| 21 | 21 | |
| 22 | 22 | /** |
| 23 | + * 获得 API 访问日志 | |
| 24 | + * | |
| 25 | + * @param id 编号 | |
| 26 | + * @return API 访问日志 | |
| 27 | + */ | |
| 28 | + ApiAccessLogDO getApiAccessLog(Long id); | |
| 29 | + | |
| 30 | + /** | |
| 23 | 31 | * 获得 API 访问日志分页 |
| 24 | 32 | * |
| 25 | 33 | * @param pageReqVO 分页查询 | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java
| ... | ... | @@ -46,6 +46,11 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService { |
| 46 | 46 | } |
| 47 | 47 | |
| 48 | 48 | @Override |
| 49 | + public ApiAccessLogDO getApiAccessLog(Long id) { | |
| 50 | + return apiAccessLogMapper.selectById(id); | |
| 51 | + } | |
| 52 | + | |
| 53 | + @Override | |
| 49 | 54 | public PageResult<ApiAccessLogDO> getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO) { |
| 50 | 55 | return apiAccessLogMapper.selectPage(pageReqVO); |
| 51 | 56 | } | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogService.java
| ... | ... | @@ -20,6 +20,14 @@ public interface ApiErrorLogService { |
| 20 | 20 | void createApiErrorLog(ApiErrorLogCreateReqDTO createReqDTO); |
| 21 | 21 | |
| 22 | 22 | /** |
| 23 | + * 获得 API 错误日志 | |
| 24 | + * | |
| 25 | + * @param id 编号 | |
| 26 | + * @return API 错误日志 | |
| 27 | + */ | |
| 28 | + ApiErrorLogDO getApiErrorLog(Long id); | |
| 29 | + | |
| 30 | + /** | |
| 23 | 31 | * 获得 API 错误日志分页 |
| 24 | 32 | * |
| 25 | 33 | * @param pageReqVO 分页查询 | ... | ... |
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java
| ... | ... | @@ -59,6 +59,11 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService { |
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | @Override |
| 62 | + public ApiErrorLogDO getApiErrorLog(Long id) { | |
| 63 | + return apiErrorLogMapper.selectById(id); | |
| 64 | + } | |
| 65 | + | |
| 66 | + @Override | |
| 62 | 67 | public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { |
| 63 | 68 | ApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); |
| 64 | 69 | if (errorLog == null) { | ... | ... |
yudao-module-infra/src/main/resources/codegen/sql/sql.vm
| 1 | +## 通用变量定义 | |
| 2 | +#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) | |
| 3 | +#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) | |
| 4 | +## | |
| 5 | +## 宏定义:生成按钮 SQL(通用部分) | |
| 6 | +#macro(insertButtonSql $parentIdVar) | |
| 7 | +#foreach ($functionName in $functionNames) | |
| 8 | +#set ($index = $foreach.count - 1) | |
| 9 | + INSERT INTO system_menu( | |
| 10 | + name, permission, type, sort, parent_id, | |
| 11 | + path, icon, component, status | |
| 12 | + ) | |
| 13 | + VALUES ( | |
| 14 | + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, ${parentIdVar}, | |
| 15 | + '', '', '', 0 | |
| 16 | + ); | |
| 17 | +#end | |
| 18 | +#end | |
| 19 | +## | |
| 20 | +## ======================= MySQL / OceanBase ======================= | |
| 21 | +#if ($dbType.name() == 'MYSQL' || $dbType.name() == 'OCEAN_BASE') | |
| 1 | 22 | -- 菜单 SQL |
| 2 | 23 | INSERT INTO system_menu( |
| 3 | 24 | name, permission, type, sort, parent_id, |
| ... | ... | @@ -9,12 +30,9 @@ VALUES ( |
| 9 | 30 | ); |
| 10 | 31 | |
| 11 | 32 | -- 按钮父菜单ID |
| 12 | --- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码 | |
| 13 | 33 | SELECT @parentId := LAST_INSERT_ID(); |
| 14 | 34 | |
| 15 | 35 | -- 按钮 SQL |
| 16 | -#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) | |
| 17 | -#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) | |
| 18 | 36 | #foreach ($functionName in $functionNames) |
| 19 | 37 | #set ($index = $foreach.count - 1) |
| 20 | 38 | INSERT INTO system_menu( |
| ... | ... | @@ -25,4 +43,139 @@ VALUES ( |
| 25 | 43 | '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, |
| 26 | 44 | '', '', '', 0 |
| 27 | 45 | ); |
| 28 | -#end | |
| 29 | 46 | \ No newline at end of file |
| 47 | +#end | |
| 48 | +## | |
| 49 | +## ======================= Oracle / 达梦 DM ======================= | |
| 50 | +#elseif ($dbType.name() == 'ORACLE' || $dbType.name() == 'DM') | |
| 51 | +-- 菜单 SQL | |
| 52 | +INSERT INTO system_menu( | |
| 53 | + name, permission, type, sort, parent_id, | |
| 54 | + path, icon, component, status, component_name | |
| 55 | +) | |
| 56 | +VALUES ( | |
| 57 | + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, | |
| 58 | + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' | |
| 59 | +); | |
| 60 | + | |
| 61 | +-- 按钮父菜单ID | |
| 62 | +-- 说明:Oracle/达梦 使用序列获取上一个插入的 ID | |
| 63 | +DECLARE | |
| 64 | + v_parent_id NUMBER; | |
| 65 | +BEGIN | |
| 66 | + SELECT system_menu_seq.CURRVAL INTO v_parent_id FROM DUAL; | |
| 67 | + -- 按钮 SQL | |
| 68 | +#foreach ($functionName in $functionNames) | |
| 69 | +#set ($index = $foreach.count - 1) | |
| 70 | + INSERT INTO system_menu( | |
| 71 | + name, permission, type, sort, parent_id, | |
| 72 | + path, icon, component, status | |
| 73 | + ) | |
| 74 | + VALUES ( | |
| 75 | + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, v_parent_id, | |
| 76 | + '', '', '', 0 | |
| 77 | + ); | |
| 78 | +#end | |
| 79 | +END; | |
| 80 | +/ | |
| 81 | +## | |
| 82 | +## ======================= PostgreSQL / 人大金仓 KingbaseES ======================= | |
| 83 | +#elseif ($dbType.name() == 'POSTGRE_SQL' || $dbType.name() == 'KINGBASE_ES') | |
| 84 | +-- 菜单 SQL | |
| 85 | +INSERT INTO system_menu( | |
| 86 | + name, permission, type, sort, parent_id, | |
| 87 | + path, icon, component, status, component_name | |
| 88 | +) | |
| 89 | +VALUES ( | |
| 90 | + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, | |
| 91 | + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' | |
| 92 | +); | |
| 93 | + | |
| 94 | +-- 按钮父菜单ID | |
| 95 | +-- 说明:PostgreSQL/KingbaseES 使用 lastval() 获取上一个插入的序列值 | |
| 96 | +DO $$ | |
| 97 | +DECLARE | |
| 98 | + v_parent_id BIGINT; | |
| 99 | +BEGIN | |
| 100 | + v_parent_id := lastval(); | |
| 101 | + -- 按钮 SQL | |
| 102 | +#foreach ($functionName in $functionNames) | |
| 103 | +#set ($index = $foreach.count - 1) | |
| 104 | + INSERT INTO system_menu( | |
| 105 | + name, permission, type, sort, parent_id, | |
| 106 | + path, icon, component, status | |
| 107 | + ) | |
| 108 | + VALUES ( | |
| 109 | + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, v_parent_id, | |
| 110 | + '', '', '', 0 | |
| 111 | + ); | |
| 112 | +#end | |
| 113 | +END $$; | |
| 114 | +## | |
| 115 | +## ======================= SQL Server ======================= | |
| 116 | +#elseif ($dbType.name() == 'SQL_SERVER' || $dbType.name() == 'SQL_SERVER2005') | |
| 117 | +-- 菜单 SQL | |
| 118 | +INSERT INTO system_menu( | |
| 119 | + name, permission, type, sort, parent_id, | |
| 120 | + path, icon, component, status, component_name | |
| 121 | +) | |
| 122 | +VALUES ( | |
| 123 | + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, | |
| 124 | + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' | |
| 125 | +); | |
| 126 | + | |
| 127 | +-- 按钮父菜单ID | |
| 128 | +-- 说明:SQL Server 使用 SCOPE_IDENTITY() 获取上一个插入的自增 ID | |
| 129 | +DECLARE @parentId BIGINT; | |
| 130 | +SET @parentId = SCOPE_IDENTITY(); | |
| 131 | + | |
| 132 | +-- 按钮 SQL | |
| 133 | +#foreach ($functionName in $functionNames) | |
| 134 | +#set ($index = $foreach.count - 1) | |
| 135 | +INSERT INTO system_menu( | |
| 136 | + name, permission, type, sort, parent_id, | |
| 137 | + path, icon, component, status | |
| 138 | +) | |
| 139 | +VALUES ( | |
| 140 | + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, | |
| 141 | + '', '', '', 0 | |
| 142 | +); | |
| 143 | +#end | |
| 144 | +## | |
| 145 | +## ======================= 不支持的数据库类型 ======================= | |
| 146 | +#else | |
| 147 | +-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 148 | +-- 注意:当前数据库类型 ${dbType.name()} 暂不支持自动生成菜单 SQL | |
| 149 | +-- 请参考以下 MySQL 语法,手动修改为您的数据库对应的语法 | |
| 150 | +-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 151 | + | |
| 152 | +-- 菜单 SQL | |
| 153 | +INSERT INTO system_menu( | |
| 154 | + name, permission, type, sort, parent_id, | |
| 155 | + path, icon, component, status, component_name | |
| 156 | +) | |
| 157 | +VALUES ( | |
| 158 | + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, | |
| 159 | + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' | |
| 160 | +); | |
| 161 | + | |
| 162 | +-- 按钮父菜单ID | |
| 163 | +-- TODO: 请根据您的数据库类型,修改获取上一个插入 ID 的方式 | |
| 164 | +-- MySQL: SELECT @parentId := LAST_INSERT_ID(); | |
| 165 | +-- Oracle: SELECT system_menu_seq.CURRVAL INTO v_parent_id FROM DUAL; | |
| 166 | +-- PostgreSQL: SELECT lastval() INTO v_parent_id; | |
| 167 | +-- SQL Server: SET @parentId = SCOPE_IDENTITY(); | |
| 168 | +SELECT @parentId := LAST_INSERT_ID(); | |
| 169 | + | |
| 170 | +-- 按钮 SQL | |
| 171 | +#foreach ($functionName in $functionNames) | |
| 172 | +#set ($index = $foreach.count - 1) | |
| 173 | +INSERT INTO system_menu( | |
| 174 | + name, permission, type, sort, parent_id, | |
| 175 | + path, icon, component, status | |
| 176 | +) | |
| 177 | +VALUES ( | |
| 178 | + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, | |
| 179 | + '', '', '', 0 | |
| 180 | +); | |
| 181 | +#end | |
| 182 | +#end | ... | ... |
yudao-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm
| ... | ... | @@ -353,7 +353,9 @@ const handleDelete = async (id: number) => { |
| 353 | 353 | // 发起删除 |
| 354 | 354 | await ${simpleClassName}Api.delete${simpleClassName}(id) |
| 355 | 355 | message.success(t('common.delSuccess')) |
| 356 | +#if ( $table.templateType == 11 ) | |
| 356 | 357 | currentRow.value = {} |
| 358 | +#end | |
| 357 | 359 | // 刷新列表 |
| 358 | 360 | await getList() |
| 359 | 361 | } catch {} | ... | ... |
yudao-module-infra/src/main/resources/codegen/vue3_admin_uniapp/api/api.ts.vm
0 → 100644
| 1 | +import type { PageParam, PageResult } from '@/http/types' | |
| 2 | +import { http } from '@/http/http' | |
| 3 | + | |
| 4 | +#set ($primaryJavaType = $primaryColumn.javaType.toLowerCase()) | |
| 5 | +#if(${primaryJavaType} == "long" || ${primaryJavaType} == "integer" || ${primaryJavaType} == "short" || ${primaryJavaType} == "double" || ${primaryJavaType} == "bigdecimal" || ${primaryJavaType} == "byte") | |
| 6 | +#set ($primaryTsType = "number") | |
| 7 | +#else | |
| 8 | +#set ($primaryTsType = "string") | |
| 9 | +#end | |
| 10 | +/** ${table.classComment}信息 */ | |
| 11 | +export interface ${simpleClassName} { | |
| 12 | +#foreach ($column in $columns) | |
| 13 | + #if ($column.primaryKey || $column.createOperation || $column.updateOperation || $column.listOperationResult) | |
| 14 | + #set ($javaType = $column.javaType.toLowerCase()) | |
| 15 | + #set ($javaFieldLower = $column.javaField.toLowerCase()) | |
| 16 | + #set ($optional = $column.nullable || $column.primaryKey || $javaFieldLower == "createtime" || $javaFieldLower == "updatetime") | |
| 17 | + #if(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte") | |
| 18 | + ${column.javaField}#if($optional)?#end: number | |
| 19 | + #elseif(${javaType} == "date" || ${javaType} == "localdate" || ${javaType} == "localdatetime") | |
| 20 | + ${column.javaField}#if($optional)?#end: Date | |
| 21 | + #elseif(${javaType} == "boolean") | |
| 22 | + ${column.javaField}#if($optional)?#end: boolean | |
| 23 | + #else | |
| 24 | + ${column.javaField}#if($optional)?#end: string | |
| 25 | + #end | |
| 26 | + #end | |
| 27 | +#end | |
| 28 | +} | |
| 29 | + | |
| 30 | +/** 获取${table.classComment}分页列表 */ | |
| 31 | +export function get${simpleClassName}Page(params: PageParam) { | |
| 32 | + return http.get<PageResult<${simpleClassName}>>('/${table.moduleName}/${simpleClassName_strikeCase}/page', params) | |
| 33 | +} | |
| 34 | + | |
| 35 | +/** 获取${table.classComment}详情 */ | |
| 36 | +export function get${simpleClassName}(id: ${primaryTsType}) { | |
| 37 | + return http.get<${simpleClassName}>(`/${table.moduleName}/${simpleClassName_strikeCase}/get?id=${id}`) | |
| 38 | +} | |
| 39 | + | |
| 40 | +/** 创建${table.classComment} */ | |
| 41 | +export function create${simpleClassName}(data: ${simpleClassName}) { | |
| 42 | + return http.post<number>('/${table.moduleName}/${simpleClassName_strikeCase}/create', data) | |
| 43 | +} | |
| 44 | + | |
| 45 | +/** 更新${table.classComment} */ | |
| 46 | +export function update${simpleClassName}(data: ${simpleClassName}) { | |
| 47 | + return http.put<boolean>('/${table.moduleName}/${simpleClassName_strikeCase}/update', data) | |
| 48 | +} | |
| 49 | + | |
| 50 | +/** 删除${table.classComment} */ | |
| 51 | +export function delete${simpleClassName}(id: ${primaryTsType}) { | |
| 52 | + return http.delete<boolean>(`/${table.moduleName}/${simpleClassName_strikeCase}/delete?id=${id}`) | |
| 53 | +} | ... | ... |
yudao-module-infra/src/main/resources/codegen/vue3_admin_uniapp/components/search-form.vue.vm
0 → 100644
| 1 | +<template> | |
| 2 | + <!-- 搜索框入口 --> | |
| 3 | + <view @click="visible = true"> | |
| 4 | + <wd-search :placeholder="placeholder" hide-cancel disabled /> | |
| 5 | + </view> | |
| 6 | + | |
| 7 | + <!-- 搜索弹窗 --> | |
| 8 | + <wd-popup v-model="visible" position="top" @close="visible = false"> | |
| 9 | + <view class="yd-search-form-container" :style="{ paddingTop: `#[[${]]#getNavbarHeight()#[[}]]#px` }"> | |
| 10 | +#set ($hasDict = 0) | |
| 11 | +#foreach ($column in $columns) | |
| 12 | + #if ($hasDict == 0 && $column.listOperation && $column.dictType && "" != $column.dictType) | |
| 13 | + #set ($hasDict = 1) | |
| 14 | + #end | |
| 15 | +#end | |
| 16 | +#foreach($column in $columns) | |
| 17 | + #if ($column.listOperation) | |
| 18 | + #set ($dictType = $column.dictType) | |
| 19 | + #set ($javaField = $column.javaField) | |
| 20 | + #set ($javaType = $column.javaType) | |
| 21 | + #set ($listOperationCondition = $column.listOperationCondition) | |
| 22 | + #set ($comment = $column.columnComment) | |
| 23 | + #set ($dictMethod = "getDictOptions") | |
| 24 | + #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") | |
| 25 | + #set ($dictMethod = "getIntDictOptions") | |
| 26 | + #elseif ($javaType == "String") | |
| 27 | + #set ($dictMethod = "getStrDictOptions") | |
| 28 | + #elseif ($javaType == "Boolean") | |
| 29 | + #set ($dictMethod = "getBoolDictOptions") | |
| 30 | + #end | |
| 31 | + #if ($column.htmlType == "input") | |
| 32 | + <view class="yd-search-form-item"> | |
| 33 | + <view class="yd-search-form-label"> | |
| 34 | + ${comment} | |
| 35 | + </view> | |
| 36 | + <wd-input | |
| 37 | + v-model="formData.${javaField}" | |
| 38 | + placeholder="请输入${comment}" | |
| 39 | + clearable | |
| 40 | + /> | |
| 41 | + </view> | |
| 42 | + #elseif ($column.htmlType == "datetime" && $listOperationCondition == "BETWEEN") | |
| 43 | + #set ($AttrName = $javaField.substring(0,1).toUpperCase() + ${javaField.substring(1)}) | |
| 44 | + <view class="yd-search-form-item"> | |
| 45 | + <view class="yd-search-form-label"> | |
| 46 | + ${comment} | |
| 47 | + </view> | |
| 48 | + <view class="yd-search-form-date-range-container"> | |
| 49 | + <view @click="visible${AttrName}[0] = true"> | |
| 50 | + <view class="yd-search-form-date-range-picker"> | |
| 51 | + {{ formatDate(formData.${javaField}?.[0]) || '开始日期' }} | |
| 52 | + </view> | |
| 53 | + </view> | |
| 54 | + - | |
| 55 | + <view @click="visible${AttrName}[1] = true"> | |
| 56 | + <view class="yd-search-form-date-range-picker"> | |
| 57 | + {{ formatDate(formData.${javaField}?.[1]) || '结束日期' }} | |
| 58 | + </view> | |
| 59 | + </view> | |
| 60 | + </view> | |
| 61 | + <wd-datetime-picker-view v-if="visible${AttrName}[0]" v-model="temp${AttrName}[0]" type="date" /> | |
| 62 | + <view v-if="visible${AttrName}[0]" class="yd-search-form-date-range-actions"> | |
| 63 | + <wd-button size="small" plain @click="visible${AttrName}[0] = false"> | |
| 64 | + 取消 | |
| 65 | + </wd-button> | |
| 66 | + <wd-button size="small" type="primary" @click="handle${AttrName}0Confirm"> | |
| 67 | + 确定 | |
| 68 | + </wd-button> | |
| 69 | + </view> | |
| 70 | + <wd-datetime-picker-view v-if="visible${AttrName}[1]" v-model="temp${AttrName}[1]" type="date" /> | |
| 71 | + <view v-if="visible${AttrName}[1]" class="yd-search-form-date-range-actions"> | |
| 72 | + <wd-button size="small" plain @click="visible${AttrName}[1] = false"> | |
| 73 | + 取消 | |
| 74 | + </wd-button> | |
| 75 | + <wd-button size="small" type="primary" @click="handle${AttrName}1Confirm"> | |
| 76 | + 确定 | |
| 77 | + </wd-button> | |
| 78 | + </view> | |
| 79 | + </view> | |
| 80 | + #elseif (($column.htmlType == "select" || $column.htmlType == "radio") && $dictType && "" != $dictType) | |
| 81 | + <view class="yd-search-form-item"> | |
| 82 | + <view class="yd-search-form-label"> | |
| 83 | + ${comment} | |
| 84 | + </view> | |
| 85 | + <wd-radio-group v-model="formData.${javaField}" shape="button"> | |
| 86 | + <wd-radio :value="-1"> | |
| 87 | + 全部 | |
| 88 | + </wd-radio> | |
| 89 | + <wd-radio | |
| 90 | + v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())" | |
| 91 | + :key="dict.value" | |
| 92 | + :value="dict.value" | |
| 93 | + > | |
| 94 | + {{ dict.label }} | |
| 95 | + </wd-radio> | |
| 96 | + </wd-radio-group> | |
| 97 | + </view> | |
| 98 | + #else | |
| 99 | + <view class="yd-search-form-item"> | |
| 100 | + <view class="yd-search-form-label"> | |
| 101 | + ${comment} | |
| 102 | + </view> | |
| 103 | + <wd-input | |
| 104 | + v-model="formData.${javaField}" | |
| 105 | + placeholder="请输入${comment}" | |
| 106 | + clearable | |
| 107 | + /> | |
| 108 | + </view> | |
| 109 | + #end | |
| 110 | + #end | |
| 111 | +#end | |
| 112 | + <view class="yd-search-form-actions"> | |
| 113 | + <wd-button class="flex-1" plain @click="handleReset"> | |
| 114 | + 重置 | |
| 115 | + </wd-button> | |
| 116 | + <wd-button class="flex-1" type="primary" @click="handleSearch"> | |
| 117 | + 搜索 | |
| 118 | + </wd-button> | |
| 119 | + </view> | |
| 120 | + </view> | |
| 121 | + </wd-popup> | |
| 122 | +</template> | |
| 123 | + | |
| 124 | +<script lang="ts" setup> | |
| 125 | +#set ($hasDict = 0) | |
| 126 | +#set ($hasGetDictOptions = 0) | |
| 127 | +#set ($hasGetIntDictOptions = 0) | |
| 128 | +#set ($hasGetStrDictOptions = 0) | |
| 129 | +#set ($hasGetBoolDictOptions = 0) | |
| 130 | +#set ($hasDateTimeBetween = 0) | |
| 131 | +#foreach($column in $columns) | |
| 132 | + #if ($column.listOperation && $column.dictType && "" != $column.dictType) | |
| 133 | + #set ($hasDict = 1) | |
| 134 | + #if ($column.htmlType == "select" || $column.htmlType == "radio") | |
| 135 | + #if ($column.javaType == "Integer" || $column.javaType == "Long" || $column.javaType == "Byte" || $column.javaType == "Short") | |
| 136 | + #set ($hasGetIntDictOptions = 1) | |
| 137 | + #elseif ($column.javaType == "String") | |
| 138 | + #set ($hasGetStrDictOptions = 1) | |
| 139 | + #elseif ($column.javaType == "Boolean") | |
| 140 | + #set ($hasGetBoolDictOptions = 1) | |
| 141 | + #else | |
| 142 | + #set ($hasGetDictOptions = 1) | |
| 143 | + #end | |
| 144 | + #end | |
| 145 | + #end | |
| 146 | + #if ($hasDateTimeBetween == 0 && $column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 147 | + #set ($hasDateTimeBetween = 1) | |
| 148 | + #end | |
| 149 | +#end | |
| 150 | +import { computed, reactive, ref } from 'vue' | |
| 151 | +import { getNavbarHeight } from '@/utils' | |
| 152 | +#if ($hasDateTimeBetween == 1) | |
| 153 | +import { formatDate, formatDateRange } from '@/utils/date' | |
| 154 | +#end | |
| 155 | +#if ($hasDict == 1) | |
| 156 | + #set ($dictImportNames = "getDictLabel, ") | |
| 157 | + #if ($hasGetDictOptions == 1) | |
| 158 | + #set ($dictImportNames = "${dictImportNames}getDictOptions, ") | |
| 159 | + #end | |
| 160 | + #if ($hasGetIntDictOptions == 1) | |
| 161 | + #set ($dictImportNames = "${dictImportNames}getIntDictOptions, ") | |
| 162 | + #end | |
| 163 | + #if ($hasGetStrDictOptions == 1) | |
| 164 | + #set ($dictImportNames = "${dictImportNames}getStrDictOptions, ") | |
| 165 | + #end | |
| 166 | + #if ($hasGetBoolDictOptions == 1) | |
| 167 | + #set ($dictImportNames = "${dictImportNames}getBoolDictOptions, ") | |
| 168 | + #end | |
| 169 | + #set ($dictImportNames = $dictImportNames.trim()) | |
| 170 | + #set ($dictImportNames = $dictImportNames.substring(0, $dictImportNames.length() - 1)) | |
| 171 | +import { $dictImportNames } from '@/hooks/useDict' | |
| 172 | +import { DICT_TYPE } from '@/utils/constants' | |
| 173 | +#end | |
| 174 | + | |
| 175 | +const emit = defineEmits<{ | |
| 176 | + search: [data: Record<string, any>] | |
| 177 | + reset: [] | |
| 178 | +}>() | |
| 179 | + | |
| 180 | +const visible = ref(false) | |
| 181 | +const formData = reactive({ | |
| 182 | +#foreach($column in $columns) | |
| 183 | + #if ($column.listOperation) | |
| 184 | + #set ($javaType = $column.javaType.toLowerCase()) | |
| 185 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 186 | + ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], | |
| 187 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 188 | + #if(${javaType} == "string") | |
| 189 | + ${column.javaField}: -1 as -1 | string, // -1 表示全部 | |
| 190 | + #elseif(${javaType} == "boolean") | |
| 191 | + ${column.javaField}: -1 as -1 | boolean, // -1 表示全部 | |
| 192 | + #else | |
| 193 | + ${column.javaField}: -1, // -1 表示全部 | |
| 194 | + #end | |
| 195 | + #elseif(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte") | |
| 196 | + ${column.javaField}: undefined as number | undefined, | |
| 197 | + #elseif(${javaType} == "boolean") | |
| 198 | + ${column.javaField}: undefined as boolean | undefined, | |
| 199 | + #else | |
| 200 | + ${column.javaField}: undefined as string | undefined, | |
| 201 | + #end | |
| 202 | + #end | |
| 203 | +#end | |
| 204 | +}) | |
| 205 | + | |
| 206 | +/** 搜索条件 placeholder 拼接 */ | |
| 207 | +const placeholder = computed(() => { | |
| 208 | + const conditions: string[] = [] | |
| 209 | +#foreach($column in $columns) | |
| 210 | + #if ($column.listOperation) | |
| 211 | + #set ($dictType = $column.dictType) | |
| 212 | + #set ($javaField = $column.javaField) | |
| 213 | + #set ($javaType = $column.javaType.toLowerCase()) | |
| 214 | + #set ($comment = $column.columnComment) | |
| 215 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 216 | + if (formData.${javaField}?.[0] && formData.${javaField}?.[1]) { | |
| 217 | + conditions.push(`${comment}:#[[${]]#formatDate(formData.${javaField}[0])#[[}]]#~#[[${]]#formatDate(formData.${javaField}[1])#[[}]]#`) | |
| 218 | + } | |
| 219 | + #elseif ($dictType && "" != $dictType) | |
| 220 | + if (formData.${javaField} !== -1) { | |
| 221 | + conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, formData.${javaField})#[[}]]#`) | |
| 222 | + } | |
| 223 | + #else | |
| 224 | + #if(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte" || ${javaType} == "boolean") | |
| 225 | + if (formData.${javaField} !== undefined) { | |
| 226 | + conditions.push(`${comment}:#[[${]]#formData.${javaField}#[[}]]#`) | |
| 227 | + } | |
| 228 | + #else | |
| 229 | + if (formData.${javaField}) { | |
| 230 | + conditions.push(`${comment}:#[[${]]#formData.${javaField}#[[}]]#`) | |
| 231 | + } | |
| 232 | + #end | |
| 233 | + #end | |
| 234 | + #end | |
| 235 | +#end | |
| 236 | + return conditions.length > 0 ? conditions.join(' | ') : '搜索${table.classComment}' | |
| 237 | +}) | |
| 238 | + | |
| 239 | +#if ($hasDateTimeBetween == 1) | |
| 240 | +// 时间范围选择器状态 | |
| 241 | +#foreach($column in $columns) | |
| 242 | + #if ($column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 243 | + #set ($javaField = $column.javaField) | |
| 244 | + #set ($AttrName = $javaField.substring(0,1).toUpperCase() + ${javaField.substring(1)}) | |
| 245 | +const visible${AttrName} = ref<[boolean, boolean]>([false, false]) | |
| 246 | +const temp${AttrName} = ref<[number, number]>([Date.now(), Date.now()]) | |
| 247 | + | |
| 248 | +/** ${column.columnComment}[0]确认 */ | |
| 249 | +function handle${AttrName}0Confirm() { | |
| 250 | + formData.${javaField} = [temp${AttrName}.value[0], formData.${javaField}?.[1]] | |
| 251 | + visible${AttrName}.value[0] = false | |
| 252 | +} | |
| 253 | + | |
| 254 | +/** ${column.columnComment}[1]确认 */ | |
| 255 | +function handle${AttrName}1Confirm() { | |
| 256 | + formData.${javaField} = [formData.${javaField}?.[0], temp${AttrName}.value[1]] | |
| 257 | + visible${AttrName}.value[1] = false | |
| 258 | +} | |
| 259 | + #end | |
| 260 | +#end | |
| 261 | +#end | |
| 262 | + | |
| 263 | +/** 搜索 */ | |
| 264 | +function handleSearch() { | |
| 265 | + visible.value = false | |
| 266 | + emit('search', { | |
| 267 | + ...formData, | |
| 268 | +#foreach($column in $columns) | |
| 269 | + #if ($column.listOperation) | |
| 270 | + #if ($column.dictType && "" != $column.dictType) | |
| 271 | + ${column.javaField}: formData.${column.javaField} === -1 ? undefined : formData.${column.javaField}, | |
| 272 | + #elseif ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 273 | + ${column.javaField}: formatDateRange(formData.${column.javaField}), | |
| 274 | + #end | |
| 275 | + #end | |
| 276 | +#end | |
| 277 | + }) | |
| 278 | +} | |
| 279 | + | |
| 280 | +/** 重置 */ | |
| 281 | +function handleReset() { | |
| 282 | +#foreach($column in $columns) | |
| 283 | + #if ($column.listOperation) | |
| 284 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 285 | + formData.${column.javaField} = [undefined, undefined] | |
| 286 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 287 | + formData.${column.javaField} = -1 | |
| 288 | + #else | |
| 289 | + formData.${column.javaField} = undefined | |
| 290 | + #end | |
| 291 | + #end | |
| 292 | +#end | |
| 293 | + visible.value = false | |
| 294 | + emit('reset') | |
| 295 | +} | |
| 296 | +</script> | ... | ... |
yudao-module-infra/src/main/resources/codegen/vue3_admin_uniapp/views/detail/index.vue.vm
0 → 100644
| 1 | +<template> | |
| 2 | + <view class="yd-page-container"> | |
| 3 | + <!-- 顶部导航栏 --> | |
| 4 | + <wd-navbar | |
| 5 | + title="${table.classComment}详情" | |
| 6 | + left-arrow placeholder safe-area-inset-top fixed | |
| 7 | + @click-left="handleBack" | |
| 8 | + /> | |
| 9 | + | |
| 10 | + <!-- 详情内容 --> | |
| 11 | + <view> | |
| 12 | + <wd-cell-group border> | |
| 13 | +#foreach($column in $columns) | |
| 14 | + #if ($column.primaryKey || $column.listOperationResult || $column.createOperation || $column.updateOperation) | |
| 15 | + #set ($javaField = $column.javaField) | |
| 16 | + #set ($comment = $column.columnComment) | |
| 17 | + #if ($column.dictType && "" != $column.dictType) | |
| 18 | + <wd-cell title="${comment}"> | |
| 19 | + <dict-tag :type="DICT_TYPE.${column.dictType.toUpperCase()}" :value="formData?.${javaField}" /> | |
| 20 | + </wd-cell> | |
| 21 | + #elseif ($column.javaType == "LocalDateTime") | |
| 22 | + <wd-cell title="${comment}" :value="formatDateTime(formData?.${javaField}) || '-'" /> | |
| 23 | + #else | |
| 24 | + <wd-cell title="${comment}" :value="formData?.${javaField} ?? '-'" /> | |
| 25 | + #end | |
| 26 | + #end | |
| 27 | +#end | |
| 28 | + </wd-cell-group> | |
| 29 | + </view> | |
| 30 | + | |
| 31 | + <!-- 底部操作按钮 --> | |
| 32 | + <view class="yd-detail-footer"> | |
| 33 | + <view class="yd-detail-footer-actions"> | |
| 34 | + <wd-button | |
| 35 | + v-if="hasAccessByCodes(['${permissionPrefix}:update'])" | |
| 36 | + class="flex-1" type="warning" @click="handleEdit" | |
| 37 | + > | |
| 38 | + 编辑 | |
| 39 | + </wd-button> | |
| 40 | + <wd-button | |
| 41 | + v-if="hasAccessByCodes(['${permissionPrefix}:delete'])" | |
| 42 | + class="flex-1" type="error" :loading="deleting" @click="handleDelete" | |
| 43 | + > | |
| 44 | + 删除 | |
| 45 | + </wd-button> | |
| 46 | + </view> | |
| 47 | + </view> | |
| 48 | + </view> | |
| 49 | +</template> | |
| 50 | + | |
| 51 | +<script lang="ts" setup> | |
| 52 | +#set ($hasDict = 0) | |
| 53 | +#foreach($column in $columns) | |
| 54 | + #if ($hasDict == 0 && $column.dictType && "" != $column.dictType) | |
| 55 | + #set ($hasDict = 1) | |
| 56 | + #end | |
| 57 | +#end | |
| 58 | +#set ($hasDateTime = 0) | |
| 59 | +#foreach($column in $columns) | |
| 60 | + #if ($hasDateTime == 0 && $column.javaType == "LocalDateTime") | |
| 61 | + #set ($hasDateTime = 1) | |
| 62 | + #end | |
| 63 | +#end | |
| 64 | +import type { ${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}' | |
| 65 | +import { onMounted, ref } from 'vue' | |
| 66 | +import { useToast } from 'wot-design-uni' | |
| 67 | +import { delete${simpleClassName}, get${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}' | |
| 68 | +import { useAccess } from '@/hooks/useAccess' | |
| 69 | +import { navigateBackPlus } from '@/utils' | |
| 70 | +#if ($hasDict == 1) | |
| 71 | +import { DICT_TYPE } from '@/utils/constants' | |
| 72 | +#end | |
| 73 | +#if ($hasDateTime == 1) | |
| 74 | +import { formatDateTime } from '@/utils/date' | |
| 75 | +#end | |
| 76 | + | |
| 77 | +const props = defineProps<{ | |
| 78 | + id?: number | any | |
| 79 | +}>() | |
| 80 | + | |
| 81 | +definePage({ | |
| 82 | + style: { | |
| 83 | + navigationBarTitleText: '', | |
| 84 | + navigationStyle: 'custom', | |
| 85 | + }, | |
| 86 | +}) | |
| 87 | + | |
| 88 | +const { hasAccessByCodes } = useAccess() | |
| 89 | +const toast = useToast() | |
| 90 | +const formData = ref<${simpleClassName}>() | |
| 91 | +const deleting = ref(false) | |
| 92 | + | |
| 93 | +/** 返回上一页 */ | |
| 94 | +function handleBack() { | |
| 95 | + navigateBackPlus('/pages-${table.moduleName}/${table.businessName}/index') | |
| 96 | +} | |
| 97 | + | |
| 98 | +/** 加载${table.classComment}详情 */ | |
| 99 | +async function getDetail() { | |
| 100 | + if (!props.id) { | |
| 101 | + return | |
| 102 | + } | |
| 103 | + try { | |
| 104 | + toast.loading('加载中...') | |
| 105 | + formData.value = await get${simpleClassName}(props.id) | |
| 106 | + } finally { | |
| 107 | + toast.close() | |
| 108 | + } | |
| 109 | +} | |
| 110 | + | |
| 111 | +/** 编辑${table.classComment} */ | |
| 112 | +function handleEdit() { | |
| 113 | + uni.navigateTo({ | |
| 114 | + url: `/pages-${table.moduleName}/${table.businessName}/form/index?id=#[[${]]#props.id#[[}]]#`, | |
| 115 | + }) | |
| 116 | +} | |
| 117 | + | |
| 118 | +/** 删除${table.classComment} */ | |
| 119 | +function handleDelete() { | |
| 120 | + if (!props.id) { | |
| 121 | + return | |
| 122 | + } | |
| 123 | + uni.showModal({ | |
| 124 | + title: '提示', | |
| 125 | + content: '确定要删除该${table.classComment}吗?', | |
| 126 | + success: async (res) => { | |
| 127 | + if (!res.confirm) { | |
| 128 | + return | |
| 129 | + } | |
| 130 | + deleting.value = true | |
| 131 | + try { | |
| 132 | + await delete${simpleClassName}(props.id) | |
| 133 | + toast.success('删除成功') | |
| 134 | + setTimeout(() => { | |
| 135 | + handleBack() | |
| 136 | + }, 500) | |
| 137 | + } finally { | |
| 138 | + deleting.value = false | |
| 139 | + } | |
| 140 | + }, | |
| 141 | + }) | |
| 142 | +} | |
| 143 | + | |
| 144 | +/** 初始化 */ | |
| 145 | +onMounted(() => { | |
| 146 | + getDetail() | |
| 147 | +}) | |
| 148 | +</script> | |
| 149 | + | |
| 150 | +<style lang="scss" scoped> | |
| 151 | +</style> | ... | ... |