package com.ruoyi.business.appuser.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.business.appuser.service.DefaultLoginService; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.SysPermissionService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; /** * 默认登录 * * @author Tellsea * @date 2022/9/2 */ @Service @RequiredArgsConstructor(onConstructor_ = @Autowired) public class DefaultLoginServiceImpl implements DefaultLoginService { private final SysLoginService loginService; private final SysPermissionService permissionService; private final RedisCache redisCache; private final ISysUserService sysUserService; @Override public AjaxResult login(LoginBody entity) { return AjaxResult.success("登录成功", loginService.login(entity.getUsername(), entity.getPassword())); } @Override public AjaxResult getInfo() { SysUser user = SecurityUtils.getLoginUser().getUser(); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 Set permissions = permissionService.getMenuPermission(user); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); return ajax; } @Override public AjaxResult getCode(String username) { String key = CacheConstants.PHONE_CODE + username; String code = RandomStringUtils.randomNumeric(4); if (redisCache.hasKey(key)) { return AjaxResult.success("无需重复发送验证码"); } redisCache.setCacheObject(key, code, 5, TimeUnit.SECONDS); // 调用短信平台发送验证码 return AjaxResult.success("验证码发送成功"); } @Override public AjaxResult loginByCode(LoginBody entity) { String key = CacheConstants.PHONE_CODE + entity.getUsername(); if (!redisCache.hasKey(key)) { return AjaxResult.error("请先获取短信验证码"); } String cacheCode = redisCache.getCacheObject(key); if (StringUtils.isEmpty(cacheCode)) { return AjaxResult.error("验证码已失效,请重新获取"); } if (!StringUtils.equals(cacheCode, entity.getCode())) { return AjaxResult.error("短信验证码错误"); } entity.setPassword("123456"); return AjaxResult.success("登录成功", loginService.login(entity.getUsername(), entity.getPassword())); } @Override public AjaxResult register(LoginBody entity) { String key = CacheConstants.PHONE_CODE + entity.getUsername(); if (!redisCache.hasKey(key)) { return AjaxResult.error("请先获取短信验证码"); } String cacheCode = redisCache.getCacheObject(key); if (StringUtils.isEmpty(cacheCode)) { return AjaxResult.error("验证码已失效,请重新获取"); } if (!StringUtils.equals(cacheCode, entity.getCode())) { return AjaxResult.error("短信验证码错误"); } List list = sysUserService.list(new LambdaQueryWrapper() .eq(SysUser::getUserName, entity.getUsername())); if (list.size() > 1) { return AjaxResult.error("账号异常,存在多个"); } String token = loginService.getToken(list, entity.getUsername(), entity.getUsername()); return AjaxResult.success("登录成功", token); } }