From 944b87b6bcccb095cd73f13f4410fb20faf48f74 Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期三, 25 十二月 2019 11:21:06 +0800
Subject: [PATCH] 2019.12.25

---
 ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs |  149 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 112 insertions(+), 37 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
old mode 100755
new mode 100644
index 599c3a1..f43d6a7
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
@@ -20,17 +20,31 @@
 
         #region 闂ㄩ攣鏈湴鍙橀噺
         /// <summary>
-        /// 闂ㄩ攣鏈湴鐢ㄦ埛鍒楄〃
+        /// 鏈湴闂ㄩ攣鐢ㄦ埛鍜岃处鎴峰垪琛�
+        /// key:闂ㄩ攣鐢ㄦ埛ID
         /// </summary>
         /// <returns></returns>
         public Dictionary<int, LocaDoorLockObj> localDoorLockUserList = new Dictionary<int, LocaDoorLockObj>();
-        public string currentUserDisplayMethod = string.Empty;
+        /// <summary>
+        /// 鏈湴闂ㄨ处鎴峰垪琛�
+        /// key:璐︽埛ID锛堜富璐︽埛鏄疓UID锛屽瓙璐︽埛鏄垎浜繃鏉ョ殑璐︽埛ID锛�
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, LocaDoorLockObj> localDoorLockAccountList = new Dictionary<string, LocaDoorLockObj>();
+
+        public string currentUserDisplayMethod = string.Empty;//褰撳墠鐢ㄦ埛鏄剧ず鏂瑰紡
+        //鏈湴鎵�鏈夎处鎴峰垪琛�
         public List<Shared.Phone.UserCenter.MemberInfoRes> localAllAccountList = new List<Shared.Phone.UserCenter.MemberInfoRes> { };
-        public static int RemoteUnlockCount = 3;//杩滅▼寮�閿佹鏁伴檺鍒�
-        public static string RemoteUnlockPassword = string.Empty;//杩滅▼寮�閿佸瘑鐮�
+        public string LocalTempPassword = string.Empty;//鏈湴鐢熸垚鐨勪复鏃跺瘑鐮�
+        public Dictionary<string, bool> IsFreezeAccount = new Dictionary<string, bool> { };//鏄惁鍐荤粨瀛愯处鎴�
+        public Dictionary<string, bool> HasRemoteUnlockAccess = new Dictionary<string, bool> { };//鏄惁缁欏瓙璐︽埛鎷ユ湁杩滅▼寮�閿佺殑鏉′欢
+        public Dictionary<string, bool> IsFailedToGetDoorLockInfo = new Dictionary<string, bool> { };//鏄惁鑾峰彇闂ㄩ攣鏁版嵁澶辫触
+        public string RemoteUnlockPassword = string.Empty;//杩滅▼寮�閿佸瘑鐮�
+
+        public static int RemoteUnlockCount = 5;//杩滅▼寮�閿佹鏁伴檺鍒�
+        public static int failedCount = 3;//杩滅▼寮�閿佸け璐ユ鏁�
         public static DateTime maxValue = DateTime.MaxValue;
         public static DateTime minValue = DateTime.MinValue;
-        public string LocalTempPassword = string.Empty;//鏈湴鐢熸垚鐨勪复鏃跺瘑鐮�
 
         #region 涓存椂瀵嗙爜淇℃伅
         /// <summary>
@@ -170,10 +184,6 @@
             /// </summary>
             public string PrimaryId = "";
             /// <summary>
-            /// 浜戠甯愬彿Id -->閿悕 : CloudAccountId
-            /// </summary>
-            public string CloudAccountId = "";
-            /// <summary>
             /// OpenLockMode 寮�閿佹柟寮�(瀵嗙爜銆佹寚绾广�両C鍗�) -->閿悕 : OpenLockMode (鍙��)
             /// </summary>
             public int OpenLockMode = 0;
@@ -209,6 +219,7 @@
             public string PrimaryId = "";
             /// <summary>
             /// 闂ㄩ攣Id -->閿悕 : DoorLockId (鍙��)
