黄学彪
2020-12-17 9f326f4000847e6167d8166fa2f6a66f53cb3734
ZigbeeApp/Shared/Phone/Device/Logic/SoneLogicList.cs
@@ -16,15 +16,11 @@
        }
        /// 给徐梅刷新界面用的
        public  Action<bool> action;
        public Action<bool> action;
        // 刷新上报界面的Action
        public Action<string, bool> updateCurrentDoorlockActionTemp;
        ///第二块第一级父控件
        FrameLayout fLayout = new FrameLayout();
        ///常开模式图标
        Button modeIconBtn = new Button();
        ///第二块第二级父控件
        FrameLayout modeFl = new FrameLayout();
        Button button1 = new Button();
        Button button2= new Button();
        ///第三块第一级父控件
        FrameLayout listLogicFl = new FrameLayout();
        ///常开自动化列表上下滑动的控件
@@ -37,9 +33,13 @@
        /// 记录选中时间
        /// </summary>
        public int timeValue = 0;
        /// <summary>
        /// 记录时间戳
        /// </summary>
        public int timeLong = 0;
        public async void Show()
        {
            #region  界面的布局代码
            UserView.HomePage.Instance.ScrollEnabled = false;//锁住左滑
            TopView view = new TopView();
@@ -47,7 +47,7 @@
            view.toptitleNameBtn.TextID = MyInternationalizationString.openmode;
            view.clickBtn.MouseDownEventHandler += (sender, e) =>
            {
                UserView.HomePage.Instance.ScrollEnabled = true;
                UserView.HomePage.Instance.ScrollEnabled = true;
                //把静态变量的这个东西置空
                soneLogicList = null;
                this.RemoveFromParent();
@@ -56,7 +56,7 @@
                    action(Send.CurrentDoorLock.IsDoorLockNormallyMode);
                }
            };
            var middle = new FrameLayout
            {
                Y = view.topRowLayout.Bottom,
@@ -70,14 +70,15 @@
            {
                //进来更新一次
                //查找是否存在时效性自动化;有的话就返回自动化对象;
                var logic = await SkipView.GetLogicIfon();
                var logic = await SkipView.GetLogicIfon(Send.CurrentDoorLock);
                if (logic != null)
                {
                    try
                    {
                        //进来更新一次值
                        logicId = logic.LogicId;
                        timeValue = int.Parse(logic.Conditions[0]["DoorLockOpenDelayTime"]);
                        timeValue = int.Parse(logic.Conditions[0]["DoorLockOpenDelayTime"]) / 3600;
                        timeLong = int.Parse(logic.Conditions[0]["TriggerTime"]);
                    }
                    catch { }
                }
@@ -92,32 +93,8 @@
                BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
            };
            middle.AddChidren(fLayout);
            ///常开模式图标
            modeIconBtn = new Button
            {
                X = Application.GetRealWidth(395),
                Y = Application.GetRealHeight(92),
                Width = Application.GetMinRealAverage(294),
                Height = Application.GetMinRealAverage(294),
            };
            fLayout.AddChidren(modeIconBtn);
            ///第二块第二级父控件
            modeFl = new FrameLayout
            {
            };
            fLayout.AddChidren(modeFl);
            button1 = new Button
            {
            };
            modeFl.AddChidren(button1);
            button2 = new Button
            {
            };
            modeFl.AddChidren(button2);
            ModeView();
            #endregion
            #region 常开自动化
            ///第三块第一级父控件
            listLogicFl = new FrameLayout
@@ -130,7 +107,7 @@
            };
            middle.AddChidren(listLogicFl);
            listLogicFl.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
            ModeView();
            ///添加常开自动化的父控件
            var addLogicfL = new FrameLayout
            {
@@ -162,7 +139,7 @@
                UnSelectedImagePath = "ZigeeLogic/add.png",
            };
            addLogicfL.AddChidren(addIconBtn);
            ///加大点击热键
            var addIconclickBtn = new Button
            {
                Width = Application.GetRealWidth(90 + 69 + 63),
@@ -193,6 +170,10 @@
                actionsInfo.Add("DeviceAddr", Send.CurrentDoorLock.DeviceAddr);
                actionsInfo.Add("Epoint", "200");
                actionsInfo.Add("PassData", "055704010113");//默认门锁常关
                Dictionary<string, string> accounts = new Dictionary<string, string>();
                accounts.Add("Type", "8");
                accounts.Add("Option4", Send.CurrentDoorLock.DeviceAddr.ToString());//用于判断识别是哪个门锁;
                accounts.Add("Option2", Send.CurrentDoorLock.DeviceEpoint.ToString());
                //new一个新逻辑对象;
                //新增门锁常开模式自动化入口;
                Common.Logic.CurrentLogic = new Common.Logic();
@@ -201,6 +182,7 @@
                Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.openmode);
                Common.Logic.CurrentLogic.Conditions.Add(timeConditionsInfo);//添加条件
                Common.Logic.CurrentLogic.Actions.Add(actionsInfo);//添加目标
                Common.Logic.CurrentLogic.Accounts.Add(accounts);
                var oneLogic = new OneLogic();
                UserView.HomePage.Instance.AddChidren(oneLogic);
                UserView.HomePage.Instance.PageIndex += 1;
