using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using DocumentFormat.OpenXml.Drawing.Charts; using IdentityModel.Client; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Volo.Abp.Account; using Volo.Abp.AspNetCore.Mvc; using Win_in.Sfs.Auth.Application.Contracts; using Win_in.Sfs.Wms.Pda.Authenticaitons; using Win_in.Sfs.Wms.Pda.Models; using PdaMenuDto = Win_in.Sfs.Wms.Pda.Models.PdaMenuDto; using PdaMenuGroupDto = Win_in.Sfs.Wms.Pda.Models.PdaMenuGroupDto; namespace Win_in.Sfs.Wms.Pda.Controllers.Accounts; /// /// /// [AllowAnonymous] [ApiController] [Route($"{PdaHostConst.ROOT_ROUTE}account")] public class AccountController : AbpController { private readonly IProfileAppService _profileAppService; private readonly ITokenService _tokenService; private readonly IUserMenuAppService _userMenuAppService; private readonly IUserWorkGroupAppService _userWorkGroupAppService; private readonly IConfiguration _configuration; private readonly IHttpClientFactory _httpClientFactory; private readonly ILogger _logger; /// /// /// /// /// /// /// public AccountController(IProfileAppService profileAppService , ITokenService tokenService , IUserMenuAppService userMenuAppService , IUserWorkGroupAppService userWorkGroupAppService , IConfiguration configuration, IHttpClientFactory httpClientFactory, ILogger logger) { _profileAppService = profileAppService; _tokenService = tokenService; _userMenuAppService = userMenuAppService; _userWorkGroupAppService = userWorkGroupAppService; _configuration = configuration; _httpClientFactory = httpClientFactory; _logger = logger; } [Display] public class LoginModel { [Display] [Required] public string UserName { get; set; } [Display] [Required] public string Password { get; set; } } /// /// 登录 /// /// /// [HttpPost("login")] public virtual async Task LoginAsync(UserLoginInput userLoginInput) { var address = _configuration["AuthServer:Authority"]; var request = new DiscoveryDocumentRequest { Address = address, Policy = new DiscoveryPolicy { RequireHttps = false } }; var discovery = await _httpClientFactory.CreateClient().GetDiscoveryDocumentAsync(request).ConfigureAwait(false); var clientId = _configuration["AuthServer:ClientId"]; var clientSecret = _configuration["AuthServer:ClientSecret"]; this._logger.LogInformation($"address:{address},TokenEndpoint:{discovery.TokenEndpoint},clientId:{clientId},clientSecret:{clientSecret}"); var result = await _httpClientFactory.CreateClient().RequestPasswordTokenAsync(new PasswordTokenRequest { Address = $"{address.TrimEnd('/')}/connect/token", GrantType = "password", ClientId = clientId, ClientSecret = clientSecret, UserName = userLoginInput.Username, Password = userLoginInput.Password }).ConfigureAwait(false); Console.WriteLine($"Result:${(result.IsError ? result.ErrorDescription : result.AccessToken)}"); return new BaererToken() { refresh_token = result.RefreshToken, access_token = result.AccessToken, scope = result.Scope, token_type = result.TokenType, expires_in = result.ExpiresIn, }; //return new JsonResult(new //{ // result.TokenType, // result.AccessToken, // result.ExpiresIn, // result.RefreshToken, // result.Scope, // result.HttpStatusCode, // result.Error, // result.HttpErrorReason, // result.ErrorDescription, // result.ErrorType, // result.Exception?.Message, // Exception = result.Exception?.ToString() //}); } /// /// 个人配置 /// /// [HttpGet("profile")] public virtual async Task GetProfileAsync() { return await _profileAppService.GetAsync().ConfigureAwait(false); } /// /// 修改个人配置 /// /// /// [HttpPost("profile")] public virtual async Task UpdateProfileAsync(UpdateProfileDto dto) { return await _profileAppService.UpdateAsync(dto).ConfigureAwait(false); } /// /// 修改密码 /// /// /// [HttpPost("change-password")] public virtual async Task ChangePasswordAsync(ChangePasswordInput input) { await _profileAppService.ChangePasswordAsync(input).ConfigureAwait(false); } /// /// 菜单 /// /// [HttpGet("menus/{userId}")] public virtual async Task> GetMenusAsync(Guid userId) { //var userId = CurrentUser.Id; var pdaMenuGroupDtos = new List();//返回给pda的菜单 已排序 var menusOfUser = await _userMenuAppService.GetPdaMenusOfUserAsync(userId).ConfigureAwait(false); var menuGroups = menusOfUser.GroupBy(p => p.GroupName); foreach (var menuGroup in menuGroups) { var pdaMenuDtos = new List(); var groupSort = 0; var groupTitle = ""; foreach (var menuDto in menuGroup.OrderBy(p => p.Sort)) { var pdaMenuDto = new PdaMenuDto { name = menuDto.Name, path = menuDto.Route, url = menuDto.Icon, countUrl = menuDto.CountUrl }; groupSort = menuDto.GroupSort; groupTitle = menuDto.GroupName; pdaMenuDtos.Add(pdaMenuDto); } pdaMenuGroupDtos.Add(new PdaMenuGroupDto { groupSort = groupSort, title = groupTitle, list = pdaMenuDtos }); } return pdaMenuGroupDtos.OrderBy(p => p.groupSort).ToList(); } /// /// 工作组 /// /// [HttpGet("workgroups")] public virtual async Task> GetWorkGroupsAsync() { var userWorkGroupDtos = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); return userWorkGroupDtos; } }