using Microsoft.AspNetCore.Mvc;
|
using System.Net;
|
using System.Net.Http.Headers;
|
using Microsoft.Extensions.Hosting.Internal;
|
using Microsoft.AspNetCore.Http.Extensions;
|
using IStation.Untity;
|
using Furion.DynamicApiController;
|
using System.ComponentModel.DataAnnotations;
|
using Mapster;
|
using Microsoft.AspNetCore.Http;
|
using Furion.DependencyInjection;
|
using Microsoft.AspNetCore.Authorization;
|
using Furion.DataEncryption;
|
|
namespace IStation.Application
|
{
|
/// <summary>
|
/// UserLogin
|
/// </summary>
|
[AllowAnonymous]
|
[Route("User/UserLogin")]
|
[ApiDescriptionSettings("User", Name = "用户登录", Order = 1000)]
|
public class UserLogin_Controller : IDynamicApiController, ITransient
|
{
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
private readonly Service.UserLogin _service = new Service.UserLogin();
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="httpContextAccessor"></param>
|
public UserLogin_Controller(IHttpContextAccessor httpContextAccessor)
|
{
|
_httpContextAccessor = httpContextAccessor;
|
}
|
|
/// <summary>
|
/// 标准登录
|
/// </summary>
|
[Route("FromStandard@V1.0")]
|
[HttpPost]
|
public UserLoginOutput FromStandard(UserLoginInput input)
|
{
|
var loginIp = HttpContextHelper.GetRemoteIpAddress(_httpContextAccessor.HttpContext.Request);
|
var user = _service.Login
|
(input.SoftType, input.SoftTag, input.LoginName, input.LoginPwd, loginIp, null, out Model.eLoginStatus loginStatus);
|
var vm = new UserLoginOutput()
|
{
|
Status = loginStatus,
|
User = user?.Adapt<Model.User, UserDto>()
|
};
|
|
if (loginStatus == Model.eLoginStatus.Success)
|
{
|
if (Settings.WebApi.EnableJwt)
|
{
|
// token
|
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
|
{
|
{ ClaimConst.UserID, user.ID }, // 用户标识
|
{ ClaimConst.LoginName,user.LoginName }, // 登录名称
|
{ ClaimConst.LoginPwd,user.LoginPwd }, // 登录密码
|
{ ClaimConst.CorpID,user.CorpID }, // 客户标识
|
{ ClaimConst.IsAdmin,user.IsAdmin } // 是否为管理员
|
});
|
// 设置Swagger自动登录
|
_httpContextAccessor.HttpContext.SigninToSwagger(accessToken);
|
vm.Token = accessToken;
|
}
|
|
}
|
|
return vm;
|
}
|
|
/// <summary>
|
/// 标准客户登录
|
/// </summary>
|
[Route("FromCorpStandard@V1.0")]
|
[HttpPost]
|
public UserLoginOutput FromCorpStandard(UserLoginCorpInput input)
|
{
|
var loginIp = HttpContextHelper.GetRemoteIpAddress(_httpContextAccessor.HttpContext.Request);
|
var user = _service.LoginCorp
|
(input.CorpID, input.SoftType, input.SoftTag, input.LoginName, input.LoginPwd, loginIp, null, out Model.eLoginStatus loginStatus);
|
var vm = new UserLoginOutput()
|
{
|
Status = loginStatus,
|
User = user?.Adapt<Model.User, UserDto>()
|
};
|
|
if (loginStatus == Model.eLoginStatus.Success)
|
{
|
if (Settings.WebApi.EnableJwt)
|
{
|
// token
|
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
|
{
|
{ ClaimConst.UserID, user.ID }, // 用户标识
|
{ ClaimConst.LoginName,user.LoginName }, // 登录名称
|
{ ClaimConst.LoginPwd,user.LoginPwd }, // 登录密码
|
{ ClaimConst.CorpID,user.CorpID }, // 客户标识
|
{ ClaimConst.IsAdmin,user.IsAdmin } // 是否为管理员
|
});
|
// 设置Swagger自动登录
|
_httpContextAccessor.HttpContext.SigninToSwagger(accessToken);
|
vm.Token = accessToken;
|
}
|
|
}
|
|
return vm;
|
}
|
|
/// <summary>
|
/// 微信小程序客户登录
|
/// </summary>
|
[Route("FromCorpWechatApplet@V1.0")]
|
[HttpPost]
|
public ApplicationViewModel.UserLogin FromCorpWechatApplet(UserLoginCorpWechatAppletInput input)
|
{
|
var message = input.Adapt<UserLoginCorpWechatAppletInput, Model.WechatAppletMessage>();
|
var loginIp = HttpContextHelper.GetRemoteIpAddress(_httpContextAccessor.HttpContext.Request);
|
var user = _service.LoginCorp
|
(input.CorpID, input.SoftType, input.SoftTag, input.LoginName, input.LoginPwd, loginIp, message.ToJson(), out Model.eLoginStatus loginStatus);
|
var vm = new ApplicationViewModel.UserLogin()
|
{
|
Status = loginStatus,
|
User = user?.Adapt<Model.User, ApplicationViewModel.UserDto4Wechat>()
|
};
|
|
if (loginStatus == Model.eLoginStatus.Success)
|
{
|
if (user != null)
|
{
|
vm.User.EmployeeID = user.ID;
|
}
|
if (Settings.WebApi.EnableJwt)
|
{
|
// token
|
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
|
{
|
{ ClaimConst.UserID, user.ID }, // 用户标识
|
{ ClaimConst.LoginName,user.LoginName }, // 登录名称
|
{ ClaimConst.LoginPwd,user.LoginPwd }, // 登录密码
|
{ ClaimConst.CorpID,user.CorpID }, // 客户标识
|
{ ClaimConst.IsAdmin,user.IsAdmin } // 是否为管理员
|
});
|
// 设置Swagger自动登录
|
_httpContextAccessor.HttpContext.SigninToSwagger(accessToken);
|
vm.Token = accessToken;
|
}
|
}
|
|
return vm;
|
}
|
}
|
}
|
|
|
namespace IStation.ApplicationViewModel
|
{
|
/// <summary>
|
/// 用户登录输出
|
/// </summary>
|
public class UserLogin
|
{
|
/// <summary>
|
/// 状态
|
/// </summary>
|
public Model.eLoginStatus Status { get; set; }
|
|
/// <summary>
|
/// 用户
|
/// </summary>
|
public UserDto4Wechat User { get; set; }
|
|
/// <summary>
|
/// 令牌
|
/// </summary>
|
public string Token { get; set; }
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public class UserDto4Wechat
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public string LastLoginWxUserCode { get; set; }
|
/// <summary>
|
/// 标识
|
/// </summary>
|
public long EmployeeID { get; set; }
|
|
/// <summary>
|
/// 标识
|
/// </summary>
|
public long ID { get; set; }
|
|
/// <summary>
|
/// 客户标识
|
/// </summary>
|
public long CorpID { get; set; }
|
|
/// <summary>
|
/// 关联类型
|
/// </summary>
|
public string RelatedType { get; set; }
|
|
/// <summary>
|
/// 关联标识
|
/// </summary>
|
public long RelatedID { get; set; }
|
|
/// <summary>
|
/// 是否为管理员
|
/// </summary>
|
public bool IsAdmin { get; set; }
|
|
/// <summary>
|
/// 登录名称
|
/// </summary>
|
public string LoginName { get; set; }
|
|
/// <summary>
|
/// 登录图片
|
/// </summary>
|
public string LoginImg { get; set; }
|
|
/// <summary>
|
/// 真实名称
|
/// </summary>
|
public string RealName { get; set; }
|
|
/// <summary>
|
/// 手机号码
|
/// </summary>
|
public string Telphone { get; set; }
|
|
|
|
|
/// <summary>
|
/// 使用状态
|
/// </summary>
|
public Model.eUseStatus UseStatus { get; set; }
|
|
|
|
|
}
|
}
|
|