Parcourir la source

fix 公众号迁移同步新openid、unionid

zoujiajian il y a 3 ans
Parent
commit
8d468ecda3

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserTransferLogMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserTransferLog;
+
+/*
+ *项目名: netflix
+ *文件名: UserTransferLogMapper
+ *创建者: JavaZou
+ *创建时间:2023/1/12 10:11
+ */
+public interface UserTransferLogMapper extends BaseMapper<UserTransferLog> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/WxSyncLogMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.WxSyncLog;
+
+/*
+ *项目名: netflix
+ *文件名: WxSyncLogMapper
+ *创建者: JavaZou
+ *创建时间:2023/1/12 16:56
+ */
+public interface WxSyncLogMapper extends BaseMapper<WxSyncLog> {
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserTransferLog.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserTransferLog
+ *创建者: JavaZou
+ *创建时间:2023/1/12 10:10
+ */
+@Getter
+@Setter
+public class UserTransferLog extends BaseEntity{
+	private String oldAppId;
+
+	private String newAppId;
+
+	private Long userId;
+
+	private String oldUnionid;
+
+	private String newUnionid;
+
+	private String type;
+}

+ 30 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/WxSyncLog.java

@@ -0,0 +1,30 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: WxSyncLog
+ *创建者: JavaZou
+ *创建时间:2023/1/12 16:53
+ */
+@Getter
+@Setter
+public class WxSyncLog extends BaseEntity{
+	private String fromAppid;
+
+	private String toAppid;
+
+
+	private Long userId;
+
+	/**
+	 * 旧公众号openid
+	 */
+	private String oriOpenid;
+
+	private String newOpenid;
+
+	private String errMsg;
+}

+ 5 - 0
netflix-service/src/main/java/com/cyksj/config/BaseWeChatConfig.java

@@ -12,6 +12,11 @@ import lombok.Setter;
 @Getter
 @Setter
 public abstract class BaseWeChatConfig {
+    /**
+     * 迁移之前的原公众号appid
+     */
+    private String oldAppid;
+
     /**
      * 公众号唯一标识
      */

+ 44 - 11
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -7,14 +7,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.constant.TaskTypeEnum;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.config.WeChatConfig;
 import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.UserTransferLogMapper;
+import com.cyksj.mapper.WxSyncLogMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.model.dto.GzhOAuth2UserInfo;
 import com.cyksj.model.dto.UserWhoami;
-import com.cyksj.model.entity.TaskType;
-import com.cyksj.model.entity.User;
-import com.cyksj.model.entity.UserDistributeShared;
+import com.cyksj.model.entity.*;
 import com.cyksj.service.market.task.TaskService;
 import com.cyksj.service.user.UserService;
 import com.cyksj.service.wechat.WeChatService;
@@ -44,26 +45,58 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     private final TaskTypeMapper taskTypeMapper;
 
+    private final WeChatConfig weChatConfig;
+
+    private final UserTransferLogMapper userTransferLogMapper;
+
+    private final WxSyncLogMapper wxSyncLogMapper;
+
     @Override
     public User saveAuth(GzhOAuth2UserInfo info, Long sharedId) {
         final String unionid = info.getUnionid();
         if (StrUtil.isEmpty(unionid)) {
             throw BusinessRuntimeException.getInstance("授权操作异常,请刷新页面");
         }
-        // 查询用户是否存在
-        User user = Optional.ofNullable(
-                this.getOne(new LambdaQueryWrapper<User>().eq(User::getUnionid,info.getUnionid())))
-                .orElseGet(() -> Optional.ofNullable(this.getOne(new LambdaQueryWrapper<User>().eq(User::getOpenId,info.getOpenid())))
-                        .orElseGet(()-> new User()
-                                .setUnionid(unionid)));
-
+        User user;
+        //迁移公众号之后同步授权后信息
+        //是否是迁移用户
+        WxSyncLog wxSyncLog = wxSyncLogMapper.selectOne(Wrappers.lambdaQuery(WxSyncLog.class)
+                .eq(WxSyncLog::getToAppid, weChatConfig.getAppid())
+                .eq(WxSyncLog::getNewOpenid, info.getOpenid()).last("limit 1"));
+        if (wxSyncLog != null) {
+            user = this.getOne(Wrappers.lambdaQuery(User.class)
+                    .eq(User::getOpenId, wxSyncLog.getOriOpenid()).last("limit 1"));
+            if (user != null) {
+                user.setOpenId(wxSyncLog.getNewOpenid());
+            }
+        } else {
+            // 查询用户是否存在
+            user = Optional.ofNullable(
+                    this.getOne(new LambdaQueryWrapper<User>().eq(User::getUnionid, info.getUnionid())))
+                    .orElseGet(() -> this.getOne(new LambdaQueryWrapper<User>().eq(User::getOpenId, info.getOpenid())));
+        }
+        user = Optional.ofNullable(user).orElseGet(() -> new User()
+                .setUnionid(unionid));
         user.setNickname(info.getNickname())
                 .setSex(info.getSex())
                 .setCountry(info.getCountry())
                 .setProvince(info.getProvince())
                 .setCity(info.getCity())
                 .setHeadimgurl(info.getHeadimgurl());
-
+        if (!user.getUnionid().equals(unionid)) {
+            UserTransferLog log = new UserTransferLog();
+            if (wxSyncLog != null) {
+                log.setType("公众号迁移");
+            } else {
+                log.setType("绑定开发者账号");
+            }
+            log.setOldAppId(weChatConfig.getOldAppid());
+            log.setNewAppId(weChatConfig.getAppid());
+            log.setUserId(user.getId());
+            log.setOldUnionid(user.getUnionid());
+            log.setNewUnionid(info.getUnionid());
+            userTransferLogMapper.insert(log);
+        }
         user.setUnionid(unionid);
         user.setOpenId(info.getOpenid());
         UserDistributeShared userDistributeShared = null;

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
netflix-web/src/main/resources/application-prd.yml


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff