using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.Mvc; using Domain; using Service; using WebSite.Models; namespace WebSite.Controllers { public class AppController : BaseController { #region Properties public IHostManager HostManager { get; set; } public IHostModalManager HostModalManager { get; set; } public IHostAirManager HostAirManager { get; set; } public IRoomServiceManager RoomServiceManager { get; set; } public IRoomTypeSceneManager RoomTypeSceneManager { get; set; } public ILightControlManager LightControlManager { get; set; } public IAppRoomManager AppRoomManager { get; set; } public IAppHotelManager AppHotelManager { get; set; } public IAppMenuManager AppMenuManager { get; set; } public ITvControlManager TvControlManager { get; set; } public IRoomTypeModalManager RoomTypeModalManager { get; set; } public IAlarmSettingManager AlarmSettingManager { get; set; } #endregion public ActionResult Login(string mac) { if (!Regex.IsMatch(mac, @"^([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})$") && !Regex.IsMatch(mac, @"^\d{6}$")) { return Json(new { IsSuccess = false, Result = "房号未知,请联系管理员。" }, JsonRequestBehavior.AllowGet); } AppRoom appRoom = AppRoomManager.GetRoomNumber(mac); if (appRoom == null) { appRoom = new AppRoom(); appRoom.MAC = mac; appRoom.RoomNumber = ""; AppRoomManager.Save(appRoom); return Json(new { IsSuccess = false, Result = "房号未知,请联系管理员。" }, JsonRequestBehavior.AllowGet); } if (!String.IsNullOrEmpty(appRoom.RoomNumber)) { return Json(new { IsSuccess = true, Result = appRoom.RoomNumber }, JsonRequestBehavior.AllowGet); } return Json(new { IsSuccess = false, Result = "房号未知,请联系管理员。" }, JsonRequestBehavior.AllowGet); } public ActionResult Index(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host != null) { ViewData["RoomNumber"] = host.RoomNumber; //ViewData["CurrentTemp"] = host.CurrentTemp; IList hostModals = HostModalManager.LoadByHostID(host.ID); var list = HostAirManager.LoadAll().Where(r => r.HostID == host.ID).Take(1).Select(r => r.CurrentTemp).ToList(); if (list.Count() > 0) { ViewData["Temp"] = list[0]; } } else { ViewData["RoomNumber"] = ""; ViewData["CurrentTemp"] = ""; ViewData["Temp"] = 0; ViewData["AlarmList"] = new List(); } var AppMenus = AppMenuManager.LoadAll().Where(r => r.ActiveIndicator == true).OrderBy(r => r.Sort).ToList(); ViewData["AppMenuControl"] = AppMenus; ViewData["Date"] = DateTime.Now.ToString("dd/MM"); ViewData["Week"] = GetWeek(DateTime.Now.DayOfWeek); return View(); } public ActionResult LoadAlarm(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); IList AlarmList = AlarmSettingManager.LoadAll('B').Where(r => r.AppApply).ToList(); IList Service = new List(); bool isCN = (Request.Cookies["isCN"].Value == "zh-cn"); for (int i = 0; i < AlarmList.Count; i++) { AlarmService alarmService = new AlarmService(); alarmService.Status = RoomServiceManager.Get(host.ID, AlarmList[i].Code).Status; alarmService.Name = isCN ? AlarmList[i].Name : AlarmList[i].EName; alarmService.Code = AlarmList[i].Code; Service.Add(alarmService); } return Json(Service); } public ActionResult Validate(string roomNumber) { if (String.IsNullOrEmpty(roomNumber)) { return Content("房号不能为空。"); } Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { return Content("无效的房号。"); } return Content(String.Empty); } [HttpPost] public ActionResult ServiceControl(string roomNumber, string groupAddress, int status) { try { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号!"); } if (String.IsNullOrEmpty(groupAddress)) { throw new ApplicationException("无效的服务编号!"); } RoomServiceManager.SetService(host, groupAddress, status); return Json(new { IsSuccess = true }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } } public ActionResult LightControl(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); //IList hostModals = HostModalManager.Load(host.ID, DeviceType.Light).Where(r => r.Modal.AppApply).ToList(); IList hostModals = HostModalManager.Load(host.ID, DeviceType.Relay).Where(r => r.Modal.AppApply).ToList(); IList lightList = new List(); bool isCN = (Request.Cookies["isCN"].Value == "zh-cn"); foreach (HostModal modal in hostModals) { Light light = new Light { Name = isCN ? modal.Modal.Name : modal.Modal.EnglishName, ModalAddress = modal.Modal.ModalAddress, Status = modal.Status }; lightList.Add(light); } ViewData["LightList"] = lightList; return View(); } public ActionResult LoadLightDimmer(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); IList DimmerModals = HostModalManager.Load(host.ID, DeviceType.Dimmer).Where(r => r.Modal.AppApply).ToList(); IList DimmerLightList = new List(); bool isCN = (Request.Cookies["isCN"].Value == "zh-cn"); foreach (HostModal modal in DimmerModals) { Light light = new Light { Name = isCN ? modal.Modal.Name : modal.Modal.EnglishName, ModalAddress = modal.Modal.ModalAddress, Status = modal.Brightness }; DimmerLightList.Add(light); } return Json(DimmerLightList); } [HttpPost] public ActionResult LightControl(string roomNumber, string groupAddress, int status) { try { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } var hostModal = HostModalManager.GetByModalAddress(host.ID, groupAddress); if (hostModal == null) { throw new ApplicationException("无效的灯光。"); } HostModalManager.SetDevice(host, hostModal, (status == 1 ? 1 : 2), status); return Json(new { IsSuccess = true }); } catch (Exception ex) { return Json(new { IsSuccess = true, Message = ex.Message }); } } public ActionResult Television(string roomNumber) { var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } return View(); } [HttpPost] public ActionResult Television(string roomNumber, TvKey key) { try { var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } TvControlManager.SendKey(host, key); return Json(new { IsSuccess = true, Message = "操作成功。" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } } public ActionResult LoadAirCondition(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } List hostAir = HostAirManager.LoadAll().Where(r => r.HostID == host.ID).ToList(); List list = new List(); bool isCN = (Request.Cookies["isCN"].Value == "zh-cn"); foreach (HostAir item in hostAir) { Air air = new Air { HostID = item.HostID, Name = isCN ? item.Modal.CustomerName : item.Modal.EnglishName, RoomTypeAirID = item.Modal.ModalType.ID }; list.Add(air); } return Json(list); } [HttpPost] public ActionResult LoadAirSetting(int hostId, int airId) { HostAir hostAir = HostAirManager.GetByModalTypeID(hostId, airId); object air = new { Running = hostAir.OnOff, SettingTemp = hostAir.SettingTemp, Speed = hostAir.Speed, HightTemp = hostAir.HightTemp, LowerTemp = hostAir.LowerTemp, Mode = hostAir.Mode }; return Json(air); } public ActionResult AirConditionControl(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } return View(); } [HttpPost] public ActionResult AirConditionControl(string roomNumber, int hostId, int airId, AirProperty property, int status) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } if (host != null) { HostAirManager.SetAirProperty(host, airId, property, status); } return Json(new { IsSuccess = true }); } public ActionResult LoadCurtain(string roomNumber, DeviceType deviceType) { try { var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException(HttpContext.InnerLanguage("InvalidRoomNumber")); } var hostModals = HostModalManager.Load(host.ID, deviceType).OrderBy(r => r.Modal.Sort).ToList(); if (hostModals.Count % 2 != 0) { throw new ApplicationException(HttpContext.InnerLanguage("CurtainConfigNotCorrect")); } var curtainList = new List(); var num = hostModals.Count / 2; for (int i = 0; i < num; i++) { var curtain = CreateCurtainModel(hostModals.Skip(i * 2).Take(2).ToList()); if (curtain.CurtainOpen == null || curtain.CurtainClose == null) { throw new ApplicationException(HttpContext.InnerLanguage("CurtainConfigNotCorrect")); } curtainList.Add(curtain); } return Json(new { IsSuccess = true, Data = curtainList }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } } public ActionResult CurtainControl(string roomNumber) { var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } return View(); } [HttpPost] public ActionResult CurtainControl(string roomNumber, string groupAddress, int status) { try { var host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null) { throw new ApplicationException("无效的房号。"); } HostModalManager.UpdateHostModalStatus(host, groupAddress, status); return Json(new { IsSuccess = true, Message = "操作成功。" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } } public ActionResult Scene(string roomNumber) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); List list = RoomTypeSceneManager.LoadAll().Where(r => r.RoomType.ID == host.RoomType.ID).OrderBy(r => r.Sort).ToList(); ViewData["AppSceneControl"] = list; return View(); } [HttpPost] public ActionResult Scene(string roomNumber, int sceneID) { Host host = HostManager.GetByRoomNumber(roomNumber, CurrentHotelID); if (host == null && sceneID < 1) { return Json(new { IsSuccess = false, Message = "无效的房号。" }); } var scene = RoomTypeSceneManager.Get(sceneID); if (scene == null) { return Json(new { IsSuccess = false, Message = "无效的场景。" }); } LightControlManager.ApplyScene(host, scene); return Json(new { IsSuccess = true, Message = "设置场景成功!" }); } public ActionResult SystemSetting() { return View(); } public ActionResult HotelIntroduction() { IList result = AppHotelManager.LoadAll().ToList(); bool isCN = (Request.Cookies["isCN"].Value == "zh-cn"); foreach (AppHotel appHotel in result) { if (!isCN) { if (appHotel.Code == "H03") { ViewData["HoteName"] = appHotel.Value; } else if (appHotel.Code == "H04") { ViewData["Introduction"] = appHotel.Value; } } else { if (appHotel.Code == "H01") { ViewData["HoteName"] = appHotel.Value; } else if (appHotel.Code == "H02") { ViewData["Introduction"] = appHotel.Value; } } } return View(); } public ActionResult About() { string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); version = version.Substring(0, version.LastIndexOf(".")); ViewData["Version"] = version; return View(); } #region Private Methods private CurtainModel CreateCurtainModel(IList hostModals) { var curtain = new CurtainModel(); //bool isCN = (Request.Cookies["isCN"].Value == "zh-cn"); //if (hostModals.Count >= 2) //{ // var curtainOpenModal = hostModals.FirstOrDefault(r => r.Modal != null && // r.Modal.Subtype.HasValue && // (r.Modal.Subtype.Value == DeviceSubtype.CurtainOpen || // r.Modal.Subtype.Value == DeviceSubtype.GauzeOpen)); // if (curtainOpenModal != null) // { // curtain.CurtainOpen = new CurtainOpenCloseModel // { // Address = curtainOpenModal.Modal.ModalAddress, // Name = isCN ? curtainOpenModal.Modal.Name : curtainOpenModal.Modal.EnglishName, // Subtype = curtainOpenModal.Modal.Subtype.Value, // Status = curtainOpenModal.Status // }; // } // var closeSubtype = curtain.CurtainOpen.Subtype == DeviceSubtype.CurtainOpen ? DeviceSubtype.CurtainClose : DeviceSubtype.GauzeClose; // var curtainCloseModal = hostModals.FirstOrDefault(r => r.Modal != null && r.Modal.Subtype.HasValue && r.Modal.Subtype.Value == closeSubtype); // if (curtainCloseModal != null) // { // curtain.CurtainClose = new CurtainOpenCloseModel // { // Address = curtainCloseModal.Modal.ModalAddress, // Name = isCN ? curtainCloseModal.Modal.Name : curtainCloseModal.Modal.EnglishName, // Subtype = curtainCloseModal.Modal.Subtype.Value // }; // } //} return curtain; } /// /// 转换星期到中文+英文简写形式 /// /// /// private string GetWeek(DayOfWeek week) { switch (week) { case DayOfWeek.Monday: return "Mon."; case DayOfWeek.Tuesday: return "Tues."; case DayOfWeek.Wednesday: return "Wed."; case DayOfWeek.Thursday: return "Thur."; case DayOfWeek.Friday: return "Fri."; case DayOfWeek.Saturday: return "Sat."; case DayOfWeek.Sunday: return "Sun."; default: return ""; } } #endregion } public class Air { public string Name { get; set; } public string ModalAddress { get; set; } public int HostID { get; set; } public int RoomTypeAirID { get; set; } public int Status { get; set; }//空调开关状态,2/关,1/开 public int CurrentTemp { get; set; } public int SettingTemp { get; set; } public int Mode { get; set; } public int FanSpeed { get; set; } public int Valve { get; set; } } public class Curtain { public string ModalAddress { get; set; } public string Name { get; set; } public int Status { get; set; } } public class Music { /// /// 回路名称 /// public string Name { get; set; } /// /// 回路地址 /// public string ModalAddress { get; set; } /// /// 1开,2关 /// public int Status { get; set; } /// /// 音量大小1~10 /// public int Brightness { get; set; } /// /// 1播放,2暂停,3上一曲,4下一曲,5音量加,6音量减 /// public int Mode { get; set; } } public class Light { public string ModalAddress { get; set; } public string Name { get; set; } public int Status { get; set; } public int Brightness { get; set; } } public class AlarmService { public string Code { get; set; } public string Name { get; set; } public bool Status { get; set; } } }