Files
Web_CRICS_Server_VS2010_Prod/WebSite/Controllers/AppController.cs
2025-12-11 09:17:16 +08:00

637 lines
21 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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; }
}
}