From c6b35c3138b944830b5336bf610f918154dd47c7 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期六, 12 十月 2019 15:45:10 +0800
Subject: [PATCH] 合并门锁,完成住宅管理

---
 ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs | 1510 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 838 insertions(+), 672 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
index df2cc00..c1bc636 100755
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
@@ -1,7 +1,11 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using Shared;
+using Shared.Common;
+using Shared.Common.ResponseEntity;
 using Shared.Phone.UserCenter;
 
 namespace ZigBee.Device
@@ -13,11 +17,64 @@
             this.Type = DeviceType.DoorLock;
         }
 
+        #region 闂ㄩ攣鏈湴鍙橀噺
+        /// <summary>
+        /// 闂ㄩ攣鏈湴鐢ㄦ埛鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<int, LocaDoorLockObj> localDoorLockUserList = new Dictionary<int, 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 static DateTime maxValue = DateTime.MaxValue;
+        public static DateTime minValue = DateTime.MinValue;
+
+        /// <summary>
+        /// 闂ㄩ攣缂栫▼浜嬩欢閫氱煡
+        /// </summary>
+        [System.Serializable]
+        public class LocaDoorLockObj
+        {
+            /// <summary>
+            /// 鐢ㄦ埛id
+            ///闂ㄩ攣鏈湴褰曞叆鐨勫瘑鐮併�佹寚绾广�佹劅搴斿崱閮芥湁鍞竴瀵瑰簲鐨勭敤鎴稩d
+            /// </summary>
+            public int UserID;
+            /// <summary> 
+            /// 寮�閿佺被鍨�
+            /// 甯哥敤锛�
+            /// 0:Keypad(閿洏/瀵嗙爜)锛�3:RFID(灏勯鍗�)锛�15:鎸囩汗
+            ///涓嶅父鐢細
+            /// 1:RF(Zigbee鏃犵嚎)锛�2:Manual(鎵嬪姩)锛�255:Indeterminate(涓嶇‘瀹�)
+            /// </summary>
+            public int UnlockType;
+            /// <summary>
+            ///  鍏宠仈璐︽埛鐨処D
+            /// </summary>
+            public string ConnectedAccount = string.Empty;
+            /// <summary>
+            ///  闂ㄩ攣鐢ㄦ埛鍚�
+            /// </summary>
+            public string UserName = string.Empty;
+            /// <summary>
+            /// 闂ㄩ攣褰曞叆鐨勬椂
+            /// </summary>
+            public DateTime EntryTime = System.DateTime.MinValue;
+            /// <summary>
+            /// PrimaryId 闂ㄩ攣浜戠涓� 閿�(闈炴洿鏂板瓧娈�,浠ヤ笅鍧囦负鏇存柊瀛楁) -->閿悕 : PrimaryId榛樿鍊�: null
+            /// </summary>
+            public string PrimaryId = "";
+        }
+
+        #endregion
+
         #region 涓庝簯绔�氳鎺ュ彛
+        #region 闂ㄩ攣鏈嶅姟鍣ㄥ彂閫佸熀鏈俊鎭�
         /// <summary>
         ///  娣诲姞闂ㄩ攣
         /// </summary>
