From 18b93d511dc764b469d7c4a7e755f7274f89cdb4 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期一, 27 四月 2020 17:55:14 +0800 Subject: [PATCH] 2020-4-27-1 --- ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs | 201 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 193 insertions(+), 8 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs index 4c8f07e..ac89816 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs @@ -11,11 +11,11 @@ { #region 鏈湴鍙橀噺 /// <summary> - /// 鏄惁甯稿紑妯″紡[褰撴暟鎹幏鍙栧け璐ワ紝杩斿洖绌篯 + /// 缃戝叧锛堥棬閿侊級鎵�鍦ㄧ殑鏃堕棿 /// </summary> - public static bool? IsDoorLockNormallyMode = new bool?(); + public static DateTime DoorlockZoneTime = DateTime.Now; /// <summary> - /// 甯稿紑妯″紡鏃堕棿 + /// 甯稿紑妯″紡鎵ц鏃堕棿 /// </summary> public static int NormallyOpenModeInvalidTime = 12; /// <summary> @@ -77,12 +77,13 @@ #endregion /// <summary> - /// 鑾峰彇褰撳墠闂ㄩ攣鐨勫父寮�妯″紡 + /// 鑾峰彇褰撳墠闂ㄩ攣鐨勫父寮�妯″紡 /// </summary> /// <param name="doorLock:褰撳墠闂ㄩ攣"></param> - /// <returns></returns> + /// <returns>null:娌℃湁鍥炲 锛� true:闂ㄩ攣甯稿紑锛沠alse锛氶棬閿佸父鍏�</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); @@ -100,7 +101,6 @@ { IsDoorLockNormallyMode = false; } - return IsDoorLockNormallyMode; } @@ -756,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> @@ -838,5 +879,149 @@ } #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