From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期五, 10 七月 2020 10:52:13 +0800
Subject: [PATCH] 2020-07-10-01

---
 ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs |  203 ++++++++++++++++++++++++++++----------------------
 1 files changed, 115 insertions(+), 88 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
index 725d5fa..2bc736f 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
@@ -61,7 +61,7 @@
         /// <param name="i_listdevice">绐楀笜鐨勫洖璺�</param>
         public void ShowForm(Rollershade i_CurtainDevice)
         {
-            UserView.HomePage.Instance.ScrollEnabled = false;
+            this.ScrollEnabled = false;
 
             this.curtainDevice = i_CurtainDevice;
 
@@ -99,15 +99,51 @@
                 listView.Height = bodyFrameLayout.Height;
                 bodyFrameLayout.AddChidren(listView);
 
-                //娣诲姞鏂瑰悜琛�
-                this.AddDirectionRow();
-                //娣诲姞闄愪綅琛�
-                this.AddLimitRow();
-                //娣诲姞閲嶇疆鐢垫満琛�
-                this.AddElectricalMachineryRow();
+                //瀵艰建闀垮害涓�0鏃�
+                if (curtainData.CurtainLength <= 0)
+                {
+                    //鐢垫満鏁版嵁寮傚父,璇烽噸缃數鏈�
+                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain));
+                    try
+                    {
+                        //璁惧寮傚父琛ユ晳 -> 娣诲姞閲嶇疆鐢垫満琛�
+                        this.AddElectricalMachineryRow();
+                        return;
+                    }
+                    catch (Exception ex2) 
+                    {
+                        HdlLogLogic.Current.WriteLog(ex2, "寮�鍚堝笜琛ユ晳寮傚父1");
+                        return;
+                    }
+                }
 
-                //闄愪綅鏁版嵁鎺ユ敹
-                this.ReceiveLimitData();
+                try
+                {
+                    //娣诲姞鏂瑰悜琛�
+                    this.AddDirectionRow();
+                    //娣诲姞闄愪綅琛�
+                    this.AddLimitRow();
+                    //娣诲姞閲嶇疆鐢垫満琛�
+                    this.AddElectricalMachineryRow();
+
+                    //闄愪綅鏁版嵁鎺ユ敹
+                    this.ReceiveLimitData();
+                }
+                catch (Exception ex)
+                {
+                    //Log鍑哄姏
+                    string msg = "褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]";
+                    HdlLogLogic.Current.WriteLog(ex, msg);
+                    //鐢垫満鏁版嵁寮傚父,璇烽噸缃數鏈�
+                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain));
+                    try
+                    {
+                        this.listView.RemoveAll();
+                        //璁惧寮傚父琛ユ晳 -> 娣诲姞閲嶇疆鐢垫満琛�
+                        this.AddElectricalMachineryRow();
+                    }
+                    catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "寮�鍚堝笜琛ユ晳寮傚父2"); }
+                }
             });
         }
 
@@ -141,10 +177,10 @@
 
                 var form = new BottomItemSelectForm();
                 form.AddForm(Language.StringByID(R.MyInternationalizationString.uDirectionSelect), listText, nowSelectNo);
