using Attribute;
using Base;
using Dto;
using Enums;
using Extensions;
using Filters;
using Infrastructure;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Model;
using Model.Base;
using Services;
using Util;
namespace Controllers
{
///
/// 登录
///
[ApiExplorerSettings(GroupName = "sys")]
public class SysLoginController : BaseController
{
private readonly ISysUserService sysUserService;
private readonly ISysMenuService sysMenuService;
private readonly ISysLoginService sysLoginService;
private readonly ISysPermissionService permissionService;
private readonly ISysRoleService roleService;
public SysLoginController(
ISysMenuService sysMenuService,
ISysUserService sysUserService,
ISysLoginService sysLoginService,
ISysPermissionService permissionService,
ISysRoleService sysRoleService)
{
this.sysMenuService = sysMenuService;
this.sysUserService = sysUserService;
this.sysLoginService = sysLoginService;
this.permissionService = permissionService;
roleService = sysRoleService;
}
///
/// 登录
///
/// 登录对象
///
[Route("/v1/tel/sysServer/oauth2/token")]
[HttpPost]
[Log(Title = "登录")]
public IActionResult Login([FromBody] LoginBodyDto loginBody)
{
if (loginBody == null) { throw new CustomException("请求参数错误"); }
loginBody.loginIP = HttpContextExtension.GetClientUserIp(HttpContext);
sysLoginService.CheckLockUser(loginBody.username);
string location = ""; //HttpContextExtension.GetIpInfo(loginBody.LoginIP);
var user = sysLoginService.Login(loginBody, new SysLogininfor() { LoginLocation = location });
List roles = roleService.SelectUserRoleListByUserId(user.userId);
//权限集合 eg *:*:*,system:user:list
List permissions = permissionService.GetMenuPermission(user);
TokenModel loginUser = new(user.Adapt(), roles.Adapt>());
CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.userId, permissions);
return SUCCESS(sysLoginService.GetLoginInfo(loginUser));
}
///
/// 注销
///
///
[Log(Title = "注销")]
[HttpPost("logout")]
public IActionResult LogOut()
{
//Task.Run(async () =>
//{
// //注销登录的用户,相当于ASP.NET中的FormsAuthentication.SignOut
// await HttpContext.SignOutAsync();
//}).Wait();
var userid = HttpContext.GetUId();
var name = HttpContext.GetName();
CacheService.RemoveUserPerms(GlobalConstant.UserPermKEY + userid);
return SUCCESS(new { name, id = userid });
}
///
/// 获取用户信息
///
///
[Verify]
[HttpGet("getInfo")]
public IActionResult GetUserInfo()
{
long userid = HttpContext.GetUId();
var user = sysUserService.SelectUserById(userid);
//前端校验按钮权限使用
//角色集合 eg: admin,yunying,common
List roles = permissionService.GetRolePermission(user);
//权限集合 eg *:*:*,system:user:list
List permissions = permissionService.GetMenuPermission(user);
return SUCCESS(new { user, roles, permissions });
}
///
/// 获取路由信息
///
///
[Verify]
[HttpGet("getRouters")]
public IActionResult GetRouters()
{
long uid = HttpContext.GetUId();
var menus = sysMenuService.SelectMenuTreeByUserId(uid);
return SUCCESS(sysMenuService.BuildMenus(menus));
}
///
/// 注册
///
///
///
[HttpPost("/register")]
[AllowAnonymous]
[Log(Title = "注册", BusinessType = BusinessType.INSERT)]
public IActionResult Register([FromBody] RegisterDto dto)
{
dto.UserIP = HttpContext.GetClientUserIp();
SysUser user = sysUserService.Register(dto);
if (user.userId > 0)
{
return SUCCESS(user);
}
return ToResponse(ResultCode.CUSTOM_ERROR, "注册失败,请联系管理员");
}
///
/// 生成二维码
///
///
///
///
[HttpGet("/GenerateQrcode")]
public IActionResult GenerateQrcode(string uuid, string deviceId)
{
var state = Guid.NewGuid().ToString();
var dict = new Dictionary
{
{ "state", state }
};
CacheService.SetScanLogin(uuid, dict);
return SUCCESS(new
{
status = 1,
state,
uuid,
codeContent = new { uuid, deviceId }// "https://qm.qq.com/cgi-bin/qm/qr?k=kgt4HsckdljU0VM-0kxND6d_igmfuPlL&authKey=r55YUbruiKQ5iwC/folG7KLCmZ++Y4rQVgNlvLbUniUMkbk24Y9+zNuOmOnjAjRc&noverify=0"
});
}
}
}