瀏覽代碼

医健宝APP登录相关提交

yjwang 2 周之前
父節點
當前提交
b860de90f9

+ 3 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -456,4 +456,7 @@ public interface FsUserMapper
 
     void updatePasswordByPhone(@Param("password")String password, @Param("encryptPhone")String encryptPhone);
 
+    @Select("select * from fs_user where phone=#{phone}")
+    List<FsUser> selectFsUsersByPhoneLimitOne(String phone);
+
 }

+ 164 - 77
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -321,103 +321,175 @@ public class AppLoginController extends AppBaseController{
             return R.error("账号或密码不能为空");
         }
 
-//        Map result = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
-//        String unionid = result.get("unionid").toString();
-        FsUser user = findUserByPhone(param.getPhone());
-
-        // 校验用户是否存在及账号状态
-        if (user == null) {
-            return R.error("账号不存在,请先注册账号");
-        } else if (user.getStatus() == 0) {
-            return R.error("账号已停用");
-        } else if (StringUtils.isEmpty(user.getPassword())) {
+        FsUser user = null;
+        List<FsUser> usersByPhone = findUsersByPhone(param.getPhone());
+        if (CollectionUtil.isEmpty(usersByPhone)){
             return R.error("账号不存在,请先注册账号");
         }
+        //当前手机号只绑定了单个微信,直接登录
+        if (usersByPhone.size()==1){
+            user = usersByPhone.get(0);
+            // 校验用户是否存在及账号状态
+            if (user == null) {
+                return R.error("账号不存在,请先注册账号");
+            } else if (user.getStatus() == 0&&StringUtils.isNotEmpty(param.getSource())&&!param.getSource().equals("iOS")) {
+                return R.error("账号已停用");
+            } else if (StringUtils.isEmpty(user.getPassword())) {
+                return R.error("账号不存在,请先注册账号");
+            }
 
-        if (StringUtils.isNotEmpty(param.getJpushId())) {
-            updateExistingUserJpushId(user, param.getJpushId());
-        }
+            if (StringUtils.isNotEmpty(param.getJpushId())) {
+                updateExistingUserJpushId(user, param.getJpushId());
+//                try {
+//                    //发送注册优惠券
+//                    fsUserCouponService.sendRegisterCoupon(user);
+//                } catch (Exception e) {
+//                    logger.error("发送注册优惠券失败:{}",e.getMessage());
+//                }
+            }
+
+            if (!Md5Utils.hash(param.getPassword()).equals(user.getPassword())) {
+                return R.error("密码不正确");
+            }
+
+            // 更新登录设备信息
+            updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
 
-        if (!Md5Utils.hash(param.getPassword()).equals(user.getPassword())) {
-            return R.error("密码不正确");
+            //登录成功以后写入达人表
+            //fsUserTalentService.addFsUserTalent(fsUser.getUserId());
+            return generateTokenAndReturn(user);
+        }else {
+            return R.ok().put("users",usersByPhone);
         }
 
-        return generateTokenAndReturn(user);
 
     }
 
+//    private R handleLoginType3(FsUserLoginParam param) {
+//        if (StringUtils.isEmpty(param.getPhone())) {
+//            return R.error("获取手机号失败");
+//        }
+//        String phone = param.getPhone();
+//        String encryptedPhone = encryptPhone(phone);
+//        logger.info("zyp app绑定微信,param: {}", param);
+//        Map tokenResult = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
+//        logger.info("APP的ID信息: {}", openProperties.getAppId());
+//        logger.info("APP的密钥信息: {}", openProperties.getSecret());
+//        String accessToken = tokenResult.get("access_token").toString();
+//        String unionid = String.valueOf(tokenResult.get("unionid"));
+//        logger.info("APP获取的唯一ID信息: {}",unionid);
+//        String openid = String.valueOf(tokenResult.get("openid"));
+//
+//        // 根据手机号查用户
+//        FsUser user = findUserByPhone(phone);
+//
+//        // 获取微信用户信息
+//        Map userInfo = WxUtil.getUserInfo(accessToken, openid);
+//        if (userInfo == null) {
+//            return R.error("获取微信用户信息失败");
+//        }
+//        String nickname = String.valueOf(userInfo.get("nickname"));
+//        Integer sex = (Integer) userInfo.get("sex");
+//        String avatar = String.valueOf(userInfo.get("headimgurl"));
+//        if (tokenResult == null || tokenResult.get("access_token") == null) {
+//            return R.error("微信授权失败");
+//        }
+//        param.setUnionid(unionid);
+//        param.setOpenId(openid);
+//        param.setNickName(nickname);
+//        param.setAvatar(avatar);
+//        // 手机号不存在,根据unionid查询
+//        if (user == null) {
+//            // 根据unionid查询不到,创建新用户
+//            FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
+//            if (userByUnionId == null) {
+//                FsUser newUser = createNewUser(param);
+//                return generateTokenAndReturn(newUser);
+//            }else {
+//                //根据手机号查不到但是根据unionid查到了,将手机号和这个用户关联起来
+//                if (userByUnionId.getPhone() != null){
+//                    return R.error("该微信已绑定其他用户,请勿重复绑定!");
+//                }
+//                userByUnionId.setPhone(encryptPhone(param.getPhone()));
+//                userByUnionId.setNickName(nickname);
+//                userByUnionId.setAvatar(avatar);
+//                userByUnionId.setSex(sex);
+//                userByUnionId.setJpushId(param.getJpushId());
+//                userMapper.updateFsUser(userByUnionId);
+//                return generateTokenAndReturn(userByUnionId);
+//            }
+//        }else {
+//            // 手机号存在,但unionId为空,绑定微信
+//            if (user.getUnionId() == null) {
+//                user.setUnionId(unionid);
+//                user.setNickName(nickname);
+//                user.setAvatar(avatar);
+//                user.setSex(sex);
+//                user.setJpushId(param.getJpushId());
+//                userMapper.updateFsUser(user);
+//                return generateTokenAndReturn(user);
+//            }
+//        }
+//        //用户已存在且 unionid 存在更新 JPush ID
+//        if (StringUtils.isNotEmpty(param.getJpushId())) {
+//            updateExistingUserJpushId(user, param.getJpushId());
+//        }
+//        return generateTokenAndReturn(user);
+//    }
+
     private R handleLoginType3(FsUserLoginParam param) {
         if (StringUtils.isEmpty(param.getPhone())) {
             return R.error("获取手机号失败");
         }
-        String phone = param.getPhone();
-        String encryptedPhone = encryptPhone(phone);
-        logger.info("zyp app绑定微信,param: {}", param);
-        Map tokenResult = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
-        logger.info("APP的ID信息: {}", openProperties.getAppId());
-        logger.info("APP的密钥信息: {}", openProperties.getSecret());
-        String accessToken = tokenResult.get("access_token").toString();
-        String unionid = String.valueOf(tokenResult.get("unionid"));
-        logger.info("APP获取的唯一ID信息: {}",unionid);
-        String openid = String.valueOf(tokenResult.get("openid"));
-
-        // 根据手机号查用户
-        FsUser user = findUserByPhone(phone);
-
-        // 获取微信用户信息
-        Map userInfo = WxUtil.getUserInfo(accessToken, openid);
-        if (userInfo == null) {
-            return R.error("获取微信用户信息失败");
-        }
-        String nickname = String.valueOf(userInfo.get("nickname"));
-        Integer sex = (Integer) userInfo.get("sex");
-        String avatar = String.valueOf(userInfo.get("headimgurl"));
-        if (tokenResult == null || tokenResult.get("access_token") == null) {
-            return R.error("微信授权失败");
-        }
-        param.setUnionid(unionid);
-        param.setOpenId(openid);
-        param.setNickName(nickname);
-        param.setAvatar(avatar);
-        // 手机号不存在,根据unionid查询
-        if (user == null) {
-            // 根据unionid查询不到,创建新用户
-            FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
-            if (userByUnionId == null) {
-                FsUser newUser = createNewUser(param);
-                return generateTokenAndReturn(newUser);
-            }else {
-                //根据手机号查不到但是根据unionid查到了,将手机号和这个用户关联起来
-                if (userByUnionId.getPhone() != null){
-                    return R.error("该微信已绑定其他用户,请勿重复绑定!");
+        // 根据手机号查询用户
+        FsUser user = null;
+        List<FsUser> usersByPhone = findUsersByPhone(param.getPhone());
+        if (CollectionUtil.isEmpty(usersByPhone)){
+            FsUser newUser = createNewUser(param);
+            if (StringUtils.isNotEmpty(newUser.getJpushId())) {
+//                try {
+//                    //发送注册优惠券
+//                    fsUserCouponService.sendRegisterCoupon(newUser);
+//                } catch (Exception e) {
+//                    logger.error("发送注册优惠券失败:{}",e.getMessage());
+//                }
+            }
+            return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
+        }
+        if (usersByPhone.size()==1){
+            user = usersByPhone.get(0);
+            if (user.getUnionId()==null){
+                if (user.getPhone().length()<=11){
+                    FsUser fsUser = new FsUser();
+                    fsUser.setUserId(user.getUserId());
+                    fsUser.setPhone(encryptPhone(param.getPhone()));
+                    String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
+                    fsUser.setLastIp(ipAddr);
+                    userMapper.updateFsUser(fsUser);
+                    logger.info("zyp \n【手机加密】:{}",encryptPhone(param.getPhone()));
                 }
-                userByUnionId.setPhone(encryptPhone(param.getPhone()));
-                userByUnionId.setNickName(nickname);
-                userByUnionId.setAvatar(avatar);
-                userByUnionId.setSex(sex);
-                userByUnionId.setJpushId(param.getJpushId());
-                userMapper.updateFsUser(userByUnionId);
-                return generateTokenAndReturn(userByUnionId);
+                return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
             }
-        }else {
-            // 手机号存在,但unionId为空,绑定微信
-            if (user.getUnionId() == null) {
-                user.setUnionId(unionid);
-                user.setNickName(nickname);
-                user.setAvatar(avatar);
-                user.setSex(sex);
-                user.setJpushId(param.getJpushId());
-                userMapper.updateFsUser(user);
-                return generateTokenAndReturn(user);
+            if (StringUtils.isNotEmpty(param.getJpushId())) {
+                updateExistingUserJpushId(user, param.getJpushId());
+//                try {
+//                    //发送注册优惠券
+//                    fsUserCouponService.sendRegisterCoupon(user);
+//                } catch (Exception e) {
+//                    logger.error("发送注册优惠券失败:{}",e.getMessage());
+//                }
             }
+        }else {
+            return R.ok().put("users",usersByPhone);
         }
-        //用户已存在且 unionid 存在更新 JPush ID
-        if (StringUtils.isNotEmpty(param.getJpushId())) {
-            updateExistingUserJpushId(user, param.getJpushId());
-        }
+
+        // 更新登录设备信息
+        updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
+
         return generateTokenAndReturn(user);
     }
 
+
     private FsUser createNewUser(FsUserLoginParam param) {
         FsUser newUser = new FsUser();
         newUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
@@ -750,4 +822,19 @@ public class AppLoginController extends AppBaseController{
         userService.updateFsUser(updateUser);
     }
 
+    private List<FsUser> findUsersByPhone(String phone) {
+        // 先根据加密手机号查询用户
+        String jiami = (encryptPhone(phone));
+        List<FsUser> fsUsers = userMapper.selectFsUsersByPhoneLimitOne(jiami);
+        if (CollectionUtil.isEmpty(fsUsers)) {
+            fsUsers = userMapper.selectFsUsersByPhoneLimitOne(encryptPhoneOldKey(phone));
+        }
+        // 如果没有找到用户,再根据手机号查询
+        if (CollectionUtil.isEmpty(fsUsers)) {
+            fsUsers = userMapper.selectFsUsersByPhoneLimitOne(phone);
+
+        }
+        return fsUsers;
+    }
+
 }