using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using VueWebApi.DLL.BLL;
using VueWebApi.Models;
using VueWebApi.Tools;
namespace VueWebApi.Controllers
{
[RoutePrefix(prefix: "api/Login")]
[ControllerGroup("系统设置", "在线接口")]
public class LoginController : ApiController
{
//定义全局信息返回变量
ToMessage mes = new ToMessage();
RedisHelper redis = new RedisHelper();
//获取企业配置Enterprise
private static readonly string Enterprise = ConfigurationManager.AppSettings["Enterprise"];
#region[PC用户登录]
///
/// PC用户登录
///
/// 用户编码
/// 密码
/// 操作端类型(PC APP)
///
[Route(template: "LoginSave")]
[HttpGet]
public HttpResponseMessage LoginSave(string username, string password, string usertype)
{
try
{
DataTable dt = LoginBLL.LoginSearch(username, password);
if (dt.Rows.Count > 0)
{
List mss = new List();
User ms = new User();
ms.guid = username + password + Guid.NewGuid().ToString();
ms.userid = Convert.ToInt32(dt.Rows[0]["ID"].ToString());
ms.usercode = dt.Rows[0]["USERCODE"].ToString();
ms.username = dt.Rows[0]["USERNAME"].ToString();
ms.password = dt.Rows[0]["PASSWORD"].ToString();
ms.usertype = usertype;
ms.rediskey = Enterprise+"LoginUserID" + ms.usertype + ms.userid;
mss.Add(ms);
HttpContext.Current.Session.Clear(); //从会话状态集合中删除所有的键值
//HttpContext.Current.Session["User"] = JsonConvert.SerializeObject(ms);
//User loginUser = JsonConvert.DeserializeObject(HttpContext.Current.Session["User"].ToString());
User loginUser = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(ms));
//如果redis登录用户中不存在当前用户
if (redis.Get(Enterprise+"LoginUserID" + ms.usertype + ms.userid, 0) == null)
{
//redis.Remove("LoginUserID" + ms.userid, 0);
//写入redis(注意:redis类里面的失效时间必须在key创建完成之后才生效)
redis.Set(Enterprise+"LoginUserID" + ms.usertype + ms.userid, ms, redis.secondsTimeOut, 0);
//登录信息写入session
HttpContext.Current.Session["User"] = JsonConvert.SerializeObject(ms);
//写入登录操作记录
mes = LoginBLL.LoginBas(ms.usercode, ms.usertype);
mes.code = "200";
mes.Message = "登录成功!";
mes.data = ms;
}
else //如果存在
{
//获取redis中当前用户信息
User r_loginUser = redis.Get(Enterprise+"LoginUserID" + ms.usertype + ms.userid, 0);
//如果session中的用户usercode和redis中的用户usercode匹配
if ((r_loginUser.usercode + r_loginUser.usertype).Equals(loginUser.usercode + loginUser.usertype))
{
mes.data = ms;
mes.code = "302";
mes.Message = "当前账号已登录,是否强制下线!";
}
else
{
//重置过期时间(注意:redis类里面的失效时间必须在key创建完成之后才生效)
redis.Set(Enterprise+"LoginUserID" + ms.usertype + loginUser.userid, loginUser, redis.secondsTimeOut, 0);
//登录信息写入session
HttpContext.Current.Session["User"] = JsonConvert.SerializeObject(ms);
//写入登录操作记录
mes = LoginBLL.LoginBas(ms.usercode, ms.usertype);
mes.data = ms;
mes.code = "200";
mes.Message = "登录成功!";
}
}
// 链表存储
//RedisHelpers.AddEntityToList>("003", mss);
//RedisHelpers.AddEntityToList("004", ms);
//Console.WriteLine(RedisHelpers.Get("001", 1));
//Console.WriteLine(RedisHelpers.Get>("002", 3));
}
else
{
mes.code = "300";
mes.Message = "账号或密码不正确!";
}
}
catch (Exception e)
{
mes.code = "300";
mes.Message = e.Message;
}
return mes.ResponseMess(mes);
}
#endregion
#region[强制下线接口]
///
/// 强制下线接口
///
/// 用户id
/// 用户编码
/// 用户名
/// 操作端PC/APP
///
[Route(template: "ForcedOffline")]
[HttpPost]
public HttpResponseMessage ForcedOffline(int userid, string usercode, string username, string usertype)
{
try
{
redis.Remove(Enterprise+"LoginUserID" + usertype + userid, 0); //删除redis
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 mes.ResponseMess(mes);
}
#endregion
#region[查询登录菜单]
///
/// 查询登录菜单
///
/// 操作端类型(PC APP)
/// 登录用户编码
///
[Route(template: "LoginMenu")]
[HttpGet]
public HttpResponseMessage LoginMenu(string usertype, string usercode)
{
try
{
//var usercode = HttpContext.Current.Request.Cookies["navTabId"].Value.ToString();
mes = LoginBLL.LoginMenu(usercode, usertype);
}
catch (Exception e)
{
mes.code = "300";
mes.Message = e.Message;
}
return TJson.toJson(mes);
}
#endregion
#region[修改密码]
///
/// 修改密码
///
/// 用户编码
/// 用户名称
/// 密码
/// 新密码
///
[ChannelActionFilter, Route(template: "UpdateUserPassword")]
[HttpPost]
public HttpResponseMessage UpdateUserPassword(string usercode, string username, string password, string newpassword)
{
mes = LoginBLL.UpdateUserPassword(usercode, username, password, newpassword);
return mes.ResponseMess(mes);
}
#endregion
#region[PC登出]
///
/// PC登出
///
/// 用户id
/// 用户编码
/// 用户名
/// 操作端PC/APP
///
[Route(template: "LoginOut")]
[HttpPost]
[ChannelActionFilter]
public HttpResponseMessage LoginOut(int userid, string usercode, string username, string usertype)
{
mes = LoginBLL.LoginOut(userid, usercode, username, usertype);
return mes.ResponseMess(mes);
}
#endregion
#region[APP用户登录]
///
/// APP用户登录
///
/// 用户编码
/// 密码
/// 操作端类型(PC APP)
///
[Route(template: "LoginAppSave")]
[HttpGet]
public HttpResponseMessage LoginAppSave(string username, string password, string usertype)
{
try
{
DataTable dt = LoginBLL.LoginSearch(username, password);
if (dt.Rows.Count > 0)
{
List mss = new List();
User ms = new User();
ms.guid = username + password + Guid.NewGuid().ToString();
ms.userid = Convert.ToInt32(dt.Rows[0]["ID"].ToString());
ms.usercode = dt.Rows[0]["USERCODE"].ToString();
ms.username = dt.Rows[0]["USERNAME"].ToString();
ms.password = dt.Rows[0]["PASSWORD"].ToString();
ms.usertype = usertype;
mss.Add(ms);
mes.code = "200";
mes.Message = "登录成功!";
mes.data = ms;
}
else
{
mes.code = "300";
mes.Message = "账号或密码不正确!";
}
}
catch (Exception e)
{
mes.code = "300";
mes.Message = e.Message;
}
return mes.ResponseMess(mes);
}
#endregion
#region[APP登出]
///
/// APP登出
///
/// 用户id
/// 用户编码
/// 用户名
/// 操作端PC/APP
///
[Route(template: "LoginAppOut")]
[HttpPost]
public HttpResponseMessage LoginAppOut(int userid, string usercode, string username, string usertype)
{
mes = LoginBLL.LoginAppOut(userid, usercode, username, usertype);
return mes.ResponseMess(mes);
}
#endregion
#region[App登录查询安灯呼叫信息]
///
///
///
/// 用户id
/// 用户编码
/// 用户名称
/// 操作端PC/APP
///
[Route(template: "LoginAppAnDonMessage")]
[HttpPost]
public HttpResponseMessage LoginAppAnDonMessage(int userid, string usercode, string username, string usertype)
{
mes = LoginBLL.LoginAppAnDonMessage(userid, usercode, username, usertype);
return TJson.toJson(mes);
//return mes.ResponseMess(mes);
}
#endregion
}
}