@@ -241,37 +223,68 @@
                catch { }
            };
            updateCurrentDoorlockActionTemp = (DoorlockKey, _bool) =>
            {
                var key = Send.CurrentDoorLock.DeviceAddr;
                if (DoorlockKey == key)
                {
                    try
                    {
                        Application.RunOnMainThread(() =>
                        {
                            Send.CurrentDoorLock.IsDoorLockNormallyMode = _bool;
                            ModeView();
                        });
                    }
                    catch { }
                }
            };
            UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction += updateCurrentDoorlockActionTemp;
        }
        /// <summary>
        /// 常开模式开关切换图标界面
        /// </summary>
        public async void ModeView()
        public void ModeView()
        {
            fLayout.RemoveAll();
            ///常开模式图标
            Button modeIconBtn = new Button
            {
                X = Application.GetRealWidth(395),
                Y = Application.GetRealHeight(92),
                Width = Application.GetMinRealAverage(294),
                Height = Application.GetMinRealAverage(294),
            };
            fLayout.AddChidren(modeIconBtn);
            if (Send.CurrentDoorLock.IsDoorLockNormallyMode)
            {
                fLayout.Height = Application.GetRealHeight(780);//改变高度
                fLayout.Height = Application.GetRealHeight(780);//改变高度
                modeIconBtn.UnSelectedImagePath = "ZigeeLogic/openMode.png";//改变图标状态
                modeFl.Y = modeIconBtn.Bottom + Application.GetRealHeight(64);
                modeFl.X = Application.GetRealWidth(0);
                modeFl.Height = Application.GetRealHeight(127 + 199);
                modeFl.Width = Application.GetRealHeight(1080);
                modeFl.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
                modeFl.SetCornerWithSameRadius(Application.GetRealHeight(0), HDLUtils.RectCornerBottomLeft);
                ///第二级父控件
                var openModeFl = new FrameLayout
                {
                    Y = Application.GetRealHeight(455),
                    Height = Application.GetRealHeight(127 + 199),
                    Width = Application.GetRealWidth(1080),
                };
                fLayout.AddChidren(openModeFl);
                ///关闭时效性自动化
                button1.Y = Application.GetRealHeight(0);
                button1.X = Application.GetRealWidth(86);
                button1.Width = Application.GetRealWidth(907);
                button1.Height = Application.GetRealHeight(127);
                button1.Radius = (uint)Application.GetRealHeight(58);
                button1.BackgroundColor = ZigbeeColor.Current.LogicBtnSaveBackgroundColor;
                button1.TextAlignment = TextAlignment.Center;
                button1.TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor;
                button1.TextID = MyInternationalizationString.closeUp;
                button1.TextSize = 16;
                button1.MouseUpEventHandler = async (sender, e) =>
                Button closeBtn = new Button
                {
                    X = Application.GetRealWidth(86),
                    Height = Application.GetRealHeight(127),
                    Width = Application.GetRealWidth(907),
                    Radius = (uint)Application.GetRealHeight(58),
                    BackgroundColor = ZigbeeColor.Current.LogicBtnSaveBackgroundColor,
                    TextID = MyInternationalizationString.closeUp,
                    TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
                    TextSize = 16,
                };
                openModeFl.AddChidren(closeBtn);
                closeBtn.MouseUpEventHandler += async (sender, e) =>
                {
                    CommonPage.Loading.Start();
                    try
@@ -281,6 +294,7 @@
                        {
                            if (logicId != 0)
                            {
                                ///有可能只有常开模式,没有时效性自动化
                                Send.DelLogic(logicId);
                            }
@@ -302,83 +316,120 @@
                        });
                    }
                };
                if (logicId != 0)
                {
                    ///显示失效设置时间文本控件
                    button2.Y = Application.GetRealHeight(127 + 69);
                    button2.X = Application.GetRealWidth(125);
                    button2.Width = Application.GetRealWidth(634 + 200);
                    button2.Height = Application.GetRealHeight(60);
                    button2.UnSelectedImagePath = "ZigeeLogic/1234.png";
                    button2.TextSize = 15;
                    button2.TextColor = ZigbeeColor.Current.LogicTextBlackColor;
                    ///有时效性常开才显示时间条件文本
                    var y = DateTime.Now.Year.ToString();//那一年
                    var m = DateTime.Now.Month.ToString();//那一月
                    var d = DateTime.Now.ToString("dd");//那一天
                    var h = int.Parse(DateTime.Now.ToString("HH"));//当前系统时间
                    int dayInt = (h + timeValue) / 24;//算出几天后执行
                    int hour = (h + timeValue) % 24;//算出几天后那个时间执行
                    int days = int.Parse(d) + dayInt;
                    var timeTextBtn = new Button
                    {
                        Y = Application.GetRealHeight(127 + 69),
                        X = Application.GetRealWidth(80),//125
                        Width = Application.GetRealWidth(907 + 12),//634 + 200
                        Height = Application.GetRealHeight(60),
                        TextSize = 15,
                        TextColor = ZigbeeColor.Current.LogicTextBlackColor,
                    };
                    openModeFl.AddChidren(timeTextBtn);
                    string text1 = Language.StringByID(MyInternationalizationString.timeSensitive);
                    string text2 = Language.StringByID(MyInternationalizationString.yearSone);
                    string text3 = Language.StringByID(MyInternationalizationString.monthSone);
                    string text4 = Language.StringByID(MyInternationalizationString.numberSone);
                    string text5 = Language.StringByID(MyInternationalizationString.executeSone);
                    button2.Text = text1 + y + text2 + m + text3 + days.ToString() + text4 + hour.ToString() + text5;
                    string text5 = Language.StringByID(MyInternationalizationString.hour1);
                    string text6 = Language.StringByID(MyInternationalizationString.executeSone);
                    string year = "";
                    string month = "";
                    int days = 0;
                    int hour = 0;
                    int minute = 0;
                    if (timeLong != 0)
                    {
                        ///读取网关时间;
                        var datetime = GetLocalTime(timeLong);
                        ///有时效性常开才显示时间条件文本
                        year = datetime.Year.ToString();//那一年
                        month = datetime.Month.ToString();//那一月
                        days = int.Parse(datetime.ToString("dd"));//那一天
                        hour = int.Parse(datetime.ToString("HH"));//小时
                        minute = datetime.Minute;//分钟
                        timeLong = 0;
                    }
                    else
                    {
                        ///读取系统时间
                        year = DateTime.Now.Year.ToString();//那一年
                        month = DateTime.Now.Month.ToString();//那一月
                        var d = DateTime.Now.ToString("dd");//那一天
                        var h = int.Parse(DateTime.Now.ToString("HH"));//小时
                        int dayInt = (h + timeValue) / 24;//设置时间+当前系统时间是否超出24小时
                        hour = (h + timeValue) % 24;//设置时间+当前系统时间是否超出24小时剩下多少小时
                        days = int.Parse(d) + dayInt;//当前系统天数+执行后天数
                        minute = DateTime.Now.Minute;//分钟
                    }
                    timeTextBtn.Text = text1 + year + text2 + month + text3 + days.ToString() + text4 + hour.ToString() + text5 + minute.ToString() + text6;
                }
                else
                {
                    button2.Y = Application.GetRealHeight(0);
                    button2.X = Application.GetRealWidth(0);
                    button2.Width = Application.GetRealWidth(0);
                    button2.Height = Application.GetRealHeight(0);
                }
            }
            else
            {
                fLayout.Height = Application.GetRealHeight(645);//改变高度
                modeIconBtn.UnSelectedImagePath = "ZigeeLogic/noMode.png";//改变图标状态
                modeFl.Y = modeIconBtn.Bottom + Application.GetRealHeight(92);
                modeFl.X = Application.GetRealWidth(58);
                modeFl.Height = Application.GetRealHeight(138);
                modeFl.Width = Application.GetRealHeight(1022);
                modeFl.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor;
                ///第二级父控件
                var modeFl = new FrameLayout
                {
                    Y = Application.GetRealHeight(478),
                    X = Application.GetRealWidth(58),
                    Height = Application.GetRealHeight(138),
                    Width = Application.GetRealWidth(1022),
                    BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor,
                };
                fLayout.AddChidren(modeFl);
                modeFl.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft);
                ///时效性常开设置显示文本控件
                button1.Y = Application.GetRealHeight(40);
                button1.X = Application.GetRealWidth(58);
                button1.Width = Application.GetRealWidth(600);
                button1.Height = Application.GetRealHeight(60);
                button1.Radius = (uint)Application.GetRealHeight(0);
                button1.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor;
                button1.TextAlignment = TextAlignment.CenterLeft;
                button1.TextColor = ZigbeeColor.Current.LogicTextBlackColor;
                // Text = "时效性常开设置",
                button1.TextID = MyInternationalizationString.timeSetSone;
                button1.TextSize = 15;
                var modeTextBtn = new Button
                {
                    Y = Application.GetRealHeight(40),
                    X = Application.GetRealWidth(58),
                    Width = Application.GetRealWidth(600),
                    Height = Application.GetRealHeight(60),
                    TextSize = 15,
                    TextColor = ZigbeeColor.Current.LogicTextBlackColor,
                    TextAlignment = TextAlignment.CenterLeft,
                    // Text = "时效性常开设置",
                    TextID = MyInternationalizationString.timeSetSone,
                };
                modeFl.AddChidren(modeTextBtn);
                ///下一级菜单图标控件
                button2.Width = Application.GetMinRealAverage(104);
                button2.Height = Application.GetMinRealAverage(104);
                button2.X = Application.GetRealWidth(861);
                button2.Y = Application.GetRealHeight(17);
                button2.UnSelectedImagePath = "ZigeeLogic/nextIconSone.png";
                button2.TextSize = 15;
                button2.TextColor = ZigbeeColor.Current.LogicTextBlackColor;
                button2.Text ="";
                button2.MouseUpEventHandler = (sender, e) =>
                var nextIconBtn = new Button
                {
                    Width = Application.GetMinRealAverage(104),
                    Height = Application.GetMinRealAverage(104),
                    X = Application.GetRealWidth(861),
                    Y = Application.GetRealHeight(17),
                    UnSelectedImagePath = "ZigeeLogic/nextIconSone.png",
                };
                modeFl.AddChidren(nextIconBtn);
                ///加大点击热键
                var clickBtn = new Button
                {
                    Width = Application.GetRealWidth(104 + 161 + 30),
                    Height = Application.GetRealHeight(138),
                    X = Application.GetRealWidth(700),
                };
                modeFl.AddChidren(clickBtn);
                clickBtn.MouseUpEventHandler += (sender, e) =>
                {
                    LogicView.TipView.ShowConfrimTip(() =>
                    {///再次确认
                        LogicView.TipView.ShowInputTip(true, async (str) =>
                        {///确认发送命令
                            CommonPage.Loading.Start();
                            try
                            {
@@ -392,7 +443,7 @@
                                else
                                {
                                    ///因为有常开模式下才可以创建失效逻辑;
                                    SkipView.GetLogicAll();//删除之前所有失效逻辑
                                    SkipView.DelAllLogic(Send.CurrentDoorLock);//删除之前所有失效逻辑
                                    var addResult = await SkipView.LockAddModifyLogic(int.Parse(str), Send.CurrentDoorLock);//添加一条失效逻辑
                                    if (addResult == 0)
                                    {
@@ -402,12 +453,17 @@
                                        LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.addFailed));
                                        return;
                                    }
                                    logicId = addResult;
                                    timeValue = int.Parse(str);
                                    Send.CurrentDoorLock.IsDoorLockNormallyMode = true;
                                    ModeView();
                                    //添加App开启常开模式的历史记录
                                    UserCenter.HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(Send.CurrentDoorLock, 9001, string.Empty);
                                    else
                                    {
                                        logicId = addResult;
                                        timeValue = int.Parse(str);
                                        Send.CurrentDoorLock.IsDoorLockNormallyMode = true;
                                        ModeView();
                                        ///添加APP开启常开模式的历史记录
                                        HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(Send.CurrentDoorLock, 9001, string.Empty);
                                    }
                                }
                            }
                            catch
@@ -428,23 +484,27 @@
                };
            }
            listLogicFl.Y = fLayout.Bottom;
            listLogicFl.X = Application.GetRealWidth(58);
            listLogicFl.Height = Application.GetRealHeight(Method.H - 184) - fLayout.Height;
            listLogicFl.Width = Application.GetRealWidth(1022);
            listLogicFl.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor;
            verticalRefresh.Y = Application.GetRealHeight(187);
            verticalRefresh.X = Application.GetRealWidth(46);
            verticalRefresh.Height = listLogicFl.Height - Application.GetRealHeight(187);//动态改动上下滑动view高度;
            verticalRefresh.Width = listLogicFl.Width - Application.GetRealWidth(46);
        }
        /// <summary>
        /// 读取自动化列表数据;
        /// </summary>
        /// <param name="yes"></param>
        private async void Read( bool yes)
        private async void Read(bool yes)
        {
            if (yes)
            {
                CommonPage.Loading.Start();
            }
            //if (yes)
            // {
            CommonPage.Loading.Start();
            // }
            try
            {
                if (Common.Logic.SoneLogicList.Count == 0)
@@ -460,7 +520,10 @@
                            {
                                continue;
                            }
                            Common.Logic.SoneLogicList.Add(logic);
                            if (SkipView.ExistLogic(logic, Send.CurrentDoorLock))
                            {
                                Common.Logic.SoneLogicList.Add(logic);
                            }
                        }
                    }
                }
