黄学彪
2020-05-19 7dd4be37cdedaf81ad40990d8cb8dce164d83f4d
ZigbeeApp/Shared/Phone/Device/Logic/SoneLogicList.cs
old mode 100644 new mode 100755
@@ -16,7 +16,7 @@
        }
        /// 给徐梅刷新界面用的
        public  Action<bool> action;
        public Action<bool> action;
        ///第二块第一级父控件
        FrameLayout fLayout = new FrameLayout();
        ///第三块第一级父控件
@@ -31,9 +31,17 @@
        /// 记录选中时间
        /// </summary>
        public int timeValue = 0;
        /// <summary>
        /// 标记显示执行日期(用网关的,还是用系统的时间)
        /// </summary>
        public bool _if = false;
        /// <summary>
        /// 时间戳
        /// </summary>
        public int timeLong = 0;
        public async void Show()
        {
            #region  界面的布局代码
            UserView.HomePage.Instance.ScrollEnabled = false;//锁住左滑
            TopView view = new TopView();
@@ -60,11 +68,12 @@
            this.AddChidren(middle);
            #endregion
            //是常开模式再去读取
            if (Send.CurrentDoorLock.IsDoorLockNormallyMode)
            {
                //进来更新一次
                //查找是否存在时效性自动化;有的话就返回自动化对象;
              var  logic = await SkipView.GetLogicIfon(Send.CurrentDoorLock);
                var logic = await SkipView.GetLogicIfon(Send.CurrentDoorLock);
                if (logic != null)
                {
                    try
@@ -72,6 +81,8 @@
                        //进来更新一次值
                        logicId = logic.LogicId;
                        timeValue = int.Parse(logic.Conditions[0]["DoorLockOpenDelayTime"]);
                        timeLong = int.Parse(logic.Conditions[0]["TriggerTime"]);
                    }
                    catch { }
                }
@@ -86,7 +97,6 @@
                BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
            };
            middle.AddChidren(fLayout);
            ModeView();
            #endregion
            #region 常开自动化
            ///第三块第一级父控件
@@ -100,7 +110,7 @@
            };
            middle.AddChidren(listLogicFl);
            listLogicFl.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
            ModeView();
            ///添加常开自动化的父控件
            var addLogicfL = new FrameLayout
            {
@@ -163,8 +173,8 @@
                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");
                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一个新逻辑对象;
@@ -220,7 +230,7 @@
        /// <summary>
        /// 常开模式开关切换图标界面
        /// </summary>
        public  void ModeView()
        public void ModeView()
        {
            fLayout.RemoveAll();
@@ -274,6 +284,7 @@
                                Send.DelLogic(logicId);
                            }
                            Send.CurrentDoorLock.IsDoorLockNormallyMode = false;
                            _if = false;
                            ModeView();
                        }
                        else
@@ -296,8 +307,8 @@
                var timeTextBtn = new Button
                {
                    Y = Application.GetRealHeight(127 + 69),
                    X = Application.GetRealWidth(125),
                    Width = Application.GetRealWidth(634 + 200),
                    X = Application.GetRealWidth(86),//125
                    Width = Application.GetRealWidth(907),//634 + 200
                    Height = Application.GetRealHeight(60),
                    TextSize = 15,
                    TextColor = ZigbeeColor.Current.LogicTextBlackColor,
@@ -305,20 +316,40 @@
                if (logicId != 0)
                {
                    openModeFl.AddChidren(timeTextBtn);
                    ///有时效性常开才显示时间条件文本
                    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;
                    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);
                    timeTextBtn.Text = text1 + y + text2 + m + text3 + days.ToString() + text4 + hour.ToString() + text5;
                    string text5 = Language.StringByID(MyInternationalizationString.hour1);
                    string text6 = Language.StringByID(MyInternationalizationString.executeSone);
                    if (_if)
                    {
                        ///第一次进来读取网关时间;
                        var datetime = GetLocalTime(timeLong);
                        ///有时效性常开才显示时间条件文本
                        var y = datetime.Year.ToString();//那一年
                        var m = datetime.Month.ToString();//那一月
                        var d = datetime.ToString("dd");//那一天
                        var h = int.Parse(datetime.ToString("HH"));//小时
                        int minute = datetime.Minute;//分钟
                        timeTextBtn.Text = text1 + y + text2 + m + text3 + d + text4 + h + text5 + minute.ToString() + text6;
                    }
                    else
                    {
                        ///有时效性常开才显示时间条件文本
                        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;
                        int minute = DateTime.Now.Minute;//分钟
                        timeTextBtn.Text = text1 + y + text2 + m + text3 + days.ToString() + text4 + hour.ToString() + text5 + minute.ToString() + text6;
                    }
                }