+            /// DelDoorLockDelType 闂ㄩ攣鍒犻櫎绫诲瀷(0: 鏍规闂ㄩ攣涓婚敭(浜戠涓婚敭)鍒犻櫎(鍗曟潯鍒犻櫎)銆�1:鏍规闂ㄩ攣Id鎵归噺鍒犻櫎(鍑℃槸涓庨棬閿両d鐩稿悓閮戒細鍒犻櫎)銆�2锛氭牴妞愰棬閿両d鍙婇棬閿佹湰鍦扮敤鎴稩d鎵归噺鍒犻櫎(杩欎釜闂ㄩ攣Id杩欎釜闂ㄩ攣鏈湴鐢ㄦ埛Id鍧囦細琚垹闄�)) -->閿悕 : DelDoorLockDelType 榛樿鍊�: 0
             /// </summary>
             public int DelDoorLockDelType;
         }
@@ -622,12 +633,12 @@
         {
             DoorLockAccountList.Clear();
             return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<List<Shared.Phone.UserCenter.MemberInfoRes>>>)(async () =>
-           {
-               var pra = new Shared.Phone.UserCenter.MemberListInfoPra();
-               string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
-               var listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Shared.Phone.UserCenter.MemberInfoRes>>(result);
-               return listInfo;
-           }));
+            {
+                var pra = new Shared.Phone.UserCenter.MemberListInfoPra();
+                string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
+                var listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Shared.Phone.UserCenter.MemberInfoRes>>(result);
+                return listInfo;
+            }));
         }
 
         /// <summary>
@@ -667,7 +678,7 @@
             ///涓嶅父鐢細
             /// 1:RF(Zigbee鏃犵嚎)锛�2:Manual(鎵嬪姩)锛�255:Indeterminate(涓嶇‘瀹�)
             /// </summary>
-            public int OperationEventSource;
+            public int OperationEventSoure;
             /// <summary>
             /// 浜嬩欢鐮�
             /// 甯哥敤锛�
@@ -1122,7 +1133,7 @@
                             result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
                         }
                         else
