From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期五, 10 七月 2020 10:52:13 +0800 Subject: [PATCH] 2020-07-10-01 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 611 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 561 insertions(+), 50 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs index 04af707..4b198e9 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -51,8 +51,8 @@ /// <param name="gatewayId">缃戝叧ID</param> /// <param name="topic">鏁翠釜涓婚</param> /// <param name="reportTopic">涓婃姤鏁版嵁鐨勪富棰�</param> - /// <param name="receiveData">鎺ユ敹鐨勬暟鎹�</param> - public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, JObject receiveData) + /// <param name="msgData">鎺ユ敹鐨勬暟鎹�</param> + public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, string msgData) { if (topic == "AppNoLogin") { @@ -67,7 +67,7 @@ }); return; } - else if (topic == "BeingSqueezedOffline") + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze") { HdlThreadLogic.Current.RunMain(() => { @@ -93,6 +93,50 @@ }); return; } + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Home.Id + "_" + Common.Config.Instance.Guid + "/PrimaryUserDelYou") + { + HdlThreadLogic.Current.RunMain(() => + { + //鍒嗕韩浣忓畢宸叉洿鏀癸紝璇疯仈绯荤鐞嗗憳锛� + string msg = Language.StringByID(R.MyInternationalizationString.uShardResidenceHadDeletePleaseTakeToAdmin); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Update") + { + HdlThreadLogic.Current.RunMain(() => + { + //鎮ㄧ殑鏉冮檺宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� + string msg = Language.StringByID(R.MyInternationalizationString.uYouAccessHadChangedPleaseTakeToAdmin); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (UserCenterResourse.UserInfo.AuthorityNo == 3) + { + if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Deleted" + || topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/DeletedShareData") + { + HdlThreadLogic.Current.RunMain(() => + { + //鍒嗕韩鏁版嵁宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� + string msg = Language.StringByID(R.MyInternationalizationString.uShardDataIsChangedPleaseLoginAgain); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + } + try { if (HdlGatewayLogic.Current.IsGatewayExist(gatewayId) == false) @@ -100,52 +144,56 @@ //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊 return; } - //璁惧灞炴�т笂鎶� if (reportTopic == "DeviceStatusReport") { //璁惧灞炴�т笂鎶� - this.DeviceAttributeReportPush(receiveData); + this.DeviceAttributeReportPush(JObject.Parse(msgData)); } //浼犳劅鍣ㄤ笂鎶� else if (reportTopic == "IASInfoReport") { - this.SensorDeviceReportPush(receiveData); + this.SensorDeviceReportPush(JObject.Parse(msgData)); } //闂ㄩ攣涓婃姤 else if (topic == gatewayId + "/Alarms/SendAlarmInform") { - this.DoorLockDeviceReportPush(receiveData); + this.DoorLockDeviceReportPush(JObject.Parse(msgData)); } //閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鎴愬姛鏃舵姤鍛� else if (topic == gatewayId + "/Security/EnOrWithdrawSucceedReport") { - this.SecurityEnOrWithdrawSucceedReport(receiveData); + this.SecurityEnOrWithdrawSucceedReport(JObject.Parse(msgData)); } //璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� else if (reportTopic == "OnlineStatusChange_Respon") { - this.DeviceOnlineChangePush(receiveData); + this.DeviceOnlineChangePush(JObject.Parse(msgData)); + } + //璁惧鎺у埗鐘舵�佸弽棣� + else if (reportTopic == "DeviceDefaultAck") + { + this.DeviceControlResponePush(JObject.Parse(msgData)); } //鎾ら槻 else if (topic == gatewayId + "/Security/WithdrawMode_Respon") { - this.RemoveSafetyGarrisonPush(receiveData); + this.RemoveSafetyGarrisonPush(JObject.Parse(msgData)); } //甯冮槻 else if (topic == gatewayId + "/Security/EnableMode_Respon") { - this.SetSafetyGarrisonPush(receiveData); + this.SetSafetyGarrisonPush(JObject.Parse(msgData)); } //閫昏緫瑙﹀彂涓婃姤 else if (topic == gatewayId + "/Logic/Execute_Respon") { - this.LogicExecutePush(receiveData); + this.LogicExecutePush(JObject.Parse(msgData)); } //鍦烘櫙瑙﹀彂涓婃姤 else if (topic == gatewayId + "/Scene/Exec_Respon") { - this.SceneExecPush(receiveData); + this.SceneExecPush(null); } } catch (Exception ex) @@ -173,10 +221,367 @@ var deviceAddr = receiveData.Value<string>("DeviceAddr"); var deviceEpoint = receiveData.Value<int>("Epoint"); - var tempDevice = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; - tempDevice.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); + var report = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; + report.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); + if (report.DeviceStatusReport.AttriBute.Count == 0) + { + //缃戝叧鏈変簺濂囪懇锛屾病鏈夊睘鎬у畠涔熶細鍙戣繃鏉� + return; + } - this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevice(deviceAddr, deviceEpoint); + if (locadevice != null) + { + //鏈夊弽棣�,杩欎釜璁惧鑲畾鏄湪绾跨殑 + locadevice.IsOnline = 1; + locadevice.LastDateTime = DateTime.Now; + + #region 鈻� 寮�鍏冲姛鑳� + //寮�鍏冲姛鑳� + if (report.DeviceStatusReport.CluterID == 6) + { + if (locadevice is LightBase) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + ((LightBase)locadevice).OnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 绐楀笜鏁版嵁 + //绐楀笜鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 258) + { + //绐楀笜绫诲瀷 + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + ((Rollershade)locadevice).WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //杩欎釜涓滆タ瑕佷繚瀛� + locadevice.ReSave(); + } + //绐楀笜鐧惧垎姣� + else if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + ((Rollershade)locadevice).WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 绌鸿皟鍜屾柊椋庢暟鎹� + //绌鸿皟鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 513) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + var curTemp = attData.AttriButeData / 100; + if (attData.AttributeId == 0) + { + //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝 + ((AC)locadevice).currentLocalTemperature = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 17) + { + //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝 + ((AC)locadevice).currentCoolingSetpoint = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 18) + { + //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鐑俯搴︼紝瀹為檯娓╁害涓衡�淗eatingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆� + ((AC)locadevice).currentHeatingSetpoint = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 28) + { + //姝ゅ睘鎬ф弿杩版亽娓╄澶囨澶勪簬鍝妯″紡 + ((AC)locadevice).currentSystemMode = attData.AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4096) + { + //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勮嚜鍔ㄦ俯搴︼紝瀹為檯娓╁害涓衡�淎utoSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆� + ((AC)locadevice).currentAutoSetpoint = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4097) + { + //杩囪檻缃戞竻娲楁爣蹇�:42 + ((AC)locadevice).CleanStatu = attData.AttriButeData == 42; + } + else if (attData.AttributeId == 4099) + { + //杞崲涓轰簩杩涘埗 + var value = Convert.ToString(attData.AttriButeData, 2).PadLeft(16, '0'); + //杩欎簲涓缃槸鏀惧湪鍚庨潰鐨� + value = value.Substring(value.Length - 5, 5); + for (int i = 0; i < value.Length; i++) + { + //鑷畾涔夌殑绌鸿皟妯″紡 + ((AC)locadevice).listSupportMode[i] = Convert.ToInt32(value[i].ToString()); + } + locadevice.ReSave(); + } + } + } + //绌鸿皟鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 514) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //鍖哄垎鏄┖璋冭繕鏄柊椋� + var device = Shared.Common.LocalDevice.Current.GetDevice(report.DeviceAddr, report.DeviceEpoint); + + if (device.Type == DeviceType.FreshAir) + { + if (attData.AttributeId == 0) + { + switch (attData.AttriButeData) + { + case 0: + case 4: + ((FreshAir)locadevice).currentFanStatus = attData.AttriButeData; + break; + case 1: + case 2: + case 3: + ((FreshAir)locadevice).currentFanSpeed = attData.AttriButeData; + break; + case 5: + case 15: + ((FreshAir)locadevice).currentFanMode = attData.AttriButeData; + break; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + else + { + if (attData.AttributeId == 0) + { + //椋庢墖妯″紡 + ((AC)locadevice).currentFanMode = attData.AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4096) + { + //椋庢墖鎵 + ((AC)locadevice).currentFanSwingMode = attData.AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4097) + { + //杞崲涓轰簩杩涘埗 + var value = Convert.ToString(attData.AttriButeData, 2).PadLeft(16, '0'); + //杩欎釜璁剧疆鏄斁鍦ㄥ悗闈㈢殑 + value = value.Substring(value.Length - 1, 1); + //鍚敤鎽嗛鍔熻兘 + ((AC)locadevice).UseSwingFunction = value == "1"; + locadevice.ReSave(); + } + } + } + } + #endregion + + #region 鈻� 浜害鏁版嵁 + //浜害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 8) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + if (locadevice.Type == DeviceType.DimmableLight) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� + ((DimmableLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; + } + else if (locadevice.Type == DeviceType.ColorTemperatureLight) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� + ((ColorTemperatureLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 鑹叉俯鏁版嵁 + //鑹叉俯鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 768) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + if (locadevice.Type == DeviceType.ColorTemperatureLight) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶈壊娓� + ((ColorTemperatureLight)locadevice).ColorTemperature = report.DeviceStatusReport.AttriBute[0].AttriButeData; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 娓╁害鏁版嵁 + //娓╁害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1026) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //娓╁害 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + decimal temperatrue = 0; + string receiptData = string.Empty; + //涓や釜涓や釜浣嶇疆鏇挎崲 + for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) + { + receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); + } + //鏈夌鍙�(浼氬嚭鐜拌礋鏁�) + if (attData.AttriButeDataType == 40 || attData.AttriButeDataType == 41) + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = Convert.ToInt16(receiptData, 16).ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //鏃犵鍙�(涓嶄細鍑虹幇璐熸暟) + else if (attData.AttriButeDataType == 32 || attData.AttriButeDataType == 33) + { + ushort shortData = Convert.ToUInt16(receiptData, 16); + if (shortData > 32767) + { + //璐熸暟(鐗规畩澶勭悊) + string strValue = (shortData - 65536).ToString(); + //灏忔暟鐐归渶瑕佷竴浣� + strValue = strValue.Substring(0, strValue.Length - 1); + temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + else + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = shortData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + } + + //娓╁害浼犳劅鍣� + if (locadevice is TemperatureSensor) + { + ((TemperatureSensor)locadevice).Temperatrue = temperatrue; + } + //PM2.5浼犳劅鍣� + else if (locadevice is PMSensor) + { + ((PMSensor)locadevice).currentTemperature = (int)temperatrue; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + } + #endregion + + #region 鈻� 婀垮害鏁版嵁 + //婀垮害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1029) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //婀垮害 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + decimal humidity = 0; + string receiptData = string.Empty; + //涓や釜涓や釜浣嶇疆鏇挎崲 + for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) + { + receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); + } + //鏈夌鍙�(浼氬嚭鐜拌礋鏁�) + if (attData.AttriButeDataType == 40 || attData.AttriButeDataType == 41) + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = Convert.ToInt16(receiptData, 16).ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //鏃犵鍙�(涓嶄細鍑虹幇璐熸暟) + else if (attData.AttriButeDataType == 32 || attData.AttriButeDataType == 33) + { + //灏忔暟鐐归渶瑕佷竴浣� 婀垮害涓嶄細鍑虹幇璐熸暟 + string strValue = Convert.ToUInt16(receiptData, 16).ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //婀垮害浼犳劅鍣� + if (locadevice is TemperatureSensor) + { + ((TemperatureSensor)locadevice).Humidity = humidity; + } + //鏂伴鐨勬箍搴︿紶鎰熷櫒 + else if (locadevice is HumiditySensor) + { + ((HumiditySensor)locadevice).Humidity = humidity; + } + //PM2.5浼犳劅鍣� + else if (locadevice is PMSensor) + { + ((PMSensor)locadevice).currentHumidity = (int)humidity; + } + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� PM2.5鏁版嵁 + //PM2.5鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1066) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //PM2.5 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + + if (attData.AttriButeDataType == 57) + { + ((PMSensor)locadevice).currentPmData = attData.AttriButeData; + } + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + + #endregion + } + + this.DeviceReportPush(report, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); } #endregion @@ -199,6 +604,17 @@ HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); } + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevice(ias.DeviceAddr, ias.DeviceEpoint); + if (locadevice != null) + { + ((IASZone)locadevice).iASInfo = ias.iASInfo; + //濡傛灉鎺ユ敹鍒颁笂鎶�,鍗宠鏄庤繖涓紶鎰熷櫒鏄湪绾跨殑 + locadevice.IsOnline = 1; + //璁板綍鍥炲鏃堕棿 + locadevice.LastDateTime = DateTime.Now; + } + this.DeviceReportPush(ias, ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�); //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� @@ -215,13 +631,35 @@ /// <param name="receiveData"></param> private void DoorLockDeviceReportPush(JObject receiveData) { - //淇濆瓨闂ㄩ攣淇℃伅鍒版湰鍦� - HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData); + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); + if (device.Type != DeviceType.DoorLock) + { + //瀹冧笉鏄棬閿� + return; + } - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); + var info = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockAlarmsResult>(receiveData["Data"].ToString()); + if (info.Clusterid == 257) + { + //216锛氶攣涓婅缃殑甯稿紑 + if (info.AlarmCode == 216) + { + HdlThreadLogic.Current.RunMain(() => + { + //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� + if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) + { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(device.DeviceAddr, true); + } + }); + } + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } } - #endregion #region 鈻� 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣坃______________ @@ -230,7 +668,7 @@ /// 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� /// </summary> /// <param name="receiveData"></param> - private void DeviceOnlineChangePush (JObject receiveData) + private void DeviceOnlineChangePush(JObject receiveData) { if (this.dicDeviceEvent.Count == 0) { @@ -238,9 +676,44 @@ return; } var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; - tempDevice.IsOnline = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(receiveData["Data"]["IsOnline"].ToString()); - + tempDevice.IsOnline = Convert.ToInt32(receiveData["Data"]["IsOnline"].ToString()); + + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevicesByMac(tempDevice.DeviceAddr); + for (int i = 0; i < locadevice.Count; i++) + { + bool onlineChanged = locadevice[i].IsOnline != tempDevice.IsOnline; + locadevice[i].IsOnline = tempDevice.IsOnline; + //璁板綍鍥炲鏃堕棿 + locadevice[i].LastDateTime = DateTime.Now; + if (onlineChanged == true) + { + //鍦ㄧ嚎鐘舵�佸彉鏇翠簡,鎵嶄繚瀛� + locadevice[i].ReSave(); + } + } + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤); + } + + #endregion + + #region 鈻� 璁惧鎺у埗鐘舵�佸弽棣坃__________________ + + /// <summary> + /// 璁惧鎺у埗鐘舵�佸弽棣� + /// </summary> + /// <param name="receiveData"></param> + private void DeviceControlResponePush(JObject receiveData) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; + + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A鑺傜偣鎺у埗鍙嶉); } #endregion @@ -377,12 +850,43 @@ /// <param name="receiveData"></param> private void LogicExecutePush(JObject receiveData) { - //鐩墠涓嶅鐞嗛�昏緫涓婃姤鍐呭 - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� this.ShowHadNewMessageAppeal(); - } + // 閫昏緫鎵ц甯稿紑妯″紡澶辨晥鐨勬儏鍐� + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + //鑷姩鍖栨墽琛� 甯稿紑鍏抽棴 + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(receiveData["Data"].ToString()); + if (data != null && data.ActionData != null) + { + if (data.ActionData.Actiontype == 8 && data.ActionData.PassDataString == "055704010113") + { + var deviceAddr = data.ActionData.MacStr; + var device = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr, false); + if (device.Count > 0 && device[0].Type != DeviceType.DoorLock) + { + return; + } + + HdlThreadLogic.Current.RunThread(async () => + { + HdlThreadLogic.Current.RunMain(() => + { + //鎻愮ず闂ㄩ攣宸茬粡澶辨晥 + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.NormallyClosed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); + + //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� + if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) + { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(deviceAddr, false); + } + }); + }); + } + } + } + } #endregion #region 鈻� 鍦烘櫙瑙﹀彂涓婃姤_______________________ @@ -401,10 +905,12 @@ #endregion + + #region 鈻� 娣诲姞璁惧浜嬩欢_______________________ /// <summary> - /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(鎺ㄩ�佸凡缁忓己鍒舵寚瀹氳繍琛屼簬涓荤嚎绋嬶紝灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport) + /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport) /// </summary> /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> /// <param name="comand">鍛戒护鍖哄垎</param> @@ -474,46 +980,47 @@ #region 鈻� 涓�鑸柟娉昣__________________________ /// <summary> - /// 璁惧涓婃姤鎺ㄩ�� + /// 璁惧涓婃姤鎺ㄩ��(璋冪敤姝ゆ柟娉�,浠栦細鎺ㄩ�佸埌鍚勮嚜鐨勭晫闈�) /// </summary> /// <param name="common"></param> /// <param name="comand"></param> - private void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) + public void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) { if (this.dicDeviceEvent.Count == 0) { //娌℃湁娣诲姞鐩戝惉 return; } - lock (this.dicDeviceEvent) + //lock (this.dicDeviceEvent) { var list = new List<Action<CommonDevice>>(); - foreach (string keys in this.dicDeviceEvent.Keys) + try { - if (this.dicCommandDiv[keys] != comand) + foreach (string keys in this.dicDeviceEvent.Keys) { - //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 - continue; + if (this.dicCommandDiv[keys] != comand) + { + //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 + continue; + } + //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟 + list.Add(this.dicDeviceEvent[keys]); } - //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟 - list.Add(this.dicDeviceEvent[keys]); } + catch { return; } //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤 foreach (var action in list) { - Application.RunOnMainThread(() => + try { - try - { - action?.Invoke(common); - } - catch (Exception ex) - { - //Log鍑哄姏 - string msg = "鎺ㄩ�侀敊璇�! 褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; - HdlLogLogic.Current.WriteLog(ex, msg); - } - }); + action?.Invoke(common); + } + catch (Exception ex) + { + //Log鍑哄姏 + string msg = "鎺ㄩ�侀敊璇�! 褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; + HdlLogLogic.Current.WriteLog(ex, msg); + } } } } @@ -567,6 +1074,10 @@ /// <summary> /// 璁惧鍦ㄧ嚎涓婃姤 /// </summary> - A璁惧鍦ㄧ嚎涓婃姤 = 3 + A璁惧鍦ㄧ嚎涓婃姤 = 3, + /// <summary> + /// 褰撳鎴风鍙戦�佹帶鍒惰澶囨寚浠わ紝濡傛墦寮�鎴栧叧闂澶囥�佽皟鑺備寒搴︺�侀鑹层�傚鏋滆鎺у埗鐨勮妭鐐硅澶囧湪绾匡紝鑺傜偣璁惧灏嗗弽棣� + /// </summary> + A鑺傜偣鎺у埗鍙嶉 = 4 } } -- Gitblit v1.8.0