From 79631561556914c3af25ff651159dd646fe295f2 Mon Sep 17 00:00:00 2001 From: tianshuanbao Date: Fri, 19 Dec 2025 16:58:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=89=E6=81=B6=E6=84=8F=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=81=B6=E6=84=8F=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E7=9A=84=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如题 --- CRICS_V3_1124.suo | Bin 12780544 -> 12780544 bytes Common/XuanZhuOperation.cs | 4 +- CommonEntity/FCS.cs | 4 +- CommonEntity/MyHttp.cs | 6 +- ConsoleApplication2/Program.cs | 53 ++- RCUHost/Implement/HostServer.cs | 2 +- RCUHost/Implement/New_RoomStatusReceiver.cs | 54 +-- RCUHost/Implement/RoomStatusReceiver.cs | 66 +-- Service/Implement/HostManager.cs | 492 ++++++++++---------- WebSite/Controllers/ApiController.cs | 253 +++++----- WebSite/Controllers/HomeController.cs | 11 +- WebSite/Controllers/IoTController.cs | 6 +- WebSite/Global.asax.cs | 132 +++++- 13 files changed, 637 insertions(+), 446 deletions(-) diff --git a/CRICS_V3_1124.suo b/CRICS_V3_1124.suo index 67dfac54c5b6abb3fec5ec7c56aaa39f1b45031c..a13dd3337f33fde5a23a0070eb3d35191766562b 100644 GIT binary patch delta 21373 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 U?*a#a_karEAe%k!(CStH56af_QUCw| delta 18341 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 //if (returnResult.retCode == "0")//0代表成功 其他代表失败 @@ -64,6 +64,8 @@ namespace Common } catch (Exception ex) { + string Key = "HttpRequest_" + resp.code + "_" + resp.roomNumber; + MemoryCacheHelper.Set(Key, 1, DateTimeOffset.Now.AddMinutes(10)); logger.Error(string.Format("酒店({0})客房({1})调用设备状态或异常推送接口({2})失败:{3},数据:{4}", resp.code, resp.roomNumber, url, ex.Message, param)); return false; } diff --git a/CommonEntity/FCS.cs b/CommonEntity/FCS.cs index 773d62a..7e45ba1 100644 --- a/CommonEntity/FCS.cs +++ b/CommonEntity/FCS.cs @@ -316,7 +316,7 @@ namespace CommonEntity f.RoomNUMBER = roomno; string fsa = Newtonsoft.Json.JsonConvert.SerializeObject(f); //这个是 供轮循的时候调用使用 - CSRedisCacheHelper.HMSet(3, 60 * 24, CacheKey.FCSOrder, fsa); + CSRedisCacheHelper.HMSet(3, 60 * 24, CacheKey.FCSOrder, Guid.NewGuid().ToString("N"), fsa); //这个是供 取消订单的时候使用的 //这个只 支持 取消 清理 @@ -401,7 +401,7 @@ namespace CommonEntity } SSLXieYi(); - string RUrl = string.Format("/job/order/{0}/cancelled", OrderId); + string RUrl = string.Format("/api-secure/job/order/{0}/cancelled", OrderId); var client1 = new RestClient(FCSLoginUrl); var request1 = new RestRequest(RUrl, Method.POST); diff --git a/CommonEntity/MyHttp.cs b/CommonEntity/MyHttp.cs index 2948616..f5c32e7 100644 --- a/CommonEntity/MyHttp.cs +++ b/CommonEntity/MyHttp.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using RestSharp; using System.Net; +using Common; namespace CommonEntity { @@ -29,16 +30,17 @@ namespace CommonEntity ServicePointManager.SecurityProtocol = A | B | C | D | E; var client1 = new RestClient(Url); var request1 = new RestRequest("", Method.POST); - var jsa= Newtonsoft.Json.JsonConvert.SerializeObject(obj); + //var jsa= Newtonsoft.Json.JsonConvert.SerializeObject(obj); request1.AddJsonBody(obj); var QQQ = client1.Execute(request1); HttpStatusCode HHH = QQQ.StatusCode; string fanhuizhi = QQQ.Content; - return fanhuizhi; } catch (Exception ex) { + //string Key = "HttpRequest_" + resp.code + "_" + resp.roomNumber; + //MemoryCacheHelper.Set(Key, 1, DateTimeOffset.Now.AddMinutes(10)); logger.Error("Fault Push Error:" + ex.Message); logger.Error("Fault Push Error:" + ex.StackTrace); return ex.Message; diff --git a/ConsoleApplication2/Program.cs b/ConsoleApplication2/Program.cs index 34477cd..ccc36ca 100644 --- a/ConsoleApplication2/Program.cs +++ b/ConsoleApplication2/Program.cs @@ -220,20 +220,63 @@ namespace ConsoleApplication2 public struct Tiao { public string Nsa { get; set; } - + + } + public static void Data() + { + XuanZhuResponse resp = new XuanZhuResponse(); + resp.code = "1085"; + resp.roomNumber = "1001"; + resp.address = ""; + resp.name = ""; + resp.status = 1; + if (resp.status == 1) + { + resp.brightness = 0; + resp.currentTemp = 25; + resp.settingTemp = 25; + resp.mode = 1; + resp.fanSpeed = 1; + resp.valve = 0; + } + MyHttp.SendHttpData("http://f-xcx.blv-oa.com/rcu/report", resp); } static void Main(string[] args) { - string uuawer= string.Concat("h","eeeelll"); + Data(); + Console.ReadLine(); + string uuawer = string.Concat("h", "eeeelll"); string QQQQSSS = File.ReadAllText("3.txt", Encoding.UTF8); var FFF = JsonConvert.DeserializeObject(QQQQSSS); - JObject jsonObject = JObject.Parse(QQQQSSS); - var error = jsonObject.SelectToken("error"); + JObject jsonObject = JObject.Parse(QQQQSSS); + var error = jsonObject.SelectToken("error"); var JJJ = FFF.data.FirstOrDefault(); - string orderuuid = JJJ.job_uuid; + if (JJJ != null) + { + string orderuuid = JJJ.job_uuid; + FCS_OrderData f = new FCS_OrderData(); + f.OrderUUID = orderuuid; + f.PropertyID = ""; + f.ItemType = "Clean"; + f.OrderNo = JJJ.job_no; + f.ItemUUID = ""; + f.LocationUUID = ""; + f.HotelCode = ""; + f.RoomNUMBER = ""; + string fsa = Newtonsoft.Json.JsonConvert.SerializeObject(f); + //这个是 供轮循的时候调用使用 + CSRedisCacheHelper.HMSet(3, 60 * 24, CacheKey.FCSOrder, "aaa", fsa); + + //这个是供 取消订单的时候使用的 + //这个只 支持 取消 清理 + //logger.Error("记录入循环:"+orderuuid); + CSRedisCacheHelper.Set_PartitionWithTime(CacheKey.FCSRoom_Mapping_Order + "_" + "", orderuuid, 24 * 60, 3); + } + + //string orderuuid = JJJ.job_uuid; AskRoomStatusChangedReceiver h = new AskRoomStatusChangedReceiver(); RoomStatus vv = new RoomStatus(); diff --git a/RCUHost/Implement/HostServer.cs b/RCUHost/Implement/HostServer.cs index 43a4b7e..2de05c7 100644 --- a/RCUHost/Implement/HostServer.cs +++ b/RCUHost/Implement/HostServer.cs @@ -215,7 +215,7 @@ namespace RCUHost.Implement { logger.Error("Host Server启动失败,端口:3339"); Close(); - throw ex;//不能去掉,否则重启iis服务,通讯服务不会再次启动 + //throw ex;//不能去掉,否则重启iis服务,通讯服务不会再次启动 } } /// diff --git a/RCUHost/Implement/New_RoomStatusReceiver.cs b/RCUHost/Implement/New_RoomStatusReceiver.cs index 1e1c62d..b0ac43f 100644 --- a/RCUHost/Implement/New_RoomStatusReceiver.cs +++ b/RCUHost/Implement/New_RoomStatusReceiver.cs @@ -728,41 +728,30 @@ namespace RCUHost.Implement if (list.Count > 0 && hostModals.Count > 0) { System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 - Host pa = new Host(); - pa.HostNumber = host.HostNumber; - pa.MAC = host.MAC; foreach (HotelAirControl item in list) { foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性 { if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节,则发送命令给rcu设置空调 { - var VA = new Tuple, HotelAirControl, Host>(hostModals, item, pa); - Task.Factory.StartNew((state) => - { - var UUU = state as Tuple, HotelAirControl, Host>; - System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 - - var D1 = UUU.Item1; - var D2 = UUU.Item2; - var D3 = UUU.Item3; - foreach (HostModal hostModal1 in D1) - { - Device device1 = new Device(); - device1.Address = hostModal1.Modal.ModalAddress; - device1.AddressType = AddressType.DeviceAddress; - device1.Type = DeviceType.AirConditioner; - device1.Status = (byte)D2.Status; - device1.Brightness = 0; - device1.Temperature = (byte)D2.SettingTemp; - device1.FanSpeed = (byte)D2.FanSpeed; - device1.Mode = (byte)D2.Mode; - device1.Valve = 0; - device1.AirExecMode = (D2.Status << 14) + (D2.Mode << 12) + (D2.FanSpeed << 10) + (0 << 8) + D2.SettingTemp;//空调执行方式和内容 - //这里只需要host的mac和number或者 ip - DeviceControlReceiver.Send(D3, device1); - } - }, VA); + System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 + var D2 = item; + foreach (HostModal hostModal1 in hostModals) + { + Device device1 = new Device(); + device1.Address = hostModal1.Modal.ModalAddress; + device1.AddressType = AddressType.DeviceAddress; + device1.Type = DeviceType.AirConditioner; + device1.Status = (byte)D2.Status; + device1.Brightness = 0; + device1.Temperature = (byte)D2.SettingTemp; + device1.FanSpeed = (byte)D2.FanSpeed; + device1.Mode = (byte)D2.Mode; + device1.Valve = 0; + device1.AirExecMode = (D2.Status << 14) + (D2.Mode << 12) + (D2.FanSpeed << 10) + (0 << 8) + D2.SettingTemp;//空调执行方式和内容 + //这里只需要host的mac和number或者 ip + DeviceControlReceiver.Send(host, device1); + } break; } } @@ -1350,7 +1339,8 @@ namespace RCUHost.Implement string mns = Newtonsoft.Json.JsonConvert.SerializeObject(resp); CSRedisCacheHelper.Publish("redis-action-data", mns); - XuanZhuOperation.ReportService(ttt.Item1.SysHotel.DeviceStatusPushURL, resp1); + //XuanZhuOperation.ReportService(ttt.Item1.SysHotel.DeviceStatusPushURL, resp1); + MyHttp.SendHttpData(ttt.Item1.SysHotel.DeviceStatusPushURL, resp); }, tup); } #endregion @@ -1483,7 +1473,9 @@ namespace RCUHost.Implement resp1.address = "054000001"; resp1.name = "碳达人"; resp1.status = ttt.Item2; - XuanZhuOperation.ReportService(ttt.Item1.SysHotel.DeviceStatusPushURL, resp1); + //XuanZhuOperation.ReportService(ttt.Item1.SysHotel.DeviceStatusPushURL, resp1); + + MyHttp.SendHttpData(ttt.Item1.SysHotel.DeviceStatusPushURL, resp1); }, tup); } } diff --git a/RCUHost/Implement/RoomStatusReceiver.cs b/RCUHost/Implement/RoomStatusReceiver.cs index d16c699..9f0aebe 100644 --- a/RCUHost/Implement/RoomStatusReceiver.cs +++ b/RCUHost/Implement/RoomStatusReceiver.cs @@ -1135,41 +1135,31 @@ namespace RCUHost.Implement if (list.Count > 0 && hostModals.Count > 0) { System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 - Host pa = new Host(); - pa.HostNumber = host.HostNumber; - pa.MAC = host.MAC; foreach (HotelAirControl item in list) { foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性 { if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节,则发送命令给rcu设置空调 { - var VA = new Tuple,HotelAirControl,Host>(hostModals,item,pa); - Task.Factory.StartNew((state) => - { - var UUU =state as Tuple, HotelAirControl,Host>; - System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 + System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 - var D1 = UUU.Item1; - var D2 = UUU.Item2; - var D3 = UUU.Item3; - foreach (HostModal hostModal1 in D1) - { - Device device1 = new Device(); - device1.Address = hostModal1.Modal.ModalAddress; - device1.AddressType = AddressType.DeviceAddress; - device1.Type = DeviceType.AirConditioner; - device1.Status = (byte)D2.Status; - device1.Brightness = 0; - device1.Temperature = (byte)D2.SettingTemp; - device1.FanSpeed = (byte)D2.FanSpeed; - device1.Mode = (byte)D2.Mode; - device1.Valve = 0; - device1.AirExecMode = (D2.Status << 14) + (D2.Mode << 12) + (D2.FanSpeed << 10) + (0 << 8) + D2.SettingTemp;//空调执行方式和内容 - //这里只需要host的mac和number或者 ip - DeviceControlReceiver.Send(D3, device1); - } - },VA); + var D2 = item; + foreach (HostModal hostModal1 in hostModals) + { + Device device1 = new Device(); + device1.Address = hostModal1.Modal.ModalAddress; + device1.AddressType = AddressType.DeviceAddress; + device1.Type = DeviceType.AirConditioner; + device1.Status = (byte)D2.Status; + device1.Brightness = 0; + device1.Temperature = (byte)D2.SettingTemp; + device1.FanSpeed = (byte)D2.FanSpeed; + device1.Mode = (byte)D2.Mode; + device1.Valve = 0; + device1.AirExecMode = (D2.Status << 14) + (D2.Mode << 12) + (D2.FanSpeed << 10) + (0 << 8) + D2.SettingTemp;//空调执行方式和内容 + //这里只需要host的mac和number或者 ip + DeviceControlReceiver.Send(host, device1); + } break; } } @@ -1862,8 +1852,18 @@ namespace RCUHost.Implement resp.fanSpeed = 0; resp.valve = 0; } - //MyHttp.SendHttpData(ttt.Item1.SysHotel.DeviceStatusPushURL, resp); - XuanZhuOperation.ReportService(ttt.Item1.SysHotel.DeviceStatusPushURL, resp); + + MyHttp.SendHttpData(ttt.Item1.SysHotel.DeviceStatusPushURL, resp); + //string Key = "HttpRequest_" + resp.code + "_" + resp.roomNumber; + //var Data = MemoryCacheHelper.Get(Key); + //if (Data != null) + //{ + + //} + //else + //{ + // //XuanZhuOperation.ReportService(ttt.Item1.SysHotel.DeviceStatusPushURL, resp); + //} }, tup); } #endregion @@ -1871,7 +1871,8 @@ namespace RCUHost.Implement else { string NoKey = CacheKey.HostModalStatus_BoolFilterPrefix + "_" + host.ID + "_" + device.Value.Address; - CSRedisCacheHelper.Set_PartitionWithTime(NoKey, 1, 10); + var expiredata = new Random().Next(10, 50); + CSRedisCacheHelper.Set_PartitionWithTime(NoKey, 1, expiredata); //logger.Error("内存和数据库都不见这条数据:" + KKey); } #endregion @@ -2240,7 +2241,8 @@ namespace RCUHost.Implement faultType = fault.Value.Type, faultData = fault.Value.Data }; - XuanZhuOperation.ReportService(host.FaultPushURL, resp); + //XuanZhuOperation.ReportService(host.FaultPushURL, resp); + MyHttp.SendHttpData(host.FaultPushURL, resp); }); } } diff --git a/Service/Implement/HostManager.cs b/Service/Implement/HostManager.cs index 7710d1d..48997d1 100644 --- a/Service/Implement/HostManager.cs +++ b/Service/Implement/HostManager.cs @@ -537,277 +537,285 @@ namespace Service.Implement /// public void ChangeRoomStatus(Host host, RoomStatus roomStatus, string wxValidate) { - logger.Error("触发状态ID:" + roomStatus.ID); - RoomStatusChangedReceiver.SendRoomStatus(host, roomStatus); - host.RoomStatus = roomStatus; - - Host host_takeout = null; - string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber; - object obj = MemoryCacheHelper.Get(Key); - if (obj != null) + try { - host_takeout = (Host)obj; - host_takeout.RoomStatus = roomStatus; - } + logger.Error("触发状态ID:" + roomStatus.ID); + RoomStatusChangedReceiver.SendRoomStatus(host, roomStatus); + host.RoomStatus = roomStatus; - if (!string.IsNullOrEmpty(wxValidate)) - { - host.WXValidate = wxValidate; - } - CurrentRepository.Update(host); - - - #region 语言重置 - - if (roomStatus.ID == 2 || roomStatus.ID == 8)//开房和退房时重置 - { - if (!string.IsNullOrEmpty(host.XiaoDuCUID)) + Host host_takeout = null; + string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber; + object obj = MemoryCacheHelper.Get(Key); + if (obj != null) { - string accessToken = SysOauth2Repository.GetXiaoDuToken(); - if (!string.IsNullOrEmpty(accessToken) && host.SysHotel.IsPowerOffResetXiaoDu) + host_takeout = (Host)obj; + host_takeout.RoomStatus = roomStatus; + } + + if (!string.IsNullOrEmpty(wxValidate)) + { + host.WXValidate = wxValidate; + } + CurrentRepository.Update(host); + + + #region 语言重置 + + if (roomStatus.ID == 2 || roomStatus.ID == 8)//开房和退房时重置 + { + if (!string.IsNullOrEmpty(host.XiaoDuCUID)) + { + string accessToken = SysOauth2Repository.GetXiaoDuToken(); + if (!string.IsNullOrEmpty(accessToken) && host.SysHotel.IsPowerOffResetXiaoDu) + { + System.Threading.Tasks.Task.Factory.StartNew(() => + { + foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开 + { + XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度 + } + }); + } + } + if (!string.IsNullOrEmpty(host.TianMaoCUID)) { System.Threading.Tasks.Task.Factory.StartNew(() => { - foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开 + foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开 { - XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度 + TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵 } }); } } - if (!string.IsNullOrEmpty(host.TianMaoCUID)) - { - System.Threading.Tasks.Task.Factory.StartNew(() => - { - foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开 - { - TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK", - Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵 - } - }); - } - } - - #endregion - - if (roomStatus.ID == 8) - { - #region 退房后空调控制 - HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录 - if (hotelSeason != null) - { - //条件:1出租后,2取电后,3断电后 - List list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 4, true); - List hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路 - if (list.Count > 0 && hostModals.Count > 0) - { - System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 - foreach (HotelAirControl item in list) - { - foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性 - { - if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节,则发送命令给rcu设置空调 - { - #region 备用方案 - //var TTT = new Tuple>(host, item, hostModals); - //Task.Factory.StartNew((state) => - // { - // System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 - - // Tuple> NNN = state as Tuple>; - - // var QQ0 = NNN.Item1; - // var QQ1 = NNN.Item2; - // var QQ2 = NNN.Item3; - // foreach (HostModal hostModal in QQ2) - // { - // HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变 - // } - // }, TTT); - #endregion - - - try - { - //这段代码在生产环境中不管用,很奇怪 - string KeyMission = System.Guid.NewGuid().ToString("N"); - MissonData m = new MissonData() - { - hostnumber = host.HostNumber, - mac = host.MAC, - }; - - m.HostModalList = new List>(); - foreach (HostModal hostModal in hostModals) - { - var t = new Tuple(hostModal.Modal.ModalAddress, hostModal.Modal.Type); - m.HostModalList.Add(t); - } - m.Status = item.Status; - m.SettingTemp = item.SettingTemp; - m.FanSpeed = item.FanSpeed; - m.Mode = item.Mode; - string MKey = "TuiFang_" + KeyMission; - CSRedisCacheHelper.Set_Partition(MKey, m, 1); - - DelayExe_Task(host, item.DelayTime, MKey); - break; - } - catch (Exception) - { - - } - } - } - } - } - } - #endregion - } - - if (roomStatus.ID == 2) - { - #region 出租后空调处理 - //阿宝 - //空调 在10分钟无人入住的情况之下,就关闭 - //启动 一个任务 - - #region 阿宝添加的 - int currenthotelid = host.SysHotel.ID; - RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == currenthotelid); - if (nnn != null) - { - if (!nnn.How.Equals("without")) - { - string Code = host.SysHotel.Code; - string RoomNo = host.RoomNumber; - DateTime CreateDate = host.SysHotel.CreatedDate; - string CD = CreateDate.ToString("yyyy-MM-dd"); - int hotel_id = host.SysHotel.ID; - int host_id = host.ID; - string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - int delaytime = nnn.DelayTime; - int sustain = 20; - string MissionKey = System.Guid.NewGuid().ToString("N"); - DateTime starttime = DateTime.Now.AddMinutes(delaytime); - DateTime endtime = starttime.AddMinutes(sustain); - - //创建一条任务 插 入数据库 - KongTiaoTimer k = new KongTiaoTimer(); - k.HotelID = hotel_id; - k.HostID = host_id; - k.HotelCode = Code; - k.RoomNo = RoomNo; - k.MissonKey = MissionKey; - k.IsCancel = 0; - k.CreateTime = ti; - k.StartTime = starttime.ToString("yyyy-MM-dd HH:mm:ss"); - k.EndTime = endtime.ToString("yyyy-MM-dd HH:mm:ss"); - k.CreateDate = CD; - - //string HotelCode, string RoomNo, int host_id,int hotel_id - - MissionRequestData mm = new MissionRequestData(); - - mm.DelayTimer = delaytime; - mm.KT = k; - //mm.HotelCode = Code; - //mm.RoomNo = RoomNo; - //mm.HotelID = hotel_id; - //mm.HostID = host_id; - //mm.CreateDate = CD; - - string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm); - //k.JsonData = jsstr; - k.MissonKey = MissionKey; - KongTiaoManager.Save(k); - - //给 任务管理系统 发送消息 - var client1 = new RestClient(Missionsys_Address); - var request1 = new RestRequest("api/index", Method.POST); - - logger.Error("任务管理系统发送了数据:" + Missionsys_Address + "API/Index"); - //GetRequest ggg = new GetRequest() { creatDate = DateTime.Now.ToString("yyyy-mm-dd"), roomNumber = RoomNo, code = Code }; - - - request1.AddParameter("jsonData", jsstr); - - client1.ExecuteAsync(request1, (response) => { }); - } - } #endregion - HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录 - if (hotelSeason != null) + if (roomStatus.ID == 8) { - List list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 1, true); - List hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路 - if (list.Count > 0 && hostModals.Count > 0) + #region 退房后空调控制 + HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录 + if (hotelSeason != null) { - System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 - foreach (HotelAirControl item in list) + //条件:1出租后,2取电后,3断电后 + List list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 4, true); + List hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路 + if (list.Count > 0 && hostModals.Count > 0) { - foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性 + System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 + foreach (HotelAirControl item in list) { - if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节,则发送命令给rcu设置空调 + foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性 { - var TTT = new Tuple>(host, item, hostModals); - Task.Factory.StartNew((state) => + if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节,则发送命令给rcu设置空调 + { + #region 备用方案 + //var TTT = new Tuple>(host, item, hostModals); + //Task.Factory.StartNew((state) => + // { + // System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 + + // Tuple> NNN = state as Tuple>; + + // var QQ0 = NNN.Item1; + // var QQ1 = NNN.Item2; + // var QQ2 = NNN.Item3; + // foreach (HostModal hostModal in QQ2) + // { + // HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变 + // } + // }, TTT); + #endregion + + + try { - System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 - - Tuple> NNN = state as Tuple>; - - var QQ0 = NNN.Item1; - var QQ1 = NNN.Item2; - var QQ2 = NNN.Item3; - foreach (HostModal hostModal in QQ2) + //这段代码在生产环境中不管用,很奇怪 + string KeyMission = System.Guid.NewGuid().ToString("N"); + MissonData m = new MissonData() { - //host 只需要hostnumber和mac - //hostmodal只需要 address //和type - //device.Address = hostModal.Modal.ModalAddress; - //device.Type = hostModal.Modal.Type; - HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变 + hostnumber = host.HostNumber, + mac = host.MAC, + }; + + m.HostModalList = new List>(); + foreach (HostModal hostModal in hostModals) + { + var t = new Tuple(hostModal.Modal.ModalAddress, hostModal.Modal.Type); + m.HostModalList.Add(t); } - }, TTT); - try - { - //这段代码在生产环境中不管用,很奇怪 - //string KeyMission = System.Guid.NewGuid().ToString("N"); + m.Status = item.Status; + m.SettingTemp = item.SettingTemp; + m.FanSpeed = item.FanSpeed; + m.Mode = item.Mode; + string MKey = "TuiFang_" + KeyMission; + CSRedisCacheHelper.Set_Partition(MKey, m, 1); - //MissonData m = new MissonData() - //{ - // hostnumber = host.HostNumber, - // mac = host.MAC, - //}; - - //m.HostModalList = new List>(); - //foreach (HostModal hostModal in hostModals) - //{ - // var t = new Tuple(hostModal.Modal.ModalAddress, hostModal.Modal.Type); - // m.HostModalList.Add(t); - //} - //m.Status = item.Status; - //m.SettingTemp = item.SettingTemp; - //m.FanSpeed = item.FanSpeed; - //m.Mode = item.Mode; - //string MKey = "Mission_" + KeyMission; - //CSRedisCacheHelper.Set_Partition(MKey, m, 1); - - //DelayExe_Task(host, item.DelayTime, KeyMission); - break; - } - catch (Exception) - { + DelayExe_Task(host, item.DelayTime, MKey); + break; + } + catch (Exception) + { + } } } } } } + #endregion } - #endregion + + if (roomStatus.ID == 2) + { + #region 出租后空调处理 + //阿宝 + //空调 在10分钟无人入住的情况之下,就关闭 + //启动 一个任务 + + #region 阿宝添加的 + int currenthotelid = host.SysHotel.ID; + RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == currenthotelid); + if (nnn != null) + { + if (!nnn.How.Equals("without")) + { + string Code = host.SysHotel.Code; + string RoomNo = host.RoomNumber; + DateTime CreateDate = host.SysHotel.CreatedDate; + string CD = CreateDate.ToString("yyyy-MM-dd"); + int hotel_id = host.SysHotel.ID; + int host_id = host.ID; + string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + int delaytime = nnn.DelayTime; + int sustain = 20; + string MissionKey = System.Guid.NewGuid().ToString("N"); + DateTime starttime = DateTime.Now.AddMinutes(delaytime); + DateTime endtime = starttime.AddMinutes(sustain); + + //创建一条任务 插 入数据库 + KongTiaoTimer k = new KongTiaoTimer(); + k.HotelID = hotel_id; + k.HostID = host_id; + k.HotelCode = Code; + k.RoomNo = RoomNo; + k.MissonKey = MissionKey; + k.IsCancel = 0; + k.CreateTime = ti; + k.StartTime = starttime.ToString("yyyy-MM-dd HH:mm:ss"); + k.EndTime = endtime.ToString("yyyy-MM-dd HH:mm:ss"); + k.CreateDate = CD; + + //string HotelCode, string RoomNo, int host_id,int hotel_id + + MissionRequestData mm = new MissionRequestData(); + + mm.DelayTimer = delaytime; + mm.KT = k; + //mm.HotelCode = Code; + //mm.RoomNo = RoomNo; + //mm.HotelID = hotel_id; + //mm.HostID = host_id; + //mm.CreateDate = CD; + + string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm); + //k.JsonData = jsstr; + k.MissonKey = MissionKey; + KongTiaoManager.Save(k); + + //给 任务管理系统 发送消息 + var client1 = new RestClient(Missionsys_Address); + var request1 = new RestRequest("api/index", Method.POST); + + logger.Error("任务管理系统发送了数据:" + Missionsys_Address + "API/Index"); + //GetRequest ggg = new GetRequest() { creatDate = DateTime.Now.ToString("yyyy-mm-dd"), roomNumber = RoomNo, code = Code }; + + + request1.AddParameter("jsonData", jsstr); + + client1.ExecuteAsync(request1, (response) => { }); + } + } + + #endregion + + HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录 + if (hotelSeason != null) + { + List list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 1, true); + List hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路 + if (list.Count > 0 && hostModals.Count > 0) + { + System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 + foreach (HotelAirControl item in list) + { + foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性 + { + if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节,则发送命令给rcu设置空调 + { + var TTT = new Tuple>(host, item, hostModals); + Task.Factory.StartNew((state) => + { + System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行 + + Tuple> NNN = state as Tuple>; + + var QQ0 = NNN.Item1; + var QQ1 = NNN.Item2; + var QQ2 = NNN.Item3; + foreach (HostModal hostModal in QQ2) + { + //host 只需要hostnumber和mac + //hostmodal只需要 address //和type + //device.Address = hostModal.Modal.ModalAddress; + //device.Type = hostModal.Modal.Type; + HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变 + } + }, TTT); + try + { + //这段代码在生产环境中不管用,很奇怪 + //string KeyMission = System.Guid.NewGuid().ToString("N"); + + //MissonData m = new MissonData() + //{ + // hostnumber = host.HostNumber, + // mac = host.MAC, + //}; + + //m.HostModalList = new List>(); + //foreach (HostModal hostModal in hostModals) + //{ + // var t = new Tuple(hostModal.Modal.ModalAddress, hostModal.Modal.Type); + // m.HostModalList.Add(t); + //} + //m.Status = item.Status; + //m.SettingTemp = item.SettingTemp; + //m.FanSpeed = item.FanSpeed; + //m.Mode = item.Mode; + //string MKey = "Mission_" + KeyMission; + //CSRedisCacheHelper.Set_Partition(MKey, m, 1); + + //DelayExe_Task(host, item.DelayTime, KeyMission); + break; + } + catch (Exception) + { + + } + } + } + } + } + } + #endregion + } + } + catch (Exception ex) + { + logger.Error(ex.Message); + logger.Error(ex.StackTrace); } } public class MissonData @@ -1116,7 +1124,7 @@ namespace Service.Implement public static readonly string Missionsys_Address = ConfigurationManager.AppSettings["missionsys_address"]; public static readonly string Currentsys_address = ConfigurationManager.AppSettings["currentsys_address"]; - public void TimerECO(string hotelcode,int sheng_jiang_value) + public void TimerECO(string hotelcode, int sheng_jiang_value) { try { diff --git a/WebSite/Controllers/ApiController.cs b/WebSite/Controllers/ApiController.cs index 546be2e..70db984 100644 --- a/WebSite/Controllers/ApiController.cs +++ b/WebSite/Controllers/ApiController.cs @@ -81,7 +81,18 @@ namespace WebSite.Controllers /// private Host CheckRoomNumber(string code, string creatDate, ref string msg, ref int hotelID, string roomNumber = "") { - SysHotel sysHotel = SysHotelManager.GetByCode(code, Convert.ToDateTime(creatDate)); + string Key = "GetHotelInfo_" + code + "_" + creatDate; + var Obj = MemoryCacheHelper.Get(Key); + SysHotel sysHotel = null; + if (Obj == null) + { + sysHotel = SysHotelManager.GetByCode(code, Convert.ToDateTime(creatDate)); + MemoryCacheHelper.SlideSet(Key, sysHotel, new TimeSpan(0, 5, 0)); + } + else + { + sysHotel = Obj as SysHotel; + } if (sysHotel == null) { msg = "酒店未知"; @@ -91,7 +102,19 @@ namespace WebSite.Controllers hotelID = sysHotel.ID; if (!string.IsNullOrEmpty(roomNumber)) { - Host host = HostManager.GetByRoomNumber(roomNumber, sysHotel.ID); + Host host = null; + string Key1 = "QueryHostInfo_" + roomNumber + "_" + sysHotel.ID; + var ooo = MemoryCacheHelper.Get(Key1); + if (ooo != null) + { + host = ooo as Host; + } + else + { + host = HostManager.GetByRoomNumber(roomNumber, sysHotel.ID); + MemoryCacheHelper.SlideSet(Key1, host, new TimeSpan(0, 5, 0)); + } + if (host == null) { msg = "房号[" + roomNumber + "]不存在"; @@ -3411,117 +3434,118 @@ namespace WebSite.Controllers [HttpPost()] public ActionResult GetAirDetectListPost() { - Task.Factory.StartNew(() => + //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) { - try + 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) { - List listdata = GetPrepareData(); + 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); - var QQQ = listdata.GroupBy(A => new { A.HotelID, A.HotelCode, A.RoomNumber, A.CreatDate }); + TimeSpan ts = DateTime.Now.ToLocalTime() - new DateTime(1970, 1, 1, 8, 0, 0, 0, DateTimeKind.Utc); + string current_timestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); - foreach (var itemKey in QQQ) + 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) { - 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"); + //string Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName); + string ModalAddress = modal.Modal.ModalAddress; - Host host = CheckRoomNumber(code, cd, ref msg, ref hotelID, roomNumber); - if (host == null) + string status = modal.Brightness.ToString(); + string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + ModalAddress; + var obj = CSRedisCacheHelper.Get_Partition(KKey); + if (obj != null) { - logger.Error("host not exists hotelcode: " + code + " createDate: " + cd + " roomnumber: " + roomNumber); - continue; - //return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); + HostModal_Cache hhh = obj as HostModal_Cache; + status = hhh.Brightness.ToString(); } - if (host != null) + + switch (ModalAddress) { - var hostModals = HostModalManager.Load(host.ID, DeviceType.AirDetect).Where(r => r.Modal.WXActiveIndicator); + 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; - 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); - }); + 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); - } - }); + } + } + 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); } @@ -3754,7 +3778,7 @@ namespace WebSite.Controllers }); } var QQQ = result.ToList(); - QQQ.Sort(); + //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 }); @@ -4137,18 +4161,24 @@ namespace WebSite.Controllers 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) + if (!string.IsNullOrEmpty(CleanUUID)) { - string V = ""; - D1.TryGetValue("job_status", out V); - if (V.Equals("cancelled")) + if (FFFA != null && FFFA.data != null && FFFA.data.Count > 0) { - 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); + 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); + } + } } } } @@ -5118,6 +5148,7 @@ namespace WebSite.Controllers long jishu_error = Interlocked.Read(ref MvcApplication.UDPServerErrorCount); if (jishu_error >= 3) { + logger.Error("重启了UDP服务器"); Interlocked.Exchange(ref MvcApplication.UDPServerErrorCount, 0); var hostServer = (IHostServer)MvcApplication.cxt.GetObject("RCUHost.HostServer"); hostServer.Start(); diff --git a/WebSite/Controllers/HomeController.cs b/WebSite/Controllers/HomeController.cs index 713979c..99f7d8e 100644 --- a/WebSite/Controllers/HomeController.cs +++ b/WebSite/Controllers/HomeController.cs @@ -117,11 +117,12 @@ namespace WebSite.Controllers public ActionResult LogOn() { string result = ""; - if (!Common.MyDes.Validate(ref result)) - { - ViewData["Msg"] = result; - return View("License"); - } + //这个是公网没有必要再验证证书了 + //if (!Common.MyDes.Validate(ref result)) + //{ + // ViewData["Msg"] = result; + // return View("License"); + //} if (Request.Cookies["Account"] != null) { ViewData["Account"] = HttpUtility.UrlDecode(Request.Cookies["Account"].Value); diff --git a/WebSite/Controllers/IoTController.cs b/WebSite/Controllers/IoTController.cs index af229b4..07dd5ca 100644 --- a/WebSite/Controllers/IoTController.cs +++ b/WebSite/Controllers/IoTController.cs @@ -1541,7 +1541,7 @@ namespace WebSite.Controllers bool bsa = hostModal.Modal.Type == DeviceType.AirConditioner; string KKKey = System.Guid.NewGuid().ToString("N"); - bool wendu1 = KongTiaoControlName.Equals("IncrementTemperatureRequest") || KongTiaoControlName.Equals("IncrementTemperatureRequest")||KongTiaoControlName.Equals("SetTemperatureRequest"); + bool wendu1 = KongTiaoControlName.Equals("IncrementTemperatureRequest") || KongTiaoControlName.Equals("IncrementTemperatureRequest") || KongTiaoControlName.Equals("SetTemperatureRequest"); bool fengsu1 = KongTiaoControlName.Equals("SetFanSpeedRequest") || KongTiaoControlName.Equals("IncrementFanSpeedRequest") || KongTiaoControlName.Equals("DecrementFanSpeedRequest"); bool moshi1 = KongTiaoControlName.Equals("SetModeRequest"); //特殊酒店 @@ -6291,7 +6291,9 @@ namespace WebSite.Controllers resp.status = 1; string nnn = Newtonsoft.Json.JsonConvert.SerializeObject(resp); logger.Error("投诉信息给宝镜推送: " + nnn); - XuanZhuOperation.ReportService(ttt.Item3, resp); + //XuanZhuOperation.ReportService(ttt.Item3, resp); + + MyHttp.SendHttpData(ttt.Item3, resp); }, tup); } diff --git a/WebSite/Global.asax.cs b/WebSite/Global.asax.cs index 6f0cde6..e989b54 100644 --- a/WebSite/Global.asax.cs +++ b/WebSite/Global.asax.cs @@ -94,6 +94,7 @@ namespace WebSite } protected override void Application_Start(object sender, EventArgs e) { + logger.Error("Web重启了"); // 在应用程序启动时调用 PreHot(); log4net.Config.XmlConfigurator.Configure();//初始化log4net @@ -279,16 +280,17 @@ namespace WebSite { try { - hostServer.Close(); - System.Threading.Thread.Sleep(5000); - System.Net.WebRequest request = System.Net.WebRequest.Create(currentUrl); - System.Net.WebResponse response = request.GetResponse(); - logger.Error("系统重启Web服务"); - response.Close(); + //hostServer.Close(); + //System.Threading.Thread.Sleep(5000); + //System.Net.WebRequest request = System.Net.WebRequest.Create(currentUrl); + //System.Net.WebResponse response = request.GetResponse(); + //logger.Error("系统重启Web服务"); + //response.Close(); } - catch (Exception) + catch (Exception ex) { - + logger.Error("重启原因为:" + ex.Message); + logger.Error(ex.StackTrace); } } @@ -696,10 +698,10 @@ namespace WebSite _client.UpdateCheckInOrOutRecord(dr["Code"].ToString(), Convert.ToInt64(dr["ID"]), flag);//更新已同步状态 string RoomNUM = dr["RoomNumber"].ToString(); - var T = new Tuple(hotelID,RoomNUM,roomStatus); + var T = new Tuple(hotelID, RoomNUM, roomStatus); Task.Factory.StartNew((state) => { - var T1 = state as Tuple; + var T1 = state as Tuple; Host host = HostManager.GetByRoomNumber(T1.Item2, T1.Item1); if (host != null) { @@ -711,7 +713,7 @@ namespace WebSite ddd.Status = T1.Item3; CSRedisCacheHelper.Set_PartitionWithForever(Key, ddd); } - },T); + }, T); } /// /// 定时上报主机异常记录 @@ -737,13 +739,119 @@ namespace WebSite resp.status = 2; resp.faultType = 1; resp.faultData = 1; - XuanZhuOperation.ReportService(hotel.FaultPushURL, resp); + //XuanZhuOperation.ReportService(hotel.FaultPushURL, resp); + + MyHttp.SendHttpData(hotel.FaultPushURL, resp); } } logger.Error(string.Format("定时上报酒店({0})主机异常记录", hotel.Code)); } }, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default); } + + + protected void Application_Error(object sender, EventArgs e) + { + try + { + Exception ex = Server.GetLastError(); + logger.Error("IIS:" + ex.Message); + logger.Error(ex.StackTrace); + } + catch (Exception ex) + { + logger.Error("IIS Exception:" + ex.Message); + } + } + + // 存储恶意IP和请求频率 + private static ConcurrentDictionary _ipRequests = new ConcurrentDictionary(); + protected void Application_BeginRequest(object sender, EventArgs e) + { + try + { + var ip = Request.UserHostAddress; + var url = Request.Url.AbsolutePath.ToLower(); + + // 定义要拦截的路径模式 + var maliciousPatterns = new[] + { + @".*\.git/*", + @"^/sdk", + @"^/HNAP1", + @"^/evox", + @"^/nmaplowercheck", + @"^/phpmyadmin", + @"^/admin", + @"^/wp-login", + @"^/shell", + @"^/cmd", + @".*\.php$", + @".*\.asp$", + @".*\.git/credentials" + //@".*\.aspx$" + }; + + // 检查是否为恶意路径 + if (maliciousPatterns.Any(pattern => System.Text.RegularExpressions.Regex.IsMatch(url, pattern))) + { + LogMaliciousRequest(ip, url); + Response.StatusCode = 403; + //Response.End(); + Context.ApplicationInstance.CompleteRequest(); + return; + } + // 频率限制(可选) + if (IsMaliciousRequestRate(ip)) + { + Response.StatusCode = 429; // Too Many Requests + Context.ApplicationInstance.CompleteRequest(); + //Response.End(); + return; + } + } + catch (Exception ex) + { + logger.Error("恶意请求出错了:" + ex.Message); + } + } + + private void LogMaliciousRequest(string ip, string url) + { + logger.Error("恶意IP:" + ip + " URL:" + url); + } + + private bool IsMaliciousRequestRate(string ip) + { + // 简单的频率检查逻辑 + var now = DateTime.UtcNow; + var info = _ipRequests.GetOrAdd(ip, _ => new RequestInfo()); + + lock (info) + { + info.RequestCount++; + info.LastRequest = now; + + // 如果1分钟内超过100次请求,认为是恶意请求 + if (info.RequestCount > 100 && (now - info.FirstRequest).TotalMinutes < 1) + { + return true; + } + } + return false; + } + + private class RequestInfo + { + public RequestInfo() + { + this.FirstRequest = DateTime.UtcNow; + } + public int RequestCount { get; set; } + public DateTime FirstRequest { get; set; } + public DateTime LastRequest { get; set; } + } + /// /// 获取当前登录帐号 ///