浏览代码

苹果登录 根据开关是否创建新账号

xgb 6 天之前
父节点
当前提交
c8b4b4f1fe

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

@@ -483,7 +483,6 @@ public interface FsUserMapper
      */
     List<FsUser> selectFsUserListForIntegral(FsUser fsUser);
 
-    @Select("select * from fs_user where apple_key = #{appleKey}")
     FsUser findUserByAppleKey(String appleKey);
 
     List<Map<String, Object>>  selectRegisterCount(@Param("companyId") Long companyId,@Param("startDate") String startDate,@Param("endDate") String endDate);

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

@@ -243,4 +243,6 @@ public interface IFsUserService
      * 销售分享app下载链接给用户
      */
     Boolean  bindUserToSales(Long userId, String inviteCode);
+
+    FsUser selectFsUserByAppleKey(String appleKey);
 }

+ 6 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -308,7 +308,7 @@ public class FsUserServiceImpl implements IFsUserService {
      */
     @Override
     public int deleteFsUserByUserId(Long userId) {
-        String username = "绑定手机号同步了用户";
+        String username = "合并用户删除重复用户";
         return fsUserMapper.updateFsUserByUserId(userId,username);
     }
 
@@ -1662,4 +1662,9 @@ public class FsUserServiceImpl implements IFsUserService {
         fsUser.setInvitedBySalesId(salesId);
         return fsUserMapper.updateFsUser(fsUser)>0;
     }
+
+    @Override
+    public FsUser selectFsUserByAppleKey(String appleKey) {
+        return fsUserMapper.findUserByAppleKey(appleKey);
+    }
 }

+ 3 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -2551,5 +2551,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         group by ucu.company_user_id
     </select>
+    <select id="findUserByAppleKey" resultType="com.fs.his.domain.FsUser">
+        select * from fs_user where apple_key=#{appleKey} and is_del = 0
+    </select>
 
 </mapper>

+ 125 - 63
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -306,73 +306,111 @@ public class AppLoginController extends AppBaseController{
             Integer sex = (Integer) userInfo.get("sex");
             String avatar = userInfo.get("headimgurl").toString();
             FsUser user = userService.selectFsUserByUnionid(unionid);
+            // 苹果用户需要特殊处理
+            FsUser appleUser=null;
+            if(StringUtils.isNotBlank(param.getAppleKey())){
+                appleUser= userService.selectFsUserByAppleKey(param.getAppleKey());
+            }
 
             Map<String, Object> map = new HashMap<>();
-            if (user == null) {
-                user = new FsUser();
-                user.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
-                user.setSource(param.getSource()!=null ? param.getSource() : null);
-                user.setNickName(nickname);
-                user.setAvatar(avatar);
-                user.setAppOpenId(openid);
-                if (sex!=0){
-                    user.setSex(sex);
-                }
-                user.setUnionId(unionid);
-                // 新用户 - 添加 appId
-                user.setAppId(appId);
-                user.setCreateTime(new Date());
-                user.setAppCreateTime(new Date());
-                user.setStatus(1);
-                user.setAppleKey(param.getAppleKey());
-                if (StringUtils.isNotEmpty(param.getJpushId())) {
-                    user.setJpushId(param.getJpushId());
-                }
-                userService.insertFsUser(user);
-                String token = jwtUtils.generateToken(user.getUserId());
-                redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
-                map.put("token", token);
-                map.put("isNew", true);
-                map.put("user", user);
-                map.put("unionid",unionid);
-                openIMService. accountCheck("U"+user.getUserId(),"1");
-
-                return R.ok(map);
-            } else {
-                // 老用户 - 检查并添加appId(不重复添加)
-                String updatedAppId = addAppIdIfNotExists(user.getAppId(), appId);
-
-                FsUser userMap = new FsUser();
-                userMap.setUserId(user.getUserId());
-                if (!updatedAppId.equals(user.getAppId())) {
-                    userMap.setAppId(updatedAppId);
-                }
-                if (StringUtils.isNotEmpty(param.getJpushId())) {
-                    userMap.setJpushId(param.getJpushId());
-                }
-                if (StringUtils.isNotEmpty(openid)) {
+            if (user == null) {  // 微信用户不存在
+                if(appleUser != null){  // 存在苹果用户,将微信信息绑定到苹果用户
+                    FsUser userMap = new FsUser();
+                    userMap.setUserId(appleUser.getUserId());
+                    userMap.setNickName(nickname);
+                    userMap.setAvatar(avatar);
                     userMap.setAppOpenId(openid);
+                    if (sex!=0){
+                        userMap.setSex(sex);
+                    }
+                    userMap.setUnionId(unionid);
+                    if(appleUser.getAppCreateTime()== null){
+                        userMap.setAppCreateTime(new Date());
+                    }
+                    if(StringUtils.isBlank(appleUser.getAppleKey())){
+                        userMap.setAppleKey(param.getAppleKey());
+                    }
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        userMap.setJpushId(param.getJpushId());
+                    }
+                    userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+                    userService.updateFsUser(userMap);
+                    user=appleUser;
+                }else { // 完全新用户,创建新账户
+                    user = new FsUser();
+                    user.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+                    user.setSource(param.getSource()!=null ? param.getSource() : null);
+                    user.setNickName(nickname);
+                    user.setAvatar(avatar);
+                    user.setAppOpenId(openid);
+                    if (sex!=0){
+                        user.setSex(sex);
+                    }
+                    user.setUnionId(unionid);
+                    // 新用户 - 添加 appId
+                    user.setAppId(appId);
+                    user.setCreateTime(new Date());
+                    user.setAppCreateTime(new Date());
+                    user.setStatus(1);
+                    user.setAppleKey(param.getAppleKey());
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        user.setJpushId(param.getJpushId());
+                    }
+                    userService.insertFsUser(user);
                 }
-                if(user.getAppCreateTime()== null){
-                    userMap.setAppCreateTime(new Date());
-                }
-                if(StringUtils.isBlank(user.getAppleKey())){
-                    userMap.setAppleKey(param.getAppleKey());
-                }
-                userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
-                userService.updateFsUser(userMap);
+            } else {// 微信用户已存在
+                if(appleUser != null){// 苹果账户也存在
+                    // 需要合并账号,保留微信账号 删除苹果账号
+                    FsUser userMap = new FsUser();
+                    userMap.setUserId(user.getUserId());
+                    userMap.setIntegral(appleUser.getIntegral()+user.getIntegral());
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        userMap.setJpushId(param.getJpushId());
+                    }
+                    if (StringUtils.isNotEmpty(openid)) {
+                        userMap.setAppOpenId(openid);
+                    }
+                    if(user.getAppCreateTime()== null){
+                        userMap.setAppCreateTime(new Date());
+                    }
+                    if(StringUtils.isBlank(user.getAppleKey())){
+                        userMap.setAppleKey(param.getAppleKey());
+                    }
+                    userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
 
-                if (StringUtils.isEmpty(user.getPhone())) {
-                    String token = jwtUtils.generateToken(user.getUserId());
-                    redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
-                    map.put("token", token);
-                    map.put("isNew", true);
-                    map.put("user", user);
-                    map.put("unionid",user.getUnionId());
-                    return R.ok(map);
+                    if(userService.updateFsUser(userMap)>0){
+                        userService.deleteFsUserByUserId(appleUser.getUserId());
+                    }else {
+                        return R.error("账号合并,登录异常");
+                    }
+
+                }else { // 老用户正常登录,更新信息
+                    // 老用户 - 检查并添加appId(不重复添加)
+                    String updatedAppId = addAppIdIfNotExists(user.getAppId(), appId);
+
+                    FsUser userMap = new FsUser();
+                    userMap.setUserId(user.getUserId());
+                    if (!updatedAppId.equals(user.getAppId())) {
+                        userMap.setAppId(updatedAppId);
+                    }
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        userMap.setJpushId(param.getJpushId());
+                    }
+                    if (StringUtils.isNotEmpty(openid)) {
+                        userMap.setAppOpenId(openid);
+                    }
+                    if(user.getAppCreateTime()== null){
+                        userMap.setAppCreateTime(new Date());
+                    }
+                    if(StringUtils.isBlank(user.getAppleKey())){
+                        userMap.setAppleKey(param.getAppleKey());
+                    }
+                    userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+                    userService.updateFsUser(userMap);
                 }
-                openIMService. accountCheck("U"+user.getUserId(),"1");
             }
