diff --git a/pom.xml b/pom.xml
index 6995c0fc2c..c373c41c1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,14 @@
pom
import
+
+
+
+
+ org.quartz-scheduler
+ quartz
+ 2.5.2
+
diff --git a/sql/postgresql/ruoyi-vue-pro.sql b/sql/postgresql/ruoyi-vue-pro.sql
index d41080d654..5fe221ae4b 100644
--- a/sql/postgresql/ruoyi-vue-pro.sql
+++ b/sql/postgresql/ruoyi-vue-pro.sql
@@ -27,6 +27,10 @@ COMMENT ON TABLE dual IS '数据库连接的表';
INSERT INTO dual VALUES (1);
-- @formatter:on
+DROP SEQUENCE IF EXISTS infra_api_access_log_seq;
+CREATE SEQUENCE infra_api_access_log_seq
+ START 1;
+
-- ----------------------------
-- Table structure for infra_api_access_log
-- ----------------------------
@@ -92,8 +96,8 @@ COMMENT ON COLUMN infra_api_access_log.deleted IS '是否删除';
COMMENT ON COLUMN infra_api_access_log.tenant_id IS '租户编号';
COMMENT ON TABLE infra_api_access_log IS 'API 访问日志表';
-DROP SEQUENCE IF EXISTS infra_api_access_log_seq;
-CREATE SEQUENCE infra_api_access_log_seq
+DROP SEQUENCE IF EXISTS infra_api_error_log_seq;
+CREATE SEQUENCE infra_api_error_log_seq
START 1;
-- ----------------------------
@@ -165,8 +169,8 @@ COMMENT ON COLUMN infra_api_error_log.deleted IS '是否删除';
COMMENT ON COLUMN infra_api_error_log.tenant_id IS '租户编号';
COMMENT ON TABLE infra_api_error_log IS '系统异常日志';
-DROP SEQUENCE IF EXISTS infra_api_error_log_seq;
-CREATE SEQUENCE infra_api_error_log_seq
+DROP SEQUENCE IF EXISTS infra_codegen_column_seq;
+CREATE SEQUENCE infra_codegen_column_seq
START 1;
-- ----------------------------
@@ -228,8 +232,8 @@ COMMENT ON COLUMN infra_codegen_column.update_time IS '更新时间';
COMMENT ON COLUMN infra_codegen_column.deleted IS '是否删除';
COMMENT ON TABLE infra_codegen_column IS '代码生成表字段定义';
-DROP SEQUENCE IF EXISTS infra_codegen_column_seq;
-CREATE SEQUENCE infra_codegen_column_seq
+DROP SEQUENCE IF EXISTS infra_codegen_table_seq;
+CREATE SEQUENCE infra_codegen_table_seq
START 1;
-- ----------------------------
@@ -293,8 +297,9 @@ COMMENT ON COLUMN infra_codegen_table.update_time IS '更新时间';
COMMENT ON COLUMN infra_codegen_table.deleted IS '是否删除';
COMMENT ON TABLE infra_codegen_table IS '代码生成表定义';
-DROP SEQUENCE IF EXISTS infra_codegen_table_seq;
-CREATE SEQUENCE infra_codegen_table_seq
+
+DROP SEQUENCE IF EXISTS infra_config_seq;
+CREATE SEQUENCE infra_config_seq
START 1;
-- ----------------------------
@@ -352,9 +357,9 @@ INSERT INTO infra_config (id, category, type, name, config_key, value, visible,
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS infra_config_seq;
-CREATE SEQUENCE infra_config_seq
- START 14;
+DROP SEQUENCE IF EXISTS infra_data_source_config_seq;
+CREATE SEQUENCE infra_data_source_config_seq
+ START 1;
-- ----------------------------
-- Table structure for infra_data_source_config
@@ -389,8 +394,8 @@ COMMENT ON COLUMN infra_data_source_config.update_time IS '更新时间';
COMMENT ON COLUMN infra_data_source_config.deleted IS '是否删除';
COMMENT ON TABLE infra_data_source_config IS '数据源配置表';
-DROP SEQUENCE IF EXISTS infra_data_source_config_seq;
-CREATE SEQUENCE infra_data_source_config_seq
+DROP SEQUENCE IF EXISTS infra_file_seq;
+CREATE SEQUENCE infra_file_seq
START 1;
-- ----------------------------
@@ -430,9 +435,9 @@ COMMENT ON COLUMN infra_file.update_time IS '更新时间';
COMMENT ON COLUMN infra_file.deleted IS '是否删除';
COMMENT ON TABLE infra_file IS '文件表';
-DROP SEQUENCE IF EXISTS infra_file_seq;
-CREATE SEQUENCE infra_file_seq
- START 1;
+DROP SEQUENCE IF EXISTS infra_file_config_seq;
+CREATE SEQUENCE infra_file_config_seq
+ START 31;
-- ----------------------------
-- Table structure for infra_file_config
@@ -486,9 +491,9 @@ INSERT INTO infra_file_config (id, name, storage, remark, master, config, creato
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS infra_file_config_seq;
-CREATE SEQUENCE infra_file_config_seq
- START 31;
+DROP SEQUENCE IF EXISTS infra_file_content_seq;
+CREATE SEQUENCE infra_file_content_seq
+ START 1;
-- ----------------------------
-- Table structure for infra_file_content
@@ -521,8 +526,8 @@ COMMENT ON COLUMN infra_file_content.update_time IS '更新时间';
COMMENT ON COLUMN infra_file_content.deleted IS '是否删除';
COMMENT ON TABLE infra_file_content IS '文件表';
-DROP SEQUENCE IF EXISTS infra_file_content_seq;
-CREATE SEQUENCE infra_file_content_seq
+DROP SEQUENCE IF EXISTS infra_job_seq;
+CREATE SEQUENCE infra_job_seq
START 1;
-- ----------------------------
@@ -587,9 +592,9 @@ INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expre
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS infra_job_seq;
-CREATE SEQUENCE infra_job_seq
- START 36;
+DROP SEQUENCE IF EXISTS infra_job_log_seq;
+CREATE SEQUENCE infra_job_log_seq
+ START 1;
-- ----------------------------
-- Table structure for infra_job_log
@@ -634,8 +639,8 @@ COMMENT ON COLUMN infra_job_log.update_time IS '更新时间';
COMMENT ON COLUMN infra_job_log.deleted IS '是否删除';
COMMENT ON TABLE infra_job_log IS '定时任务日志表';
-DROP SEQUENCE IF EXISTS infra_job_log_seq;
-CREATE SEQUENCE infra_job_log_seq
+DROP SEQUENCE IF EXISTS system_dept_seq;
+CREATE SEQUENCE system_dept_seq
START 1;
-- ----------------------------
@@ -701,9 +706,9 @@ INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_dept_seq;
-CREATE SEQUENCE system_dept_seq
- START 114;
+DROP SEQUENCE IF EXISTS system_dict_data_seq;
+CREATE SEQUENCE system_dict_data_seq
+ START 1;
-- ----------------------------
-- Table structure for system_dict_data
@@ -1354,13 +1359,12 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t
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');
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');
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');
-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');
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_dict_data_seq;
-CREATE SEQUENCE system_dict_data_seq
- START 3003;
+DROP SEQUENCE IF EXISTS system_dict_type_seq;
+CREATE SEQUENCE system_dict_type_seq
+ START 1;
-- ----------------------------
-- Table structure for system_dict_type
@@ -1512,9 +1516,9 @@ INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_ti
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_dict_type_seq;
-CREATE SEQUENCE system_dict_type_seq
- START 1014;
+DROP SEQUENCE IF EXISTS system_login_log_seq;
+CREATE SEQUENCE system_login_log_seq
+ START 1;
-- ----------------------------
-- Table structure for system_login_log
@@ -1559,8 +1563,8 @@ COMMENT ON COLUMN system_login_log.deleted IS '是否删除';
COMMENT ON COLUMN system_login_log.tenant_id IS '租户编号';
COMMENT ON TABLE system_login_log IS '系统访问记录';
-DROP SEQUENCE IF EXISTS system_login_log_seq;
-CREATE SEQUENCE system_login_log_seq
+DROP SEQUENCE IF EXISTS system_mail_account_seq;
+CREATE SEQUENCE system_mail_account_seq
START 1;
-- ----------------------------
@@ -1614,9 +1618,9 @@ INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_e
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_mail_account_seq;
-CREATE SEQUENCE system_mail_account_seq
- START 5;
+DROP SEQUENCE IF EXISTS system_mail_log_seq;
+CREATE SEQUENCE system_mail_log_seq
+ START 1;
-- ----------------------------
-- Table structure for system_mail_log
@@ -1673,8 +1677,8 @@ COMMENT ON COLUMN system_mail_log.update_time IS '更新时间';
COMMENT ON COLUMN system_mail_log.deleted IS '是否删除';
COMMENT ON TABLE system_mail_log IS '邮件日志表';
-DROP SEQUENCE IF EXISTS system_mail_log_seq;
-CREATE SEQUENCE system_mail_log_seq
+DROP SEQUENCE IF EXISTS system_mail_template_seq;
+CREATE SEQUENCE system_mail_template_seq
START 1;
-- ----------------------------
@@ -1731,9 +1735,9 @@ INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, c
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_mail_template_seq;
-CREATE SEQUENCE system_mail_template_seq
- START 16;
+DROP SEQUENCE IF EXISTS system_menu_seq;
+CREATE SEQUENCE system_menu_seq
+ START 1;
-- ----------------------------
-- Table structure for system_menu
@@ -2705,9 +2709,9 @@ INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_menu_seq;
-CREATE SEQUENCE system_menu_seq
- START 5013;
+DROP SEQUENCE IF EXISTS system_notice_seq;
+CREATE SEQUENCE system_notice_seq
+ START 1;
-- ----------------------------
-- Table structure for system_notice
@@ -2755,9 +2759,9 @@ INSERT INTO system_notice (id, title, content, type, status, creator, create_tim
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_notice_seq;
-CREATE SEQUENCE system_notice_seq
- START 5;
+DROP SEQUENCE IF EXISTS system_notify_message_seq;
+CREATE SEQUENCE system_notify_message_seq
+ START 1;
-- ----------------------------
-- Table structure for system_notify_message
@@ -2823,9 +2827,9 @@ INSERT INTO system_notify_message (id, user_id, user_type, template_id, template
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_notify_message_seq;
-CREATE SEQUENCE system_notify_message_seq
- START 11;
+DROP SEQUENCE IF EXISTS system_notify_template_seq;
+CREATE SEQUENCE system_notify_template_seq
+ START 1;
-- ----------------------------
-- Table structure for system_notify_template
@@ -2868,8 +2872,8 @@ COMMENT ON COLUMN system_notify_template.update_time IS '更新时间';
COMMENT ON COLUMN system_notify_template.deleted IS '是否删除';
COMMENT ON TABLE system_notify_template IS '站内信模板表';
-DROP SEQUENCE IF EXISTS system_notify_template_seq;
-CREATE SEQUENCE system_notify_template_seq
+DROP SEQUENCE IF EXISTS system_oauth2_access_token_seq;
+CREATE SEQUENCE system_oauth2_access_token_seq
START 1;
-- ----------------------------
@@ -2918,8 +2922,8 @@ COMMENT ON COLUMN system_oauth2_access_token.deleted IS '是否删除';
COMMENT ON COLUMN system_oauth2_access_token.tenant_id IS '租户编号';
COMMENT ON TABLE system_oauth2_access_token IS 'OAuth2 访问令牌';
-DROP SEQUENCE IF EXISTS system_oauth2_access_token_seq;
-CREATE SEQUENCE system_oauth2_access_token_seq
+DROP SEQUENCE IF EXISTS system_oauth2_approve_seq;
+CREATE SEQUENCE system_oauth2_approve_seq
START 1;
-- ----------------------------
@@ -2961,8 +2965,8 @@ COMMENT ON COLUMN system_oauth2_approve.deleted IS '是否删除';
COMMENT ON COLUMN system_oauth2_approve.tenant_id IS '租户编号';
COMMENT ON TABLE system_oauth2_approve IS 'OAuth2 批准表';
-DROP SEQUENCE IF EXISTS system_oauth2_approve_seq;
-CREATE SEQUENCE system_oauth2_approve_seq
+DROP SEQUENCE IF EXISTS system_oauth2_client_seq;
+CREATE SEQUENCE system_oauth2_client_seq
START 1;
-- ----------------------------
@@ -3032,9 +3036,9 @@ INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_oauth2_client_seq;
-CREATE SEQUENCE system_oauth2_client_seq
- START 43;
+DROP SEQUENCE IF EXISTS system_oauth2_code_seq;
+CREATE SEQUENCE system_oauth2_code_seq
+ START 1;
-- ----------------------------
-- Table structure for system_oauth2_code
@@ -3079,8 +3083,8 @@ COMMENT ON COLUMN system_oauth2_code.deleted IS '是否删除';
COMMENT ON COLUMN system_oauth2_code.tenant_id IS '租户编号';
COMMENT ON TABLE system_oauth2_code IS 'OAuth2 授权码表';
-DROP SEQUENCE IF EXISTS system_oauth2_code_seq;
-CREATE SEQUENCE system_oauth2_code_seq
+DROP SEQUENCE IF EXISTS system_oauth2_refresh_token_seq;
+CREATE SEQUENCE system_oauth2_refresh_token_seq
START 1;
-- ----------------------------
@@ -3122,8 +3126,8 @@ COMMENT ON COLUMN system_oauth2_refresh_token.deleted IS '是否删除';
COMMENT ON COLUMN system_oauth2_refresh_token.tenant_id IS '租户编号';
COMMENT ON TABLE system_oauth2_refresh_token IS 'OAuth2 刷新令牌';
-DROP SEQUENCE IF EXISTS system_oauth2_refresh_token_seq;
-CREATE SEQUENCE system_oauth2_refresh_token_seq
+DROP SEQUENCE IF EXISTS system_operate_log_seq;
+CREATE SEQUENCE system_operate_log_seq
START 1;
-- ----------------------------
@@ -3179,8 +3183,8 @@ COMMENT ON COLUMN system_operate_log.deleted IS '是否删除';
COMMENT ON COLUMN system_operate_log.tenant_id IS '租户编号';
COMMENT ON TABLE system_operate_log IS '操作日志记录 V2 版本';
-DROP SEQUENCE IF EXISTS system_operate_log_seq;
-CREATE SEQUENCE system_operate_log_seq
+DROP SEQUENCE IF EXISTS system_post_seq;
+CREATE SEQUENCE system_post_seq
START 1;
-- ----------------------------
@@ -3232,9 +3236,9 @@ INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_t
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_post_seq;
-CREATE SEQUENCE system_post_seq
- START 6;
+DROP SEQUENCE IF EXISTS system_role_seq;
+CREATE SEQUENCE system_role_seq
+ START 1;
-- ----------------------------
-- Table structure for system_role
@@ -3295,9 +3299,9 @@ INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids,
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_role_seq;
-CREATE SEQUENCE system_role_seq
- START 159;
+DROP SEQUENCE IF EXISTS system_role_menu_seq;
+CREATE SEQUENCE system_role_menu_seq
+ START 1;
-- ----------------------------
-- Table structure for system_role_menu
@@ -4201,9 +4205,9 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_role_menu_seq;
-CREATE SEQUENCE system_role_menu_seq
- START 6139;
+DROP SEQUENCE IF EXISTS system_sms_channel_seq;
+CREATE SEQUENCE system_sms_channel_seq
+ START 1;
-- ----------------------------
-- Table structure for system_sms_channel
@@ -4255,9 +4259,9 @@ INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, ap
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_sms_channel_seq;
-CREATE SEQUENCE system_sms_channel_seq
- START 8;
+DROP SEQUENCE IF EXISTS system_sms_code_seq;
+CREATE SEQUENCE system_sms_code_seq
+ START 1;
-- ----------------------------
-- Table structure for system_sms_code
@@ -4304,8 +4308,8 @@ COMMENT ON COLUMN system_sms_code.deleted IS '是否删除';
COMMENT ON COLUMN system_sms_code.tenant_id IS '租户编号';
COMMENT ON TABLE system_sms_code IS '手机验证码';
-DROP SEQUENCE IF EXISTS system_sms_code_seq;
-CREATE SEQUENCE system_sms_code_seq
+DROP SEQUENCE IF EXISTS system_sms_log_seq;
+CREATE SEQUENCE system_sms_log_seq
START 1;
-- ----------------------------
@@ -4375,8 +4379,8 @@ COMMENT ON COLUMN system_sms_log.update_time IS '更新时间';
COMMENT ON COLUMN system_sms_log.deleted IS '是否删除';
COMMENT ON TABLE system_sms_log IS '短信日志';
-DROP SEQUENCE IF EXISTS system_sms_log_seq;
-CREATE SEQUENCE system_sms_log_seq
+DROP SEQUENCE IF EXISTS system_sms_template_seq;
+CREATE SEQUENCE system_sms_template_seq
START 1;
-- ----------------------------
@@ -4447,9 +4451,9 @@ INSERT INTO system_sms_template (id, type, status, code, name, content, params,
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_sms_template_seq;
-CREATE SEQUENCE system_sms_template_seq
- START 20;
+DROP SEQUENCE IF EXISTS system_social_client_seq;
+CREATE SEQUENCE system_social_client_seq
+ START 1;
-- ----------------------------
-- Table structure for system_social_client
@@ -4462,8 +4466,8 @@ CREATE TABLE system_social_client
social_type int2 NOT NULL,
user_type int2 NOT NULL,
client_id varchar(255) NOT NULL,
- client_secret varchar(2048) NOT NULL,
- public_key varchar(2048) NULL DEFAULT NULL,
+ client_secret varchar(255) NOT NULL,
+ public_key varchar(255) NULL DEFAULT NULL,
agent_id varchar(255) NULL DEFAULT NULL,
status int2 NOT NULL,
creator varchar(64) NULL DEFAULT '',
@@ -4483,7 +4487,7 @@ COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型';
COMMENT ON COLUMN system_social_client.user_type IS '用户类型';
COMMENT ON COLUMN system_social_client.client_id IS '客户端编号';
COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥';
-COMMENT ON COLUMN system_social_client.public_key IS 'publicKey公钥';
+COMMENT ON COLUMN system_social_client.public_key IS 'publicKey 公钥';
COMMENT ON COLUMN system_social_client.agent_id IS '代理编号';
COMMENT ON COLUMN system_social_client.status IS '状态';
COMMENT ON COLUMN system_social_client.creator IS '创建者';
@@ -4507,9 +4511,9 @@ INSERT INTO system_social_client (id, name, social_type, user_type, client_id, c
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_social_client_seq;
-CREATE SEQUENCE system_social_client_seq
- START 45;
+DROP SEQUENCE IF EXISTS system_social_user_seq;
+CREATE SEQUENCE system_social_user_seq
+ START 1;
-- ----------------------------
-- Table structure for system_social_user
@@ -4556,8 +4560,8 @@ COMMENT ON COLUMN system_social_user.deleted IS '是否删除';
COMMENT ON COLUMN system_social_user.tenant_id IS '租户编号';
COMMENT ON TABLE system_social_user IS '社交用户表';
-DROP SEQUENCE IF EXISTS system_social_user_seq;
-CREATE SEQUENCE system_social_user_seq
+DROP SEQUENCE IF EXISTS system_social_user_bind_seq;
+CREATE SEQUENCE system_social_user_bind_seq
START 1;
-- ----------------------------
@@ -4595,8 +4599,8 @@ COMMENT ON COLUMN system_social_user_bind.deleted IS '是否删除';
COMMENT ON COLUMN system_social_user_bind.tenant_id IS '租户编号';
COMMENT ON TABLE system_social_user_bind IS '社交绑定表';
-DROP SEQUENCE IF EXISTS system_social_user_bind_seq;
-CREATE SEQUENCE system_social_user_bind_seq
+DROP SEQUENCE IF EXISTS system_tenant_seq;
+CREATE SEQUENCE system_tenant_seq
START 1;
-- ----------------------------
@@ -4653,9 +4657,9 @@ INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobi
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_tenant_seq;
-CREATE SEQUENCE system_tenant_seq
- START 123;
+DROP SEQUENCE IF EXISTS system_tenant_package_seq;
+CREATE SEQUENCE system_tenant_package_seq
+ START 1;
-- ----------------------------
-- Table structure for system_tenant_package
@@ -4700,9 +4704,9 @@ INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator,
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_tenant_package_seq;
-CREATE SEQUENCE system_tenant_package_seq
- START 113;
+DROP SEQUENCE IF EXISTS system_user_post_seq;
+CREATE SEQUENCE system_user_post_seq
+ START 1;
-- ----------------------------
-- Table structure for system_user_post
@@ -4752,9 +4756,9 @@ INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, update
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_user_post_seq;
-CREATE SEQUENCE system_user_post_seq
- START 126;
+DROP SEQUENCE IF EXISTS system_user_role_seq;
+CREATE SEQUENCE system_user_role_seq
+ START 1;
-- ----------------------------
-- Table structure for system_user_role
@@ -4812,9 +4816,9 @@ INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, update
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_user_role_seq;
-CREATE SEQUENCE system_user_role_seq
- START 49;
+DROP SEQUENCE IF EXISTS system_users_seq;
+CREATE SEQUENCE system_users_seq
+ START 1;
-- ----------------------------
-- Table structure for system_users
@@ -4895,9 +4899,9 @@ INSERT INTO system_users (id, username, password, nickname, remark, dept_id, pos
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS system_users_seq;
-CREATE SEQUENCE system_users_seq
- START 142;
+DROP SEQUENCE IF EXISTS yudao_demo01_contact_seq;
+CREATE SEQUENCE yudao_demo01_contact_seq
+ START 1;
-- ----------------------------
-- Table structure for yudao_demo01_contact
@@ -4945,9 +4949,9 @@ INSERT INTO yudao_demo01_contact (id, name, sex, birthday, description, avatar,
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS yudao_demo01_contact_seq;
-CREATE SEQUENCE yudao_demo01_contact_seq
- START 2;
+DROP SEQUENCE IF EXISTS yudao_demo02_category_seq;
+CREATE SEQUENCE yudao_demo02_category_seq
+ START 1;
-- ----------------------------
-- Table structure for yudao_demo02_category
@@ -4994,9 +4998,9 @@ INSERT INTO yudao_demo02_category (id, name, parent_id, creator, create_time, up
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS yudao_demo02_category_seq;
-CREATE SEQUENCE yudao_demo02_category_seq
- START 7;
+DROP SEQUENCE IF EXISTS yudao_demo03_course_seq;
+CREATE SEQUENCE yudao_demo03_course_seq
+ START 1;
-- ----------------------------
-- Table structure for yudao_demo03_course
@@ -5056,9 +5060,9 @@ INSERT INTO yudao_demo03_course (id, student_id, name, score, creator, create_ti
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS yudao_demo03_course_seq;
-CREATE SEQUENCE yudao_demo03_course_seq
- START 21;
+DROP SEQUENCE IF EXISTS yudao_demo03_grade_seq;
+CREATE SEQUENCE yudao_demo03_grade_seq
+ START 1;
-- ----------------------------
-- Table structure for yudao_demo03_grade
@@ -5104,9 +5108,9 @@ INSERT INTO yudao_demo03_grade (id, student_id, name, teacher, creator, create_t
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS yudao_demo03_grade_seq;
-CREATE SEQUENCE yudao_demo03_grade_seq
- START 10;
+DROP SEQUENCE IF EXISTS yudao_demo03_student_seq;
+CREATE SEQUENCE yudao_demo03_student_seq
+ START 1;
-- ----------------------------
-- Table structure for yudao_demo03_student
@@ -5154,7 +5158,3 @@ INSERT INTO yudao_demo03_student (id, name, sex, birthday, description, creator,
COMMIT;
-- @formatter:on
-DROP SEQUENCE IF EXISTS yudao_demo03_student_seq;
-CREATE SEQUENCE yudao_demo03_student_seq
- START 10;
-
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java
index 97819f9938..831bda1090 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java
@@ -30,7 +30,7 @@ public class PageParam implements Serializable {
@Schema(description = "每页条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
@NotNull(message = "每页条数不能为空")
@Min(value = 1, message = "每页条数最小值为 1")
- @Max(value = 100, message = "每页条数最大值为 100")
+ @Max(value = 200, message = "每页条数最大值为 200")
private Integer pageSize = PAGE_SIZE;
}
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java
index 3f662a85e7..47fa2b7242 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java
@@ -14,6 +14,7 @@ import org.springframework.web.util.UriComponentsBuilder;
import javax.servlet.http.HttpServletRequest;
import java.net.URI;
+import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
@@ -37,6 +38,16 @@ public class HttpUtils {
return URLEncoder.encode(value, StandardCharsets.UTF_8.name());
}
+ /**
+ * 解码 URL 参数
+ *
+ * @param value 参数
+ * @return 解码后的参数
+ */
+ public static String decodeUtf8(String value) {
+ return URLDecoder.decode(value, StandardCharsets.UTF_8);
+ }
+
@SuppressWarnings("unchecked")
public static String replaceUrlQuery(String url, String key, String value) {
UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset());
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java
index bed47e93bb..baefa50015 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java
@@ -23,16 +23,18 @@ public class TimestampLocalDateTimeSerializer extends JsonSerializer clazz = gen.getOutputContext().getCurrentValue().getClass();
- Field field = ReflectUtil.getField(clazz, fieldName);
// 情况一:有 JsonFormat 自定义注解,则使用它。https://github.com/YunaiV/ruoyi-vue-pro/pull/1019
- JsonFormat[] jsonFormats = field.getAnnotationsByType(JsonFormat.class);
- if (jsonFormats.length > 0) {
- String pattern = jsonFormats[0].pattern();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
- gen.writeString(formatter.format(value));
- return;
+ String fieldName = gen.getOutputContext().getCurrentName();
+ if (fieldName != null) {
+ Class> clazz = gen.getOutputContext().getCurrentValue().getClass();
+ Field field = ReflectUtil.getField(clazz, fieldName);
+ JsonFormat[] jsonFormats = field.getAnnotationsByType(JsonFormat.class);
+ if (jsonFormats.length > 0) {
+ String pattern = jsonFormats[0].pattern();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+ gen.writeString(formatter.format(value));
+ return;
+ }
}
// 情况二:默认将 LocalDateTime 对象,转换为 Long 时间戳
diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
index e1e0f86a6e..a3f54b6988 100644
--- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
+++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -922,16 +922,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
List returnUserTaskList = BpmnModelUtils.iteratorFindChildUserTasks(targetElement, runTaskKeyList, null, null);
List returnTaskKeyList = convertList(returnUserTaskList, UserTask::getId);
- List runExecutionIds = new ArrayList<>();
// 2. 给当前要被退回的 task 数组,设置退回意见
taskList.forEach(task -> {
// 需要排除掉,不需要设置退回意见的任务
if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) {
return;
}
- if (task.getExecutionId() != null) {
- runExecutionIds.add(task.getExecutionId());
- }
// 判断是否分配给自己任务,因为会签任务,一个节点会有多个任务
if (isAssignUserTask(userId, task)) { // 情况一:自己的任务,进行 RETURN 标记
@@ -955,7 +951,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 相关 issue:https://github.com/YunaiV/ruoyi-vue-pro/issues/1018
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(currentTask.getProcessInstanceId())
- .moveActivityIdsToSingleActivityId(runExecutionIds, reqVO.getTargetTaskDefinitionKey())
+ .moveActivityIdsToSingleActivityId(returnTaskKeyList, reqVO.getTargetTaskDefinitionKey())
// 设置需要预测的任务 ids 的流程变量,用于辅助预测
.processVariable(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS, needSimulateTaskDefinitionKeys)
// 设置流程变量(local)节点退回标记, 用于退回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略,导致自动通过
@@ -1467,7 +1463,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return;
}
- // 自动去重,通过自动审批的方式 TODO @芋艿 驳回的情况得考虑一下;@lesan:驳回后,又自动审批么?
+ // 自动去重,通过自动审批的方式
BpmProcessDefinitionInfoDO processDefinitionInfo = bpmProcessDefinitionService.getProcessDefinitionInfo(task.getProcessDefinitionId());
if (processDefinitionInfo == null) {
log.error("[processTaskAssigned][taskId({}) 没有找到流程定义({})]", task.getId(), task.getProcessDefinitionId());
diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java
index 94ba6a3ebb..74a9361f99 100644
--- a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java
+++ b/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 {
config.setDomain(buildDomain());
}
// 初始化 S3 客户端
- Region region = Region.of("us-east-1"); // 必须填,但填什么都行,常见的值有 "us-east-1",不填会报错
+ // 优先级:配置的 region > 从 endpoint 解析的 region > 默认值 us-east-1
+ String regionStr = resolveRegion();
+ Region region = Region.of(regionStr);
AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(
AwsBasicCredentials.create(config.getAccessKey(), config.getAccessSecret()));
URI endpoint = URI.create(buildEndpoint());
@@ -114,7 +116,7 @@ public class S3FileClient extends AbstractFileClient {
public String presignGetUrl(String url, Integer expirationSeconds) {
// 1. 将 url 转换为 path
String path = StrUtil.removePrefix(url, config.getDomain() + "/");
- path = HttpUtils.removeUrlQuery(path);
+ path = HttpUtils.decodeUtf8(HttpUtils.removeUrlQuery(path));
// 2.1 情况一:公开访问:无需签名
// 考虑到老版本的兼容,所以必须是 config.getEnablePublicAccess() 为 false 时,才进行签名
@@ -159,4 +161,73 @@ public class S3FileClient extends AbstractFileClient {
return StrUtil.format("https://{}", config.getEndpoint());
}
+ /**
+ * 解析 AWS 区域
+ * 优先级:配置的 region > 从 endpoint 解析的 region > 默认值 us-east-1
+ *
+ * @return 区域字符串
+ */
+ private String resolveRegion() {
+ // 1. 如果配置了 region,直接使用
+ if (StrUtil.isNotEmpty(config.getRegion())) {
+ return config.getRegion();
+ }
+
+ // 2.1 尝试从 endpoint 中解析 region
+ String endpoint = config.getEndpoint();
+ if (StrUtil.isEmpty(endpoint)) {
+ return "us-east-1";
+ }
+
+ // 2.2 移除协议头(http:// 或 https://)
+ String host = endpoint;
+ if (HttpUtil.isHttp(endpoint) || HttpUtil.isHttps(endpoint)) {
+ try {
+ host = URI.create(endpoint).getHost();
+ } catch (Exception e) {
+ // 解析失败,使用默认值
+ return "us-east-1";
+ }
+ }
+ if (StrUtil.isEmpty(host)) {
+ return "us-east-1";
+ }
+
+ // 3.1 AWS S3 格式:s3.us-west-2.amazonaws.com 或 s3.amazonaws.com
+ if (host.contains("amazonaws.com")) {
+ // 匹配 s3.{region}.amazonaws.com 格式
+ if (host.startsWith("s3.") && host.contains(".amazonaws.com")) {
+ String regionPart = host.substring(3, host.indexOf(".amazonaws.com"));
+ if (StrUtil.isNotEmpty(regionPart) && !regionPart.equals("accelerate")) {
+ return regionPart;
+ }
+ }
+ // s3.amazonaws.com 或 s3-accelerate.amazonaws.com 使用默认值
+ return "us-east-1";
+ }
+ // 3.2 阿里云 OSS 格式:oss-cn-beijing.aliyuncs.com
+ if (host.contains(S3FileClientConfig.ENDPOINT_ALIYUN)) {
+ // 匹配 oss-{region}.aliyuncs.com 格式
+ if (host.startsWith("oss-") && host.contains("." + S3FileClientConfig.ENDPOINT_ALIYUN)) {
+ String regionPart = host.substring(4, host.indexOf("." + S3FileClientConfig.ENDPOINT_ALIYUN));
+ if (StrUtil.isNotEmpty(regionPart)) {
+ return regionPart;
+ }
+ }
+ }
+ // 3.3 腾讯云 COS 格式:cos.ap-shanghai.myqcloud.com
+ if (host.contains(S3FileClientConfig.ENDPOINT_TENCENT)) {
+ // 匹配 cos.{region}.myqcloud.com 格式
+ if (host.startsWith("cos.") && host.contains("." + S3FileClientConfig.ENDPOINT_TENCENT)) {
+ String regionPart = host.substring(4, host.indexOf("." + S3FileClientConfig.ENDPOINT_TENCENT));
+ if (StrUtil.isNotEmpty(regionPart)) {
+ return regionPart;
+ }
+ }
+ }
+
+ // 3.4 其他情况(MinIO、七牛云等)使用默认值
+ return "us-east-1";
+ }
+
}
diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClientConfig.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClientConfig.java
index ba703ff3a8..3a17a2c89d 100644
--- a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClientConfig.java
+++ b/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 {
@NotNull(message = "是否公开访问不能为空")
private Boolean enablePublicAccess;
+ /**
+ * 区域
+ * 1. AWS S3:https://docs.aws.amazon.com/general/latest/gr/s3.html 例如说,us-east-1、us-west-2
+ * 2. MinIO:可以填任意值,通常使用 us-east-1
+ * 3. 阿里云:不需要填写,会自动识别
+ * 4. 腾讯云:不需要填写,会自动识别
+ * 5. 七牛云:不需要填写,会自动识别
+ * 6. 华为云:不需要填写,会自动识别
+ * 7. 火山云:不需要填写,会自动识别
+ */
+ private String region;
+
@SuppressWarnings("RedundantIfStatement")
@AssertTrue(message = "domain 不能为空")
@JsonIgnore
diff --git a/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/vo/message/KeFuMessageListReqVO.java b/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/vo/message/KeFuMessageListReqVO.java
index 34bd5c83cb..588643e780 100644
--- a/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/vo/message/KeFuMessageListReqVO.java
+++ b/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/vo/message/KeFuMessageListReqVO.java
@@ -28,7 +28,7 @@ public class KeFuMessageListReqVO {
@Schema(description = "每次查询条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
@NotNull(message = "每次查询条数不能为空")
@Min(value = 1, message = "每次查询条数最小值为 1")
- @Max(value = 100, message = "每次查询最大值为 100")
+ @Max(value = 200, message = "每次查询最大值为 200")
private Integer limit = LIMIT;
}
\ No newline at end of file
diff --git a/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/vo/message/AppKeFuMessagePageReqVO.java b/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/vo/message/AppKeFuMessagePageReqVO.java
index 240f38be8b..6a6af8dbc1 100644
--- a/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/vo/message/AppKeFuMessagePageReqVO.java
+++ b/yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/vo/message/AppKeFuMessagePageReqVO.java
@@ -27,7 +27,7 @@ public class AppKeFuMessagePageReqVO {
@Schema(description = "每次查询条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
@NotNull(message = "每次查询条数不能为空")
@Min(value = 1, message = "每次查询条数最小值为 1")
- @Max(value = 100, message = "每次查询最大值为 100")
+ @Max(value = 200, message = "每次查询最大值为 200")
private Integer limit = LIMIT;
}
\ No newline at end of file