陈嘉乐
2020-07-10 48ba446936b51fffafa7c3600c0dadc6ac0e8c20
ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
@@ -99,6 +99,24 @@
                listView.Height = bodyFrameLayout.Height;
                bodyFrameLayout.AddChidren(listView);
                //导轨长度为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;
                    }
                }
                try
                {
                    //添加方向行
@@ -124,7 +142,7 @@
                        //设备异常补救 -> 添加重置电机行
                        this.AddElectricalMachineryRow();
                    }
                    catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常"); }
                    catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常2"); }
                }
            });
        }
@@ -159,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;
@@ -234,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;
@@ -316,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();
@@ -336,27 +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;
                    //将窗帘调整到指定百分比
                    this.sendDiv = 1;
                    curtainDevice.WcdGoToTiltValue(nowValue);
                    checking = false;
                }
            });
        }
@@ -368,15 +390,14 @@
        {
            //确认当前位置为开限位?
            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,
                    (int)openValue, (int)closeValue);
                var result = HdlDeviceCurtainLogic.Current.SetAutoOpenCurtainLimitPoint(curtainDevice, (int)openValue, (int)closeValue, curtainData.CurtainLength);
                if (result == true)
                {
                    this.receiveOpenlimit = false;
@@ -404,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;
@@ -486,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();
@@ -506,27 +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;
                    //将窗帘调整到指定百分比
                    this.sendDiv = 2;
                    curtainDevice.WcdGoToTiltValue(nowValue);
                    checking = false;
                }
            });
        }
@@ -538,15 +563,14 @@
        {
            //确认当前位置为合限位?
            string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainCloseLimitMsg);
            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.DownLimit,
                    (int)openValue, (int)closeValue);
                var result = HdlDeviceCurtainLogic.Current.SetAutoOpenCurtainLimitPoint(curtainDevice, (int)openValue, (int)closeValue, curtainData.CurtainLength);
                if (result == true)
                {
@@ -572,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");
@@ -629,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) =>
            {
@@ -661,23 +701,25 @@
                            //正向
                            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++;
                    }
                }
            });
@@ -685,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--;
@@ -704,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;
        }