-        public class AddDoorLockData
+        public class BaseDoorLockServerData
         {
             /// <summary>
             /// RequestVersion
@@ -30,23 +87,32 @@
             /// <summary>
             /// 浣忓畢Id -->閿悕 : HomeId
             /// </summary>
-            public string HomeId = "";
-            /// <summary>
-            /// 浜戠甯愬彿Id -->閿悕 : CloudAccountId
-            /// </summary>
-            public string CloudAccountId = "";
+            public string HomeId = Shared.Common.Config.Instance.HomeId;
             /// <summary>
             /// 闂ㄩ攣Id -->閿悕 : DoorLockId
             /// </summary>
             public string DoorLockId = "";
             /// <summary>
-            /// OpenLockMode 寮�閿佹柟寮�(瀵嗙爜銆佹寚绾广�両C鍗�) -->閿悕 : OpenLockMode (鍙��)
-            /// </summary>
-            public int OpenLockMode = 0;
-            /// <summary>
             /// 闂ㄩ攣鏈湴鐢ㄦ埛Id -->閿悕 : DoorLockLocalUserId
             /// </summary>
             public string DoorLockLocalUserId = "";
+        }
+        #endregion
+
+        #region 娣诲姞闂ㄩ攣
+        /// <summary>
+        ///  娣诲姞闂ㄩ攣
+        /// </summary>
+        public class AddDoorLockData : BaseDoorLockServerData
+        {
+            /// <summary>
+            /// 浜戠甯愬彿Id -->閿悕 : CloudAccountId
+            /// </summary>
+            public string CloudAccountId = "";
+            /// <summary>
+            /// OpenLockMode 寮�閿佹柟寮�(瀵嗙爜銆佹寚绾广�両C鍗�) -->閿悕 : OpenLockMode (鍙��)
+            /// </summary>
+            public int OpenLockMode = 0;
             /// <summary>
             /// Data 鐩稿叧鍐呭(濡�:瀵嗙爜銆佹寚绾广�両C鍗� 鐨勪簩杩涘埗) -->閿悕 : Data (鍙��)
             public byte[] Data = null;
@@ -65,7 +131,214 @@
             /// <summary>
             /// EntryTime 褰曞叆鏃堕棿 -->閿悕 : EntryTime(鍙��)
             /// </summary>
+            public DateTime EntryTime = System.DateTime.Now;
+        }
+
+        /// <summary>
+        /// 娣诲姞闂ㄩ攣缁撴灉
+        /// </summary>
+        public class AddDoorLockDataRes
+        {
+            /// <summary>
+            /// 鍝嶅簲鐨勭増鏈彿,涓�鑸姹備粈涔堢増鏈彿锛岃繖閲屼笌涔嬭姹傜浉鍚�
+            /// </summary>
+            public string ResponseVersion = string.Empty;
+            /// <summary>
+            /// 鍝嶅簲鐘舵�佺爜:
+            ///<para>(1)Success 鍒橻璋冪敤姝ゆ帴鍙f搷浣滄垚鍔焆, ResponseData鍒欎负null</para>
+            ///<para>(2)ParameterOrEmpty,鍒欏搷搴斿瓧娈典腑[ErrorInfo] 涓洪敊璇俊鎭�, ResponseData鍒欎负null</para>
+            ///(<para>3)NoLogin,鍒欏搷搴斿瓧娈典腑[ErrorInfo] 涓洪敊璇俊鎭负[鏃犳晥鐧诲綍Token!]</para>
+            ///<para>(4)NoRecord,鍒欏搷搴斿瓧娈典腑[ErrorInfo] 涓洪敊璇俊鎭负[褰撳墠鎻愪氦DoorLockId鍊煎湪浜戠涓嶅瓨鍦紝璇风‘璁ゅ�兼槸鍚︽纭�!]</para>
+            ///<para>(5)DoorLockIdNoIsYou,鍒欏搷搴斿瓧娈典腑[ErrorInfo] 涓洪敊璇俊鎭负[褰撳墠鎻愪氦DoorLockId骞朵笉灞炰簬浣犲綋鍓嶅笎鍙风殑锛岃纭鍊兼槸鍚︽纭�!]</para>
+            /// </summary>
+            public string StateCode = string.Empty;
+        }
+        #endregion
+
+        #region 鏇存柊闂ㄩ攣
+        /// <summary>
+        ///   鏇存柊闂ㄩ攣
+        /// </summary>
+        public class RefreshDoorLockData : BaseDoorLockServerData
+        {
+            /// <summary>
+            /// PrimaryId 闂ㄩ攣浜戠涓� 閿�(闈炴洿鏂板瓧娈�,浠ヤ笅鍧囦负鏇存柊瀛楁) -->閿悕 : PrimaryId榛樿鍊�: null
+            /// </summary>
+            public string PrimaryId = "";
+            /// <summary>
+            /// 浜戠甯愬彿Id -->閿悕 : CloudAccountId
+            /// </summary>
+            public string CloudAccountId = "";
+            /// <summary>
+            /// OpenLockMode 寮�閿佹柟寮�(瀵嗙爜銆佹寚绾广�両C鍗�) -->閿悕 : OpenLockMode (鍙��)
+            /// </summary>
+            public int OpenLockMode = 0;
+
+            /// <summary>
+            /// 浣忓畢Id (鍙��)
+            /// </summary>
+            public byte[] Data;
+            /// <summary>
+            /// 鐢ㄦ埛Id澶囨敞
+            /// </summary>
+            public string UserIdRemarks = "";
+            /// <summary>
+            /// 鏄惁涓虹鐞嗗憳闂ㄩ攣
+            /// </summary>
+            public bool IsFreezeUser;
+            /// <summary>
+            /// 鏄惁涓虹鐞嗗憳闂ㄩ攣
+            /// </summary>
+            public bool IsTempUnlockAuthority;
+        }
+        #endregion
+
+        #region 鍒犻櫎闂ㄩ攣
+        /// <summary>
+        /// 鍒犻櫎闂ㄩ攣
+        /// </summary>
+        public class DeleteDoorLockData : BaseDoorLockServerData
+        {
+            /// <summary>
+            /// PrimaryId 闂ㄩ攣浜戠涓� 閿�(闈炴洿鏂板瓧娈�,浠ヤ笅鍧囦负鏇存柊瀛楁) -->閿悕 : PrimaryId榛樿鍊�: null
+            /// </summary>
+            public string PrimaryId = "";
+            /// <summary>
+            /// 闂ㄩ攣Id -->閿悕 : DoorLockId (鍙��)
+            /// </summary>
+            public int DelDoorLockDelType;
+        }
+        #endregion
+
+        #region 鑾峰彇闂ㄩ攣
+        /// <summary>
+        ///  鑾峰彇闂ㄩ攣
+        /// </summary>
+        public class GetDoorLockData : BaseDoorLockServerData
+        {
+            /// <summary>
+            /// 浜戠甯愬彿Id -->閿悕 : CloudAccountId (鍙��)
+            /// </summary>
+            public string CloudAccountId = "";
+            /// <summary>
+            /// OpenLockMode 寮�閿佹柟寮�(瀵嗙爜銆佹寚绾广�両C鍗�) -->閿悕 : OpenLockMode (鍙��)
+            /// </summary>
+            //public int OpenLockMode = 0;
+        }
+
+        [Serializable]
+        public class GetDoorLockDataRes
+        {
+            public List<CloudDoorLockObj> PageData = new List<CloudDoorLockObj>();
+            public int PageIndex;
+            public int PageSize;
+            public int TotalCount;
+            public int TotalPages;
+            public bool HasPreviousPage;
+            public bool HasNextPage;
+        }
+        [Serializable]
+        public class CloudDoorLockObj
+        {
+            /// <summary>
+            /// 闂ㄩ攣Id  
+            /// </summary>
+            public string DoorLockId;
+            /// <summary>
+            /// 浜戠甯愬彿Id  
+            /// </summary>
+            public string CloudAccountId;
+            /// <summary>
+            /// OpenLockMode 寮�閿佹柟寮�(瀵嗙爜銆佹寚绾广�両C鍗�)  
+            /// </summary>
+            public int OpenLockMode;
+            /// <summary>
+            /// 闂ㄩ攣鏈湴鐢ㄦ埛Id  
+            /// </summary>
+            public string DoorLockLocalUserId;
+            /// <summary>
+            /// 浣忓畢Id 
+            /// </summary>
+            public byte[] Data;
+            /// <summary>
+            /// 鐢ㄦ埛Id澶囨敞
+            /// </summary>
+            public string UserIdRemarks;
+            /// <summary>
+            /// 鏄惁涓虹鐞嗗憳闂ㄩ攣
+            /// </summary>
+            public bool IsAdminDoorLock;
+            /// <summary>
+            /// 鏄惁涓虹鐞嗗憳闂ㄩ攣
+            /// </summary>
+            public bool IsFreezeUser;
+            /// <summary>
+            /// 鏄惁涓虹鐞嗗憳闂ㄩ攣
+            /// </summary>
+            public bool IsTempUnlockAuthority;
+            /// <summary>
+            /// 褰曞叆鏃堕棿  
+            /// </summary>
             public DateTime EntryTime;
+            /// <summary>
+            /// 鏈�鍚庢洿鏂版椂闂� 
+            /// </summary>
+            public string LastChangeTime;
+            /// <summary>
+            /// 銆愰棬閿佷簯绔富閿��,鐢ㄤ簬銆愭坊鍔犻棬閿佸巻鍙层�戞帴鍙d腑鐨凞oorLockId鍙傛暟鍙娿�愬垹闄ら棬閿併�戞帴鍙d腑鐨凱rimaryId鍙傛暟,娉ㄦ剰涓嶆槸缃戝叧涓殑銆愰棬閿両d
+            /// </summary>
+            public string Id;
+            /// <summary>
+            /// 鍒涘缓鏃堕棿
+            /// </summary>
+            public DateTime CreatedOnUtc;
+        }
+
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣缁欎簯鏈嶅姟鍣�
+        /// </summary> 
+        public static async System.Threading.Tasks.Task<GetDoorLockDataRes> GetDoorLockInfoFromServer(string RequestName, GetDoorLockData getDoorLockData)
+        {
+            return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<GetDoorLockDataRes>>)(async () =>
+            {
+                GetDoorLockDataRes listInfo = null;
+                var revertObj = await SendDoorLockToServer(RequestName, getDoorLockData);
+                if (revertObj != null && revertObj.ResponseData != null)
+                {
+                    var result = revertObj.ResponseData.ToString();
+                    if (result != null)
+                    {
+                        listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetDoorLockDataRes>(result);
+                        int i = 0;
+                    }
+                }
+                return listInfo;
+            }));
+        }
+        #endregion
+
+        /// <summary>
+        /// 鍙戦�侀棬閿佹暟鎹埌鏈嶅姟鍣紝鍙洖澶嶇姸鎬侊紝娌℃湁鏁版嵁澶勭悊
+        /// </summary>
+        /// <returns>鑾峰彇浠庢帴鍙i偅閲屽彇鍒扮殑ResponsePack</returns>
+        /// <param name="RequestName">璁块棶鍦板潃</param>
+        /// <param name="obj">涓�涓被</param>
+        public static async Task<ResponsePack> SendDoorLockToServer(string RequestName, object obj)
+        {
+            try
+            {
+                //搴忓垪鍖栧璞�
+                var requestJson = JsonConvert.SerializeObject(obj);
+                //璁块棶鎺ュ彛
+                var result = await CommonPage.Instance.RequestHttpsZigbeeAsync(RequestName, System.Text.Encoding.UTF8.GetBytes(requestJson));
+
+                return result;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+                return null;
+            }
         }
 
         /// <summary>
@@ -78,7 +351,7 @@
             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", true, pra);
+               string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
                var listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Shared.Phone.UserCenter.MemberInfoRes>>(result);
                return listInfo;
            }));
@@ -96,23 +369,6 @@
             });
         }
         #endregion
