From 1ec13289dc95144cc7b6c772766b03150684fc12 Mon Sep 17 00:00:00 2001 From: TianMaiCheng <746290578@qq.com> Date: Fri, 26 Dec 2025 10:17:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A9=E7=8C=AB=E7=B2=BE=E7=81=B5=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E9=9F=B3=E4=B9=90=20=EF=BC=8C=E5=AE=98=E6=96=B9?= =?UTF-8?q?=E6=96=87=E6=A1=A3=20=E4=B8=8A=E7=9A=84=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=8D=E7=AE=A1=E7=94=A8=EF=BC=8C=E7=BB=8F?= =?UTF-8?q?=E8=BF=87=E8=AF=A2=E9=97=AE=E4=BD=BF=E7=94=A8=20=E5=8F=A6?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=AE=8C=E7=BE=8E?= =?UTF-8?q?=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + CRICS_V3_1124.suo | Bin 12780544 -> 12780544 bytes RCUHost/Implement/HostServer.cs | 63 +++++++------------ RCUHost/Implement/RoomStatusReceiver.cs | 11 ++-- Service/Implement/HostManager.cs | 13 ++-- WebSite/Controllers/ApiController.cs | 60 ++++++++++-------- WebSite/Controllers/IoTController.cs | 12 +++- WebSite/Controllers/RoomStatusController.cs | 21 +++++-- WebSite/Global.asax.cs | 65 +++++++++++++++++++- WebSite/Web.config | 4 +- 10 files changed, 165 insertions(+), 85 deletions(-) diff --git a/.gitignore b/.gitignore index 8a0505b..e267514 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ /ConsoleApplication666/bin /WebSite/Logs WebSite/welcomebgm +MvcApplication1 diff --git a/CRICS_V3_1124.suo b/CRICS_V3_1124.suo index 71b5e31698163a3ef4e91b6b754d47508398f789..d144369a421dd75e69050e1a1ff441593d6e76e4 100644 GIT binary patch delta 28747 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 diff --git a/RCUHost/Implement/HostServer.cs b/RCUHost/Implement/HostServer.cs index d996270..2a84b20 100644 --- a/RCUHost/Implement/HostServer.cs +++ b/RCUHost/Implement/HostServer.cs @@ -172,50 +172,23 @@ namespace RCUHost.Implement CSRedisCacheHelper.redis1.Del(UDPAllDataKey); CSRedisCacheHelper.redis1.XGroupCreate(UDPAllDataKey, "UDPData", "0", true); - Task.Factory.StartNew(() => - { - while (true) + for (int i = 1; i <= 10; i++) + { + Task.Factory.StartNew((iii) => { - StreamConsume("UDPData", "Crics1", "task1"); - } - }, TaskCreationOptions.LongRunning); - Task.Factory.StartNew(() => - { - while (true) - { - StreamConsume("UDPData", "Crics2", "task2"); - } - }, TaskCreationOptions.LongRunning); - - Task.Factory.StartNew(() => - { - while (true) - { - StreamConsume("UDPData", "Crics3", "task3"); - } - }, TaskCreationOptions.LongRunning); - - Task.Factory.StartNew(() => - { - while (true) - { - StreamConsume("UDPData", "Crics4", "task4"); - } - }, TaskCreationOptions.LongRunning); - - Task.Factory.StartNew(() => - { - while (true) - { - StreamConsume("UDPData", "Crics5", "task5"); - } - }, TaskCreationOptions.LongRunning); + string osos = iii.ToString(); + while (true) + { + StreamConsume("UDPData", "Crics" + osos, "task" + osos); + } + }, i, TaskCreationOptions.LongRunning); + } } catch (Exception ex) { logger.Error("Host Server启动失败,端口:3339"); Close(); - //throw ex;//不能去掉,否则重启iis服务,通讯服务不会再次启动 + throw ex;//不能去掉,否则重启iis服务,通讯服务不会再次启动 } } /// @@ -1056,11 +1029,17 @@ namespace RCUHost.Implement if (!string.IsNullOrEmpty(e)) { string ffg = "https://www.boonlive-rcu.com/welcomebgm/" + e; - TianMaoOperation.PostWebRequestToTianMao("AddOrUpdateWelcomeText", - Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], MusicUrl = ffg, WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 + //TianMaoOperation.PostWebRequestToTianMao("AddOrUpdateWelcomeText", + //Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], MusicUrl = ffg, WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 + TianMaoOperation.PostWebRequestToTianMao("PushWelcome", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1], WelcomeText = b, WelcomeMusicUrl = ffg }), c, d);//通知天猫精灵播放欢迎词 + } + else + { + + TianMaoOperation.PostWebRequestToTianMao("PushWelcome", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1], WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 } - TianMaoOperation.PostWebRequestToTianMao("PushWelcome", - Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1], WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 Interface3Log w1 = new Interface3Log(); w1.HotelCode = c; diff --git a/RCUHost/Implement/RoomStatusReceiver.cs b/RCUHost/Implement/RoomStatusReceiver.cs index 8b84ebc..3463f72 100644 --- a/RCUHost/Implement/RoomStatusReceiver.cs +++ b/RCUHost/Implement/RoomStatusReceiver.cs @@ -991,12 +991,15 @@ namespace RCUHost.Implement if (!string.IsNullOrEmpty(bb)) { string ffg = "https://www.boonlive-rcu.com/welcomebgm/" + bb; - TianMaoOperation.PostWebRequestToTianMao("AddOrUpdateWelcomeText", - Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], MusicUrl = ffg, WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 + TianMaoOperation.PostWebRequestToTianMao("PushWelcome", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1], WelcomeText = b, WelcomeMusicUrl = ffg }), c, d);//通知天猫精灵播放欢迎词 + } + else + { + TianMaoOperation.PostWebRequestToTianMao("PushWelcome", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1], WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 } - TianMaoOperation.PostWebRequestToTianMao("PushWelcome", - Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1], WelcomeText = b }), c, d);//通知天猫精灵播放欢迎词 Interface3Log w1 = new Interface3Log(); w1.HotelCode = c; diff --git a/Service/Implement/HostManager.cs b/Service/Implement/HostManager.cs index 48997d1..815b9f0 100644 --- a/Service/Implement/HostManager.cs +++ b/Service/Implement/HostManager.cs @@ -1286,10 +1286,11 @@ namespace Service.Implement RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == hotel_id); - foreach (HostModal hostModal in hostModals) - { - if (nnn != null) + + if (nnn != null) + { + foreach (HostModal hostModal in hostModals) { logger.Error("nnn.how " + nnn.How); //close or monitor @@ -1315,7 +1316,6 @@ namespace Service.Implement { } } - } logger.Error("Air Condition Controller"); @@ -1327,9 +1327,10 @@ namespace Service.Implement } } } - catch (Exception) + catch (Exception ex) { - + logger.Error(ex.Message); + logger.Error(ex.StackTrace); } } diff --git a/WebSite/Controllers/ApiController.cs b/WebSite/Controllers/ApiController.cs index 70db984..d812e24 100644 --- a/WebSite/Controllers/ApiController.cs +++ b/WebSite/Controllers/ApiController.cs @@ -608,33 +608,45 @@ namespace WebSite.Controllers 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); - } + string code = jData["code"].ToString(); + string cd = jData["creatDate"].ToString(); + string KKK = "GetRoomAirList_" + roomNumber + "_" + code + "_" + cd; List list = new List(); - foreach (HostModal item in hostModals) + var dbdata = HttpContext.Cache.Get(KKK); + if (dbdata != null) { - Air air = new Air + list = dbdata as List; + } + else + { + Host host = CheckRoomNumber(code, cd, ref msg, ref hotelID, roomNumber); + if (host == null) { - 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); + 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); + } + 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); + } + HttpContext.Cache.Insert(KKK, list, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); diff --git a/WebSite/Controllers/IoTController.cs b/WebSite/Controllers/IoTController.cs index 9bc18b5..cb9e801 100644 --- a/WebSite/Controllers/IoTController.cs +++ b/WebSite/Controllers/IoTController.cs @@ -4346,10 +4346,20 @@ namespace WebSite.Controllers string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID.ToString() + "_" + device.Address; var hostModal_T = CSRedisCacheHelper.Get_Partition(KKey); + bool JumpBrightcontrol = true; + var is_100 = devicesItem.value.HasValue; + if (is_100) + { + if (devicesItem.value == 100) + { + JumpBrightcontrol = false; + } + } + if (co == 1085 || co == 1001 || co == 1003 || co > 2000) { //logger.Error("查询的Key值:"+KKey); - if (hostModal_T != null && hostModal_T.Status == 2) { continue; } + if (hostModal_T != null && hostModal_T.Status == 2 && JumpBrightcontrol == true) { continue; } } if (devicesItem.value.HasValue) { diff --git a/WebSite/Controllers/RoomStatusController.cs b/WebSite/Controllers/RoomStatusController.cs index fadb139..9afe869 100644 --- a/WebSite/Controllers/RoomStatusController.cs +++ b/WebSite/Controllers/RoomStatusController.cs @@ -184,7 +184,7 @@ namespace WebSite.Controllers Abnormal4Date = Convert.ToDateTime(r[15]).Year < 1900 ? "" : Convert.ToDateTime(r[15]).ToString("yyyy-MM-dd HH:mm:ss"), Abnormal5 = Convert.ToDateTime(r[17]).Year < 1900 ? "" : r[16], Abnormal5Date = Convert.ToDateTime(r[17]).Year < 1900 ? "" : Convert.ToDateTime(r[17]).ToString("yyyy-MM-dd HH:mm:ss") - }).Where(A=>!string.IsNullOrEmpty(A.Name)); + }).Where(A => !string.IsNullOrEmpty(A.Name)); return Json(restult, JsonRequestBehavior.AllowGet); } @@ -408,10 +408,10 @@ namespace WebSite.Controllers //string nenghaoKey = CacheKey.NengHao + "_" + mac; string nenghaoKey = CacheKey.NengHao + "_" + host_number; //var NNNHHH = CSRedisCacheHelper.ForeverGet(nenghaoKey); - var NNNHHH = CSRedisCacheHelper.Get_Partition(nenghaoKey,1); + var NNNHHH = CSRedisCacheHelper.Get_Partition(nenghaoKey, 1); if (NNNHHH != null) { - roomModel.Power = NNNHHH.P.ToString()+"w"; + roomModel.Power = NNNHHH.P.ToString() + "w"; } else { @@ -581,7 +581,18 @@ namespace WebSite.Controllers //} //②获取服务信息 //var services = HostModalManager.Load(room.HostID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator && r.Status == 1); - var services = HostModalManager.Load(room.HostID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator); + string KKServiceInfo = "ServiceInfo_" + room.HostID; + var oobsc = HttpContext.Cache.Get(KKServiceInfo); + IList services = null; + if (oobsc != null) + { + services = oobsc as IList; + } + else + { + services = HostModalManager.Load(room.HostID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator).ToList(); + HttpContext.Cache.Insert(KKServiceInfo,services,null,DateTime.Now.AddMinutes(30),Cache.NoSlidingExpiration); + } roomModel.Services = new List(); foreach (var service in services) { @@ -739,7 +750,7 @@ namespace WebSite.Controllers if (string.IsNullOrEmpty(roomModel.Power)) { - roomModel.Power = ""; + roomModel.Power = ""; } floor.Sort = room.GroupSort; rooms.Add(roomModel); diff --git a/WebSite/Global.asax.cs b/WebSite/Global.asax.cs index e989b54..64dd7de 100644 --- a/WebSite/Global.asax.cs +++ b/WebSite/Global.asax.cs @@ -98,6 +98,29 @@ namespace WebSite // 在应用程序启动时调用 PreHot(); log4net.Config.XmlConfigurator.Configure();//初始化log4net + // 全局异常捕获,避免未处理异常导致进程崩溃 + AppDomain.CurrentDomain.UnhandledException += (s, args) => + { + try + { + var ex = args.ExceptionObject as Exception; + if (ex != null) + { + logger.Error("UnhandledException:" + ex.Message); + logger.Error(ex.StackTrace); + } + } + catch { } + }; + TaskScheduler.UnobservedTaskException += (s, args) => + { + try + { + logger.Error("UnobservedTaskException:" + args.Exception.ToString()); + args.SetObserved(); + } + catch { } + }; SetInitAccount(); StartHostServer(); //StartHostServerNew(); @@ -201,10 +224,15 @@ namespace WebSite var T = sender as Timer; try { + // 防止重入 T.Stop(); double d = CPUData.GetCPU(); DataTongJi.CPU_Data.Add(d); - T.Start(); + // 简单的上限保护,避免长期积累导致内存膨胀 + //if (DataTongJi.CPU_Data.Count > 1000) + //{ + // DataTongJi.CPU_Data = new System.Collections.Concurrent.ConcurrentBag(); + //} } catch (Exception ex) { @@ -212,6 +240,7 @@ namespace WebSite } finally { + // 恢复计时器 T.Start(); } } @@ -773,6 +802,10 @@ namespace WebSite var ip = Request.UserHostAddress; var url = Request.Url.AbsolutePath.ToLower(); + // 定期清理恶意IP记录,避免字典无限增长 + var nowUtc = DateTime.UtcNow; + CleanupIpRecordIfNeeded(nowUtc); + // 定义要拦截的路径模式 var maliciousPatterns = new[] { @@ -837,10 +870,40 @@ namespace WebSite { return true; } + // 超过统计窗口则重置计数窗口 + if ((now - info.FirstRequest).TotalMinutes >= 1) + { + info.FirstRequest = now; + info.RequestCount = 1; + } } return false; } + // 恶意IP记录清理节流控制 + private static DateTime _lastIpCleanup = DateTime.MinValue; + private static readonly TimeSpan _ipCleanupInterval = TimeSpan.FromMinutes(1); + private static readonly TimeSpan _ipRetention = TimeSpan.FromMinutes(10); + + private static void CleanupIpRecordIfNeeded(DateTime nowUtc) + { + if ((nowUtc - _lastIpCleanup) < _ipCleanupInterval) return; + _lastIpCleanup = nowUtc; + try + { + foreach (var kv in _ipRequests.ToArray()) + { + var info = kv.Value; + if ((nowUtc - info.LastRequest) > _ipRetention) + { + RequestInfo removed; + _ipRequests.TryRemove(kv.Key, out removed); + } + } + } + catch { } + } + private class RequestInfo { public RequestInfo() diff --git a/WebSite/Web.config b/WebSite/Web.config index cbf75c1..30ae184 100644 --- a/WebSite/Web.config +++ b/WebSite/Web.config @@ -200,7 +200,7 @@ - + @@ -231,7 +231,7 @@ - +