From f9fe3a36e632236ff7da389077f3737d08063895 Mon Sep 17 00:00:00 2001 From: TianMaiCheng <746290578@qq.com> Date: Mon, 29 Dec 2025 15:03:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 有一些效果,原来10分钟就会崩溃的,现在延长了一个小时,不过有的时候,还是会崩溃 --- CRICS_V3_1124.suo | Bin 12780544 -> 12780544 bytes Common/UDPPackageCount.cs | 24 ++ Common/XuanZhuOperation.cs | 4 +- CommonEntity/CacheKey.cs | 1 + RCUHost/Config/Receiver.xml | 1 + RCUHost/Implement/HostServer.cs | 3 +- RCUHost/Implement/RoomStatusReceiver.cs | 10 +- Service/Implement/HostManager.cs | 67 +++- WebSite/Controllers/ApiController.cs | 437 ++++++++++++++++++------ WebSite/Global.asax.cs | 9 +- WebSite/Web.config | 274 +++++++-------- 11 files changed, 550 insertions(+), 280 deletions(-) diff --git a/CRICS_V3_1124.suo b/CRICS_V3_1124.suo index d144369a421dd75e69050e1a1ff441593d6e76e4..1030c1f4a82ec6b2b6a2e9abb5549b2b70fe3f74 100644 GIT binary patch delta 34663 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 delta 31753 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 Je%I}{{y+R>>FWRh diff --git a/Common/UDPPackageCount.cs b/Common/UDPPackageCount.cs index 0af65b4..e921157 100644 --- a/Common/UDPPackageCount.cs +++ b/Common/UDPPackageCount.cs @@ -6,6 +6,30 @@ using System.Text; using System.Collections.Concurrent; namespace Common { + public class WebAPI_TongJi + { + public static long GetRoomAirList = 0; + public static long SetRCUAir = 0; + public static long GetRoomSceneList = 0; + public static long SetRCUScene = 0; + public static long GetRoomLightList =0; + public static long SetRCULight = 0; + public static long GetRoomCurtainList = 0; + public static long SetRCUCurtain = 0; + public static long GetRoomServiceList = 0; + public static long SetRCUService = 0; + public static long GetOperationLog = 0; + public static long GetRoomMusicList = 0; + public static long SetRCUMusic = 0; + public static long GetRCUStatus = 0; + public static long GetAirDetectList = 0; + public static long GetHostFaultList = 0; + public static long GetRoomTypeAndModalsList = 0; + public static long GetRCUInfoForPDU = 0; + public static long GetSessionKey = 0; + public static long GetPhoneNumber = 0; + public static long GetHotelInfoForWX = 0; + } public class YUANZI_TongJi { public static long TotalReceiveCount = 0; diff --git a/Common/XuanZhuOperation.cs b/Common/XuanZhuOperation.cs index 4485345..590762d 100644 --- a/Common/XuanZhuOperation.cs +++ b/Common/XuanZhuOperation.cs @@ -64,8 +64,8 @@ namespace Common } catch (Exception ex) { - string Key = "HttpRequest_" + resp.code + "_" + resp.roomNumber; - MemoryCacheHelper.Set(Key, 1, DateTimeOffset.Now.AddMinutes(10)); + //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/CacheKey.cs b/CommonEntity/CacheKey.cs index 18443fe..abc50dc 100644 --- a/CommonEntity/CacheKey.cs +++ b/CommonEntity/CacheKey.cs @@ -122,6 +122,7 @@ namespace CommonEntity public static string KongTiaoAlert = "KT#Alert"; public static string WebChatDeviceFault = "WXFault"; + public static string DuOSToken = "DuOSToken"; } public class ChangLiangValue { diff --git a/RCUHost/Config/Receiver.xml b/RCUHost/Config/Receiver.xml index 2dd36b3..24e5eb2 100644 --- a/RCUHost/Config/Receiver.xml +++ b/RCUHost/Config/Receiver.xml @@ -177,6 +177,7 @@ + diff --git a/RCUHost/Implement/HostServer.cs b/RCUHost/Implement/HostServer.cs index 2a84b20..d14d71f 100644 --- a/RCUHost/Implement/HostServer.cs +++ b/RCUHost/Implement/HostServer.cs @@ -1514,7 +1514,8 @@ namespace RCUHost.Implement //添加统计信息 StepTongJi.SendInfo(3, "Task分配成功,即将开始执行", context.MessageID, context.IsMonitor); - if (cmdType == 0x36) + byte cmdTypeTTT = context.SystemHeader.Value.CmdType; + if (cmdTypeTTT == 0x36) { IReceiver receiver = receivers[(CommandType)0x36]; if (receiver != null) diff --git a/RCUHost/Implement/RoomStatusReceiver.cs b/RCUHost/Implement/RoomStatusReceiver.cs index 3463f72..b73f0f7 100644 --- a/RCUHost/Implement/RoomStatusReceiver.cs +++ b/RCUHost/Implement/RoomStatusReceiver.cs @@ -1035,8 +1035,14 @@ namespace RCUHost.Implement var d = hhh.RoomNumber; foreach (string cuid in a)//多个英文逗号隔开 { - TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK", - Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), c, d);//重置天猫精灵 + + string c1 = cuid.Split('&')[0]; + string c2 = cuid.Split('&')[1]; + if (!string.IsNullOrEmpty(c1) && !string.IsNullOrEmpty(c2)) + { + TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = c1, RoomNo = c2 }), c, d);//重置天猫精灵 + } Interface3Log w1 = new Interface3Log(); w1.HotelCode = c; diff --git a/Service/Implement/HostManager.cs b/Service/Implement/HostManager.cs index 815b9f0..39a0f86 100644 --- a/Service/Implement/HostManager.cs +++ b/Service/Implement/HostManager.cs @@ -565,28 +565,41 @@ namespace Service.Implement { if (!string.IsNullOrEmpty(host.XiaoDuCUID)) { - string accessToken = SysOauth2Repository.GetXiaoDuToken(); + string accessToken = ""; + string KKK = CacheKey.DuOSToken; + var ooo = MemoryCacheHelper.Get(KKK); + if (ooo != null) + { + accessToken = ooo.ToString(); + } + else + { + accessToken = SysOauth2Repository.GetXiaoDuToken(); + MemoryCacheHelper.Set(KKK,accessToken,DateTimeOffset.Now.AddMinutes(20)); + } if (!string.IsNullOrEmpty(accessToken) && host.SysHotel.IsPowerOffResetXiaoDu) { - System.Threading.Tasks.Task.Factory.StartNew(() => + + foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开 { - foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开 - { - XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度 - } - }); + XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度 + } + //Task.Factory.StartNew(() => + //{ + //}); } } if (!string.IsNullOrEmpty(host.TianMaoCUID)) { - System.Threading.Tasks.Task.Factory.StartNew(() => + + foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开 { - 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);//重置天猫精灵 - } - }); + TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK", + Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵 + } + //Task.Factory.StartNew(() => + //{ + //}); } } @@ -595,12 +608,34 @@ namespace Service.Implement if (roomStatus.ID == 8) { #region 退房后空调控制 - HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录 + HotelSeason hotelSeason = null; + string KKKOne = "HotelSeason_" + host.SysHotel.ID; + var ooss = MemoryCacheHelper.Get(KKKOne); + if (ooss != null) + { + hotelSeason = ooss as HotelSeason; + } + else + { + hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录 + MemoryCacheHelper.Set(KKKOne, hotelSeason, DateTimeOffset.Now.AddMinutes(20)); + } 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();//获取启用的空调回路 + string KKK = "HostModalRepository_" + host.ID; + List hostModals = null; + var ooo = MemoryCacheHelper.Get(KKK); + if (ooo != null) + { + hostModals = ooo as List; + } + else + { + hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路 + MemoryCacheHelper.Set(KKK, hostModals, DateTimeOffset.Now.AddMinutes(20)); + } if (list.Count > 0 && hostModals.Count > 0) { System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性 diff --git a/WebSite/Controllers/ApiController.cs b/WebSite/Controllers/ApiController.cs index d812e24..f29592f 100644 --- a/WebSite/Controllers/ApiController.cs +++ b/WebSite/Controllers/ApiController.cs @@ -604,6 +604,7 @@ namespace WebSite.Controllers //return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet); try { + Interlocked.Increment(ref WebAPI_TongJi.GetRoomAirList); WebApiInvoke_FenXi("GetRoomAirList"); string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); @@ -646,7 +647,7 @@ namespace WebSite.Controllers }; list.Add(air); } - HttpContext.Cache.Insert(KKK, list, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration); + HttpContext.Cache.Insert(KKK, list, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); @@ -703,6 +704,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { + Interlocked.Increment(ref WebAPI_TongJi.SetRCUAir); WebApiInvoke_FenXi("SetRCUAir"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); @@ -798,32 +800,45 @@ namespace WebSite.Controllers public ActionResult GetRoomSceneList(string jsonData) { + Interlocked.Increment(ref WebAPI_TongJi.GetRoomSceneList); 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); - } + string code = jData["code"].ToString(); + string cd = jData["creatDate"].ToString(); List list = new List(); - foreach (var modal in modals) + string KKK = "GetRoomSceneList_" + code + "_" + roomNumber + "_" + cd; + var ooo = HttpContext.Cache.Get(KKK); + if (ooo != null) { - SceneState sceneState = new SceneState + list = ooo as List; + } + else + { + Host host = CheckRoomNumber(code, cd, ref msg, ref hotelID, roomNumber); + if (host == null) { - SceneID = modal.ID, - Name = modal.Name, - Icon = modal.Icon - }; - list.Add(sceneState); + 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); + } + foreach (var modal in modals) + { + SceneState sceneState = new SceneState + { + SceneID = modal.ID, + Name = modal.Name, + Icon = modal.Icon + }; + list.Add(sceneState); + } + HttpContext.Cache.Insert(KKK, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); @@ -846,6 +861,7 @@ namespace WebSite.Controllers public ActionResult SetRCUScene(string jsonData) { + Interlocked.Increment(ref WebAPI_TongJi.SetRCUScene); string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { @@ -864,7 +880,18 @@ namespace WebSite.Controllers string sceneID = jData["sceneID"].ToString();//场景ID:1、2、3 //string status = jData["status"].ToString();//状态:1开,2关 - var scene = RoomTypeSceneManager.Get(int.Parse(sceneID)); + RoomTypeScene scene = null; + string KKK = "SetSceneData_" + sceneID; + var ooo = HttpContext.Cache.Get(KKK); + if (ooo != null) + { + scene = ooo as RoomTypeScene; + } + else + { + scene = RoomTypeSceneManager.Get(int.Parse(sceneID)); + HttpContext.Cache.Insert(KKK, scene, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); + } if (scene == null) { return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的场景" }, JsonRequestBehavior.AllowGet); @@ -892,58 +919,72 @@ namespace WebSite.Controllers /// 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 { + Interlocked.Increment(ref WebAPI_TongJi.GetRoomLightList); 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); + string code = jData["code"].ToString(); + string cd = jData["creatDate"].ToString(); + Host host = CheckRoomNumber(code, cd, 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) + + string KKK = "GetRoomLightList_" + code + "_" + roomNumber + "_" + cd; + var QQQ = HttpContext.Cache.Get(KKK); + if (QQQ != null) { - switch (modal.Modal.Type) + list = QQQ as IList; + } + else + { + //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); + //} + foreach (HostModal modal in hostModals) { - 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; + 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; + } } + HttpContext.Cache.Insert(KKK, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); } 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); @@ -964,6 +1005,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { + Interlocked.Increment(ref WebAPI_TongJi.SetRCULight); WebApiInvoke_FenXi("SetRCULight"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); @@ -1014,29 +1056,42 @@ namespace WebSite.Controllers //return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet); try { + Interlocked.Increment(ref WebAPI_TongJi.GetRoomCurtainList); 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); + string code = jData["code"].ToString(); + string cd = jData["creatDate"].ToString(); + Host host = CheckRoomNumber(code, cd, 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) + string KKK = "GetRoomCurtainList_" + code + "_" + roomNumber + "_" + code; + var data = HttpContext.Cache.Get(KKK); + if (data != null) { - Curtain curtain = new Curtain + list = data as IList; + } + else + { + IList hostModals = HostModalManager.Load(host.ID, DeviceType.Curtain).Where(r => r.Modal.WXActiveIndicator).ToList(); + if (hostModals == null || hostModals.Count < 1) { - Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), - ModalAddress = modal.Modal.ModalAddress, - Status = modal.Status - }; - list.Add(curtain); + return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置窗帘" }, JsonRequestBehavior.AllowGet); + } + 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); + } + HttpContext.Cache.Insert(KKK, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); @@ -1062,6 +1117,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { + Interlocked.Increment(ref WebAPI_TongJi.SetRCUCurtain); WebApiInvoke_FenXi("SetRCUCurtain"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); @@ -1111,6 +1167,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { + Interlocked.Increment(ref WebAPI_TongJi.GetRoomMusicList); WebApiInvoke_FenXi("GetRoomMusicList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); @@ -1161,6 +1218,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { + Interlocked.Increment(ref WebAPI_TongJi.SetRCUMusic); WebApiInvoke_FenXi("SetRCUMusic"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); @@ -1251,31 +1309,44 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { - + Interlocked.Increment(ref WebAPI_TongJi.GetRoomServiceList); 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); + string code = jData["code"].ToString(); + string cd = jData["creatDate"].ToString(); + Host host = CheckRoomNumber(code, cd, 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) + + string KKK = "GetRoomServiceList_" + code + "_" + roomNumber + "_" + cd; + var data = HttpContext.Cache.Get(KKK); + if (data != null) { - Light light = new Light + list = data as IList; + } + else + { + IList hostModals = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.WXActiveIndicator).ToList(); + if (hostModals == null || hostModals.Count < 1) { - Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), - ModalAddress = modal.Modal.ModalAddress, - Status = modal.Status - }; - list.Add(light); + return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置服务信息" }, JsonRequestBehavior.AllowGet); + } + //logger.Error(string.Format("api获取酒店{0}客房{1}服务列表,来自{2}", jData["code"].ToString(), roomNumber, GetClientIP())); + 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); + } + HttpContext.Cache.Insert(KKK, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); @@ -1299,6 +1370,7 @@ namespace WebSite.Controllers { try { + Interlocked.Increment(ref WebAPI_TongJi.SetRCUService); WebApiInvoke_FenXi("SetRCUService"); string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); @@ -1389,7 +1461,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { - + Interlocked.Increment(ref WebAPI_TongJi.GetOperationLog); WebApiInvoke_FenXi("GetOperationLog"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); @@ -1444,26 +1516,39 @@ namespace WebSite.Controllers try { - + Interlocked.Increment(ref WebAPI_TongJi.GetAirDetectList); 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); - } + string code = jData["code"].ToString(); + string cd = jData["creatDate"].ToString(); IList list = new List(); - var hostModals = HostModalManager.Load(host.ID, DeviceType.AirDetect).Where(r => r.Modal.WXActiveIndicator); - foreach (HostModal modal in hostModals) + + string KKK = "GetAirDetectList_" + code + "_" + roomNumber + "_" + cd; + var ooo = HttpContext.Cache.Get(KKK); + if (ooo != null) { - Light light = new Light + list = ooo as IList; + } + else + { + Host host = CheckRoomNumber(code, cd, ref msg, ref hotelID, roomNumber); + if (host == null) { - Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName), - ModalAddress = modal.Modal.ModalAddress, - Brightness = modal.Brightness - }; - list.Add(light); + return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet); + } + 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); + } + HttpContext.Cache.Insert(KKK, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); } string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); @@ -1494,7 +1579,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { - + Interlocked.Increment(ref WebAPI_TongJi.GetHostFaultList); WebApiInvoke_FenXi("GetHostFaultList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string roomNumber = jData["roomNumber"].ToString(); @@ -1623,7 +1708,7 @@ namespace WebSite.Controllers string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); try { - + Interlocked.Increment(ref WebAPI_TongJi.GetRoomTypeAndModalsList); WebApiInvoke_FenXi("GetRoomTypeAndModalsList"); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); @@ -2465,6 +2550,7 @@ namespace WebSite.Controllers { try { + Interlocked.Increment(ref WebAPI_TongJi.GetSessionKey); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string code = jData["code"].ToString(); string appid = jData["appid"].ToString(); @@ -2501,6 +2587,7 @@ namespace WebSite.Controllers { try { + Interlocked.Increment(ref WebAPI_TongJi.GetPhoneNumber); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string encryptedData = jData["encrypted_data"].ToString(); string iv = jData["iv"].ToString(); @@ -2539,6 +2626,7 @@ namespace WebSite.Controllers { try { + Interlocked.Increment(ref WebAPI_TongJi.GetHotelInfoForWX); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); string phone = jData["phone"].ToString(); if (string.IsNullOrEmpty(phone)) @@ -3210,6 +3298,7 @@ namespace WebSite.Controllers { try { + Interlocked.Increment(ref WebAPI_TongJi.GetRCUInfoForPDU); JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData); Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, ""); if (host1 == null && hotelID == 0) @@ -5284,6 +5373,76 @@ namespace WebSite.Controllers string mns3 = Newtonsoft.Json.JsonConvert.SerializeObject(ux2); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns3); + + long l1 = Interlocked.Read(ref WebAPI_TongJi.GetRoomAirList); + long l2 = Interlocked.Read(ref WebAPI_TongJi.SetRCUAir); + long l3 = Interlocked.Read(ref WebAPI_TongJi.GetRoomSceneList); + long l4 = Interlocked.Read(ref WebAPI_TongJi.SetRCUScene); + long l5 = Interlocked.Read(ref WebAPI_TongJi.GetRoomLightList); + long l6 = Interlocked.Read(ref WebAPI_TongJi.SetRCULight); + long l7 = Interlocked.Read(ref WebAPI_TongJi.GetRoomCurtainList); + long l8 = Interlocked.Read(ref WebAPI_TongJi.SetRCUCurtain); + long l9 = Interlocked.Read(ref WebAPI_TongJi.GetRoomServiceList); + long l10 = Interlocked.Read(ref WebAPI_TongJi.SetRCUService); + long l11 = Interlocked.Read(ref WebAPI_TongJi.GetOperationLog); + long l12 = Interlocked.Read(ref WebAPI_TongJi.GetRoomMusicList); + long l13 = Interlocked.Read(ref WebAPI_TongJi.SetRCUMusic); + long l14 = Interlocked.Read(ref WebAPI_TongJi.GetRCUStatus); + long l15 = Interlocked.Read(ref WebAPI_TongJi.GetAirDetectList); + long l16 = Interlocked.Read(ref WebAPI_TongJi.GetHostFaultList); + long l17 = Interlocked.Read(ref WebAPI_TongJi.GetRoomTypeAndModalsList); + long l18 = Interlocked.Read(ref WebAPI_TongJi.GetRCUInfoForPDU); + long l19 = Interlocked.Read(ref WebAPI_TongJi.GetSessionKey); + long l20 = Interlocked.Read(ref WebAPI_TongJi.GetPhoneNumber); + long l21 = Interlocked.Read(ref WebAPI_TongJi.GetHotelInfoForWX); + + Dictionary dicwebapidata = new Dictionary(); + dicwebapidata.Add("GetRoomAirList", l1); + dicwebapidata.Add("SetRCUAir", l2); + dicwebapidata.Add("GetRoomSceneList", l3); + dicwebapidata.Add("SetRCUScene", l4); + dicwebapidata.Add("GetRoomLightList", l5); + dicwebapidata.Add("SetRCULight", l6); + dicwebapidata.Add("GetRoomCurtainList", l7); + dicwebapidata.Add("SetRCUCurtain", l8); + dicwebapidata.Add("GetRoomServiceList", l9); + dicwebapidata.Add("SetRCUService", l10); + dicwebapidata.Add("GetOperationLog", l11); + dicwebapidata.Add("GetRoomMusicList", l12); + dicwebapidata.Add("SetRCUMusic", l13); + dicwebapidata.Add("GetRCUStatus", l14); + dicwebapidata.Add("GetAirDetectList", l15); + dicwebapidata.Add("GetHostFaultList", l16); + dicwebapidata.Add("GetRoomTypeAndModalsList", l17); + dicwebapidata.Add("GetRCUInfoForPDU", l18); + dicwebapidata.Add("GetSessionKey", l19); + dicwebapidata.Add("GetPhoneNumber", l20); + dicwebapidata.Add("GetHotelInfoForWX", l21); + + CSRedisCacheHelper.Publish("webapidata_consumer", JsonConvert.SerializeObject(dicwebapidata)); + + + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomAirList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUAir, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomSceneList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUScene, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomLightList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCULight, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomCurtainList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUCurtain, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomServiceList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUService, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetOperationLog, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomMusicList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUMusic, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRCUStatus, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetAirDetectList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetHostFaultList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomTypeAndModalsList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRCUInfoForPDU, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetSessionKey, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetPhoneNumber, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetHotelInfoForWX, 0); //logger.Error("推送的走到这里了"); //DataTongJi.TotalCount.Clear(); Interlocked.Exchange(ref YUANZI_TongJi.TotalReceiveCount, 0); @@ -5540,6 +5699,75 @@ namespace WebSite.Controllers string mns3 = Newtonsoft.Json.JsonConvert.SerializeObject(ux2); CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns3); + long l1 = Interlocked.Read(ref WebAPI_TongJi.GetRoomAirList); + long l2 = Interlocked.Read(ref WebAPI_TongJi.SetRCUAir); + long l3 = Interlocked.Read(ref WebAPI_TongJi.GetRoomSceneList); + long l4 = Interlocked.Read(ref WebAPI_TongJi.SetRCUScene); + long l5 = Interlocked.Read(ref WebAPI_TongJi.GetRoomLightList); + long l6 = Interlocked.Read(ref WebAPI_TongJi.SetRCULight); + long l7 = Interlocked.Read(ref WebAPI_TongJi.GetRoomCurtainList); + long l8 = Interlocked.Read(ref WebAPI_TongJi.SetRCUCurtain); + long l9 = Interlocked.Read(ref WebAPI_TongJi.GetRoomServiceList); + long l10 = Interlocked.Read(ref WebAPI_TongJi.SetRCUService); + long l11 = Interlocked.Read(ref WebAPI_TongJi.GetOperationLog); + long l12 = Interlocked.Read(ref WebAPI_TongJi.GetRoomMusicList); + long l13 = Interlocked.Read(ref WebAPI_TongJi.SetRCUMusic); + long l14 = Interlocked.Read(ref WebAPI_TongJi.GetRCUStatus); + long l15 = Interlocked.Read(ref WebAPI_TongJi.GetAirDetectList); + long l16 = Interlocked.Read(ref WebAPI_TongJi.GetHostFaultList); + long l17 = Interlocked.Read(ref WebAPI_TongJi.GetRoomTypeAndModalsList); + long l18 = Interlocked.Read(ref WebAPI_TongJi.GetRCUInfoForPDU); + long l19 = Interlocked.Read(ref WebAPI_TongJi.GetSessionKey); + long l20 = Interlocked.Read(ref WebAPI_TongJi.GetPhoneNumber); + long l21 = Interlocked.Read(ref WebAPI_TongJi.GetHotelInfoForWX); + + Dictionary dicwebapidata = new Dictionary(); + dicwebapidata.Add("GetRoomAirList", l1); + dicwebapidata.Add("SetRCUAir", l2); + dicwebapidata.Add("GetRoomSceneList", l3); + dicwebapidata.Add("SetRCUScene", l4); + dicwebapidata.Add("GetRoomLightList", l5); + dicwebapidata.Add("SetRCULight", l6); + dicwebapidata.Add("GetRoomCurtainList", l7); + dicwebapidata.Add("SetRCUCurtain", l8); + dicwebapidata.Add("GetRoomServiceList", l9); + dicwebapidata.Add("SetRCUService", l10); + dicwebapidata.Add("GetOperationLog", l11); + dicwebapidata.Add("GetRoomMusicList", l12); + dicwebapidata.Add("SetRCUMusic", l13); + dicwebapidata.Add("GetRCUStatus", l14); + dicwebapidata.Add("GetAirDetectList", l15); + dicwebapidata.Add("GetHostFaultList", l16); + dicwebapidata.Add("GetRoomTypeAndModalsList", l17); + dicwebapidata.Add("GetRCUInfoForPDU", l18); + dicwebapidata.Add("GetSessionKey", l19); + dicwebapidata.Add("GetPhoneNumber", l20); + dicwebapidata.Add("GetHotelInfoForWX", l21); + + CSRedisCacheHelper.Publish("webapidata_consumer", JsonConvert.SerializeObject(dicwebapidata)); + + + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomAirList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUAir, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomSceneList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUScene, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomLightList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCULight, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomCurtainList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUCurtain, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomServiceList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUService, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetOperationLog, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomMusicList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.SetRCUMusic, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRCUStatus, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetAirDetectList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetHostFaultList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRoomTypeAndModalsList, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetRCUInfoForPDU, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetSessionKey, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetPhoneNumber, 0); + Interlocked.Exchange(ref WebAPI_TongJi.GetHotelInfoForWX, 0); //logger.Error("推送的走到这里了"); //DataTongJi.TotalCount.Clear(); Interlocked.Exchange(ref YUANZI_TongJi.TotalReceiveCount, 0); @@ -5742,8 +5970,17 @@ namespace WebSite.Controllers [HttpPost()] public ActionResult GetRCUStatus(string host_number, string mac) { - bool is_online = CSRedisCacheHelper.Contains(host_number, mac); - return Json(is_online, JsonRequestBehavior.AllowGet); + + Interlocked.Increment(ref WebAPI_TongJi.GetRCUStatus); + try + { + bool is_online = CSRedisCacheHelper.Contains(host_number, mac); + return Json(is_online, JsonRequestBehavior.AllowGet); + } + catch (Exception ex) + { + return Json(false, JsonRequestBehavior.AllowGet); + } } #endregion diff --git a/WebSite/Global.asax.cs b/WebSite/Global.asax.cs index 64dd7de..6e9e1fd 100644 --- a/WebSite/Global.asax.cs +++ b/WebSite/Global.asax.cs @@ -786,6 +786,9 @@ namespace WebSite Exception ex = Server.GetLastError(); logger.Error("IIS:" + ex.Message); logger.Error(ex.StackTrace); + + // 清理可能导致循环异常的资源 + HttpContext.Current.ClearError(); } catch (Exception ex) { @@ -802,9 +805,9 @@ namespace WebSite var ip = Request.UserHostAddress; var url = Request.Url.AbsolutePath.ToLower(); - // 定期清理恶意IP记录,避免字典无限增长 - var nowUtc = DateTime.UtcNow; - CleanupIpRecordIfNeeded(nowUtc); + // 定期清理恶意IP记录,避免字典无限增长 + var nowUtc = DateTime.UtcNow; + CleanupIpRecordIfNeeded(nowUtc); // 定义要拦截的路径模式 var maliciousPatterns = new[] diff --git a/WebSite/Web.config b/WebSite/Web.config index 30ae184..d931d6f 100644 --- a/WebSite/Web.config +++ b/WebSite/Web.config @@ -1,119 +1,114 @@ - - + - -
-
+
+
-
-
-
+
+
+
-
+
- - + - - - + + + - + - + - + - - - - - - - + + + + + + + - + - + - + - + - - + + - - - + + - + - - + + - + - - - + + - - - + + + - - - - + + + + - + - - + + @@ -121,29 +116,28 @@ - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - - - - - - - - - - - - + + + + + + + - - - - + - - - - - - - - + + + + + + - - + - + - - + - + - - - - - + + - - - + + + - - + - - - - - + + + + - - + - - + - - + - + - + - - + + - - - + + - - + + - - + + - - + + - - - - - - + + + + + - - - - - + + + + + \ No newline at end of file