From 6196311cb77b5755b7afafa4a9eb1d9ca651672f Mon Sep 17 00:00:00 2001 From: TianMaiCheng <746290578@qq.com> Date: Wed, 4 Feb 2026 18:05:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CRICS_V3_1124.suo | Bin 12780544 -> 12780544 bytes Common/CSRedisCacheHelper.cs | 7 +- CommonEntity/GetHostIDByNumber.cs | 6 ++ ConsoleApplication2/Program.cs | 1 + RCUHost/Implement/HostServer.cs | 29 ++++++-- RCUHost/Implement/RoomStatusReceiver.cs | 88 ++++++++++++++++++++---- WebSite/Controllers/ApiController.cs | 4 ++ 7 files changed, 118 insertions(+), 17 deletions(-) diff --git a/CRICS_V3_1124.suo b/CRICS_V3_1124.suo index 1dd2740f0bf03f2dbd2814804d82f519a03c2ecd..a6f04f434be388425d4e10aaf47282cba154901e 100644 GIT binary patch delta 4489 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 GHU9$-2?*x^ delta 5264 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 /// 新版本的设备状态 diff --git a/ConsoleApplication2/Program.cs b/ConsoleApplication2/Program.cs index d3ad2b9..d8c0d5a 100644 --- a/ConsoleApplication2/Program.cs +++ b/ConsoleApplication2/Program.cs @@ -306,6 +306,7 @@ namespace ConsoleApplication2 #endif + var ggg= BitConverter.ToString(new byte[]{0xaa,0xcc}); AAA(); string aaa111 = "233003"; var bj1 = aaa111.Substring(0, 3); diff --git a/RCUHost/Implement/HostServer.cs b/RCUHost/Implement/HostServer.cs index 8a0233d..667ac38 100644 --- a/RCUHost/Implement/HostServer.cs +++ b/RCUHost/Implement/HostServer.cs @@ -1280,13 +1280,14 @@ namespace RCUHost.Implement o.CurrentTime = DateTime.Now; o.EndPoint = EndPointStr; o.UnixTime = Tools.GetUnixTime(); + o.MAC = BitConverter.ToString(gga.Data.Skip(9).Take(2).ToArray()); //新来的数据 var n = Newtonsoft.Json.JsonConvert.SerializeObject(o); //上线 //string EEE = CSRedisCacheHelper.Get(EndPointStr); - var EEE = CSRedisCacheHelper.Get_Partition(EndPointStr, 4); + var EEE = CSRedisCacheHelper.Get_Partition(EndPointStr, 6); var dtstart = CSRedisCacheHelper.ForeverGet(CacheKey.ServerStartTime); DateTime SSS = DateTime.Now; DateTime.TryParse(dtstart, out SSS); @@ -1295,7 +1296,8 @@ namespace RCUHost.Implement { CSRedisCacheHelper.Publish("redis-on_off_line", n); } - CSRedisCacheHelper.Set_PartitionWithTime(EndPointStr, n, 5, 4); + CSRedisCacheHelper.Set_PartitionWithTime(EndPointStr, n, 5, 6); + CSRedisCacheHelper.Set_PartitionWithTime(EndPointStr, n, 20, 4); @@ -1713,9 +1715,14 @@ namespace RCUHost.Implement int length = context111.Data.Length - offset - 2; var data = OriginalByte.Skip(offset).ToArray(); - var LauncherVersion = data.Take(20); - var RestartReason = data.Skip(20).Take(1); + var LauncherVersion = data.Take(20).ToArray(); + var RestartReason = data.Skip(20).Take(1).ToArray(); + string RoomNUMBER = CSRedisCacheHelper.HMGet(5, CacheKey.RoomNumber_HostNumber, HostNNN)[0]; + if (string.IsNullOrEmpty(RoomNUMBER)) + { + return; + } NewVersionHexData ns = new NewVersionHexData(); ns.CmdType = 0x33; ns.HotelCode = hotelCode; @@ -1723,9 +1730,17 @@ namespace RCUHost.Implement ns.RemoteEndPoint = EndPoint; ns.CurrentTime = DateTime.Now; ns.HexData = Tools.ByteToString(context111.Data); + + ns.RoomNumber = RoomNUMBER; + ns.MAC = BitConverter.ToString(OriginalByte.Skip(9).Take(2).ToArray()); + ns.CurrentStatus = "on"; + ns.UnixTime = Tools.GetUnixTime(); + ns.LauncherVersion = LauncherVersion; + ns.RebootReason = RestartReason; string mns1 = Newtonsoft.Json.JsonConvert.SerializeObject(ns); CSRedisCacheHelper.Publish("redis-rcu-restart", mns1); } + #region 取电 if (cmdType == 0x35) { ReplyWithContent(context111, new byte[] { 0x00 }, framenolist); @@ -1806,6 +1821,7 @@ namespace RCUHost.Implement } } } + #endregion // AA 55 35 00 54 33 53 41 34 10 80 EB 03 6B 24 // 01 //协议版本 @@ -1843,6 +1859,7 @@ namespace RCUHost.Implement //P30~P33:通道总能耗,单位:Wh(1度电 = 1KWh) + #region 定时上报 if (cmdType == 0x36) { @@ -1937,6 +1954,9 @@ namespace RCUHost.Implement //ns.HexData = Tools.ByteToString(context111.Data); //CSRedisCacheHelper.Publish("redis-rcu-hexdata", Newtonsoft.Json.JsonConvert.SerializeObject(ns)); } + #endregion + + #region 定时上报 if (cmdType == 0x34) { ReplyWithContent(context111, new byte[] { 0x00 }, framenolist); @@ -2540,6 +2560,7 @@ namespace RCUHost.Implement logger.Error("定是上报出错:" + ex.StackTrace); } } + #endregion //向服务器获取房态 if (cmdType == 0x32) diff --git a/RCUHost/Implement/RoomStatusReceiver.cs b/RCUHost/Implement/RoomStatusReceiver.cs index fc79a50..25c1091 100644 --- a/RCUHost/Implement/RoomStatusReceiver.cs +++ b/RCUHost/Implement/RoomStatusReceiver.cs @@ -157,7 +157,7 @@ namespace RCUHost.Implement //来一个数据,把所有的地址拼接起来 string YiJingChuLiGuo = CacheKey.AllReadyDealWith0E_Prefix + "_" + HostNumberOnly; MemoryCacheHelper.Delete(YiJingChuLiGuo); - ProcessModal_NEW_NEW(host, status.Devices, isTriggerWelcomeMsg, context.MessageID, context.IsMonitor);//更新灯光及其他回路状态 + ProcessModal_NEW_NEW(host, status.Devices, isTriggerWelcomeMsg, context.MessageID, context.IsMonitor, context.Data, status);//更新灯光及其他回路状态 string nnn = VVV1 + VVV2; if (!string.IsNullOrEmpty(nnn)) { @@ -224,7 +224,7 @@ namespace RCUHost.Implement public static string Missionsys_Address = ConfigurationManager.AppSettings["missionsys_address"]; public static string MQTTInfo_report_url = ConfigurationManager.AppSettings["debug_log_report_url"].ToString(); - private void ProcessModal_NEW_NEW(Host host, ConcurrentDictionary devices, bool IsTriggerWelcomeMsg, string ContextMessageId, bool ismonitor) + private void ProcessModal_NEW_NEW(Host host, ConcurrentDictionary devices, bool IsTriggerWelcomeMsg, string ContextMessageId, bool ismonitor, byte[] OriginalByteList, Status yuanshidata) { string UUID = "9dc6a0ee-dcf1-4385-b05f-09cb463838cd"; UUID = host.FCS_locationUUID; @@ -257,6 +257,9 @@ namespace RCUHost.Implement bool isInsert = false; StepTongJi.SendInfo(4.3, "Task开始执行设备信息处理", ContextMessageId, ismonitor); + + List shebei_changeaction_list = new List(); + List exception_list = new List(); //StringBuilder sbSQL; foreach (var device in devices) { @@ -1845,9 +1848,26 @@ namespace RCUHost.Implement } #endregion + + //0关闭设备, + //1打开设备且当前设备处于关闭状态, + //2打开设备且当前设备处于打开状态 + if (flag == 0 || flag == 1) + { + + ts_deviceitem t1 = new ts_deviceitem(); + + string dizhi = device.Value.Address; + t1.dev_type = short.Parse(dizhi.Substring(0, 3)); + t1.dev_addr = short.Parse(dizhi.Substring(3, 3)); + t1.dev_loop = short.Parse(dizhi.Substring(6, 3)); + t1.dev_data = device.Value.StatusReceiver; + shebei_changeaction_list.Add(t1); + } #region 当设备或服务状态发生变化时,推送给指定的第三方接口 if ((flag == 0 || flag == 1) && (!string.IsNullOrEmpty(host.SysHotel.DeviceStatusPushURL))) { + if (host.SysHotel.DeviceStatusPushURL.ToLower().IndexOf("wangjile") > -1)//freego过滤 { switch (hostModal.Modal.ModalAddress) @@ -1892,18 +1912,12 @@ namespace RCUHost.Implement } 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 @@ -1940,6 +1954,7 @@ namespace RCUHost.Implement CSRedisCacheHelper.Publish("Redis-XuanZhuKafka", str111); } #endregion + } else { @@ -1952,6 +1967,55 @@ namespace RCUHost.Implement } } + #region 新版本日志队列 + + byte[] OriginalByte = OriginalByteList; + DeviceActionData d1 = new DeviceActionData(); + d1.ts_ms = Tools.GetUnixTime(); + d1.hotel_id = HOTEL_CODE; + d1.room_id = ROOMNUMBER; + d1.device_id = HOSTNUMBER; + d1.frame_id = frameNo; + d1.cmd_word = "0E"; + d1.udp_raw = OriginalByte; + d1.direction = "上报"; + + + if (yuanshidata.SysLock) + { + d1.sys_lock_status = 1; + } + else + { + d1.sys_lock_status = 2; + } + + + if (yuanshidata.Faults != null && yuanshidata.Faults.Count > 0) + { + var F1 = yuanshidata.Faults; + foreach (var item in F1) + { + string dizhi = item.Value.FaultNo; + ts_faultitem t1 = new ts_faultitem(); + t1.dev_type = short.Parse(dizhi.Substring(0, 3)); + t1.dev_addr = short.Parse(dizhi.Substring(3, 3)); + t1.dev_loop = short.Parse(dizhi.Substring(6, 3)); + t1.error_type = item.Value.Type; + t1.error_data = item.Value.Data; + exception_list.Add(t1); + } + } + + d1.device_list = shebei_changeaction_list; + d1.fault_list = exception_list; + d1.report_count = shebei_changeaction_list.Count; + d1.fault_count = exception_list.Count; + + string sss111 = Newtonsoft.Json.JsonConvert.SerializeObject(d1); + CSRedisCacheHelper.Publish("redis-0X36-0X0F", sss111); + #endregion + StepTongJi.SendInfo(5, "Task中的设备处理代码执行完毕", ContextMessageId, ismonitor); devices.Clear(); } diff --git a/WebSite/Controllers/ApiController.cs b/WebSite/Controllers/ApiController.cs index 9643220..41ae302 100644 --- a/WebSite/Controllers/ApiController.cs +++ b/WebSite/Controllers/ApiController.cs @@ -599,6 +599,8 @@ namespace WebSite.Controllers /// /// /// + + //public ActionResult GetRoomAirList_Deprecate(string jsonData) public ActionResult GetRoomAirList(string jsonData) { //return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet); @@ -927,6 +929,7 @@ namespace WebSite.Controllers /// /// /// + //public ActionResult GetRoomLightList_Deprecate(string jsonData) public ActionResult GetRoomLightList(string jsonData) { @@ -1059,6 +1062,7 @@ namespace WebSite.Controllers /// /// /// + //public ActionResult GetRoomCurtainList_Deprecate(string jsonData) public ActionResult GetRoomCurtainList(string jsonData) {