-
-        #region 闂ㄩ攣鏈湴鍙橀噺
-        /// <summary>
-        /// 闂ㄩ攣鏈湴鐢ㄦ埛鍒楄〃
-        /// </summary>
-        /// <returns></returns>
-        public Dictionary<int, DoorLockProgrammingEventNotificationCommand> localDoorLockUserList = new Dictionary<int, DoorLockProgrammingEventNotificationCommand>();
-        public string currentUserDisplayMethod = string.Empty;
-
-        #endregion
-
-        public async System.Threading.Tasks.Task GetDoorLockAllInfo()
-        {
-            FingerprintInfo fingerprint = await GetFingerprintAsync();
-            var password = GetPasswordAsync();
-            var proximity = GetProximityAsync();
-        }
 
         #region 闂ㄩ攣鎿嶄綔浜嬩欢閫氱煡
         /// <summary>
@@ -415,373 +671,6 @@
         }
         #endregion
 
-        /*
-        #region 鑾峰彇闂ㄩ攣鏈湴log璁板綍
-        ///<summary >
-        ///鑾峰彇闂ㄩ攣鏈湴log璁板綍
-        ///<para>鑻ュ懡浠や腑鐨凱IN/RFID Code涓庨棬閿佷腑鐨凱IN/RFID Code鐩稿尮閰嶏紝鍒欏皢闂ㄩ攣涓婇攣</para>
-        ///<para>command :闂ㄩ攣璁惧璁板綍鐨勭储寮曞彿锛涘彇鍊艰寖鍥达細</para>
-        ///<para>1~鈥淣umber of Log Records Supported attribute鈥濓紱</para>
-        ///<para>鍊间负0琛ㄧず鑾峰彇璁惧鏈�杩戠殑璁板綍鏁版嵁銆�</para>
-        ///</summary>
-        public async System.Threading.Tasks.Task<LogRecordResponAllData> LogRecordAsync(int logIndex)
-        {
-            if (Gateway == null)
-            {
-                return null;
-            }
-            return await System.Threading.Tasks.Task.Run(async () =>
-            {
-                LogRecordResponAllData dataRes = null;
-                Action<string, string> action = (topic, message) =>
-                {
-                    var gatewayID = topic.Split('/')[0];
-                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-
-                    if (topic == gatewayID + "/" + "Error_Respon")
-                    {
-                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
-
-                        if (temp == null)
-                        {
-                            dataRes = new LogRecordResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
-                        }
-                        else
-                        {
-                            dataRes = new LogRecordResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
-                        }
-                    }
-
-                    if (topic == gatewayID + "/" + "DoorLock/DoorLockGetLogRecordResponseCommand")
-                    {
-                        var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<LogRecordResData>(jobject["Data"].ToString());
-
-                        if (tempData == null)
-                        {
-                            dataRes = new LogRecordResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
-                        }
-                        else
-                        {
-                            dataRes = new LogRecordResponAllData { logRecordResData = tempData };
-                            DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
-                        }
-                    }
-                };
-                Gateway.Actions += action;
-                DebugPrintLog("DoorLock/DoorLockGetLogRecordResponseCommand_Actions 鍚姩" + System.DateTime.Now.ToString());
-
-                try
-                {
-                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 257 }, { "Command", 4 }, { "SendMode", 2 } };
-                    var data = new JObject { { "LogIndex", logIndex } };
-                    jObject.Add("Data", data);
-                    Gateway.Send("DoorLock/test", jObject.ToString());
-                }
-                catch { }
-                var dateTime = DateTime.Now;
-                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
-                {
-                    await System.Threading.Tasks.Task.Delay(10);
-                    if (dataRes != null)
-                    {
-                        break;
-                    }
-                }
-                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
-                {
-                    dataRes = new LogRecordResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
-                }
-                Gateway.Actions -= action;
-                DebugPrintLog("DoorLock/DoorLockGetLogRecordResponseCommand_Actions 閫�鍑�" + System.DateTime.Now.ToString());
-
-                return dataRes;
-            });
-        }
-
-        ///<summary >
-        ///鑾峰彇闂ㄩ攣鏈湴log璁板綍
-        /// </summary>
-        public class LogRecordResponAllData
-        {
-            /// <summary>
-            /// 閿欒淇℃伅
-            /// </summary>
-            public string errorMessageBase;
-            /// <summary>
-            /// 缃戝叧淇℃伅閿欒鍙嶉
-            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
-            /// </summary>
-            public ErrorResponData errorResponData;
-            /// <summary>
-            /// 鑾峰彇闂ㄩ攣鏈湴log璁板綍
-            /// </summary>
-            public LogRecordResData logRecordResData;
-        }
-
-        ///<summary >
-        ///鑾峰彇闂ㄩ攣鏈湴log璁板綍
-        /// </summary>
-        public class LogRecordResData
-        {
-            /// <summary>
-            /// 浜嬩欢瑙﹀彂
-            /// </summary>
-            public int OperationEventSoure;
-            /// <summary>
-            /// 浜嬩欢
-            /// </summary>
-            public int OperationEventCode;
-            /// <summary>
-            /// 璁惧褰撳墠鏃堕棿鐨勬椂闂存埑
-            /// </summary>
-            public int ZigbeeLocalTime;
-        }
-        #endregion
-        */
-
-        /* 鑾峰彇缃戝叧闂ㄩ攣淇℃伅锛屾殏涓嶆敮鎸�
-        #region 鑾峰彇鎵�鏈夐棬閿佹墍鏈夌敤鎴蜂俊鎭�
-        ///<summary >
-        ///鑾峰彇鎵�鏈夐棬閿佹墍鏈夌敤鎴蜂俊鎭�
-        ///</summary>
-        public async System.Threading.Tasks.Task<AlldoorlockUserInfoResponAllData> GetAlldoorlockUserInfoRspAsync()
-        {
-            if (Gateway == null)
-            {
-                return null;
-            }
-            return await System.Threading.Tasks.Task.Run(async () =>
-            {
-                AlldoorlockUserInfoResponAllData dataRes = null;
-                Action<string, string> action = (topic, message) =>
-                {
-                    var gatewayID = topic.Split('/')[0];
-                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-
-                    if (topic == gatewayID + "/" + "Error_Respon")
-                    {
-                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
-
-                        if (temp == null)
-                        {
-                            dataRes = new AlldoorlockUserInfoResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
-                        }
-                        else
-                        {
-                            dataRes = new AlldoorlockUserInfoResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
-                        }
-                    }
-
-                    if (topic == gatewayID + "/" + "Doorlock/GetAlldoorlockUserInfoRsp")
-                    {
-                        var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<AlldoorlockUserInfoResData>(jobject["Data"].ToString());
-
-                        if (tempData == null)
-                        {
-                            dataRes = new AlldoorlockUserInfoResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
-                        }
-                        else
-                        {
-                            dataRes = new AlldoorlockUserInfoResponAllData { alldoorlockUserInfoResData = tempData };
-                            DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
-                        }
-                    }
-                };
-                Gateway.Actions += action;
-                DebugPrintLog("闂ㄩ攣Doorlock/GetAlldoorlockUserInfoRsp_Actions 鍚姩" + System.DateTime.Now.ToString());
-
-                try
-                {
-                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 6100 } };
-                    Gateway.Send("DoorLock/test", jObject.ToString());
-                }
-                catch { }
-                var dateTime = DateTime.Now;
-                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
-                {
-                    await System.Threading.Tasks.Task.Delay(10);
-                    if (dataRes != null)
-                    {
-                        break;
-                    }
-                }
-                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
-                {
-                    dataRes = new AlldoorlockUserInfoResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
-                }
-                Gateway.Actions -= action;
-                DebugPrintLog("闂ㄩ攣Doorlock/GetAlldoorlockUserInfoRsp_Actions 閫�鍑�" + System.DateTime.Now.ToString());
-
-                return dataRes;
-            });
-        }
-
-        ///<summary >
-        ///鑾峰彇鎵�鏈夐棬閿佹墍鏈夌敤鎴蜂俊鎭�
-        /// </summary>
-        public class AlldoorlockUserInfoResponAllData
-        {
-            /// <summary>
-            /// 閿欒淇℃伅
-            /// </summary>
-            public string errorMessageBase;
-            /// <summary>
-            /// 缃戝叧淇℃伅閿欒鍙嶉
-            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
-            /// </summary>
-            public ErrorResponData errorResponData;
-            /// <summary>
-            /// 鑾峰彇鎵�鏈夐棬閿佹墍鏈夌敤鎴蜂俊鎭�
-            /// </summary>
-            public AlldoorlockUserInfoResData alldoorlockUserInfoResData;
-        }
-
-        ///<summary >
-        ///鑾峰彇鎵�鏈夐棬閿佹墍鏈夌敤鎴蜂俊鎭�
-        /// </summary>
-        public class AlldoorlockUserInfoResData
-        {
-            /// <summary>
-            /// 浜嬩欢瑙﹀彂
-            /// </summary>
-            public int doorlockUserInfoRecordSum;
-            /// <summary>
-            /// 浜嬩欢
-            /// </summary>
-            public int OperationEventCode;
-            /// <summary>
-            /// 璁惧褰撳墠鏃堕棿鐨勬椂闂存埑
-            /// </summary>
-            public int ZigbeeLocalTime;
-        }
-        #endregion
-
-        #region 鑾峰彇鍗曚釜闂ㄩ攣鍗曚釜鐢ㄦ埛淇℃伅
-        ///<summary >
-        ///鑾峰彇鍗曚釜闂ㄩ攣鍗曚釜鐢ㄦ埛淇℃伅
-        ///<para>userId:闂ㄩ攣鏈湴鐢ㄦ埛Id</para>
-        ///</summary>
-        public async System.Threading.Tasks.Task<UserInfoByMACEPUserIdResponAllData> GetdoorlockUserInfoByMACEPUserIdAsync(int userId)
-        {
-            if (Gateway == null)
-            {
-                return null;
-            }
-            return await System.Threading.Tasks.Task.Run(async () =>
-            {
-                UserInfoByMACEPUserIdResponAllData dataRes = null;
-                Action<string, string> action = (topic, message) =>
-                {
-                    var gatewayID = topic.Split('/')[0];
-                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-
-                    if (topic == gatewayID + "/" + "Error_Respon")
-                    {
-                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
-
-                        if (temp == null)
-                        {
-                            dataRes = new UserInfoByMACEPUserIdResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
-                        }
-                        else
-                        {
-                            dataRes = new UserInfoByMACEPUserIdResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
-                        }
-                    }
-
-                    if (topic == gatewayID + "/" + "Doorlock/GetdoorlockUserInfoByMACEPUserIdRsp")
-                    {
-                        var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfoByMACEPUserIdRspResData>(jobject["Data"].ToString());
-
-                        if (tempData == null)
-                        {
-                            dataRes = new UserInfoByMACEPUserIdResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
-                        }
-                        else
-                        {
-                            dataRes = new UserInfoByMACEPUserIdResponAllData { userInfoByMACEPUserIdRspResData = tempData };
-                            DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
-                        }
-                    }
-                };
-                Gateway.Actions += action;
-                DebugPrintLog("闂ㄩ攣Doorlock/GetdoorlockUserInfoByMACEPUserIdRsp 鍚姩" + System.DateTime.Now.ToString());
-
-                try
-                {
-                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 6102 } };
-                    var data = new JObject { { "UserId", userId } };
-                    jObject.Add("Data", data);
-                    Gateway.Send("DoorLock/test", jObject.ToString());
-                }
-                catch { }
-                var dateTime = DateTime.Now;
-                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
-                {
-                    await System.Threading.Tasks.Task.Delay(10);
-                    if (dataRes != null)
-                    {
-                        break;
-                    }
-                }
-                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
-                {
-                    dataRes = new UserInfoByMACEPUserIdResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
-                }
-                Gateway.Actions -= action;
-                DebugPrintLog("闂ㄩ攣Doorlock/GetdoorlockUserInfoByMACEPUserIdRsp 閫�鍑�" + System.DateTime.Now.ToString());
-
-                return dataRes;
-            });
-        }
-
-        ///<summary >
-        ///鑾峰彇鍗曚釜闂ㄩ攣鍗曚釜鐢ㄦ埛淇℃伅
-        /// </summary>
-        public class UserInfoByMACEPUserIdResponAllData
-        {
-            /// <summary>
-            /// 閿欒淇℃伅
-            /// </summary>
-            public string errorMessageBase;
-            /// <summary>
-            /// 缃戝叧淇℃伅閿欒鍙嶉
-            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
-            /// </summary>
-            public ErrorResponData errorResponData;
-            /// <summary>
-            /// 鑾峰彇鍗曚釜闂ㄩ攣鍗曚釜鐢ㄦ埛淇℃伅
-            /// </summary>
-            public UserInfoByMACEPUserIdRspResData userInfoByMACEPUserIdRspResData;
-        }
-
-        ///<summary >
-        ///鑾峰彇鎵�鏈夐棬閿佹墍鏈夌敤鎴蜂俊鎭�
-        /// </summary>
-        public class UserInfoByMACEPUserIdRspResData
-        {
-            /// <summary>
-            /// 浜嬩欢瑙﹀彂
-            /// </summary>
-            public int OperationEventSoure;
-            /// <summary>
-            /// 浜嬩欢
-            /// </summary>
-            public int OperationEventCode;
-            /// <summary>
-            /// 璁惧褰撳墠鏃堕棿鐨勬椂闂存埑
-            /// </summary>
-            public int ZigbeeLocalTime;
-        }
-        #endregion 
-       */
-
         #region 涓存椂瀵嗙爜淇℃伅
         /// <summary>
         /// 涓存椂瀵嗙爜鏈湴瀛樺偍瀵硅薄
