Browse Source

update:绑定微信优化

ct 3 days ago
parent
commit
35a76bc05d

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

@@ -235,4 +235,6 @@ public interface IFsUserService
     List<FsUser> selectFsUserListByPhone(String phone);
 
     R updatePasswordByPhone(String password, String encryptPhone);
+
+    int realDeleteFsUserByUserId(Long userId);
 }

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

@@ -1619,4 +1619,9 @@ public class FsUserServiceImpl implements IFsUserService {
         return R.ok();
     }
 
+    @Override
+    public int realDeleteFsUserByUserId(Long userId) {
+        return fsUserMapper.deleteFsUserByUserId(userId);
+    }
+
 }

+ 48 - 17
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -365,9 +365,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);
@@ -388,6 +399,9 @@ public class AppLoginController extends AppBaseController{
         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 +412,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(param.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);
+//                    user.setAppOpenId(openid);
+                    if (userService.updateFsUser(user)>0){
+                        return generateTokenAndReturn(user);
+                    }else {
+                        return R.error("绑定微信失败");
+                    }
                 }
-//                else {
-//                    return R.error("绑定微信失败");
-//                }
             }
             return R.error("数据参数异常!");
         }catch (Exception e){