-                form.FinishSelectEvent += async (index) =>
+                form.FinishSelectEvent += (index) =>
                 {
                     //鍙樻洿鏂瑰悜
-                    var result = await HdlDeviceCurtainLogic.Current.SetCurtainDirection(curtainDevice, index == 0 ? false : true);
+                    var result = HdlDeviceCurtainLogic.Current.SetCurtainDirection(curtainDevice, index == 0 ? false : true);
                     if (result == false)
                     {
                         return;
@@ -216,6 +252,8 @@
             frameBack.AddChidren(btnProgressView);
 
             int progressValue = (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
+            //璁剧疆鐧惧垎姣旂殑鍒濆鍊�
+            curtainData.OpenLimitPersent = progressValue;
             var btnProgress1 = new NormalViewControl(200, 50, true);
             btnProgress1.X = Application.GetRealWidth(200);
             btnProgress1.Y = btnProgressView.Y;
@@ -224,7 +262,7 @@
             btnProgress1.Text = progressValue + "%";
             frameBack.AddChidren(btnProgress1);
             //杩涘害鏉�
-            this.openSeekBar = new  SeekBarControl(965);
+            this.openSeekBar = new SeekBarControl(965);
             openSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46);
             openSeekBar.ProgressBarColor = 0xff288bfd;
             openSeekBar.Progress = progressValue;
@@ -298,7 +336,8 @@
             frameBack.AddChidren(btnSave);
             btnSave.ButtonClickEvent += (sender, e) =>
             {
-                if (this.receiveOpenlimit == true)
+                //2020.05.17:杩藉姞铏氭嫙浣忓畢鍙互鐩存帴鐐瑰嚮
+                if (this.receiveOpenlimit == true || Common.Config.Instance.Home.IsVirtually == true)
                 {
                     //纭寮�闄愪綅鐐�
                     this.SaveOpenLimit();
@@ -318,37 +357,28 @@
                 //鏁版嵁鍙樻洿,鐧惧垎姣�
                 curtainData.OpenLimitPersent = value;
             };
+            //铏氭嫙浣忓畢涓嶉渶瑕佺洃鍚�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return;
+            }
 
             HdlThreadLogic.Current.RunThread(async () =>
             {
-                //澶勭悊涓�
-                bool checking = false;
                 while (openSeekBar.Parent != null)
                 {
                     int nowValue = curtainData.OpenLimitPersent;
-                    if (oldProValue == nowValue || checking == true)
+                    if (oldProValue == nowValue)
                     {
                         //鍊间笉绛夋墠澶勭悊
                         await Task.Delay(500);
                         continue;
                     }
                     oldProValue = nowValue;
-                    checking = true;
-                    if (curtainData.DeleteOpenLimit == true)
-                    {
-                        //閲嶇疆寮�闄愪綅鐐�
-                        var result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.UpLimit);
-                        if (result == false)
-                        {
-                            checking = false;
-                            continue;
-                        }
-                        curtainData.DeleteOpenLimit = false;
-                    }
+
                     //灏嗙獥甯樿皟鏁村埌鎸囧畾鐧惧垎姣�
                     this.sendDiv = 1;
                     curtainDevice.WcdGoToTiltValue(nowValue);
-                    checking = false;
                 }
             });
         }
@@ -360,14 +390,16 @@
         {
             //纭褰撳墠浣嶇疆涓哄紑闄愪綅?
             string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainOpenLimitMsg);
-            this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
+            this.ShowMassage(ShowMsgType.Confirm, msg, () =>
             {
+                decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength;
+                decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength;
+                if (openValue < 0) { openValue = 0; }
+                if (closeValue < 0) { closeValue = curtainData.CurtainLength; }
                 //鎵ц纭鍙婅鐩栦笂闄愪綅鐐�
-                var result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.UpLimit,
-                    curtainData.OpenLimitPersent, curtainData.CloseLimitPersent);
+                var result = HdlDeviceCurtainLogic.Current.SetAutoOpenCurtainLimitPoint(curtainDevice, (int)openValue, (int)closeValue, curtainData.CurtainLength);
                 if (result == true)
                 {
-                    curtainData.DeleteOpenLimit = true;
                     this.receiveOpenlimit = false;
                 }
             });
@@ -393,6 +425,8 @@
             frameBack.AddChidren(btnProgressView);
 
             int progressValue = (int)(curtainData.CloseLimitValue / (curtainData.CurtainLength * 1.0) * 100);
+            //璁剧疆鐧惧垎姣旂殑鍒濆鍊�
+            curtainData.CloseLimitPersent = progressValue;
             var btnProgress1 = new NormalViewControl(200, 50, true);
             btnProgress1.X = Application.GetRealWidth(200);
             btnProgress1.Y = btnProgressView.Y;
@@ -401,7 +435,7 @@
             btnProgress1.Text = progressValue + "%";
             frameBack.AddChidren(btnProgress1);
             //杩涘害鏉�
-            this.closeSeekBar = new  SeekBarControl(965);
+            this.closeSeekBar = new SeekBarControl(965);
             closeSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46);
             closeSeekBar.ProgressBarColor = 0xff288bfd;
             closeSeekBar.Progress = progressValue;
