using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; using Domain; using Service; using WebSite.Models; using System.Web.Caching; namespace WebSite.Controllers { [HandleError] public class HomeController : BaseController { private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(HomeController)); private const int AuthorityID = 1001; public ISysUserManager SysUserManager { get; set; } public ISysAuthorityManager SysAuthorityManager { get; set; } public IHostManager HostManager { get; set; } public IGroupManager GroupManager { get; set; } public ISysActiveUserManager SysActiveUserManager { get; set; } public ISysSettingManager SysSettingManager { get; set; } public ISysRoleManager SysRoleManager { get; set; } public ISysHotelManager SysHotelManager { get; set; } public ISysHotelGroupManager SysHotelGroupManager { get; set; } #region Action [Authorize] public ActionResult Index() { //ViewData["Account"] = User.Identity.Name; return View("SimonIndex"); } [Authorize] public ActionResult MenuIndex() { //ViewData["Account"] = User.Identity.Name; return View("SimonIndex"); } private static IList GetSubMenu(IList roleAuthority, int parentID) { IList subMenu = new List(); IList Authories = roleAuthority.Where(r => r.ParentID == parentID).ToList(); for (int i = 0; i < Authories.Count; i++) { subMenu.Add(new Menu { Name = Authories[i].Name, Url = HttpUtility.UrlEncode(Authories[i].Url), Icon = Authories[i].Icon }); } return subMenu; } private void ResultMenu() { IList roleAuthority = new List(); SysUsers user = SysUserManager.LoadAll().FirstOrDefault(r => r.Account == this.User.Identity.Name); if (this.User.Identity.Name != "admin" && user.Role.Name != "超级管理员") { roleAuthority = SysRoleManager.GetAuthorities(user.Role); } else { roleAuthority = SysAuthorityManager.LoadAll().Where(r => r.ParentID != 0 && r.IsMenu && r.ActiveIndicator).OrderBy(o => o.Sort).ToList(); } //客房管理 ViewData["RoomManager"] = GetSubMenu(roleAuthority, 1); //参数设置 ViewData["Setting"] = GetSubMenu(roleAuthority, 2); //设备管理 ViewData["DeviceManager"] = GetSubMenu(roleAuthority, 3); //查询统计 ViewData["QueryStatistics"] = GetSubMenu(roleAuthority, 4); //系统管理 ViewData["SysMaintenance"] = GetSubMenu(roleAuthority, 5); } public ActionResult MenuMain() { ViewData["Account"] = this.User.Identity.Name; ResultMenu(); return View("MenuMain"); } /// ///选中语言触发事件引用方法 /// /// /// public ActionResult ChangeLanguage(string language) { switch (language.ToLower()) { case "en": Session["isCN"] = 1; break; case "zh-tw": Session["isCN"] = 2; break; default: Session["isCN"] = 0; break; } return Redirect("/");//Request.UrlReferrer.ToString()); } public ActionResult LogOn() { string result = ""; if (!Common.MyDes.Validate(ref result)) { ViewData["Msg"] = result; return View("License"); } if (Request.Cookies["Account"] != null) { ViewData["Account"] = HttpUtility.UrlDecode(Request.Cookies["Account"].Value); ViewData["RememberMe"] = true; } else { ViewData["Account"] = ""; ViewData["RememberMe"] = false; } ViewData["Language"] = Language; return View("SimonLogOn"); } [HttpGet] public ActionResult ActiveUsersView() { return View(); } /// /// 在线用户 /// /// [HttpPost] public ActionResult ActiveUsers() { var activeUsers = GetActiveUsers(); var footer = new List(); footer.Add(new { Account = "在线人数", LoginIP = activeUsers.Count }); footer.Add(new { Account = "用户总数", LoginIP = SysUserManager.GetCount() }); return Json(new { total = activeUsers.Count, rows = activeUsers, footer = footer }, JsonRequestBehavior.AllowGet); } public ActionResult LogOut() { Session.Clear(); //var activeUsers = GetActiveUsers(); //var activeUser = activeUsers.FirstOrDefault(r => r.ID == Session.SessionID); //if (activeUser != null) //{ // activeUsers.Remove(activeUser); //} FormsAuthentication.SignOut(); return Redirect("/LogOn/"); } public ActionResult LogOnByAndPassword(string account, string password, string code, bool rememberMe) { if (this.Session["ValidateCode"] == null || code != this.Session["ValidateCode"].ToString()) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("VerificationCodeErrorPleaseReEenter") }); } var entity = SysUserManager.Get(account, password); if (entity == null) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("UsernameOrPasswordWrong") }); } if (!entity.ActiveIndicator) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("YourAccountHasBeenDisabledPleaseContactTheAdministrator") }); } if (account.ToLower() != "admin") { if (entity.Hotels.Count == 0) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("UserNotSetHotel") }); } if (DateTime.Now > entity.Hotels[0].ValidateDate) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("CurrentHotelExpire") }); } } entity.LoginIP = GetClientIP(); SysUserManager.Update(entity); if (rememberMe) { HttpCookie accountCookie = new HttpCookie("Account"); accountCookie.Value = HttpUtility.UrlEncode(entity.Account); accountCookie.Expires = DateTime.Now.AddYears(1); Response.Cookies.Add(accountCookie); } else { Response.Cookies["Account"].Value = ""; } Session["CurrentHotelID"] = 0; FormsAuthentication.SetAuthCookie(entity.Account, false);//保存当前用户 Session["Account"] = entity.Account; //var activeUsers = GetActiveUsers(); //if (activeUsers.FirstOrDefault(r => r.ID == Session.SessionID) == null) //{ // activeUsers.Add(new ActiveUserModel { ID = Session.SessionID, Account = entity.Account, LoginIP = entity.LoginIP }); //} //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("Login"), account); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("LoginSuccessful") }); } //public ActionResult LoginInfo() //{ // SysUsers user = SysUserManager.Get(User.Identity.Name); // if (null == user || user.Hotels.Count == 0) // { // return LogOut(); // } // if (User.Identity.Name.ToLower() == "admin") // { // user.Hotels = SysHotelManager.LoadAll(); // } // var curHotel = user.Hotels[0].Code + "-" + ReturnNameByLanguage(user.Hotels[0].Name, user.Hotels[0].EName, user.Hotels[0].TWName);//SysHotelGroupManager.BuildGroupName(user.Hotels[0].SysHotelGroup) + // foreach (SysHotel hotel in user.Hotels) // { // if (hotel.ID == CurrentHotelID) // { // curHotel = hotel.Code + "-" + ReturnNameByLanguage(hotel.Name, hotel.EName, hotel.TWName);//SysHotelGroupManager.BuildGroupName(hotel.SysHotelGroup) + // break; // } // } // return Json(new { IsSuccess = true, User = new { Account = user.Account, Hotel = curHotel } }, JsonRequestBehavior.AllowGet);//Role = user.Role.Name, //} /// /// 获取有权限菜单和酒店 /// /// [Authorize] public ActionResult LoadMenu() { try { IList authorities = new List();//用户所拥有权限 SysHotel hotel = new SysHotel(); switch (User.Identity.Name.ToLower()) { case "admin": case "leo": case "blw": authorities = SysAuthorityManager.LoadAll().Where(r => r.IsMenu && r.ActiveIndicator).ToList(); hotel = SysHotelManager.LoadAll().OrderBy(o => o.Sort).FirstOrDefault(); break; default: SysUsers user = this.SysUserManager.Get(User.Identity.Name); hotel = user.Hotels.OrderBy(o => o.Sort).FirstOrDefault(); IList firstMenus = SysAuthorityManager.LoadAll().Where(r => r.ParentID == 1000).ToList();//获取后台一级菜单 foreach (var authority in user.Role.Authorities) { if (!authorities.Contains(authority)) { authorities.Add(authority); var firstMenu = firstMenus.Where(r => r.ID == authority.ParentID).FirstOrDefault();//判断其上级菜单是否存在,如果不存在,则添加进来 if (firstMenu != null)// && !authorities.Contains(firstMenu) && !user.Role.Authorities.Contains(firstMenu)) { bool isExit = false; foreach (var exitAuthority in authorities) { if (exitAuthority.ID == firstMenu.ID) { isExit = true; break; } } if (!isExit) { authorities.Add(firstMenu); } } } } break; } IList menuTree = BuildMenu(authorities, 1000);//获取后台菜单权限 if (CurrentHotelID == 0) { CurrentHotelID = hotel.ID;//缓存当前酒店ID CurrentHotelCode = hotel.Code; CurrentHotelName = hotel.Code + "-" + ReturnNameByLanguage(hotel.Name, hotel.EName, hotel.TWName); CurrentLogoPath = hotel.LogoPath; CurrentHotelIsExpire = DateTime.Now.AddMonths(1) > hotel.ValidateDate ? true : false; } return Json(new { MenuData = menuTree, HotelName = CurrentHotelName, LogoPath = CurrentLogoPath, IsExpire = CurrentHotelIsExpire }); } catch (Exception ex) { logger.Error(ex.ToString()); return Json(ex.Message); } } /// /// 缓存当前酒店ID /// /// /// [Authorize] public ActionResult GetCurrentHotel(string query, int? groupId) { string key = "GetCurrentHotel_" + query + "_" + groupId.ToString(); object data = HttpContext.Cache.Get(key); if (data != null) { return Json(new { total = 3000, rows = data }, JsonRequestBehavior.AllowGet); } else { IList hotels = new List(); switch (User.Identity.Name.ToLower()) { case "admin": case "leo": case "blw": hotels = SysHotelManager.LoadAll().Where(r => !r.IsDeleted).ToList(); break; default: hotels = SysHotelManager.LoadAll().Where(r => r.IsApprove && !r.IsDeleted).ToList();//装载已审核的酒店 break; } if (groupId.HasValue && groupId != 1)//过滤分组 { hotels = hotels.Where(r => r.SysHotelGroup.ID == groupId || (r.SysHotelGroup.Parent != null && r.SysHotelGroup.Parent.ID == groupId) || (r.SysHotelGroup.Parent != null && r.SysHotelGroup.Parent.Parent != null && r.SysHotelGroup.Parent.Parent.ID == groupId)).ToList(); } if (!string.IsNullOrEmpty(query)) { hotels = hotels.Where(r => r.Code.Contains(query) || r.Name.Contains(query)).ToList(); } hotels = hotels.OrderByDescending(o => o.ID).ThenBy(o => o.SysHotelGroup.Sort).ToList(); var hotelData = hotels.Select(r => new { r.ID, r.Code, GroupName = SysHotelGroupManager.BuildGroupName(r.SysHotelGroup), Name = ReturnNameByLanguage(r.Name, r.EName, r.TWName) }).ToList(); HttpContext.Cache.Add(key, hotelData, null, DateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, null); return Json(new { total = hotels.Count, rows = hotelData }, JsonRequestBehavior.AllowGet); } } /// /// 缓存当前酒店ID /// /// /// [Authorize] public ActionResult SetCurrentHotel(int hotelID) { CurrentHotelID = hotelID;//缓存当前酒店ID var curHotel = SysHotelManager.Get(hotelID); CurrentHotelName = curHotel.Code + "-" + ReturnNameByLanguage(curHotel.Name, curHotel.EName, curHotel.TWName); CurrentLogoPath = curHotel.LogoPath; CurrentHotelIsExpire = DateTime.Now.AddMonths(1) > curHotel.ValidateDate ? true : false; return Json(new { IsSuccess = true }, JsonRequestBehavior.AllowGet); } [Authorize] public ActionResult ChangedPassword(string password, string oldPassword) { SysUsers userEntity = this.SysUserManager.Get(this.User.Identity.Name, oldPassword); if (userEntity == null) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OldPasswordIsIncorrectPleaseReEnter") }, "text/x-json", JsonRequestBehavior.AllowGet); } this.SysUserManager.Update(userEntity, password); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("ChangePassword"), userEntity.Account); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("PasswordChangeSuccessful") }, "text/x-json", JsonRequestBehavior.AllowGet); } public ActionResult ValidateCode() { var code = Common.Tools.CreateValidateNumber(4); this.Session["ValidateCode"] = code; return File(Common.Tools.CreateValidateGraphic(code), "image/jpeg"); } public ActionResult GetMachineCode() { var code = Common.Tools.GetMachineCode(); return Json(new { IsSuccess = true, Message = code }); } /// /// 导入授权文件 /// /// public ActionResult UploadLicense() { try { HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files; if (hfc.Count < 1 || hfc[0].ContentLength <= 0 || String.IsNullOrEmpty(hfc[0].FileName)) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("PleaseSelectAuthorizationFile") }); } string file = Common.MyDes.GetLicensePath(); string path = Path.GetDirectoryName(file); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } hfc[0].SaveAs(file); string result = ""; if (!Common.MyDes.ImportValidate(hfc[0].InputStream, ref result)) { System.IO.File.Delete(file); return Json(new { IsSuccess = false, Message = result }); } return Json(new { IsSuccess = true }); } catch (Exception ex) { if (logger.IsErrorEnabled) { logger.Error(ex); } return Json(new { IsSuccess = false, Message = ex.Message }); } } public ActionResult ProductInfo() { string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); version = version.Substring(0, version.LastIndexOf(".")); Common.License license = Common.MyDes.GetLicense(); SysHotel hotel = SysHotelManager.Get(CurrentHotelID); string expires = hotel.ValidateDate.ToString("yyyy.MM.dd"); //license.EndDate.ToString("yyyy.MM.dd"); if (hotel.ValidateDate >= new DateTime(2037, 12, 31))//license.EndDate { expires = HttpContext.InnerLanguage("UnlimitedDuration"); } else if (DateTime.Now.AddMonths(1) > hotel.ValidateDate) { expires = string.Format("{0}", expires); } var result = new { Version = version, SerialNumber = license.SN, Limit = license.Limit, Expires = expires, CurrentHotel = ReturnNameByLanguage(hotel.Name, hotel.EName, hotel.TWName) }; return Json(new { IsSuccess = true, Data = result }); } public ActionResult SaveSystemConfig(string jsonData) { try { var sysConfig = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonData); var sysSetting = SysSettingManager.Get("MessageIP"); if (sysSetting != null) { sysSetting.Value = sysConfig.MessageIP; SysSettingManager.Update(sysSetting); } sysSetting = SysSettingManager.Get("MessagePort"); if (sysSetting != null) { sysSetting.Value = sysConfig.MessagePort.ToString(); SysSettingManager.Update(sysSetting); } return Json(new { IsSuccess = true, Message = "保存成功。" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } } #endregion #region Private Methods /// /// 构造菜单用于easyui-tree /// /// /// /// private IList BuildMenuForEasyUITree(IList authorities, int parentId) { IList menuTree = new List(); IList subAuthorities = authorities.Where(r => r.ParentID == parentId).OrderBy(o => o.Sort).ToList(); foreach (SysAuthority authority in subAuthorities) { IList children = BuildMenuForEasyUITree(authorities, authority.ID); if (authority.ActiveIndicator && authority.IsMenu) { if (children.Count != 0) { menuTree.Add(new { text = authority.Name, iconCls = authority.Icon, url = authority.Url, children = children }); } else { menuTree.Add(new { text = authority.Name, iconCls = authority.Icon, url = authority.Url }); } } } return menuTree; } /// /// 构造菜单 /// /// /// /// private IList BuildMenu(IList authorities, int parentId) { IList menuTree = new List(); IList subAuthorities = authorities.Where(r => r.ParentID == parentId).OrderBy(o => o.Sort).ToList(); foreach (SysAuthority authority in subAuthorities) { IList children = BuildMenu(authorities, authority.ID); if (authority.ActiveIndicator && authority.IsMenu) { if (children.Count != 0) { menuTree.Add(new { Name = ReturnNameByLanguage(authority.Name, authority.EName, authority.TWName), Icon = authority.Icon, Url = authority.Url, Items = children }); } else { menuTree.Add(new { Name = ReturnNameByLanguage(authority.Name, authority.EName, authority.TWName), Icon = authority.Icon, Url = authority.Url }); } } } return menuTree; } private IList GetActiveUsers() { var activeUsers = HttpContext.Application["ActiveUsers"] as List; if (activeUsers == null) { activeUsers = new List(); HttpContext.Application.Lock(); HttpContext.Application["ActiveUsers"] = activeUsers; HttpContext.Application.UnLock(); } return activeUsers; } #endregion } /// /// 菜单类 /// public class Menu { public string Url { get; set; } public string Name { get; set; } public string Icon { get; set; } } }