@@ -376,59 +407,59 @@
                 {
                     LogicView.TipView.ShowConfrimTip(() =>
                     {///再次确认
                        LogicView.TipView.ShowInputTip(true, async (str) =>
                         {///确认发送命令
                            CommonPage.Loading.Start();
                             try
                             {
                                ///xm
                                var result = await UserCenter.DoorLock.DoorLockCommonInfo.SetNormallyOpenModeFuncAsync(Send.CurrentDoorLock);
                                 if (!result)
                                 {
                                     LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.openFailed));
                                     return;
                                 }
                                 else
                                 {
                                    ///因为有常开模式下才可以创建失效逻辑;
                                    SkipView.GetLogicAll(Send.CurrentDoorLock);//删除之前所有失效逻辑
                                    var addResult = await SkipView.LockAddModifyLogic(int.Parse(str), Send.CurrentDoorLock);//添加一条失效逻辑
                                    if (addResult == 0)
                                     {
                                        ///可欣说如果常开模式开,创建自动化失败,那么将要发一条常开模式关闭命令;
                                        UserCenter.DoorLock.DoorLockCommonInfo.DelNormallyOpenMode(Send.CurrentDoorLock);
                                        ///提示失败
                                        LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.addFailed));
                                         return;
                                     }
                                     else
                                     {
                                         logicId = addResult;
                                         timeValue = int.Parse(str);
                                         Send.CurrentDoorLock.IsDoorLockNormallyMode = true;
                                         ModeView();
                                         ///添加APP开启常开模式的历史记录
                                         UserCenter.HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(Send.CurrentDoorLock,9001,string.Empty);
                                     }
                         LogicView.TipView.ShowInputTip(true, async (str) =>
                          {///确认发送命令
                              CommonPage.Loading.Start();
                              try
                              {
                                  ///xm
                                  var result = await UserCenter.DoorLock.DoorLockCommonInfo.SetNormallyOpenModeFuncAsync(Send.CurrentDoorLock);
                                  if (!result)
                                  {
                                      LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.openFailed));
                                      return;
                                  }
                                  else
                                  {
                                      ///因为有常开模式下才可以创建失效逻辑;
                                      SkipView.GetLogicAll(Send.CurrentDoorLock);//删除之前所有失效逻辑
                                      var addResult = await SkipView.LockAddModifyLogic(int.Parse(str), Send.CurrentDoorLock);//添加一条失效逻辑
                                      if (addResult == 0)
                                      {
                                          ///可欣说如果常开模式开,创建自动化失败,那么将要发一条常开模式关闭命令;
                                          UserCenter.DoorLock.DoorLockCommonInfo.DelNormallyOpenMode(Send.CurrentDoorLock);
                                          ///提示失败
                                          LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.addFailed));
                                          return;
                                      }
                                      else
                                      {
                                          logicId = addResult;
                                          timeValue = int.Parse(str);
                                          Send.CurrentDoorLock.IsDoorLockNormallyMode = true;
                                          _if = false;
                                          ModeView();
                                          ///添加APP开启常开模式的历史记录
                                          UserCenter.HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(Send.CurrentDoorLock, 9001, string.Empty);
                                      }
                                 }
                             }
                             catch
                             {
                                  }
                              }
                              catch
                              {
                             }
                             finally
                             {
                                 Application.RunOnMainThread(() =>
                                 {
                                     CommonPage.Loading.Hide();
                              }
                              finally
                              {
                                  Application.RunOnMainThread(() =>
                                  {
                                      CommonPage.Loading.Hide();
                                 });
                             }
                         });
                                  });
                              }
                          });
                     });
@@ -439,12 +470,17 @@
            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)
            {
@@ -465,7 +501,7 @@
                            {
                                continue;
                            }
                            if (SkipView.ExistLogic(logic,Send.CurrentDoorLock))
                            if (SkipView.ExistLogic(logic, Send.CurrentDoorLock))
                            {
                                Common.Logic.SoneLogicList.Add(logic);
                            }
@@ -498,6 +534,10 @@
            verticalRefresh.RemoveAll();
            foreach (var logic in Common.Logic.SoneLogicList)
            {
                if (!SkipView.ExistLogic(logic, Send.CurrentDoorLock))
                {
                    continue;
                }
                #region  自动化布局View
                ///自动化父控件
                var fLayoutLogic = new FrameLayout
@@ -588,7 +628,7 @@
                    TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
                };
                logicRow.AddRightView(edit);
                ///删除
                var del = new Button
                {
@@ -621,6 +661,7 @@
                    else
                    {
                        //逻辑关
                        logic.IsEnable = 0;
                        typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nofunction.png";
                        typeBjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
                    }
@@ -654,6 +695,17 @@
                };
            }
        }
        /// <summary>
        /// 将UNIX时间戳转换成系统时间(精确到秒)
        /// <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;
        }
    }
}