@@ -804,178 +693,19 @@
         }
         #endregion
 
-        #region 鎸囩汗淇℃伅
-        public async System.Threading.Tasks.Task<FingerprintInfo> GetFingerprintAsync()
-        {
-            FingerprintInfo result = null;
-            return result;
-        }
-
-        /// <summary>
-        /// 鐢ㄦ埛鎸囩汗鍒楄〃  
-        /// </summary>
-        public List<FingerprintInfo> fingerprintList = new List<FingerprintInfo>();
-
-        /// <summary>
-        /// 鐢ㄦ埛鎸囩汗鍒楄〃淇℃伅
-        /// </summary>
-        [System.Serializable]
-        public class FingerprintInfo
-        {
-            /// <summary>
-            /// 鎸囩汗澶囨敞
-            /// </summary>
-            public string fingerprintRemark = string.Empty;
-            /// <summary>
-            /// 鎸囩汗鍥剧墖
-            /// </summary>
-            public string fingerprintImage = string.Empty;
-            /// <summary>
-            /// 鎸囩汗ID
-            /// </summary>
-            public int userFingerprintID;
-            /// <summary>
-            /// 鎸囩汗鐩爣鍒楄〃
-            /// </summary>
-            public readonly List<string> sceneFingerprintTargetList = new List<string>();
-        }
-        #endregion
-
-        #region 瀵嗙爜淇℃伅
-        public PasswordInfo GetPasswordAsync()
-        {
-            return null;
-        }
-        /// <summary>
-        /// 鐢ㄦ埛瀵嗙爜鍒楄〃  
-        /// </summary>
-        public List<PasswordInfo> passwordList = new List<PasswordInfo>();
-
-        /// <summary>
-        /// 鐢ㄦ埛瀵嗙爜鍒楄〃淇℃伅
-        /// </summary>
-        [System.Serializable]
-        public class PasswordInfo
-        {
-            /// <summary>
-            /// 瀵嗙爜澶囨敞
-            /// </summary>
-            public string passwordRemark = string.Empty;
-            /// <summary>
-            /// 瀵嗙爜鍥剧墖
-            /// </summary>
-            public string passwordImage = string.Empty;
-            /// <summary>
-            /// 瀵嗙爜ID
-            /// </summary>
-            public int userPasswordID;
-            /// <summary>
-            /// 瀵嗙爜鐩爣鍒楄〃
-            /// </summary>
-            public readonly List<string> scenePasswordTargetList = new List<string>();
-        }
-        #endregion
-
-        #region 鎰熷簲鍗′俊鎭�
-        public ProximityInfo GetProximityAsync()
-        {
-            return null;
-        }
-        /// <summary>
-        /// 鐢ㄦ埛鎰熷簲鍗″垪琛�  
-        /// </summary>
-        public List<ProximityInfo> proximityList = new List<ProximityInfo>();
-
-        /// <summary>
-        /// 鐢ㄦ埛鎰熷簲鍗″垪琛ㄤ俊鎭�
-        /// </summary>
-        [System.Serializable]
-        public class ProximityInfo
-        {
-            /// <summary>
-            /// 鎰熷簲鍗″娉�
-            /// </summary>
-            public string proximityRemark = string.Empty;
-            /// <summary>
-            /// 鎰熷簲鍗″浘鐗�
-            /// </summary>
-            public string proximityImage = string.Empty;
-            /// <summary>
-            /// 鎰熷簲鍗D
-            /// </summary>
-            public int userProximityID;
-            /// <summary>
-            /// 鎰熷簲鍗$洰鏍囧垪琛�
-            /// </summary>
-            public readonly List<string> sceneProximityTargetList = new List<string>();
-        }
-        #endregion
-
-        #region 鍘嗗彶璁板綍
-        /// <summary>
-        /// 鍘嗗彶璁板綍鍒楄〃  
-        /// </summary>
-        public List<HistoryRecord> historyRecordList = new List<HistoryRecord> { };
-        /// <summary>
-        /// 闂ㄩ攣鐘舵�佸拰鎶ヨ淇℃伅
-        /// </summary>
-        [System.Serializable]
-        public class HistoryRecord
-        {
-            /// <summary>
-            /// 闂ㄩ攣寮�閿佺被鍨嬪搴�1 2 3 6
-            /// </summary>
-            public byte type;
-
-            /// <summary>
-            /// 闂ㄩ攣寮�閿佺敤鎴稩D
-            /// </summary>
-            public int userID;
-
-            /// <summary>
-            /// 骞�
-            /// </summary>
-            public string year;
-
-            /// <summary>
-            ///  鏈�
-            /// </summary>
-            public string month;
-
-            /// <summary>
-            /// 鏃�
-            /// </summary>
-            public string day;
-
-            /// <summary>
-            /// 鏃�
-            /// </summary>
-            public string hour;
-
-            /// <summary>
-            /// 鍒�
-            /// </summary>
-            public string minute;
-
-            /// <summary>
-            /// 绉�
-            /// </summary>
-            public string second;
-        }
-        #endregion
-
         #region 绉佹湁鍛戒护
