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; } } }