HomeController.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Mvc;
  7. using YiSha.Business.OrganizationManage;
  8. using YiSha.Business.SystemManage;
  9. using YiSha.Entity.SystemManage;
  10. using YiSha.Enum;
  11. using YiSha.IdGenerator;
  12. using YiSha.Model.Result;
  13. using YiSha.Util.Extension;
  14. using YiSha.Web.Code;
  15. using YiSha.Util.Model;
  16. using YiSha.Util;
  17. using YiSha.Entity.OrganizationManage;
  18. using Microsoft.AspNetCore.Http;
  19. using Microsoft.Extensions.DependencyInjection;
  20. using YiSha.IBusiness.SystemManage;
  21. using YiSha.IBusiness.OrganizationManage;
  22. namespace YiSha.Admin.Web.Controllers
  23. {
  24. public class HomeController : BaseController
  25. {
  26. private IMenuBLL _menuBLL;
  27. private IUserBLL _userBLL;
  28. private ILogLoginBLL _logLoginBLL;
  29. private IMenuAuthorizeBLL _menuAuthorizeBLL;
  30. public HomeController(IMenuBLL menuBLL, IUserBLL userBLL, ILogLoginBLL logLoginBLL, IMenuAuthorizeBLL menuAuthorizeBLL)
  31. {
  32. _menuBLL = menuBLL;
  33. _userBLL = userBLL;
  34. _logLoginBLL = logLoginBLL;
  35. _menuAuthorizeBLL = menuAuthorizeBLL;
  36. }
  37. #region 视图功能
  38. [AuthorizeFilter("")]
  39. public async Task<IActionResult> Index()
  40. {
  41. OperatorInfo operatorInfo = await Operator.Instance.Current();
  42. TData<List<MenuEntity>> objMenu = await _menuBLL.GetListPartial(null);
  43. List<MenuEntity> menuList = objMenu.Data;
  44. menuList = menuList.Where(p => p.MenuStatus == StatusEnum.Yes.ParseToInt()).ToList();
  45. if (operatorInfo.IsSystem != 1)
  46. {
  47. TData<List<MenuAuthorizeInfo>> objMenuAuthorize = await _menuAuthorizeBLL.GetAuthorizeListPartial(operatorInfo);
  48. List<int> authorizeMenuIdList = objMenuAuthorize.Data.Select(p => p.MenuId).ToList();
  49. menuList = menuList.Where(p => authorizeMenuIdList.Contains(p.Id)).ToList();
  50. }
  51. ViewBag.MenuList = menuList;
  52. ViewBag.OperatorInfo = operatorInfo;
  53. return View();
  54. }
  55. [HttpGet]
  56. public IActionResult Welcome()
  57. {
  58. return View();
  59. }
  60. [HttpGet]
  61. public IActionResult Login()
  62. {
  63. if (GlobalContext.SystemConfig.Demo)
  64. {
  65. ViewBag.UserName = "admin";
  66. ViewBag.Password = "123456";
  67. }
  68. return View();
  69. }
  70. [HttpGet]
  71. public async Task<IActionResult> LoginOff()
  72. {
  73. #region 退出系统
  74. OperatorInfo user = await Operator.Instance.Current();
  75. if (user != null)
  76. {
  77. // 如果不允许同一个用户多次登录,当用户登出的时候,就不在线了
  78. if (!GlobalContext.SystemConfig.LoginMultiple)
  79. {
  80. await _userBLL.UpdateUserPartial(new UserEntity { Id = user.UserId, IsOnline = 0 });
  81. }
  82. // 登出日志
  83. await _logLoginBLL.SaveFormPartial(new LogLoginEntity
  84. {
  85. LogStatus = OperateStatusEnum.Success.ParseToInt(),
  86. Remark = "退出系统",
  87. IpAddress = NetHelper.Ip,
  88. IpLocation = string.Empty,
  89. Browser = NetHelper.Browser,
  90. OS = NetHelper.GetOSVersion(),
  91. ExtraRemark = NetHelper.UserAgent,
  92. BaseCreatorId = user.UserId
  93. });
  94. Operator.Instance.RemoveCurrent();
  95. new CookieHelper().RemoveCookie("RememberMe");
  96. }
  97. #endregion
  98. return View(nameof(Login));
  99. }
  100. [HttpGet]
  101. public IActionResult NoPermission()
  102. {
  103. return View();
  104. }
  105. [HttpGet]
  106. public IActionResult Error(string message)
  107. {
  108. ViewBag.Message = message;
  109. return View();
  110. }
  111. [HttpGet]
  112. public IActionResult Skin()
  113. {
  114. return View();
  115. }
  116. #endregion
  117. #region 获取数据
  118. public IActionResult GetCaptchaImage()
  119. {
  120. string sessionId = GlobalContext.ServiceProvider?.GetService<IHttpContextAccessor>().HttpContext.Session.Id;
  121. Tuple<string, int> captchaCode = CaptchaHelper.GetCaptchaCode();
  122. byte[] bytes = CaptchaHelper.CreateCaptchaImage(captchaCode.Item1);
  123. new SessionHelper().WriteSession("CaptchaCode", captchaCode.Item2);
  124. return File(bytes, @"image/jpeg");
  125. }
  126. #endregion
  127. #region 提交数据
  128. [HttpPost]
  129. public async Task<IActionResult> LoginJson(string userName, string password, string captchaCode)
  130. {
  131. TData obj = new TData();
  132. if (string.IsNullOrEmpty(captchaCode))
  133. {
  134. obj.Message = "验证码不能为空";
  135. return Json(obj);
  136. }
  137. if (captchaCode != new SessionHelper().GetSession("CaptchaCode").ParseToString())
  138. {
  139. obj.Message = "验证码错误,请重新输入";
  140. return Json(obj);
  141. }
  142. TData<UserEntity> userObj = await _userBLL.CheckLoginPartial(userName, password, (int)PlatformEnum.Web);
  143. if (userObj.Success)
  144. {
  145. await _userBLL.UpdateUserPartial(userObj.Data);
  146. await Operator.Instance.AddCurrent(userObj.Data.WebToken);
  147. }
  148. string ip = NetHelper.Ip;
  149. string browser = NetHelper.Browser;
  150. string os = NetHelper.GetOSVersion();
  151. string userAgent = NetHelper.UserAgent;
  152. Action taskAction = async () =>
  153. {
  154. LogLoginEntity logLoginEntity = new LogLoginEntity
  155. {
  156. LogStatus = userObj.Success ? OperateStatusEnum.Success.ParseToInt() : OperateStatusEnum.Fail.ParseToInt(),
  157. Remark = userObj.Message,
  158. IpAddress = ip,
  159. IpLocation = IpLocationHelper.GetIpLocation(ip),
  160. Browser = browser,
  161. OS = os,
  162. ExtraRemark = userAgent,
  163. BaseCreatorId = userObj.Data == null ? 0 : userObj.Data.Id
  164. };
  165. // 让底层不用获取HttpContext
  166. logLoginEntity.BaseCreatorId = logLoginEntity.BaseCreatorId;
  167. await _logLoginBLL.SaveFormPartial(logLoginEntity);
  168. };
  169. AsyncTaskHelper.StartTask(taskAction);
  170. obj.Tag = userObj.Tag;
  171. obj.Message = userObj.Message;
  172. return Json(obj);
  173. }
  174. #endregion
  175. }
  176. }