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