package com.ruoyi.account.service.impl;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserInfoShareResponse;
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.service.TInviteUserService;
import com.ruoyi.account.util.RptUtils;
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.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
*
* 服务实现类
*
*
* @author luodangjia
* @since 2024-08-06
*/
@Service
public class TAppUserServiceImpl extends ServiceImpl implements TAppUserService {
@Autowired
private TokenService tokenService;
@Autowired
private TInviteUserService inviteUserService;
@Override
public Map wxLogin(AppletUserDecodeData appletUserDecodeData,Long inviteUserId) {
// 通过手机号查询用户,是否已存在手动导入用户,包含支付宝用户
TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
.eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber())
.isNull(TAppUser::getWxOpenid)
.eq(TAppUser::getStatus,1)
.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())
.eq(TAppUser::getStatus,1)
.last("LIMIT 1"));
if(Objects.isNull(appUser)){
appUser = new TAppUser();
appUser.setPhone(appletUserDecodeData.getPhoneNumber());
}
}
if(Objects.nonNull(appUser.getStatus())){
switch (appUser.getStatus()){
case 1:
break;
case 2:
throw new ServiceException("账号被冻结,请联系管理员");
case 3:
appUser = new TAppUser();
appUser.setPhone(appletUserDecodeData.getPhoneNumber());
break;
}
}
if(Objects.nonNull(inviteUserId)){
appUser.setInviteUserId(inviteUserId);
}
appUser.setAvatar(StringUtils.hasLength(appUser.getAvatar())?appUser.getAvatar():"http://221.182.45.100:8090/2024-10-26/logo.png");
appUser.setName(StringUtils.hasLength(appUser.getName())?appUser.getName():RptUtils.around(appletUserDecodeData.getPhoneNumber(),3,4));
appUser.setCity(appletUserDecodeData.getCity());
appUser.setProvince(appletUserDecodeData.getProvince());
appUser.setWxOpenid(appletUserDecodeData.getOpenId());
this.saveOrUpdate(appUser);
if(Objects.nonNull(inviteUserId)){
inviteUserService.saveInviteUser(appUser.getId(), inviteUserId);
}
return this.getUserInfo(appUser);
}
@Override
public Map aliLogin(AlipaySystemOauthTokenResponse response,String phone,Long inviteUserId,String aliUserId,String aliUnionId) {
// 通过手机号查询用户,是否已存在手动导入用户,包含微信用户
TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
.eq(TAppUser::getPhone, phone)
.isNull(TAppUser::getAliOpenid)
.eq(TAppUser::getStatus,1)
.last("LIMIT 1"));
if(Objects.isNull(appUser)){
// 先使用openId和当前手机号进行查询
appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
.eq(TAppUser::getAliOpenid, response.getOpenId())
.eq(TAppUser::getPhone, phone)
.eq(TAppUser::getStatus,1)
.last("LIMIT 1"));
if(Objects.isNull(appUser)){
appUser = new TAppUser();
appUser.setPhone(phone);
}
}
if(Objects.nonNull(appUser.getStatus())){
switch (appUser.getStatus()){
case 1:
break;
case 2:
throw new ServiceException("账号被冻结,请联系管理员");
case 3:
appUser = new TAppUser();
appUser.setPhone(phone);
break;
}
}
if(Objects.nonNull(inviteUserId)){
appUser.setInviteUserId(inviteUserId);
}
appUser.setAliOpenid(response.getOpenId());
appUser.setAvatar(StringUtils.hasLength(appUser.getAvatar())?appUser.getAvatar():"http://221.182.45.100:8090/2024-10-26/logo.png");
appUser.setName(StringUtils.hasLength(appUser.getName())?appUser.getName():RptUtils.around(phone,3,4));
this.saveOrUpdate(appUser);
if(Objects.nonNull(inviteUserId)){
inviteUserService.saveInviteUser(appUser.getId(), inviteUserId);
}
LoginUserApplet loginUserApplet = buildLoginUserApplet(appUser);
loginUserApplet.setAliUserId(aliUserId);
loginUserApplet.setAliUnionId(aliUnionId);
return buildTokenInfo(loginUserApplet);
}
// @Override
// public Map aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserInfoShareResponse 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 getUserInfo(TAppUser appUser) {
return buildTokenInfo(buildLoginUserApplet(appUser));
}
private LoginUserApplet buildLoginUserApplet(TAppUser appUser) {
LoginUserApplet loginUserApplet = new LoginUserApplet();
if(ObjectUtils.isNotNull(appUser)){
loginUserApplet.setUserId(appUser.getId());
loginUserApplet.setUserIdStr(appUser.getId().toString());
loginUserApplet.setName(appUser.getName());
loginUserApplet.setPhone(appUser.getPhone());
loginUserApplet.setAvatar(appUser.getAvatar());
loginUserApplet.setAddress(appUser.getProvince()+appUser.getCity());
loginUserApplet.setWxOpenid(appUser.getWxOpenid());
loginUserApplet.setAliOpenid(appUser.getAliOpenid());
}
return loginUserApplet;
}
private Map buildTokenInfo(LoginUserApplet loginUserApplet) {
Map 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;
}
}
}