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/TimeSettignPage.cs |  279 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 216 insertions(+), 63 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
index 8e98169..5c95989 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
@@ -27,7 +27,7 @@
                             var dataReport = tempDevice.DeviceStatusReport.AttriBute[0];
                             if (tempDevice.DeviceStatusReport.CluterID == 10 && dataReport.AttributeId == 0)
                             {
-                                CurentDoorLockTime = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetLocalTime(dataReport.AttriButeData);
+                                CurentDoorLockTime = DoorLockCommonInfo.GetLocalTime(dataReport.AttriButeData);
                                 Application.RunOnMainThread(() =>
                                 {
                                     waitGetDoorLockTime = DateTime.MaxValue;
@@ -60,6 +60,8 @@
             this.doorLock = doorLock;
             setTimeType = timeType;
             BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
+            //璇婚棬閿佹椂鍖烘椂闂�
+            DoorLockCommonInfo.GetDoorLockZoneTime();
             ZigBee.Device.ZbGateway.StatusList.Add(this);
         }
         #endregion
@@ -180,7 +182,7 @@
             };
             this.midFrameLayout.AddChidren(midTopFrameLayout);
 
-            var dtNow = DateTime.Now;
+            var dtNow = DoorLockCommonInfo.DoorlockZoneTime;// DateTime.Now;
             for (int i = 0; i < 2; i++)
             {
                 #region MidTopFrameLayout UI
@@ -370,6 +372,7 @@
         /// <summary>
         /// 娣诲姞銆愰棬閿佹椂闂淬�戣锛堥棬閿佷笓鐢級
         /// </summary>
+        /// <param name="zoneFrameLayout"></param>
         private void AddDoorLocksTimeRow(FrameLayout zoneFrameLayout)
         {
             //闂ㄩ攣鏃堕棿
@@ -405,11 +408,17 @@
                 TextColor = Shared.Common.ZigbeeColor.Current.XMGray4,
                 TextSize = 14,
             };
+
             rowLayout.AddChidren(textZone);
             textZone.Text = zoneData();
             textZone.MouseDownEventHandler += (sender, e) =>
             {
-                GetSpecificZoneNowDate();
+                //1銆佸叆缃戝悗鍏堣幏鍙栭棬閿佸湪缃戝叧涓殑鏃跺尯鏃堕棿
+                var curDateTime = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockZoneTime();
+                //2銆佸皢鏃堕棿璁剧疆鍒扮綉鍏充腑
+                var dateTime = new DateTime(curDateTime.Year, curDateTime.Month, curDateTime.Day, curDateTime.Hour, curDateTime.Minute, curDateTime.Second);
+                var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(dateTime);
+                doorLock.RectifyDoorLockTimeAsync(int.Parse(setTimestamp));
             };
 
             var btnLine = new FrameLayout()
@@ -430,24 +439,93 @@
         private string zoneData()
         {
             string zoneText = "";
-            var gwZone = caculateTimeZone(Common.Config.Instance.Home.Longitude);
+            int num = 0;
+            var gwZone = DoorLockCommonInfo.CaculateTimeZone(Common.Config.Instance.Home.Longitude);
+            if (int.Parse(gwZone) != 0)
+            {
+                num = int.Parse(gwZone.Substring(1));
+            }
             if (gwZone.Contains('+'))
             {
-                zoneText = Language.StringByID(R.MyInternationalizationString.East);
+                if (num == 0)
+                {
+                    zoneText = Language.StringByID(R.MyInternationalizationString.CurZoneText0);
+                }
+                else
+                {
+                    zoneText = EastZoneList(num - 1);
+                }
+            }
+            else if (gwZone.Contains('-'))
+            {
+                zoneText = WestZoneList(num - 1);
             }
             else
             {
-                zoneText = Language.StringByID(R.MyInternationalizationString.West);
+                zoneText = Language.StringByID(R.MyInternationalizationString.CurZoneText0);
             }
-            var num = ToNum(int.Parse(gwZone));
-            return zoneText += num + Language.StringByID(R.MyInternationalizationString.CurZoneText);
+            return zoneText;
+        }
+
+        /// <summary>
+        /// 杞崲涓滃尯
+        /// </summary>
+        /// <param name="x"></param>
+        /// <returns></returns>
+        private string EastZoneList(int x)
+        {
+            var numString = new string[]
+            {
+                Language.StringByID(R.MyInternationalizationString.CurZoneText1),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText2),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText3),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText4),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText5),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText6),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText7),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText8),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText9),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText10),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText11),
+                Language.StringByID(R.MyInternationalizationString.CurZoneText12)
+            };
+            var strChnNamesList = new List<string>(numString);
+            return strChnNamesList[x];
+        }
+
+        /// <summary>
+        /// 杞崲瑗垮尯
+        /// </summary>
+        /// <param name="x"></param>
+        /// <returns></returns>
+        private string WestZoneList(int x)
+        {
+            var numString = new string[]
+            {
+                Language.StringByID(R.MyInternationalizationString.WestZoneText1),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText2),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText3),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText4),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText5),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText6),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText7),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText8),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText9),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText10),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText11),
+                Language.StringByID(R.MyInternationalizationString.WestZoneText12)
+            };
+            var strChnNamesList = new List<string>(numString);
+            return strChnNamesList[x];
         }
 
         /// <summary>
         /// 鑾峰彇鏃跺尯
         /// <para>currentLon:"+"涓轰笢鍖猴紝鈥�-鈥濅负瑗垮尯</para>
         /// </summary>
