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