@@ -457,7 +491,7 @@
             frameBack.AddChidren(btnPlus);
             btnPlus.ButtonClickEvent += (sender, e) =>
             {
-                if (closeSeekBar.Progress >=100)
+                if (closeSeekBar.Progress >= 100)
                 {
                     return;
                 }
@@ -475,7 +509,8 @@
             frameBack.AddChidren(btnSave);
             btnSave.ButtonClickEvent += (sender, e) =>
             {
-                if (this.receiveCloseLimit == true)
+                //2020.05.17:杩藉姞铏氭嫙浣忓畢鍙互鐩存帴鐐瑰嚮
+                if (this.receiveCloseLimit == true || Common.Config.Instance.Home.IsVirtually == true)
                 {
                     //淇濆瓨鍚堥檺浣嶇偣
                     this.SaveCloseLimit();
@@ -495,36 +530,28 @@
                 //鏁版嵁鍙樻洿,鐧惧垎姣�
                 curtainData.CloseLimitPersent = value;
             };
+            //铏氭嫙浣忓畢涓嶉渶瑕佺洃鍚�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return;
+            }
 
             HdlThreadLogic.Current.RunThread(async () =>
             {
-                //澶勭悊涓�
-                bool checking = false;
                 while (closeSeekBar.Parent != null)
                 {
                     int nowValue = curtainData.CloseLimitPersent;
-                    if (oldProValue == nowValue || checking == true)
+                    if (oldProValue == nowValue)
                     {
                         //鍊间笉绛夋墠澶勭悊
                         await Task.Delay(500);
                         continue;
                     }
-                    checking = true;
                     oldProValue = nowValue;
-                    if (curtainData.DeleteCloseLimit == true)
-                    {
-                        //閲嶇疆鍚堥檺浣嶇偣
-                        var result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.DownLimit);
-                        if (result == false)
-                        {
-                            continue;
-                        }
-                        curtainData.DeleteCloseLimit = false;
-                    }
+
                     //灏嗙獥甯樿皟鏁村埌鎸囧畾鐧惧垎姣�
                     this.sendDiv = 2;
                     curtainDevice.WcdGoToTiltValue(nowValue);
-                    checking = false;
                 }
             });
         }
@@ -536,14 +563,17 @@
         {
             //纭褰撳墠浣嶇疆涓哄悎闄愪綅?
             string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainCloseLimitMsg);
-            this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
+            this.ShowMassage(ShowMsgType.Confirm, msg, () =>
             {
-                //鎵ц纭鍙婅鐩栧悎闄愪綅鐐�
-                var result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.DownLimit,
-                    curtainData.OpenLimitPersent, curtainData.CloseLimitPersent);
+                decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength;
+                decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength;
+                if (openValue < 0) { openValue = 0; }
+                if (closeValue < 0) { closeValue = curtainData.CurtainLength; }
+                //鎵ц纭鍙婅鐩栦笂闄愪綅鐐�
+                var result = HdlDeviceCurtainLogic.Current.SetAutoOpenCurtainLimitPoint(curtainDevice, (int)openValue, (int)closeValue, curtainData.CurtainLength);
+
                 if (result == true)
                 {
-                    curtainData.DeleteCloseLimit = true;
                     this.receiveCloseLimit = false;
                 }
             });