+            // 检测im是否创建用户
+            openIMService. accountCheck("U"+user.getUserId(),"1");
             int isFirstLogin = userNewTaskService.performTaskOne(user.getUserId());
             String token = jwtUtils.generateToken(user.getUserId());
             redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
@@ -400,9 +438,32 @@ public class AppLoginController extends AppBaseController{
             // 根据苹果key查询用户
             FsUser user = userMapper.findUserByAppleKey(param.getAppleKey());
             Map<String, Object> map = new HashMap<>();
+            // 因苹果审核问题, 如果开关打开 则创建新用户 ,若开关关闭需要校验 unionId
+            String key="appleCheckFlag";
+            Boolean flag =redisCache.getCacheObject(key);
+            if(flag==null){
+                flag =false; // 默认关闭
+            }
+
             if (user == null) {
-                map.put("isNew", true); // 新账户,使用微信登录绑定appleKey
-                return R.ok(map);
+                if( flag){
+                    user = new FsUser();
+                    user.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+                    user.setSource(param.getSource()!=null ? param.getSource() : null);
+                    user.setAppleKey(param.getAppleKey());
+                    user.setNickName("苹果用户");
+                    user.setCreateTime(new Date());
+                    user.setAppCreateTime(new Date());
+                    user.setStatus(1);
+                    user.setAvatar("https://cos.his.cdwjyyh.com/fs/20240926/420728ee06e54575ba82665dedb4756b.png");
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        user.setJpushId(param.getJpushId());
+                    }
+                    userService.insertFsUser(user);
+                }else {
+                    map.put("isNew", true); // 新账户,使用微信登录绑定appleKey
+                    return R.ok(map);
+                }
             } else {
                 if (StringUtils.isNotEmpty(param.getJpushId())) {
                     updateExistingUserJpushId(user, param.getJpushId());
@@ -413,7 +474,8 @@ public class AppLoginController extends AppBaseController{
                         logger.error("发送注册优惠券失败:{}",e.getMessage());
                     }
                 }
-                if (StringUtils.isEmpty(user.getUnionId())) {
+                // 审核通过后才校验
+                if (!flag && StringUtils.isEmpty(user.getUnionId())) {
                     map.put("isNew", true);
                     return R.ok(map);
                 }

+ 4 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByAppleParam.java

@@ -6,6 +6,10 @@ import java.io.Serializable;
 
 @Data
 public class FsUserLoginByAppleParam implements Serializable {
+
+    // 微信码
+    private String code;
+
     private String jpushId;
 
     private String loginDevice;//当前登陆设备