-        public static String caculateTimeZone(double currentLon)
+        /// <param name="currentLon"></param>
+        /// <returns></returns>
+        public static String CaculateTimeZone(double currentLon)
         {
             int timeZone;
             int shangValue = (int)(currentLon / 15);
@@ -464,58 +542,17 @@
         }
 
         /// <summary>
-        /// 杞崲鏁板瓧
+        /// 鑾峰彇鎵�鍦ㄦ椂鍖虹殑鏃堕棿 
         /// </summary>
-        private string ToNum(int x)
+        /// <param name="unix"></param>
+        /// <returns></returns>
+        public static int GetLocalTime(int unix)
         {
-            var numString = new string[] { "闆�", "涓�", "浜�", "涓�", "鍥�", "浜�", "鍏�", "涓�", "鍏�", "涔�", "鍗�", "鍗佷竴", "鍗佷簩" };
-            var strChnNamesList = new List<string>(numString);
-            return strChnNamesList[x];
+            var gwZone = CaculateTimeZone(Common.Config.Instance.Home.Longitude);
+            var data = unix + 8 * 3600;
+
+            return data;
         }
-
-        //濡備綍鏄剧ず鏃跺尯鎵�鍦ㄧ殑鏃堕棿
-        public DateTime GetSpecificZoneNowDate(string zoneName = "")
-        {
-            DateTime curZoneDateTime;
-
-            //聽鍒椾妇鎵�鏈夋敮鎸佺殑鏃跺尯鍒楄〃
-            System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> lst = TimeZoneInfo.GetSystemTimeZones();
-            foreach (TimeZoneInfo tzi in lst)
-            {
-                var aa = tzi;
-                var aa1 = tzi.Id;
-            }
-            GetSpecificZoneNowDate1();
-            zoneName = "Central聽America聽Standard聽Time";//缇庡浗
-            //灏嗘湰鍦版椂闂磋浆鎹负缇庡浗鏍囧噯涓儴鏃堕棿
-            DateTime dt = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, TimeZoneInfo.Local);
-            curZoneDateTime = TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById(zoneName));
-
-            zoneName = "China Standard Time";//涓浗
-            //棣栧厛灏嗘湇鍔″櫒鐨勬椂闂磋浆鍖栦负utc鏃堕棿锛� 
-            var utcdate = DateTime.Now.ToUniversalTime();
-            //鐒跺悗杞崲鎴愭寚瀹氭椂鍖虹殑鏃ユ湡
-            TimeZoneInfo beiJingZone = TimeZoneInfo.FindSystemTimeZoneById(zoneName);
-            curZoneDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcdate, beiJingZone);
-
-            return curZoneDateTime;
-        }
-
-        public void GetSpecificZoneNowDate1()
-        {
-            // Get time in local time zone 
-            DateTime thisTime = DateTime.Now;
-            Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
-                              TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
-            Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
-            // Get Tokyo Standard Time zone
-            TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
-            DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
-            Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
-                              tst.DaylightName : tst.StandardName, tstTime);
-            Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
-        }
-
 
         #endregion
 
