陶杰
2025-01-02 c239be90bfaab913145ff6019abd4fcb194ae847
1.微信登录-解决一个openId绑定多个用户
已修改3个文件
已添加1个文件
52 ■■■■■ 文件已修改
src/main/java/com/mzl/flower/mapper/system/UserMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/system/UserWechatMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/system/UserService.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/UserWechatMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/system/UserMapper.java
@@ -23,7 +23,7 @@
    String selectUserRoleDesc(@Param("userId") String userId);
    User getByOpenID(@Param("openId") String openId, List<String> userTypes);
    List<User> getByOpenID(@Param("openId") String openId, List<String> userTypes);
    List<SmsSelectVO> getSelectList(@Param("idList") List<String> idList);
src/main/java/com/mzl/flower/mapper/system/UserWechatMapper.java
@@ -1,11 +1,21 @@
package com.mzl.flower.mapper.system;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mzl.flower.entity.system.User;
import com.mzl.flower.entity.system.UserWechat;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserWechatMapper extends BaseMapper<UserWechat> {
    /**
     * 根据用户类型判断当前用户是否已经绑定了微信
     * @param openId
     * @return
     */
    List<User> selectUserByOpenId(@Param("openId") String openId,@Param("userType") String userType);
}
src/main/java/com/mzl/flower/service/system/UserService.java
@@ -96,10 +96,11 @@
            , String imgUrl, String nickname,String userType){
        List<String> userTypes = new ArrayList<>();
        userTypes.add(userType);
        User user = userMapper.getByOpenID(openId,userTypes);
        if(user == null){
        List<User> userList = userMapper.getByOpenID(openId,userTypes);
        if(CollectionUtils.isEmpty(userList)){
            throw new ValidationException("请注册账号后至\"个人中心-绑定微信\"后再使用微信登录");
        }
        User user=userList.get(0);
//        user.setNickName(nickname);
        user.setNickName(user.getLoginName());
        user.setPicture(imgUrl);
@@ -119,6 +120,19 @@
    }
    public void bindWechat(String userId, String openId, String unionId, String sessionKey, BindWechatDTO dto) {
        // 查看微信是否已经绑定过用户
        User user = userMapper.selectById(userId);
        if(ObjectUtils.isEmpty(user)){
            throw new ValidationException("当前用户不存在");
        }
        List<User> userList=wechatMapper.selectUserByOpenId(openId,user.getType());
        if(!CollectionUtils.isEmpty(userList)){
            throw new ValidationException("该微信已绑定其他账号");
        }
        UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>()
                .eq(UserWechat::getUserId,userId));
        if(wechat == null){
@@ -137,6 +151,8 @@
            wechat.setRealName(dto.getRealName());
            wechatMapper.updateById(wechat);
        }
    }
@@ -504,8 +520,11 @@
    public User getExistUserByOpenId(String openId, String sessionKey, String unionId, String userType) {
        List<String> userTypes = new ArrayList<>();
        userTypes.add(userType);
        User user = userMapper.getByOpenID(openId,userTypes);
        return user;
        List<User> userList = userMapper.getByOpenID(openId,userTypes);
        if(!CollectionUtils.isEmpty(userList)){
            return userList.get(0);
        }
        return null;
    }
    public void registWxUser(CreateWechatUserDTO dto) {
src/main/resources/mapper/system/UserWechatMapper.xml
对比新文件
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mzl.flower.mapper.system.UserWechatMapper">
    <select id="selectUserByOpenId" resultType="com.mzl.flower.entity.system.User">
        select *
        from t_user u
        left join  t_user_wechat uw
        on u.id =uw.user_id
        where uw.open_id=#{openId}
          and u.type=#{userType}
    </select>
</mapper>