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

绑定微信,手机号逻辑修改

15376779826 2 тижнів тому
батько
коміт
b248e30110

+ 2 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -98,6 +98,8 @@ public interface IFsUserService
      */
     public int deleteFsUserByUserId(Long userId);
 
+    int realDeleteFsUserByUserId(Long userId);
+
     List<FsUserVO> selectFsUserListVO(FsUserParam fsUser);
 
     FsUser selectFsUserByOpenId(String openId);

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -286,6 +286,11 @@ public class FsUserServiceImpl implements IFsUserService {
         return fsUserMapper.updateFsUserByUserId(userId);
     }
 
+    @Override
+    public int realDeleteFsUserByUserId(Long userId) {
+        return fsUserMapper.deleteFsUserByUserId(userId);
+    }
+
     /**
      * 列表查询
      * @param fsUser

+ 54 - 21
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -277,7 +277,7 @@ public class AppLoginController extends AppBaseController{
                     userMap.setAppId(updatedAppId);
                     userService.updateFsUser(userMap);
                 }
-                
+
                 if (StringUtils.isNotEmpty(param.getJpushId())) {
                     updateExistingUserJpushId(user, param.getJpushId());
                 }
@@ -358,6 +358,7 @@ public class AppLoginController extends AppBaseController{
 
     @ApiOperation("绑定手机号")
     @PostMapping("/setPhone")
+    @Transactional(rollbackFor = Exception.class)
     public R setPhone(@Validated @RequestBody FsUserEditPhoneParam param) {
         logger.info("fcj 绑定手机号入参:{}", param);
         FsUser user = userService.selectFsUserByUnionid(param.getUnionId());
@@ -365,9 +366,20 @@ public class AppLoginController extends AppBaseController{
             return R.error("用户数据不存在");
         }
         FsUser userMap = findUserByPhone(param.getPhone());
-//        if (userMap!=null){
-//            return R.error("该手机号已绑定其他账号");
-//        }
+        //绑定的手机号已存在用户的情况,将微信登录的时候创建的新号的UnionId移动到老号中,删除新号(将两个号合并)
+        if (userMap!=null){
+            if (StringUtils.isNotEmpty(userMap.getUnionId())&&!userMap.getUnionId().equals(user.getUnionId())){
+                return R.error("该手机号已绑定其他微信");
+            }
+            userMap.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
+            userMap.setSource(param.getSource());
+            userMap.setUnionId(user.getUnionId());
+            if (userService.updateFsUser(userMap)>0){
+                userService.realDeleteFsUserByUserId(user.getUserId());
+                return generateTokenAndReturn(userMap);
+            }
+            return R.error("绑定手机号失败");
+        }
         user.setPhone(param.getPhone());
         user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null );
         user.setSource(param.getSource()!= null ? param.getSource() : null);
@@ -384,10 +396,14 @@ public class AppLoginController extends AppBaseController{
 
     @ApiOperation("绑定微信")
     @PostMapping("/bindWeChat")
+    @Transactional(rollbackFor = Exception.class)
     public R bindWeChat(@Validated @RequestBody FsUserEditUnionidParam param) {
         try {
             logger.info("zyp app绑定微信,param:{}", param);
             Map result = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
+            if (!result.containsKey("access_token")) {
+                return R.error("微信授权失败");
+            }
             String accessToken = result.get("access_token").toString();
             String unionid = result.get("unionid").toString();
             String openid = result.get("openid").toString();
@@ -398,21 +414,38 @@ public class AppLoginController extends AppBaseController{
             FsUser user = findUserByPhone(param.getPhone());
             if (user!=null && StringUtils.isEmpty(user.getUnionId())){
                 FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
-//                if (userByUnionId!=null){
-//                    return R.error("该微信已绑定其他用户,请勿重复绑定!");
-//                }
-                user.setSource(param.getSource() != null ? param.getSource() : null );
-                user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
-                user.setNickName(nickname);
-                user.setAvatar(avatar);
-                user.setSex(sex);
-                user.setUnionId(unionid);
-                if (userService.updateFsUser(user)>0){
-                    return generateTokenAndReturn(user);
+                //绑定的微信已存在用户的情况,将手机号一键登录的时候创建的新号的UnionId移动到老号中,删除新号(将两个号合并)
+                if (userByUnionId!=null){
+                    if (StringUtils.isNotEmpty(userByUnionId.getPhone())&&!user.getPhone().equals(userByUnionId.getPhone())){
+                        return R.error("该微信已绑定其他手机号");
+                    }
+                    userByUnionId.setPhone(user.getPhone());
+                    userByUnionId.setSource(param.getSource() != null ? param.getSource() : null );
+                    userByUnionId.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
+                    userByUnionId.setNickName(nickname);
+                    userByUnionId.setAvatar(avatar);
+                    userByUnionId.setSex(sex);
+                    if (userService.updateFsUser(userByUnionId)>0){
+                        userService.realDeleteFsUserByUserId(user.getUserId());
+                        return generateTokenAndReturn(userByUnionId);
+                    }
+                    else {
+                        return R.error("绑定微信失败");
+                    }
+                }else {
+                    user.setSource(param.getSource() != null ? param.getSource() : null );
+                    user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
+                    user.setNickName(nickname);
+                    user.setAvatar(avatar);
+                    user.setSex(sex);
+                    user.setUnionId(unionid);
+                    if (userService.updateFsUser(user)>0){
+                        return generateTokenAndReturn(user);
+                    }
+                    else {
+                        return R.error("绑定微信失败");
+                    }
                 }
-//                else {
-//                    return R.error("绑定微信失败");
-//                }
             }
             return R.error("数据参数异常!");
         }catch (Exception e){
@@ -736,12 +769,12 @@ public class AppLoginController extends AppBaseController{
         if (StringUtils.isEmpty(newAppId)) {
             return currentAppIds == null ? "" : currentAppIds;
         }
-        
+
         // 如果当前appId为空,直接返回新appId
         if (StringUtils.isEmpty(currentAppIds)) {
             return newAppId;
         }
-        
+
         // 检查是否已存在
         String[] appIdArray = currentAppIds.split(",");
         for (String appId : appIdArray) {
@@ -750,7 +783,7 @@ public class AppLoginController extends AppBaseController{
                 return currentAppIds;
             }
         }
-        
+
         // 不存在,追加到末尾
         return currentAppIds + "," + newAppId;
     }