@@ -559,7 +596,7 @@
                 try
                 {
                     var curDateTime = new DateTime(curYear, curMonth, curDay, curHour, curMin, curSec);
-                    var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(curDateTime);
+                    var setTimestamp = DoorLockCommonInfo.GetUnixTimeStamp(curDateTime);
                     Application.RunOnMainThread(() =>
                     {
                         CommonPage.Loading.Start("");
@@ -697,12 +734,43 @@
                     {
                         if (setTimeType == "ValidTime")
                         {
+                            string nowValue1 = DateTime.Now.ToString("yyyyMMdd");
+                            string nowValue2 = dtNow.Year.ToString() + curMonth.ToString().PadLeft(2, '0') + curDay.ToString().PadLeft(2, '0');
+                            if (nowValue1.CompareTo(nowValue2) == 1)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoLessThanCurrentTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+                            //妫�鏌ユ椂闂�
+                            var flage = this.CheckValidTime(dtNow.Year, curMonth, curDay,
+                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
+                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
+                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoMoreThanInValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
                             DoorLockCommonInfo.ValidDateYear = dtNow.Year;
                             DoorLockCommonInfo.ValidDateMonth = curMonth;
                             DoorLockCommonInfo.ValidDateDay = curDay;
                         }
                         else
-                        {
+                        {
+                            //妫�鏌ユ椂闂�
+                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
+                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
+                                dtNow.Year, curMonth, curDay,
+                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.InvalidTimeNoLessThanValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+
                             DoorLockCommonInfo.InValidDateYear = dtNow.Year;
                             DoorLockCommonInfo.InValidDateMonth = curMonth;
                             DoorLockCommonInfo.InValidDateDay = curDay;
@@ -778,7 +846,39 @@
                     }
                     else
                     {
-                        curYear = y + 2009;
+                        switch (y)
+                        {
+                            case 0:
+                                curYear = dtNow.Year - 9;
+                                break;
+                            case 1:
+                                curYear = dtNow.Year - 8;
+                                break;
+                            case 2:
+                                curYear = dtNow.Year - 7;
+                                break;
+                            case 3:
+                                curYear = dtNow.Year - 6;
+                                break;
+                            case 4:
+                                curYear = dtNow.Year - 5;
+                                break;
+                            case 5:
+                                curYear = dtNow.Year - 4;
+                                break;
+                            case 6:
+                                curYear = dtNow.Year - 3;
+                                break;
+                            case 7:
+                                curYear = dtNow.Year - 2;
+                                break;
+                            case 8:
+                                curYear = dtNow.Year - 1;
+                                break;
+                            default:
+                                curYear = dtNow.Year;
+                                break;
+                        }
                         curMonth = m + 1;
                         curDay = d + 1;
                     }
@@ -875,13 +975,36 @@
                     btnOk.MouseUpEventHandler += (sender1, e1) =>
                     {
                         if (setTimeType == "ValidTime")
-                        {
+                        {
+                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
+                                curHour, curMin, curSec,
+                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
+                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoMoreThanInValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+
                             DoorLockCommonInfo.ValidDateHour = curHour;
                             DoorLockCommonInfo.ValidDateMinute = curMin;
                             DoorLockCommonInfo.ValidDateSecond = curSec;
                         }
                         else
-                        {
+                        {
+                            //妫�鏌ユ椂闂�
+                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
+                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
+                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
+                                curHour, curMin, curSec);
+                            if (flage == false)
+                            {
+                                var mess = Language.StringByID(R.MyInternationalizationString.InvalidTimeNoLessThanValidTime);
+                                this.ShowMassage(ShowMsgType.Error, mess);
+                                return;
+                            }
+
                             DoorLockCommonInfo.InValidDateHour = curHour;
                             DoorLockCommonInfo.InValidDateMinute = curMin;
                             DoorLockCommonInfo.InValidDateSecond = curSec;
@@ -896,6 +1019,36 @@
                 }
             }
         }
+
+        /// <summary>
+        /// 妫�鏌ユ椂闂�
+        /// </summary>
+        /// <returns></returns>
+        private bool CheckValidTime(int validYear, int validMoth, int validDay, int validHour, int validMinute, int validSecond
+            , int inValidYear, int inValidMoth, int inValidDay, int inValidHour, int inValidMinute, int inValidSecond)
+        {
+            //鐢熸晥鏃堕棿
+            string nowValue1 = validYear.ToString()
+            + validMoth.ToString().PadLeft(2, '0')
+            + validDay.ToString().PadLeft(2, '0')
+            + validHour.ToString().PadLeft(2, '0')
+            + validMinute.ToString().PadLeft(2, '0')
+            + validSecond.ToString().PadLeft(2, '0');
+            //澶辨晥鏃堕棿
+            string nowValue2 = inValidYear.ToString()
+            + inValidMoth.ToString().PadLeft(2, '0')
+            + inValidDay.ToString().PadLeft(2, '0')
+            + inValidHour.ToString().PadLeft(2, '0')
+            + inValidMinute.ToString().PadLeft(2, '0')
+            + inValidSecond.ToString().PadLeft(2, '0');
+            var aaaa = nowValue1.CompareTo(nowValue2);
+            if (nowValue1.CompareTo(nowValue2) == 1)
+            {
+                return false;
+            }
+            return true;
+        }
+
         #endregion
 
         #region 绉婚櫎鏂规硶

--
Gitblit v1.8.0