using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Threading.Tasks;
|
using VueWebCoreApi.DLL.BLL;
|
using VueWebCoreApi.Models;
|
using VueWebCoreApi.Tools;
|
|
namespace VueWebCoreApi.Controllers
|
{
|
[ApiExplorerSettings(GroupName = "登录信息")]
|
[ApiController]
|
[Route("api/[controller]")]
|
public class LoginController : Controller
|
{
|
//定义全局信息返回变量
|
ToMessage mes = new ToMessage();
|
RedisHelper redis = new RedisHelper();
|
//获取企业配置Enterprise
|
private static readonly string Enterprise = AppSetting.GetAppSetting("Enterprise");
|
|
|
#region[用户登录(PC)]
|
/// <summary>
|
/// 用户登录(PC)
|
/// </summary>
|
/// <param name="username">用户编码</param>
|
/// <param name="password">密码</param>
|
/// <param name="usertype">操作端类型(PC)</param>
|
/// <returns></returns>
|
[Route(template: "LoginSave")]
|
[HttpGet]
|
public JsonResult LoginSave(string username, string password, string usertype)
|
{
|
try
|
{
|
Dictionary<string, object> payLoad = new Dictionary<string, object>();
|
mes = LoginBLL.LoginSearch(username, password);
|
if (mes.code == "200")
|
{
|
DataTable dt = (DataTable)mes.data;
|
//jwt生成Token前的用户信息
|
payLoad.Add("usercode", dt.Rows[0]["usercode"].ToString());
|
payLoad.Add("username", dt.Rows[0]["username"].ToString());
|
payLoad.Add("storg_code", dt.Rows[0]["storg_code"].ToString());
|
payLoad.Add("storg_name", dt.Rows[0]["storg_name"].ToString());
|
payLoad.Add("is_system_admin", dt.Rows[0]["is_system_admin"].ToString());
|
payLoad.Add("role_code", dt.Rows[0]["role_code"].ToString());
|
payLoad.Add("role_datapermissions", dt.Rows[0]["role_datapermissions"].ToString());
|
payLoad.Add("usertype", usertype);
|
payLoad.Add("rediskey", Enterprise + "LoginUserID" + usertype + JwtTools.FindFirstKeyByValue(payLoad, "usercode"));
|
//获取jwt生成token
|
mes = JwtTools.Encode(payLoad);
|
|
List<User> mss = new List<User>();
|
User ms = new User();
|
ms.usercode = dt.Rows[0]["usercode"].ToString();
|
ms.username = dt.Rows[0]["username"].ToString();
|
ms.storg_code= dt.Rows[0]["storg_code"].ToString();
|
ms.storg_name = dt.Rows[0]["storg_name"].ToString();
|
ms.is_system_admin = dt.Rows[0]["is_system_admin"].ToString();
|
ms.role_code= dt.Rows[0]["role_code"].ToString();
|
ms.role_datapermissions = dt.Rows[0]["role_datapermissions"].ToString();
|
ms.usertype = usertype;
|
ms.rediskey = Enterprise + "LoginUserID" + ms.usertype + ms.usercode;
|
ms.token = mes.data.ToString();
|
mss.Add(ms);
|
|
|
User loginUser = JsonConvert.DeserializeObject<User>(JsonConvert.SerializeObject(ms));
|
//如果redis登录用户中不存在当前用户
|
if (redis.Get<User>(ms.rediskey, 0) == null)
|
{
|
//写入redis(注意:redis类里面的失效时间必须在key创建完成之后才生效)
|
redis.Set<User>(ms.rediskey, ms, redis.secondsTimeOut, 0);
|
//写入登录操作记录
|
LogHelper.DbOperateLog(ms.usercode, "登录", "登录了系统", ms.usertype);
|
mes.code = "200";
|
mes.message = "登录成功!";
|
mes.data = ms.token.ToString();
|
}
|
else //如果存在
|
{
|
//获取redis中当前用户信息
|
User r_loginUser = redis.Get<User>(ms.rediskey, 0);
|
//如果session中的用户usercode和redis中的用户usercode匹配
|
if ((r_loginUser.rediskey).Equals(loginUser.rediskey))
|
{
|
mes.data = ms.token.ToString();
|
mes.code = "302";
|
mes.message = "当前账号已登录,是否强制下线!";
|
}
|
else
|
{
|
//重置过期时间(注意:redis类里面的失效时间必须在key创建完成之后才生效)
|
redis.Set<User>(loginUser.rediskey, loginUser, redis.secondsTimeOut, 0);
|
//写入登录操作记录
|
LogHelper.DbOperateLog(ms.usercode, "登录", "登录了系统", ms.usertype);
|
mes.data = ms;
|
mes.code = "200";
|
mes.message = "登录成功!";
|
}
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
mes.code = "300";
|
mes.message = e.Message;
|
mes.data = null;
|
}
|
|
return Json(mes);
|
}
|
#endregion
|
|
#region[强制下线接口]
|
/// <summary>
|
/// 强制下线接口
|
/// </summary>
|
/// <param name="token">token</param>
|
/// <param name="rid">rid极光推送获取设备id</param>
|
/// <returns></returns>
|
[Route(template: "ForcedOffline")]
|
[HttpPost]
|
public JsonResult ForcedOffline(string token, string rid)
|
{
|
string sql = "";
|
List<object> list = new List<object>();
|
|
try
|
{
|
User us = JwtTools.Denocode(token.ToString());
|
us.token = token.ToString();
|
if (us.usertype.ToString() == "APP")
|
{
|
//更新rid
|
sql = @"update [dbo].[TUser] set rid=@rid where usercode=@usercode";
|
list.Add(new
|
{
|
str = sql,
|
parm = new
|
{
|
rid = rid,
|
usercode = us.usercode.ToString()
|
}
|
});
|
bool aa = DapperHelper.DoTransaction(list);
|
redis.Remove(us.rediskey, 0);//删除redis
|
redis.Set<User>(us.rediskey, us, redis.secondsTimeOut, 0);//写入redis
|
}
|
else
|
{
|
redis.Remove(us.rediskey, 0);//删除redis
|
redis.Set<User>(us.rediskey, us, redis.secondsTimeOut, 0);//写入redis
|
}
|
//写入日志
|
LogHelper.DbOperateLog(us.usercode, "强制下线", "被强制下线了", us.usertype);
|
mes.code = "200";
|
mes.count = 0;
|
mes.message = "强制下线成功!";
|
mes.data = null;
|
}
|
catch (Exception e)
|
{
|
mes.code = "300";
|
mes.count = 0;
|
mes.message = e.Message;
|
mes.data = null;
|
}
|
return Json(mes);
|
}
|
#endregion
|
|
#region[查询登录菜单]
|
/// <summary>
|
/// 查询登录菜单
|
/// </summary>
|
/// <param name="usertype">操作端类型(PC APP)</param>
|
/// <param name="usercode">登录用户编码</param>
|
/// <param name="torg_code">组织编码</param>
|
/// <returns></returns>
|
[Route(template: "LoginMenu")]
|
[HttpGet]
|
[ChannelActionFilter]
|
public JsonResult LoginMenu(string usertype, string usercode,string torg_code)
|
{
|
try
|
{
|
var token = HttpContext.Request.Headers["Token"].ToString();
|
User us = JwtTools.Denocode(token.ToString());
|
mes = LoginBLL.LoginMenu(usercode, usertype,us);
|
}
|
catch (Exception e)
|
{
|
mes.code = "300";
|
mes.message = e.Message;
|
}
|
return Json(mes);
|
}
|
#endregion
|
|
#region[修改密码]
|
/// <summary>
|
/// 修改密码
|
/// </summary>
|
/// <param name="password">密码</param>
|
/// <param name="newpassword">新密码</param>
|
/// <returns></returns>
|
[ChannelActionFilter, Route(template: "UpdateUserPassword")]
|
[HttpPost]
|
public JsonResult UpdateUserPassword(string password, string newpassword)
|
{
|
var token = HttpContext.Request.Headers["Token"].ToString();
|
User us = JwtTools.Denocode(token.ToString());
|
mes = LoginBLL.UpdateUserPassword(us, password, newpassword);
|
return Json(mes);
|
}
|
#endregion
|
|
#region[登出]
|
/// <summary>
|
/// 登出
|
/// </summary>
|
/// <returns></returns>
|
[Route(template: "LoginOut")]
|
[HttpPost]
|
[ChannelActionFilter]
|
public JsonResult LoginOut()
|
{
|
var token = HttpContext.Request.Headers["Token"].ToString();
|
User us = JwtTools.Denocode(token.ToString());
|
mes = LoginBLL.LoginOut(us);
|
return Json(mes);
|
}
|
#endregion
|
|
#region[APP用户登录]
|
/// <summary>
|
/// APP用户登录
|
/// </summary>
|
/// <param name="username">用户编码</param>
|
/// <param name="password">密码</param>
|
/// <param name="usertype">操作端类型(APP)</param>
|
/// <returns></returns>
|
[Route(template: "LoginAppSave")]
|
[HttpGet]
|
public JsonResult LoginAppSave(string username, string password, string usertype)
|
{
|
try
|
{
|
Dictionary<string, object> payLoad = new Dictionary<string, object>();
|
mes = LoginBLL.LoginSearch(username, password);
|
if (mes.code == "200")
|
{
|
DataTable dt = (DataTable)mes.data;
|
//jwt生成Token前的用户信息
|
payLoad.Add("usercode", dt.Rows[0]["usercode"].ToString());
|
payLoad.Add("username", dt.Rows[0]["username"].ToString());
|
payLoad.Add("storg_code", dt.Rows[0]["storg_code"].ToString());
|
payLoad.Add("storg_name", dt.Rows[0]["storg_name"].ToString());
|
payLoad.Add("is_system_admin", dt.Rows[0]["is_system_admin"].ToString());
|
payLoad.Add("role_code", dt.Rows[0]["role_code"].ToString());
|
payLoad.Add("role_datapermissions", dt.Rows[0]["role_datapermissions"].ToString());
|
payLoad.Add("usertype", usertype);
|
payLoad.Add("rediskey", Enterprise + "LoginUserID" + usertype + JwtTools.FindFirstKeyByValue(payLoad, "usercode"));
|
//获取jwt生成token
|
mes = JwtTools.Encode(payLoad);
|
|
List<User> mss = new List<User>();
|
User ms = new User();
|
ms.usercode = dt.Rows[0]["usercode"].ToString();
|
ms.username = dt.Rows[0]["username"].ToString();
|
ms.storg_code = dt.Rows[0]["storg_code"].ToString();
|
ms.storg_name = dt.Rows[0]["storg_name"].ToString();
|
ms.is_system_admin = dt.Rows[0]["is_system_admin"].ToString();
|
ms.role_code = dt.Rows[0]["role_code"].ToString();
|
ms.role_datapermissions = dt.Rows[0]["role_datapermissions"].ToString();
|
ms.usertype = usertype;
|
ms.rediskey = Enterprise + "LoginUserID" + ms.usertype + ms.usercode;
|
ms.token = mes.data.ToString();
|
mss.Add(ms);
|
|
|
User loginUser = JsonConvert.DeserializeObject<User>(JsonConvert.SerializeObject(ms));
|
//如果redis登录用户中不存在当前用户
|
if (redis.Get<User>(ms.rediskey, 0) == null)
|
{
|
//写入redis(注意:redis类里面的失效时间必须在key创建完成之后才生效)
|
redis.Set<User>(ms.rediskey, ms, redis.secondsTimeOut, 0);
|
//写入登录操作记录
|
LogHelper.DbOperateLog(ms.usercode, "登录", "登录了系统", ms.usertype);
|
mes.code = "200";
|
mes.message = "登录成功!";
|
mes.data = ms.token.ToString();
|
}
|
else //如果存在
|
{
|
//获取redis中当前用户信息
|
User r_loginUser = redis.Get<User>(ms.rediskey, 0);
|
//如果session中的用户usercode和redis中的用户usercode匹配
|
if ((r_loginUser.rediskey).Equals(loginUser.rediskey))
|
{
|
redis.Remove(loginUser.rediskey, 0);//删除redis
|
redis.Set<User>(loginUser.rediskey, ms, redis.secondsTimeOut, 0);//写入redis
|
}
|
else
|
{
|
//重置过期时间(注意:redis类里面的失效时间必须在key创建完成之后才生效)
|
redis.Set<User>(loginUser.rediskey, loginUser, redis.secondsTimeOut, 0);
|
//写入登录操作记录
|
LogHelper.DbOperateLog(ms.usercode, "登录", "登录了系统", ms.usertype);
|
mes.data = ms;
|
mes.code = "200";
|
mes.message = "登录成功!";
|
}
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
mes.code = "300";
|
mes.message = e.Message;
|
mes.data = null;
|
}
|
|
return Json(mes);
|
}
|
#endregion
|
|
#region[APP密码重置]
|
/// <summary>
|
/// APP密码重置
|
/// </summary>
|
/// <param name="usercode">用户编号</param>
|
/// <param name="username">用户名称</param>
|
/// <param name="usertype">操作端类型(PC APP)</param>
|
/// <returns></returns>
|
[ChannelActionFilterAttributeApp, Route(template: "ResettUserPassword")]
|
[HttpPost]
|
public JsonResult ResettUserPassword(string usercode, string username, string usertype)
|
{
|
mes = LoginBLL.ResettUserPassword(usercode, username, usertype);
|
return Json(mes);
|
}
|
#endregion
|
|
#region[App登录查询安灯呼叫信息]
|
/// <summary>
|
/// App登录查询安灯呼叫信息
|
/// </summary>
|
/// <param name="rid">手机设备id(极光生成)</param>
|
/// <param name="usercode">用户编码</param>
|
/// <param name="username">用户名称</param>
|
/// <param name="usertype">操作端PC/APP</param>
|
/// <param name="stu_torgcode">所属编码组织</param>
|
/// <param name="stu_torgtypecode">所属组织类型</param>
|
/// <returns></returns>
|
[Route(template: "LoginAppAnDonMessage")]
|
[HttpPost]
|
public JsonResult LoginAppAnDonMessage(string rid, string usercode, string username, string usertype, string stu_torgcode, string stu_torgtypecode)
|
{
|
mes = LoginBLL.LoginAppAnDonMessage(rid, usercode, username, usertype, stu_torgcode, stu_torgtypecode);
|
return Json(mes);
|
//return mes.ResponseMess(mes);
|
}
|
#endregion
|
}
|
}
|