-        #region 鍥炲榛樿鍝嶅簲鐨勬帶鍒�
+
+        #region 鐢ㄦ埛绠$悊鎺у埗
         ///<summary >
-        ///榛樿鍝嶅簲鎺у埗
+        ///鐢ㄦ埛绠$悊鎺у埗
         /// <para>passData:閫忎紶鏁版嵁</para>
         /// </summary>
-        public async System.Threading.Tasks.Task<ResponseAllData> DefaultControlAsync(string passData)
+        public async System.Threading.Tasks.Task<DefaultControlResponseAllData> DefaultControlAsync(string passData)
         {
-            ResponseAllData result = null;
+            DefaultControlResponseAllData result = null;
             if (Gateway == null)
             {
-                result = new ResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
+                result = new DefaultControlResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
                 return result;
             }
             return await System.Threading.Tasks.Task.Run(async () =>
@@ -992,12 +722,12 @@
 
                         if (temp == null)
                         {
-                            result = new ResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                            result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
                         }
 
                         else
                         {
-                            result = new ResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                            result = new DefaultControlResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
                         }
                     }
                     if (topic == gatewayID + "/" + "ZbDataPassthrough")
@@ -1007,7 +737,7 @@
 
                         if (gatewayTemp.clientDataPassthroughResponseData == null)
                         {
-                            result = new ResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                            result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
                         }
                         else
                         {
@@ -1019,10 +749,10 @@
                                     var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
                                     if (command == "0002")
                                     {
-                                        var tempD = new ResponseData();
+                                        var tempD = new DefaultControlResponseData();
                                         tempD.command = Convert.ToInt32(data[10].ToString() + data[11].ToString() + data[12].ToString() + data[13].ToString(), 16);
                                         tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
-                                        result = new ResponseAllData { responseData = tempD };
+                                        result = new DefaultControlResponseAllData { defaultControlResponseData = tempD };
                                         DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0402_{ topic}");
                                     }
                                 }
@@ -1054,7 +784,7 @@
                 }
                 if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
                 {
-                    result = new ResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                    result = new DefaultControlResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
                 }
                 Gateway.Actions -= action;
                 DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
@@ -1062,9 +792,7 @@
                 return result;
             });
         }
-        #endregion
 
-        #region 鐢ㄦ埛绠$悊鍙戦�佹暟鎹�
         /// <summary>
         /// 鐢ㄦ埛绠$悊鍙戦�佹暟鎹�
         /// </summary>
@@ -1122,16 +850,330 @@
 
             return data;
         }
+
+        /// <summary>
+        /// 鐢ㄦ埛绠$悊鍙戦�佹暟鎹洖澶�
+        /// </summary>
+        public DefaultControlResponseAllData defaultControlResponseAllData;
+        [System.Serializable]
+        public class DefaultControlResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鐢ㄦ埛绠$悊鏁版嵁鍥炲
+            /// </summary>
+            public DefaultControlResponseData defaultControlResponseData;
+        }
+
+        /// <summary>
+        /// 鐢ㄦ埛绠$悊鏁版嵁鍥炲
+        /// </summary>
+        [System.Serializable]
+        public class DefaultControlResponseData
+        {
+            /// <summary>
+            ///鍝嶅簲鎿嶄綔鐮侊紙0-ffff锛�
+            /// </summary>
+            public int command = -1;
+            /// <summary>
+            /// 鐘舵�佸��
+            /// <para>榛樿鍝嶅簲缁撴灉锛�
+            ///<para>0 鍒犻櫎鎴愬姛</para>
+            ///<para>1 鍒犻櫎澶辫触</para>
+            ///<para>2 鐢ㄦ埛涓嶅瓨鍦�</para>
+            ///<para>32 鍐荤粨鎴愬姛</para>
+            ///<para>34 鍐荤粨澶辫触</para>
+            ///<para>33 瑙e喕鎴愬姛</para>
+            ///<para>35 瑙e喕澶辫触</para> 
+            /// </summary>
+            public int status = -1;
+        }
+
+        public enum AccessType
+        {
+            /// <summary>
+            /// 0x00 鍒犻櫎鍏ㄩ儴鍗曟鐢ㄦ埛
+            /// </summary>
+            DelAllUsers = 0,
+            /// <summary>
+            /// 0x01 鍒犻櫎鎸囧畾鐢ㄦ埛(鎸夌紪鍙�)
+            /// </summary>
+            DelCurrentUser = 1,
+            /// <summary>
+            /// 0x20 鍐荤粨鎸囧畾鐢ㄦ埛
+            /// </summary>
+            DisEnable = 2,
+            /// <summary>
+            /// 0x21 瑙e喕鎸囧畾鐢ㄦ埛
+            /// </summary>
+            Enable = 3,
+        }
         #endregion
 
