商丘12345 后端

LoginController.cs 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Text;
  7. using CallCenterApi.Interface.Controllers.Base;
  8. using System.Data;
  9. using CallCenter.Utility;
  10. using CallCenterApi.Common;
  11. using CallCenterApi.Interface.Models.Common;
  12. using CallCenterApi.Model;
  13. using CallCenterApi.Interface.Models.Input;
  14. using CallCenterApi.DB;
  15. using System.Web.Caching;
  16. using CallCenterApi.Interface.Controllers.Login;
  17. namespace CallCenterApi.Interface.Controllers
  18. {
  19. public class LoginController : BaseController
  20. {
  21. private BLL.T_Sys_RoleFunction roleFunctionBLL = new BLL.T_Sys_RoleFunction();
  22. public DateTime ExpiredTime = DateTime.Now.AddDays(1);// Convert.ToDateTime(ReadFile(HttpRuntime.AppDomainAppPath + "tools\\hykj.hy"));
  23. [HttpPost]
  24. public ActionResult login(LoginModel login)
  25. {
  26. bool appResult = LoodLoop();
  27. if (appResult)
  28. {
  29. DataTable dt = new DataTable();
  30. try
  31. {
  32. #region 密码解密
  33. string st = DateTime.Parse(login.LoginTime).ToString("HHmmss");
  34. var otherController = DependencyResolver.Current.GetService<AES256Controller>();
  35. string pw = "";
  36. try
  37. {
  38. pw = otherController.Decrypt(login.Password.Trim (), st);
  39. }
  40. catch (Exception e)
  41. {
  42. return Error("错误:" + e.Message);
  43. }
  44. #endregion
  45. Dictionary<string, string> paras = new Dictionary<string, string>();
  46. string sql = " select * from T_Sys_UserAccount where F_UserCode=@F_UserCode and F_PassWord=@F_PassWord";
  47. paras.Add("@F_UserCode", login.Username);
  48. paras.Add("@F_PassWord", pw);//login.Password
  49. dt = DbHelperSQL.Query(sql, paras).Tables[0];
  50. if (dt != null)
  51. {
  52. if (dt.Rows.Count > 0)
  53. {
  54. if (dt.Rows[0]["F_DeleteFlag"] != null && dt.Rows[0]["F_DeleteFlag"].ToString() == "1")
  55. {
  56. int rr = new CallCenterApi.BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  57. {
  58. F_LoginName = dt.Rows[0]["F_UserName"].ToString(),
  59. F_LoginId = Convert.ToInt32(dt.Rows[0]["F_UserId"].ToString()),
  60. F_Result = "禁用账号登录:帐号-" + login.Username + ";分机号-" + login.ExtensionPhone,
  61. F_LoginIP = Common.DTRequest.GetIP(),
  62. F_Hostname = Common.DTRequest.GetIP(),
  63. F_LoginDate = DateTime.Now,
  64. F_Remark = "",
  65. F_State = 0
  66. });
  67. return Error("此账号已经被禁用");
  68. }
  69. Dictionary<string, string> Dic = new Dictionary<string, string>();
  70. Dic.Add("F_UserID", dt.Rows[0]["F_UserId"].ToString());
  71. Dic.Add("F_UserCode", dt.Rows[0]["F_UserCode"].ToString());
  72. Dic.Add("F_DeptId", dt.Rows[0]["F_DeptId"].ToString());
  73. Dic.Add("F_UserName", dt.Rows[0]["F_UserName"].ToString());
  74. Dic.Add("F_Telephone", dt.Rows[0]["F_Telephone"].ToString());
  75. Dic.Add("F_RoleID", dt.Rows[0]["F_RoleID"].ToString());
  76. Dic.Add("F_SeatFlag", dt.Rows[0]["F_SeatFlag"].ToString());
  77. if (dt.Rows[0]["F_GroupId"].ToString() != null)
  78. {
  79. Dic.Add("F_GroupId", dt.Rows[0]["F_GroupId"].ToString());
  80. }
  81. if (dt.Rows[0]["F_SeatRight"].ToString() != null)
  82. {
  83. Dic.Add("F_SeatRight", dt.Rows[0]["F_SeatRight"].ToString());
  84. }
  85. if (!string.IsNullOrEmpty(login.ExtensionPhone))
  86. {
  87. Dic.Add("F_ExtensionNumber", login.ExtensionPhone);
  88. }
  89. else
  90. {
  91. Dic.Add("F_ExtensionNumber", "");
  92. }
  93. Dic.Add("F_WorkNumber", dt.Rows[0]["F_WorkNumber"].ToString());
  94. //CookieUtil.SetCookie("BaseCallCenter_T_User", Dic);
  95. //写入登录日志
  96. new CallCenterApi.BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  97. {
  98. F_LoginName = dt.Rows[0]["F_UserName"].ToString(),
  99. F_LoginId = Convert.ToInt32(dt.Rows[0]["F_UserId"].ToString()),
  100. F_Result = "登录成功",
  101. F_LoginIP = Common.DTRequest.GetIP(),
  102. F_Hostname = Common.DTRequest.GetIP(),
  103. F_LoginDate = DateTime.Now,
  104. F_Remark = "",
  105. F_State = 0
  106. });
  107. var token = FormsPrincipal<Dictionary<string, string>>.GetCookieValue(Dic["F_UserCode"], Dic);
  108. ////放入缓存
  109. //CacheHelper.Insert(token, Dic, 1440, System.Web.Caching.CacheItemPriority.NotRemovable, onRemove);
  110. //放入redis缓存
  111. RedisHelper.StringSet(token,Dic.ToJson(),new TimeSpan(24,0,0));
  112. return Success("登录成功", new
  113. {
  114. token = token
  115. });
  116. }
  117. else
  118. {
  119. //写入登录日志
  120. DataTable dt1 = new CallCenterApi.BLL.T_Sys_UserAccount().GetList("F_UserCode='" + login.Username + "'").Tables[0];
  121. if (dt1.Rows.Count > 0)
  122. {
  123. int rr = new CallCenterApi.BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  124. {
  125. F_LoginName = dt1.Rows[0]["F_UserName"].ToString(),
  126. F_LoginId = Convert.ToInt32(dt1.Rows[0]["F_UserId"].ToString()),
  127. F_Result = "登录失败:帐号-" + login.Username + ";分机号-" + login.ExtensionPhone,
  128. F_LoginIP = Common.DTRequest.GetIP(),
  129. F_Hostname = Common.DTRequest.GetIP(),
  130. F_LoginDate = DateTime.Now,
  131. F_Remark = "",
  132. F_State = 0
  133. });
  134. }
  135. else
  136. {
  137. int rr = new BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  138. {
  139. F_LoginName = login.Username,
  140. F_LoginId = -1,
  141. F_Result = "登录失败:帐号-" + login.Username + ";分机号-" + login.ExtensionPhone,
  142. F_LoginIP = Common.DTRequest.GetIP(),
  143. F_Hostname = Common.DTRequest.GetIP(),
  144. F_LoginDate = DateTime.Now,
  145. F_Remark = "",
  146. F_State = 0
  147. });
  148. }
  149. return Error("账号或密码错误,请重新登录");
  150. }
  151. }
  152. else
  153. {
  154. return Error("账号或密码错误,请重新登录");
  155. }
  156. }
  157. catch (Exception ex)
  158. {
  159. return Error("错误:" + ex.Message);
  160. }
  161. finally
  162. {
  163. dt.Clear();
  164. dt.Dispose();
  165. }
  166. }
  167. else
  168. {
  169. return Error("授权过期,请联系系统厂家。");
  170. }
  171. }
  172. [HttpPost]
  173. public ActionResult applogin(LoginModel login)
  174. {
  175. bool appResult = LoodLoop();
  176. if (appResult)
  177. {
  178. DataTable dt = new DataTable();
  179. try
  180. {
  181. Dictionary<string, string> paras = new Dictionary<string, string>();
  182. string sql = " select * from T_Sys_UserAccount where F_UserCode=@F_UserCode and F_PassWord=@F_PassWord and F_DeleteFlag=0";
  183. paras.Add("@F_UserCode", login.Username);
  184. paras.Add("@F_PassWord", login.Password);
  185. dt = DbHelperSQL.Query(sql, paras).Tables[0];
  186. if (dt.Rows.Count > 0)
  187. {
  188. if (dt.Rows[0]["F_DeleteFlag"] != null && dt.Rows[0]["F_DeleteFlag"].ToString() == "1")
  189. {
  190. int rr = new CallCenterApi.BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  191. {
  192. F_LoginName = dt.Rows[0]["F_UserName"].ToString(),
  193. F_LoginId = Convert.ToInt32(dt.Rows[0]["F_UserId"].ToString()),
  194. F_Result = "禁用账号登录:帐号-" + login.Username + ";分机号-" + login.ExtensionPhone,
  195. F_LoginIP = Common.DTRequest.GetIP(),
  196. F_Hostname = Common.DTRequest.GetIP(),
  197. F_LoginDate = DateTime.Now,
  198. F_Remark = "",
  199. F_State = 0
  200. });
  201. return Error("此账号已经被禁用");
  202. }
  203. string rid = dt.Rows[0]["F_RoleID"].ToString();
  204. var role = new BLL.T_Sys_RoleInfo().GetModel(Int32.Parse(rid));
  205. if (role.F_RoleCode == "EJWLDW" || role.F_RoleCode == "WLDW" || role.F_RoleCode=="DBZY"
  206. || role.F_RoleCode == "ZXLD" || role.F_RoleCode == "ZXLDGLY" || role.F_RoleCode == "GLY" || role.F_RoleCode== "DDZG" || role.F_RoleCode == "DFZF")
  207. {
  208. Dictionary<string, string> Dic = new Dictionary<string, string>();
  209. Dic.Add("F_UserID", dt.Rows[0]["F_UserId"].ToString());
  210. Dic.Add("F_UserCode", dt.Rows[0]["F_UserCode"].ToString());
  211. Dic.Add("F_DeptId", dt.Rows[0]["F_DeptId"].ToString());
  212. Dic.Add("F_UserName", dt.Rows[0]["F_UserName"].ToString());
  213. Dic.Add("F_Telephone", dt.Rows[0]["F_Telephone"].ToString());
  214. Dic.Add("F_RoleID", dt.Rows[0]["F_RoleID"].ToString());
  215. Dic.Add("F_SeatFlag", dt.Rows[0]["F_SeatFlag"].ToString());
  216. if (dt.Rows[0]["F_GroupId"].ToString() != null)
  217. {
  218. Dic.Add("F_GroupId", dt.Rows[0]["F_GroupId"].ToString());
  219. }
  220. if (dt.Rows[0]["F_SeatRight"].ToString() != null)
  221. {
  222. Dic.Add("F_SeatRight", dt.Rows[0]["F_SeatRight"].ToString());
  223. }
  224. if (!string.IsNullOrEmpty(login.ExtensionPhone))
  225. {
  226. Dic.Add("F_ExtensionNumber", login.ExtensionPhone);
  227. }
  228. else
  229. {
  230. Dic.Add("F_ExtensionNumber", "");
  231. }
  232. Dic.Add("F_WorkNumber", dt.Rows[0]["F_WorkNumber"].ToString());
  233. //CookieUtil.SetCookie("BaseCallCenter_T_User", Dic);
  234. //写入登录日志
  235. new CallCenterApi.BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  236. {
  237. F_LoginName = dt.Rows[0]["F_UserName"].ToString(),
  238. F_LoginId = Convert.ToInt32(dt.Rows[0]["F_UserId"].ToString()),
  239. F_Result = "APP登录成功",
  240. F_LoginIP = Common.DTRequest.GetIP(),
  241. F_Hostname = Common.DTRequest.GetIP(),
  242. F_LoginDate = DateTime.Now,
  243. F_Remark = "",
  244. F_State = 0
  245. });
  246. var token = FormsPrincipal<Dictionary<string, string>>.GetCookieValue(Dic["F_UserCode"], Dic);
  247. ////放入缓存
  248. //CacheHelper.Insert(token, Dic, 1440, System.Web.Caching.CacheItemPriority.NotRemovable);
  249. //放入redis缓存
  250. RedisHelper.StringSet(token, Dic.ToJson(), new TimeSpan(24, 0, 0));
  251. return Success("登录成功", new
  252. {
  253. token = token
  254. });
  255. }
  256. else
  257. {
  258. return Error("权限不足");
  259. }
  260. }
  261. else
  262. {
  263. //写入登录日志
  264. DataTable dt1 = new CallCenterApi.BLL.T_Sys_UserAccount().GetList("F_UserCode='" + login.Username + "'").Tables[0];
  265. if (dt1.Rows.Count > 0)
  266. {
  267. int rr = new CallCenterApi.BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  268. {
  269. F_LoginName = dt1.Rows[0]["F_UserName"].ToString(),
  270. F_LoginId = Convert.ToInt32(dt1.Rows[0]["F_UserId"].ToString()),
  271. F_Result = "APP登录失败:帐号-" + login.Username + ";分机号-" + login.ExtensionPhone,
  272. F_LoginIP = Common.DTRequest.GetIP(),
  273. F_Hostname = Common.DTRequest.GetIP(),
  274. F_LoginDate = DateTime.Now,
  275. F_Remark = "",
  276. F_State = 0
  277. });
  278. }
  279. else
  280. {
  281. int rr = new BLL.T_Sys_LoginLogs().Add(new Model.T_Sys_LoginLogs()
  282. {
  283. F_LoginName = login.Username,
  284. F_LoginId = -1,
  285. F_Result = "APP登录失败:帐号-" + login.Username + ";分机号-" + login.ExtensionPhone,
  286. F_LoginIP = Common.DTRequest.GetIP(),
  287. F_Hostname = Common.DTRequest.GetIP(),
  288. F_LoginDate = DateTime.Now,
  289. F_Remark = "",
  290. F_State = 0
  291. });
  292. }
  293. return Error("账号或密码错误,请重新登录");
  294. }
  295. }
  296. catch (Exception ex)
  297. {
  298. return Error("错误:" + ex.Message);
  299. }
  300. finally
  301. {
  302. dt.Clear();
  303. dt.Dispose();
  304. }
  305. }
  306. else
  307. {
  308. return Error("授权过期,请联系系统厂家。");
  309. }
  310. }
  311. public ActionResult Logout(string token = "")
  312. {
  313. if (Request.IsAuthenticated)
  314. {
  315. //CacheHelper.Remove(token);
  316. RedisHelper.KeyDelete(token);
  317. }
  318. return Success("退出成功");
  319. }
  320. [Authority]
  321. public ActionResult Authority(string token = "", string url = "")
  322. {
  323. var roleId = Utils.StrToInt(User.UserData["F_RoleID"], 0);
  324. var role = new BLL.T_Sys_RoleInfo().GetModel(roleId);
  325. if (role != null)
  326. {
  327. //var roleFunctionList = roleFunctionBLL.DataTableToList(roleFunctionBLL.GetList(" F_RoleId=" + role.F_RoleId).Tables[0]);
  328. //var moduleFunction = new BLL.T_Sys_Function().GetModel(url);
  329. //if (moduleFunction != null)
  330. //{
  331. // var single = roleFunctionList.SingleOrDefault(x => x.F_FunctionId == moduleFunction.F_FunctionId);
  332. // if (single != null)
  333. // {
  334. // return Success("", moduleFunction.F_OptUrl);
  335. // }
  336. //}
  337. return Success("成功");
  338. }
  339. return UnAuthorized("未授权");
  340. }
  341. /// <summary>
  342. /// 移除缓存后调用
  343. /// </summary>
  344. /// <param name="key"></param>
  345. /// <param name="val"></param>
  346. /// <param name="reason"></param>
  347. public void onRemove(string key, object val, CacheItemRemovedReason reason)
  348. {
  349. var obj = new
  350. {
  351. key = key,
  352. val = val,
  353. reason = reason
  354. };
  355. Warn(obj.ToJson());
  356. }
  357. /// <summary>
  358. /// 验证授权
  359. /// </summary>
  360. /// <returns></returns>
  361. private bool LoodLoop()
  362. {
  363. bool result = CheckValid();
  364. //return true;
  365. if (result)
  366. return true;
  367. else
  368. return false;
  369. }
  370. private bool CheckValid()
  371. {
  372. return DateTime.Now < ExpiredTime;
  373. }
  374. private static string ReadFile(string filepath)
  375. {
  376. string str = System.IO.File.ReadAllText(filepath, Encoding.UTF8);
  377. return DESEncrypt.Decrypt(str);
  378. }
  379. }
  380. }