Переглянути джерело

炮灰小程序-公众号登录转小程序

三七 3 тижнів тому
батько
коміт
9c4bd0de26

+ 70 - 0
fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

@@ -28,6 +28,7 @@ import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.C;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -122,6 +123,45 @@ public class WxH5MpController {
         }
     }
 
+    @ApiOperation("炮灰小程序-公众号登录转小程序")
+    @PostMapping("/courseLoginByMp")
+    public R courseLoginByMp(@Valid @RequestBody FsUserLoginByMpParam param) {
+        log.info("=====================进入炮灰小程序-公众号授权登录, 入参: {}", param);
+
+        // 参数校验
+        if (StringUtils.isBlank(param.getCode())) {
+            return R.error("code不存在");
+        }
+
+        // 公司状态校验
+        Company company = companyService.selectCompanyById(param.getCompanyId());
+        if (company == null || company.getStatus() == 0) {
+            return R.error("注册失败团队已停用,或不存在!");
+        }
+
+        // 客服状态校验
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());
+        if (companyUser == null || "1".equals(companyUser.getStatus())) {
+            return R.error("注册失败客服已停用,或不存在!");
+        }
+
+        try {
+            // 获取微信用户信息
+            WxOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(param.getCode());
+            WxOAuth2UserInfo wxMpUser = wxMpService.getOAuth2Service().getUserInfo(wxMpOAuth2AccessToken, null);
+
+            // 处理用户信息
+            FsUser user = processUserInfoByCourseLoginByMp(wxMpUser);
+
+            // 生成token并返回结果
+            return generateLoginResult(user);
+        } catch (WxErrorException e) {
+            this.logger.error(e.getMessage(), e);
+            return R.error("授权失败," + e.getMessage());
+        }
+    }
+
+
     private FsUser processUserInfo(WxOAuth2UserInfo wxMpUser, Company company,CompanyUser companyUser,FsUserLoginByMpParam param) {
         FsUser user = userService.selectFsUserByUnionId(wxMpUser.getUnionId());
 
@@ -158,6 +198,36 @@ public class WxH5MpController {
         }
     }
 
+    private FsUser processUserInfoByCourseLoginByMp(WxOAuth2UserInfo wxMpUser) {
+        FsUser user = userService.selectFsUserByUnionId(wxMpUser.getUnionId());
+
+        if (user != null) {
+            // 更新现有用户信息
+            FsUser userUpdate = new FsUser();
+            userUpdate.setUserId(user.getUserId());
+            userUpdate.setMpOpenId(wxMpUser.getOpenid());
+            userUpdate.setUnionId(wxMpUser.getUnionId());
+            userUpdate.setUpdateTime(new DateTime());
+            userUpdate.setNickName(wxMpUser.getNickname());
+            userUpdate.setAvatar(wxMpUser.getHeadImgUrl());
+            userService.updateFsUser(userUpdate);
+            return userUpdate;
+        } else {
+            // 创建新用户
+            FsUser newUser = new FsUser();
+            newUser.setNickName(wxMpUser.getNickname());
+            newUser.setAvatar(wxMpUser.getHeadImgUrl());
+            newUser.setStatus(1);
+            newUser.setMpOpenId(wxMpUser.getOpenid());
+//            newUser.setCompanyId(company.getCompanyId());
+//            newUser.setCompanyUserId(companyUser.getUserId());
+            newUser.setUnionId(wxMpUser.getUnionId());
+            newUser.setCreateTime(new Date());
+            userService.insertFsUser(newUser);
+            return newUser;
+        }
+    }
+
     private void processUserCompanyRelationship(FsUser user, FsUserLoginByMpParam param,
                                                 CompanyUser companyUser, Company company) {
         if ((companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)