@@ -469,16 +532,25 @@
            {
                var dd = e.Message;
            }
            //自动化
            RefreshView();
            if (yes)
            finally
            {
                CommonPage.Loading.Hide();
                Application.RunOnMainThread(() =>
                {
                    // if (yes)
                    // {
                    CommonPage.Loading.Hide();
                    // }
                    //自动化
                    RefreshView();
                });
            }
        }
        RowLayout selectedRow = new RowLayout() { Tag = "0" };//记录左滑状态
        /// <summary>
        /// 记录左滑状态
        /// </summary>
        RowLayout selectedRow = new RowLayout() { Tag = "0" };
        int a = 1;
        /// <summary>
        /// 加载自动化列表
@@ -488,6 +560,11 @@
            verticalRefresh.RemoveAll();
            foreach (var logic in Common.Logic.SoneLogicList)
            {
                if (!SkipView.ExistLogic(logic, Send.CurrentDoorLock))
                {
                    ///不是该门锁自动化就不显示出来;
                    continue;
                }
                #region  自动化布局View
                ///自动化父控件
                var fLayoutLogic = new FrameLayout
@@ -514,7 +591,7 @@
                    selectedRow = logicRow;
                };
                a++;
                ///显示逻辑名称的控件
                ///显示逻辑名称的控件
                var nameBtn = new Button
                {
                    Height = Application.GetRealHeight(58),
@@ -578,7 +655,7 @@
                    TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
                };
                logicRow.AddRightView(edit);
                ///删除
                var del = new Button
                {
@@ -611,6 +688,7 @@
                    else
                    {
                        //逻辑关
                        logic.IsEnable = 0;
                        typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nofunction.png";
                        typeBjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
                    }
@@ -629,21 +707,34 @@
                ///删除点击事件
                del.MouseUpEventHandler += (sender, e) =>
                {
                    var alert = new UserCenter.ShowMsgControl(UserCenter.ShowMsgType.Confirm,
                    var alert = new ShowMsgControl(ShowMsgType.Confirm,
                    Language.StringByID(MyInternationalizationString.doyouwanttodelete),
                    Language.StringByID(MyInternationalizationString.confrim));
                    alert.Show();
                    alert.ConfirmClickEvent += () =>
                    Language.StringByID(MyInternationalizationString.confrim));
                    alert.Show();
                    alert.ConfirmClickEvent += () =>
                    {
                        Common.Logic.SoneLogicList.Remove(logic);
                        //logicRow.Parent.RemoveFromParent();
                        fLayoutLogic.RemoveFromParent();
                        Send.DelLogic(logic.LogicId);
                        Send.DelLogic(logic.LogicId);
                    };
                };
                };
            }
        }
        /// <summary>
        /// 时间戳转换成时间格式
        /// </summary>
        /// <param name="unixTimeStamp">时间戳</param>
        /// <returns></returns>
        public DateTime GetLocalTime(int unixTimeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(unixTimeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime dtResult = dtStart.Add(toNow);
            return dtResult;
        }
    }
}