637 lines
21 KiB
C#
637 lines
21 KiB
C#
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<HostModal> 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<AlarmService>();
|
||
}
|
||
|
||
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<AlarmSetting> AlarmList = AlarmSettingManager.LoadAll('B').Where(r => r.AppApply).ToList();
|
||
|
||
IList<AlarmService> Service = new List<AlarmService>();
|
||
|
||
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<HostModal> hostModals = HostModalManager.Load(host.ID, DeviceType.Light).Where(r => r.Modal.AppApply).ToList();
|
||
IList<HostModal> hostModals = HostModalManager.Load(host.ID, DeviceType.Relay).Where(r => r.Modal.AppApply).ToList();
|
||
|
||
IList<Light> lightList = new List<Light>();
|
||
|
||
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<HostModal> DimmerModals = HostModalManager.Load(host.ID, DeviceType.Dimmer).Where(r => r.Modal.AppApply).ToList();
|
||
|
||
IList<Light> DimmerLightList = new List<Light>();
|
||
|
||
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> hostAir = HostAirManager.LoadAll().Where(r => r.HostID == host.ID).ToList();
|
||
|
||
List<Air> list = new List<Air>();
|
||
|
||
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<CurtainModel>();
|
||
|
||
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<RoomTypeScene> 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<AppHotel> 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<HostModal> 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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换星期到中文+英文简写形式
|
||
/// </summary>
|
||
/// <param name="week"></param>
|
||
/// <returns></returns>
|
||
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
|
||
{
|
||
/// <summary>
|
||
/// 回路名称
|
||
/// </summary>
|
||
public string Name { get; set; }
|
||
/// <summary>
|
||
/// 回路地址
|
||
/// </summary>
|
||
public string ModalAddress { get; set; }
|
||
/// <summary>
|
||
/// 1开,2关
|
||
/// </summary>
|
||
public int Status { get; set; }
|
||
/// <summary>
|
||
/// 音量大小1~10
|
||
/// </summary>
|
||
public int Brightness { get; set; }
|
||
/// <summary>
|
||
/// 1播放,2暂停,3上一曲,4下一曲,5音量加,6音量减
|
||
/// </summary>
|
||
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; }
|
||
}
|
||
}
|