using BPA.SAAS.Manage.Application.Auth.Dtos; using BPA.SAAS.Manage.Comm.Const; using BPA.SAAS.Manage.Comm.Enum; using BPA.SAAS.Manage.Core.Base; using BPA.SAAS.Manage.Core.DataBase; using BPA.SAAS.Manage.Core.Org; using Mapster; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BPA.SAAS.Manage.Application.Auth { public class AuthService : IAuthService, IDynamicApiController { private readonly ISqlSugarClient _db; private readonly IHttpContextAccessor _httpContextAccessor; public AuthService(ISqlSugarClient db, IHttpContextAccessor httpContextAccessor) { _db = db; _httpContextAccessor = httpContextAccessor; } /// /// 用户名密码登录 /// /// 1平台用户登录,0加盟商登录 /// /// [HttpPost("/api/auth/login")] [AllowAnonymous] public async Task Login(LoginInput input) { // 获取加密后的密码 var encryptPasswod = MD5Encryption.Encrypt(input.Password).ToLower(); // 判断用户名和密码是否正确 忽略全局过滤器 var user = await _db.Queryable().Where(u => u.Account.Equals(input.Account) && u.Password.Equals(encryptPasswod) && u.IsDeleted == 0 ).FirstAsync(); _ = user ?? throw Oops.Oh("用户名或密码不正确"); //获取权限 List conModels = new List(); conModels.Add(new ConditionalModel() { FieldName = "Id", ConditionalType = ConditionalType.Equal, FieldValue = user.GroupId }); conModels.Add(new ConditionalModel() { FieldName = "Status", ConditionalType = ConditionalType.Equal, FieldValue = CommonStatus.ENABLE.ToString() }); conModels.Add(new ConditionalModel() { FieldName = "IsDeleted", ConditionalType = ConditionalType.Equal, FieldValue ="0" }); //if (user.AdminType != 1) //{ // conModels.Add(new ConditionalModel() { FieldName = "Type", ConditionalType = ConditionalType.Equal, FieldValue = input.Type.ToString() }); //} var company = _db.Queryable().Where(conModels).First(); string CLAINM_SUPERADMIN = "Customer"; if (user.AdminType == 1) { CLAINM_SUPERADMIN = "1"; } _ = company ?? throw Oops.Oh("企业被锁定,请联系管理员"); var accessToken = JWTEncryption.Encrypt(new Dictionary { { ClaimConst.CLAINM_USERID, user.Id }, { ClaimConst.LoginType, 0}, { ClaimConst.CLAINM_ACCOUNT, user.Account }, { ClaimConst.CLAINM_NAME, user.Name }, { ClaimConst.CLAINM_SUPERADMIN, CLAINM_SUPERADMIN }, { ClaimConst.GroupId, user.GroupId}, { ClaimConst.OrgId,user.SysOrgId}, //{ ClaimConst.SupplyPlatformId,company?.SupplyPlatformId} }, 1440); // 设置Swagger自动登录 // _httpContextAccessor.SigninToSwagger(accessToken); // 生成刷新Token令牌 var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 1445); _httpContextAccessor.HttpContext.Response.Headers["access-token"] = accessToken; // 设置刷新Token令牌 _httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken; LoginOutInfo loginOutInfo = new LoginOutInfo() { userID = user.Id, token = accessToken }; return loginOutInfo; } /// /// 获取当前登录用户信息 /// /// [HttpGet("/api/auth/getLoginUser")] [AllowAnonymous] public async Task GetLoginUserAsync() { string userid = App.User.FindFirst(ClaimConst.CLAINM_USERID)?.Value; var user = await _db.Queryable().Where(u => u.Id == userid).FirstAsync(); if (user != null) { var reslut = user.Adapt(); return reslut; } else { throw Oops.Oh($"用户不存在"); } } /// /// 退出 /// /// [HttpGet("/api/auth/logout")] public async Task LogoutAsync() { // _httpContextAccessor.SignoutToSwagger(); await Task.CompletedTask; } #region 添加平台授权 /// /// 分页 /// /// /// [HttpPost("/api/authorization/pageauthorization")] public async Task PageAuthorization(PageInputBase input) { RefAsync total = 0; var res = await _db.Queryable() .OrderBy(x => x.CreateAt, OrderByType.Desc) .Select(x => new PlatformAuthorizationDto() { Id = x.Id.SelectAll(), }) .ToPageListAsync(input.Current, input.PageSize, total); PageUtil util = new PageUtil() { Total = total, Data = res }; return util; } /// /// 添加授权码 /// /// [HttpPost("/api/authorization/addauthorization")] public async Task AddAuthorization(CreateOrUpDatePlatformAuthorizationDto input) { var data = _db.Queryable().ToList(); if (data.Count > 0) { throw Oops.Oh("授权码已存在"); } var res = await _db.Insertable(new BPA_PlatformAuthorization() { Key = Guid.NewGuid().ToString(), PeriodValidity = input.PeriodValidity, UpdateAt=DateTime.Now, }).CallEntityMethod(t => t.Create()).ExecuteCommandAsync(); return res > 0; } /// /// 修改授权码 /// /// /// [HttpPost("/api/authorization/updateauthorization")] public async Task UpdateAuthorization(string id) { var data = await _db.Queryable().FirstAsync(x => x.Id == id); if (data == null) { throw Oops.Oh("授权信息不存在"); } data.Key = Guid.NewGuid().ToString(); data.UpdateAt = DateTime.Now; //data.PeriodValidity = input.PeriodValidity; return await _db.Updateable(data).ExecuteCommandHasChangeAsync(); } /// /// 修改授权码授权时间 /// /// /// [HttpPost("/api/authorization/updateauthtime")] public async Task UpdateAuthTime(CreateOrUpDatePlatformAuthorizationDto input) { var data = await _db.Queryable().FirstAsync(x => x.Id == input.Id); if (data == null) { throw Oops.Oh("授权信息不存在"); } data.PeriodValidity = input.PeriodValidity; data.UpdateAt = DateTime.Now; return await _db.Updateable(data).ExecuteCommandHasChangeAsync(); } /// /// 删除授权码 /// /// /// [HttpPost("/api/authorization/delauthorization")] public async Task DelAuthorization(string id) { var data = await _db.Queryable().FirstAsync(x => x.Id == id); if (data == null) { throw Oops.Oh("授权信息不存在"); } return await _db.Deleteable(data).ExecuteCommandHasChangeAsync(); } /// /// 获取加盟商信息 /// /// /// [HttpGet("/api/authorization/GetCompanyByIdNew")] [AllowAnonymous] public async Task GetCompanyById(string id) { var data = await _db.Queryable().FirstAsync(x => x.Id == id); return data; } #endregion } }