无关风月
2024-08-19 ff169f9a0417b73f0afac554cf2f9d048ac56c80
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.account.service.impl;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserUserinfoShareResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -9,6 +11,7 @@
import com.ruoyi.account.service.TAppUserService;
import com.ruoyi.account.wx.model.WeixinProperties;
import com.ruoyi.account.wx.pojo.AppletUserDecodeData;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.system.api.model.LoginUserApplet;
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,27 +35,25 @@
    @Autowired
    private TokenService tokenService;
    @Override
    public Map<String, Object> login(AppletUserDecodeData appletUserDecodeData) {
        // 通过手机号查询用户,是否已存在手动导入用户
    public Map<String, Object> wxLogin(AppletUserDecodeData appletUserDecodeData) {
        // 通过手机号查询用户,是否已存在手动导入用户,包含支付宝用户
        TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
                .eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber())
                .isNull(TAppUser::getWxOpenid)
                .last("LIMIT 1"));
        LambdaQueryWrapper<TAppUser> wrapper = Wrappers.lambdaQuery(TAppUser.class)
                .eq(TAppUser::getWxOpenid, appletUserDecodeData.getOpenId());
        if(Objects.isNull(appUser)){
            // 先使用openId和当前手机号进行查询
            wrapper.eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber())
                    .last("LIMIT 1");
            appUser = this.getOne(wrapper);
            appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
                    .eq(TAppUser::getWxOpenid, appletUserDecodeData.getOpenId())
                    .eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber())
                    .last("LIMIT 1"));
            if(Objects.isNull(appUser)){
                appUser = new TAppUser();
                appUser.setPhone(appletUserDecodeData.getPhoneNumber());
            }
        }else {
            wrapper.last("LIMIT 1");
            // 删除小程序原有授权用户
            this.remove(wrapper);
        }
        if(Objects.nonNull(appUser.getStatus())){
            throwInfo(appUser.getStatus());
        }
        appUser.setAvatar(appletUserDecodeData.getAvatarUrl());
        appUser.setCity(appletUserDecodeData.getCity());
@@ -60,6 +61,41 @@
        appUser.setProvince(appletUserDecodeData.getProvince());
        appUser.setWxOpenid(appletUserDecodeData.getOpenId());
        this.saveOrUpdate(appUser);
        return this.getUserInfo(appUser);
    }
    @Override
    public Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserUserinfoShareResponse userInfo) {
        // 通过手机号查询用户,是否已存在手动导入用户,包含微信用户
        TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
                .eq(TAppUser::getPhone, userInfo.getMobile())
                .isNull(TAppUser::getAliOpenid)
                .last("LIMIT 1"));
        if(Objects.isNull(appUser)){
            // 先使用openId和当前手机号进行查询
            appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
                    .eq(TAppUser::getAliOpenid, response.getOpenId())
                    .eq(TAppUser::getPhone, userInfo.getMobile())
                    .last("LIMIT 1"));
            if(Objects.isNull(appUser)){
                appUser = new TAppUser();
                appUser.setPhone(userInfo.getMobile());
            }
        }
        if(Objects.nonNull(appUser.getStatus())){
            throwInfo(appUser.getStatus());
        }
        appUser.setAvatar(userInfo.getAvatar());
        appUser.setCity(userInfo.getCity());
        appUser.setName(userInfo.getNickName());
        appUser.setProvince(userInfo.getProvince());
        appUser.setAliOpenid(response.getOpenId());
        this.saveOrUpdate(appUser);
        return this.getUserInfo(appUser);
    }
    @Override
    public Map<String, Object> getUserInfo(TAppUser appUser) {
        LoginUserApplet loginUserApplet = new LoginUserApplet();
        if(ObjectUtils.isNotNull(appUser)){
            loginUserApplet.setUserId(appUser.getId());
@@ -73,4 +109,16 @@
        tokenInfos.put("info",loginUserApplet);
        return tokenInfos;
    }
    @Override
    public void throwInfo(Integer status){
        switch (status){
            case 2:
                throw new ServiceException("账号被冻结,请联系管理员");
            case 3:
                throw new ServiceException("账号已注销,请重新注册使用");
            default:
                break;
        }
    }
}