-        #region 杩滅▼鍙戦�佹暟鎹�
+        #region 楠岃瘉闂ㄩ攣瀵嗙爜
+        ///<summary >
+        ///楠岃瘉闂ㄩ攣瀵嗙爜
+        ///<para>inputPassword:杈撳叆鐨勯棬閿佸瘑鐮�</para> 
+        /// </summary>
+        public async System.Threading.Tasks.Task<VerifyPasswordResponseAllData> VerifyPasswordAsync(string inputPassword)
+        {
+            VerifyPasswordResponseAllData result = null;
+            if (Gateway == null)
+            {
+                result = new VerifyPasswordResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
+                return result;
+            }
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                Action<string, string> action = (topic, message) =>
+                {
+                    var gatewayID = topic.Split('/')[0];
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                    if (topic == gatewayID + "/" + "Error_Respon")
+                    {
+                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            result = new VerifyPasswordResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+
+                        else
+                        {
+                            result = new VerifyPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+                    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 VerifyPasswordResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
+                            {
+                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
+                                if (data.Length == 12)
+                                {
+                                    var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
+                                    if (command == "0454")
+                                    {
+                                        var result1 = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
+                                        result = new VerifyPasswordResponseAllData { result = result1 };
+                                        DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0402_{ topic}");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                };
+
+                Gateway.Actions += action;
+                DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
+
+                try
+                {
+                    var getPw = await GetkeyPassword();
+                    var passData = VerifyPasswordData(inputPassword, getPw);
+                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
+                    var data = new JObject { { "PassData", passData } };
+                    jObject.Add("Data", data);
+                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
+                }
+                catch { }
+
+                var dateTime = DateTime.Now;
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime)
+                {
+                    await System.Threading.Tasks.Task.Delay(10);
+                    if (result != null)
+                    {
+                        break;
+                    }
+                }
+                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
+                {
+                    result = new VerifyPasswordResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                Gateway.Actions -= action;
+                DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return result;
+            });
+        }
+        /// <summary>
+        /// 楠岃瘉闂ㄩ攣瀵嗙爜
+        /// </summary>
+        public string VerifyPasswordData(string keyPassword, int password, int fixedPassword = 0x190605)
+        {
+            string data = "";
+            string dataLength = "08";
+            string dataComand1 = "53";
+            string dataComand2 = "04";
+            string dataSerialNum = "01";
+            string addDataLength = "04";
+            string passwordStr = "";
+            try
+            {
+                int keyPasswordInt = System.Convert.ToInt32(keyPassword, 16);
+                var pawStr = System.Convert.ToString((keyPasswordInt ^ password) + fixedPassword, 16);
+                pawStr = pawStr.PadLeft(8, '0');
+                for (int i = 6; i >= 0; i = i - 2)
+                {
+                    passwordStr += pawStr.Substring(i, 2);
+                }
+                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
+                 passwordStr;
+            }
+            catch { };
+            return data;
+        }
+
+        /// <summary>
+        /// 鐢ㄦ埛绠$悊鍙戦�佹暟鎹洖澶�
+        /// </summary>
+        public VerifyPasswordResponseAllData verifyPasswordResponseAllData;
+        [System.Serializable]
+        public class VerifyPasswordResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鐢ㄦ埛绠$悊鏁版嵁鍥炲
+            /// <para>0:鎴愬姛</para>
+            ///<para>1:澶辫触</para>
+            /// </summary>
+            public int result = -1;
+        }
+        #endregion
+
+        #region 杩滅▼寮�閿� 
+        ///<summary >
+        ///杩滅▼寮�閿� 
+        ///<para>inputPassword: 杈撳叆瀵嗙爜/para> 
+        /// </summary>
+        public async System.Threading.Tasks.Task<ResponseAllData> RemoteControlAsync(string inputPassword)
+        {
+            ResponseAllData result = null;
+            if (Gateway == null)
+            {
+                result = new ResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
+                return result;
+            }
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                Action<string, string> action = (topic, message) =>
+                {
+                    var gatewayID = topic.Split('/')[0];
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                    if (topic == gatewayID + "/" + "Error_Respon")
+                    {
+                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            result = new ResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+
+                        else
+                        {
+                            result = new ResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+                    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 ResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
+                            {
+                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
+                                if (data.Length == 16)
+                                {
+                                    var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
+                                    if (command == "0002")
+                                    {
+                                        var tempD = new ResponseData();
+                                        tempD.command = Convert.ToInt32(data[10].ToString() + data[11].ToString() + data[12].ToString() + data[13].ToString(), 16);
+                                        tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
+                                        result = new ResponseAllData { responseData = tempD };
+                                        System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0400_{ topic}");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                };
+
+                Gateway.Actions += action;
+                DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
+
+                try
+                {
+                    var getPw = await GetkeyPassword();
+                    var passData = RemoteData(inputPassword, getPw);
+                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
+                    var data = new JObject { { "PassData", passData } };
+                    jObject.Add("Data", data);
+                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
+                }
+                catch { }
+
+                var dateTime = DateTime.Now;
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime)
+                {
+                    await System.Threading.Tasks.Task.Delay(10);
+                    if (result != null)
+                    {
+                        break;
+                    }
+                }
+                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
+                {
+                    result = new ResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                Gateway.Actions -= action;
+                DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return result;
+            });
+        }
         /// <summary>
         /// 杩滅▼鍙戦�佹暟鎹�
         /// </summary>
-        public string RemoteData(string keyPassword, string password, string fixedPassword = "190605")
+        string RemoteData(string keyPassword, int password, int fixedPassword = 0x190605)
         {
             string data = "";
-            string dataLength = "09";
+            string dataLength = "08";
             string dataComand1 = "62";
             string dataComand2 = "04";
             string dataSerialNum = "01";
@@ -1140,13 +1182,11 @@
             try
             {
                 int keyPasswordInt = System.Convert.ToInt32(keyPassword, 16);
-                int passwordInt = System.Convert.ToInt32(password, 16);
-                var fixedPasswordInt = System.Convert.ToInt32(fixedPassword, 16);
-                var pawStr = System.Convert.ToString((keyPasswordInt ^ passwordInt) + fixedPasswordInt, 16);
+                var pawStr = System.Convert.ToString((keyPasswordInt ^ password) + fixedPassword, 16);
                 pawStr = pawStr.PadLeft(8, '0');
                 for (int i = 6; i >= 0; i = i - 2)
                 {
-                    passwordStr += passwordStr.Substring(i, 2);
+                    passwordStr += pawStr.Substring(i, 2);
                 }
                 data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                  passwordStr;
@@ -1158,13 +1198,112 @@
         #endregion
 
         #region 涓存椂瀵嗙爜鍙戦�佹暟鎹�
+        ///<summary >
+        ///杩滅▼寮�閿� 
+        ///<para>inputPassword: 杈撳叆瀵嗙爜/para> 
+        /// </summary>
+        public async System.Threading.Tasks.Task<TempPasswordResponseAllData> TempPasswordAsync(string inputPassword, System.DateTime startTime, System.DateTime endTime, string fixedPassword = "190605")
+        {
+            TempPasswordResponseAllData result = null;
+            if (Gateway == null)
+            {
+                result = new TempPasswordResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
+                return result;
+            }
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                Action<string, string> action = (topic, message) =>
+                {
+                    var gatewayID = topic.Split('/')[0];
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                    if (topic == gatewayID + "/" + "Error_Respon")
+                    {
+                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            result = new TempPasswordResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+
+                        else
+                        {
+                            result = new TempPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+                    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 = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
+                            {
+                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
+                                if (data.Length == 16)
+                                {
+                                    var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
+                                    if (command == "0002")
+                                    {
+                                        var tempD = new TempPasswordResponseData();
+                                        tempD.command = Convert.ToInt32(data[10].ToString() + data[11].ToString() + data[12].ToString() + data[13].ToString(), 16);
+                                        tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
+                                        result = new TempPasswordResponseAllData { responseData = tempD };
+                                        System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0400_{ topic}");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                };
+
+                Gateway.Actions += action;
+                DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
+
+                try
+                {
+                    var getPw = await GetkeyPassword();
+                    var passData = TempPasswordData(inputPassword, getPw, startTime, endTime);
+                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
+                    var data = new JObject { { "PassData", passData } };
+                    jObject.Add("Data", data);
+                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
+                }
+                catch { }
+
+                var dateTime = DateTime.Now;
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime)
+                {
+                    await System.Threading.Tasks.Task.Delay(10);
+                    if (result != null)
+                    {
+                        break;
+                    }
+                }
+                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
+                {
+                    result = new TempPasswordResponseAllData
+                    { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                Gateway.Actions -= action;
+                DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return result;
+            });
+        }
         /// <summary>
         /// 涓存椂瀵嗙爜鍙戦�佹暟鎹�
         /// </summary>
-        public string TempPasswordData(string keyPassword, string password, System.DateTime startTime, System.DateTime endTime, string fixedPassword = "190605")
+        public string TempPasswordData(string keyPassword, int password, System.DateTime startTime, System.DateTime endTime)
         {
             string data = "";
-            string dataLength = "14";//鍗佽繘鍒舵槸19
+            string dataLength = "10";
             string dataComand1 = "63";
             string dataComand2 = "04";
             string dataSerialNum = "01";
@@ -1175,9 +1314,7 @@
             try
             {
                 int keyPasswordInt = System.Convert.ToInt32(keyPassword, 16);
-                int passwordInt = System.Convert.ToInt32(password, 16);
-                var fixedPasswordInt = System.Convert.ToInt32(fixedPassword, 16);
-                var pawStr = System.Convert.ToString((keyPasswordInt ^ passwordInt) + fixedPasswordInt, 16);
+                var pawStr = System.Convert.ToString((keyPasswordInt ^ password) + 0x190605, 16);
                 pawStr = pawStr.PadLeft(8, '0');
                 for (int i = 6; i >= 0; i = i - 2)
                 {
@@ -1185,6 +1322,7 @@
                 }
                 var startTimeStr = System.Convert.ToString(GetUnixTimeStamp(startTime, false), 16);
                 var endTimeStr = System.Convert.ToString(GetUnixTimeStamp(endTime, false), 16);
+
                 for (int i = 6; i >= 0; i = i - 2)
                 {
                     vaildTimeStr += startTimeStr.Substring(i, 2);
@@ -1197,6 +1335,49 @@
 
             return data;
         }
+
+        /// <summary>
+        /// 涓存椂瀵嗙爜鍥炲鏁版嵁
+        /// </summary>
+        public TempPasswordResponseAllData keyColorDataResponseAllData;
+        [System.Serializable]
+        public class TempPasswordResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 涓存椂瀵嗙爜鍥炲鏁版嵁
+            /// </summary>
+            public TempPasswordResponseData responseData;
+        }
+
+        /// <summary>
+        /// 涓存椂瀵嗙爜鍥炲鏁版嵁
+        /// </summary>
+        [System.Serializable]
+        public class TempPasswordResponseData
+        {
+            /// <summary>
+            ///鍝嶅簲鎿嶄綔鐮侊紙0-ffff锛�
+            /// </summary>
+            public int command = -1;
+            /// <summary>
+            /// 鐘舵�佸��
+            /// <para>0--娉ㄥ唽鎴愬姛</para>
+            /// <para>1--娉ㄥ唽澶辫触</para>
+            /// <para>2--鐢ㄦ埛宸插瓨鍦�(閲嶅瀵嗙爜)</para>
+            /// <para>3-- 鐢ㄦ埛宸叉弧(+宸叉弧绫诲瀷鍥炲)</para>
+            /// <para>4--鏈夋晥鏃堕棿閲嶅彔</para>
+            /// </summary>
+            public int status = -1;
+        }
         #endregion
 
         #region 鑾峰彇闂ㄩ攣瀵嗛挜
@@ -1205,20 +1386,28 @@
         /// <para>鑾峰彇鍔犲瘑鐨勯殢鏈哄瘑閽ワ紝杩斿洖鐨勫瘑閽ョ粡杩囦竴涓畝鍗曠殑鍔犳硶鍔犲瘑鍔犱笂0x190605锛屽洜姝よ幏鍙栫殑瀵嗛挜闇�瑕佸噺涓�0x190605</para>
         /// </summary>
         /// <returns></returns>
-        async System.Threading.Tasks.Task<string> GetkeyPassword()
+        async System.Threading.Tasks.Task<int> GetkeyPassword()
         {
+            string passwordStr = "";
             var result = await GetKeyPassworAsync();
+            //杩斿洖灏忕 
             if (result == null || result.keyPassword == null)
             {
-                return "";
+                return 0;
             }
-            return result.keyPassword;
+
+            for (int i = 6; i >= 0; i = i - 2)
+            {
+                passwordStr += result.keyPassword.Substring(i, 2);
+            }
+            var keyPasswordInt = System.Convert.ToInt32(passwordStr, 16);
+            return keyPasswordInt - 0x190605;
         }
 
         ///<summary >
         ///鑾峰彇闂ㄩ攣瀵嗛挜
         /// </summary>
-        public async System.Threading.Tasks.Task<KeyPasswordInfo> GetKeyPassworAsync(int keyType = 0)
+        async System.Threading.Tasks.Task<KeyPasswordInfo> GetKeyPassworAsync(int keyType = 0)
         {
             KeyPasswordInfo result = null;
             if (Gateway == null)
@@ -1263,7 +1452,7 @@
                             if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
                             {
                                 var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
-                                if (data.Length == 14)
+                                if (data.Length == 20)
                                 {
                                     var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
 
@@ -1272,7 +1461,7 @@
                                         var kType = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
                                         var keyPassword = data[12].ToString() + data[13].ToString() + data[14].ToString() + data[15].ToString() + data[16].ToString() + data[17].ToString() + data[18].ToString() + data[19].ToString();
                                         result = new KeyPasswordInfo { keyType = kType, keyPassword = keyPassword };
-                                        System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0406_{ topic}");
+                                        DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0460_{ topic}");
                                     }
                                 }
                             }
@@ -1281,7 +1470,7 @@
                 };
 
                 Gateway.Actions += action;
-                System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
+                DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
 
                 try
                 {
@@ -1307,7 +1496,7 @@
                     result = new KeyPasswordInfo { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
                 }
                 Gateway.Actions -= action;
-                System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+                DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
 
                 return result;
             });
@@ -1380,9 +1569,10 @@
         ///<summary >
         ///璇诲彇閿佷笂淇℃伅
         /// </summary>
-        public async System.Threading.Tasks.Task<DoorlockUserInfo> GetDoorlockUserInfoAsync(int keyType = 0)
+        public async System.Threading.Tasks.Task<DoorlockUserInfo> GetDoorlockUserInfoAsync()
         {
             DoorlockUserInfo result = null;
+            DoorLockUserDetailData doorLockUserDetailData = new DoorLockUserDetailData { };
             if (Gateway == null)
             {
                 result = new DoorlockUserInfo { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
@@ -1390,52 +1580,47 @@
             }
             return await System.Threading.Tasks.Task.Run(async () =>
             {
+                var dateTime = DateTime.Now;
                 Action<string, string> action = (topic, message) =>
                 {
                     var gatewayID = topic.Split('/')[0];
                     var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
 
-                    if (topic == gatewayID + "/" + "Error_Respon")
-                    {
-                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
-                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
-
-                        if (temp == null)
-                        {
-                            result = new DoorlockUserInfo { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
-                        }
-
-                        else
-                        {
-                            result = new DoorlockUserInfo { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
-                        }
-                    }
-
                     if (topic == gatewayID + "/" + "ZbDataPassthrough")
                     {
-                        var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
-                        gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
+                        var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
 
-                        if (gatewayTemp.clientDataPassthroughResponseData == null)
+                        if (clientDataPassthroughResponseData != null)
                         {
-                            result = new DoorlockUserInfo { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
-                        }
-                        else
-                        {
-                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
+                            if (clientDataPassthroughResponseData.PassData != null)
                             {
-                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
-                                if (data.Length == 14)
+                                var data = clientDataPassthroughResponseData.PassData;
+                                var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
+                                if (command == "0452")
                                 {
-                                    var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
-
-                                    if (command == "0452")
+                                    dateTime = DateTime.Now;
+                                    int returnAllLength = 2 + 2 * Convert.ToInt32(data[0].ToString() + data[1].ToString(), 16);
+                                    int usefulLength = (returnAllLength - 16);
+                                    int tempCount = 0;
+                                    var listData = new List<string>();
+                                    while (tempCount < usefulLength)
                                     {
-                                        //var kType = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
-                                        //var keyPassword = data[12].ToString() + data[13].ToString() + data[14].ToString() + data[15].ToString() + data[16].ToString() + data[17].ToString() + data[18].ToString() + data[19].ToString();
-                                        //result = new DoorlockUserInfo { keyType = kType, keyPassword = keyPassword };
-                                        System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0451_{ topic}");
+                                        listData.Add(data[16 + tempCount].ToString());
+                                        tempCount++;
                                     }
+                                    for (int j = 0; j < listData.Count / 4; j++)
+                                    {
+                                        int curIndex = 4 * j;
+                                        var userInfo = new UserObj();
+                                        userInfo.UserType = Convert.ToInt32(listData[curIndex + 2].ToString(), 16);
+                                        userInfo.UserId = Convert.ToInt32(listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16);
+                                        doorLockUserDetailData.UserObjList.Add(userInfo);
+                                    }
+                                    doorLockUserDetailData.userType = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
+                                    doorLockUserDetailData.totalNum = Convert.ToInt32(data[12].ToString() + data[13].ToString(), 16);
+                                    doorLockUserDetailData.currentNum = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
+                                    result = new DoorlockUserInfo { doorLockUserDetailData = doorLockUserDetailData };
+                                    DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0451_{ topic}");
                                 }
                             }
                         }
@@ -1443,11 +1628,11 @@
                 };
 
                 Gateway.Actions += action;
-                System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
+                DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
 
                 try
                 {
-                    var passData = KeyPasswordData(keyType);
+                    var passData = DoorlockUserData();
                     var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                     var data = new JObject { { "PassData", passData } };
                     jObject.Add("Data", data);
@@ -1455,21 +1640,14 @@
                 }
                 catch { }
 
-                var dateTime = DateTime.Now;
-                while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)//WaitReceiveDataTime)
+                //鎺ユ敹涓�涓寘鏈�澶氱瓑5绉掞紝娌℃湁鏀跺埌灏遍��鍑�
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 5000)
                 {
-                    await System.Threading.Tasks.Task.Delay(10);
-                    if (result != null)
-                    {
-                        break;
-                    }
+                    await System.Threading.Tasks.Task.Delay(100);
                 }
-                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
-                {
-                    result = new DoorlockUserInfo { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
-                }
+
                 Gateway.Actions -= action;
-                System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+                DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
 
                 return result;
             });
@@ -1478,7 +1656,7 @@
         /// <summary>
         /// 璇诲彇閿佷笂淇℃伅
         /// </summary>
-        string DoorlockUserData(int userType)
+        string DoorlockUserData()
         {
             string data = "";
             string dataLength = "05";
@@ -1486,24 +1664,11 @@
             string dataComand2 = "04";
             string dataSerialNum = "01";
             string addDataLength = "01";
-            string keyTypeData = "";
+            string keyTypeData = "01";
 
             try
             {
-                var tempTypeString = new System.Text.StringBuilder();
-                var temp = Convert.ToString(userType, 16);
-                switch (temp.Length)
-                {
-                    case 1:
-                        keyTypeData = "0" + temp;
-                        break;
-                    case 2:
-                        keyTypeData = temp;
-                        break;
-                }
-                tempTypeString.Append(keyTypeData.ToString().ToUpper());
-                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
-            tempTypeString;
+                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + keyTypeData;
             }
             catch { };
 
@@ -1525,8 +1690,15 @@
             /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
             /// </summary>
             public ErrorResponData errorResponData;
+            /// <summary>
+            /// 闂ㄩ攣璁惧杩斿洖淇℃伅
+            /// </summary>
+            public DoorLockUserDetailData doorLockUserDetailData;
         }
 
+        /// <summary>
+        /// 闂ㄩ攣璁惧杩斿洖淇℃伅
+        /// </summary>
         public class DoorLockUserDetailData
         {
             /// <summary>
@@ -1541,32 +1713,26 @@
             /// 鏁版嵁鍖呭簭鍙�
             /// </summary>
             public int currentNum;
-            /// <summary>
-            /// 鐢ㄦ埛鏁版嵁
-            /// </summary>
-            public byte userData;
-        }
-        #endregion
 
-        public enum AccessType
+            /// <summary>
+            /// 铏氭嫙椹卞姩淇℃伅
+            /// </summary>
+            public List<UserObj> UserObjList = new List<UserObj>();
+        }
+
+        public class UserObj
         {
             /// <summary>
-            /// 0x00 鍒犻櫎鍏ㄩ儴鍗曟鐢ㄦ埛
+            /// 闂ㄩ攣鐢ㄦ埛绫诲瀷
             /// </summary>
-            DelAllUsers = 0,
+            public int UserType;
+
             /// <summary>
-            /// 0x01 鍒犻櫎鎸囧畾鐢ㄦ埛(鎸夌紪鍙�)
+            /// 闂ㄩ攣鐢ㄦ埛Id鍙�
             /// </summary>
-            DelCurrentUser = 1,
-            /// <summary>
-            /// 0x20 鍐荤粨鎸囧畾鐢ㄦ埛
-            /// </summary>
-            DisEnable = 2,
-            /// <summary>
-            /// 0x21 瑙e喕鎸囧畾鐢ㄦ埛
-            /// </summary>
-            Enable = 3,
+            public int UserId;
         }
+        #endregion
 
         /// <summary>
         /// 鑾峰彇浠庢牸鏋楀▉娌绘椂闂村埌褰撳墠鏌愪竴鏃跺埢鐨勬�绘绉掓暟
@@ -1587,7 +1753,7 @@
         /// <param name="unixTimeStamp">鏃堕棿鎴�</param>
         /// <param name="accurateToMilliseconds">绮剧‘鍒版绉�,浣涗负绉�</param>
         /// <returns></returns>
-        public static DateTime GetLocalTime(long unixTimeStamp, bool accurateToMilliseconds)
+        public static DateTime GetLocalTime(int unixTimeStamp, bool accurateToMilliseconds)
         {
             DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(1970, 1, 1, 8, 0, 0));//鍖椾含鎵�鍦ㄤ笢鍏尯
             return (accurateToMilliseconds ? startTime.AddMilliseconds(unixTimeStamp) : startTime.AddSeconds(unixTimeStamp)).ToLocalTime();

--
Gitblit v1.8.0