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;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.account.api.model.TAppUser;
|
import com.ruoyi.account.mapper.TAppUserMapper;
|
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;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.Objects;
|
|
/**
|
* <p>
|
* 服务实现类
|
* </p>
|
*
|
* @author luodangjia
|
* @since 2024-08-06
|
*/
|
@Service
|
public class TAppUserServiceImpl extends ServiceImpl<TAppUserMapper, TAppUser> implements TAppUserService {
|
@Autowired
|
private TokenService tokenService;
|
@Override
|
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"));
|
if(Objects.isNull(appUser)){
|
// 先使用openId和当前手机号进行查询
|
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());
|
}
|
}
|
if(Objects.nonNull(appUser.getStatus())){
|
throwInfo(appUser.getStatus());
|
}
|
appUser.setAvatar(appletUserDecodeData.getAvatarUrl());
|
appUser.setCity(appletUserDecodeData.getCity());
|
appUser.setName(appletUserDecodeData.getNickName());
|
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());
|
loginUserApplet.setName(appUser.getName());
|
loginUserApplet.setPhone(appUser.getPhone());
|
loginUserApplet.setAvatar(appUser.getAvatar());
|
loginUserApplet.setAddress(appUser.getProvince()+appUser.getCity());
|
}
|
Map<String, Object> tokenInfos = new HashMap<>();
|
tokenInfos.put("token",tokenService.createTokenApplet(loginUserApplet));
|
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;
|
}
|
}
|
}
|