-                        {
+                        {
                             if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
                             {
                                 var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
@@ -1455,12 +1466,12 @@
         ///杩滅▼寮�閿�
         ///<para>inputPassword: 杈撳叆瀵嗙爜/para>
         /// </summary>
-        public async System.Threading.Tasks.Task<TempPasswordResponseAllData> RemoteControlAsync(string inputPassword)
+        public async System.Threading.Tasks.Task<RemoteResponseAllData> RemoteControlAsync(string inputPassword)
         {
-            TempPasswordResponseAllData result = null;
+            RemoteResponseAllData result = null;
             if (Gateway == null)
             {
-                result = new TempPasswordResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
+                result = new RemoteResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
                 return result;
             }
             return await System.Threading.Tasks.Task.Run(async () =>
@@ -1477,22 +1488,33 @@
 
                         if (temp == null)
                         {
-                            result = new TempPasswordResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                            result = new RemoteResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
                         }
 
                         else
                         {
-                            result = new TempPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                            result = new RemoteResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
                         }
                     }
-                    if (topic == gatewayID + "/" + "ZbDataPassthrough")
+                    else if (topic == $"{gatewayID}/DoorLock/DoorLockOperatingEventNotificationCommand")
+                    {
+                        var OperatingEventNotificationDatad = Newtonsoft.Json.JsonConvert.DeserializeObject<ZigBee.Device.DoorLock.DoorLockOperatingEventNotificationCommand>(jobject["Data"].ToString());
+                        if (OperatingEventNotificationDatad != null)
+                        {
+                            if (OperatingEventNotificationDatad.OperationEventSoure == 1 && OperatingEventNotificationDatad.OperationEventCode == 5)
+                            {
+                                result = new RemoteResponseAllData { IsPawDispear = true };
+                            }
+                        }
+                    }
+                    else if (topic == gatewayID + "/" + "ZbDataPassthrough")
                     {
                         var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
                         gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
 
                         if (gatewayTemp.clientDataPassthroughResponseData == null)
                         {
-                            result = new TempPasswordResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                            result = new RemoteResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
                         }
                         else
                         {
@@ -1504,10 +1526,10 @@
                                     var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
                                     if (command == "0002")
                                     {
-                                        var tempD = new TempPasswordResponseData();
+                                        var tempD = new RemoteResponseData();
                                         tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString();
                                         tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
-                                        result = new TempPasswordResponseAllData { responseData = tempD };
+                                        result = new RemoteResponseAllData { responseData = tempD };
                                         DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0462_{ topic}");
                                     }
                                 }
@@ -1515,7 +1537,6 @@
                         }
                     }
                 };
-
                 Gateway.Actions += action;
                 DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
 
@@ -1531,18 +1552,25 @@
                 catch { }
 
                 var dateTime = DateTime.Now;
-                while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime)
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 5000)// WaitReceiveDataTime)
                 {
                     await System.Threading.Tasks.Task.Delay(10);
-                    if (result != null && result.responseData != null && result.responseData.command == "0462")
+                    if (result == null)
+                    {
+                        continue;
+                    }
+                    if (result.responseData != null && result.responseData.command == "0462")
+                    {
+                        break;
+                    }
+                    if (result.IsPawDispear == true)
                     {
                         break;
                     }
                 }
                 if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
                 {
-                    result = new TempPasswordResponseAllData
-                    { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                    result = new RemoteResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
                 }
                 Gateway.Actions -= action;
                 DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
@@ -1577,6 +1605,51 @@
             catch { };
 
             return data;
+        }
+
+        /// <summary>
+        ///  杩滅▼鍥炲鏁版嵁
+        /// </summary>
+        public RemoteResponseAllData remoteResponseAllData;
+        [System.Serializable]
+        public class RemoteResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary> 
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 涓存椂瀵嗙爜鍥炲鏁版嵁
+            /// </summary>
+            public RemoteResponseData responseData;
+            /// <summary>
+            /// 鏄惁瀵嗙爜琚垹闄�
+            /// </summary>
+            public bool IsPawDispear = false;
+        }
+
+        /// <summary>
+        /// 鐢ㄦ埛绠$悊鏁版嵁鍥炲
+        /// </summary>
+        [System.Serializable]
+        public class RemoteResponseData
+        {
+            /// <summary>
+            ///鍝嶅簲鎿嶄綔鐮侊紙0-ffff锛�
+            /// </summary>
+            public string command = "";
+            /// <summary>
+            /// 鐘舵�佸��
+            /// <para>榛樿鍝嶅簲缁撴灉锛�
+            ///<para>0 鎴愬姛</para>
+            ///<para>1 澶辫触</para> 
+            /// </summary>
+            public int status = -1;
         }
         #endregion
 
@@ -1727,13 +1800,13 @@
         /// <summary>
         /// 涓存椂瀵嗙爜鍥炲鏁版嵁
         /// </summary>
-        public TempPasswordResponseAllData keyColorDataResponseAllData;
+        public TempPasswordResponseAllData tempPasswordResponseAllData;
         [System.Serializable]
         public class TempPasswordResponseAllData
         {
             /// <summary>
             /// 閿欒淇℃伅
-            /// </summary>
+            /// </summary> 
             public string errorMessageBase;
             /// <summary>
             /// 缃戝叧淇℃伅閿欒鍙嶉
@@ -1960,6 +2033,8 @@
         public async System.Threading.Tasks.Task<DoorlockUserInfo> GetDoorlockUserInfoAsync()
         {
             DoorlockUserInfo result = null;
+            int totalNum = 0;
+            int currentNum = -1;
             DoorLockUserDetailData doorLockUserDetailData = new DoorLockUserDetailData { };
             if (Gateway == null)
             {
@@ -2025,15 +2100,15 @@
                     var data = new JObject { { "PassData", passData } };
                     jObject.Add("Data", data);
                     Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
+
                 }
                 catch { }
 
-                //鎺ユ敹涓�涓寘鏈�澶氱瓑5绉掞紝娌℃湁鏀跺埌灏遍��鍑�
-                while ((DateTime.Now - dateTime).TotalMilliseconds < 5000)
+                //鎺ユ敹涓�涓寘鏈�澶氱瓑3绉掞紝娌℃湁鏀跺埌灏遍��鍑�
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 3000)
                 {
                     await System.Threading.Tasks.Task.Delay(100);
                 }
-
                 Gateway.Actions -= action;
                 DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
 
@@ -2124,4 +2199,4 @@
 
         #endregion
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.8.0