Нет описания

LoginController.cs 21KB

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