fix: 公众号登录功能同步

This commit is contained in:
ageer
2025-04-30 19:34:09 +08:00
parent cd490aa0e5
commit 5476a4b0b7
18 changed files with 609 additions and 67 deletions

View File

@@ -19,12 +19,10 @@ import org.ruoyi.common.core.constant.TenantConstants;
import org.ruoyi.common.core.domain.dto.RoleDTO;
import org.ruoyi.common.core.domain.model.LoginUser;
import org.ruoyi.common.core.domain.model.VisitorLoginBody;
import org.ruoyi.common.core.domain.model.VisitorLoginUser;
import org.ruoyi.common.core.enums.*;
import org.ruoyi.common.core.exception.user.CaptchaException;
import org.ruoyi.common.core.exception.user.CaptchaExpireException;
import org.ruoyi.common.core.exception.user.UserException;
import org.ruoyi.common.core.service.ConfigService;
import org.ruoyi.common.core.utils.*;
import org.ruoyi.common.log.event.LogininforEvent;
import org.ruoyi.common.redis.utils.RedisUtils;
@@ -32,8 +30,7 @@ import org.ruoyi.common.satoken.utils.LoginHelper;
import org.ruoyi.common.tenant.exception.TenantException;
import org.ruoyi.common.tenant.helper.TenantHelper;
import org.ruoyi.system.domain.SysUser;
import org.ruoyi.system.domain.bo.SysUserBo;
import org.ruoyi.system.domain.vo.LoginVo;
import org.ruoyi.system.domain.vo.SysTenantVo;
import org.ruoyi.system.domain.vo.SysUserVo;
import org.ruoyi.system.mapper.SysUserMapper;
@@ -43,7 +40,6 @@ import org.springframework.stereotype.Service;
import java.time.Duration;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.function.Supplier;
/**
@@ -60,8 +56,6 @@ public class SysLoginService {
private final WxMaService wxMaService;
private final ISysPermissionService permissionService;
private final ISysTenantService tenantService;
private final ISysUserService userService;
private final ConfigService configService;
@Value("${user.password.maxRetryCount}")
private Integer maxRetryCount;
@@ -69,7 +63,7 @@ public class SysLoginService {
private Integer lockTime;
/**
* 获取微信
* 获取微信code
* @param xcxCode 获取xcxCode
*/
public String getOpenidFromCode(String xcxCode) {
@@ -137,9 +131,8 @@ public class SysLoginService {
return StpUtil.getTokenValue();
}
/**
* 游客登录
* 微信小程序登录
*
* @param loginBody
* @return String
@@ -164,57 +157,6 @@ public class SysLoginService {
}
}
public LoginVo mpLogin(String openid) {
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
SysUserVo user = userService.selectUserByOpenId(openid);
VisitorLoginUser loginUser = new VisitorLoginUser();
if (ObjectUtil.isNull(user)) {
SysUserBo sysUser = new SysUserBo();
// 改为自增
String name = "用户" + UUID.randomUUID().toString().replace("-", "");
// 设置默认用户名
sysUser.setUserName(name);
// 设置默认昵称
sysUser.setNickName(name);
// 设置默认密码
sysUser.setPassword(BCrypt.hashpw("123456"));
// 设置微信openId
sysUser.setOpenId(openid);
String configValue = configService.getConfigValue("mail", "amount");
// 设置默认余额
sysUser.setUserBalance(NumberUtils.toDouble(configValue, 1));
// 注册用户,设置默认租户为0
SysUser registerUser = userService.registerUser(sysUser, "0");
// 构建登录用户信息
loginUser.setTenantId("0");
loginUser.setUserId(registerUser.getUserId());
loginUser.setUsername(registerUser.getUserName());
loginUser.setUserType(UserType.APP_USER.getUserType());
loginUser.setOpenid(openid);
loginUser.setNickName(registerUser.getNickName());
} else {
// 此处可根据登录用户的数据不同 自行创建 loginUser
loginUser.setTenantId(user.getTenantId());
loginUser.setUserId(user.getUserId());
loginUser.setUsername(user.getUserName());
loginUser.setUserType(user.getUserType());
loginUser.setNickName(user.getNickName());
loginUser.setAvatar(user.getWxAvatar());
loginUser.setOpenid(openid);
}
// 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.XCX);
recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
LoginVo loginVo = new LoginVo();
// 生成令牌
loginVo.setToken(StpUtil.getTokenValue());
loginVo.setUserInfo(loginUser);
return loginVo;
}
/**
* 退出登录
*/