Commit d256275099a57a95ae36cbf883298b637e2fd7be

Authored by YunaiV
1 parent 5842a361

saas:支持社交应用的多租户配置

Showing 17 changed files with 375 additions and 140 deletions
sql/mysql/ruoyi-vue-pro.sql
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 Target Server Version : 80034 11 Target Server Version : 80034
12 File Encoding : 65001 12 File Encoding : 65001
13 13
14 - Date: 17/10/2023 23:22:59 14 + Date: 18/10/2023 23:33:15
15 */ 15 */
16 16
17 SET NAMES utf8mb4; 17 SET NAMES utf8mb4;
@@ -384,7 +384,7 @@ CREATE TABLE `infra_api_error_log` ( @@ -384,7 +384,7 @@ CREATE TABLE `infra_api_error_log` (
384 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 384 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
385 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 385 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
386 PRIMARY KEY (`id`) USING BTREE 386 PRIMARY KEY (`id`) USING BTREE
387 -) ENGINE = InnoDB AUTO_INCREMENT = 1735 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统异常日志'; 387 +) ENGINE = InnoDB AUTO_INCREMENT = 1739 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统异常日志';
388 388
389 -- ---------------------------- 389 -- ----------------------------
390 -- Records of infra_api_error_log 390 -- Records of infra_api_error_log
@@ -422,7 +422,7 @@ CREATE TABLE `infra_codegen_column` ( @@ -422,7 +422,7 @@ CREATE TABLE `infra_codegen_column` (
422 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 422 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
423 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 423 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
424 PRIMARY KEY (`id`) USING BTREE 424 PRIMARY KEY (`id`) USING BTREE
425 -) ENGINE = InnoDB AUTO_INCREMENT = 1804 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表字段定义'; 425 +) ENGINE = InnoDB AUTO_INCREMENT = 1805 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表字段定义';
426 426
427 -- ---------------------------- 427 -- ----------------------------
428 -- Records of infra_codegen_column 428 -- Records of infra_codegen_column
@@ -455,7 +455,7 @@ CREATE TABLE `infra_codegen_table` ( @@ -455,7 +455,7 @@ CREATE TABLE `infra_codegen_table` (
455 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 455 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
456 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 456 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
457 PRIMARY KEY (`id`) USING BTREE 457 PRIMARY KEY (`id`) USING BTREE
458 -) ENGINE = InnoDB AUTO_INCREMENT = 136 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表定义'; 458 +) ENGINE = InnoDB AUTO_INCREMENT = 137 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表定义';
459 459
460 -- ---------------------------- 460 -- ----------------------------
461 -- Records of infra_codegen_table 461 -- Records of infra_codegen_table
@@ -615,7 +615,7 @@ CREATE TABLE `infra_job` ( @@ -615,7 +615,7 @@ CREATE TABLE `infra_job` (
615 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 615 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
616 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 616 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
617 PRIMARY KEY (`id`) USING BTREE 617 PRIMARY KEY (`id`) USING BTREE
618 -) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务表'; 618 +) ENGINE = InnoDB AUTO_INCREMENT = 28 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务表';
619 619
620 -- ---------------------------- 620 -- ----------------------------
621 -- Records of infra_job 621 -- Records of infra_job
@@ -656,7 +656,7 @@ CREATE TABLE `infra_job_log` ( @@ -656,7 +656,7 @@ CREATE TABLE `infra_job_log` (
656 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 656 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
657 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 657 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
658 PRIMARY KEY (`id`) USING BTREE 658 PRIMARY KEY (`id`) USING BTREE
659 -) ENGINE = InnoDB AUTO_INCREMENT = 232 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务日志表'; 659 +) ENGINE = InnoDB AUTO_INCREMENT = 233 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务日志表';
660 660
661 -- ---------------------------- 661 -- ----------------------------
662 -- Records of infra_job_log 662 -- Records of infra_job_log
@@ -709,7 +709,7 @@ CREATE TABLE `member_address` ( @@ -709,7 +709,7 @@ CREATE TABLE `member_address` (
709 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 709 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
710 PRIMARY KEY (`id`) USING BTREE, 710 PRIMARY KEY (`id`) USING BTREE,
711 INDEX `idx_userId`(`user_id` ASC) USING BTREE 711 INDEX `idx_userId`(`user_id` ASC) USING BTREE
712 -) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户收件地址'; 712 +) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户收件地址';
713 713
714 -- ---------------------------- 714 -- ----------------------------
715 -- Records of member_address 715 -- Records of member_address
@@ -768,7 +768,7 @@ CREATE TABLE `member_experience_record` ( @@ -768,7 +768,7 @@ CREATE TABLE `member_experience_record` (
768 PRIMARY KEY (`id`) USING BTREE, 768 PRIMARY KEY (`id`) USING BTREE,
769 INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员经验记录-用户编号', 769 INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员经验记录-用户编号',
770 INDEX `idx_user_biz_type`(`user_id` ASC, `biz_type` ASC) USING BTREE COMMENT '会员经验记录-用户业务类型' 770 INDEX `idx_user_biz_type`(`user_id` ASC, `biz_type` ASC) USING BTREE COMMENT '会员经验记录-用户业务类型'
771 -) ENGINE = InnoDB AUTO_INCREMENT = 40 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员经验记录'; 771 +) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员经验记录';
772 772
773 -- ---------------------------- 773 -- ----------------------------
774 -- Records of member_experience_record 774 -- Records of member_experience_record
@@ -883,7 +883,7 @@ CREATE TABLE `member_level_record` ( @@ -883,7 +883,7 @@ CREATE TABLE `member_level_record` (
883 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 883 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
884 PRIMARY KEY (`id`) USING BTREE, 884 PRIMARY KEY (`id`) USING BTREE,
885 INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员等级记录-用户编号' 885 INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '会员等级记录-用户编号'
886 -) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员等级记录'; 886 +) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员等级记录';
887 887
888 -- ---------------------------- 888 -- ----------------------------
889 -- Records of member_level_record 889 -- Records of member_level_record
@@ -913,7 +913,7 @@ CREATE TABLE `member_point_record` ( @@ -913,7 +913,7 @@ CREATE TABLE `member_point_record` (
913 PRIMARY KEY (`id`) USING BTREE, 913 PRIMARY KEY (`id`) USING BTREE,
914 INDEX `index_userId`(`user_id` ASC) USING BTREE, 914 INDEX `index_userId`(`user_id` ASC) USING BTREE,
915 INDEX `index_title`(`title` ASC) USING BTREE 915 INDEX `index_title`(`title` ASC) USING BTREE
916 -) ENGINE = InnoDB AUTO_INCREMENT = 59 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户积分记录'; 916 +) ENGINE = InnoDB AUTO_INCREMENT = 60 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户积分记录';
917 917
918 -- ---------------------------- 918 -- ----------------------------
919 -- Records of member_point_record 919 -- Records of member_point_record
@@ -1540,7 +1540,7 @@ CREATE TABLE `system_error_code` ( @@ -1540,7 +1540,7 @@ CREATE TABLE `system_error_code` (
1540 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 1540 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
1541 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 1541 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
1542 PRIMARY KEY (`id`) USING BTREE 1542 PRIMARY KEY (`id`) USING BTREE
1543 -) ENGINE = InnoDB AUTO_INCREMENT = 5932 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '错误码表'; 1543 +) ENGINE = InnoDB AUTO_INCREMENT = 5933 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '错误码表';
1544 1544
1545 -- ---------------------------- 1545 -- ----------------------------
1546 -- Records of system_error_code 1546 -- Records of system_error_code
@@ -1569,7 +1569,7 @@ CREATE TABLE `system_login_log` ( @@ -1569,7 +1569,7 @@ CREATE TABLE `system_login_log` (
1569 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 1569 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
1570 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 1570 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
1571 PRIMARY KEY (`id`) USING BTREE 1571 PRIMARY KEY (`id`) USING BTREE
1572 -) ENGINE = InnoDB AUTO_INCREMENT = 2582 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录'; 1572 +) ENGINE = InnoDB AUTO_INCREMENT = 2599 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录';
1573 1573
1574 -- ---------------------------- 1574 -- ----------------------------
1575 -- Records of system_login_log 1575 -- Records of system_login_log
@@ -1634,7 +1634,7 @@ CREATE TABLE `system_mail_log` ( @@ -1634,7 +1634,7 @@ CREATE TABLE `system_mail_log` (
1634 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 1634 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
1635 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 1635 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
1636 PRIMARY KEY (`id`) USING BTREE 1636 PRIMARY KEY (`id`) USING BTREE
1637 -) ENGINE = InnoDB AUTO_INCREMENT = 354 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件日志表'; 1637 +) ENGINE = InnoDB AUTO_INCREMENT = 355 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件日志表';
1638 1638
1639 -- ---------------------------- 1639 -- ----------------------------
1640 -- Records of system_mail_log 1640 -- Records of system_mail_log
@@ -2283,7 +2283,7 @@ CREATE TABLE `system_notify_template` ( @@ -2283,7 +2283,7 @@ CREATE TABLE `system_notify_template` (
2283 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 2283 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2284 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 2284 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
2285 PRIMARY KEY (`id`) USING BTREE 2285 PRIMARY KEY (`id`) USING BTREE
2286 -) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '站内信模板表'; 2286 +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '站内信模板表';
2287 2287
2288 -- ---------------------------- 2288 -- ----------------------------
2289 -- Records of system_notify_template 2289 -- Records of system_notify_template
@@ -2311,7 +2311,7 @@ CREATE TABLE `system_oauth2_access_token` ( @@ -2311,7 +2311,7 @@ CREATE TABLE `system_oauth2_access_token` (
2311 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 2311 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
2312 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 2312 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
2313 PRIMARY KEY (`id`) USING BTREE 2313 PRIMARY KEY (`id`) USING BTREE
2314 -) ENGINE = InnoDB AUTO_INCREMENT = 3056 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌'; 2314 +) ENGINE = InnoDB AUTO_INCREMENT = 3063 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌';
2315 2315
2316 -- ---------------------------- 2316 -- ----------------------------
2317 -- Records of system_oauth2_access_token 2317 -- Records of system_oauth2_access_token
@@ -2433,7 +2433,7 @@ CREATE TABLE `system_oauth2_refresh_token` ( @@ -2433,7 +2433,7 @@ CREATE TABLE `system_oauth2_refresh_token` (
2433 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 2433 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
2434 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 2434 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
2435 PRIMARY KEY (`id`) USING BTREE 2435 PRIMARY KEY (`id`) USING BTREE
2436 -) ENGINE = InnoDB AUTO_INCREMENT = 1063 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌'; 2436 +) ENGINE = InnoDB AUTO_INCREMENT = 1070 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌';
2437 2437
2438 -- ---------------------------- 2438 -- ----------------------------
2439 -- Records of system_oauth2_refresh_token 2439 -- Records of system_oauth2_refresh_token
@@ -3481,7 +3481,7 @@ CREATE TABLE `system_sms_code` ( @@ -3481,7 +3481,7 @@ CREATE TABLE `system_sms_code` (
3481 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 3481 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
3482 PRIMARY KEY (`id`) USING BTREE, 3482 PRIMARY KEY (`id`) USING BTREE,
3483 INDEX `idx_mobile`(`mobile` ASC) USING BTREE COMMENT '手机号' 3483 INDEX `idx_mobile`(`mobile` ASC) USING BTREE COMMENT '手机号'
3484 -) ENGINE = InnoDB AUTO_INCREMENT = 530 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '手机验证码'; 3484 +) ENGINE = InnoDB AUTO_INCREMENT = 531 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '手机验证码';
3485 3485
3486 -- ---------------------------- 3486 -- ----------------------------
3487 -- Records of system_sms_code 3487 -- Records of system_sms_code
@@ -3575,6 +3575,33 @@ INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `cont @@ -3575,6 +3575,33 @@ INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `cont
3575 COMMIT; 3575 COMMIT;
3576 3576
3577 -- ---------------------------- 3577 -- ----------------------------
  3578 +-- Table structure for system_social_client
  3579 +-- ----------------------------
  3580 +DROP TABLE IF EXISTS `system_social_client`;
  3581 +CREATE TABLE `system_social_client` (
  3582 + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  3583 + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名',
  3584 + `social_type` tinyint NOT NULL COMMENT '社交平台的类型',
  3585 + `user_type` tinyint NOT NULL COMMENT '用户类型',
  3586 + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号',
  3587 + `client_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端密钥',
  3588 + `status` tinyint NOT NULL COMMENT '状态',
  3589 + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
  3590 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  3591 + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
  3592 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  3593 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  3594 + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  3595 + PRIMARY KEY (`id`) USING BTREE
  3596 +) ENGINE = InnoDB AUTO_INCREMENT = 43 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交客户端表';
  3597 +
  3598 +-- ----------------------------
  3599 +-- Records of system_social_client
  3600 +-- ----------------------------
  3601 +BEGIN;
  3602 +COMMIT;
  3603 +
  3604 +-- ----------------------------
3578 -- Table structure for system_social_user 3605 -- Table structure for system_social_user
3579 -- ---------------------------- 3606 -- ----------------------------
3580 DROP TABLE IF EXISTS `system_social_user`; 3607 DROP TABLE IF EXISTS `system_social_user`;
@@ -3596,7 +3623,7 @@ CREATE TABLE `system_social_user` ( @@ -3596,7 +3623,7 @@ CREATE TABLE `system_social_user` (
3596 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 3623 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
3597 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 3624 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
3598 PRIMARY KEY (`id`) USING BTREE 3625 PRIMARY KEY (`id`) USING BTREE
3599 -) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交用户表'; 3626 +) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交用户表';
3600 3627
3601 -- ---------------------------- 3628 -- ----------------------------
3602 -- Records of system_social_user 3629 -- Records of system_social_user
@@ -3621,7 +3648,7 @@ CREATE TABLE `system_social_user_bind` ( @@ -3621,7 +3648,7 @@ CREATE TABLE `system_social_user_bind` (
3621 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', 3648 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
3622 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', 3649 `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
3623 PRIMARY KEY (`id`) USING BTREE 3650 PRIMARY KEY (`id`) USING BTREE
3624 -) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交绑定表'; 3651 +) ENGINE = InnoDB AUTO_INCREMENT = 79 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交绑定表';
3625 3652
3626 -- ---------------------------- 3653 -- ----------------------------
3627 -- Records of system_social_user_bind 3654 -- Records of system_social_user_bind
@@ -3797,7 +3824,7 @@ CREATE TABLE `system_users` ( @@ -3797,7 +3824,7 @@ CREATE TABLE `system_users` (
3797 -- Records of system_users 3824 -- Records of system_users
3798 -- ---------------------------- 3825 -- ----------------------------
3799 BEGIN; 3826 BEGIN;
3800 -INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/e1fdd7271685ec143a0900681606406621717a666ad0b2798b096df41422b32f.png', 0, '0:0:0:0:0:0:0:1', '2023-10-17 21:03:03', 'admin', '2021-01-05 17:03:47', NULL, '2023-10-17 21:03:03', b'0', 1); 3827 +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/e1fdd7271685ec143a0900681606406621717a666ad0b2798b096df41422b32f.png', 0, '0:0:0:0:0:0:0:1', '2023-10-18 22:31:35', 'admin', '2021-01-05 17:03:47', NULL, '2023-10-18 22:31:35', b'0', 1);
3801 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', b'0', 1); 3828 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', b'0', 1);
3802 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-07-08 01:26:27', '', '2021-01-13 23:50:35', NULL, '2022-07-08 01:26:27', b'0', 1); 3829 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-07-08 01:26:27', '', '2021-01-13 23:50:35', NULL, '2022-07-08 01:26:27', b'0', 1);
3803 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$10$GP8zvqHB//TekuzYZSBYAuBQJiNq1.fxQVDYJ.uBCOnWCtDVKE4H6', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2023-09-24 18:21:19', '', '2021-01-21 02:13:53', NULL, '2023-09-24 18:21:19', b'0', 1); 3830 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$10$GP8zvqHB//TekuzYZSBYAuBQJiNq1.fxQVDYJ.uBCOnWCtDVKE4H6', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2023-09-24 18:21:19', '', '2021-01-21 02:13:53', NULL, '2023-09-24 18:21:19', b'0', 1);
@@ -3805,7 +3832,7 @@ INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, @@ -3805,7 +3832,7 @@ INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`,
3805 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', b'0', 119); 3832 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', b'0', 119);
3806 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', b'0', 120); 3833 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', b'0', 120);
3807 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-09-25 22:47:33', '1', '2022-02-22 00:56:14', NULL, '2022-09-25 22:47:33', b'0', 121); 3834 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-09-25 22:47:33', '1', '2022-02-22 00:56:14', NULL, '2022-09-25 22:47:33', b'0', 121);
3808 -INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '110', '2022-02-23 13:14:33', '110', '2022-02-23 13:14:33', b'0', 121); 3835 +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, 'test', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2023-10-18 23:31:51', '110', '2022-02-23 13:14:33', NULL, '2023-10-18 23:31:51', b'0', 121);
3809 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 'newobject', '$2a$10$3alwklxqfq8/hKoW6oUV0OJp0IdQpBDauLy4633SpUjrRsStl6kMa', '新对象', NULL, 100, '[]', '', '', 1, '', 0, '0:0:0:0:0:0:0:1', '2023-02-10 13:48:13', '1', '2022-02-23 19:08:03', NULL, '2023-02-10 13:48:13', b'0', 1); 3836 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 'newobject', '$2a$10$3alwklxqfq8/hKoW6oUV0OJp0IdQpBDauLy4633SpUjrRsStl6kMa', '新对象', NULL, 100, '[]', '', '', 1, '', 0, '0:0:0:0:0:0:0:1', '2023-02-10 13:48:13', '1', '2022-02-23 19:08:03', NULL, '2023-02-10 13:48:13', b'0', 1);
3810 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', b'0', 122); 3837 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', b'0', 122);
3811 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', '', '', 0, '', 0, '127.0.0.1', '2022-03-19 22:15:43', '1', '2022-03-19 21:50:58', NULL, '2022-03-19 22:15:43', b'0', 1); 3838 INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', '', '', 0, '', 0, '127.0.0.1', '2022-03-19 22:15:43', '1', '2022-03-19 21:50:58', NULL, '2022-03-19 22:15:43', b'0', 1);
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/core/aop/TradeOrderLogAspect.java
@@ -58,10 +58,6 @@ public class TradeOrderLogAspect { @@ -58,10 +58,6 @@ public class TradeOrderLogAspect {
58 */ 58 */
59 private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>(); 59 private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>();
60 60
61 - public TradeOrderLogAspect() {  
62 - System.out.println();  
63 - }  
64 -  
65 @Resource 61 @Resource
66 private TradeOrderLogService orderLogService; 62 private TradeOrderLogService orderLogService;
67 63
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java
@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; @@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
19 import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO; 19 import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO;
20 import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO; 20 import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO;
21 import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; 21 import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
  22 +import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
22 import cn.iocoder.yudao.module.system.api.social.SocialUserApi; 23 import cn.iocoder.yudao.module.system.api.social.SocialUserApi;
23 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; 24 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
24 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; 25 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
@@ -56,6 +57,8 @@ public class MemberAuthServiceImpl implements MemberAuthService { @@ -56,6 +57,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
56 @Resource 57 @Resource
57 private SocialUserApi socialUserApi; 58 private SocialUserApi socialUserApi;
58 @Resource 59 @Resource
  60 + private SocialClientApi socialClientApi;
  61 + @Resource
59 private OAuth2TokenApi oauth2TokenApi; 62 private OAuth2TokenApi oauth2TokenApi;
60 63
61 @Resource 64 @Resource
@@ -154,7 +157,7 @@ public class MemberAuthServiceImpl implements MemberAuthService { @@ -154,7 +157,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
154 157
155 @Override 158 @Override
156 public String getSocialAuthorizeUrl(Integer type, String redirectUri) { 159 public String getSocialAuthorizeUrl(Integer type, String redirectUri) {
157 - return socialUserApi.getAuthorizeUrl(type, redirectUri); 160 + return socialClientApi.getAuthorizeUrl(type, UserTypeEnum.MEMBER.getValue(), redirectUri);
158 } 161 }
159 162
160 private MemberUserDO login0(String mobile, String password) { 163 private MemberUserDO login0(String mobile, String password) {
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.social;
  2 +
  3 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  4 +
  5 +/**
  6 + * 社交应用的 API 接口
  7 + *
  8 + * @author 芋道源码
  9 + */
  10 +public interface SocialClientApi {
  11 +
  12 + /**
  13 + * 获得社交平台的授权 URL
  14 + *
  15 + * @param type 社交平台的类型 {@link SocialTypeEnum}
  16 + * @param userType 用户类型
  17 + * @param redirectUri 重定向 URL
  18 + * @return 社交平台的授权 URL
  19 + */
  20 + String getAuthorizeUrl(Integer type, Integer userType, String redirectUri);
  21 +
  22 +}
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java
@@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException; @@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException;
4 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; 4 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
5 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; 5 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
6 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; 6 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO;
7 -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;  
8 7
9 import javax.validation.Valid; 8 import javax.validation.Valid;
10 9
@@ -16,15 +15,6 @@ import javax.validation.Valid; @@ -16,15 +15,6 @@ import javax.validation.Valid;
16 public interface SocialUserApi { 15 public interface SocialUserApi {
17 16
18 /** 17 /**
19 - * 获得社交平台的授权 URL  
20 - *  
21 - * @param type 社交平台的类型 {@link SocialTypeEnum}  
22 - * @param redirectUri 重定向 URL  
23 - * @return 社交平台的授权 URL  
24 - */  
25 - String getAuthorizeUrl(Integer type, String redirectUri);  
26 -  
27 - /**  
28 * 绑定社交用户 18 * 绑定社交用户
29 * 19 *
30 * @param reqDTO 绑定信息 20 * @param reqDTO 绑定信息
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java
@@ -37,7 +37,7 @@ public class SocialUserBindReqDTO { @@ -37,7 +37,7 @@ public class SocialUserBindReqDTO {
37 */ 37 */
38 @InEnum(SocialTypeEnum.class) 38 @InEnum(SocialTypeEnum.class)
39 @NotNull(message = "社交平台的类型不能为空") 39 @NotNull(message = "社交平台的类型不能为空")
40 - private Integer type; 40 + private Integer socialType;
41 /** 41 /**
42 * 授权码 42 * 授权码
43 */ 43 */
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java
@@ -33,12 +33,12 @@ public class SocialUserUnbindReqDTO { @@ -33,12 +33,12 @@ public class SocialUserUnbindReqDTO {
33 */ 33 */
34 @InEnum(SocialTypeEnum.class) 34 @InEnum(SocialTypeEnum.class)
35 @NotNull(message = "社交平台的类型不能为空") 35 @NotNull(message = "社交平台的类型不能为空")
36 - private Integer type; 36 + private Integer socialType;
37 37
38 /** 38 /**
39 - * 社交平台的 unionId 39 + * 社交平台的 openid
40 */ 40 */
41 - @NotEmpty(message = "社交平台的 unionId 不能为空")  
42 - private String unionId; 41 + @NotEmpty(message = "社交平台的 openid 不能为空")
  42 + private String openid;
43 43
44 } 44 }
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/social/SocialTypeEnum.java
@@ -18,33 +18,39 @@ public enum SocialTypeEnum implements IntArrayValuable { @@ -18,33 +18,39 @@ public enum SocialTypeEnum implements IntArrayValuable {
18 18
19 /** 19 /**
20 * Gitee 20 * Gitee
21 - * 文档链接:https://gitee.com/api/v5/oauth_doc#/ 21 + *
  22 + * @see <a href="https://gitee.com/api/v5/oauth_doc#/">接入文档</a>
22 */ 23 */
23 GITEE(10, "GITEE"), 24 GITEE(10, "GITEE"),
24 /** 25 /**
25 * 钉钉 26 * 钉钉
26 - * 文档链接:https://developers.dingtalk.com/document/app/obtain-identity-credentials 27 + *
  28 + * @see <a href="https://developers.dingtalk.com/document/app/obtain-identity-credentials">接入文档</a>
27 */ 29 */
28 DINGTALK(20, "DINGTALK"), 30 DINGTALK(20, "DINGTALK"),
29 31
30 /** 32 /**
31 * 企业微信 33 * 企业微信
32 - * 文档链接:https://xkcoding.com/2019/08/06/use-justauth-integration-wechat-enterprise.html 34 + *
  35 + * @see <a href="https://xkcoding.com/2019/08/06/use-justauth-integration-wechat-enterprise.html">接入文档</a>
33 */ 36 */
34 WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"), 37 WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"),
35 /** 38 /**
36 * 微信公众平台 - 移动端 H5 39 * 微信公众平台 - 移动端 H5
37 - * 文档链接:https://www.cnblogs.com/juewuzhe/p/11905461.html 40 + *
  41 + * @see <a href="https://www.cnblogs.com/juewuzhe/p/11905461.html">接入文档</a>
38 */ 42 */
39 WECHAT_MP(31, "WECHAT_MP"), 43 WECHAT_MP(31, "WECHAT_MP"),
40 /** 44 /**
41 * 微信开放平台 - 网站应用 PC 端扫码授权登录 45 * 微信开放平台 - 网站应用 PC 端扫码授权登录
42 - * 文档链接:https://justauth.wiki/guide/oauth/wechat_open/#_2-申请开发者资质认证 46 + *
  47 + * @see <a href="https://justauth.wiki/guide/oauth/wechat_open/#_2-申请开发者资质认证">接入文档</a>
43 */ 48 */
44 WECHAT_OPEN(32, "WECHAT_OPEN"), 49 WECHAT_OPEN(32, "WECHAT_OPEN"),
45 /** 50 /**
46 * 微信小程序 51 * 微信小程序
47 - * 文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 52 + *
  53 + * @see <a href="https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html">接入文档</a>
48 */ 54 */
49 WECHAT_MINI_APP(34, "WECHAT_MINI_APP"), 55 WECHAT_MINI_APP(34, "WECHAT_MINI_APP"),
50 ; 56 ;
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.social;
  2 +
  3 +import cn.iocoder.yudao.module.system.service.social.SocialClientService;
  4 +import org.springframework.stereotype.Service;
  5 +import org.springframework.validation.annotation.Validated;
  6 +
  7 +import javax.annotation.Resource;
  8 +
  9 +/**
  10 + * 社交应用的 API 实现类
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Service
  15 +@Validated
  16 +public class SocialClientApiImpl implements SocialClientApi {
  17 +
  18 + @Resource
  19 + private SocialClientService socialClientService;
  20 +
  21 + @Override
  22 + public String getAuthorizeUrl(Integer type, Integer userType, String redirectUri) {
  23 + return socialClientService.getAuthorizeUrl(type, userType, redirectUri);
  24 + }
  25 +
  26 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java
@@ -22,11 +22,6 @@ public class SocialUserApiImpl implements SocialUserApi { @@ -22,11 +22,6 @@ public class SocialUserApiImpl implements SocialUserApi {
22 private SocialUserService socialUserService; 22 private SocialUserService socialUserService;
23 23
24 @Override 24 @Override
25 - public String getAuthorizeUrl(Integer type, String redirectUri) {  
26 - return socialUserService.getAuthorizeUrl(type, redirectUri);  
27 - }  
28 -  
29 - @Override  
30 public String bindSocialUser(SocialUserBindReqDTO reqDTO) { 25 public String bindSocialUser(SocialUserBindReqDTO reqDTO) {
31 return socialUserService.bindSocialUser(reqDTO); 26 return socialUserService.bindSocialUser(reqDTO);
32 } 27 }
@@ -34,7 +29,7 @@ public class SocialUserApiImpl implements SocialUserApi { @@ -34,7 +29,7 @@ public class SocialUserApiImpl implements SocialUserApi {
34 @Override 29 @Override
35 public void unbindSocialUser(SocialUserUnbindReqDTO reqDTO) { 30 public void unbindSocialUser(SocialUserUnbindReqDTO reqDTO) {
36 socialUserService.unbindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), 31 socialUserService.unbindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(),
37 - reqDTO.getType(), reqDTO.getUnionId()); 32 + reqDTO.getSocialType(), reqDTO.getOpenid());
38 } 33 }
39 34
40 @Override 35 @Override
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.auth; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.auth;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  6 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
6 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
7 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; 8 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
8 import cn.iocoder.yudao.framework.security.config.SecurityProperties; 9 import cn.iocoder.yudao.framework.security.config.SecurityProperties;
@@ -16,7 +17,7 @@ import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; @@ -16,7 +17,7 @@ import cn.iocoder.yudao.module.system.service.auth.AdminAuthService;
16 import cn.iocoder.yudao.module.system.service.permission.MenuService; 17 import cn.iocoder.yudao.module.system.service.permission.MenuService;
17 import cn.iocoder.yudao.module.system.service.permission.PermissionService; 18 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
18 import cn.iocoder.yudao.module.system.service.permission.RoleService; 19 import cn.iocoder.yudao.module.system.service.permission.RoleService;
19 -import cn.iocoder.yudao.module.system.service.social.SocialUserService; 20 +import cn.iocoder.yudao.module.system.service.social.SocialClientService;
20 import cn.iocoder.yudao.module.system.service.user.AdminUserService; 21 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
21 import io.swagger.v3.oas.annotations.Operation; 22 import io.swagger.v3.oas.annotations.Operation;
22 import io.swagger.v3.oas.annotations.Parameter; 23 import io.swagger.v3.oas.annotations.Parameter;
@@ -57,7 +58,7 @@ public class AuthController { @@ -57,7 +58,7 @@ public class AuthController {
57 @Resource 58 @Resource
58 private PermissionService permissionService; 59 private PermissionService permissionService;
59 @Resource 60 @Resource
60 - private SocialUserService socialUserService; 61 + private SocialClientService socialClientService;
61 62
62 @Resource 63 @Resource
63 private SecurityProperties securityProperties; 64 private SecurityProperties securityProperties;
@@ -147,7 +148,7 @@ public class AuthController { @@ -147,7 +148,7 @@ public class AuthController {
147 }) 148 })
148 public CommonResult<String> socialLogin(@RequestParam("type") Integer type, 149 public CommonResult<String> socialLogin(@RequestParam("type") Integer type,
149 @RequestParam("redirectUri") String redirectUri) { 150 @RequestParam("redirectUri") String redirectUri) {
150 - return CommonResult.success(socialUserService.getAuthorizeUrl(type, redirectUri)); 151 + return success(socialClientService.getAuthorizeUrl(type, UserTypeEnum.ADMIN.getValue(), redirectUri));
151 } 152 }
152 153
153 @PostMapping("/social-login") 154 @PostMapping("/social-login")
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SocialClientDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.dal.dataobject.social;
  2 +
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  5 +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
  6 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  7 +import com.baomidou.mybatisplus.annotation.KeySequence;
  8 +import com.baomidou.mybatisplus.annotation.TableId;
  9 +import com.baomidou.mybatisplus.annotation.TableName;
  10 +import com.xingyuv.jushauth.config.AuthConfig;
  11 +import lombok.*;
  12 +
  13 +/**
  14 + * 社交客户端 DO
  15 + *
  16 + * 对应 {@link AuthConfig} 配置,满足不同租户,有自己的客户端配置,实现社交(三方)登录
  17 + *
  18 + * @author 芋道源码
  19 + */
  20 +@TableName(value = "system_social_client", autoResultMap = true)
  21 +@KeySequence("system_social_client_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  22 +@Data
  23 +@EqualsAndHashCode(callSuper = true)
  24 +@Builder
  25 +@NoArgsConstructor
  26 +@AllArgsConstructor
  27 +public class SocialClientDO extends TenantBaseDO {
  28 +
  29 + /**
  30 + * 编号,自增
  31 + */
  32 + @TableId
  33 + private Long id;
  34 + /**
  35 + * 应用名
  36 + */
  37 + private String name;
  38 + /**
  39 + * 社交类型
  40 + *
  41 + * 枚举 {@link SocialTypeEnum}
  42 + */
  43 + private Integer socialType;
  44 + /**
  45 + * 用户类型
  46 + *
  47 + * 目的:不同用户类型,对应不同的小程序,需要自己的配置
  48 + *
  49 + * 枚举 {@link UserTypeEnum}
  50 + */
  51 + private Integer userType;
  52 + /**
  53 + * 状态
  54 + *
  55 + * 枚举 {@link CommonStatusEnum}
  56 + */
  57 + private Integer status;
  58 +
  59 + /**
  60 + * 客户端 id
  61 + */
  62 + private String clientId;
  63 + /**
  64 + * 客户端 Secret
  65 + */
  66 + private String clientSecret;
  67 +
  68 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/social/SocialClientMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.dal.mysql.social;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +
  7 +@Mapper
  8 +public interface SocialClientMapper extends BaseMapperX<SocialClientDO> {
  9 +
  10 + default SocialClientDO selectBySocialTypeAndUserType(Integer socialType, Integer userType) {
  11 + return selectOne(SocialClientDO::getSocialType, socialType,
  12 + SocialClientDO::getUserType, userType);
  13 + }
  14 +
  15 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.service.social;
  2 +
  3 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  4 +import com.xingyuv.jushauth.model.AuthUser;
  5 +
  6 +/**
  7 + * 社交应用 Service 接口
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +public interface SocialClientService {
  12 +
  13 + /**
  14 + * 获得社交平台的授权 URL
  15 + *
  16 + * @param socialType 社交平台的类型 {@link SocialTypeEnum}
  17 + * @param userType 用户类型
  18 + * @param redirectUri 重定向 URL
  19 + * @return 社交平台的授权 URL
  20 + */
  21 + String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri);
  22 +
  23 + /**
  24 + * 请求社交平台,获得授权的用户
  25 + *
  26 + * @param socialType 社交平台的类型
  27 + * @param userType 用户类型
  28 + * @param code 授权码
  29 + * @param state 授权 state
  30 + * @return 授权的用户
  31 + */
  32 + AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state);
  33 +
  34 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.service.social;
  2 +
  3 +import cn.hutool.core.bean.BeanUtil;
  4 +import cn.hutool.core.lang.Assert;
  5 +import cn.hutool.core.util.ReflectUtil;
  6 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  7 +import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
  8 +import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO;
  10 +import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper;
  11 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  12 +import com.xingyuv.jushauth.config.AuthConfig;
  13 +import com.xingyuv.jushauth.model.AuthCallback;
  14 +import com.xingyuv.jushauth.model.AuthResponse;
  15 +import com.xingyuv.jushauth.model.AuthUser;
  16 +import com.xingyuv.jushauth.request.AuthRequest;
  17 +import com.xingyuv.jushauth.utils.AuthStateUtils;
  18 +import lombok.extern.slf4j.Slf4j;
  19 +import org.springframework.stereotype.Service;
  20 +
  21 +import javax.annotation.Resource;
  22 +import java.util.Objects;
  23 +
  24 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  25 +import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
  26 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_AUTH_FAILURE;
  27 +
  28 +/**
  29 + * 社交应用 Service 实现类
  30 + *
  31 + * @author 芋道源码
  32 + */
  33 +@Service
  34 +@Slf4j
  35 +public class SocialClientServiceImpl implements SocialClientService {
  36 +
  37 + @Resource // 由于自定义了 YudaoAuthRequestFactory 无法覆盖默认的 AuthRequestFactory,所以只能注入它
  38 + private YudaoAuthRequestFactory yudaoAuthRequestFactory;
  39 +
  40 + @Resource
  41 + private SocialClientMapper socialClientMapper;
  42 +
  43 + @Override
  44 + public String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) {
  45 + // 获得对应的 AuthRequest 实现
  46 + AuthRequest authRequest = buildAuthRequest(socialType, userType);
  47 + // 生成跳转地址
  48 + String authorizeUri = authRequest.authorize(AuthStateUtils.createState());
  49 + return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri);
  50 + }
  51 +
  52 + @Override
  53 + public AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state) {
  54 + // 构建请求
  55 + AuthRequest authRequest = buildAuthRequest(socialType, userType);
  56 + AuthCallback authCallback = AuthCallback.builder().code(code).state(state).build();
  57 + // 执行请求
  58 + AuthResponse<?> authResponse = authRequest.login(authCallback);
  59 + log.info("[getAuthUser][请求社交平台 type({}) request({}) response({})]", socialType,
  60 + toJsonString(authCallback), toJsonString(authResponse));
  61 + if (!authResponse.ok()) {
  62 + throw exception(SOCIAL_USER_AUTH_FAILURE, authResponse.getMsg());
  63 + }
  64 + return (AuthUser) authResponse.getData();
  65 + }
  66 +
  67 + /**
  68 + * 构建 AuthRequest 对象,支持多租户配置
  69 + *
  70 + * @param socialType 社交类型
  71 + * @param userType 用户类型
  72 + * @return AuthRequest 对象
  73 + */
  74 + private AuthRequest buildAuthRequest(Integer socialType, Integer userType) {
  75 + // 1. 先查找默认的配置项,从 application-*.yaml 中读取
  76 + AuthRequest request = yudaoAuthRequestFactory.get(SocialTypeEnum.valueOfType(socialType).getSource());
  77 + Assert.notNull(request, String.format("社交平台(%d) 不存在", socialType));
  78 + // 2. 查询 DB 的配置项,如果存在则进行覆盖
  79 + SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(socialType, userType);
  80 + if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
  81 + // 2.1 构造新的 AuthConfig 对象
  82 + AuthConfig authConfig = (AuthConfig) ReflectUtil.getFieldValue(request, "config");
  83 + AuthConfig newAuthConfig = ReflectUtil.newInstance(authConfig.getClass());
  84 + BeanUtil.copyProperties(authConfig, newAuthConfig);
  85 + // 2.2 修改对应的 clientId + clientSecret 密钥
  86 + newAuthConfig.setClientId(client.getClientId());
  87 + newAuthConfig.setClientSecret(client.getClientSecret());
  88 + // 2.3 设置会 request 里,进行后续使用
  89 + ReflectUtil.setFieldValue(request, "config", newAuthConfig);
  90 + }
  91 + return request;
  92 + }
  93 +
  94 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
@@ -7,7 +7,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; @@ -7,7 +7,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
7 import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; 7 import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
8 8
9 import javax.validation.Valid; 9 import javax.validation.Valid;
10 -import javax.validation.constraints.NotNull;  
11 import java.util.List; 10 import java.util.List;
12 11
13 /** 12 /**
@@ -18,27 +17,6 @@ import java.util.List; @@ -18,27 +17,6 @@ import java.util.List;
18 public interface SocialUserService { 17 public interface SocialUserService {
19 18
20 /** 19 /**
21 - * 获得社交平台的授权 URL  
22 - *  
23 - * @param type 社交平台的类型 {@link SocialTypeEnum}  
24 - * @param redirectUri 重定向 URL  
25 - * @return 社交平台的授权 URL  
26 - */  
27 - String getAuthorizeUrl(Integer type, String redirectUri);  
28 -  
29 - /**  
30 - * 授权获得对应的社交用户  
31 - * 如果授权失败,则会抛出 {@link ServiceException} 异常  
32 - *  
33 - * @param type 社交平台的类型 {@link SocialTypeEnum}  
34 - * @param code 授权码  
35 - * @param state state  
36 - * @return 授权用户  
37 - */  
38 - @NotNull  
39 - SocialUserDO authSocialUser(Integer type, String code, String state);  
40 -  
41 - /**  
42 * 获得指定用户的社交用户列表 20 * 获得指定用户的社交用户列表
43 * 21 *
44 * @param userId 用户编号 22 * @param userId 用户编号
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
@@ -2,8 +2,7 @@ package cn.iocoder.yudao.module.system.service.social; @@ -2,8 +2,7 @@ package cn.iocoder.yudao.module.system.service.social;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
5 -import cn.iocoder.yudao.framework.common.util.http.HttpUtils;  
6 -import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory; 5 +import cn.iocoder.yudao.framework.common.exception.ServiceException;
7 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; 6 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
8 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; 7 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
9 import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO; 8 import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
@@ -11,24 +10,22 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO; @@ -11,24 +10,22 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
11 import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper; 10 import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper;
12 import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper; 11 import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper;
13 import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; 12 import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
14 -import com.xingyuv.jushauth.model.AuthCallback;  
15 -import com.xingyuv.jushauth.model.AuthResponse;  
16 import com.xingyuv.jushauth.model.AuthUser; 13 import com.xingyuv.jushauth.model.AuthUser;
17 -import com.xingyuv.jushauth.request.AuthRequest;  
18 -import com.xingyuv.jushauth.utils.AuthStateUtils;  
19 import lombok.extern.slf4j.Slf4j; 14 import lombok.extern.slf4j.Slf4j;
20 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
21 import org.springframework.transaction.annotation.Transactional; 16 import org.springframework.transaction.annotation.Transactional;
22 import org.springframework.validation.annotation.Validated; 17 import org.springframework.validation.annotation.Validated;
23 18
24 import javax.annotation.Resource; 19 import javax.annotation.Resource;
  20 +import javax.validation.constraints.NotNull;
25 import java.util.Collections; 21 import java.util.Collections;
26 import java.util.List; 22 import java.util.List;
27 23
28 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
29 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 25 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
30 import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; 26 import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
31 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; 27 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.AUTH_THIRD_LOGIN_NOT_BIND;
  28 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND;
32 29
33 /** 30 /**
34 * 社交用户 Service 实现类 31 * 社交用户 Service 实现类
@@ -40,51 +37,13 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -40,51 +37,13 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
40 @Slf4j 37 @Slf4j
41 public class SocialUserServiceImpl implements SocialUserService { 38 public class SocialUserServiceImpl implements SocialUserService {
42 39
43 - @Resource// 由于自定义了 YudaoAuthRequestFactory 无法覆盖默认的 AuthRequestFactory,所以只能注入它  
44 - private YudaoAuthRequestFactory yudaoAuthRequestFactory;  
45 -  
46 @Resource 40 @Resource
47 private SocialUserBindMapper socialUserBindMapper; 41 private SocialUserBindMapper socialUserBindMapper;
48 @Resource 42 @Resource
49 private SocialUserMapper socialUserMapper; 43 private SocialUserMapper socialUserMapper;
50 44
51 - @Override  
52 - public String getAuthorizeUrl(Integer type, String redirectUri) {  
53 - // 获得对应的 AuthRequest 实现  
54 - AuthRequest authRequest = yudaoAuthRequestFactory.get(SocialTypeEnum.valueOfType(type).getSource());  
55 - // 生成跳转地址  
56 - String authorizeUri = authRequest.authorize(AuthStateUtils.createState());  
57 - return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri);  
58 - }  
59 -  
60 - @Override  
61 - public SocialUserDO authSocialUser(Integer type, String code, String state) {  
62 - // 优先从 DB 中获取,因为 code 有且可以使用一次。  
63 - // 在社交登录时,当未绑定 User 时,需要绑定登录,此时需要 code 使用两次  
64 - SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(type, code, state);  
65 - if (socialUser != null) {  
66 - return socialUser;  
67 - }  
68 -  
69 - // 请求获取  
70 - AuthUser authUser = getAuthUser(type, code, state);  
71 - Assert.notNull(authUser, "三方用户不能为空");  
72 -  
73 - // 保存到 DB 中  
74 - socialUser = socialUserMapper.selectByTypeAndOpenid(type, authUser.getUuid());  
75 - if (socialUser == null) {  
76 - socialUser = new SocialUserDO();  
77 - }  
78 - socialUser.setType(type).setCode(code).setState(state) // 需要保存 code + state 字段,保证后续可查询  
79 - .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken())))  
80 - .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo()));  
81 - if (socialUser.getId() == null) {  
82 - socialUserMapper.insert(socialUser);  
83 - } else {  
84 - socialUserMapper.updateById(socialUser);  
85 - }  
86 - return socialUser;  
87 - } 45 + @Resource
  46 + private SocialClientService socialClientService;
88 47
89 @Override 48 @Override
90 public List<SocialUserDO> getSocialUserList(Long userId, Integer userType) { 49 public List<SocialUserDO> getSocialUserList(Long userId, Integer userType) {
@@ -101,7 +60,8 @@ public class SocialUserServiceImpl implements SocialUserService { @@ -101,7 +60,8 @@ public class SocialUserServiceImpl implements SocialUserService {
101 @Transactional 60 @Transactional
102 public String bindSocialUser(SocialUserBindReqDTO reqDTO) { 61 public String bindSocialUser(SocialUserBindReqDTO reqDTO) {
103 // 获得社交用户 62 // 获得社交用户
104 - SocialUserDO socialUser = authSocialUser(reqDTO.getType(), reqDTO.getCode(), reqDTO.getState()); 63 + SocialUserDO socialUser = authSocialUser(reqDTO.getSocialType(), reqDTO.getUserType(),
  64 + reqDTO.getCode(), reqDTO.getState());
105 Assert.notNull(socialUser, "社交用户不能为空"); 65 Assert.notNull(socialUser, "社交用户不能为空");
106 66
107 // 社交用户可能之前绑定过别的用户,需要进行解绑 67 // 社交用户可能之前绑定过别的用户,需要进行解绑
@@ -134,7 +94,7 @@ public class SocialUserServiceImpl implements SocialUserService { @@ -134,7 +94,7 @@ public class SocialUserServiceImpl implements SocialUserService {
134 @Override 94 @Override
135 public SocialUserRespDTO getSocialUser(Integer userType, Integer type, String code, String state) { 95 public SocialUserRespDTO getSocialUser(Integer userType, Integer type, String code, String state) {
136 // 获得社交用户 96 // 获得社交用户
137 - SocialUserDO socialUser = authSocialUser(type, code, state); 97 + SocialUserDO socialUser = authSocialUser(type, userType, code, state);
138 Assert.notNull(socialUser, "社交用户不能为空"); 98 Assert.notNull(socialUser, "社交用户不能为空");
139 99
140 // 如果未绑定的社交用户,则无法自动登录,进行报错 100 // 如果未绑定的社交用户,则无法自动登录,进行报错
@@ -146,24 +106,44 @@ public class SocialUserServiceImpl implements SocialUserService { @@ -146,24 +106,44 @@ public class SocialUserServiceImpl implements SocialUserService {
146 return new SocialUserRespDTO(socialUser.getOpenid(), socialUserBind.getUserId()); 106 return new SocialUserRespDTO(socialUser.getOpenid(), socialUserBind.getUserId());
147 } 107 }
148 108
  109 + // TODO 芋艿:调整下单测
149 /** 110 /**
150 - * 请求社交平台,获得授权的用户 111 + * 授权获得对应的社交用户
  112 + * 如果授权失败,则会抛出 {@link ServiceException} 异常
151 * 113 *
152 - * @param type 社交平台的类型 114 + * @param type 社交平台的类型 {@link SocialTypeEnum}
  115 + * @param userType 用户类型
153 * @param code 授权码 116 * @param code 授权码
154 - * @param state 授权 state  
155 - * @return 授权的用户 117 + * @param state state
  118 + * @return 授权用户
156 */ 119 */
157 - private AuthUser getAuthUser(Integer type, String code, String state) {  
158 - AuthRequest authRequest = yudaoAuthRequestFactory.get(SocialTypeEnum.valueOfType(type).getSource());  
159 - AuthCallback authCallback = AuthCallback.builder().code(code).state(state).build();  
160 - AuthResponse<?> authResponse = authRequest.login(authCallback);  
161 - log.info("[getAuthUser][请求社交平台 type({}) request({}) response({})]", type,  
162 - toJsonString(authCallback), toJsonString(authResponse));  
163 - if (!authResponse.ok()) {  
164 - throw exception(SOCIAL_USER_AUTH_FAILURE, authResponse.getMsg()); 120 + @NotNull
  121 + public SocialUserDO authSocialUser(Integer type, Integer userType, String code, String state) {
  122 + // 优先从 DB 中获取,因为 code 有且可以使用一次。
  123 + // 在社交登录时,当未绑定 User 时,需要绑定登录,此时需要 code 使用两次
  124 + SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(type, code, state);
  125 + if (socialUser != null) {
  126 + return socialUser;
165 } 127 }
166 - return (AuthUser) authResponse.getData(); 128 +
  129 + // 请求获取
  130 + AuthUser authUser = socialClientService.getAuthUser(type, userType, code, state);
  131 + Assert.notNull(authUser, "三方用户不能为空");
  132 +
  133 + // 保存到 DB 中
  134 + socialUser = socialUserMapper.selectByTypeAndOpenid(type, authUser.getUuid());
  135 + if (socialUser == null) {
  136 + socialUser = new SocialUserDO();
  137 + }
  138 + socialUser.setType(type).setCode(code).setState(state) // 需要保存 code + state 字段,保证后续可查询
  139 + .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken())))
  140 + .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo()));
  141 + if (socialUser.getId() == null) {
  142 + socialUserMapper.insert(socialUser);
  143 + } else {
  144 + socialUserMapper.updateById(socialUser);
  145 + }
  146 + return socialUser;
167 } 147 }
168 148
169 } 149 }