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/APP)] /// /// 用户登录(PC/APP) /// /// 用户编码 /// 密码 /// 操作端类型(PC APP) /// [Route(template: "LoginSave")] [HttpGet] public JsonResult LoginSave(string username, string password, string usertype) { try { Dictionary payLoad = new Dictionary(); 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 mss = new List(); 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(JsonConvert.SerializeObject(ms)); //如果redis登录用户中不存在当前用户 if (redis.Get(ms.rediskey, 0) == null) { //写入redis(注意:redis类里面的失效时间必须在key创建完成之后才生效) redis.Set(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(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(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[强制下线接口] /// /// 强制下线接口 /// /// token /// rid极光推送获取设备id /// [Route(template: "ForcedOffline")] [HttpPost] public JsonResult ForcedOffline(string token, string rid) { string sql = ""; List list = new List(); 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(us.rediskey, us, redis.secondsTimeOut, 0);//写入redis } else { redis.Remove(us.rediskey, 0);//删除redis redis.Set(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[查询登录菜单] /// /// 查询登录菜单 /// /// 操作端类型(PC APP) /// 登录用户编码 /// 组织编码 /// [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[修改密码] /// /// 修改密码 /// /// 密码 /// 新密码 /// [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[登出] /// /// 登出 /// /// [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密码重置] /// /// APP密码重置 /// /// 用户编号 /// 用户名称 /// 操作端类型(PC APP) /// [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登录查询安灯呼叫信息] /// /// App登录查询安灯呼叫信息 /// /// 手机设备id(极光生成) /// 用户编码 /// 用户名称 /// 操作端PC/APP /// 所属编码组织 /// 所属组织类型 /// [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 } }