From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 16 四月 2020 17:10:57 +0800 Subject: [PATCH] 请合并代码 --- ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs | 812 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 692 insertions(+), 120 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs index f61b0ff..9b0f7c9 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using Shared.Common; using ZigBee.Device; namespace Shared.Phone.UserCenter.DoorLock @@ -9,22 +10,135 @@ public class DoorLockCommonInfo : CommonDevice { #region 鏈湴鍙橀噺 + /// <summary> + /// 缃戝叧锛堥棬閿侊級鎵�鍦ㄧ殑鏃堕棿 + /// </summary> + public static DateTime DoorlockZoneTime = DateTime.Now; + /// <summary> + /// 甯稿紑妯″紡鎵ц鏃堕棿 + /// </summary> + public static int NormallyOpenModeInvalidTime = 12; + /// <summary> + /// 鏄惁鏀寔淇敼 + /// </summary> public static bool IsModify = false; + /// <summary> + /// 鏄惁鏄剧ず涓存椂瀵嗙爜 + /// </summary> public static bool InTempPasswordVisiable = false; + /// <summary> + /// 鏈夋晥鏃ユ湡鈥滃勾鈥� + /// </summary> public static int ValidDateYear = 0; + /// <summary> + /// 鏈夋晥鏃ユ湡鈥滄湀鈥� + /// </summary> public static int ValidDateMonth = 0; + /// <summary> + /// 鏈夋晥鏃ユ湡鈥滄棩鈥� + /// </summary> public static int ValidDateDay = 0; + /// <summary> + /// 鏈夋晥鏃ユ湡鈥滄椂鈥� + /// </summary> public static int ValidDateHour = 100; + /// <summary> + /// 鏈夋晥鏃ユ湡鈥滃垎鈥� + /// </summary> public static int ValidDateMinute = 100; + /// <summary> + /// 鏈夋晥鏃ユ湡鈥滅鈥� + /// </summary> public static int ValidDateSecond = 0; + /// <summary> + /// 澶辨晥鏁堟棩鏈熲�滃勾鈥� + /// </summary> public static int InValidDateYear = 0; + /// <summary> + /// 澶辨晥鏁堟棩鏈熲�滄湀鈥� + /// </summary> public static int InValidDateMonth = 0; + /// <summary> + /// 澶辨晥鏁堟棩鏈熲�滄棩鈥� + /// </summary> public static int InValidDateDay = 0; + /// <summary> + /// 澶辨晥鏁堟棩鏈熲�滄椂鈥� + /// </summary> public static int InValidDateHour = 100; + /// <summary> + /// 澶辨晥鏁堟棩鏈熲�滃垎鈥� + /// </summary> public static int InValidDateMinute = 100; + /// <summary> + /// 澶辨晥鏁堟棩鏈熲�滅鈥� + /// </summary> public static int InValidDateSecond = 0; #endregion + /// <summary> + /// 鑾峰彇褰撳墠闂ㄩ攣鐨勫父寮�妯″紡 + /// </summary> + /// <param name="doorLock:褰撳墠闂ㄩ攣"></param> + /// <returns></returns> + public static async System.Threading.Tasks.Task<bool?> GetNormallyOpenMode(ZigBee.Device.DoorLock doorLock) + { + bool? IsDoorLockNormallyMode = null; + var result = await doorLock.ReadNormallyOpenModeFuncAsync(); + //鍏遍�氶敊璇娴� + string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); + + if (result == null || result.errorMessageBase != null || result.errorResponData != null) + { + IsDoorLockNormallyMode = null; + } + + if (result.command == "10") + { + IsDoorLockNormallyMode = true; + } + if (result.command == "11") + { + IsDoorLockNormallyMode = false; + } + return IsDoorLockNormallyMode; + } + + /// <summary> + /// 闂ㄩ攣鏄惁鏀寔甯稿紑[杩欓噷鏆傛椂鍙湁S-One闂ㄩ攣鏀寔锛孒06C涓嶆敮鎸�, 鍚庢湡閫氳繃鑳藉姏鍊兼敮鎸乚 + /// </summary> + /// <param name="doorLock:褰撳墠闂ㄩ攣"></param> + /// <returns></returns> + public static bool CanNormallyOpen(ZigBee.Device.DoorLock doorLock) + { + var listDevice = new List<CommonDevice> { }; + listDevice.Add(doorLock); + var devTemp = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice); + if (devTemp.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone) + { + return true; + } + return false; + } + + /// <summary> + /// 闂ㄩ攣鏄惁鏀寔闊抽噺[杩欓噷鏆傛椂鍙湁S-One闂ㄩ攣鏀寔锛孒06C涓嶆敮鎸侊紝鍚庢湡閫氳繃鑳藉姏鍊兼敮鎸乚 + /// </summary> + /// <param name="doorLock:褰撳墠闂ㄩ攣"></param> + /// <returns></returns> + public static bool CanVolume(ZigBee.Device.DoorLock doorLock) + { + var listDevice = new List<CommonDevice> { }; + listDevice.Add(doorLock); + var devTemp = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice); + if (devTemp.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone) + { + return true; + } + return false; + } + + #region 浠庝簯绔幏鍙栫殑鏂规硶 /// <summary> /// 鑾峰彇褰撳墠璐︽埛闂ㄩ攣鎿嶄綔鏉冮檺锛堟槸鍚﹁鍐荤粨锛� /// </summary> @@ -82,7 +196,7 @@ } /// <summary> - /// 鑾峰彇褰撳墠璐︽埛鍒楄〃 + /// 鑾峰彇褰撳墠璐︽埛鍒楄〃锛堥棬閿佸彧瀵逛富浜哄拰鎷ユ湁绠$悊鍛樻潈闄愬鎴愬憳鐢級 /// </summary> public static async System.Threading.Tasks.Task<List<Shared.Phone.UserCenter.MemberInfoRes>> LocalAccountList() { @@ -90,10 +204,37 @@ { List<Shared.Phone.UserCenter.MemberInfoRes> localAccountList = new List<Shared.Phone.UserCenter.MemberInfoRes> { }; List<Shared.Phone.UserCenter.MemberInfoRes> SubAccounList = new List<Shared.Phone.UserCenter.MemberInfoRes> { }; + //鍙湁涓讳汉鎵嶆湁鏉冮檺鑾峰彇鑷繁鐨勫瓙璐︽埛 if (UserCenterResourse.UserInfo.AuthorityNo == 1) { - SubAccounList = await ZigBee.Device.DoorLock.GetSubAccountByDistributedMark(); + var SubAccounListTemp = await ZigBee.Device.DoorLock.GetSubAccountByDistributedMark(); + var SubAccounListDictionary = new Dictionary<string, Shared.Phone.UserCenter.MemberInfoRes> { }; + + foreach (var member in SubAccounListTemp) + { + //鍒ゆ柇涓�涓处鎴风粦瀹氫簡閭鐨勬儏鍐� + if (SubAccounListDictionary.ContainsKey(member.DistributedMark) == true + || member.Account == UserCenterResourse.UserInfo.Phone + || member.Account == UserCenterResourse.UserInfo.Email) + { + //濡傛灉鏄畠鑷繁鐨勮瘽锛屼笉鏄剧ず,璐︽埛鍜岀粦瀹氱殑閭鍙樉绀哄叾涓箣涓� + continue; + } + //鍘绘帀瀛愯处鎴蜂腑鏅�氭垚鍛橈紝鐣欎笅鎷ユ湁绠$悊鍛樻潈闄愮殑鎴愬憳 + //锛堝洜涓哄垎閰嶈处鎴风粰鏅�氭垚鍛橈紝鏅�氭垚鍛樺湪app涓笉鑳借繘鍏ヨ澶囩鐞嗛偅閲岋紝鎵�浠ユ病鍙戞煡鐪嬩富浜哄垎閰嶅璐︽埛锛� + if (member.AccountType != 1) + { + continue; + } + + SubAccounListDictionary.Add(member.DistributedMark, member); + } + + foreach (var addMemberID in SubAccounListDictionary.Keys) + { + SubAccounList.Add(SubAccounListDictionary[addMemberID]); + } } // 娉ㄦ剰锛歋ubAccountDistributedMark杩欎釜鍊煎緢鏈夌敤,鈥滄坊鍔犻棬閿佲�濆埌浜戠淇℃伅涓紝CloudAccountId濡傛灉鏄瓙璐︽埛锛屽垯鏄疭ubAccountDistributedMark杩欎釜鍊煎緢鏈夌敤锛屽鏋滄槸绠$悊鍛樻垨鑰呬富浜哄垯鏄櫥褰曞埌G @@ -109,100 +250,220 @@ } /// <summary> - /// 鑾峰彇闂ㄩ攣鍖呭惈璁惧淇℃伅鍜岃处鎴蜂俊鎭� + /// 鑾峰彇鎵�鏈夎处鎴峰拰闂ㄩ攣鍖呭惈鐨勪俊鎭� + /// </summary> + public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetDoorLockAllAcountUserlist(ZigBee.Device.DoorLock doorLock) + { + return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () => + { + //1銆佽鍙栭棬閿佷俊鎭� + var getDoorLockInfo = await doorLock.GetDoorlockUserInfoAsync(); + + //鏈湴闂ㄩ攣鍒楄〃澶勭悊 + foreach (var curAccountObj in doorLock.localAllAccountList) + { + if (getDoorLockInfo == null) + { + doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = true; + } + else + { + doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = false; + } + } + // 鐢ㄦ埛淇℃伅澶勭悊 + if (getDoorLockInfo != null && getDoorLockInfo.doorLockUserDetailData != null) + { + doorLock.localDoorLockUserList.Clear(); + var dataList = getDoorLockInfo.doorLockUserDetailData.UserObjList; + foreach (var doorData in dataList) + { + var localDoorLockObj1 = new ZigBee.Device.DoorLock.LocaDoorLockObj() + { + UserID = doorData.UserId, + UnlockType = doorData.UserType + }; + if ((doorLock.localDoorLockUserList.ContainsKey(localDoorLockObj1.UserID)) == false) + { + doorLock.localDoorLockUserList.Add(localDoorLockObj1.UserID, localDoorLockObj1); + } + } + + + //2銆佽鍙栦簯绔棬閿佷俊鎭� + var getDoorLockInfoAllList = new List<ZigBee.Device.DoorLock.CloudDoorLockObj> { }; + var getDoorLockInfoList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllAccountInfolist(doorLock); + if (getDoorLockInfoList != null) + { + if (getDoorLockInfoList.PageData.Count != 0) + { + getDoorLockInfoAllList = getDoorLockInfoList.PageData; + } + } + if (getDoorLockInfoList.TotalPages > 1) + { + for (int j = 1; j < getDoorLockInfoList.TotalPages; j++) + { + var getDoorLockInfoListTemp = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllAccountInfolist(doorLock, j + 1); + if (getDoorLockInfoListTemp != null) + { + if (getDoorLockInfoListTemp.PageData.Count != 0) + { + foreach (var curDoorLockUser in getDoorLockInfoListTemp.PageData) + { + getDoorLockInfoAllList.Add(curDoorLockUser); + } + } + } + } + } + + if (getDoorLockInfoAllList.Count != 0) + { + foreach (var curDoorLockUser in getDoorLockInfoAllList) + { + if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId)) + { + continue; + } + if (doorLock.localDoorLockUserList.ContainsKey(int.Parse(curDoorLockUser.DoorLockLocalUserId))) + { + var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj() { }; + doorLockObj.UserID = int.Parse(curDoorLockUser.DoorLockLocalUserId); + doorLockObj.UnlockType = curDoorLockUser.OpenLockMode; + doorLockObj.PrimaryId = curDoorLockUser.Id; + doorLockObj.EntryTime = curDoorLockUser.EntryTime; + doorLockObj.UserName = curDoorLockUser.UserIdRemarks; + doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId; + doorLock.localDoorLockUserList[int.Parse(curDoorLockUser.DoorLockLocalUserId)] = doorLockObj; + } + else + { + if (curDoorLockUser.DoorLockLocalUserId != null) + { + //闂ㄩ攣涓病鏈夛紝浜戠鏈夌敤鎴稩D锛屽悗鍙板垹闄や簯绔繖浜汭D + var deleteDoorLockData = new ZigBee.Device.DoorLock.DeleteDoorLockData(); + if (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + deleteDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); + deleteDoorLockData.IsOtherAccountCtrl = true; + } + if (doorLock.DeviceAddr != null) + { + deleteDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; + } + deleteDoorLockData.DoorLockLocalUserId = curDoorLockUser.DoorLockLocalUserId; + deleteDoorLockData.PrimaryId = curDoorLockUser.Id; + deleteDoorLockData.DelDoorLockDelType = 2; + var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/DelDoorLock", deleteDoorLockData); + } + } + } + doorLock.ReSave(); + } + } + return doorLock.localDoorLockUserList; + })); + } + + /// <summary> + /// 鑾峰彇褰撳墠璐︽埛涓棬閿佷俊鎭� /// </summary> public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetLocaDoorLocklist(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes curAccountObj) { return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () => - { - // 璇诲彇璁惧涓殑淇℃伅 - doorLock.localDoorLockUserList.Clear(); - var getDoorLockInfo = await doorLock.GetDoorlockUserInfoAsync(); - if (getDoorLockInfo == null) - { - doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = true; + { + //璇诲彇璁惧涓殑淇℃伅 + doorLock.localDoorLockUserList.Clear(); + var getDoorLockInfo = await doorLock.GetDoorlockUserInfoAsync(); + if (getDoorLockInfo == null) + { + doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = true; + } + else + { + doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = false; + if (getDoorLockInfo != null && getDoorLockInfo.doorLockUserDetailData != null) + { + var dataList = getDoorLockInfo.doorLockUserDetailData.UserObjList; + foreach (var doorData in dataList) + { + var localDoorLockObj1 = new ZigBee.Device.DoorLock.LocaDoorLockObj() + { + UserID = doorData.UserId, + UnlockType = doorData.UserType + }; + if ((doorLock.localDoorLockUserList.ContainsKey(localDoorLockObj1.UserID)) == false) + { + doorLock.localDoorLockUserList.Add(localDoorLockObj1.UserID, localDoorLockObj1); + } + } + } - } - else - { - doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = false; - if (getDoorLockInfo != null && getDoorLockInfo.doorLockUserDetailData != null) - { - var dataList = getDoorLockInfo.doorLockUserDetailData.UserObjList; - foreach (var doorData in dataList) - { - var localDoorLockObj1 = new ZigBee.Device.DoorLock.LocaDoorLockObj() - { - UserID = doorData.UserId, - UnlockType = doorData.UserType - }; - if ((doorLock.localDoorLockUserList.ContainsKey(localDoorLockObj1.UserID)) == false) - { - doorLock.localDoorLockUserList.Add(localDoorLockObj1.UserID, localDoorLockObj1); - } - } - } - - // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 - var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { }; - var getDoorLockInfoList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllInfolist(doorLock, curAccountObj.SubAccountDistributedMark); - if (getDoorLockInfoList != null) - { - foreach (var curDoorLockUser in getDoorLockInfoList.PageData) - { - if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "") - { - continue; - } - if (doorLock.localDoorLockUserList.ContainsKey(int.Parse(curDoorLockUser.DoorLockLocalUserId))) - { - var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj() { }; - doorLockObj.UserID = int.Parse(curDoorLockUser.DoorLockLocalUserId); - doorLockObj.UnlockType = curDoorLockUser.OpenLockMode; - doorLockObj.PrimaryId = curDoorLockUser.Id; - doorLockObj.EntryTime = curDoorLockUser.EntryTime; - doorLockObj.UserName = curDoorLockUser.UserIdRemarks; - doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId; - doorLock.localDoorLockUserList[int.Parse(curDoorLockUser.DoorLockLocalUserId)] = doorLockObj; - } - else - { - if (curDoorLockUser.DoorLockLocalUserId != null) - { - //闂ㄩ攣涓病鏈夛紝浜戠鏈夌敤鎴稩D锛屽悗鍙板垹闄や簯绔繖浜汭D - var deleteDoorLockData = new ZigBee.Device.DoorLock.DeleteDoorLockData(); - if (UserCenterResourse.UserInfo.AuthorityNo != 1) - { - deleteDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); - deleteDoorLockData.IsOtherAccountCtrl = true; - } - if (doorLock.DeviceAddr != null) - { - deleteDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; - } - deleteDoorLockData.DoorLockLocalUserId = curDoorLockUser.DoorLockLocalUserId; - deleteDoorLockData.PrimaryId = curDoorLockUser.Id; - deleteDoorLockData.DelDoorLockDelType = 2; - var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/DelDoorLock", deleteDoorLockData); - int i = 0; - } - } - } - doorLock.ReSave(); - } - - } - return doorLock.localDoorLockUserList; - })); + // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 + var getDoorLockInfoAllList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllInfolist(doorLock, curAccountObj.SubAccountDistributedMark); + if (getDoorLockInfoAllList.Count != 0) + { + foreach (var getDoorLockInfoList in getDoorLockInfoAllList) + { + if (getDoorLockInfoList != null) + { + foreach (var curDoorLockUser in getDoorLockInfoList.PageData) + { + if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId)) + { + continue; + } + if (doorLock.localDoorLockUserList.ContainsKey(int.Parse(curDoorLockUser.DoorLockLocalUserId))) + { + var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj() { }; + doorLockObj.UserID = int.Parse(curDoorLockUser.DoorLockLocalUserId); + doorLockObj.UnlockType = curDoorLockUser.OpenLockMode; + doorLockObj.PrimaryId = curDoorLockUser.Id; + doorLockObj.EntryTime = curDoorLockUser.EntryTime; + doorLockObj.UserName = curDoorLockUser.UserIdRemarks; + doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId; + doorLock.localDoorLockUserList[int.Parse(curDoorLockUser.DoorLockLocalUserId)] = doorLockObj; + } + else + { + if (curDoorLockUser.DoorLockLocalUserId != null) + { + //闂ㄩ攣涓病鏈夛紝浜戠鏈夌敤鎴稩D锛屽悗鍙板垹闄や簯绔繖浜汭D + var deleteDoorLockData = new ZigBee.Device.DoorLock.DeleteDoorLockData(); + if (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + deleteDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); + deleteDoorLockData.IsOtherAccountCtrl = true; + } + if (doorLock.DeviceAddr != null) + { + deleteDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; + } + deleteDoorLockData.DoorLockLocalUserId = curDoorLockUser.DoorLockLocalUserId; + deleteDoorLockData.PrimaryId = curDoorLockUser.Id; + deleteDoorLockData.DelDoorLockDelType = 2; + var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/DelDoorLock", deleteDoorLockData); + } + } + } + doorLock.ReSave(); + } + } + } + } + return doorLock.localDoorLockUserList; + })); } /// <summary> - /// 鑾峰彇浜戠瀛樺偍鐨勯棬閿佷俊鎭� + /// 鑾峰彇褰撳墠璐︽埛涓簯绔瓨鍌ㄧ殑闂ㄩ攣淇℃伅 /// </summary> public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetCloudLocalDoorLocklist(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark) { return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () => { + var getDoorLockInfoAllList = new List<ZigBee.Device.DoorLock.CloudDoorLockObj> { }; // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { }; @@ -219,12 +480,39 @@ } var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); - if (getDoorLockInfoList != null) { - foreach (var curDoorLockUser in getDoorLockInfoList.PageData) + if (getDoorLockInfoList.PageData.Count != 0) { - if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "") + getDoorLockInfoAllList = getDoorLockInfoList.PageData; + } + } + if (getDoorLockInfoList.TotalPages > 1) + { + for (int j = 1; j < getDoorLockInfoList.TotalPages; j++) + { + var pageSetting = new ZigBee.Device.DoorLock.PageSetting() { }; + pageSetting.Page = j + 1; + localDoorLockObj.pageSetting = pageSetting; + var getDoorLockInfoListTemp = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); + if (getDoorLockInfoListTemp != null) + { + if (getDoorLockInfoListTemp.PageData.Count != 0) + { + foreach (var curDoorLockUser in getDoorLockInfoListTemp.PageData) + { + getDoorLockInfoAllList.Add(curDoorLockUser); + } + } + } + } + } + + if (getDoorLockInfoAllList.Count != 0) + { + foreach (var curDoorLockUser in getDoorLockInfoAllList) + { + if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId)) { continue; } @@ -248,7 +536,7 @@ } /// <summary> - /// 鑾峰彇浜戠瀛樺偍鐨勫綋鍓嶈处鎴风殑闂ㄩ攣淇℃伅 + /// 鑾峰彇浜戠瀛樺偍鐨勫綋鍓嶈处鎴风殑闂ㄩ攣淇� /// </summary> public static async System.Threading.Tasks.Task<List<ZigBee.Device.DoorLock.CloudDoorLockObj>> GetAccountDoorLockUserList(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark) { @@ -256,19 +544,22 @@ return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<List<ZigBee.Device.DoorLock.CloudDoorLockObj>>>)(async () => { // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 - var getDoorLockInfoList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllInfolist(doorLock, subAccountDistributedMark); - if (getDoorLockInfoList != null) + var getAllDoorLockInfoList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllInfolist(doorLock, subAccountDistributedMark); + if (getAllDoorLockInfoList != null) { - //鑾峰彇浜戠瀛樺偍鐨勯棬閿佹垚鍛樹俊鎭� - foreach (var curDoorLockUser in getDoorLockInfoList.PageData) + foreach (var getDoorLockInfoList in getAllDoorLockInfoList) { - if (curDoorLockUser.CloudAccountId == "" || curDoorLockUser.CloudAccountId != subAccountDistributedMark) + //鑾峰彇浜戠瀛樺偍鐨勯棬閿佹垚鍛樹俊鎭� + foreach (var curDoorLockUser in getDoorLockInfoList.PageData) { - continue; - } - else - { - curAccountDoorLockUserList.Add(curDoorLockUser); + if (string.IsNullOrEmpty(curDoorLockUser.CloudAccountId) || curDoorLockUser.CloudAccountId != subAccountDistributedMark) + { + continue; + } + else + { + curAccountDoorLockUserList.Add(curDoorLockUser); + } } } } @@ -279,34 +570,92 @@ /// <summary> /// 鑾峰彇褰撳墠璐︽埛闂ㄩ攣鐨勬墍鏈変俊鎭� /// </summary> - public static async System.Threading.Tasks.Task<ZigBee.Device.DoorLock.GetDoorLockDataRes> GetDoorLockAllInfolist(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark) + public static async System.Threading.Tasks.Task<List<ZigBee.Device.DoorLock.GetDoorLockDataRes>> GetDoorLockAllInfolist(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark) + { + return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<List<ZigBee.Device.DoorLock.GetDoorLockDataRes>>>)(async () => + { + var getDoorLockInfoAllList = new List<ZigBee.Device.DoorLock.GetDoorLockDataRes> { }; + + // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 + var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { }; + + if (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); + localDoorLockObj.IsOtherAccountCtrl = true; + } + + localDoorLockObj.CloudAccountId = subAccountDistributedMark; + if (doorLock.DeviceAddr != null) + { + localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; + } + + var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); + + if (getDoorLockInfoList == null) + { + getDoorLockInfoAllList = null; + } + else + { + if (getDoorLockInfoList != null) + { + if (getDoorLockInfoList.PageData.Count != 0) + { + getDoorLockInfoAllList.Add(getDoorLockInfoList); + } + } + if (getDoorLockInfoList.TotalPages > 1) + { + for (int j = 1; j < getDoorLockInfoList.TotalPages; j++) + { + var pageSetting = new ZigBee.Device.DoorLock.PageSetting() { }; + pageSetting.Page = j + 1; + localDoorLockObj.pageSetting = pageSetting; + var getDoorLockInfoListTemp = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); + if (getDoorLockInfoListTemp != null) + { + getDoorLockInfoAllList.Add(getDoorLockInfoListTemp); + } + } + } + } + return getDoorLockInfoAllList; + })); + } + + /// <summary> + /// 鑾峰彇褰撳墠璐︽埛闂ㄩ攣鐨勬墍鏈変俊鎭� + /// </summary> + public static async System.Threading.Tasks.Task<ZigBee.Device.DoorLock.GetDoorLockDataRes> GetDoorLockAllAccountInfolist(ZigBee.Device.DoorLock doorLock, int curPage = 1) { return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<ZigBee.Device.DoorLock.GetDoorLockDataRes>>)(async () => - { - // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 - var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { }; + { + // 璇诲彇浜戠闂ㄩ攣璁惧涓殑淇℃伅 + var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { }; - if (UserCenterResourse.UserInfo.AuthorityNo != 1) - { - localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); - localDoorLockObj.IsOtherAccountCtrl = true; - } - - localDoorLockObj.CloudAccountId = subAccountDistributedMark; - if (doorLock.DeviceAddr != null) - { - localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; - } - - var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); - return getDoorLockInfoList; - })); + if (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); + localDoorLockObj.IsOtherAccountCtrl = true; + } + if (doorLock.DeviceAddr != null) + { + localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; + } + var pageSetting = new ZigBee.Device.DoorLock.PageSetting() { }; + pageSetting.Page = curPage; + localDoorLockObj.pageSetting = pageSetting; + var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); + return getDoorLockInfoList; + })); } /// <summary> /// 鑾峰彇浜戠瀛樺偍鐨勯棬閿佹垚鍛樹俊鎭� /// </summary> - public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetLocaDoorLockAccountlist(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes curAccountObj) + public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetLocaDoorLockAccountlist(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes curAccountObj, int curPage) { return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () => { @@ -321,6 +670,13 @@ { localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } + if (doorLock.DeviceAddr != null) + { + localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; + } + var pageSetting = new ZigBee.Device.DoorLock.PageSetting() { }; + pageSetting.Page = curPage; + localDoorLockObj.pageSetting = pageSetting; var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj); if (getDoorLockInfoList != null) { @@ -362,7 +718,7 @@ { var curDoorLockUser = doorLock.localDoorLockAccountList[curUserId]; - if (curDoorLockUser.ConnectedAccount == "" || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark) + if (string.IsNullOrEmpty(curDoorLockUser.ConnectedAccount) || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark) { continue; } @@ -400,18 +756,59 @@ /// <summary> /// 灏嗙郴缁熸椂闂磋浆鎹㈡垚UNIX鏃堕棿鎴�(绮剧‘鍒扮) - /// </summary> /// <param name="dateTime">鍖椾含鏃堕棿</param> /// <param name="accurateToMilliseconds">绮剧‘鍒版绉掞紝鍚﹀埌绉�</param> + /// </summary> + /// <param name="dateTime"></param> /// <returns>杩斿洖涓�涓暱鏁存暟鏃堕棿鎴�</returns> public static string GetUnixTimeStamp(DateTime dateTime) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); - //DateTime dtNow = DateTime.Parse(DateTime.Now.ToString()); TimeSpan toNow = dateTime.Subtract(dtStart); string timeStamp = toNow.Ticks.ToString(); timeStamp = timeStamp.Substring(0, timeStamp.Length - 7); return timeStamp; + } + + /// <summary> + /// 鑾峰彇鏃跺尯鐨勬椂闂� + /// </summary> + /// <returns></returns> + public static DateTime GetDoorLockZoneTime() + { + //閫氳繃缁忓害鑾峰彇鏃跺尯 + var gwZone = int.Parse(CaculateTimeZone(Common.Config.Instance.Home.Longitude)); + //灏嗘湰鍦版椂闂磋浆鎹㈡垚涓栫晫鏃� + var utc = DateTime.Now.AddHours(-gwZone); + //涓栫晫鏃惰浆鎹㈡垚鏃堕棿鎴� + var utcUnix = GetUnixTimeStamp(utc); + //鏃跺尯鐨勬椂闂存埑 + var zoneUnix = int.Parse(utcUnix) + gwZone * 3600; + var zoneDateTime = GetLocalTime(zoneUnix); + DoorlockZoneTime = zoneDateTime; + return zoneDateTime; + } + + /// <summary> + /// 鑾峰彇鏃跺尯 + /// </summary> + /// <param name="currentLon">currentLon:"+"涓轰笢鍖猴紝鈥�-鈥濅负瑗垮尯</param> + /// <returns></returns> + public static String CaculateTimeZone(double currentLon) + { + int timeZone; + int shangValue = (int)(currentLon / 15); + double yushuValue = Math.Abs(currentLon % 15); + if (yushuValue <= 7.5) + { + timeZone = shangValue; + } + else + { + timeZone = shangValue + (currentLon > 0 ? 1 : -1); + } + return timeZone >= 0 ? "+" + Math.Abs(timeZone) : "-" + Math.Abs(timeZone); + } /// <summary> @@ -451,5 +848,180 @@ /// </summary> public string PrimaryId = ""; } + + #endregion + + #region 涓�鑸柟娉� + /// <summary> + /// 鏄剧ず閿欒淇℃伅绐楀彛 + /// </summary> + /// <param name="msg"></param> + private void ShowErrorMsg(string msg) + { + Application.RunOnMainThread(() => + { + var contr = new ShowMsgControl(ShowMsgType.Error, msg); + contr.Show(); + }); + } + + /// <summary> + /// 鏄剧ずTip淇℃伅绐楀彛 + /// </summary> + /// <param name="msg"></param> + private void ShowTipMsg(string msg) + { + Application.RunOnMainThread(() => + { + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + }); + } + + #endregion + + public enum DoorLockMessType + { + /// <summary> + /// app鎿嶄綔 + /// </summary> + AppOperate = 0, + /// <summary> + /// 璁惧涓婃姤 + /// </summary> + DeviceReport = 1, + /// <summary> + /// 鏈嶅姟鍣ㄦ帹閫� + /// </summary> + ServicePush = 2, + } + + /// <summary> + /// 甯稿紑妯″紡澶辨晥澶勭悊 + /// </summary> + public static async void NomallyOpenModeInvalidDialog(ZigBee.Device.DoorLock doorLock, DoorLockMessType doorLockMessType, Action action) + { + if (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + return; + } + string msg = Language.StringByID(R.MyInternationalizationString.NomallyModeIsCanceled).Replace("{0}", "\r\n"); + var confirm = Language.StringByID(R.MyInternationalizationString.SureCancel); + var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.NomallyOpenMode, msg, confirm); + var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(); + + if (resTemp == 1) + { + //鏈夐�昏緫璁剧疆鐨勫脊绐� + alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm); + } + alert.Show(); + alert.MsgControlClickEvent += async () => + { + if (doorLockMessType == DoorLockMessType.DeviceReport || doorLockMessType == DoorLockMessType.ServicePush) + { + //鍙栨秷甯稿紑 + NormallyOpenModeValue(doorLock, false); + } + else + { + //淇濇寔甯稿紑 + NormallyOpenModeValue(doorLock, true); + } + action?.Invoke(); + action = null; + }; + alert.CancelClickEvent += async () => + { + if (doorLockMessType == DoorLockMessType.DeviceReport || doorLockMessType == DoorLockMessType.ServicePush) + { + var result = await doorLock.SetNormallyOpenModeFuncAsync(true); + if (result == null || result.defaultControlResponseData == null) + { + string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime); + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = msg0, Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); + }); + NormallyOpenModeValue(doorLock, false); + return; + } + if (result.defaultControlResponseData.status != 0) + { + string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed); + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = msg1, Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); + }); + NormallyOpenModeValue(doorLock, false); + return; + } + else + { + NormallyOpenModeValue(doorLock, true); + } + } + else + { + NormallyOpenModeValue(doorLock, true); + } + action?.Invoke(); + action = null; + }; + alert.ConfirmClickEvent += async () => + { + if (doorLockMessType == DoorLockMessType.DeviceReport || doorLockMessType == DoorLockMessType.ServicePush) + { + NormallyOpenModeValue(doorLock, false); + } + else + { + var result = await doorLock.SetNormallyOpenModeFuncAsync(false); + if (result == null || result.defaultControlResponseData == null) + { + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); + }); + return; + } + if (result.defaultControlResponseData.status != 0) + { + string msg1 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeFailed); + Application.RunOnMainThread(() => { }); + + new Tip() { MaxWidth = 150, Text = msg1, Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); + return; + } + else + { + NormallyOpenModeValue(doorLock, false); + string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess); + Application.RunOnMainThread(() => + { + new Tip() { MaxWidth = 150, Text = msg2, Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); + }); + } + } + action?.Invoke(); + action = null; + }; + } + + /// <summary> + /// 闂ㄩ攣甯稿紑妯″紡鍊� + /// </summary> + public static void NormallyOpenModeValue(ZigBee.Device.DoorLock doorLock, bool value) + { + string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; + if (doorLock.IsDoorLockNormallyMode.ContainsKey(key)) + { + doorLock.IsDoorLockNormallyMode[key] = value; + } + else + { + doorLock.IsDoorLockNormallyMode.Add(key, value); + } + } } } -- Gitblit v1.8.0