using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Data; using Service; using Domain; using WebSite.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Converters; using System.Diagnostics; using System.Text; using System.Net; using System.IO; using System.Threading.Tasks; using CommonEntity; using Common; using RestSharp; using System.Configuration; using RCUHost.Implement; using Jose; using System.Web.Caching; using System.Collections.Concurrent; using System.Threading; using RCUHost; using uPLibrary.Networking.M2Mqtt.Messages; namespace WebSite.Controllers { public class ApiController : BaseController { private static long hostBaseCount = Convert.ToInt64(System.Configuration.ConfigurationManager.AppSettings["host_base_count"]); private const int AuthorityID = 13; private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(ApiController)); public IHostManager HostManager { get; set; } //阿宝添加的 public IHostUpdateStatusManager HostUpdateStatusManager { get; set; } public ISysHotelManager SysHotelManager { get; set; } public ISysHotelGroupManager SysHotelGroupManager { get; set; } public IPowerSupplyControlManager PowerSupplyControlManager { get; set; } public IHostAirManager HostAirManager { get; set; } public IRoomTypeSceneManager RoomTypeSceneManager { get; set; } public ILightControlManager LightControlManager { get; set; } public IHostModalManager HostModalManager { get; set; } public IRoomServiceManager RoomServiceManager { get; set; } public IAlarmSettingManager AlarmSettingManager { get; set; } public IHostModalRecordManager HostModalRecordManager { get; set; } public IRoomTypeWXMenusManager RoomTypeWXMenusManager { get; set; } public ISysOauth2Manager SysOauth2Manager { get; set; } public IRoomTypeManager RoomTypeManager { get; set; } public ISysProvinceManager SysProvinceManager { get; set; } public IOverviewManager OverviewManager { get; set; } public ISysUserManager SysUserManager { get; set; } public IHostFaultsManager HostFaultsManager { get; set; } public IRoomTypeModalManager RoomTypeModalManager { get; set; } public IRoomCardManager RoomCardManagerTest { get; set; } public IGroupManager GroupManager { get; set; } public IRoomModalManager RoomModalManager { get; set; } //新添加的 public IRoomStatusManager RoomStatusManager { get; set; } public IDeviceControlReceiver DeviceControlReceiver { get; set; } private string msg = ""; private int hotelID = 0; public ActionResult Index() { return View(); } /// /// 验证酒店ID和房号 /// /// /// /// /// /// private Host CheckRoomNumber(string code, string creatDate, ref string msg, ref int hotelID, string roomNumber = "") { SysHotel sysHotel = SysHotelManager.GetByCode(code, Convert.ToDateTime(creatDate)); if (sysHotel == null) { msg = "酒店未知"; hotelID = 0; return null; } hotelID = sysHotel.ID; if (!string.IsNullOrEmpty(roomNumber)) { Host host = HostManager.GetByRoomNumber(roomNumber, sysHotel.ID); if (host == null) { msg = "房号[" + roomNumber + "]不存在"; return null; } if (!Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { msg = "房号[" + roomNumber + "]网络异常"; return null; } return host; } return null; } /// /// 如果存在取电服务记录,且不是打开状态,则返回false,不可控制设备(除了空调),不存在取电服务,可以控制 /// /// /// private bool CheckGetPower(Host host) { if (!host.SysHotel.IsVoincePowerOn) { return true;//不需要取电服务打开即可控制 } string HostNumberOnly = host.HostNumber; string Key = CacheKey.HostInfo_Key_HostNumber + "_" + HostNumberOnly; object FFK = MemoryCacheHelper.Get(Key); if (FFK != null) { Host NNN = FFK as Host; if (NNN.RoomCard != null) { return true;//已插卡即可控制 } } else { if (host.RoomCard != null) { return true;//已插卡即可控制 } } string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000001"; var obj = CSRedisCacheHelper.Get_Partition(KKey); if (obj != null) { HostModal_Cache hhh = obj as HostModal_Cache; if (hhh.Status != 1) { return false; } } return true; } public static readonly string mqtt_topic = "blw/webapi/report"; #region 提供api给第三方平台对接 /// /// 获取主机状态(如果指定房号roomNumber参数,则提供入住人信息) /// /// /// public ActionResult GetRCUStatus(string jsonData) { try { WebApiInvoke_FenXi("GetRCUStatus"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string code = jData["code"].ToString(); string room_number = jData["roomNumber"].ToString(); if (string.IsNullOrEmpty(code) || string.IsNullOrEmpty(room_number)) { return Json(new { IsSuccess = "酒店编码或者房间号不能为空", Result = msg }, JsonRequestBehavior.AllowGet); } string IP = ""; string PPP = Request.UserHostAddress; string III = Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrEmpty(III)) { IP = PPP; } else { IP = III; } string KKK = "GetRCUStatus_" + IP + "_" + code + "_" + room_number; object ooo = MemoryCacheHelper.Get(KKK); if (ooo != null) { DateTime dt = DateTime.Parse(ooo.ToString()); TimeSpan span = DateTime.Now - dt; if (span.TotalSeconds <= 15) { return Json(new { IsSuccess = true, Result = "wait for a moment" }, JsonRequestBehavior.AllowGet); } else { string start_timeddd = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); MemoryCacheHelper.Set(KKK, start_timeddd); } } else { string start_timeddd = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); MemoryCacheHelper.Set(KKK, start_timeddd); } } catch (Exception) { } string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); //return Json(new { IsSuccess = false, Result = "接口地址改用(https://boonlive-rcu.com/api/GetRCUStatus)" }, JsonRequestBehavior.AllowGet); //System.Threading.Thread.Sleep(100); //if (!Common.RateLimiter.TryRequest()) //{ // return Json(new { IsSuccess = false, Result = "Too Many Requests" }, JsonRequestBehavior.AllowGet); //} try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } if (jData["roomNumber"] == null || string.IsNullOrEmpty(jData["roomNumber"].ToString())) { return Json(new { IsSuccess = false, Result = "roomNumber房号参数不能为空" }, JsonRequestBehavior.AllowGet); } string roomNumber = jData["roomNumber"].ToString(); //logger.Error(string.Format("api获取酒店{0}主机{1}状态列表,来自{2}", jData["code"].ToString(), roomNumber, GetClientIP())); List roomModels = new List(); IList hosts = null; string Key = CacheKey.WebAPIGetRCUStatus + "_" + hotelID + "_" + roomNumber; object obj = MemoryCacheHelper.Get(Key); if (obj != null) { hosts = obj as IList; } else { hosts = HostManager.LoadAll(hotelID, roomNumber).ToList();//OrderBy(r => r.RoomNumber). MemoryCacheHelper.SlideSet(Key, hosts); } foreach (Host host in hosts) { RoomModel roomModel = new RoomModel(); roomModel.ID = host.ID; roomModel.HostStatus = host.Status;//主机状态:0离线,1在线 roomModel.RoomNumber = host.RoomNumber;//房号 if (host.RoomStatus != null) { roomModel.RoomStatus = (Language == Language.CN ? host.RoomStatus.Name : host.RoomStatus.EName); } roomModel.RoomStatus += host.DoorLockStatus ? "(" + HttpContext.InnerLanguage("DoorOpen") + ")" : "(" + HttpContext.InnerLanguage("DoorClose") + ")";//房态和房门状态 roomModel.Identity = (host.RoomCard != null && host.RoomCard.RoomCardType != null) ? (Language == Language.CN ? host.RoomCard.RoomCardType.Name : host.RoomCard.RoomCardType.EName) : HttpContext.InnerLanguage("Nobody");//身份 roomModel.IsConnectingRoom = false;//host.IsConnectingRoom;//是否连通房 string k2 = CacheKey.PowerSupply + "_" + host.HostNumber; bool b = CSRedisCacheHelper.ForeverGet(k2); roomModel.PowerSupply = b;//电源状态 string KeyKey = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber; object objobj = MemoryCacheHelper.Get(KeyKey); Host HHH = objobj as Host; if (HHH != null) { string host_number = host.HostNumber; string mac = host.MAC; bool is_online = CSRedisCacheHelper.Contains(host_number, mac); roomModel.HostStatus = is_online;//主机状态:0离线,1在线 string kk2 = CacheKey.PowerSupply + "_" + host.HostNumber; bool bb = CSRedisCacheHelper.ForeverGet(k2); roomModel.PowerSupply = bb;//电源状态 #region 暂时丢掉 //roomModel.HostStatus = host.Status;//主机状态:0离线,1在线 //roomModel.RoomNumber = host.RoomNumber;//房号 //if (host.RoomStatus != null) //{ // roomModel.RoomStatus = (Language == Language.CN ? host.RoomStatus.Name : host.RoomStatus.EName); //} //roomModel.RoomStatus += host.DoorLockStatus ? "(" + HttpContext.InnerLanguage("DoorOpen") + ")" : "(" + HttpContext.InnerLanguage("DoorClose") + ")";//房态和房门状态 //roomModel.Identity = (host.RoomCard != null && host.RoomCard.RoomCardType != null) ? (Language == Language.CN ? host.RoomCard.RoomCardType.Name : host.RoomCard.RoomCardType.EName) : HttpContext.InnerLanguage("Nobody");//身份 //roomModel.IsConnectingRoom = false;//host.IsConnectingRoom;//是否连通房 //roomModel.PowerSupply = host.PowerSupply;//电源状态 ////空调信息 //HostModal hostModal = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.ActiveIndicator).OrderBy(r => r.Modal.Sort).FirstOrDefault(); //if (hostModal != null) //{ // roomModel.AirID = hostModal.Modal.ID; // roomModel.AirStatus = hostModal.Status; // roomModel.ModalAddress = hostModal.Modal.ModalAddress; // roomModel.RoomTemp = hostModal.CurrentTemp; // roomModel.SettingTemp = hostModal.SettingTemp; // roomModel.Mode = hostModal.Mode; // roomModel.FanSpeed = hostModal.FanSpeed; // roomModel.Valve = (int)hostModal.Valve; // roomModel.ValveName = hostModal.Valve == 1 ? HttpContext.InnerLanguage("On") : HttpContext.InnerLanguage("Off");//阀门 //} //else //{ // roomModel.AirID = 0; // roomModel.AirStatus = 2; // roomModel.ModalAddress = ""; // roomModel.RoomTemp = 0; // roomModel.SettingTemp = 0; // roomModel.Mode = 0; // roomModel.FanSpeed = 0; // roomModel.Valve = 0; // roomModel.ValveName = HttpContext.InnerLanguage("Off");//阀门 //} ////指定服务信息 //var services = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator && r.Status == 1).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID); //roomModel.SOS = GetService(services, "004000008"); //roomModel.DND = GetService(services, "004000002"); //roomModel.Clean = GetService(services, "004000003"); //roomModel.Checkout = GetService(services, "004000006"); #endregion } //空调信息 HostModal KongTiaoInfoTake = null; string KongInfo = "KongTiaoInfo_" + host.ID; var OOjb = MemoryCacheHelper.Get(KongInfo); if (OOjb != null) { KongTiaoInfoTake = (HostModal)OOjb; } else { KongTiaoInfoTake = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.ActiveIndicator).OrderBy(r => r.Modal.Sort).FirstOrDefault(); MemoryCacheHelper.Set(KongInfo, KongTiaoInfoTake); } string KKey = ""; if (KongTiaoInfoTake != null) { KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + KongTiaoInfoTake.Modal.ModalAddress; } else { KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_007001000"; } var hostModal = CSRedisCacheHelper.Get_Partition(KKey); if (hostModal != null) { roomModel.AirID = hostModal.Modal.ID; roomModel.AirStatus = hostModal.Status; roomModel.ModalAddress = hostModal.Modal.ModalAddress; roomModel.RoomTemp = hostModal.AirConditionData.CurrentTemp; roomModel.SettingTemp = hostModal.AirConditionData.SettingTemp; roomModel.Mode = hostModal.AirConditionData.Mode; roomModel.FanSpeed = hostModal.AirConditionData.FanSpeed; roomModel.Valve = (int)hostModal.AirConditionData.Valve; roomModel.ValveName = hostModal.AirConditionData.Valve == 1 ? HttpContext.InnerLanguage("On") : HttpContext.InnerLanguage("Off");//阀门 } else { roomModel.AirID = 0; roomModel.AirStatus = 2; roomModel.ModalAddress = ""; roomModel.RoomTemp = 0; roomModel.SettingTemp = 0; roomModel.Mode = 0; roomModel.FanSpeed = 0; roomModel.Valve = 0; roomModel.ValveName = HttpContext.InnerLanguage("Off");//阀门 } IList services = null; //指定服务信息 string ServicesKey = "Services_" + host.ID; object ooo = MemoryCacheHelper.Get(ServicesKey); if (ooo != null) { services = ooo as IList; } else { //services = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator && r.Status == 1).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID); services = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID); MemoryCacheHelper.SlideSet(ServicesKey, services); } string SOSKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000008"; string DNDKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000002"; string CleanKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000003"; string CheckOutKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000006"; var hostModal1 = CSRedisCacheHelper.Get_Partition(SOSKey); var hostModal2 = CSRedisCacheHelper.Get_Partition(DNDKey); var hostModal3 = CSRedisCacheHelper.Get_Partition(CleanKey); var hostModal4 = CSRedisCacheHelper.Get_Partition(CheckOutKey); roomModel.SOS = GetService(services, "004000008"); roomModel.DND = GetService(services, "004000002"); roomModel.Clean = GetService(services, "004000003"); roomModel.Checkout = GetService(services, "004000006"); if (hostModal1 != null) { roomModel.SOS.Status = hostModal1.Status; } if (hostModal2 != null) { roomModel.DND.Status = hostModal2.Status; } if (hostModal3 != null) { roomModel.Clean.Status = hostModal3.Status; } if (hostModal4 != null) { roomModel.Checkout.Status = hostModal4.Status; } #region 弃用的代码,影响使用 //获取当前入住人信息 //if (!string.IsNullOrEmpty(roomNumber)) //{ // using (syncstatus.syncstatusSoapClient wsClient = new syncstatus.syncstatusSoapClient()) // { // string phoneNumber = ""; // string xmlString = wsClient.GetRoomCustomerByHotelID(host.SysHotel.ID, roomNumber, ref phoneNumber); // if (!string.IsNullOrEmpty(xmlString)) // { // try // { // System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); // doc.LoadXml(xmlString); // foreach (System.Xml.XmlNode node in doc.GetElementsByTagName("interface")[0].ChildNodes) // { // roomModel.Customers.Add(new RoomCustomer() // { // idtype = node.Attributes["idtype"].Value, // idcard = node.Attributes["idcard"].Value, // customer = node.Attributes["customer"].Value, // sex = node.Attributes["sex"].Value, // country = node.Attributes["country"].Value, // checkindate = Convert.ToDateTime(node.Attributes["checkindate"].Value), // phoneNumber = phoneNumber // }); // } // } // catch (Exception ex1) // { // logger.Error(string.Format("解释酒店({0})客房({1})入住人信息({2})异常),原因:{3}", host.SysHotel.Code + host.SysHotel.Name, host.RoomNumber, xmlString, ex1.Message)); // } // } // } //} #endregion roomModels.Add(roomModel); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRCUStatus"); return Json(new { IsSuccess = true, Result = roomModels }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取主机状态失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } private ServiceModel GetService(IList services, string modalAddress) { var serviceModel = new ServiceModel { Status = 2, Code = "", Name = "", Color = "" }; var service = services.FirstOrDefault(r => r.Modal.ModalAddress == modalAddress); if (service != null) { serviceModel = new ServiceModel { Status = 1, Code = service.Modal.ModalAddress, Name = (Language == Domain.Language.CN) ? service.Modal.Name : service.Modal.EnglishName, Color = service.Modal.Color == "" ? service.Modal.Color : "#080808" }; services.Remove(service); } return serviceModel; } /// /// 打开/关闭rcu /// /// /// public ActionResult SetRCUPower(string jsonData) { return Json(new { IsSuccess = false, Result = "接口已停用" }, JsonRequestBehavior.AllowGet); } /// /// 打开/关闭rcu(授权使用) /// /// /// public ActionResult SetRCUPowerLicense(string jsonData) { WebApiInvoke_FenXi("SetRCUPowerLicense"); //MonitorWebAPI(jsonData, "SetRCUPowerLicense"); try { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } int status = Convert.ToInt16(jData["status"]);//设置状态:1开启,2关闭 PowerSupplyCtrl power = status == 1 ? PowerSupplyCtrl.Normal : PowerSupplyCtrl.Lock;//实际下位机:0开启,1关闭 PowerSupplyControlManager.SendCtrl(host, power); host.PowerSupply = (power == PowerSupplyCtrl.Normal ? true : false); string k2 = CacheKey.PowerSupply + "_" + host.HostNumber; CSRedisCacheHelper.Forever(k2, host.PowerSupply); HostManager.Update(host); string detail = string.Format("{0}客房{1}的主机电源", (status == 1 ? "打开" : "关闭"), roomNumber); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("Relay"), detail, true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCUPowerLicense"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置电源失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } public static string TongJiEnable = ConfigurationManager.AppSettings["tongjiflag"]; private void TongJi(string jsonData, string start_time, string end_time, JObject jData, string METHOD_Name) { if (TongJiEnable.Equals("0")) { return; } string code = "0000"; var mmm = jData["code"]; if (mmm != null) { code = mmm.ToString(); } string roomnumber = "0000"; var nnn = jData["roomNumber"]; if (nnn != null) { roomnumber = nnn.ToString(); } var t = new Tuple(jsonData, start_time, end_time, code, roomnumber, METHOD_Name); Task.Factory.StartNew((state) => { var ttt = state as Tuple; string jt = ttt.Item1; string st_t = ttt.Item2; string ed_t = ttt.Item3; string co = ttt.Item4; string rm = ttt.Item5; string MN = ttt.Item6; MonitorWebAPI(jt, METHOD_Name, st_t, ed_t, co, rm); }, t); } /// /// 获取房间的空调列表 /// /// /// public ActionResult GetRoomAirList(string jsonData) { //return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet); try { WebApiInvoke_FenXi("GetRoomAirList"); string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList hostModals = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.WXActiveIndicator).ToList(); if (hostModals == null || hostModals.Count < 1) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置空调" }, JsonRequestBehavior.AllowGet); } List list = new List(); foreach (HostModal item in hostModals) { Air air = new Air { HostID = item.HostID, ModalAddress = item.Modal.ModalAddress, Name = item.Modal.Name, RoomTypeAirID = item.Modal.ID, Status = item.Status, SettingTemp = item.SettingTemp, CurrentTemp = item.CurrentTemp, Mode = item.Mode, FanSpeed = item.FanSpeed, Valve = item.Valve }; list.Add(air); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomAirList"); //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("AirConditioningControl"), "获取客房" + roomNumber + "空调信息", true, "api", hotelID); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取空调失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } private void MonitorWebAPI(string jsonData, string MethodName, string st_time, string end_time, string hotel_code, string RoomNumber) { try { string IP = ""; string PPP = Request.UserHostAddress; string III = Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrEmpty(III)) { IP = PPP; } else { IP = III; } WebAPIMonitorData s = new WebAPIMonitorData(); string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); s.MethodName = MethodName; s.InvokStart_Time = st_time; s.InvokEnd_Time = end_time; s.HotelCode = hotel_code; s.RoomNumber = RoomNumber; s.RemoteIP = IP; s.Parameters = new List() { jsonData }; SendMQTTData.WebAPI_DataSend(s, mqtt_topic); } catch (Exception) { } } /// /// 设置空调 /// /// /// public ActionResult SetRCUAir(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("SetRCUAir"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } string modalAddress = jData["modalAddress"].ToString();//组地址 var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress); if (hostModal == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的空调" }, JsonRequestBehavior.AllowGet); } int status = 0, brightness = 0, temperature = 0, fanSpeed = 0, mode = 0, valve = 0;//0表示不变 StringBuilder detail = new StringBuilder(); detail.Append(string.Format("设置客房{0}{1}({2}):", roomNumber, hostModal.Modal.Name, modalAddress)); if (jData["onOff"] != null) { status = int.Parse(jData["onOff"].ToString());//开关:1开,2关 detail.Append("状态:" + (status == 1 ? "打开," : "关闭,")); } if (jData["temperature"] != null) { temperature = int.Parse(jData["temperature"].ToString());//设置温度16~32 detail.Append("温度:" + temperature.ToString() + ","); } if (jData["fanSpeed"] != null) { fanSpeed = int.Parse(jData["fanSpeed"].ToString());//风速:0自动,1低速,2中速,3高速 switch (fanSpeed) { case 1: detail.Append("风速:" + "低速,"); break; case 2: detail.Append("风速:" + "中速,"); break; case 3: detail.Append("风速:" + "高速,"); break; default: detail.Append("风速:" + "自动,"); break; } } if (jData["mode"] != null) { mode = int.Parse(jData["mode"].ToString());//模式:0自动,1制冷,2制热,3送风 switch (mode) { case 1: detail.Append("模式:" + "制冷,"); break; case 2: detail.Append("模式:" + "制热,"); break; case 3: detail.Append("模式:" + "送风,"); break; default: detail.Append("模式:" + "自动,"); break; } } if (jData["valve"] != null) { valve = int.Parse(jData["valve"].ToString());//阀门:1开,2关 detail.Append("阀门:" + (status == 1 ? "打开" : "关闭")); } HostModalManager.SetDevice(host, hostModal, status, brightness, temperature, fanSpeed, mode, valve); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("AirConditioningControl"), detail.ToString(), true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCUAir"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置空调失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取房间的场景列表 /// /// /// public ActionResult GetRoomSceneList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetRoomSceneList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList modals = RoomTypeSceneManager.LoadAll().Where(r => r.RoomType.ID == host.RoomType.ID && r.ActiveIndicator).OrderBy(r => r.Sort).ToList(); if (modals == null || modals.Count < 1) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置场景" }, JsonRequestBehavior.AllowGet); } List list = new List(); foreach (var modal in modals) { SceneState sceneState = new SceneState { SceneID = modal.ID, Name = modal.Name, Icon = modal.Icon }; list.Add(sceneState); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomSceneList"); //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), "获取客房" + roomNumber + "场景信息", true, "api", hotelID); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取场景失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 设置场景 /// /// /// public ActionResult SetRCUScene(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("SetRCUScene"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } if (!CheckGetPower(host)) { return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet); } string sceneID = jData["sceneID"].ToString();//场景ID:1、2、3 //string status = jData["status"].ToString();//状态:1开,2关 var scene = RoomTypeSceneManager.Get(int.Parse(sceneID)); if (scene == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的场景" }, JsonRequestBehavior.AllowGet); } LightControlManager.ApplyScene(host, scene); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), string.Format("打开客房{0}{1}场景", roomNumber, scene.Name), true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCUScene"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置场景失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取房间的灯光列表 /// /// /// public ActionResult GetRoomLightList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); //return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet); try { WebApiInvoke_FenXi("GetRoomLightList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } //IList hostModals = HostModalManager.LoadAll().Where(r => (r.Modal.Type == DeviceType.Relay || r.Modal.Type == DeviceType.Dimmer // || r.Modal.Type == DeviceType.PWMDimmer || r.Modal.Type == DeviceType.Traic || r.Modal.Type == DeviceType.PWMExpand || r.Modal.Type == DeviceType.PBLED) // && r.HostID == host.ID && r.Modal.ActiveIndicator == true).ToList(); IList hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.WXActiveIndicator).ToList(); //if ((hostModals1 == null || hostModals1.Count < 1) && (hostModals2 == null || hostModals2.Count < 1)) //{ // return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置灯光或调光" }, JsonRequestBehavior.AllowGet); //} IList list = new List(); foreach (HostModal modal in hostModals) { switch (modal.Modal.Type) { case DeviceType.Relay://主机继电器 case DeviceType.Dimmer://LED调光 case DeviceType.PWMDimmer://PWM调光 case DeviceType.PWMExpand://PWM扩展 case DeviceType.PBLED: case DeviceType.Traic://可控硅调光 case DeviceType.Strip://灯带调光 case DeviceType.A9IORelay: case DeviceType.LVout://弱电输出 case DeviceType.Expand://扩展继电器 case DeviceType.PB20: case DeviceType.PB20_LD: case DeviceType.PB20_LS: Light light = new Light { Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), ModalAddress = modal.Modal.ModalAddress, Status = modal.Status, Brightness = modal.Brightness }; list.Add(light); break; } } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomLightList"); //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("LightControl"), "获取客房" + roomNumber + "灯光信息", true, "api", hotelID); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取灯光失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 设置灯光 /// /// /// public ActionResult SetRCULight(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("SetRCULight"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } if (!CheckGetPower(host)) { return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet); } string modalAddress = jData["modalAddress"].ToString();//组地址 int status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关 int brightness = Convert.ToInt16(jData["brightness"].ToString());//亮度:0~100 var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress); if (hostModal == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的灯光" }, JsonRequestBehavior.AllowGet); } HostModalManager.SetDevice(host, hostModal, status, brightness); string detail = string.Format("{0}客房{1}{2}({3}),亮度{4}", (status == 1 ? "打开" : "关闭"), roomNumber, hostModal.Modal.Name, modalAddress, brightness); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("LightControl"), detail, true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCULight"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置灯光失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取房间的窗帘列表 /// /// /// public ActionResult GetRoomCurtainList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); //return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet); try { WebApiInvoke_FenXi("GetRCUStatus"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList hostModals = HostModalManager.Load(host.ID, DeviceType.Curtain).Where(r => r.Modal.WXActiveIndicator).ToList(); if (hostModals == null || hostModals.Count < 1) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置窗帘" }, JsonRequestBehavior.AllowGet); } IList list = new List(); foreach (HostModal modal in hostModals) { Curtain curtain = new Curtain { Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), ModalAddress = modal.Modal.ModalAddress, Status = modal.Status }; list.Add(curtain); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomCurtainList"); //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), "获取客房" + roomNumber + "窗帘信息", true, "api", hotelID); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 设置窗帘 /// /// /// public ActionResult SetRCUCurtain(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("SetRCUCurtain"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } if (!CheckGetPower(host)) { return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet); } string modalAddress = jData["modalAddress"].ToString();//组地址 int status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关,6停止 var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress); if (hostModal == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的窗帘" }, JsonRequestBehavior.AllowGet); } HostModalManager.SetDevice(host, hostModal, status, 0); string detail = string.Format("{0}客房{1}{2}({3})", (status == 1 ? "打开" : (status == 6 ? "停止" : "关闭")), roomNumber, hostModal.Modal.Name, modalAddress); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), detail, true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCUCurtain"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); logger.Error(ex.StackTrace); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取房间的背景音乐列表 /// /// /// public ActionResult GetRoomMusicList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetRoomMusicList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList hostModals = HostModalManager.Load(host.ID, DeviceType.Music).Where(r => r.Modal.WXActiveIndicator).ToList(); if (hostModals == null || hostModals.Count < 1) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置背景音乐" }, JsonRequestBehavior.AllowGet); } IList list = new List(); foreach (HostModal modal in hostModals) { Music music = new Music { Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), ModalAddress = modal.Modal.ModalAddress, Status = modal.Status, Brightness = modal.Brightness, Mode = modal.Mode }; list.Add(music); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomMusicList"); //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), "获取客房" + roomNumber + "背景音乐信息", true, "api", hotelID); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 设置背景音乐 /// /// /// public ActionResult SetRCUMusic(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("SetRCUMusic"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } if (!CheckGetPower(host)) { return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet); } string modalAddress = jData["modalAddress"].ToString();//组地址 var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress); if (hostModal == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的背景音乐" }, JsonRequestBehavior.AllowGet); } int status = 0, brightness = 0, mode = 0;//0表示不变 StringBuilder detail = new StringBuilder(); detail.Append(string.Format("设置客房{0}{1}({2}):", roomNumber, hostModal.Modal.Name, modalAddress)); if (jData["status"] != null) { status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关 detail.Append("状态:" + (status == 1 ? "打开," : "关闭,")); } if (jData["brightness"] != null) { brightness = Convert.ToInt16(jData["brightness"].ToString());//音量:1~10 detail.Append("音量:" + brightness + ","); } if (jData["mode"] != null) { mode = int.Parse(jData["mode"].ToString());//模式:0自动,1制冷,2制热,3送风 switch (mode) { case 2: detail.Append("模式:" + "暂停"); break; case 3: detail.Append("模式:" + "上一曲"); break; case 4: detail.Append("模式:" + "下一曲"); break; case 5: detail.Append("模式:" + "音量加"); break; case 6: detail.Append("模式:" + "音量减"); break; default: detail.Append("模式:" + "播放"); break; } } HostModalManager.SetDevice(host, hostModal, status, brightness, 0, 0, mode, 0); //string detail = string.Format("{0}客房{1}{2}({3})", (status == 1 ? "打开" : (status == 6 ? "停止" : "关闭")), roomNumber, hostModal.Modal.Name, modalAddress); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), detail.ToString(), true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCUMusic"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取房间的服务列表 /// /// /// https://pms.boonlive-rcu.com/api/GetRoomServiceList?jsonData={"creatDate":"2023-11-16","roomNumber":"2206","code":"1762"} /// /// /// public ActionResult GetRoomServiceList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetRoomServiceList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList hostModals = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.WXActiveIndicator).ToList(); if (hostModals == null || hostModals.Count < 1) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置服务信息" }, JsonRequestBehavior.AllowGet); } //logger.Error(string.Format("api获取酒店{0}客房{1}服务列表,来自{2}", jData["code"].ToString(), roomNumber, GetClientIP())); IList list = new List(); foreach (HostModal modal in hostModals) { Light light = new Light { Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), ModalAddress = modal.Modal.ModalAddress, Status = modal.Status }; list.Add(light); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomServiceList"); //SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SetRoomService"), "获取客房" + roomNumber + "服务信息", true, "api", hotelID); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取服务失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 设置服务 /// /// /// public ActionResult SetRCUService(string jsonData) { try { WebApiInvoke_FenXi("SetRCUService"); string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } string modalAddress = jData["modalAddress"].ToString();//组地址 if (!modalAddress.StartsWith("020") && !CheckGetPower(host))//微信锁类型过滤 { return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet); } int status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关 int brightness = status == 1 ? 100 : 0; //Convert.ToInt16(jData["brightness"].ToString());//亮度:0~100 var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress); if (hostModal == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的服务" }, JsonRequestBehavior.AllowGet); } switch (modalAddress) { case "004000008"://SOS case "004000013"://门磁 return Json(new { IsSuccess = false, Result = "该服务(" + modalAddress + ")不可远程控制" }, JsonRequestBehavior.AllowGet); } HostModalManager.SetDevice(host, hostModal, status, brightness); string detail = string.Format("{0}客房{1}{2}({3})服务", (status == 1 ? "打开" : "关闭"), roomNumber, hostModal.Modal.Name, modalAddress); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SetRoomService"), detail, true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetRCUService"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置服务失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取设备操作记录 /// /// /// public ActionResult GetDeviceOperationLog(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetDeviceOperationLog"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } string modalAddress = jData["modalAddress"].ToString();//组地址 IList result = HostModalRecordManager.LoadByHostID(host.ID, modalAddress); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetDeviceOperationLog"); return Json(new { IsSuccess = true, Result = result }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取设备操作记录失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取操作记录 /// /// /// public ActionResult GetOperationLog(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetOperationLog"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } string searchDate = ""; if (jData["searchDate"] != null && jData["searchDate"].ToString() != "") { searchDate = Convert.ToDateTime(jData["searchDate"].ToString()).ToString("yyyy-MM-dd"); } IList logs = SysSystemLogsManager.LoadAll().Where(r => r.HotelID == hotelID && r.Account == "api").ToList(); if (!string.IsNullOrEmpty(searchDate)) { logs = logs.Where(r => Convert.ToDateTime(r.Time).ToString("yyyy-MM-dd") == searchDate).ToList(); } logs = logs.OrderByDescending(o => o.Time).ToList(); IList list = new List(); foreach (SysSystemLogs log in logs) { list.Add(new { Action = log.Action, Detail = log.Detail, Result = log.Result, Account = log.Account, IP = log.IP, Time = Convert.ToDateTime(log.Time).ToString("yyyy-MM-dd HH:mm:ss") }); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetOperationLog"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取操作记录失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取空气质量检测数据 /// /// /// public ActionResult GetAirDetectList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetAirDetectList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList list = new List(); var hostModals = HostModalManager.Load(host.ID, DeviceType.AirDetect).Where(r => r.Modal.WXActiveIndicator); foreach (HostModal modal in hostModals) { Light light = new Light { Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), ModalAddress = modal.Modal.ModalAddress, Brightness = modal.Brightness }; list.Add(light); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetAirDetectList"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取空气质量检测数据失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } public class FaultData { public bool RCU_Status { get; set; } public IEnumerable list { get; set; } } /// /// 获取主机异常数据 /// /// /// public ActionResult GetHostFaultList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetHostFaultList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber); if (host == null) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } var hostFault = HostFaultsManager.LoadHostFault(host.ID); string host_number = host.HostNumber; string mac = host.MAC; bool is_online = CSRedisCacheHelper.Contains(host_number, mac); //roomModel.HostStatus = is_online;//主机状态:0离线,1在 IList AllDeviceData = null;//RoomServiceManager.LoadCurrentRoomServices(room.HostID); string Key = "AllDeviceData_" + host.ID.ToString(); object oos = HttpContext.Cache.Get(Key); if (oos != null) { AllDeviceData = oos as IList; } else { AllDeviceData = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.ActiveIndicator && r.Modal.Abnormal).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID); } var list = hostFault.Select((r) => { return new FFFault { Name = ReturnNameByLanguage(r[0].ToString(), r[1].ToString(), r[2].ToString()), Address = r[7].ToString(), //8 AbnormalStatus = r[8].ToString(), StatusDate = Convert.ToDateTime(r[9]).Year < 1900 ? "" : Convert.ToDateTime(r[9]).ToString("yyyy-MM-dd HH:mm:ss"), //10 AbnormalElectricQty = r[10].ToString(), ElectricQtyDate = Convert.ToDateTime(r[11]).Year < 1900 ? "" : Convert.ToDateTime(r[11]).ToString("yyyy-MM-dd HH:mm:ss"), // 12 Abnormal3 = (Convert.ToInt16(r[12]) * 10).ToString(),//数据乘以10,单位mA Abnormal3Date = Convert.ToDateTime(r[13]).Year < 1900 ? "" : Convert.ToDateTime(r[13]).ToString("yyyy-MM-dd HH:mm:ss"), //14 Abnormal4 = r[14].ToString(), Abnormal4Date = Convert.ToDateTime(r[15]).Year < 1900 ? "" : Convert.ToDateTime(r[15]).ToString("yyyy-MM-dd HH:mm:ss") }; }); List llist = new List(); foreach (var item1 in AllDeviceData) { //如果这个数据在故障表中出现过就代表 他已经出现了故障,就不添加到故障表中 bool bl = list.Any(A => A.Address.Equals(item1.Modal.ModalAddress)); if (!bl) { FFFault f = new FFFault(); f.Name = item1.Modal.Name; f.Address = item1.Modal.ModalAddress; //离线或者在线 //没有离线,所以是0 f.AbnormalStatus = "0"; f.StatusDate = ""; //10 f.AbnormalElectricQty = ""; f.ElectricQtyDate = ""; // 12 f.Abnormal3 = "";//数据乘以10,单位mA f.Abnormal3Date = ""; //14 f.Abnormal4 = ""; f.Abnormal4Date = ""; llist.Add(f); } } llist.AddRange(list); FaultData d = new FaultData(); d.list = llist; d.RCU_Status = is_online; return Json(new { IsSuccess = true, Result = d }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取主机异常数据失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } public class FFFault { public string Name; public string Address; public string AbnormalStatus; public string StatusDate; public string AbnormalElectricQty; public string ElectricQtyDate; public string Abnormal3; public string Abnormal3Date; public string Abnormal4; public string Abnormal4Date; } /// /// 获取房型及其回路数据 /// 宝易软件会用到 /// /// /// public ActionResult GetRoomTypeAndModalsList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { WebApiInvoke_FenXi("GetRoomTypeAndModalsList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } //阿宝添加的 //2025-01-02 //修改原因: 添加 是否删除字段条件 IList roomTypes = RoomTypeManager.LoadAll().Where(r => r.HotelID == hotelID && !r.IsDeleted).ToList(); IList list = new List(); foreach (RoomType roomType in roomTypes) { IList modalsList = new List(); foreach (RoomTypeModal model in roomType.Modals) { if (model.WXActiveIndicator) { modalsList.Add(new { ID = model.ID, ModalAddress = model.ModalAddress, Name = model.Name, EnglistName = model.EnglishName, TWName = model.TWName, TypeName = Common.Tools.GetDescription(model.Type) }); } } list.Add(new { ID = roomType.ID, Code = roomType.Code, Name = roomType.Name, Modals = modalsList }); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetRoomTypeAndModalsList"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取房型及其回路数据失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取指定酒店信息 /// /// /// public ActionResult GetHotelInfo(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); SysHotel sysHotel = SysHotelManager.GetByCode(jData["code"].ToString(), Convert.ToDateTime(jData["creatDate"].ToString())); if (sysHotel == null) { return Json(new { IsSuccess = false, Result = "酒店未知,请核实参数" }, JsonRequestBehavior.AllowGet); } IList list = new List(); list.Add(new { Code = sysHotel.Code, Name = sysHotel.Name, EName = sysHotel.EName, TWName = sysHotel.TWName, Contact = sysHotel.Contact, Phone = sysHotel.Phone, Address = sysHotel.Address, TVControlUrl = sysHotel.TVControlUrl, TVControlToken = sysHotel.TVControlToken, WelcomeSpeech = sysHotel.WelcomeSpeech, GoodbyeSpeech = sysHotel.GoodbyeSpeech, DeviceStatusPushURL = sysHotel.DeviceStatusPushURL, ValidateDate = sysHotel.ValidateDate, Remark = sysHotel.Remark }); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHotelInfo"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店信息失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取酒店信息失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult GetHotelIdByCode(string code, string key) { if (key.Equals("i_love_blw^_^")) { SysHotel sysHotel = SysHotelManager.GetByCode(code); return Json(new { id = sysHotel.ID, createdDate = sysHotel.CreatedDate, welcomeSpeech = sysHotel.WelcomeSpeech }, JsonRequestBehavior.AllowGet); } return Json(new { id = 0 }, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult GetHotelListByCode(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); if (jData["key"].ToString() != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } string code = jData["id"].ToString(); int id = 0; int.TryParse(code, out id); var hotel = SysHotelManager.LoadAll().Where(r => r.ID == id && !r.IsDeleted).FirstOrDefault(); string CreatDate = hotel.CreatedDate.ToString("yyyy-MM-dd"); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHotelList"); return Json(new { IsSuccess = true, Result = CreatDate }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取酒店列表失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取酒店列表 /// /// /// public ActionResult GetHotelList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); if (jData["key"].ToString() != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } var hotels = SysHotelManager.LoadAll().Where(r => !r.IsDeleted).ToList(); IList list = new List(); foreach (SysHotel hotel in hotels) { list.Add(new { ID = hotel.ID, Code = hotel.Code, Name = hotel.Name, EName = hotel.EName, TWName = hotel.TWName, Contact = hotel.Contact, Phone = hotel.Phone, Address = hotel.Address, ValidateDate = hotel.ValidateDate, CreatDate = hotel.CreatedDate.ToString("yyyy-MM-dd"), Remark = hotel.Remark, Status = hotel.Status, IsApprove = hotel.IsApprove, SysHotelGroupID = hotel.SysHotelGroup == null ? 0 : hotel.SysHotelGroup.ID, SysHotelGroupName = hotel.SysHotelGroup == null ? "" : hotel.SysHotelGroup.Name, }); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHotelList"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取酒店列表失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取酒店分组列表 /// /// /// public ActionResult GetHotelGroupList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); if (jData["key"].ToString() != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } var hotelGroups = SysHotelGroupManager.LoadAll().Where(r => !r.IsDeleted).ToList(); IList list = new List(); foreach (SysHotelGroup hotelGroup in hotelGroups) { list.Add(new { ID = hotelGroup.ID, Name = hotelGroup.Name, ParentID = hotelGroup.Parent == null ? 0 : hotelGroup.Parent.ID, ParentName = hotelGroup.Parent == null ? "" : hotelGroup.Parent.Name, Sort = hotelGroup.Sort }); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHotelGroupList"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店分组列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取酒店分组列表失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取用户列表 /// /// /// public ActionResult GetUserList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); if (jData["key"].ToString() != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } var users = SysUserManager.LoadAll().Where(r => !r.IsDeleted).ToList(); IList list = new List(); foreach (SysUsers user in users) { list.Add(new { ID = user.ID, HotelID = user.HotelID, SysHotelGroupID = user.SysHotelGroup == null ? 0 : user.SysHotelGroup.ID, SysHotelGroupName = user.SysHotelGroup == null ? "" : user.SysHotelGroup.Name, GroupID = user.Group == null ? 0 : user.Group.ID, GroupName = user.Group == null ? "" : user.Group.Name, Account = user.Account, Password = user.Password, Password2 = user.Password2, Name = user.Name, RoleID = user.Role == null ? 0 : user.Role.ID, RoleName = user.Role == null ? "" : user.Role.Name, Sex = user.Sex, Phone = user.Phone, Email = user.Email, ActiveIndicator = user.ActiveIndicator, CreatedDate = user.CreatedDate.ToString("yyyy-MM-dd HH:mm:ss"), Sort = user.Sort, Remark = user.Remark }); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetUserList"); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取用户列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取用户列表失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取主机列表 /// /// /// public ActionResult GetHostList(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } IList hosts = HostManager.LoadAll(hotelID).OrderBy(r => r.RoomNumber).ToList(); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHostList"); return Json(new { IsSuccess = true, Result = GetHostList(hosts) }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取主机列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取主机列表:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取酒店列表 通过GroupId /// /// /// public ActionResult GetHostListWithGroupId(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } string Key = "GetHostListWithGroupId_" + hotelID; object obj = MemoryCacheHelper.Get(Key); IList hosts = null; if (obj != null) { hosts = obj as IList; } else { hosts = HostManager.LoadAll(hotelID).OrderBy(r => r.RoomNumber).ToList(); MemoryCacheHelper.Set(Key, hosts); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHostList"); return Json(new { IsSuccess = true, Result = GetHostListNew(hosts) }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取主机列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "获取主机列表:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 根据mac获取主机 /// /// /// public ActionResult GetHostByMAC(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); if (jData["key"].ToString() != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(jData["mac"].ToString())) { return Json(new { IsSuccess = false, Result = "参数mac不能为空" }, JsonRequestBehavior.AllowGet); } IList hosts = HostManager.LoadByMac(jData["mac"].ToString()); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHostByMAC"); return Json(new { IsSuccess = true, Result = GetHostList(hosts) }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("根据mac获取主机失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "根据mac获取主机失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult GetHostByMAC_POST() { try { string a = Request.Form["key"].ToString(); //string b = Request.Form["mac"].ToString(); string rm = Request.Form["roomnumber"].ToString(); string hotelcode = Request.Form["hotelcode"].ToString(); if (a != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(hotelcode)) { return Json(new { IsSuccess = false, Result = "参数hotelcode不能为空" }, JsonRequestBehavior.AllowGet); } Host hosts = HostManager.GetByRoomNumber(rm, hotelcode); var Q = new List(); Q.Add(hosts); return Json(new { IsSuccess = true, Result = GetHostList_NEW(Q) }, JsonRequestBehavior.AllowGet); //return Json(new { IsSuccess = true, Result = hosts }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("根据mac获取主机失败:。原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "根据mac获取主机失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 根据房号和酒店ID获取主机 /// /// /// public ActionResult GetHostByRoomNumber(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); //Request.InputStream.Position = 0; //byte[] reqBody = new byte[Request.InputStream.Length]; //Request.InputStream.Read(reqBody, 0, reqBody.Length); //string reqData = System.Text.Encoding.UTF8.GetString(reqBody); //if (!string.IsNullOrEmpty(reqData)) //{ // jsonData = reqData; //} try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); if (jData["key"].ToString() != "blw_ws@2015") { return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(jData["roomNumber"].ToString())) { return Json(new { IsSuccess = false, Result = "参数roomNumber不能为空" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(jData["hotelID"].ToString())) { return Json(new { IsSuccess = false, Result = "参数hotelID不能为空" }, JsonRequestBehavior.AllowGet); } Host host = HostManager.GetByRoomNumber(jData["roomNumber"].ToString(), Convert.ToInt16(jData["hotelID"].ToString())); IList hosts = new List(); hosts.Add(host); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "GetHostByRoomNumber"); return Json(new { IsSuccess = true, Result = GetHostList(hosts) }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("根据房号和酒店ID获取主机失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "根据房号和酒店ID获取主机失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 转换输出主机列表 /// /// /// private IList GetHostList(IList hosts) { IList list = new List(); foreach (Host host in hosts) { list.Add(new { ID = host.ID, HotelID = host.SysHotel == null ? 0 : host.SysHotel.ID, HotelName = host.SysHotel == null ? "" : host.SysHotel.Name, HostNumber = host.HostNumber, RoomNumber = host.RoomNumber, Status = host.Status, RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd"), RoomStatusID = host.RoomStatus == null ? 0 : host.RoomStatus.ID, RoomStatusName = host.RoomStatus == null ? "" : host.RoomStatus.Name, RoomTypeID = host.RoomType == null ? 0 : host.RoomType.ID, RoomTypeName = host.RoomType == null ? "" : host.RoomType.Name, MAC = host.MAC, MACBindDate = host.MACBindDate == null ? "" : Convert.ToDateTime(host.MACBindDate).ToString("yyyy-MM-dd"), IPType = host.IPType, IP = host.IP, SubnetMask = host.SubnetMask, Gateway = host.Gateway, DNS = host.DNS, Port = host.Port, ServerIP = host.ServerIP, ServerPort = host.ServerPort, Remark = host.Remark, MachineType = host.Model, ConfigurationVersion = host.ConfigVersion, Version = host.Version, LauncherVersion = host.LauncherVersion }); } return list; } private IList GetHostListNew(IList hosts) { //string DNDKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000002"; //string CleanKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000003"; //string CheckOutKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000006"; IList list = new List(); foreach (Host host in hosts) { string SOSKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000008"; var hostModal1 = CSRedisCacheHelper.Get_Partition(SOSKey); int status = 0; if (hostModal1 != null) { status = hostModal1.Status; } list.Add(new { ID = host.ID, HotelID = host.SysHotel == null ? 0 : host.SysHotel.ID, GroupId = host.Group.ID, HotelName = host.SysHotel == null ? "" : host.SysHotel.Name, HostNumber = host.HostNumber, RoomNumber = host.RoomNumber, Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC), SOS_Status = status, RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd"), RoomStatusID = host.RoomStatus == null ? 0 : host.RoomStatus.ID, RoomStatusName = host.RoomStatus == null ? "" : host.RoomStatus.Name, RoomTypeID = host.RoomType == null ? 0 : host.RoomType.ID, RoomTypeName = host.RoomType == null ? "" : host.RoomType.Name, MAC = host.MAC, MACBindDate = host.MACBindDate == null ? "" : Convert.ToDateTime(host.MACBindDate).ToString("yyyy-MM-dd"), IPType = host.IPType, IP = host.IP, SubnetMask = host.SubnetMask, Gateway = host.Gateway, DNS = host.DNS, Port = host.Port, ServerIP = host.ServerIP, ServerPort = host.ServerPort, Remark = host.Remark, MachineType = host.Model, ConfigurationVersion = host.ConfigVersion, Version = host.Version, LauncherVersion = host.LauncherVersion }); } return list; } private IList GetHostList_NEW(IList hosts) { IList list = new List(); foreach (Host host in hosts) { list.Add(new { ID = host.ID, HotelCode = host.SysHotel.Code, HotelID = host.SysHotel == null ? 0 : host.SysHotel.ID, HotelName = host.SysHotel == null ? "" : host.SysHotel.Name, HostNumber = host.HostNumber, RoomNumber = host.RoomNumber, Status = host.Status, RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd"), RoomStatusID = host.RoomStatus == null ? 0 : host.RoomStatus.ID, RoomStatusName = host.RoomStatus == null ? "" : host.RoomStatus.Name, RoomTypeID = host.RoomType == null ? 0 : host.RoomType.ID, RoomTypeName = host.RoomType == null ? "" : host.RoomType.Name, MAC = host.MAC, MACBindDate = host.MACBindDate == null ? "" : Convert.ToDateTime(host.MACBindDate).ToString("yyyy-MM-dd"), IPType = host.IPType, IP = host.IP, SubnetMask = host.SubnetMask, Gateway = host.Gateway, DNS = host.DNS, Port = host.Port, LanIP = host.LanIP, LanPort = host.LanPort, ServerIP = host.ServerIP, ServerPort = host.ServerPort, Remark = host.Remark, TiaoMaoCUID = host.TianMaoCUID, XiaoDuCUID = host.XiaoDuCUID }); } return list; } /// /// 设置或更新主机mac /// /// /// public ActionResult SetHostMAC(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); string mac = jData["mac"].ToString(); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } Host host = HostManager.GetByRoomNumber(roomNumber, hotelID); if (host == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]不存在" }, JsonRequestBehavior.AllowGet); } string detail = string.Format("解绑客房({0})主机MAC", roomNumber); if (!string.IsNullOrEmpty(mac)) { IList hosts = HostManager.LoadByMac(mac); foreach (Host host2 in hosts) { if (host2.ID != host.ID) { return Json(new { IsSuccess = false, Result = string.Format("MAC({0})已绑定在酒店({1})客房({2})下。", mac, host2.SysHotel.Name + host2.SysHotel.Code, host2.RoomNumber) }, JsonRequestBehavior.AllowGet); } } detail = string.Format("绑定客房({0})主机MAC({1})", roomNumber, host.MAC); } host.MAC = mac; host.MACBindDate = DateTime.Now;//更新mac绑定时间 HostManager.Update(host); SaveSystemLog(AuthorityID, "设置主机MAC", detail, true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SetHostMAC"); return Json(new { IsSuccess = true, Result = string.Format("房号[{0}]{1}成功", roomNumber, string.IsNullOrEmpty(mac) ? "解绑MAC" : "绑定MAC") }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("设置主机MAC失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "设置主机MAC失败:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 同步房态 /// /// /// public ActionResult SyncRoomStatus(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string hotelCode = jData["hotelCode"].ToString(); string roomNumber = jData["roomNumber"].ToString(); Host host = HostManager.GetByRoomNumber(roomNumber, hotelCode); if (host == null) { return Json(new { IsSuccess = false, Result = string.Format("未找到对应主机(roomNumber:{0},hotelCode:{1})", roomNumber, hotelCode) }, JsonRequestBehavior.AllowGet); } int roomStatusID = Convert.ToInt16(jData["roomStatusID"]);//设置房态:2出租,4待租,8退房,16空房 HostManager.ChangeRoomStatus(host, roomStatusID); string detail = string.Format("同步客房{0}房态(ID:{1})", roomNumber, roomStatusID); SaveSystemLog(AuthorityID, "同步房态", detail, true, "api", hotelID); string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); TongJi(jsonData, start_time, end_time, jData, "SyncRoomStatus"); return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("同步房态失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } #endregion #region 提供给腾讯云图调用 /// /// 酒店分布 /// /// public ActionResult GetHotelsForTCV() { ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com"); try { IEnumerable> hotelGroup = this.SysHotelManager.LoadAll().GroupBy(r => r.ProvinceCode); IList province = SysProvinceManager.LoadAll(); IList list = new List(); foreach (IGrouping item in hotelGroup) { if (item.Key != null) { list.Add(new { x = province.Where(r => r.Code == item.Key).FirstOrDefault().Name, y = item.Count(), s = "thermal" }); } } return Json(list, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店分布数据失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json("获取酒店分布数据失败:" + ex.Message, JsonRequestBehavior.AllowGet); } } /// /// 获取主机总数等 /// /// public ActionResult GetHostsForTCV() { ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com"); try { var hosts = HostManager.LoadAll(); int onlineCount = hosts.Where(r => r.Status == true).ToList().Count; IList list = new List(); list.Add(new { x = "总数", y = hostBaseCount + hosts.Count }); list.Add(new { x = "在线", y = hostBaseCount + onlineCount }); list.Add(new { x = "离线", y = hosts.Count - onlineCount }); return Json(list, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取主机数据失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json("获取主机数据失败:" + ex.Message, JsonRequestBehavior.AllowGet); } } /// /// 根据状态获取酒店 /// /// 酒店状态:0正式运营,1批量安装,2样板间 /// /// public ActionResult GetHotelsByStatusForTCV(int status, int row) { ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com"); try { var hotels = this.SysHotelManager.LoadAll().Where(r => r.Status == status).Take(row).ToList(); IList list = new List(); foreach (SysHotel hotel in hotels) { list.Add(new { key1 = hotel.Code, value1 = hotel.Name }); } return Json(list, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店数据失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json("获取酒店数据失败:" + ex.Message, JsonRequestBehavior.AllowGet); } } /// /// 获取存在异常主机 /// 红外检测逻辑:取电后房间红外5个小时内没触发判断了红外坏 /// 门磁检查逻辑:房间取电后没有门磁开关信息判断门磁坏 /// 房间误取电判断:房间两天一直取电不断电判断房间取电不正常 /// /// public ActionResult GetAbnormalHostsForTCV() { ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com"); try { DataSet dsResult = OverviewManager.LoadHostAbnormalRecordsAll(0); IList list = new List(); foreach (DataRow dr in dsResult.Tables[0].Rows) { list.Add(new { key1 = dr["Code"].ToString() + dr["Name"].ToString(), value1 = dr["RoomNumber"].ToString(), value2 = dr["AbnormalName"].ToString() }); } return Json(list, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取异常主机数据失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json("获取异常主机数据失败:" + ex.Message, JsonRequestBehavior.AllowGet); } } /// /// 到期提醒 /// /// public ActionResult GetExpireHotelsForTCV(int row) { ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com"); try { var hotels = this.SysHotelManager.LoadAll().Where(r => r.ValidateDate < DateTime.Now.AddMonths(1)).OrderBy(r => r.ValidateDate).Take(row).ToList(); IList list = new List(); foreach (SysHotel hotel in hotels) { list.Add(new { key1 = hotel.Code + hotel.Name, value1 = hotel.ValidateDate.ToString("yyyy年M月d日") }); } return Json(list, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取酒店到期提醒数据失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json("获取酒店到期提醒数据失败:" + ex.Message, JsonRequestBehavior.AllowGet); } } #endregion #region 微信小程序调用 /// /// 微信小程序获取手机号后台:第一步获取session_key /// /// /// /// /// public ActionResult GetSessionKey(string jsonData) { try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string code = jData["code"].ToString(); string appid = jData["appid"].ToString(); string secret = jData["secret"].ToString(); string html = string.Empty; string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code"; System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse; System.IO.Stream ioStream = response.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(ioStream, Encoding.UTF8); html = sr.ReadToEnd(); sr.Close(); ioStream.Close(); response.Close(); JObject jResult = (JObject)JsonConvert.DeserializeObject(html); return Json(new { IsSuccess = (jResult["errcode"] == null ? true : false), Result = html }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("小程序获取session_key失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 微信小程序获取手机号后台:第二步解释手机号 /// /// /// /// /// public ActionResult GetPhoneNumber(string jsonData) { try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string encryptedData = jData["encrypted_data"].ToString(); string iv = jData["iv"].ToString(); string session_key = jData["session_key"].ToString(); byte[] encryData = Convert.FromBase64String(encryptedData); System.Security.Cryptography.RijndaelManaged rijndaelCipher = new System.Security.Cryptography.RijndaelManaged(); rijndaelCipher.Key = Convert.FromBase64String(session_key); rijndaelCipher.IV = Convert.FromBase64String(iv); rijndaelCipher.Mode = System.Security.Cryptography.CipherMode.CBC; rijndaelCipher.Padding = System.Security.Cryptography.PaddingMode.PKCS7; System.Security.Cryptography.ICryptoTransform transform = rijndaelCipher.CreateDecryptor(); byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length); string result = Encoding.Default.GetString(plainText); dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic; if (jData["is_gethotelinfo"] == null || !Convert.ToBoolean(jData["is_gethotelinfo"].ToString())) { return Json(new { IsSuccess = true, Result = model.phoneNumber }, JsonRequestBehavior.AllowGet); } else { return GetHotelInfoForWX("{'phone':'" + model.phoneNumber + "'}"); } } catch (Exception ex) { logger.Error("小程序获取手机号失败:" + ex.ToString() + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 通过开房手机号获取对应酒店信息 /// /// /// public ActionResult GetHotelInfoForWX(string jsonData) { try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string phone = jData["phone"].ToString(); if (string.IsNullOrEmpty(phone)) { return Json(new { IsSuccess = false, Result = "手机号不能为空!" }, JsonRequestBehavior.AllowGet); } DataTable dtRecord = null; using (syncstatus.syncstatusSoapClient wsClient = new syncstatus.syncstatusSoapClient()) { dtRecord = wsClient.GetCodeAndRoomNumberByPhone(phone); if (dtRecord == null || dtRecord.Rows.Count == 0) { return Json(new { IsSuccess = false, Result = string.Format("该手机号[{0}]未找到当前开房记录!", phone) }, JsonRequestBehavior.AllowGet); } string code = dtRecord.Rows[0]["Code"].ToString(); string roomNumber = dtRecord.Rows[0]["RoomNumber"].ToString(); SysHotel sysHotel = SysHotelManager.GetByCode(code); if (sysHotel == null) { return Json(new { IsSuccess = false, Result = string.Format("酒店未知,或属于本地部署酒店[code={0}]", code) }, JsonRequestBehavior.AllowGet); } IList list = new List(); list.Add(new { code = sysHotel.Code, creatDate = sysHotel.CreatedDate, roomNumber = roomNumber, phone = phone }); return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { logger.Error("获取酒店信息(微信)失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } #endregion #region 绿云Opera pms对接 /// /// 按照绿云Opera PMS文档设计 /// /// /// public ActionResult OperaPMSToRCU() { Request.InputStream.Position = 0; byte[] reqBody = new byte[Request.InputStream.Length]; Request.InputStream.Read(reqBody, 0, reqBody.Length); string jsonData = System.Text.Encoding.UTF8.GetString(reqBody); //logger.Error("收到Opera数据:" + jsonData); try { OperaPMSRequest request = JsonConvert.DeserializeObject(jsonData);//得到PMS请求,ohotel中,集团代码:57173G,酒店代码:57173 string hotelCode; switch (request.hotelCode.ToUpper()) { case "57173": hotelCode = "1161"; break; case "YW-DEV": hotelCode = "1473"; break; default: hotelCode = request.hotelCode; break; } SysHotel hotel = SysHotelManager.GetByCode(hotelCode); if (hotel == null) { return Json(new { rescode = "0", resDesc = "无效酒店代码:" + request.hotelCode }, JsonRequestBehavior.AllowGet); } Host host = HostManager.GetByRoomNumber(request.rmno, hotel.ID); if (host == null) { return Json(new { rescode = "0", resDesc = "无效房号:" + request.rmno }, JsonRequestBehavior.AllowGet); } if (request.bizType == null) { return Json(new { rescode = "0", resDesc = "bizType不能为空" }, JsonRequestBehavior.AllowGet); } string validate = "8888";//微信验证码,默认身份证后四位 if (request.idNo != null && request.idNo.Length > 4) { validate = request.idNo.Substring(request.idNo.Length - 4); } switch (request.bizType.ToUpper()) { case "CHECKIN": HostManager.ChangeRoomStatus(host, 2, validate);//2:出租,4:待租,8:退房,16:空房 break; case "CHECKOUT": HostManager.ChangeRoomStatus(host, 8); break; case "RMCHG"://换房:先退房,再开房 Host hostOld = HostManager.GetByRoomNumber(request.oldRmno, hotel.ID); if (hostOld == null) { return Json(new { rescode = "0", resDesc = "无效旧房号:" + request.oldRmno }, JsonRequestBehavior.AllowGet); } HostManager.ChangeRoomStatus(hostOld, 8); HostManager.ChangeRoomStatus(host, 2, validate); break; default: HostManager.ChangeRoomStatus(host, 4);//待租 break; } SaveSystemLog(AuthorityID, request.bizType, request.rmno, true, "api", hotel.ID); return Json(new { rescode = "200", resDesc = "操作成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("Opera PMS对接RCU失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { rescode = "0", resDesc = "接口处理异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 绿云Opera pms对接 /// public class OperaPMSRequest { /// /// /// public DateTime arr { get; set; } /// /// 业务点 CHECKIN:入住(多人)CHECKOUT:退房(多人)RMCHG:换房(一人)MASTERCHG:主单信息修改(默认只发送续住)GUESTCHG:客人档案修改(默认只在客人姓名、手机号修改时触发发送) /// 注:CHECK-OUT时处理整个房间退房需要判断是否有同住人在住 /// public string bizType { get; set; } /// /// /// public DateTime dep { get; set; } /// /// /// public List extras { get; set; } /// /// /// public string firstName { get; set; } /// /// /// public string hotelCode { get; set; } /// /// /// public string hotelGroupCode { get; set; } /// /// /// public string language { get; set; } /// /// /// public string lastName { get; set; } /// /// /// public string masterId { get; set; } /// /// /// public string name { get; set; } /// /// /// public string profileNum { get; set; } /// /// /// public string rmno { get; set; } /// /// 原房号 换房(RMCHG)的时候才可选择进行发送 /// public string oldRmno { get; set; } /// /// /// public bool share { get; set; } /// /// /// public string workstationId { get; set; } /// /// 证件号 /// public string idNo { get; set; } ///// ///// oHotel中集团代码 ///// //public string hotelGroupCode { get; set; } ///// ///// 集团名称 ///// ////public string hotelGroupDescript { get; set; } ///// ///// oHotel中酒店代码(必需和Opera一致) ///// //public string hotelCode { get; set; } ///// ///// 酒店名称 ///// ////public string hotelDescript { get; set; } ///// ///// 酒店ID:同一集团下酒店唯一 ///// ////public long hotelId { get; set; } ///// ///// 客人ID:同一酒店下唯一。客人每次入住都会产生一个唯一标识,后面续住(MASTERCHG),退房(CHECKOUT),换房(RMCHG),修改信息(GUESTCHG),这个masterId都是不会变的.Opera订单号(resrvNameId) ///// //public long masterId { get; set; } ///// ///// 同住人标识:同住客人的Identifier是一致的,如果Identifier不一致,即使前后房号一致也不认为是同住客人。 ///// ////public long Identifier { get; set; } ///// ///// 团队标识 默认为0,标识非团队客人 ///// ////public long grpAccnt { get; set; } ///// ///// 联房标识 相同联房标识的,认为是同行客人 ///// ////public long linkId { get; set; } ///// ///// 业务点 CHECKIN:入住(多人)CHECKOUT:退房(多人)RMCHG:换房(一人)MASTERCHG:主单信息修改(默认只发送续住)GUESTCHG:客人档案修改(默认只在客人姓名、手机号修改时触发发送) ///// 注:CHECK-OUT时处理整个房间退房需要判断是否有同住人在住 ///// //public string bizType { get; set; } ///// ///// 全名 ///// //public string name { get; set; } ///// ///// 抵店时间 格式yyyy-MM-dd HH:mm:ss ///// //public string arr { get; set; } ///// ///// 离店时间 格式yyyy-MM-dd HH:mm:ss ///// //public string dep { get; set; } ///// ///// 房号 换房操作时,作为新房号使用 ///// //public string rmno { get; set; } ///// ///// 手机号 客人隐私,经过酒店同意才开放 ///// //public string mobile { get; set; } ///// ///// 订单类型(不使用此字段) ///// //public string rsvClass { get; set; } ///// ///// 名(英文/拼音) ///// //public string firstName { get; set; } ///// ///// 姓(英文/拼音) ///// //public string lastName { get; set; } ///// ///// 语种 未做特殊修改情况下:C – 中文,E – 英语,F – 法文,G – 德文,J – 日语,K – 韩文 ///// //public string language { get; set; } ///// ///// 性别 1男/2女 ///// ////public string sex { get; set; } ///// ///// VIP信息(Opera中数据,未作变换) ///// //public string vipStatus { get; set; } ///// ///// 额外字段(最多10项,字符串列表形式)DefRef1-DefRef10 ///// //public List extras { get; set; } /// /// 证件类型 未做特殊修改情况下:01:身份证,02:临时身份证,14:普通护照(列举3类常用,如需要不常用证件类型,可联系绿云项目经理提供) /// //public string idCode { get; set; } /// /// 邮箱 客人隐私,经过酒店同意才开放 /// //public string email { get; set; } /// /// 帐户类别 F=散客 G=团队 H=消费帐户 /// //public string rsvClass { get; set; } /// /// 预订人姓名 /// //public string rsvMan { get; set; } /// /// CRS订单号 /// //public string crsNo { get; set; } /// /// 手工单号 /// //public string rsvNo { get; set; } /// /// 房价 酒店隐私,经过酒店同意才开放 /// //public decimal realRate { get; set; } /// /// 业务发生时间 格式yyyy-MM-dd'T'HH:mm:ssZ /// //public string date { get; set; } /// /// 消费金额 退房(CHECKOUT)的时候才可选择进行发送 /// //public decimal pay { get; set; } } #endregion #region 若琪音箱对接 /// /// 若琪对接 /// /// public ActionResult RokidV2() { Request.InputStream.Position = 0; byte[] reqBody = new byte[Request.InputStream.Length]; Request.InputStream.Read(reqBody, 0, reqBody.Length); string reqData = System.Text.Encoding.Default.GetString(reqBody); try { Domain.Rokid.Request.RootRequest request = JsonConvert.DeserializeObject(reqData); string token = request.header.authorization.token; if (string.IsNullOrEmpty(token)) { return Json(returnError("token不能为空"), JsonRequestBehavior.AllowGet); } string hotelCode = token;//.Substring(0, token.IndexOf("BLW")); if (token.IndexOf("BLW") > -1) { hotelCode = token.Substring(0, token.IndexOf("BLW")); } SysHotel hotel = SysHotelManager.GetByCode(hotelCode);//根据酒店编码获取酒店 if (hotel == null) { logger.Error("获取指定酒店失败(" + hotelCode + ")"); return Json(returnError("获取指定酒店失败(" + hotelCode + ")"), JsonRequestBehavior.AllowGet); } if (DateTime.Now > hotel.ValidateDate)//酒店已到期 { return Json(returnError("当前访问酒店已过期"), JsonRequestBehavior.AllowGet); } switch (request.header.@namespace) { case "Rokid.Discovery": { IList hosts = HostManager.LoadAll(hotel.ID).Where(r => r.Status == true).ToList(); List endpoints = new List(); foreach (Host host in hosts) { //获取需要控制的场景 IList sceneModals = RoomTypeSceneManager.LoadAll().Where(r => r.RoomType.ID == host.RoomType.ID && r.ActiveIndicator).OrderBy(r => r.Sort).ToList(); foreach (RoomTypeScene scene in sceneModals) { endpoints.Add(new Domain.Rokid.Discovery.Endpoints { endpointId = host.ID.ToString() + "&" + scene.ID.ToString(), displayType = "scene", displayName = scene.Name, recommendRoomName = host.RoomNumber, recommendHomeName = hotel.Name + "(" + host.RoomNumber + ")", modelId = "", additionalInfo = new Domain.Rokid.Discovery.AdditionalInfo { key = "scene" }, capabilities = Domain.Rokid.Discovery.CustomerCapabilities.SwitchCapabilities(), states = new List { new Domain.Rokid.Discovery.States { @interface = "Switch", value = "Off", timeOfSample = DateTime.Now.ToString() } } }); } //获取需要控制的设备信息 IList hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.WXActiveIndicator).OrderBy(r => r.Modal.Type).ToList(); foreach (HostModal hostModal in hostModals) { string displayType = "light";//区分设备种类 List capabilities = Domain.Rokid.Discovery.CustomerCapabilities.SwitchCapabilities(); switch (hostModal.Modal.Type) { case DeviceType.Dimmer: case DeviceType.Traic: case DeviceType.Strip: case DeviceType.PWMDimmer: case DeviceType.PWMExpand: case DeviceType.PBLED: case DeviceType.LVout://弱电输出 case DeviceType.PB20: case DeviceType.PB20_LD: case DeviceType.PB20_LS: capabilities = Domain.Rokid.Discovery.CustomerCapabilities.BrightnessCapabilities(); break; case DeviceType.AirConditioner: //displayType = "ac"; capabilities = Domain.Rokid.Discovery.CustomerCapabilities.AirCapabilities(); break; case DeviceType.Curtain: //displayType = "curtain"; capabilities = Domain.Rokid.Discovery.CustomerCapabilities.MotionSwitchCapabilities(); break; } endpoints.Add(new Domain.Rokid.Discovery.Endpoints { endpointId = host.ID.ToString() + "&" + hostModal.Modal.ModalAddress, displayType = displayType, displayName = hostModal.Modal.Name, recommendRoomName = host.RoomNumber, recommendHomeName = hotel.Name + "(" + host.RoomNumber + ")", modelId = "", additionalInfo = new Domain.Rokid.Discovery.AdditionalInfo { key = displayType }, capabilities = capabilities, states = new List { new Domain.Rokid.Discovery.States { @interface = "Switch", value = hostModal.Status == 1 ? "On" : "Off", timeOfSample = DateTime.Now.ToString() } } }); } } Domain.Rokid.Discovery.DiscoveryResponse dis = new Domain.Rokid.Discovery.DiscoveryResponse { header = new Domain.Rokid.Discovery.Header { messageId = request.header.messageId, @namespace = "Rokid", name = "DiscoveryResponse", payloadVersion = "v1" }, payload = new Domain.Rokid.Discovery.Payload { endpoints = endpoints } }; logger.Error(string.Format("若琪(酒店:{0})本次获取设备数量:{1}", hotel.Code + hotel.Name, dis.payload.endpoints.Count.ToString())); return new ContentResult { Content = new System.Web.Script.Serialization.JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(dis), ContentType = "application/json" }; } default: { string endpointId = request.endpoint.endpointId; int hostID = Convert.ToInt32(endpointId.Split('&')[0]); Host host = HostManager.Get(hostID); if (host == null) { return Json(returnError("无效的主机,ID=" + hostID.ToString()), JsonRequestBehavior.AllowGet); } if (!Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { return Json(returnError("房号[" + host.RoomNumber + "]网络异常"), JsonRequestBehavior.AllowGet); } if (!CheckGetPower(host)) { return Json(returnError("房号[" + host.RoomNumber + "]非取电状态,不可控制!"), JsonRequestBehavior.AllowGet);//非取电状态,不可控制! } string modalAddress = endpointId.Split('&')[1]; string key = request.endpoint.additionalInfo.key;//区分设备种类 string name = request.header.name; List wxMenus = RoomTypeWXMenusManager.LoadAll(host.RoomType.ID).Where(r => r.ActiveIndicator == true).ToList(); //var takePowerModal = HostModalManager.GetByModalAddress(host.ID, "004000001"); switch (key) { case "scene"://场景类 //foreach (RoomTypeWXMenus wxMenu in wxMenus) //{ // if (wxMenu.Code == "changjing" && wxMenu.TakePower) // { // if (takePowerModal.Status != 1) // { // return Json(returnError("房号[" + host.RoomNumber + "]的取电未打开,不可控制"), JsonRequestBehavior.AllowGet); // } // break; // } //} //var wxMenu = RoomTypeWXMenusManager.LoadAll(host.RoomType.ID).Where(r => r.Code == "changjing" && r.ActiveIndicator == true).FirstOrDefault(); //if (wxMenu == null) //{ // return Json(returnError("房号[" + host.RoomNumber + "]的场景不能控制"), JsonRequestBehavior.AllowGet); //} //else if (wxMenu.TakePower) //{ // var takePowerModal = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ModalAddress == "004000001").FirstOrDefault(); // if (takePowerModal.Status != 1) // { // return Json(returnError("房号[" + host.RoomNumber + "]的取电未打开,不可控制"), JsonRequestBehavior.AllowGet); // } //} if (!CheckGetPower(host)) { return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet); } var scene = RoomTypeSceneManager.Get(int.Parse(modalAddress)); if (scene == null) { return Json(returnError("房号[" + host.RoomNumber + "]无效的场景,ID=" + modalAddress), JsonRequestBehavior.AllowGet); } LightControlManager.ApplyScene(host, scene); SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), string.Format("打开客房({0})场景:{1},ID:{2}", host.RoomNumber, scene.Name, scene.ID), true, "若琪", host.SysHotel.ID); break; default: var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress); if (hostModal == null) { return Json(returnError("房号[" + host.RoomNumber + "]无效的设备,ModalAddress=" + modalAddress), JsonRequestBehavior.AllowGet); } int status, brightness, temperature, fanSpeed, mode, valve; status = 1; brightness = hostModal.Brightness; temperature = hostModal.SettingTemp; fanSpeed = hostModal.FanSpeed; mode = hostModal.Mode; valve = hostModal.Valve; switch (name) { case "Switch.On"://打开,亮度100 case "Brightness.SetMax": brightness = 100; break; case "Switch.Off"://关闭,亮度0 status = 2; brightness = 0; break; case "Brightness.SetMin"://最小亮度 brightness = 1; break; case "Brightness.Set"://设定亮度 brightness = Convert.ToInt16(request.payload.value); break; case "Brightness.Adjust"://调节亮度 if (request.payload.delta == -1) { brightness++;//下调 } else { brightness--;//上调 } break; case "MotionSwitch.Off"://窗帘停下 status = 6; break; case "Temperature.Set"://设定温度 int value = Convert.ToInt16(request.payload.value); if (15 < value && value < 33) { temperature = value; } break; case "Temperature.SetMax"://设定最大温度 temperature = 32; break; case "Temperature.SetMin"://设定最小温度 temperature = 16; break; case "Temperature.Adjust"://调节温度 if (request.payload.delta == -1) { temperature = 15;//下调 } else { temperature = 33;//上调 } break; case "FanSpeed.Set"://自动风速 fanSpeed = 0; break; case "FanSpeed.SetMin"://低风速 fanSpeed = 1; break; case "FanSpeed.Adjust"://中风速 fanSpeed = 2; break; case "FanSpeed.SetMax"://高风速 fanSpeed = 3; break; case "Mode.Auto"://自动模式 mode = 0; break; case "Mode.Cool"://制冷模式 mode = 1; break; case "Mode.Heat"://制热模式 mode = 2; break; case "Mode.Fan"://送风模式 mode = 3; break; } HostModalManager.SetDevice(host, hostModal, status, brightness, temperature, fanSpeed, mode, valve); string action = "打开"; if (status == 2) { action = "关闭"; } else if (status == 6) { action = "暂停"; } string detail = string.Format("{0}客房{1}{2}({3})", action, host.RoomNumber, hostModal.Modal.Name, modalAddress); SaveSystemLog(AuthorityID, "设备控制", detail, true, "若琪", host.SysHotel.ID); break; } //回应状态 Domain.Rokid.Control.ControlResponse con = new Domain.Rokid.Control.ControlResponse { header = new Domain.Rokid.Control.Header { messageId = request.header.messageId, @namespace = "Rokid", name = "Response", payloadVersion = "v1" }, endpoint = new Domain.Rokid.Control.Endpoint { endpointId = endpointId, states = new List() }, payload = new Domain.Rokid.Control.Payload { } }; return Json(con, JsonRequestBehavior.AllowGet); } } } catch (Exception ex) { logger.Error(string.Format("RequestData:{0},error:{1},来自:{2}", reqData, ex.ToString(), GetClientIP())); return Json(returnError(ex.Message), JsonRequestBehavior.AllowGet); } } /// /// 给若琪返回错误信息 /// /// /// private Domain.Rokid.Error.ErrorResponse returnError(string message) { Domain.Rokid.Error.ErrorResponse err = new Domain.Rokid.Error.ErrorResponse { header = new Domain.Rokid.Error.Header { messageId = "789-123", @namespace = "Rokid", name = "ErrorResponse", payloadVersion = "v1" }, payload = new Domain.Rokid.Error.Payload { name = "E_DRIVER_ERROR", message = message } }; return err; } #endregion #region 提供给PDU平台调用 /// /// /// /// public ActionResult GetRCUInfoForPDU(string jsonData) { try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) { return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } string roomNumber = ""; if (jData["roomNumber"] != null) { roomNumber = jData["roomNumber"].ToString(); } IList hosts = HostManager.LoadAll(hotelID, roomNumber).OrderBy(r => r.RoomNumber).ToList(); IList list = new List(); foreach (Host host in hosts) { IList hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.ActiveIndicator).ToList(); IList lstModals = new List(); foreach (HostModal modal in hostModals) { lstModals.Add(new { Type = Common.Tools.GetDescription(modal.Modal.Type), //回路类型 ModalAddress = modal.Modal.ModalAddress, //回路地址 Name = modal.Modal.Name//回路名称 }); } list.Add(new { Code = host.SysHotel.Code,//酒店编码 HotelName = host.SysHotel.Name, HostNumber = host.HostNumber, RoomNumber = host.RoomNumber,//房号 Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC),//是否在线 MAC = host.MAC,//MAC GroupName = host.Group.Name, RoomTypeName = host.RoomType.Name,//房态 //IPType = host.IPType,//IP类型:1自动,2手动 //IP = host.IP,//IP //Port = host.Port,//端口 LanIP = host.LanIP,//局域网IP LanPort = host.LanPort,//局域网端口 SubnetMask = host.SubnetMask,//子网掩码 Gateway = host.Gateway,//网关 DNS = host.DNS,//DNS Version = host.Version,//固件版本 ConfigVersion = host.ConfigVersion,//配置版本 Model = host.Model,//Model Launcher = host.LauncherVersion,//Launcher版本 XiaoDuCUID = host.XiaoDuCUID,//小度cuid TianMaoCUID = host.TianMaoCUID,//天猫精灵cuid TCLCUID = host.TCLCUID,//tcl cuid Modals = lstModals//回路列表(类型、地址、名称) }); } //return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); object result = new { IsSuccess = true, Result = list }; return new ContentResult { Content = new System.Web.Script.Serialization.JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(result), ContentType = "application/json" }; } catch (Exception ex) { logger.Error("获取主机状态失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } #endregion /// /// 通知后台有新的升级包 /// /// /// public ActionResult PublishUpgradePackage(string jsonData) { return Json(new { IsSuccess = true, Result = "接口调整中" }, JsonRequestBehavior.AllowGet); /*try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); int roomTypeID = Convert.ToInt16(jData["roomTypeID"].ToString());//房型ID int type = Convert.ToInt16(jData["type"].ToString());//1:固件升级bin或hex,2:配置升级dat string version = jData["version"].ToString();//版本号 logger.Error("收到通知后台有新的升级包:" + jsonData); return Json(new { IsSuccess = true, Result = "通知成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("通知后台有新的升级包失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); }*/ } /// /// 上报房型回路:每次上报一个房型 /// /// /// public ActionResult UploadRoomTypeModal() { //return Json(new { IsSuccess = true, Result = "接口调整中" }, JsonRequestBehavior.AllowGet); Request.InputStream.Position = 0; byte[] reqBody = new byte[Request.InputStream.Length]; Request.InputStream.Read(reqBody, 0, reqBody.Length); string reqData = System.Text.Encoding.UTF8.GetString(reqBody); if (string.IsNullOrEmpty(reqData)) { return Json(new { IsSuccess = false, Result = "传递参数不能为空" }, JsonRequestBehavior.AllowGet); } logger.Error("收到上报房型回路数据:");// + reqData); try { List lstRTModels = JsonConvert.DeserializeObject>(reqData); if (lstRTModels == null || lstRTModels.Count == 0) { return Json(new { IsSuccess = false, Result = "上报回路记录为空" }, JsonRequestBehavior.AllowGet); } /*int roomTypeID = lstRTModels[0].RoomType.ID; RoomType rt = RoomTypeManager.Get(roomTypeID);//获取当前房型 if (rt == null) { return Json(new { IsSuccess = false, Result = "未找到对应的房型,ID=" + roomTypeID }, JsonRequestBehavior.AllowGet); } RoomTypeModalManager.DeleteByRoomTypeID(rt.ID, 1);//先删除该房型下所有宝易上传的回路 foreach (RoomTypeModal rtModal in lstRTModels) { var roomTypeModal = new RoomTypeModal(); roomTypeModal.RoomType = rt;//房型对象(提供房型ID即可) roomTypeModal.ModalAddress = rtModal.ModalAddress;//回路地址 roomTypeModal.Name = rtModal.Name;//回路名称 roomTypeModal.Type = rtModal.Type;//回路类型 roomTypeModal.Outlet = rtModal.Outlet;//输出口 //roomTypeModal.EnglishName = rtModal.EnglishName;//英文名称 //roomTypeModal.TWName = rtModal.TWName;//繁体名称 roomTypeModal.Power = rtModal.Power;//功率 roomTypeModal.Default = false; roomTypeModal.Subtype = null; roomTypeModal.Sort = 1; roomTypeModal.Color = ""; roomTypeModal.ActiveIndicator = true;//新增时默认显示 roomTypeModal.WXActiveIndicator = true;//只要显示,微信默认允许控制 roomTypeModal.SourceType = 1;//宝易上传 RoomTypeModalManager.Save(roomTypeModal);//新增房型下单个回路 }*/ return Json(new { IsSuccess = true, Result = "上报成功,总回路数:" + lstRTModels.Count }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("上报房型回路失败。参数:" + reqData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } public ActionResult GetAllKTMission() { List kl = HostManager.GetInitializeKTMission(); return Json(kl, JsonRequestBehavior.AllowGet); } public ActionResult AirConditionTimer(string jsonData) { logger.Error("shou dao le shu ju: " + jsonData); if (!string.IsNullOrEmpty(jsonData)) { var jf = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonData); HostManager.AirConditionTimer_Controller(jf.KT.HotelID, jf.KT.HotelCode, jf.KT.CreateDate, jf.KT.HostID, jf.KT.RoomNo, jf.KT); } return null; } /// /// 这个接口可以实现定时任务 /// 调用任务管理器 /// 传入以下json 或者 formdat:a /// %{"url"=>url,"mission_key" => mission_key,"mission_name"=>mission_name,"cron_exp"=>cron_exp} /// /// [HttpPost()] public ActionResult AirConditionTimerPost() { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); //req = Server.UrlDecode(req); logger.Error("shou dao le shu ju: " + jsonData); if (!string.IsNullOrEmpty(jsonData)) { var jf = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonData); HostManager.AirConditionTimer_Controller(jf.KT.HotelID, jf.KT.HotelCode, jf.KT.CreateDate, jf.KT.HostID, jf.KT.RoomNo, jf.KT); } return null; } public ActionResult jiekou_test() { HttpContext.Cache.Remove("auuuuhfjkdshee"); HostManager.LoggerTest();//2:出租,4:待租,8:退房,16:空房 return Json(new { rescode = "200", resDesc = "操作成功" }, JsonRequestBehavior.AllowGet); } /// /// 获取节能模式数据 /// /// [HttpPost()] public ActionResult GetECOList() { var ll = HostManager.Get_ECOList(); return Json(ll); } /// /// 节能模式接口 /// /// 任务管理 系统 在规定时间段内, 每隔一段时间会向这边发送一条指令 /// /// [HttpPost()] public ActionResult StartAll_ECO_Mission() { string hotelid = Request.Form["hotelid"]; string key = Request.Form["key"]; HostManager.ECO_Execute(hotelid); return Json(new { status = "sucess" }); } public static readonly string AirReport_Address = ConfigurationManager.AppSettings["baojing_airreport_address"]; public static readonly string baojing_airreport_key = ConfigurationManager.AppSettings["baojing_airreport_key"]; [HttpPost()] public ActionResult GetAirDetectListPost() { Task.Factory.StartNew(() => { try { List listdata = GetPrepareData(); var QQQ = listdata.GroupBy(A => new { A.HotelID, A.HotelCode, A.RoomNumber, A.CreatDate }); foreach (var itemKey in QQQ) { var item = itemKey.Key; string roomNumber = item.RoomNumber; string code = item.HotelCode; string createDate = item.CreatDate; DateTime dts = DateTime.Parse(createDate); string cd = dts.ToString("yyyy-MM-dd"); Host host = CheckRoomNumber(code, cd, ref msg, ref hotelID, roomNumber); if (host == null) { logger.Error("host not exists hotelcode: " + code + " createDate: " + cd + " roomnumber: " + roomNumber); continue; //return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); } if (host != null) { var hostModals = HostModalManager.Load(host.ID, DeviceType.AirDetect).Where(r => r.Modal.WXActiveIndicator); TimeSpan ts = DateTime.Now.ToLocalTime() - new DateTime(1970, 1, 1, 8, 0, 0, 0, DateTimeKind.Utc); string current_timestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); KongQiReport re = new KongQiReport(); re.hotel_code = code; re.room_no = roomNumber; re.time = current_timestamp; string md5key = Tools.MD5Encrypt(baojing_airreport_key); //hotel_code=酒店编码&time=时间戳&key=密钥 string sss = string.Format("hotel_code={0}&time={1}&key={2}", code, current_timestamp, md5key); //logger.Error("sss is: " + sss); string sign = Tools.MD5Encrypt(sss).ToLower(); re.sign = sign; foreach (HostModal modal in hostModals) { //string Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName); string ModalAddress = modal.Modal.ModalAddress; string status = modal.Brightness.ToString(); string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + ModalAddress; var obj = CSRedisCacheHelper.Get_Partition(KKey); if (obj != null) { HostModal_Cache hhh = obj as HostModal_Cache; status = hhh.Brightness.ToString(); } switch (ModalAddress) { case "009000001"://CO2浓度 ppm re.co2 = status; break; case "009000002"://甲醛浓度 ug/m3 实际显示单位为mg/M3 re.methanal = status; break; case "009000003"://TVOC浓度 ug/m3 实际显示单位为mg/M3 re.tvoc = status; break; case "009000004"://PM2.5浓度 ug/m3 re.pm25 = status; break; case "009000005"://PM10浓度 ug/m3 re.pm10 = status; break; case "009000006"://温度 度 re.temperature = status; break; case "009000007"://湿度 %RH re.humidness = status; break; default: break; } } //list{Name(名称),ModalAddress(回路 地址),Brightness, Status(对应值)} var client1 = new RestClient(AirReport_Address); var request1 = new RestRequest("/rcu/v1/air", Method.POST); request1.RequestFormat = DataFormat.Json; //string json = Newtonsoft.Json.JsonConvert.SerializeObject(re); //logger.Error("空气质量送了数据:" + AirReport_Address+" data: "+json); request1.AddJsonBody(re); client1.ExecuteAsync(request1, (response) => { string result = response.Content; //logger.Error("空气质量返回了:"+result); }); } } } catch (Exception ex) { logger.Error(ex.Message + ex.StackTrace); //return Json(new { IsSuccess = false, Result = ex.Message }, JsonRequestBehavior.AllowGet); } }); return Json(new { IsSuccess = true, Result = "sucess" }, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult GetAirDetectPrepareData() { List list = GetPrepareData(); return Json(list); } private List GetPrepareData() { string Key = "AirDetectPrepareData"; List list = new List(); bool re = CSRedisCacheHelper.Contains(Key); if (re) { list = CSRedisCacheHelper.Get>(Key); } else { var ddd = SysHotelManager.GetNeedData(); CSRedisCacheHelper.Set(Key, ddd); list = ddd; } return list; } /// /// ECO重置 接口 /// /// [HttpPost()] public ActionResult ECO_Reset() { HostManager.Zero_Refresh(); return Json(new { }); } [HttpPost()] public ActionResult webChatLoadHostByRoomType() { string a = Request.Form["hotelid"].ToString(); string b = Request.Form["roomTypeID"].ToString(); int hotelid, roomTypeID = 0; int.TryParse(a, out hotelid); int.TryParse(b, out roomTypeID); object ooobj = Request.Form["roomNumber"]; IList lists = null; if (ooobj != null) { string c = ooobj.ToString(); //根据房型获取所有主机ID lists = HostManager.LoadHostByRoomTypeChengZiHao(hotelid, roomTypeID, c); } else { lists = HostManager.LoadHostByRoomType(hotelid, roomTypeID); } IList result = new List(); foreach (var list in lists) { object[] ooo = (object[])list; result.Add(new { ID = ooo[0], RoomNumber = ooo[2], Status = CSRedisCacheHelper.Contains(ooo[1].ToString(), ooo[3].ToString()), MAC = ooo[3], Model = ooo[5], Launcher = ooo[6], Version = ooo[7], ConfigVersion = ooo[8], UpgradeStatus = ooo[10] == null ? "" : ooo[9], UpgradeTime = ooo[10] == null ? "" : Convert.ToDateTime(ooo[10]).ToString("yyyy-MM-dd HH:mm:ss"), LanIP = ooo[11], LanPort = ooo[12], TypeNumber = ooo[13] }); } var LLL = GetShengJiWenJianFileName(hotelid, roomTypeID); return Json(new { IsSuccess = true, HostData = result, updateFile = LLL }); } private static string tool_sync_url_base_url = System.Configuration.ConfigurationManager.AppSettings["tool_sync_url_base_url"]; private List> GetShengJiWenJianFileName(int hotelid, int roomTypeID) { var client1 = new RestClient(tool_sync_url_base_url); var request1 = new RestRequest("/Upgrade/GetFileName", Method.POST); //注意方法是POST //两个参数名字必须是 topic 和payload ,区分大小写的 request1.AddParameter("hotel_id", hotelid); request1.AddParameter("room_type_id", roomTypeID); //[ // { // "HOTEL_OLD_ID": 98, // "ROOM_TYPE_OLD_ID": 4356, // "CONFIG_BIN": "15_Config-1085-宝来威体验厅-研发部-250109154719.dat", // "App_Cfg_For_L2": "", // "App_Cfg_For_L4": "C1F_A_L4_40_250109_NM.hex", // "Hex_Code_For_L2": "", // "Hex_Code_For_L4": "", // "APPTYPE": "App_Cfg", // "Cfg_Type": "CFG_TYPE_BLV_STUDIO", // "LUNCHER_HEX": "" // } //] var response = client1.Execute(request1); string sss = response.Content; var fileNames = Newtonsoft.Json.JsonConvert.DeserializeObject>>(sss); return fileNames; } [HttpPost()] public ActionResult GetUpdatedFile() { string strroomTypeID = Request.Form["roomTypeID"].ToString(); int a = 0; int.TryParse(strroomTypeID, out a); HostUpdateController h = new HostUpdateController(); return h.GetUpdatedFile(a); } private static string get_update_url = System.Configuration.ConfigurationManager.AppSettings["get_update_url"]; #region 微信升级 /// ///upgradefileName 后缀有要:求 /// /// [HttpPost()] public ActionResult WebChatUpgrade() { try { string b = Request.Form["roomTypeID"].ToString(); if (string.IsNullOrEmpty(b)) { return Json(new { IsSuccess = false, Data = "roomTypeID不能为空" }); } string host_list_str = Request.Form["hostid_lists"].ToString(); string fileName = Request.Form["upgradefileName"].ToString(); if (string.IsNullOrEmpty(host_list_str)) { return Json(new { IsSuccess = false, Data = "hostid_lists不能为空" }); } int roomTypeID = 0; int.TryParse(b, out roomTypeID); logger.Error("微信端开始升级: " + fileName + " " + roomTypeID + " host_list: " + host_list_str); var host_list = Newtonsoft.Json.JsonConvert.DeserializeObject>(host_list_str); //让服务器获取升级文件 HostUpdateController.GetUpdateFileByRoomTypeID(roomTypeID); string lll = JsonConvert.SerializeObject(host_list); HostUpdateController hh = new HostUpdateController(); logger.Error("开始升级: " + fileName + " host_list: " + lll); //升级 hh.ShengJI_NEW(host_list, fileName, HostManager); return Json(new { IsSuccess = true, Data = "正在升级,请等待……" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Data = ex.Message }); } } [HttpPost()] public ActionResult QueryUpdateHostProgressBar(string HostIDList) { try { var Q = new List(); List LLL = JsonConvert.DeserializeObject>(HostIDList); foreach (int item in LLL) { string Key = CacheKey.UPGradeProgressBar + "_" + item.ToString(); var DDD = CSRedisCacheHelper.Get(Key); if (DDD != null) { Q.Add(DDD); } } return Json(new { IsSuccess = true, Response = Q }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("ReleaseUpgradeFailedBecause") + ex.Message }); } } [HttpPost()] public ActionResult QueryUpdateHostStatus(int HotelID, int roomTypeID) { try { var lists = HostManager.LoadHostByRoomType(HotelID, roomTypeID);//ID,HostNumber,RoomNumber,MAC,RoomTypeID,Model,LauncherVersion,Version,ConfigVersion,UpgradeStatus,UpgradeTime IList result = new List(); foreach (var list in lists) { result.Add(new { ID = ((object[])list)[0], Status = CSRedisCacheHelper.Contains(((object[])list)[1].ToString(), ((object[])list)[3].ToString()), RoomNumber = ((object[])list)[2], MAC = ((object[])list)[3], //RoomType = host.RoomType.Name, Model = ((object[])list)[5], Launcher = ((object[])list)[6], Version = ((object[])list)[7], ConfigVersion = ((object[])list)[8], UpgradeStatus = ((object[])list)[10] == null ? "" : ((object[])list)[9], UpgradeTime = ((object[])list)[10] == null ? "" : Convert.ToDateTime(((object[])list)[10]).ToString("yyyy-MM-dd HH:mm:ss") }); } var QQQ = result.ToList(); QQQ.Sort(); return Json(new { total = result.Count, rows = QQQ }); //var statusList = HostUpdateStatusManager.LoadAll().Where(r => r.HostUpdate.ID == hostUpdateID).Select(r => new { id = r.ID, hostID = r.Host.ID, status = r.Status }); //return Json(new { IsSuccess = true, Data = statusList }); } catch (Exception ex) { logger.Error(HttpContext.InnerLanguage("ReleaseUpgradeFails"), ex); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("ReleaseUpgradeFailedBecause") + ex.Message }); } } #endregion #region 监控 [HttpPost()] public ActionResult Monitor_Host_Handle() { string Key = CacheKey.Key; string Data = Request.Form["data"].ToString(); string AddOrRemove = Request.Form["add_remove"].ToString(); List lll = Newtonsoft.Json.JsonConvert.DeserializeObject>(Data); lll.RemoveAll(A => string.IsNullOrEmpty(A.Key_HostNumber)); var qqq = CSRedisCacheHelper.ForeverGet>(Key); if (qqq == null) { var list = new List(); CSRedisCacheHelper.Forever>(Key, list); } qqq = CSRedisCacheHelper.ForeverGet>(Key); string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if (AddOrRemove.Equals("add")) { foreach (var item in lll) { item.CreateDateTime = ti; //bool bf = qqq.Any(A => A.HotelCode.Equals(item.HotelCode) && item.RoomNumber.Equals(A.RoomNumber)); bool bf = qqq.Any(A => { string AAA = A.HotelCode; string BBB = A.Key_HostNumber; if (!string.IsNullOrEmpty(AAA) && !string.IsNullOrEmpty(BBB)) { return AAA.Equals(item.HotelCode) && BBB.Equals(item.Key_HostNumber); } return false; }); if (bf == false) { qqq.Add(item); } else { qqq.RemoveAll(A => A.HotelCode.Equals(item.HotelCode) && A.Key_HostNumber.Equals(item.Key_HostNumber)); qqq.Add(item); } } CSRedisCacheHelper.Forever>(Key, qqq); } else if (AddOrRemove.Equals("remove")) { foreach (var item in lll) { string item_h = item.HotelCode; string item_r = item.RoomNumber; string hostnumber = item.Key_HostNumber; if (!string.IsNullOrEmpty(item_h) && !string.IsNullOrEmpty(item_r) && !string.IsNullOrEmpty(hostnumber)) { qqq.RemoveAll(A => !string.IsNullOrEmpty(A.HotelCode) && A.HotelCode.Equals(item_h) && !string.IsNullOrEmpty(A.Key_HostNumber) && A.Key_HostNumber.Equals(hostnumber)); } } CSRedisCacheHelper.Forever>(Key, qqq); } return Json(new { IsSuccess = true, Data = "" }); } [HttpPost()] public ActionResult GetAll_MonitorHost() { string Key = CacheKey.Key; var qqq = CSRedisCacheHelper.ForeverGet>(Key); if (qqq == null) { qqq = new List(); } qqq = qqq.OrderBy(A => A.HotelCode).ToList(); return Json(qqq); } [HttpPost()] public ActionResult IOT_Monitor_Host_Handle() { string Key = CacheKey.IOTKey; string Data = Request.Form["data"].ToString(); string AddOrRemove = Request.Form["add_remove"].ToString(); List lll = Newtonsoft.Json.JsonConvert.DeserializeObject>(Data); var qqq = CSRedisCacheHelper.ForeverGet>(Key); if (qqq == null) { var list = new List(); CSRedisCacheHelper.Forever>(Key, list); } qqq = CSRedisCacheHelper.ForeverGet>(Key); string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if (AddOrRemove.Equals("add")) { foreach (var item in lll) { item.CreateDateTime = ti; bool bf = qqq.Any(A => A.HotelCode.Equals(item.HotelCode) && item.RoomNumber.Equals(A.RoomNumber)); if (bf == false) { qqq.Add(item); } else { qqq.RemoveAll(A => A.HotelCode.Equals(item.HotelCode) && A.RoomNumber.Equals(item.RoomNumber)); qqq.Add(item); } } CSRedisCacheHelper.Forever>(Key, qqq); } else if (AddOrRemove.Equals("remove")) { foreach (var item in lll) { string item_h = item.HotelCode; string item_r = item.RoomNumber; qqq.RemoveAll(A => A.HotelCode.Equals(item_h) && A.RoomNumber.Equals(item_r)); } CSRedisCacheHelper.Forever>(Key, qqq); } return Json(new { IsSuccess = true, Data = "" }); } [HttpPost()] public ActionResult IOT_GetAll_MonitorHost() { string Key = CacheKey.IOTKey; var qqq = CSRedisCacheHelper.ForeverGet>(Key); if (qqq == null) { qqq = new List(); } qqq = qqq.OrderBy(A => A.HotelCode).ToList(); return Json(qqq); } #endregion [HttpPost()] public ActionResult RedisTest() { string Data = Request.Form["data"].ToString(); string AddOrRemove = Request.Form["add_remove"].ToString(); CSRedisCacheHelper.Forever(Data, AirReport_Address); return Json("hello"); } [HttpPost()] public bool CheckGetTakePower() { int hostid = 0; int.TryParse(Request.Form["hostid"].ToString(), out hostid); //string hotel_code = ""; //string createDate = ""; //string roomNumber = ""; //hotel_code= Request.Form["code"].ToString(); //roomNumber= Request.Form["roomNumber"].ToString(); //createDate= Request.Form["createDate"].ToString(); //Host host = CheckRoomNumber(hotel_code, createDate, ref msg, ref hotelID, roomNumber); //if (host == null) //{ // return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); //} //DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); //Dictionary dic = new Dictionary(); HostModal hostModal = HostModalManager.LoadByHostID(hostid).Where(r => r.Modal.ActiveIndicator == true && r.Modal.ModalAddress == "004000001").FirstOrDefault(); if (hostModal != null && hostModal.Status != 1) { //DateTime dt = hostModal.UpdateTime.Value; //dic.Add("HostID", hostid.ToString()); //dic.Add("TakeCard_Status", "true"); //dic.Add("LastDateTime", dt.ToString("yyyy-MM-dd HH:mm:ss")); return true; } else { return false; } //return Json(new { IsSuccess = false, Result = dic }, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult SetRoomCard() { return null; } public static string FCSLoginUrl = ConfigurationManager.AppSettings["FCSLoginUrl"]; public static string FCSLoginUserName = ConfigurationManager.AppSettings["FCSLoginUserName"]; public static string FCSLoginPassWord = ConfigurationManager.AppSettings["FCSLoginPassWord"]; #region FCS数据推送 [HttpPost()] public ActionResult GetFCSTokenPost() { try { var client1 = new RestClient(FCSLoginUrl); var request1 = new RestRequest("/api/security/authenticate", Method.POST); Dictionary dic = new Dictionary(); User us = new User(); us.username = FCSLoginUserName; us.password = FCSLoginPassWord; us.oauth_id = 1; request1.AddJsonBody(us); var QQQ = client1.Execute(request1); string ddd = QQQ.Content; var FFFA = Newtonsoft.Json.JsonConvert.DeserializeObject(ddd); string TokenKey = CacheKey.FCSToken; CSRedisCacheHelper.Set_Partition(TokenKey, FFFA, 1); } catch (Exception) { } return null; } /// /// 每隔30分钟去查询一下设备是否在线和离线 /// /// 查询的时候根据locationUUID /// /// [HttpPost()] public ActionResult GetFCS_RCU_Status() { try { var QQQ = SysHotelManager.LoadFCS_PushData(); foreach (var item in QQQ) { var PPP = HostManager.LoadAll().Where(A => A.IsDeleted == false && !string.IsNullOrEmpty(A.FCS_locationUUID)).ToList(); foreach (Host itemT in PPP) { //根据酒店hotelcode string code = itemT.SysHotel.Code; string roomno = itemT.RoomNumber; string locationUUID = itemT.FCS_locationUUID; string hostNumber = itemT.HostNumber; string MAC = itemT.MAC; string PropertyUUID = itemT.SysHotel.FCS_PropertyID; string FCS_RCU_Device_Offline = itemT.SysHotel.FCS_RCU_Device_Offline; string FCSLoginUrl = itemT.SysHotel.FCSLoginUrl; string FCSLoginUserName = itemT.SysHotel.FCSLoginUserName; string FCSLoginPassWord = itemT.SysHotel.FCSLoginPassWord; string FCS_Carbon_UUID = itemT.SysHotel.FCS_Carbon_UUID; string FCS_SOS_UUID = itemT.SysHotel.FCS_SOS_UUID; string FCS_Clean_UUID = itemT.SysHotel.FCS_Clean_UUID; string FCS_MenCi_Open = itemT.SysHotel.FCS_MenCi_Open; string FCS_MenCi_Close = itemT.SysHotel.FCS_MenCi_Close; string FCS_RCU_Online = itemT.SysHotel.FCS_RCU_Online; string FCS_RCU_Offline = itemT.SysHotel.FCS_RCU_Offline; var aaa = Common.CSRedisCacheHelper.Contains(Convert.ToString(hostNumber), MAC); string KKK = "GetFCS_RCU_Status_" + hostNumber + "_" + MAC; var Q = CSRedisCacheHelper.Get_Partition(KKK); //如果在线 if (aaa) { if (!string.IsNullOrEmpty(Q)) { if (Q.Equals("offline")) { RR.FCS_PushData(FCS_RCU_Online, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno); } } else { CSRedisCacheHelper.Set_Partition(KKK, "online"); RR.FCS_PushData(FCS_RCU_Online, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno); } } else { if (!string.IsNullOrEmpty(Q)) { if (Q.Equals("offline")) { RR.FCS_PushData(FCS_RCU_Offline, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno); } } else { CSRedisCacheHelper.Set_Partition(KKK, "offline"); RR.FCS_PushData(FCS_RCU_Offline, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno); } } } } } catch (Exception) { } return null; } /// /// 获取 FCS 清理触发的 订单表 /// /// [HttpPost()] public ActionResult GetFCSClean_OrderList() { try { string Key = CacheKey.FCSToken; var TokenTakeOut = CSRedisCacheHelper.Get_Partition(Key, 1); if (TokenTakeOut == null) { return Json(new { Status = "ok", Message = "NoData" }, JsonRequestBehavior.AllowGet); } var dic = CSRedisCacheHelper.HMGetAll(3, CacheKey.FCSOrder); foreach (var item in dic) { var OrderData = JsonConvert.DeserializeObject(item.Value); var CleanUUID = OrderData.ItemUUID; var HostNUMBER = OrderData.HostNUMBER; var PropertyID = OrderData.PropertyID; var LocationUUID = OrderData.LocationUUID; string vvv = string.Format("= ''{0}''", LocationUUID); QueryFCSOrder ooo = new QueryFCSOrder(); ooo.filter = ""; ooo.column_filter = new OrderQueryItem() { field = "location_uuid", value = new List() { vvv } }; var client1 = new RestClient(FCSLoginUrl); var request1 = new RestRequest("/job/status", Method.POST); request1.AddHeader("token", TokenTakeOut.data.access_token); request1.AddHeader("property", PropertyID); request1.AddJsonBody(ooo); var QQQ = client1.Execute(request1); string ddd = QQQ.Content; var FFFA = Newtonsoft.Json.JsonConvert.DeserializeObject(ddd); var D1 = FFFA.data.FirstOrDefault(A => A["item_uuid"].Equals(CleanUUID)); if (D1 != null) { string V = ""; D1.TryGetValue("job_status", out V); if (V.Equals("cancelled")) { Host host = new Host(); host.HostNumber = HostNUMBER; HostModal s = new HostModal(); s.Modal = new RoomTypeModal() { ModalAddress = "004000003", Type = DeviceType.ServiceInfo }; HostModalManager.SetDevice(host, s, 0, 0); } } } } catch (Exception ex) { logger.Error("GetFCSClean_OrderList"); logger.Error(ex.Message); logger.Error(ex.StackTrace); } return null; } #endregion #region 创维电视,创维电视接口必须要在Api路径下 [HttpPost()] public ActionResult login() { ReturnInfo r = new ReturnInfo(); try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); var user = JsonConvert.DeserializeObject(jsonData); var user1 = SysUserManager.Get(user.username, user.password); //if (user.username.Equals("chuangwei") && user.password.Equals("123456")) if (user1 != null) { r = SignKeyCommon.GetTokenData(user.username); } //if (user != null) //{ //} else { r.code = 10009; r.msg = "登录失败,用户名或者密码不正确"; } } catch (Exception ex) { r.code = 500; r.msg = ex.Message; } return Json(r, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult refreshToken() { ReturnInfo Re = new ReturnInfo(); try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); JWTData JJJ = null; int code = 0; string msg = ""; var dic = JsonConvert.DeserializeObject>(jsonData); if (dic != null) { string retoken = dic["refreshToken"]; var T = SignKeyCommon.TokenValidate(retoken, out JJJ, out code, out msg); if (T) { Re = SignKeyCommon.GetTokenData(JJJ.username); } else { Re.msg = msg; Re.code = code; } } else { code = 10021; msg = "非法token"; } } catch (Exception ex) { Re.code = 500; Re.msg = ex.Message; } return Json(Re, JsonRequestBehavior.AllowGet); } #endregion #region TCL电视 [HttpPost()] public ActionResult GetTCLLoginToken() { try { TCLCommon.GetTCLTV_Token(); } catch (Exception) { } return null; ; } #endregion /// /// 模拟接口 /// /// public ActionResult ChangeRoomStatus_Test() { Host host = HostManager.GetByRoomNumber("8888", 1); HostManager.ChangeRoomStatus(host, 2);//2:出租,4:待租,8:退房,16:空房 return Json(new { rescode = "200", resDesc = "操作成功" }, JsonRequestBehavior.AllowGet); } [HttpGet()] public ActionResult LogTest() { MemoryCacheHelper.Set("UDPPackage_a", "aa", DateTimeOffset.Now.AddSeconds(20)); return Json(new { rescode = "200" }, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult QueryFaceInfo(int HotelId, int RoomId) { try { string Name = ""; string Key = "FaceInfo_" + RoomId + "_" + hotelID; var Obj = MemoryCacheHelper.Get(Key); if (Obj != null) { Name = Obj.ToString(); } else { Host host = HostManager.GetByRoomNumber(RoomId, HotelId); string hg = host.RoomType.Name; MemoryCacheHelper.SlideSet(Key, hg); Name = hg; } return Json(new { RoomTypeName = Name, resDesc = "查询成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { error_msg = ex.Message, resDesc = "查询失败" }, JsonRequestBehavior.AllowGet); } } public static string DayKeyPrefix = "WebApiAnalysis_"; [HttpPost()] public ActionResult GetAllWebApiInvoke_FenXi() { try { List list = new List(); string OldData1 = DateTime.Now.AddDays(0).ToString("yyyy-MM-dd"); string OldData2 = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); string OldData3 = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd"); var q1 = CSRedisCacheHelper.Get_Partition(DayKeyPrefix + OldData1, 1); var q2 = CSRedisCacheHelper.Get_Partition(DayKeyPrefix + OldData2, 1); var q3 = CSRedisCacheHelper.Get_Partition(DayKeyPrefix + OldData3, 1); if (q1 != null) { list.Add(q1); } if (q2 != null) { list.Add(q2); } if (q3 != null) { list.Add(q3); } return Json(new { WebApiInvokeInfo = list, resDesc = "查询成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { error_msg = ex.Message, resDesc = "查询失败" }, JsonRequestBehavior.AllowGet); } } /// /// 这段代码暂时废弃掉,原来找不到 CPU占用100%的时候用,现在找到了,用不到这个接口了 /// /// public static void WebApiInvoke_FenXi(string MethodName) { //string OldData = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd"); //var q = CSRedisCacheHelper.Get_Partition(OldData, 1); //if (q != null) //{ // CSRedisCacheHelper.Del(new string[] { OldData }); //} //string DayKey = DayKeyPrefix + DateTime.Now.ToString("yyyy-MM-dd"); //int H = DateTime.Now.Hour; //var q1 = CSRedisCacheHelper.Get_Partition(DayKey, 1); //if (q1 != null) //{ // string KKK = MethodName + "#" + H; // //0:12 是 0-1点的数据 // //1:23 是1-2的数据, 归纳就是 当前小时的数据就是 属于下个小时的数据 // int Count = 0; // bool bf = q1.DataList.TryGetValue(KKK, out Count); // if (bf == false) // { // q1.DataList.Add(KKK, 0); // } // else // { // int NewCount = Count + 1; // q1.DataList[KKK] = NewCount; // } // CSRedisCacheHelper.Set_Partition(DayKey, q1, 1); //} //else //{ // TongJiApiInvokeInfo t = new TongJiApiInvokeInfo(); // t.DataList = new Dictionary(); // for (int i = 0; i < 24; i++) // { // string KKK = MethodName + "#" + i; // t.DataList.Add(KKK, 0); // } // CSRedisCacheHelper.Set_Partition(DayKey, t, 1); //} } #region 日志系统需要的接口 public class TempData { public int Id { get; set; } public string Name { get; set; } } public class TempDataA { public int ID; public string Code; public string GroupName; public string Name; public string CreateDate { get; set; } } public class ResponseData { public IList OwinFloorGroupList { get; set; } public List HotelListInfo { get; set; } } [HttpPost()] public ActionResult LogSystemlogin() { NReturnInfo r = new NReturnInfo(); try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); var user = JsonConvert.DeserializeObject(jsonData); var entity = SysUserManager.Get(user.username, user.password); if (entity != null) { //var Q = entity.Hotels.Select(A => new TempData { Id = A.ID, Name = A.Name }); IList result = new List(); result.Add(SysHotelGroupManager.CreateGroupTree2(entity.SysHotelGroup)); var Q1 = result.FirstOrDefault(); if (Q1 != null) { int id = (int)Q1.GetType().GetProperty("ID").GetValue(Q1, null); string KKKey = "LogSystemloginData_" + id.ToString() + "_" + entity.Account; object oooa = HttpContext.Cache.Get(KKKey); if (oooa != null) { r.response = oooa; } else { var DDD = GetData(id, entity.Account); HttpContext.Cache.Add(KKKey, DDD, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null); r.response = DDD; } } else { r.response = new List(); } r.isok = true; } else { r.isok = false; r.message = "登录失败,用户名或者密码不正确"; } } catch (Exception ex) { r.isok = false; r.message = ex.Message; } return Json(r, JsonRequestBehavior.AllowGet); } /// /// 新的日志登录系统 /// 这里的代码,时间紧急。是临时方案, /// 考虑不周 /// /// [HttpPost()] public ActionResult LogSystemloginNew() { NReturnInfo r = new NReturnInfo(); try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); var user = JsonConvert.DeserializeObject(jsonData); var entity = SysUserManager.Get(user.username, user.password); ResponseData rf = new ResponseData(); if (entity != null) { if (entity.HotelID > 0 && entity.Group == null)//酒店用户没有楼层分组权限 { return Json(null, JsonRequestBehavior.AllowGet); } IList groupTree = new List(); //如果该用户所在分组同属于当前酒店,则获取该分组下客房,否则获取该酒店下所有客房 if (entity.Group != null && entity.Group.HotelID == entity.HotelID) { groupTree.Add(GroupManager.CreateGroupTree2(entity.Group, entity.HotelID)); } else { IList currentGroup = GroupManager.GetGroupList(entity.HotelID); if (currentGroup.Count > 0) { groupTree.Add(GroupManager.CreateGroupTree2(currentGroup[0], entity.HotelID)); } } rf.OwinFloorGroupList = groupTree; } if (entity != null) { IList result = new List(); result.Add(SysHotelGroupManager.CreateGroupTree2(entity.SysHotelGroup)); if (entity.Account.Equals("admin") || entity.Account.Equals("leo") || entity.Account.Equals("blw")) { result.Add(GroupManager.CreateGroupTree2(entity.Group, entity.HotelID)); var Q1 = result.FirstOrDefault(); if (Q1 != null) { int id = (int)Q1.GetType().GetProperty("ID").GetValue(Q1, null); string KKKey = "LogSystemloginData_" + id.ToString() + "_" + entity.Account; object oooa = HttpContext.Cache.Get(KKKey); if (oooa != null) { rf.HotelListInfo = (List)oooa; r.response = rf; } else { var DDD = GetData(id, entity.Account); HttpContext.Cache.Add(KKKey, DDD, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null); rf.HotelListInfo = DDD; r.response = rf; } } else { r.response = new List(); } } else { string KKKey = "LogSystemloginData_" + entity.Group.ID.ToString() + "_" + entity.Account; object oooa = HttpContext.Cache.Get(KKKey); if (oooa != null) { rf.HotelListInfo = (List)oooa; r.response = rf; } else { var roomList = HostManager.LoadAll(entity.Group); List LL = roomList.Select(A => new TempDataA { Code = A.SysHotel.Code, CreateDate = A.SysHotel.CreatedDate.ToString("yyyy-MM-dd"), GroupName = A.SysHotel.SysHotelGroup.Name, Name = A.SysHotel.Name, ID = A.SysHotel.ID }).ToList(); rf.HotelListInfo = LL; HttpContext.Cache.Add(KKKey, LL, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null); r.response = rf; } } r.isok = true; } else { r.isok = false; r.message = "登录失败,用户名或者密码不正确"; } } catch (Exception ex) { r.isok = false; r.message = ex.Message; } return Json(r, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult GetGroupId() { NReturnInfo r = new NReturnInfo(); try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); var user = JsonConvert.DeserializeObject(jsonData); var currentUser = SysUserManager.Get(user.username, user.password); if (currentUser.HotelID > 0 && currentUser.Group == null)//酒店用户没有楼层分组权限 { return Json(null, JsonRequestBehavior.AllowGet); } IList groupTree = new List(); groupTree.Add(new { id = 0, text = HttpContext.InnerLanguage("HotelFloor") }); //如果该用户所在分组同属于当前酒店,则获取该分组下客房,否则获取该酒店下所有客房 if (currentUser.Group != null && currentUser.Group.HotelID == currentUser.HotelID) { groupTree.Add(GroupManager.CreateGroupTree2(currentUser.Group, currentUser.HotelID)); } else { IList currentGroup = GroupManager.GetGroupList(currentUser.HotelID); if (currentGroup.Count > 0) { groupTree.Add(GroupManager.CreateGroupTree2(currentGroup[0], currentUser.HotelID)); } } return Json(groupTree, JsonRequestBehavior.AllowGet); } catch (Exception ex) { r.isok = false; r.message = ex.Message; } return Json(r, JsonRequestBehavior.AllowGet); } /// /// 根据 根节点查询数据信息 /// /// /// [HttpPost()] public ActionResult GetCurrentHotel(int? groupId) { 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(); } 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(); return Json(new { total = hotels.Count, rows = hotelData }, JsonRequestBehavior.AllowGet); } /// /// 根据房间号,酒店编号来查询房型信息。 /// /// /// /// [HttpPost()] public ActionResult GetRoomTypeInfo(string roomnumber, string hotelcode) { try { Host host = HostManager.GetByRoomNumber(roomnumber, hotelcode); var AA = host.RoomType; var G = new { RoomTypeId = AA.ID, RoomTypeName = AA.Name }; return Json(new { Result = G, resDesc = "查询成功" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { error_msg = ex.Message, resDesc = "查询失败" }, JsonRequestBehavior.AllowGet); } } [HttpGet()] public ActionResult GetRoomTypeAndModalsListLog(string jsonData) { string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string code = jData["code"].ToString(); SysHotel sysHotel = SysHotelManager.GetByCode(code); if (sysHotel == null) { msg = "酒店未知"; return Json(new { IsSuccess = false, Result = "msg" }, JsonRequestBehavior.AllowGet); } int hhh = sysHotel.ID; IList roomTypes = RoomTypeManager.LoadAll().Where(r => r.HotelID == hhh && !r.IsDeleted).ToList(); IList list = new List(); foreach (RoomType roomType in roomTypes) { IList modalsList = new List(); foreach (RoomTypeModal model in roomType.Modals) { modalsList.Add(new MMM { ID = model.ID, ModalAddress = model.ModalAddress, Name = model.Name, EnglistName = model.EnglishName, TWName = model.TWName, TypeName = Common.Tools.GetDescription(model.Type), SourceType = model.SourceType, ActiveIndicator = model.ActiveIndicator }); } list.Add(new { ID = roomType.ID, Code = roomType.Code, Name = roomType.Name, Modals = modalsList.OrderBy(A => A.ModalAddress) }); } return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("获取房型及其回路数据失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP()); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } public static string missionsys_address = ConfigurationManager.AppSettings["missionsys_address"]; /// /// 设置统计的时间 /// /// /// [HttpPost()] public ActionResult TongJiTimerIntervalSet(int interval_Minutes) { try { RedisTongJiData tq = new RedisTongJiData(); tq.url = "api/CaiJiData"; tq.cron_exp = string.Format("*/{0} * * * *", interval_Minutes); tq.mission_key = MvcApplication.IntervalKey; CSRedisCacheHelper.Forever(MvcApplication.IntervalKey, tq); var client1 = new RestClient(missionsys_address); var request1 = new RestRequest("api/declare_mission", Method.POST); request1.AddParameter("url", tq.url); request1.AddParameter("mission_key", tq.mission_key); request1.AddParameter("mission_name", tq.mission_key); request1.AddParameter("cron_exp", tq.cron_exp); client1.ExecuteAsync(request1, (response) => { string result = response.Content; }); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取统计时间间隔 /// public ActionResult GetTongJiTimerInterval() { try { var DDD = CSRedisCacheHelper.ForeverGet(MvcApplication.IntervalKey); var Time = DDD.cron_exp; //var Time = "*/10 * * * *"; string[] data = Time.Split('/', ' '); return Json(new { IsSuccess = true, Result = data[1].ToString() }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } #region 隔几包,丢一包 /// /// 隔几包 丢一包 /// /// /// [HttpPost()] public ActionResult DefineUDPLostDataRate(long LostHz) { try { CSRedisCacheHelper.Forever(MvcApplication.UDPLostKey, LostHz); //DataTongJi.DefineLostPackage = LostHz; //DataTongJi.RecordLostPackage = 0; Interlocked.Exchange(ref DataTongJi.DefineLostPackage, LostHz); Interlocked.Exchange(ref DataTongJi.RecordLostPackage, 0); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取UDP丢包速率 /// 隔几包丢一包 /// /// [HttpPost()] public ActionResult GetDefineUDPLostDataRate() { try { var Lf = CSRedisCacheHelper.ForeverGet(MvcApplication.UDPLostKey); return Json(new { IsSuccess = true, Result = Lf }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } #endregion #region 超时 /// /// 获取UDP超时时间 /// /// [HttpPost()] public ActionResult GetDefineUDPLostDataInterval() { try { var L = CSRedisCacheHelper.ForeverGet(MvcApplication.UDPLostIntervalKey); return Json(new { IsSuccess = true, Result = L }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 间隔多久的数据要丢掉 /// /// /// [HttpPost()] public ActionResult DefineUDPLostDataInterval(int Interval) { try { CSRedisCacheHelper.Forever(MvcApplication.UDPLostIntervalKey, Interval); DataTongJi.LostPackage_Interval = Interval; return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } #endregion /// /// 有哪些酒店的数据不会被0x19 机制给过滤掉 /// /// /// [HttpPost()] public ActionResult ZeroX19DataSet(string hotelcode) { try { var LLL = CSRedisCacheHelper.ForeverGet>(MvcApplication.ZeroX19_PassHotelCodeKey); if (!LLL.Contains(hotelcode)) { LLL.Add(hotelcode); CSRedisCacheHelper.Forever>(MvcApplication.ZeroX19_PassHotelCodeKey, LLL); } if (!DataTongJi.ZeroX19_PassHotelCode.Contains(hotelcode)) { DataTongJi.ZeroX19_PassHotelCode.Add(hotelcode); } return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取0x19 起了作用的酒店 /// /// [HttpPost()] public ActionResult GetZeroX19Data() { try { var L = CSRedisCacheHelper.ForeverGet>(MvcApplication.ZeroX19_PassHotelCodeKey); return Json(new { IsSuccess = true, Result = L }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取RCU在线数量 /// /// [HttpPost()] public ActionResult GetRCUOnLine() { try { var L = DataTongJi.ONLINERCU; var L1 = L.Count.ToString(); return Json(new { IsSuccess = true, Result = L1 }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取取电开关的在线数量 /// /// [HttpPost()] public ActionResult GetTakeCard_OnLine() { try { var L = DataTongJi.TakeCardOnLine; var L1 = L.Where(A => A.Value.Status == 0x01).ToList().Count.ToString(); return Json(new { IsSuccess = true, Result = L1 }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取所有的 黑名单数据 /// /// [HttpPost()] public ActionResult GetBlockLWSetData() { try { var QQQ = CSRedisCacheHelper.ForeverGet>>(MvcApplication.BlockLowerMachineKey); if (QQQ != null) { return Json(new { IsSuccess = true, Result = QQQ }, JsonRequestBehavior.AllowGet); } return Json(new { IsSuccess = true, Result = QQQ }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 设置下位机黑名单 /// /// /// [HttpPost()] public ActionResult BlockLWSet() { try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); var user = JsonConvert.DeserializeObject(jsonData); ConcurrentBag L = null; string hotelcode = user.HotelCode; bool bl = DataTongJi.BlockLowerMachineList.TryGetValue(hotelcode, out L); if (bl && L != null) { DataTongJi.BlockLowerMachineList.TryRemove(hotelcode, out L); } else { ConcurrentBag USA = new ConcurrentBag(user.HostNumberList); DataTongJi.BlockLowerMachineList.TryAdd(hotelcode, USA); } CSRedisCacheHelper.Forever>>(MvcApplication.BlockLowerMachineKey, DataTongJi.BlockLowerMachineList); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult BlockLWRemove(string hotelcode) { try { ConcurrentBag L = null; bool bl = DataTongJi.BlockLowerMachineList.TryGetValue(hotelcode, out L); if (bl && L != null) { DataTongJi.BlockLowerMachineList.TryRemove(hotelcode, out L); } CSRedisCacheHelper.Forever>>(MvcApplication.BlockLowerMachineKey, DataTongJi.BlockLowerMachineList); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 日志系统采集数据 /// 由外界来调用 /// /// [HttpPost()] public ActionResult CaiJiData(string key, string mission_key) { try { long LC1 = Interlocked.Read(ref YUANZI_TongJi.TotalErrorPackageReceiveCount); var TotalKey1 = "TotalErrorPackageReceiveCount"; UDPPackageCount LLL_T1 = null; DataTongJi.TotalCount.TryGetValue(TotalKey1, out LLL_T1); if (LLL_T1 != null) { LLL_T1.Count = LC1; } else { UDPPackageCount u = new UDPPackageCount(); u.Count = LC1; DataTongJi.TotalCount.TryAdd(TotalKey1, u); } long LC = Interlocked.Read(ref YUANZI_TongJi.TotalReceiveCount); if (LC <= 60000) { Interlocked.Increment(ref MvcApplication.UDPServerErrorCount); } else { Interlocked.Exchange(ref MvcApplication.UDPServerErrorCount, 0); } long jishu_error = Interlocked.Read(ref MvcApplication.UDPServerErrorCount); if (jishu_error >= 3) { Interlocked.Exchange(ref MvcApplication.UDPServerErrorCount, 0); var hostServer = (IHostServer)MvcApplication.cxt.GetObject("RCUHost.HostServer"); hostServer.Start(); } var TotalKey = "UDPPackage_TotalRecvPackage"; UDPPackageCount LLL_T = null; DataTongJi.TotalCount.TryGetValue(TotalKey, out LLL_T); if (LLL_T != null) { LLL_T.Count = LC; } else { UDPPackageCount u = new UDPPackageCount(); u.Count = LC; DataTongJi.TotalCount.TryAdd(TotalKey, u); } var DDD = DataTongJi.TotalCount; string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var Y = DDD.ToArray(); for (int i = 0; i < Y.Length; i++) { var item = Y[i]; UDPPackageCount t = item.Value; Common.UDPPackage u = new Common.UDPPackage(); u.CommandType = item.Key; u.TotalCount = t.Count; u.FenLei = t.FenLei; u.RemoveTime = ti; string mns = Newtonsoft.Json.JsonConvert.SerializeObject(u); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns); //logger.Error("推送的数据:" + mns); } var FFF = DataTongJi.CPU_Data; if (FFF.Count > 0) { var FFF1 = FFF.ToArray(); double max_d = FFF1.Max(); double min_d = FFF1.Min(); double avg_d = FFF1.Average(); NewMethod("UDPPackage_CPUMax", ti, max_d); NewMethod("UDPPackage_CPUMin", ti, min_d); NewMethod("UDPPackage_CPUAvg", ti, avg_d); } var V = DataTongJi.ONLINERCU.ToArray(); Common.UDPPackage ux = new Common.UDPPackage(); ux.CommandType = "RCUOnLine"; ux.TotalCount = V.Length; ux.RemoveTime = ti; var W = V.GroupBy(A => A.Value.HotelCode); var dic = new ConcurrentDictionary(); foreach (var item in W) { dic.TryAdd(item.Key, item.Count()); } ux.FenLei = dic; string mns1 = Newtonsoft.Json.JsonConvert.SerializeObject(ux); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns1); var V0 = DataTongJi.TakeCardOnLine.ToArray(); var V1 = V0.Where(A => A.Value.Status == 0x01).ToList(); Common.UDPPackage ux1 = new Common.UDPPackage(); ux1.CommandType = "TakeCardIn"; ux1.TotalCount = V1.Count; ux1.RemoveTime = ti; var W1 = V1.GroupBy(A => A.Value.HotelCode); var dic1 = new ConcurrentDictionary(); foreach (var item in W1) { dic1.TryAdd(item.Key, item.Count()); } ux1.FenLei = dic1; string mns2 = Newtonsoft.Json.JsonConvert.SerializeObject(ux1); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns2); //在线用户 var V3 = DataTongJi.OnLineUserList_IP.ToArray(); DateTime dtn = DateTime.Now; var span = new TimeSpan(0, 1, 0); var V4 = V3.Where(A => { if (dtn - A.Value.LastUpdateTime <= span) { return true; } return false; }).ToList(); Common.UDPPackage ux2 = new Common.UDPPackage(); ux2.CommandType = "在线用户"; ux2.TotalCount = V4.Count; ux2.RemoveTime = ti; var dic2 = new ConcurrentDictionary(); foreach (var item in V4) { dic2.TryAdd(item.Key, 1); } ux2.FenLei = dic2; var dic3 = new ConcurrentDictionary(); foreach (var item in V4) { //string Key = IP + "_" + Account + "_" + code; string[] nnn = item.Key.Split('@'); string ip = nnn[0]; dic3.TryAdd(ip, "0"); } ux2.ExtraData = dic3; string mns3 = Newtonsoft.Json.JsonConvert.SerializeObject(ux2); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns3); //logger.Error("推送的走到这里了"); //DataTongJi.TotalCount.Clear(); Interlocked.Exchange(ref YUANZI_TongJi.TotalReceiveCount, 0); Interlocked.Exchange(ref YUANZI_TongJi.TotalErrorPackageReceiveCount, 0); YUANZI_TongJi.TotalReceiveCount = 0; DataTongJi.OnLineUserList_IP = new ConcurrentDictionary(); DataTongJi.TotalCount = new System.Collections.Concurrent.ConcurrentDictionary(); DataTongJi.CPU_Data = new System.Collections.Concurrent.ConcurrentBag(); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("RCU 数量统计出错了:" + ex.Message + ex.StackTrace); return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult CaiJiDataNew(string key, string mission_key) { try { if (string.IsNullOrEmpty(MvcApplication.JianKong_TxtData)) { string ns = Server.MapPath("~\\grafana\\" + MvcApplication.WanBuJianKongSourceFileName); string getdata = System.IO.File.ReadAllText(ns, Encoding.UTF8); MvcApplication.JianKong_TxtData = getdata; } string New_Txt = MvcApplication.JianKong_TxtData; long LC = Interlocked.Read(ref YUANZI_TongJi.TotalReceiveCount); New_Txt = New_Txt.Replace("{0}", LC.ToString()); var TotalKey = "UDPPackage_TotalRecvPackage"; UDPPackageCount LLL_T = null; DataTongJi.TotalCount.TryGetValue(TotalKey, out LLL_T); if (LLL_T != null) { LLL_T.Count = LC; } else { UDPPackageCount u = new UDPPackageCount(); u.Count = LC; DataTongJi.TotalCount.TryAdd(TotalKey, u); } UDPPackageCount us1 = new UDPPackageCount(); us1.Count = 1; DataTongJi.TotalCount.TryAdd(TotalKey, us1); UDPPackageCount us2 = new UDPPackageCount(); us2.Count = 1; DataTongJi.TotalCount.TryAdd("UDPPackage_Heart", us1); var DDD = DataTongJi.TotalCount; string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //UDP_Sent UDPPackage_TotalSendPackage New_Txt = NewMethod(New_Txt, DDD, TotalKey, "{1}"); //RCU_Heart New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_Heart", "{5}"); //RCU_SearchHost New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_SearchHost", "{6}"); //Intercept New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_Intercept", "{7}"); //Energy New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_能耗", "{9}"); //RCU_OE StatusPass New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_StatusPass", "{10}"); //TCL_Ctr UDPPackageCount t_d7 = null; DDD.TryGetValue("UDPPackage_TianMaoQueryAll", out t_d7); UDPPackageCount t_d8 = null; DDD.TryGetValue("UDPPackage_TianMaoCONTROL", out t_d8); long eee = 0; if (t_d7 != null) { eee = eee + t_d7.Count; } if (t_d8 != null) { eee = eee + t_d8.Count; } New_Txt = New_Txt.Replace("{11}", eee.ToString()); //TianMaoQueryAll //TianMaoCONTROL UDPPackageCount t_d2 = null; DDD.TryGetValue("UDPPackage_TianMaoQueryAll", out t_d2); UDPPackageCount t_d3 = null; DDD.TryGetValue("UDPPackage_TianMaoCONTROL", out t_d3); long ccc = 0; if (t_d2 != null) { ccc = ccc + t_d2.Count; } if (t_d3 != null) { ccc = ccc + t_d3.Count; } //TM_Ctr New_Txt = New_Txt.Replace("{12}", ccc.ToString()); //小度精灵统计 //string KKK = platformName + "Discovery"; //string KKK = platformName + "Control"; //XD_Ctr UDPPackageCount t_d5 = null; DDD.TryGetValue("UDPPackage_小度音箱Discovery", out t_d5); UDPPackageCount t_d6 = null; DDD.TryGetValue("UDPPackage_小度音箱Control", out t_d6); long ddd = 0; if (t_d5 != null) { ddd = ddd + t_d5.Count; } if (t_d6 != null) { ddd = ddd + t_d6.Count; } New_Txt = New_Txt.Replace("{13}", ddd.ToString()); //Hivi_Ctr New_Txt = New_Txt.Replace("{14}", "0"); var Y = DDD.ToArray(); for (int i = 0; i < Y.Length; i++) { var item = Y[i]; UDPPackageCount t = item.Value; Common.UDPPackage u = new Common.UDPPackage(); u.CommandType = item.Key; u.TotalCount = t.Count; u.FenLei = t.FenLei; u.RemoveTime = ti; string mns = Newtonsoft.Json.JsonConvert.SerializeObject(u); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns); //logger.Error("推送的数据:" + mns); } var FFF = DataTongJi.CPU_Data; if (FFF.Count > 0) { var FFF1 = FFF.ToArray(); double max_d = FFF1.Max(); double min_d = FFF1.Min(); double avg_d = FFF1.Average(); NewMethod("UDPPackage_CPUMax", ti, max_d); NewMethod("UDPPackage_CPUMin", ti, min_d); NewMethod("UDPPackage_CPUAvg", ti, avg_d); } var V = DataTongJi.ONLINERCU.ToArray(); //RCU_Online New_Txt = New_Txt.Replace("{3}", V.Length.ToString()); Common.UDPPackage ux = new Common.UDPPackage(); ux.CommandType = "RCUOnLine"; ux.TotalCount = V.Length; ux.RemoveTime = ti; var W = V.GroupBy(A => A.Value.HotelCode); var dic = new ConcurrentDictionary(); foreach (var item in W) { dic.TryAdd(item.Key, item.Count()); } ux.FenLei = dic; string mns1 = Newtonsoft.Json.JsonConvert.SerializeObject(ux); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns1); var V0 = DataTongJi.TakeCardOnLine.ToArray(); var V1 = V0.Where(A => A.Value.Status == 0x01).ToList(); //RCU_TakeCard New_Txt = New_Txt.Replace("{4}", V1.Count.ToString()); Common.UDPPackage ux1 = new Common.UDPPackage(); ux1.CommandType = "TakeCardIn"; ux1.TotalCount = V1.Count; ux1.RemoveTime = ti; var W1 = V1.GroupBy(A => A.Value.HotelCode); var dic1 = new ConcurrentDictionary(); foreach (var item in W1) { dic1.TryAdd(item.Key, item.Count()); } ux1.FenLei = dic1; string mns2 = Newtonsoft.Json.JsonConvert.SerializeObject(ux1); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns2); //在线用户 var V3 = DataTongJi.OnLineUserList_IP.ToArray(); DateTime dtn = DateTime.Now; var span = new TimeSpan(0, 1, 0); var V4 = V3.Where(A => { if (dtn - A.Value.LastUpdateTime <= span) { return true; } return false; }).ToList(); //WebUser New_Txt = New_Txt.Replace("{8}", V4.Count.ToString()); Common.UDPPackage ux2 = new Common.UDPPackage(); ux2.CommandType = "在线用户"; ux2.TotalCount = V4.Count; ux2.RemoveTime = ti; var dic2 = new ConcurrentDictionary(); foreach (var item in V4) { dic2.TryAdd(item.Key, 1); } ux2.FenLei = dic2; var dic3 = new ConcurrentDictionary(); foreach (var item in V4) { //string Key = IP + "_" + Account + "_" + code; string[] nnn = item.Key.Split('@'); string ip = nnn[0]; dic3.TryAdd(ip, "0"); } ux2.ExtraData = dic3; string mns3 = Newtonsoft.Json.JsonConvert.SerializeObject(ux2); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns3); //logger.Error("推送的走到这里了"); //DataTongJi.TotalCount.Clear(); Interlocked.Exchange(ref YUANZI_TongJi.TotalReceiveCount, 0); YUANZI_TongJi.TotalReceiveCount = 0; DataTongJi.OnLineUserList_IP = new ConcurrentDictionary(); DataTongJi.TotalCount = new System.Collections.Concurrent.ConcurrentDictionary(); DataTongJi.CPU_Data = new System.Collections.Concurrent.ConcurrentBag(); //WanBuJianKong(New_Txt); string nth = Server.MapPath("~\\grafana\\1.txt"); //System.IO.File.WriteAllText(nth, New_Txt, Encoding.UTF8); WanBuJianKong(New_Txt, nth); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("RCU 数量统计出错了:" + ex.Message + ex.StackTrace); return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult tgs() { WanBuJianKong("fdfdfdf", ""); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } public static void WanBuJianKong(string Data, string SourceTxt) { System.IO.File.WriteAllText(SourceTxt, Data, Encoding.UTF8); // 如果目标文件存在,先删除 if (System.IO.File.Exists(MvcApplication.WanBuJianKongTargetFileName)) { System.IO.File.Delete(MvcApplication.WanBuJianKongTargetFileName); } // 重命名/移动文件 System.IO.File.Move(SourceTxt, MvcApplication.WanBuJianKongTargetFileName); } private static string NewMethod(string New_Txt, ConcurrentDictionary DDD, string Key, string ReplaceKey) { UDPPackageCount t_d1 = null; //DDD.TryGetValue("UDPPackage_TotalSendPackage", out t_d1); if (DDD.TryGetValue(Key, out t_d1)) { //New_Txt = New_Txt.Replace("{1}", t_d1.Count.ToString()); New_Txt = New_Txt.Replace(ReplaceKey, t_d1.Count.ToString()); } else { New_Txt = New_Txt.Replace(ReplaceKey, "0"); } return New_Txt; } [HttpPost()] public ActionResult GetRCUOnLineStatus(string key, string mission_key) { try { return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error("RCU 数量统计出错了:" + ex.Message + ex.StackTrace); return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet); } } /// /// RCU在线情况 /// /// [HttpPost()] public ActionResult ClearRCUInfo() { try { var Q = DataTongJi.ONLINERCU; var DT = DateTime.Now; var V = Q.Where(A => { var DT_E = A.Value.CurrentDateTime; TimeSpan timespan = DT - DT_E; if (timespan.TotalSeconds > 300) { return true; } return false; }); foreach (var item in V) { var IF = item.Key; RCUOnLineExtra N; Q.TryRemove(IF, out N); } return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult TimerTest() { return null; } [HttpPost()] public ActionResult SendData() { //HostModalManager.SendData(null,new byte[]{}); return null; } private static void NewMethod(string Key, string ti, double data) { Common.UDPPackage v = new Common.UDPPackage(); v.CommandType = Key; long CPU_MAX = (long)Math.Round(data); v.TotalCount = CPU_MAX; v.RemoveTime = ti; string f1 = Newtonsoft.Json.JsonConvert.SerializeObject(v); CSRedisCacheHelper.redis3.Publish("redis-udppackage", f1); } public class MMM { public int ID { get; set; } public string ModalAddress { get; set; } public string Name { get; set; } public string EnglistName { get; set; } public string TWName { get; set; } public string TypeName { get; set; } public int SourceType { get; set; } public bool ActiveIndicator { get; set; } } private List GetData(int groupId, string UserName) { IList hotels = new List(); switch (UserName) { 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 != 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(); } hotels = hotels.OrderByDescending(o => o.ID).ThenBy(o => o.SysHotelGroup.Sort).ToList(); //DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); var hotelData = hotels.Select(r => new TempDataA { ID = r.ID, Code = r.Code, CreateDate = r.CreatedDate.ToString("yyyy-MM-dd"), GroupName = SysHotelGroupManager.BuildGroupName(r.SysHotelGroup), Name = ReturnNameByLanguage(r.Name, r.EName, r.TWName) }).ToList(); return hotelData; } private ActionResult LoadSysHotelGroupTree() { SysUsers user = SysUserManager.Get(User.Identity.Name); if (user.SysHotelGroup == null) { return Json(new List(), JsonRequestBehavior.AllowGet); } //IList groups = SysHotelGroupManager.LoadAll(); //return Json(BuildGroupTree(groups, null), JsonRequestBehavior.AllowGet); IList result = new List(); result.Add(SysHotelGroupManager.CreateGroupTree2(user.SysHotelGroup)); return Json(result, JsonRequestBehavior.AllowGet); } [HttpPost()] public ActionResult GetRCUStatus(string host_number, string mac) { bool is_online = CSRedisCacheHelper.Contains(host_number, mac); return Json(is_online, JsonRequestBehavior.AllowGet); } #endregion public ActionResult PMS_CheckIn() { try { var _client = new syncstatus.syncstatusSoapClient(); return Json("", JsonRequestBehavior.AllowGet); } catch (Exception) { throw; } } #region 宝易系统接口 /// /// 上面有接口 可以获取 房型及其回路信息 /// /// /// [HttpPost()] public ActionResult LoadRoomTypeModalsWithPage(int roomTypeID) { var roomType = RoomTypeManager.Get(roomTypeID); var roomTypeModals = RoomTypeModalManager.LoadAll(roomType, 0).OrderBy(r => r.ModalAddress).ToList();//, deviceType);//获取该房型所有回路 var roomModals = RoomModalManager.LoadAll().OrderBy(r => r.ModalAddress).ToList();//.Where(r => r.Type == deviceType).ToList();//获取所有默认回路 foreach (RoomModal rm in roomModals) { if (roomTypeModals.Where(r => r.ModalAddress == rm.ModalAddress).ToList().Count == 0)//不存在,则新增新的默认回路 { roomTypeModals.Add(new RoomTypeModal() { ID = 0, RoomType = roomType, ModalAddress = rm.ModalAddress, Outlet = rm.Outlet, Name = rm.Name, EnglishName = "", TWName = "", AliasName = "", Power = rm.Power, LowPower = 0, Default = true, Type = rm.Type, Subtype = null, Sort = rm.Sort, ActiveIndicator = false, OfflineDisplay = false, LowPowerDisplay = false, Beep = false, Abnormal = false, Color = rm.Color, TCLDeviceName = "", MultipleTCLName = "", MultipleGroupID = 0, IsUploadBaoJing = false }); } } var result = roomTypeModals//.AsQueryable().OrderBy(sort + " " + order).Skip((page - 1) * rows).Take(rows) .Select(r => new { r.ID, RoomTypeID = roomTypeID, r.ModalAddress, r.Outlet, r.Name, r.EnglishName, r.TWName, r.AliasName, r.Power, r.LowPower, r.Default, r.Type, TypeName = HttpContext.InnerLanguage(r.Type.ToString()), //Subtype = r.Subtype.HasValue ? HttpContext.InnerLanguage(r.Subtype.ToString()) : "", r.Sort, r.ActiveIndicator, r.OfflineDisplay, r.LowPowerDisplay, r.Beep, r.Abnormal, r.Color, r.TCLDeviceName, r.MultipleTCLName, r.MultipleGroupID, r.IsUploadBaoJing }); //var UUU= JsonConvert.SerializeObject(result); var NNN = result.Where(A => A.ActiveIndicator == true).ToList(); return Json(new { total = result.Count(), rows = NNN }); } /// /// 添加回路 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// [HttpPost()] public ActionResult SaveRoomTypeModal() { try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string jsonData = System.Text.Encoding.UTF8.GetString(byts); var userlist = JsonConvert.DeserializeObject>(jsonData); var QQQ = userlist.GroupBy(A => A.roomTypeID).Select(A => A.Key); int roomTypeID = 0; foreach (var item in QQQ) { RoomTypeModalManager.DeleteByRoomTypeID(item, 0); } var roomType = RoomTypeManager.Get(roomTypeID); foreach (var item in userlist) { var id = item.id; //var roomTypeID = item.roomTypeID; var modalAddress = item.modalAddress; ; var outlet = item.outlet; var name = item.name; var englishName = item.englishName; var power = item.power; var twName = item.twName; var aliasName = item.aliasName; var type = item.type; var sort = item.sort; var color = item.color; var OfflineDisplay = item.OfflineDisplay; var LowPower = item.LowPower; //低电保存显示 var LowPowerDisplay = item.LowPowerDisplay; //是否声音报警 var Beep = item.Beep; //是否异常判断 var Abnormal = item.Abnormal; var MultipleGroupID = item.MultipleGroupID; var MultipleTCLName = item.MultipleTCLName; var TCLDeviceName = item.TCLDeviceName; var WXActiveIndicator = item.WXActiveIndicator; var ActiveIndicator = item.ActiveIndicator; var isuploadbaojing = item.IsUploadBaoJing; var roomTypeModal = new RoomTypeModal(); if (id == 0) { //if (roomType == null) //{ // throw new ApplicationException(HttpContext.InnerLanguage("InvalidRoomType")); //} //var modall = RoomTypeModalManager.LoadAll().Where(r => r.RoomType.ID == roomTypeID && r.ModalAddress == modalAddress).ToList(); //if (modall != null && modall.Count > 0) //{ // return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("LoopAddressExists") }); //} roomTypeModal.RoomType = roomType; roomTypeModal.ModalAddress = modalAddress; roomTypeModal.Outlet = outlet; roomTypeModal.Name = name; roomTypeModal.EnglishName = englishName; roomTypeModal.TWName = twName; roomTypeModal.AliasName = aliasName; roomTypeModal.Power = power; roomTypeModal.Default = false; roomTypeModal.Type = type; roomTypeModal.Subtype = null; roomTypeModal.Sort = sort; roomTypeModal.Color = color; roomTypeModal.ActiveIndicator = ActiveIndicator;//新增时默认显示 //roomTypeModal.WXActiveIndicator = WXActiveIndicator;//只要显示,微信默认允许控制 roomTypeModal.WXActiveIndicator = true;//只要显示,微信默认允许控制 roomTypeModal.OfflineDisplay = OfflineDisplay; roomTypeModal.LowPowerDisplay = LowPowerDisplay; roomTypeModal.Beep = Beep; roomTypeModal.Abnormal = Abnormal; roomTypeModal.SourceType = 0; roomTypeModal.MultipleTCLName = MultipleTCLName; roomTypeModal.TCLDeviceName = TCLDeviceName; roomTypeModal.IsUploadBaoJing = isuploadbaojing; int a = 0; int.TryParse(MultipleGroupID, out a); roomTypeModal.MultipleGroupID = a; RoomTypeModalManager.Save(roomTypeModal);//新增房型下单个回路 } System.Threading.Tasks.Task.Factory.StartNew(() => UpdateHostModals(roomTypeModal));//更新主机回路 } return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("SaveSuccess") }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("SaveFailedBecause") + ex.Message }); } } public class BaoYiModel { public int id { get; set; } public int roomTypeID { get; set; } public string modalAddress { get; set; } public string outlet { get; set; } public string name { get; set; } public string englishName { get; set; } public int power { get; set; } public string twName { get; set; } public string aliasName { get; set; } public DeviceType type { get; set; } public int sort { get; set; } public string color { get; set; } public int LowPower { get; set; } //离线保存显示 public bool OfflineDisplay { get; set; } /// /// 是否低电显示 /// public bool LowPowerDisplay { get; set; } public bool Beep { get; set; } /// /// 是否异常判断 /// public virtual bool Abnormal { get; set; } public bool WXActiveIndicator { get; set; } public bool ActiveIndicator { get; set; } public string MultipleGroupID { get; set; } public string MultipleTCLName { get; set; } public string TCLDeviceName { get; set; } public bool IsUploadBaoJing { get; set; } } [HttpGet()] public ActionResult GetAllModelName() { var t = Enum.GetNames(typeof(Domain.DeviceType)); return Json(new { IsSuccess = true, Result = t }, JsonRequestBehavior.AllowGet); } /// /// 删除回路 /// /// /// [HttpPost()] public ActionResult RemoveRoomModal() { try { string idsstr = Request.Form["ids"]; int[] ids = Newtonsoft.Json.JsonConvert.DeserializeObject(idsstr); IList modalList = new List(); foreach (var id in ids) { var modal = RoomTypeModalManager.Get(id); if (modal != null) { List hosts = HostManager.LoadAll().Where(t => t.RoomType == modal.RoomType).ToList(); foreach (Host host in hosts) { HostModalManager.DeteleByRoomTypeModal(host.ID, modal.ID);//先删除主机关联回路 } RoomTypeModalManager.Delete(modal);//再删除房型关联回路 modalList.Add(Language == Language.CN ? modal.Name : modal.EnglishName); } } return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("DeleteSuccess") }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("DeleteFailedBecause") + ex.Message }); } } /// /// 更新主机回路 /// /// /// private bool UpdateHostModals(RoomTypeModal roomTypeModal) { List hosts = HostManager.LoadAll().Where(t => t.RoomType.ID == roomTypeModal.RoomType.ID).ToList(); foreach (Host host in hosts)//该房型下所有主机关联回路 { var hostModal = HostModalManager.GetByModalAddress(host.ID, roomTypeModal.ModalAddress); if (null == hostModal) { HostModalManager.Save(new HostModal { HostID = host.ID, Modal = roomTypeModal, Status = 2, Time = 0, UpdateTime = DateTime.Now }); } } return true; } #endregion public ITFTP_SettingMananger TFTPManager { get; set; } [HttpPost()] public ActionResult TFTPReadSet() { try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string body = System.Text.Encoding.UTF8.GetString(byts); var qqq = JsonConvert.DeserializeObject>>(body); foreach (var item in qqq) { string hotelcode = item["hotelcode"].ToString(); string hostnumber = item["hostnumber"].ToString(); string mac = item["mac"].ToString(); HostManager.Send_Query_Data(new byte[] { }, hostnumber, mac); } TFTP_Set TFG = TFTPManager.GetData(122, 111); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } return Json(new { IsSuccess = true, Message = "Success" }); } [HttpPost()] public ActionResult TFTPSet_Execute() { try { byte[] byts = new byte[Request.InputStream.Length]; Request.InputStream.Read(byts, 0, byts.Length); string body = System.Text.Encoding.UTF8.GetString(byts); var item = JsonConvert.DeserializeObject(body); var lll = item.host_data; foreach (var singleitem in lll) { List list = new List(); if (item.isenable) { list.Add(0xff); } else { list.Add(0x00); } byte[] p1 = BitConverter.GetBytes(item.port); list.AddRange(p1); byte[] p2 = BitConverter.GetBytes(item.lasttime); list.AddRange(p2); byte[] bbb = Encoding.ASCII.GetBytes(item.domain); byte len = (byte)bbb.Length; list.Add(len); list.AddRange(bbb); byte[] bba = list.ToArray(); var hostnumber = singleitem.hostnumber; var mac = singleitem.mac; HostManager.Send_Setting_Data(bba, hostnumber, mac); } return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = ex.Message }); } } #region 设置透传 /// /// 发送透传数据 /// /// /// /// /// /// /// [HttpPost()] public ActionResult SendUDPPackage(string hostnumber, string mac, string bytelist, string cmdtype, bool isoriginal = false) { try { //Host hh = HostManager.GetByRoomNumber("1001", "1001"); bytelist = Tools.DeleteSpaceChar(bytelist); byte[] data = Tools.GetBytesFromString(bytelist); byte byteValue2 = Byte.Parse(cmdtype, System.Globalization.NumberStyles.HexNumber); HostManager.PublishUDPData(hostnumber, mac, data, byteValue2); return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception) { return Json(new { IsSuccess = true, Message = "Success" }); } } /// /// 设置UDP透传房间 /// /// /// /// /// [HttpPost()] public ActionResult SetTouChuanData(string hostnumber, string mac, string add_or_remove) { try { if (add_or_remove.Equals("add")) { //加入透传列表 CSRedisCacheHelper.HMSet(1, CacheKey.TouChuanKey, hostnumber, hostnumber); } else if (add_or_remove.Equals("remove")) { CSRedisCacheHelper.HDel(1, CacheKey.TouChuanKey, hostnumber); } else { } return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception) { return Json(new { IsSuccess = true, Message = "Success" }); } } #endregion #region 定时 /// /// ID和编号的对应关系 /// /// [HttpPost()] public ActionResult HostID_HostNumber() { try { var qqq = HostManager.LoadAllID_HostNumberMapping(); var qqq1 = qqq.Select(a => new { a.HostNumber, a.Id }).ToList(); if (qqq1.Count > 0) { foreach (var item in qqq1) { if (!string.IsNullOrEmpty(item.HostNumber)) { //CSRedisCacheHelper.HMSet(5, CacheKey.RoomNumber_HostNumber, item.HostNumber, item.RoomNumber); CSRedisCacheHelper.HMSet(5, CacheKey.HostId_HostNumber, item.HostNumber, item.Id); } } } return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = "Fault" + ex.Message }); } } [HttpPost()] public ActionResult RoomNumber_HostNumber() { try { var qqq = HostManager.LoadAll_RoomNumberMapping(); //var qqq1 = qqq.SelectMany(a => new string[] { a.HostNumber, a.RoomNumber }).ToList(); var qqq2 = qqq.Select(A => new { HostNumber = A.HostNumber, RoomNumber = A.RoomNumber }).ToList(); foreach (var item in qqq2) { if (!string.IsNullOrEmpty(item.HostNumber) && !string.IsNullOrEmpty(item.RoomNumber)) { CSRedisCacheHelper.HMSet(5, CacheKey.RoomNumber_HostNumber, item.HostNumber, item.RoomNumber); } } //if (qqq1.Count > 0) //{ // CSRedisCacheHelper.HMSet(5, CacheKey.RoomNumber_HostNumber, qqq1); //} return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = "Fault" + ex.Message }); } } [HttpPost()] public ActionResult MQTTHeartBeat() { try { if (BLWMQTT.MqttClientGlobal.IsConnected) { BLWMQTT.MqttClientGlobal.Publish("blw/mqtt/heartbeat", Encoding.UTF8.GetBytes("hello beat"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } else { BLWMQTT.StartMqtt(); } return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception) { return Json(new { IsSuccess = false, Message = "Fault" }); } } #endregion private void SyncRoomStatus(int hotelID, DataRow dr, RoomStatus roomStatus, int flag) { Task.Factory.StartNew(() => { Host host = HostManager.GetByRoomNumber(dr["RoomNumber"].ToString(), hotelID); if (host != null) { HostManager.ChangeRoomStatus(host, roomStatus); string Key = CacheKey.SyncRoomStatus + "_" + host.HostNumber; RoomStatusRequest ddd = new RoomStatusRequest(); ddd.HostNumber = host.HostNumber; ddd.MAC = host.MAC; ddd.Status = roomStatus; CSRedisCacheHelper.Set_PartitionWithForever(Key, ddd); } var _client = new syncstatus.syncstatusSoapClient(); _client.UpdateCheckInOrOutRecord(dr["Code"].ToString(), Convert.ToInt64(dr["ID"]), flag);//更新已同步状态 }, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default); } [HttpPost()] public ActionResult syncRoomStatusCallback() { try { var _client = new syncstatus.syncstatusSoapClient(); RCUHost.TimingHelper.HostTimingControlHelper.HostTimingControl(DeviceControlReceiver);//定时控制 DateTime now = DateTime.Now; DataSet dsHotel = _client.GetHotelCode(); foreach (DataRow row in dsHotel.Tables[0].Rows) { if (Convert.ToInt16(row["HotelID"]) > 0) { DataSet ds = _client.GetCheckInOrOutRecord(row["Code"].ToString()); if (ds != null && ds.Tables.Count > 2 && ds.Tables[3].Rows.Count > 0) { int hotelID = Convert.ToInt16(ds.Tables[3].Rows[0]["HotelID"].ToString());//与PMS同步接口所配置的HotelID if (hotelID > 0) { foreach (DataRow dr in ds.Tables[0].Rows) { var q = RoomStatusManager.Get(2); SyncRoomStatus(hotelID, dr, q, 0);//更新出租房态 } foreach (DataRow dr in ds.Tables[1].Rows) { var q = RoomStatusManager.Get(8); SyncRoomStatus(hotelID, dr, q, 1);//更新退房房态 } foreach (DataRow dr in ds.Tables[2].Rows) { var q = RoomStatusManager.Get(4); SyncRoomStatus(hotelID, dr, q, 2);//更新待租房态 } } } } } return Json(new { IsSuccess = true, Message = "Success" }); } catch (Exception ex) { logger.Error("定时同步房态异常。原因:" + ex.ToString()); return Json(new { IsSuccess = false, Message = ex.Message }); } } /// /// 凌晨定时 /// /// /// key=123456789&mission_key=#{mission_key} /// [HttpPost()] public ActionResult LingChenECO(string key, string mission_key) { try { string[] data = mission_key.Split('_'); string code = data[1]; string time = data[2]; string[] wendu = CSRedisCacheHelper.HMGet(5, MvcApplication.LingChenECO_IntervalKey, code + "#" + time); HostManager.TimerECO(code, int.Parse(wendu[0])); return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } [HttpPost()] public ActionResult RestartUDPServer(string key) { try { if (key.Equals("blw^_^wlb")) { var hostServer = (IHostServer)MvcApplication.cxt.GetObject("RCUHost.HostServer"); hostServer.Start(); } return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.Error(ex.Message); return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet); } } } public class NReturnInfo { public bool isok { set; get; } // 是否成功,true成功 public string message { set; get; } // 传递接口信息,or报错信息 public int status { set; get; } // 服务器报错信息,正确为200,错误404/500等 public object response { set; get; } // 获取到的信息本体,若报错则为null } public class chuangweilogin { public string username { get; set; } public string password { get; set; } } public class TongJiApiInvokeInfo { public Dictionary DataList { get; set; } } public class TimeSplitData { public string ShiJianDuan_Key { get; set; } public int Count { get; set; } } }