@@ -566,6 +596,11 @@
             rowReset.AddBottomLine();
             rowReset.ButtonClickEvent += (sender, e) =>
             {
+                //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
+                if (Common.Config.Instance.Home.IsVirtually == true)
+                {
+                    return;
+                }
                 //閲嶇疆鐢垫満灏嗗垵濮嬪寲{0}鏂瑰悜涓庨檺浣嶈缃紝纭缁х画锛�
                 string msg = Language.StringByID(R.MyInternationalizationString.uResetElectricalMachineryMsg);
                 msg = msg.Replace("{0}", "\r\n");
@@ -588,6 +623,10 @@
 
                         //姣�10鐨勯暱搴﹀ぇ姒傛槸2绉�,澶氶鐣�1娆″嚭鏉�
                         int waitCount = ((curtainData.CurtainLength / 10) + 1) * 3;
+                        if (waitCount < 12)
+                        {
+                            waitCount = 12;
+                        }
 
                         int timeCount = 0;
                         while (timeCount <= waitCount)
@@ -619,15 +658,26 @@
         /// <returns></returns>
         private bool InitCurtainDefultData()
         {
-            //寮�鍚繘搴︽潯
-            this.ShowProgressBar();
-
             this.curtainData = new CurtainData();
             this.receiveOpenlimit = false;
             this.receiveCloseLimit = false;
             this.sendDiv = 0;
 
-            bool receiptData = false;
+            //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                var data = ModelData.DeviceModelDataLogic.Current.GetCurtainLimitPoint(curtainDevice);
+                curtainData.Direction = data.Direction;
+                curtainData.CurtainLength = data.curtainLength;
+                curtainData.OpenLimitValue = data.upLimit;
+                curtainData.CloseLimitValue = data.downLimit;
+                return true;
+            }
+
+            //寮�鍚繘搴︽潯
+            this.ShowProgressBar();
+
+            int receiptDataCount = 0;
             string mainkeys = LocalDevice.Current.GetDeviceMainKeys(curtainDevice);
             HdlGatewayReceiveLogic.Current.AddAttributeEvent("CurtainDeviceAttribute", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (device) =>
             {
@@ -651,23 +701,25 @@
                             //姝e悜
                             curtainData.Direction = false;
                         }
+                        receiptDataCount++;
                     }
                     else if (attriBute.AttributeId == 1)
                     {
                         //绐楀笜鎬婚暱
                         curtainData.CurtainLength = attriBute.AttriButeData;
+                        receiptDataCount++;
                     }
                     else if (attriBute.AttributeId == 16)
                     {
                         //寮�闄愪綅
                         curtainData.OpenLimitValue = attriBute.AttriButeData;
+                        receiptDataCount++;
                     }
                     else if (attriBute.AttributeId == 17)
                     {
                         //鍚堥檺浣�
                         curtainData.CloseLimitValue = attriBute.AttriButeData;
-                        //鏁版嵁鎺ユ敹缁撴潫
-                        receiptData = true;
+                        receiptDataCount++;
                     }
                 }
             });
@@ -675,7 +727,7 @@
             HdlDeviceCurtainLogic.Current.SetGetCurtainLimitSettionComand(curtainDevice);
 
             int timeCount = 30;
-            while (receiptData == false && timeCount >= 0)
+            while (receiptDataCount != 4 && timeCount >= 0)
             {
                 System.Threading.Thread.Sleep(100);
                 timeCount--;
@@ -694,21 +746,6 @@
             }
             //绉婚櫎鐩戝惉
             HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
-
-            //澶囦唤绐楀笜鏁版嵁
-            if (this.backupCurtainData == true)
-            {
-                this.backupCurtainData = false;
-                HdlThreadLogic.Current.RunThread(async () =>
-                {
-                    //鏂瑰悜澶囦唤
-                    await HdlDeviceCurtainLogic.Current.BackupCurtainDirection(curtainDevice, curtainData.Direction);
-                    //闄愪綅澶囦唤
-                    int uplimit= (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
-                    int downlimit = (int)(curtainData.CloseLimitValue / (curtainData.CurtainLength * 1.0) * 100);
-                    await HdlDeviceCurtainLogic.Current.BackupCurtainLimitPoint(curtainDevice, uplimit, downlimit);
-                });
-            }
 
             return true;
         }
@@ -766,8 +803,6 @@
             HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
             HdlGatewayReceiveLogic.Current.RemoveEvent("ReceiveLimitData");
 
-            UserView.HomePage.Instance.ScrollEnabled = true;
-
             base.CloseFormBefore();
         }
 
@@ -784,14 +819,6 @@
             /// false:鐢垫満鏂瑰悜姝e悜锛泃rue:鐢垫満鏂瑰悜鍙嶅悜
             /// </summary>
             public bool Direction = false;
-            /// <summary>
-            /// 鏄惁閲嶇疆寮�闄愪綅鐐�
-            /// </summary>
-            public bool DeleteOpenLimit = true;
-            /// <summary>
-            /// 鏄惁閲嶇疆鍚堥檺浣嶇偣
-            /// </summary>
-            public bool DeleteCloseLimit = true;
             /// <summary>
             /// 寮�闄愪綅鐨勫��
             /// </summary>

--
Gitblit v1.8.0