Browse Source

1、优化社交客户端模块

rayson 3 tháng trước cách đây
mục cha
commit
d7c66eda39
35 tập tin đã thay đổi với 297 bổ sung145 xóa
  1. 1 1
      citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/controller/app/auth/AppAuthController.java
  2. 1 1
      citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/controller/app/social/AppSocialUserController.java
  3. 2 2
      citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/service/auth/MemberAuthServiceImpl.java
  4. 1 1
      citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/service/user/MemberUserServiceImpl.java
  5. 11 4
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/SocialClientApi.java
  6. 22 2
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/SocialUserApi.java
  7. 6 0
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialUserBindReqDTO.java
  8. 4 0
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialUserUnbindReqDTO.java
  9. 9 1
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialWxQrcodeReqDTO.java
  10. 4 0
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java
  11. 1 0
      citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/enums/ErrorCodeConstants.java
  12. 9 9
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/api/social/SocialClientApiImpl.java
  13. 10 0
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/api/social/SocialUserApiImpl.java
  14. 4 2
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/auth/AuthController.java
  15. 3 0
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java
  16. 4 0
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java
  17. 4 0
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java
  18. 4 0
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/dal/dataobject/social/SocialClientDO.java
  19. 12 3
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/dal/mysql/social/SocialClientMapper.java
  20. 13 5
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialClientService.java
  21. 53 42
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialClientServiceImpl.java
  22. 4 0
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialUserService.java
  23. 35 4
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialUserServiceImpl.java
  24. 13 13
      citu-module-system/citu-module-system-biz/src/test/java/com/citu/module/system/service/social/SocialClientServiceImplTest.java
  25. 17 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/SocialApplicationConstants.java
  26. 0 4
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/TradeOrderTypeMq.java
  27. 6 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/auth/AppMdeAuthController.java
  28. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/auth/vo/AppMdeAuthSocialLoginReqVO.java
  29. 13 8
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/social/AppSocialUserController.java
  30. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/social/vo/AppSocialUserBindReqVO.java
  31. 6 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/social/vo/AppSocialUserUnbindReqVO.java
  32. 0 25
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/order/AppRecruitTradeOrderController.java
  33. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthService.java
  34. 7 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthServiceImpl.java
  35. 10 8
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserServiceImpl.java

+ 1 - 1
citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/controller/app/auth/AppAuthController.java

@@ -128,7 +128,7 @@ public class AppAuthController {
     @PermitAll
     public CommonResult<SocialWxJsapiSignatureRespDTO> createWeixinMpJsapiSignature(@RequestParam("url") String url) {
         SocialWxJsapiSignatureRespDTO signature = socialClientApi.createWxMpJsapiSignature(
-                UserTypeEnum.MEMBER.getValue(), url).getCheckedData();
+                null,UserTypeEnum.MEMBER.getValue(), url).getCheckedData();
         return success(AuthConvert.INSTANCE.convert(signature));
     }
 

+ 1 - 1
citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/controller/app/social/AppSocialUserController.java

@@ -74,7 +74,7 @@ public class AppSocialUserController {
     @Operation(summary = "获得微信小程订阅模板列表")
     @PermitAll
     public CommonResult<List<AppSocialWxaSubscribeTemplateRespVO>> getSubscribeTemplateList() {
-        List<SocialWxaSubscribeTemplateRespDTO> template = socialClientApi.getWxaSubscribeTemplateList(UserTypeEnum.MEMBER.getValue()).getCheckedData();
+        List<SocialWxaSubscribeTemplateRespDTO> template = socialClientApi.getWxaSubscribeTemplateList(null,UserTypeEnum.MEMBER.getValue()).getCheckedData();
         return success(BeanUtils.toBean(template, AppSocialWxaSubscribeTemplateRespVO.class));
     }
 

+ 2 - 2
citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/service/auth/MemberAuthServiceImpl.java

@@ -130,7 +130,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
     @Override
     public AppAuthLoginRespVO weixinMiniAppLogin(AppAuthWeixinMiniAppLoginReqVO reqVO) {
         // 获得对应的手机号信息
-        SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(
+        SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(null,
                 UserTypeEnum.MEMBER.getValue(), reqVO.getPhoneCode()).getCheckedData();
         Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
 
@@ -161,7 +161,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
 
     @Override
     public String getSocialAuthorizeUrl(Integer type, String redirectUri) {
-        return socialClientApi.getAuthorizeUrl(type, UserTypeEnum.MEMBER.getValue(), redirectUri).getCheckedData();
+        return socialClientApi.getAuthorizeUrl(null,type, UserTypeEnum.MEMBER.getValue(), redirectUri).getCheckedData();
     }
 
     private MemberUserDO login0(String mobile, String password) {

+ 1 - 1
citu-module-member/citu-module-member-biz/src/main/java/com/citu/module/member/service/user/MemberUserServiceImpl.java

@@ -188,7 +188,7 @@ public class MemberUserServiceImpl implements MemberUserService {
     public void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO) {
         // 1.1 获得对应的手机号信息
         SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(
-                UserTypeEnum.MEMBER.getValue(), reqVO.getCode()).getCheckedData();
+               null, UserTypeEnum.MEMBER.getValue(), reqVO.getCode()).getCheckedData();
         Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
         // 1.2 校验新手机是否已经被绑定
         validateMobileUnique(userId, phoneNumberInfo.getPhoneNumber());

+ 11 - 4
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/SocialClientApi.java

@@ -26,30 +26,36 @@ public interface SocialClientApi {
     @GetMapping(PREFIX + "/get-authorize-url")
     @Operation(summary = "获得社交平台的授权 URL")
     @Parameters({
+            @Parameter(name = "application", description = "应用标识", example = "1", required = false),
             @Parameter(name = "socialType", description = "社交平台的类型", example = "1", required = true),
             @Parameter(name = "userType", description = "用户类型", example = "1", required = true),
             @Parameter(name = "redirectUri", description = "重定向 URL", example = "https://www.iocoder.cn", required = true)
     })
-    CommonResult<String> getAuthorizeUrl(@RequestParam("socialType") Integer socialType,
+    CommonResult<String> getAuthorizeUrl(@RequestParam(value = "application", required = false) String application,
+                                         @RequestParam("socialType") Integer socialType,
                                          @RequestParam("userType") Integer userType,
                                          @RequestParam("redirectUri") String redirectUri);
 
     @GetMapping(PREFIX + "/create-wx-mp-jsapi-signature")
     @Operation(summary = "创建微信公众号 JS SDK 初始化所需的签名")
     @Parameters({
+            @Parameter(name = "application", description = "应用标识", example = "1", required = false),
             @Parameter(name = "userType", description = "用户类型", example = "1", required = true),
             @Parameter(name = "url", description = "访问 URL", example = "https://www.iocoder.cn", required = true)
     })
-    CommonResult<SocialWxJsapiSignatureRespDTO> createWxMpJsapiSignature(@RequestParam("userType") Integer userType,
+    CommonResult<SocialWxJsapiSignatureRespDTO> createWxMpJsapiSignature(@RequestParam(value = "application", required = false) String application,
+                                                                         @RequestParam("userType") Integer userType,
                                                                          @RequestParam("url") String url);
 
     @GetMapping(PREFIX + "/create-wx-ma-phone-number-info")
     @Operation(summary = "获得微信小程序的手机信息")
     @Parameters({
+            @Parameter(name = "application", description = "应用标识", example = "1", required = false),
             @Parameter(name = "userType", description = "用户类型", example = "1", required = true),
             @Parameter(name = "phoneCode", description = "手机授权码", example = "citu11", required = true)
     })
-    CommonResult<SocialWxPhoneNumberInfoRespDTO> getWxMaPhoneNumberInfo(@RequestParam("userType") Integer userType,
+    CommonResult<SocialWxPhoneNumberInfoRespDTO> getWxMaPhoneNumberInfo(@RequestParam(value = "application", required = false) String application,
+                                                                        @RequestParam("userType") Integer userType,
                                                                         @RequestParam("phoneCode") String phoneCode);
 
     @GetMapping(PREFIX + "/get-wxa-qrcode")
@@ -58,7 +64,8 @@ public interface SocialClientApi {
 
     @GetMapping(PREFIX + "/get-wxa-subscribe-template-list")
     @Operation(summary = "获得微信小程订阅模板")
-    CommonResult<List<SocialWxaSubscribeTemplateRespDTO>> getWxaSubscribeTemplateList(@RequestParam("userType") Integer userType);
+    CommonResult<List<SocialWxaSubscribeTemplateRespDTO>> getWxaSubscribeTemplateList(@RequestParam(value = "application", required = false) String application,
+                                                                                      @RequestParam("userType") Integer userType);
 
     @PostMapping(PREFIX + "/send-wxa-subscribe-message")
     @Operation(summary = "发送微信小程序订阅消息")

+ 22 - 2
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/SocialUserApi.java

@@ -1,6 +1,5 @@
 package com.citu.module.system.api.social;
 
-import com.citu.framework.common.exception.ServiceException;
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.module.system.api.social.dto.SocialUserBindReqDTO;
 import com.citu.module.system.api.social.dto.SocialUserRespDTO;
@@ -41,7 +40,7 @@ public interface SocialUserApi {
                                                           @RequestParam("socialType") Integer socialType);
 
     @GetMapping(PREFIX + "/get-by-code")
-    @Operation(summary = "获得社交用") // 在认证信息不正确的情况下,也会抛出 {@link ServiceException} 业务异常
+    @Operation(summary = "获得社交用") // 在认证信息不正确的情况下,也会抛出 {@link ServiceException} 业务异常
     @Parameters({
             @Parameter(name = "userType", description = "用户类型", example = "2", required = true),
             @Parameter(name = "socialType", description = "社交平台的类型", example = "1", required = true),
@@ -53,4 +52,25 @@ public interface SocialUserApi {
                                                         @RequestParam("code") String code,
                                                         @RequestParam("state") String state);
 
+
+    @GetMapping(PREFIX + "/get-by-user-id-application")
+    @Operation(summary = "获得社交用户,基于 userId")
+    @Parameters({
+            @Parameter(name = "application", description = "用户类型", example = "2", required = true),
+            @Parameter(name = "userId", description = "用户编号", example = "1024", required = true),
+    })
+    CommonResult<SocialUserRespDTO> getSocialUserByUserIdAndApplication(@RequestParam("application") String application,
+                                                          @RequestParam("userId") Long userId);
+
+    @GetMapping(PREFIX + "/get-by-application-code")
+    @Operation(summary = "获得社交用户")
+    @Parameters({
+            @Parameter(name = "application", description = "用户类型", example = "2", required = true),
+            @Parameter(name = "code", description = "授权码", example = "88888", required = true),
+            @Parameter(name = "state", description = "state", example = "666", required = true),
+    })
+    CommonResult<SocialUserRespDTO> getSocialUserByApplicationCode(@RequestParam("application") String application,
+                                                        @RequestParam("code") String code,
+                                                        @RequestParam("state") String state);
+
 }

+ 6 - 0
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialUserBindReqDTO.java

@@ -20,6 +20,7 @@ public class SocialUserBindReqDTO {
     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     @NotNull(message = "用户编号不能为空")
     private Long userId;
+
     @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @InEnum(UserTypeEnum.class)
     @NotNull(message = "用户类型不能为空")
@@ -36,4 +37,9 @@ public class SocialUserBindReqDTO {
     @NotEmpty(message = "state 不能为空")
     private String state;
 
+    // ========== 扩展 ==========
+
+    @Schema(description = "社交应用标识")
+    private String application;
+
 }

+ 4 - 0
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialUserUnbindReqDTO.java

@@ -33,4 +33,8 @@ public class SocialUserUnbindReqDTO {
     @NotEmpty(message = "社交平台的 openid 不能为空")
     private String openid;
 
+    // ========== 扩展 ==========
+
+    @Schema(description = "社交应用标识")
+    private String application;
 }

+ 9 - 1
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialWxQrcodeReqDTO.java

@@ -1,5 +1,6 @@
 package com.citu.module.system.api.social.dto;
 
+import com.citu.framework.common.enums.UserTypeEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -30,7 +31,7 @@ public class SocialWxQrcodeReqDTO {
     public static final Boolean CHECK_PATH = true;
     /**
      * 是否需要透明底色
-     *
+     * <p>
      * hyaline 为 true 时,生成透明底色的小程序码
      */
     public static final Boolean HYALINE = true;
@@ -55,4 +56,11 @@ public class SocialWxQrcodeReqDTO {
     @Schema(description = "是否需要透明底色", example = "true")
     private Boolean hyaline;
 
+    // ========== 扩展 ==========
+    @Schema(description = "应用标识", example = "1")
+    private String application;
+
+    @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer userType = UserTypeEnum.MEMBER.getValue();
+
 }

+ 4 - 0
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java

@@ -17,6 +17,10 @@ public class SocialWxaSubscribeMessageSendReqDTO {
     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     @NotNull(message = "用户编号不能为空")
     private Long userId;
+
+    @Schema(description = "应用标识", example = "1")
+    private String application;
+
     @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @InEnum(UserTypeEnum.class)
     @NotNull(message = "用户类型不能为空")

+ 1 - 0
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/enums/ErrorCodeConstants.java

@@ -133,6 +133,7 @@ public interface ErrorCodeConstants {
     ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_211, "社交客户端已存在配置");
 
 
+
     // ========== 系统敏感词 1-002-019-000 =========
     ErrorCode SENSITIVE_WORD_NOT_EXISTS = new ErrorCode(1_002_019_000, "系统敏感词在所有标签中都不存在");
     ErrorCode SENSITIVE_WORD_EXISTS = new ErrorCode(1_002_019_001, "系统敏感词已在标签中存在");

+ 9 - 9
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/api/social/SocialClientApiImpl.java

@@ -40,19 +40,19 @@ public class SocialClientApiImpl implements SocialClientApi {
 
 
     @Override
-    public CommonResult<String> getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) {
-        return success(socialClientService.getAuthorizeUrl(socialType, userType, redirectUri));
+    public CommonResult<String> getAuthorizeUrl(String application,Integer socialType, Integer userType, String redirectUri) {
+        return success(socialClientService.getAuthorizeUrl(application,socialType, userType, redirectUri));
     }
 
     @Override
-    public CommonResult<SocialWxJsapiSignatureRespDTO> createWxMpJsapiSignature(Integer userType, String url) {
-        WxJsapiSignature signature = socialClientService.createWxMpJsapiSignature(userType, url);
+    public CommonResult<SocialWxJsapiSignatureRespDTO> createWxMpJsapiSignature(String application,Integer userType, String url) {
+        WxJsapiSignature signature = socialClientService.createWxMpJsapiSignature(application,userType, url);
         return success(BeanUtils.toBean(signature, SocialWxJsapiSignatureRespDTO.class));
     }
 
     @Override
-    public CommonResult<SocialWxPhoneNumberInfoRespDTO> getWxMaPhoneNumberInfo(Integer userType, String phoneCode) {
-        WxMaPhoneNumberInfo info = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode);
+    public CommonResult<SocialWxPhoneNumberInfoRespDTO> getWxMaPhoneNumberInfo(String application,Integer userType, String phoneCode) {
+        WxMaPhoneNumberInfo info = socialClientService.getWxMaPhoneNumberInfo(application,userType, phoneCode);
         return success(BeanUtils.toBean(info, SocialWxPhoneNumberInfoRespDTO.class));
     }
 
@@ -62,15 +62,15 @@ public class SocialClientApiImpl implements SocialClientApi {
     }
 
     @Override
-    public CommonResult<List<SocialWxaSubscribeTemplateRespDTO>> getWxaSubscribeTemplateList(Integer userType) {
-        List<TemplateInfo> list = socialClientService.getSubscribeTemplateList(userType);
+    public CommonResult<List<SocialWxaSubscribeTemplateRespDTO>> getWxaSubscribeTemplateList(String application,Integer userType) {
+        List<TemplateInfo> list = socialClientService.getSubscribeTemplateList(application,userType);
         return success(convertList(list, item -> BeanUtils.toBean(item, SocialWxaSubscribeTemplateRespDTO.class).setId(item.getPriTmplId())));
     }
 
     @Override
     public CommonResult<Boolean> sendWxaSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO) {
         // 1.1 获得订阅模版列表
-        List<TemplateInfo> templateList = socialClientService.getSubscribeTemplateList(reqDTO.getUserType());
+        List<TemplateInfo> templateList = socialClientService.getSubscribeTemplateList(reqDTO.getApplication(),reqDTO.getUserType());
         if (CollUtil.isEmpty(templateList)) {
             log.warn("[sendSubscribeMessage][reqDTO({}) 发送订阅消息失败,原因:没有找到订阅模板]", reqDTO);
             return success(false);

+ 10 - 0
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/api/social/SocialUserApiImpl.java

@@ -41,4 +41,14 @@ public class SocialUserApiImpl implements SocialUserApi {
         return success(socialUserService.getSocialUserByCode(userType, socialType, code, state));
     }
 
+
+    @Override
+    public CommonResult<SocialUserRespDTO> getSocialUserByUserIdAndApplication(String application, Long userId) {
+        return success(socialUserService.getSocialUserByUserIdAndApplication(application, userId));
+    }
+
+    @Override
+    public CommonResult<SocialUserRespDTO> getSocialUserByApplicationCode(String application, String code, String state) {
+        return success(socialUserService.getSocialUserByApplicationCode(application, code, state));
+    }
 }

+ 4 - 2
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/auth/AuthController.java

@@ -146,13 +146,15 @@ public class AuthController {
     @PermitAll
     @Operation(summary = "社交授权的跳转")
     @Parameters({
+            @Parameter(name = "application", description = "应用标识", example = "1", required = false),
             @Parameter(name = "type", description = "社交类型", required = true),
             @Parameter(name = "redirectUri", description = "回调路径")
     })
-    public CommonResult<String> socialLogin(@RequestParam("type") Integer type,
+    public CommonResult<String> socialLogin(@RequestParam(value = "application", required = false) String application,
+                                            @RequestParam("type") Integer type,
                                             @RequestParam("redirectUri") String redirectUri) {
         return success(socialClientService.getAuthorizeUrl(
-                type, UserTypeEnum.ADMIN.getValue(), redirectUri));
+                null, type, UserTypeEnum.ADMIN.getValue(), redirectUri));
     }
 
     @PostMapping("/social-login")

+ 3 - 0
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java

@@ -15,6 +15,9 @@ public class SocialClientPageReqVO extends PageParam {
     @Schema(description = "应用名", example = "citu商城")
     private String name;
 
+    @Schema(description = "社交应用标识")
+    private String application;
+
     @Schema(description = "社交平台的类型", example = "31")
     private Integer socialType;
 

+ 4 - 0
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java

@@ -3,6 +3,7 @@ package com.citu.module.system.controller.admin.socail.vo.client;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 
 @Schema(description = "管理后台 - 社交客户端 Response VO")
@@ -12,6 +13,9 @@ public class SocialClientRespVO {
     @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27162")
     private Long id;
 
+    @Schema(description = "应用标识")
+    private String application;
+
     @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "citu商城")
     private String name;
 

+ 4 - 0
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java

@@ -24,6 +24,10 @@ public class SocialClientSaveReqVO {
     @NotNull(message = "应用名不能为空")
     private String name;
 
+    @Schema(description = "应用标识")
+    @NotNull(message = "应用标识不能为空")
+    private String application;
+
     @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "31")
     @NotNull(message = "社交平台的类型不能为空")
     @InEnum(SocialTypeEnum.class)

+ 4 - 0
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/dal/dataobject/social/SocialClientDO.java

@@ -35,6 +35,10 @@ public class SocialClientDO extends TenantBaseDO {
      * 应用名
      */
     private String name;
+    /**
+     * 社交应用标识
+     */
+    private String application;
     /**
      * 社交类型
      *

+ 12 - 3
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/dal/mysql/social/SocialClientMapper.java

@@ -10,9 +10,14 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface SocialClientMapper extends BaseMapperX<SocialClientDO> {
 
-    default SocialClientDO selectBySocialTypeAndUserType(Integer socialType, Integer userType) {
-        return selectOne(SocialClientDO::getSocialType, socialType,
-                SocialClientDO::getUserType, userType);
+    default SocialClientDO selectBySocialApplicationAndTypeAndUserType(String application, Integer socialType, Integer userType) {
+        return selectOne(new LambdaQueryWrapperX<SocialClientDO>()
+                .eqIfPresent(SocialClientDO::getApplication, application)
+                .eq(SocialClientDO::getSocialType, socialType)
+                .eq(SocialClientDO::getUserType, userType)
+                .orderByDesc(SocialClientDO::getCreateTime)
+                .last("limit 1")
+        );
     }
 
     default PageResult<SocialClientDO> selectPage(SocialClientPageReqVO reqVO) {
@@ -25,4 +30,8 @@ public interface SocialClientMapper extends BaseMapperX<SocialClientDO> {
                 .orderByDesc(SocialClientDO::getId));
     }
 
+    default SocialClientDO selectByApplication(String application) {
+        return selectOne(SocialClientDO::getApplication, application);
+    }
+
 }

+ 13 - 5
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialClientService.java

@@ -30,7 +30,7 @@ public interface SocialClientService {
      * @param redirectUri 重定向 URL
      * @return 社交平台的授权 URL
      */
-    String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri);
+    String getAuthorizeUrl(String application,Integer socialType, Integer userType, String redirectUri);
 
     /**
      * 请求社交平台,获得授权的用户
@@ -41,7 +41,7 @@ public interface SocialClientService {
      * @param state 授权 state
      * @return 授权的用户
      */
-    AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state);
+    AuthUser getAuthUser(String application,Integer socialType, Integer userType, String code, String state);
 
     // =================== 微信公众号独有 ===================
 
@@ -52,7 +52,7 @@ public interface SocialClientService {
      * @param url 访问的 URL 地址
      * @return 签名
      */
-    WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url);
+    WxJsapiSignature createWxMpJsapiSignature(String application,Integer userType, String url);
 
     // =================== 微信小程序独有 ===================
 
@@ -63,7 +63,7 @@ public interface SocialClientService {
      * @param phoneCode 手机授权码
      * @return 手机信息
      */
-    WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode);
+    WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(String application,Integer userType, String phoneCode);
 
     /**
      * 获得小程序二维码
@@ -81,7 +81,7 @@ public interface SocialClientService {
      * @param userType 用户类型
      * @return 微信小程订阅模板
      */
-    List<TemplateInfo> getSubscribeTemplateList(Integer userType);
+    List<TemplateInfo> getSubscribeTemplateList(String application,Integer userType);
 
     /**
      * 发送微信小程序订阅消息
@@ -124,6 +124,14 @@ public interface SocialClientService {
      */
     SocialClientDO getSocialClient(Long id);
 
+    /**
+     * 获得社交客户端
+     *
+     * @param application 应用编号
+     * @return 社交客户端
+     */
+    SocialClientDO getSocialClientByApplication(String application);
+
     /**
      * 获得社交客户端分页
      *

+ 53 - 42
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialClientServiceImpl.java

@@ -12,8 +12,9 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.ReflectUtil;
+import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
+import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
 import com.citu.framework.common.enums.CommonStatusEnum;
-import com.citu.framework.common.enums.UserTypeEnum;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.cache.CacheUtils;
 import com.citu.framework.common.util.http.HttpUtils;
@@ -26,8 +27,6 @@ import com.citu.module.system.dal.dataobject.social.SocialClientDO;
 import com.citu.module.system.dal.mysql.social.SocialClientMapper;
 import com.citu.module.system.dal.redis.RedisKeyConstants;
 import com.citu.module.system.enums.social.SocialTypeEnum;
-import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
-import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
@@ -59,7 +58,6 @@ import java.util.Map;
 import java.util.Objects;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.citu.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache;
 import static com.citu.framework.common.util.collection.MapUtils.findAndThen;
 import static com.citu.framework.common.util.json.JsonUtils.toJsonString;
 import static com.citu.module.system.enums.ErrorCodeConstants.*;
@@ -72,10 +70,10 @@ import static com.citu.module.system.enums.ErrorCodeConstants.*;
 @Service
 @Slf4j
 public class SocialClientServiceImpl implements SocialClientService {
-    
+
     /**
      * 小程序码要打开的小程序版本
-     *
+     * <p>
      * 1. release:正式版
      * 2. trial:体验版
      * 3. develop:开发版
@@ -84,7 +82,7 @@ public class SocialClientServiceImpl implements SocialClientService {
     public String envVersion;
     /**
      * 订阅消息跳转小程序类型
-     *
+     * <p>
      * 1. developer:开发版
      * 2. trial:体验版
      * 3. formal:正式版
@@ -103,10 +101,10 @@ public class SocialClientServiceImpl implements SocialClientService {
     private StringRedisTemplate stringRedisTemplate; // WxMpService 需要使用到,所以在 Service 注入了它
     /**
      * 缓存 WxMpService 对象
-     *
+     * <p>
      * key:使用微信公众号的 appId + secret 拼接,即 {@link SocialClientDO} 的 clientId 和 clientSecret 属性。
      * 为什么 key 使用这种格式?因为 {@link SocialClientDO} 在管理后台可以变更,通过这个 key 存储它的单例。
-     *
+     * <p>
      * 为什么要做 WxMpService 缓存?因为 WxMpService 构建成本比较大,所以尽量保证它是单例。
      */
     private final LoadingCache<String, WxMpService> wxMpServiceCache = CacheUtils.buildAsyncReloadingCache(
@@ -127,7 +125,7 @@ public class SocialClientServiceImpl implements SocialClientService {
     private WxMaProperties wxMaProperties;
     /**
      * 缓存 WxMaService 对象
-     *
+     * <p>
      * 说明同 {@link #wxMpServiceCache} 变量
      */
     private final LoadingCache<String, WxMaService> wxMaServiceCache = CacheUtils.buildAsyncReloadingCache(
@@ -146,18 +144,18 @@ public class SocialClientServiceImpl implements SocialClientService {
     private SocialClientMapper socialClientMapper;
 
     @Override
-    public String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) {
+    public String getAuthorizeUrl(String application, Integer socialType, Integer userType, String redirectUri) {
         // 获得对应的 AuthRequest 实现
-        AuthRequest authRequest = buildAuthRequest(socialType, userType);
+        AuthRequest authRequest = buildAuthRequest(application, socialType, userType);
         // 生成跳转地址
         String authorizeUri = authRequest.authorize(AuthStateUtils.createState());
         return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri);
     }
 
     @Override
-    public AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state) {
+    public AuthUser getAuthUser(String application, Integer socialType, Integer userType, String code, String state) {
         // 构建请求
-        AuthRequest authRequest = buildAuthRequest(socialType, userType);
+        AuthRequest authRequest = buildAuthRequest(application, socialType, userType);
         AuthCallback authCallback = AuthCallback.builder().code(code).state(state).build();
         // 执行请求
         AuthResponse<?> authResponse = authRequest.login(authCallback);
@@ -173,16 +171,16 @@ public class SocialClientServiceImpl implements SocialClientService {
      * 构建 AuthRequest 对象,支持多租户配置
      *
      * @param socialType 社交类型
-     * @param userType 用户类型
+     * @param userType   用户类型
      * @return AuthRequest 对象
      */
     @VisibleForTesting
-    AuthRequest buildAuthRequest(Integer socialType, Integer userType) {
+    AuthRequest buildAuthRequest(String application, Integer socialType, Integer userType) {
         // 1. 先查找默认的配置项,从 application-*.yaml 中读取
         AuthRequest request = authRequestFactory.get(SocialTypeEnum.valueOfType(socialType).getSource());
         Assert.notNull(request, String.format("社交平台(%d) 不存在", socialType));
         // 2. 查询 DB 的配置项,如果存在则进行覆盖
-        SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(socialType, userType);
+        SocialClientDO client = socialClientMapper.selectBySocialApplicationAndTypeAndUserType(application, socialType, userType);
         if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
             // 2.1 构造新的 AuthConfig 对象
             AuthConfig authConfig = (AuthConfig) ReflectUtil.getFieldValue(request, "config");
@@ -204,8 +202,8 @@ public class SocialClientServiceImpl implements SocialClientService {
 
     @Override
     @SneakyThrows
-    public WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url) {
-        WxMpService service = getWxMpService(userType);
+    public WxJsapiSignature createWxMpJsapiSignature(String application, Integer userType, String url) {
+        WxMpService service = getWxMpService(application, userType);
         return service.createJsapiSignature(url);
     }
 
@@ -216,9 +214,9 @@ public class SocialClientServiceImpl implements SocialClientService {
      * @return WxMpService 对象
      */
     @VisibleForTesting
-    WxMpService getWxMpService(Integer userType) {
+    WxMpService getWxMpService(String application, Integer userType) {
         // 第一步,查询 DB 的配置项,获得对应的 WxMpService 对象
-        SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(
+        SocialClientDO client = socialClientMapper.selectBySocialApplicationAndTypeAndUserType(application,
                 SocialTypeEnum.WECHAT_MP.getType(), userType);
         if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
             return wxMpServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret());
@@ -230,7 +228,7 @@ public class SocialClientServiceImpl implements SocialClientService {
     /**
      * 创建 clientId + clientSecret 对应的 WxMpService 对象
      *
-     * @param clientId 微信公众号 appId
+     * @param clientId     微信公众号 appId
      * @param clientSecret 微信公众号 secret
      * @return WxMpService 对象
      */
@@ -251,8 +249,8 @@ public class SocialClientServiceImpl implements SocialClientService {
     // =================== 微信小程序独有 ===================
 
     @Override
-    public WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode) {
-        WxMaService service = getWxMaService(userType);
+    public WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(String application, Integer userType, String phoneCode) {
+        WxMaService service = getWxMaService(application, userType);
         try {
             return service.getUserService().getPhoneNoInfo(phoneCode);
         } catch (WxErrorException e) {
@@ -263,7 +261,7 @@ public class SocialClientServiceImpl implements SocialClientService {
 
     @Override
     public byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO) {
-        WxMaService service = getWxMaService(UserTypeEnum.MEMBER.getValue());
+        WxMaService service = getWxMaService(reqVO.getApplication(), reqVO.getUserType());
         try {
             return service.getQrcodeService().createWxaCodeUnlimitBytes(
                     ObjUtil.defaultIfEmpty(reqVO.getScene(), SocialWxQrcodeReqDTO.SCENE),
@@ -281,10 +279,10 @@ public class SocialClientServiceImpl implements SocialClientService {
     }
 
     @Override
-    @Cacheable(cacheNames = RedisKeyConstants.WXA_SUBSCRIBE_TEMPLATE, key = "#userType",
+    @Cacheable(cacheNames = RedisKeyConstants.WXA_SUBSCRIBE_TEMPLATE, key = "#application+':'+#userType",
             unless = "#result == null")
-    public List<TemplateInfo> getSubscribeTemplateList(Integer userType) {
-        WxMaService service = getWxMaService(userType);
+    public List<TemplateInfo> getSubscribeTemplateList(String application, Integer userType) {
+        WxMaService service = getWxMaService(application, userType);
         try {
             WxMaSubscribeService subscribeService = service.getSubscribeService();
             return subscribeService.getTemplateList();
@@ -296,7 +294,7 @@ public class SocialClientServiceImpl implements SocialClientService {
 
     @Override
     public void sendSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO, String templateId, String openId) {
-        WxMaService service = getWxMaService(reqDTO.getUserType());
+        WxMaService service = getWxMaService(reqDTO.getApplication(), reqDTO.getUserType());
         try {
             WxMaSubscribeService subscribeService = service.getSubscribeService();
             subscribeService.sendSubscribeMsg(buildMessageSendReqDTO(reqDTO, templateId, openId));
@@ -335,9 +333,9 @@ public class SocialClientServiceImpl implements SocialClientService {
      * @return WxMpService 对象
      */
     @VisibleForTesting
-    WxMaService getWxMaService(Integer userType) {
+    WxMaService getWxMaService(String application, Integer userType) {
         // 第一步,查询 DB 的配置项,获得对应的 WxMaService 对象
-        SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(
+        SocialClientDO client = socialClientMapper.selectBySocialApplicationAndTypeAndUserType(application,
                 SocialTypeEnum.WECHAT_MINI_APP.getType(), userType);
         if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
             return wxMaServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret());
@@ -349,7 +347,7 @@ public class SocialClientServiceImpl implements SocialClientService {
     /**
      * 创建 clientId + clientSecret 对应的 WxMaService 对象
      *
-     * @param clientId 微信小程序 appId
+     * @param clientId     微信小程序 appId
      * @param clientSecret 微信小程序 secret
      * @return WxMaService 对象
      */
@@ -372,7 +370,7 @@ public class SocialClientServiceImpl implements SocialClientService {
     @Override
     public Long createSocialClient(SocialClientSaveReqVO createReqVO) {
         // 校验重复
-        validateSocialClientUnique(null, createReqVO.getUserType(), createReqVO.getSocialType());
+        validateSocialClientUnique(null, createReqVO.getApplication(), createReqVO.getUserType(), createReqVO.getSocialType());
 
         // 插入
         SocialClientDO client = BeanUtils.toBean(createReqVO, SocialClientDO.class);
@@ -385,7 +383,7 @@ public class SocialClientServiceImpl implements SocialClientService {
         // 校验存在
         validateSocialClientExists(updateReqVO.getId());
         // 校验重复
-        validateSocialClientUnique(updateReqVO.getId(), updateReqVO.getUserType(), updateReqVO.getSocialType());
+        validateSocialClientUnique(updateReqVO.getId(), updateReqVO.getApplication(), updateReqVO.getUserType(), updateReqVO.getSocialType());
 
         // 更新
         SocialClientDO updateObj = BeanUtils.toBean(updateReqVO, SocialClientDO.class);
@@ -407,17 +405,24 @@ public class SocialClientServiceImpl implements SocialClientService {
     }
 
     /**
-     * 校验社交应用是否重复,需要保证 userType + socialType 唯一
+     * 校验社交应用是否重复,需要保证 application + userType + socialType 唯一
+     * <p>
+     * 原因是,不同端(userType)选择某个社交登录(socialType)时,需要通过 {@link #buildAuthRequest(String, Integer, Integer)} 构建对应的请求
      *
-     * 原因是,不同端(userType)选择某个社交登录(socialType)时,需要通过 {@link #buildAuthRequest(Integer, Integer)} 构建对应的请求
-     *
-     * @param id 编号
-     * @param userType 用户类型
+     * @param id         编号
+     * @param userType   用户类型
      * @param socialType 社交类型
      */
-    private void validateSocialClientUnique(Long id, Integer userType, Integer socialType) {
-        SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(
-                socialType, userType);
+    private void validateSocialClientUnique(Long id, String application, Integer userType, Integer socialType) {
+        SocialClientDO exist = socialClientMapper.selectByApplication(application);
+        if (null == id && null != exist) {
+            // 重复的application
+            throw exception(SOCIAL_CLIENT_UNIQUE);
+        }
+        if (null != exist && ObjUtil.notEqual(id, exist.getId())) {
+            throw exception(SOCIAL_CLIENT_UNIQUE);
+        }
+        SocialClientDO client = socialClientMapper.selectBySocialApplicationAndTypeAndUserType(application, socialType, userType);
         if (client == null) {
             return;
         }
@@ -425,6 +430,7 @@ public class SocialClientServiceImpl implements SocialClientService {
                 || ObjUtil.notEqual(id, client.getId())) { // 更新时,如果 id 不一致,说明重复
             throw exception(SOCIAL_CLIENT_UNIQUE);
         }
+
     }
 
     @Override
@@ -432,6 +438,11 @@ public class SocialClientServiceImpl implements SocialClientService {
         return socialClientMapper.selectById(id);
     }
 
+    @Override
+    public SocialClientDO getSocialClientByApplication(String application) {
+        return socialClientMapper.selectByApplication(application);
+    }
+
     @Override
     public PageResult<SocialClientDO> getSocialClientPage(SocialClientPageReqVO pageReqVO) {
         return socialClientMapper.selectPage(pageReqVO);

+ 4 - 0
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialUserService.java

@@ -68,6 +68,10 @@ public interface SocialUserService {
      */
     SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state);
 
+    SocialUserRespDTO getSocialUserByApplicationCode(String application, String code, String state);
+
+    SocialUserRespDTO getSocialUserByUserIdAndApplication(String application, Long userId);
+
     // ==================== 社交用户 CRUD ====================
 
     /**

+ 35 - 4
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/service/social/SocialUserServiceImpl.java

@@ -7,6 +7,7 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.system.api.social.dto.SocialUserBindReqDTO;
 import com.citu.module.system.api.social.dto.SocialUserRespDTO;
 import com.citu.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
+import com.citu.module.system.dal.dataobject.social.SocialClientDO;
 import com.citu.module.system.dal.dataobject.social.SocialUserBindDO;
 import com.citu.module.system.dal.dataobject.social.SocialUserDO;
 import com.citu.module.system.dal.mysql.social.SocialUserBindMapper;
@@ -119,14 +120,44 @@ public class SocialUserServiceImpl implements SocialUserService {
                 socialUserBind != null ? socialUserBind.getUserId() : null);
     }
 
+    @Override
+    public SocialUserRespDTO getSocialUserByApplicationCode(String application, String code, String state) {
+        SocialClientDO socialClient = socialClientService.getSocialClientByApplication(application);
+        // 获得社交用户
+        SocialUserDO socialUser = authSocialUser(socialClient.getSocialType(), socialClient.getUserType(), code, state);
+        Assert.notNull(socialUser, "社交用户不能为空");
+        // 获得绑定用户
+        SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserTypeAndSocialUserId(socialClient.getUserType(),
+                socialUser.getId());
+        return new SocialUserRespDTO(socialUser.getOpenid(), socialUser.getNickname(), socialUser.getAvatar(),
+                socialUserBind != null ? socialUserBind.getUserId() : null);
+    }
+
+
+    @Override
+    public SocialUserRespDTO getSocialUserByUserIdAndApplication(String application, Long userId) {
+        SocialClientDO socialClient = socialClientService.getSocialClientByApplication(application);
+        // 获得绑定用户
+        SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserIdAndUserTypeAndSocialType(userId,
+                socialClient.getUserType(), socialClient.getSocialType());
+        if (socialUserBind == null) {
+            return null;
+        }
+        // 获得社交用户
+        SocialUserDO socialUser = socialUserMapper.selectById(socialUserBind.getSocialUserId());
+        Assert.notNull(socialUser, "社交用户不能为空");
+        return new SocialUserRespDTO(socialUser.getOpenid(), socialUser.getNickname(), socialUser.getAvatar(),
+                socialUserBind.getUserId());
+    }
+
     /**
      * 授权获得对应的社交用户
      * 如果授权失败,则会抛出 {@link ServiceException} 异常
      *
      * @param socialType 社交平台的类型 {@link SocialTypeEnum}
-     * @param userType 用户类型
-     * @param code     授权码
-     * @param state    state
+     * @param userType   用户类型
+     * @param code       授权码
+     * @param state      state
      * @return 授权用户
      */
     @NotNull
@@ -139,7 +170,7 @@ public class SocialUserServiceImpl implements SocialUserService {
         }
 
         // 请求获取
-        AuthUser authUser = socialClientService.getAuthUser(socialType, userType, code, state);
+        AuthUser authUser = socialClientService.getAuthUser(null, socialType, userType, code, state);
         Assert.notNull(authUser, "三方用户不能为空");
 
         // 保存到 DB 中

+ 13 - 13
citu-module-system/citu-module-system-biz/src/test/java/com/citu/module/system/service/social/SocialClientServiceImplTest.java

@@ -85,7 +85,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
             when(authRequest.authorize(eq("aoteman"))).thenReturn("https://www.iocoder.cn?redirect_uri=yyy");
 
             // 调用
-            String url = socialClientService.getAuthorizeUrl(socialType, userType, redirectUri);
+            String url = socialClientService.getAuthorizeUrl(null,socialType, userType, redirectUri);
             // 断言
             assertEquals("https://www.iocoder.cn?redirect_uri=sss", url);
         }
@@ -151,7 +151,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         when(authRequestFactory.get(eq("WECHAT_MP"))).thenReturn(authRequest);
 
         // 调用
-        AuthRequest result = socialClientService.buildAuthRequest(socialType, userType);
+        AuthRequest result = socialClientService.buildAuthRequest(null,socialType, userType);
         // 断言
         assertSame(authRequest, result);
         assertSame(authConfig, ReflectUtil.getFieldValue(authConfig, "config"));
@@ -172,7 +172,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         socialClientMapper.insert(client);
 
         // 调用
-        AuthRequest result = socialClientService.buildAuthRequest(socialType, userType);
+        AuthRequest result = socialClientService.buildAuthRequest(null,socialType, userType);
         // 断言
         assertSame(authRequest, result);
         assertSame(authConfig, ReflectUtil.getFieldValue(authConfig, "config"));
@@ -194,7 +194,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         socialClientMapper.insert(client);
 
         // 调用
-        AuthRequest result = socialClientService.buildAuthRequest(socialType, userType);
+        AuthRequest result = socialClientService.buildAuthRequest(null,socialType, userType);
         // 断言
         assertSame(authRequest, result);
         assertNotSame(authConfig, ReflectUtil.getFieldValue(authRequest, "config"));
@@ -212,7 +212,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         when(wxMpService.createJsapiSignature(eq(url))).thenReturn(signature);
 
         // 调用
-        WxJsapiSignature result = socialClientService.createWxMpJsapiSignature(userType, url);
+        WxJsapiSignature result = socialClientService.createWxMpJsapiSignature(null,userType, url);
         // 断言
         assertSame(signature, result);
     }
@@ -224,7 +224,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         // mock 方法
 
         // 调用
-        WxMpService result = socialClientService.getWxMpService(userType);
+        WxMpService result = socialClientService.getWxMpService(null,userType);
         // 断言
         assertSame(wxMpService, result);
     }
@@ -239,7 +239,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         socialClientMapper.insert(client);
 
         // 调用
-        WxMpService result = socialClientService.getWxMpService(userType);
+        WxMpService result = socialClientService.getWxMpService(null,userType);
         // 断言
         assertSame(wxMpService, result);
     }
@@ -257,7 +257,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         when(wxMpProperties.getConfigStorage()).thenReturn(configStorage);
 
         // 调用
-        WxMpService result = socialClientService.getWxMpService(userType);
+        WxMpService result = socialClientService.getWxMpService(null,userType);
         // 断言
         assertNotSame(wxMpService, result);
         assertEquals(client.getClientId(), result.getWxMpConfigStorage().getAppId());
@@ -278,7 +278,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         when(userService.getPhoneNoInfo(eq(phoneCode))).thenReturn(phoneNumber);
 
         // 调用
-        WxMaPhoneNumberInfo result = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode);
+        WxMaPhoneNumberInfo result = socialClientService.getWxMaPhoneNumberInfo(null,userType, phoneCode);
         // 断言
         assertSame(phoneNumber, result);
     }
@@ -295,7 +295,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         when(userService.getPhoneNoInfo(eq(phoneCode))).thenThrow(wxErrorException);
 
         // 调用并断言异常
-        assertServiceException(() -> socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode),
+        assertServiceException(() -> socialClientService.getWxMaPhoneNumberInfo(null,userType, phoneCode),
                 SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR);
     }
 
@@ -306,7 +306,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         // mock 方法
 
         // 调用
-        WxMaService result = socialClientService.getWxMaService(userType);
+        WxMaService result = socialClientService.getWxMaService(null,userType);
         // 断言
         assertSame(wxMaService, result);
     }
@@ -321,7 +321,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         socialClientMapper.insert(client);
 
         // 调用
-        WxMaService result = socialClientService.getWxMaService(userType);
+        WxMaService result = socialClientService.getWxMaService(null,userType);
         // 断言
         assertSame(wxMaService, result);
     }
@@ -339,7 +339,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
         when(wxMaProperties.getConfigStorage()).thenReturn(configStorage);
 
         // 调用
-        WxMaService result = socialClientService.getWxMaService(userType);
+        WxMaService result = socialClientService.getWxMaService(null,userType);
         // 断言
         assertNotSame(wxMaService, result);
         assertEquals(client.getClientId(), result.getWxMaConfig().getAppid());

+ 17 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/SocialApplicationConstants.java

@@ -0,0 +1,17 @@
+package com.citu.module.menduner.system.enums;
+
+/**
+ * 社交应用常量
+ **/
+public class SocialApplicationConstants {
+
+    /**
+     * 求职端小程序应用标识
+     **/
+    public final static String SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION ="jobhunt_application";
+
+    /**
+     * 招聘端端小程序应用标识
+     **/
+    public final static String SOCIAL_WX_PROGRAM_RECRUIT_APPLICATION ="recruit_application";
+}

+ 0 - 4
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/TradeOrderTypeMq.java

@@ -18,10 +18,6 @@ public class TradeOrderTypeMq {
      * 用户微信小程序支付
      **/
     public static final String PAY_APP_USER_WX_PROGRAM_KEY = "wx-program";
-    /**
-     * 企业微信小程序支付
-     **/
-    public static final String PAY_APP_ENTERPRISE_WX_PROGRAM_KEY = "wx-program-enterprise";
 
 
     /** 平台订单 **/

+ 6 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/auth/AppMdeAuthController.java

@@ -31,6 +31,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 
 import static com.citu.framework.common.pojo.CommonResult.success;
+import static com.citu.module.menduner.system.enums.SocialApplicationConstants.SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION;
 
 @Tag(name = "公共 - 用户登录")
 @RestController
@@ -117,12 +118,14 @@ public class AppMdeAuthController {
     @GetMapping("/social-auth-redirect")
     @Operation(summary = "社交授权的跳转")
     @Parameters({
+            @Parameter(name = "application", description = "应用标识", example = "1", required = false),
             @Parameter(name = "type", description = "社交类型", required = true),
             @Parameter(name = "redirectUri", description = "回调路径")
     })
-    public CommonResult<String> socialAuthRedirect(@RequestParam("type") String type,
+    public CommonResult<String> socialAuthRedirect(@RequestParam(value = "application", required = false) String application,
+                                                   @RequestParam("type") String type,
                                                    @RequestParam("redirectUri") String redirectUri) {
-        return CommonResult.success(authService.getSocialAuthorizeUrl(type, redirectUri));
+        return CommonResult.success(authService.getSocialAuthorizeUrl(null == application ? SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION : application,type, redirectUri));
     }
 
     @PostMapping("/social-login")
@@ -142,7 +145,7 @@ public class AppMdeAuthController {
             description = "参考 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 文档")
     public CommonResult<SocialWxJsapiSignatureRespDTO> createWeixinMpJsapiSignature(@RequestParam("url") String url) {
         SocialWxJsapiSignatureRespDTO signature = socialClientApi.createWxMpJsapiSignature(
-                UserTypeEnum.MEMBER.getValue(), url).getCheckedData();
+                SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION,UserTypeEnum.MEMBER.getValue(), url).getCheckedData();
         return success(MdeAuthConvert.INSTANCE.convert(signature));
     }
 

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/auth/vo/AppMdeAuthSocialLoginReqVO.java

@@ -18,6 +18,9 @@ import javax.validation.constraints.NotNull;
 @Builder
 public class AppMdeAuthSocialLoginReqVO {
 
+    @Schema(description = "应用标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "jobhunt_application")
+    private String application;
+
     @Schema(description = "社交平台的类型,参见 SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
     @InEnum(SocialTypeEnum.class)
     @NotNull(message = "{1_100_017_014}")

+ 13 - 8
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/social/AppSocialUserController.java

@@ -25,6 +25,7 @@ import javax.validation.Valid;
 import java.util.List;
 
 import static com.citu.framework.common.pojo.CommonResult.success;
+import static com.citu.module.menduner.system.enums.SocialApplicationConstants.SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION;
 
 @Tag(name = "公共 - 社交用户")
 @RestController
@@ -46,7 +47,8 @@ public class AppSocialUserController {
                 UserTypeEnum.MEMBER.getValue(),
                 reqVO.getType(),
                 reqVO.getCode(),
-                reqVO.getState()
+                reqVO.getState(),
+                null == reqVO.getApplication() ? SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION : reqVO.getApplication()
         );
         String openid = socialUserApi.bindSocialUser(reqDTO).getCheckedData();
         return success(openid);
@@ -60,7 +62,8 @@ public class AppSocialUserController {
                 LoginUserContext.getUserId(),
                 UserTypeEnum.MEMBER.getValue(),
                 reqVO.getType(),
-                reqVO.getOpenid()
+                reqVO.getOpenid(),
+                null == reqVO.getApplication() ? SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION : reqVO.getApplication()
         );
         socialUserApi.unbindSocialUser(reqDTO).getCheckedData();
         return success(true);
@@ -70,11 +73,11 @@ public class AppSocialUserController {
     @Operation(summary = "获得社交用户")
     @Parameter(name = "type", description = "社交平台的类型,参见 SocialTypeEnum 枚举值", required = true, example = "10")
     @PreAuthenticated
-    public CommonResult<AppSocialUserRespVO> getSocialUser(@RequestParam("type") Integer type) {
-        SocialUserRespDTO socialUser = socialUserApi.getSocialUserByUserId(
-                UserTypeEnum.MEMBER.getValue(),
-                LoginUserContext.getUserId(),
-                type
+    public CommonResult<AppSocialUserRespVO> getSocialUser(@RequestParam("type") Integer type,
+                                                           @RequestParam(value = "application", required = false) String application) {
+        SocialUserRespDTO socialUser = socialUserApi.getSocialUserByUserIdAndApplication(
+                null == application ? SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION : application,
+                LoginUserContext.getUserId()
         ).getCheckedData();
         return success(BeanUtils.toBean(socialUser, AppSocialUserRespVO.class));
     }
@@ -88,8 +91,10 @@ public class AppSocialUserController {
 
     @GetMapping("/get-subscribe-template-list")
     @Operation(summary = "获得微信小程订阅模板列表")
-    public CommonResult<List<AppSocialWxaSubscribeTemplateRespVO>> getSubscribeTemplateList() {
+    public CommonResult<List<AppSocialWxaSubscribeTemplateRespVO>> getSubscribeTemplateList(
+            @RequestParam(value = "application", required = false) String application) {
         List<SocialWxaSubscribeTemplateRespDTO> template = socialClientApi.getWxaSubscribeTemplateList(
+                null == application ? SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION : application,
                 UserTypeEnum.MEMBER.getValue()
         ).getCheckedData();
         return success(BeanUtils.toBean(template, AppSocialWxaSubscribeTemplateRespVO.class));

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/social/vo/AppSocialUserBindReqVO.java

@@ -12,6 +12,9 @@ import javax.validation.constraints.NotNull;
 @Data
 public class AppSocialUserBindReqVO {
 
+    @Schema(description = "社交应用标识")
+    private String application;
+
     @Schema(description = "社交平台的类型,参见 SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
     @InEnum(SocialTypeEnum.class)
     @NotNull(message = "社交平台的类型不能为空")

+ 6 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/social/vo/AppSocialUserUnbindReqVO.java

@@ -21,4 +21,10 @@ public class AppSocialUserUnbindReqVO {
     @NotEmpty(message = "社交用户的 openid 不能为空")
     private String openid;
 
+
+    // ========== 扩展 ==========
+
+    @Schema(description = "社交应用标识")
+    private String application;
+
 }

+ 0 - 25
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/order/AppRecruitTradeOrderController.java

@@ -29,7 +29,6 @@ import static com.citu.framework.common.pojo.CommonResult.success;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_NOT_EXISTS;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_REQUEST_ILLEGAL;
 import static com.citu.module.menduner.system.enums.TradeOrderTypeMq.PAY_APP_ENTERPRISE_KEY;
-import static com.citu.module.menduner.system.enums.TradeOrderTypeMq.PAY_APP_ENTERPRISE_WX_PROGRAM_KEY;
 
 @Tag(name = "招聘端 - 交易订单")
 @RestController
@@ -76,30 +75,6 @@ public class AppRecruitTradeOrderController {
         return success(tradeOrderService.createOrder(dto, PAY_APP_ENTERPRISE_KEY));
     }
 
-    @PostMapping("/wx-program/create")
-    @Operation(summary = "创建订单")
-    @PreAuthenticated
-    @ApiSignature(timeout = 30)
-    public CommonResult<Long> create2(@RequestBody @Valid AppTradeOrderCreateReqVO reqVO) {
-        TradeOrderCreateReqVO dto = new TradeOrderCreateReqVO();
-        dto.setUserType(String.valueOf(MdeUserTypeEnum.ENTERPRISE_USER.getType()));
-        dto.setEnterpriseId(LoginUserContext.getEnterpriseId());
-        dto.setUserId(LoginUserContext.getUserId());
-        dto.setType(reqVO.getType());
-        dto.setSpuId(reqVO.getSpuId());
-        dto.setPrice(reqVO.getPrice());
-        dto.setSpuName(reqVO.getSpuName());
-        if (TradeOrderTypeEnum.ENTERPRISE_USER_MEMBER.getType().equals(dto.getType())) {
-            EnterprisePackageDO packageDO = enterprisePackageService.getEnterprisePackage(reqVO.getSpuId());
-            if (null == packageDO) {
-                throw exception(ENTERPRISE_PACKAGE_NOT_EXISTS);
-            }
-            if (null == reqVO.getPrice() || !reqVO.getPrice().equals(packageDO.getPrice())) {
-                throw exception(MDE_REQUEST_ILLEGAL);
-            }
-        }
-        return success(tradeOrderService.createOrder(dto, PAY_APP_ENTERPRISE_WX_PROGRAM_KEY));
-    }
 
     @GetMapping("/get/unpaid")
     @Operation(summary = "获取待支付的订单")

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthService.java

@@ -64,12 +64,12 @@ public interface MdeAuthService {
 
     /**
      * 获得社交认证 URL
-     *
+     * @param application  应用标识
      * @param type        社交平台类型
      * @param redirectUri 跳转地址
      * @return 认证 URL
      */
-    String getSocialAuthorizeUrl(String type, String redirectUri);
+    String getSocialAuthorizeUrl(String application,String type, String redirectUri);
 
     /**
      * 给用户发送短信验证码

+ 7 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeAuthServiceImpl.java

@@ -47,7 +47,6 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.validation.Validator;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
@@ -58,6 +57,7 @@ import static com.citu.framework.web.core.util.WebFrameworkUtils.getTerminal;
 import static com.citu.module.menduner.system.controller.base.logger.LoginLogCreateReqDTO.TYPE_USER;
 import static com.citu.module.menduner.system.dal.redis.RedisKeyConstants.*;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
+import static com.citu.module.menduner.system.enums.SocialApplicationConstants.SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION;
 
 /**
  * menduner的认证 Service 接口 实现
@@ -183,7 +183,7 @@ public class MdeAuthServiceImpl implements MdeAuthService {
                 // 获取错误次数
                 String num =
                         redisTemplate.opsForValue()
-                                .get(String.format(MDE_AUTH_USER_PWD_LOCK,account));
+                                .get(String.format(MDE_AUTH_USER_PWD_LOCK, account));
                 Integer numInt = Integer.parseInt(null == num ? "0" : num) + 1;
 
                 redisTemplate.opsForValue()
@@ -338,7 +338,8 @@ public class MdeAuthServiceImpl implements MdeAuthService {
     @DSTransactional
     public AppMdeAuthLoginRespVO socialLogin(AppMdeAuthSocialLoginReqVO reqVO) {
         // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
-        SocialUserRespDTO socialUser = socialUserApi.getSocialUserByCode(UserTypeEnum.MEMBER.getValue(), reqVO.getType(),
+        SocialUserRespDTO socialUser = socialUserApi.getSocialUserByApplicationCode(
+                null == reqVO.getApplication() ? SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION : reqVO.getApplication(),
                 reqVO.getCode(), reqVO.getState()).getCheckedData();
         if (socialUser == null) {
             throw exception(MDE_AUTH_SOCIAL_USER_NOT_FOUND);
@@ -367,6 +368,7 @@ public class MdeAuthServiceImpl implements MdeAuthService {
     public AppMdeAuthLoginRespVO weixinMiniAppLogin(AppMdeAuthWeixinMiniAppLoginReqVO reqVO) {
         // 获得对应的手机号信息
         SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(
+                SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION,
                 UserTypeEnum.MEMBER.getValue(), reqVO.getPhoneCode()).getCheckedData();
         Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
 
@@ -384,8 +386,8 @@ public class MdeAuthServiceImpl implements MdeAuthService {
     }
 
     @Override
-    public String getSocialAuthorizeUrl(String type, String redirectUri) {
-        return socialClientApi.getAuthorizeUrl(Integer.valueOf(type), UserTypeEnum.MEMBER.getValue(), redirectUri).getCheckedData();
+    public String getSocialAuthorizeUrl(String application, String type, String redirectUri) {
+        return socialClientApi.getAuthorizeUrl(application, Integer.valueOf(type), UserTypeEnum.MEMBER.getValue(), redirectUri).getCheckedData();
     }
 
     @Override

+ 10 - 8
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/user/MdeUserServiceImpl.java

@@ -13,7 +13,10 @@ import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.datapermission.core.util.DataPermissionUtils;
 import com.citu.module.menduner.common.dto.TimeRangeBasePageReqVO;
 import com.citu.module.menduner.common.dto.TimeRangeBaseReqVO;
-import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.*;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserCreatePhonePCReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserUpdatePasswordReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserUpdatePhoneByWeixinReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.user.vo.AppMdeUserUpdatePhoneReqVO;
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
 import com.citu.module.menduner.system.controller.base.user.MdeUserPageReqVO;
@@ -23,7 +26,6 @@ import com.citu.module.menduner.system.controller.base.userperson.UserPersonResp
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
 import com.citu.module.menduner.system.dal.mysql.user.MdeUserMapper;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
-import com.citu.module.menduner.system.enums.permission.MdeDefaultRoleEnum;
 import com.citu.module.menduner.system.service.permission.MdePermissionService;
 import com.citu.module.system.api.sms.SmsCodeApi;
 import com.citu.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
@@ -42,7 +44,6 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -54,6 +55,7 @@ import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRan
 import static com.citu.module.menduner.system.dal.redis.RedisKeyConstants.*;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
 import static com.citu.module.menduner.system.enums.MdeLogRecordConstants.*;
+import static com.citu.module.menduner.system.enums.SocialApplicationConstants.SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION;
 import static com.citu.module.menduner.system.util.RecruitAnalysisUtils.packBarCount;
 import static com.citu.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS;
 
@@ -84,7 +86,7 @@ public class MdeUserServiceImpl implements MdeUserService {
 
     @Resource
     @Lazy
-    private RedisTemplate<String,String> redisTemplate;
+    private RedisTemplate<String, String> redisTemplate;
 
 
     @Override
@@ -237,7 +239,7 @@ public class MdeUserServiceImpl implements MdeUserService {
 
     @Override
     @DSTransactional // 单机+多数据源方案,使用 @DSTransactional 保证本地事务,以及数据源的切换
-    @Lock4j(keys = {"#phone"},  acquireTimeout = 6000)
+    @Lock4j(keys = {"#phone"}, acquireTimeout = 6000)
     public MdeUserDO createUserIfAbsent(String phone, String registerIp, String terminal) {
         // 用户已经存在
         MdeUserDO user = mdeUserMapper.selectByPhone(phone);
@@ -250,7 +252,7 @@ public class MdeUserServiceImpl implements MdeUserService {
 
     @Override
     @DSTransactional // 单机+多数据源方案,使用 @DSTransactional 保证本地事务,以及数据源的切换
-    @Lock4j(keys = {"#phone"},  acquireTimeout = 6000)
+    @Lock4j(keys = {"#phone"}, acquireTimeout = 6000)
     public MdeUserDO createUserIfAbsent(String phone, Long inviteCode) {
         // 用户已经存在
         MdeUserDO user = mdeUserMapper.selectByPhone(phone);
@@ -371,7 +373,7 @@ public class MdeUserServiceImpl implements MdeUserService {
     public void updateUserMobileByWeixin(Long userId, AppMdeUserUpdatePhoneByWeixinReqVO reqVO) {
         // 1.1 获得对应的手机号信息
         SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(
-                UserTypeEnum.MEMBER.getValue(), reqVO.getCode()).getCheckedData();
+                SOCIAL_WX_PROGRAM_JOBHUNT_APPLICATION, UserTypeEnum.MEMBER.getValue(), reqVO.getCode()).getCheckedData();
         Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
         // 1.2 校验新手机是否已经被绑定
         validatePhoneUnique(userId, phoneNumberInfo.getPhoneNumber());
@@ -389,7 +391,7 @@ public class MdeUserServiceImpl implements MdeUserService {
                 .setScene(SmsSceneEnum.MENDUNER_UPDATE_PASSWORD.getScene()).setUsedIp(getClientIP())).getCheckedData();
 
         // 更新用户密码
-        updateUserPassword(userId,reqVO.getPassword());
+        updateUserPassword(userId, reqVO.getPassword());
     }