wjc
2022-03-07 e2678b7bb1b68160778609e23a5eea7a809c775b
HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs
@@ -3,328 +3,319 @@
using Shared;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
  public class AddInputType : FrameLayout
  {
    public AddInputType()
    public class AddInputType : FrameLayout
    {
      Tag = "Logic";
    }
    public void Show()
    {
      LogicView.TopView topView = new LogicView.TopView();
      this.AddChidren(topView.FLayoutView());
      topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
      {
        RemoveFromParent();
      };
      topView.topNameBtn.TextID = StringId.selectionCondition;
      FrameLayout viewLayout = new FrameLayout
      {
        Y = Application.GetRealHeight(64),
        Width = Application.GetRealWidth(LogicView.TextSize.view375),
        Height = Application.GetRealHeight(LogicView.TextSize.view667 - 64),
        BackgroundColor = CSS.CSS_Color.viewMiddle,
      };
      this.AddChidren(viewLayout);
      #region 时间  功能 室外变化
      //时间
      LogicView.SelectTypeView timeView = new LogicView.SelectTypeView();
      timeView.btnText.TextID = StringId.time;
      timeView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png";
      if (MainView.IsGatewayType)
      {
        viewLayout.AddChidren(timeView.FLayoutView());
      }
      //功能
      LogicView.SelectTypeView functionView = new LogicView.SelectTypeView();
      functionView.frameLayout.Y = timeView.frameLayout.Bottom;
      functionView.btnText.TextID = StringId.funLogic;
      functionView.btnIcon.UnSelectedImagePath = "LogicIcon/functionicon.png";
      viewLayout.AddChidren(functionView.FLayoutView());
      if (!MainView.IsGatewayType)
      {
        functionView.frameLayout.Y = Application.GetRealHeight(0);
      }
      //场景
      LogicView.SelectTypeView sceneView = new LogicView.SelectTypeView();
      sceneView.frameLayout.Y = functionView.frameLayout.Bottom;
      sceneView.btnText.TextID = StringId.Scenes;
      sceneView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png";
      viewLayout.AddChidren(sceneView.FLayoutView());
      //室外变化
      LogicView.SelectTypeView shiwaiView = new LogicView.SelectTypeView();
      shiwaiView.frameLayout.Y = sceneView.frameLayout.Bottom;
      shiwaiView.btnText.TextID = StringId.shiwaibainhua;
      shiwaiView.btnIcon.UnSelectedImagePath = "LogicIcon/changesinoutdoor.png";
      if (MainView.IsGatewayType)
      {
        viewLayout.AddChidren(shiwaiView.FLayoutView());
      }
      //地理围栏
      LogicView.SelectTypeView likiadaodaView = new LogicView.SelectTypeView();
      likiadaodaView.frameLayout.Y = shiwaiView.frameLayout.Bottom;
      likiadaodaView.btnText.TextID = StringId.likiadaoda;
      likiadaodaView.btnIcon.UnSelectedImagePath = "LogicIcon/location.png";
      if (MainView.IsGatewayType)
      {
        viewLayout.AddChidren(likiadaodaView.FLayoutView());
      }
      #endregion
      #region  所有点击事件
      //时间
      timeView.btnClick.MouseUpEventHandler += (sen, e) =>
      {
        TimeTpye timeTpye = new TimeTpye();
        MainPage.BasePageView.AddChidren(timeTpye);
        timeTpye.Show();
        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      };
      //功能
      functionView.btnClick.MouseUpEventHandler += (sen, e) =>
      {
        FunTpye funTpye = new FunTpye();
        MainPage.BasePageView.AddChidren(funTpye);
        funTpye.Show(LogicMethod.condition_if);
        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      };
      //场景点击事件
      sceneView.btnClick.MouseUpEventHandler += (sen, e) =>
      {
        SceneMethod();
      };
      //室外变化
      shiwaiView.btnClick.MouseUpEventHandler += (sen, e) =>
      {
        //if (string.IsNullOrEmpty(Entity.DB_ResidenceData.Instance.CurrentRegion.homeAddress))//.longitude == 0 && Entity.DB_ResidenceData.Instance.CurrentRegion.latitude == 0)
        //{
        //    new PublicAssmebly().TipMsg(StringId.tip, StringId.GatewayLocationInformationIsNotConfigured);
        //    return;
        //}
        Weather weather = new Weather();
        MainPage.BasePageView.AddChidren(weather);
        weather.Show();
        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      };
      //地理围栏
      likiadaodaView.btnClick.MouseUpEventHandler += (sen, e) =>
      {
        LocationView(this, false);
      };
      #endregion
    }
    /// <summary>
    /// 添加场景
    /// </summary>
    public void SceneMethod()
    {
      var sceneList = LogicMethod.CurrLogicMethod.GetSceneList();
      List<string> nameList = new List<string>();
      for (int i = 0; i < sceneList.Count; i++)
      {
        var scene = sceneList[i];
        nameList.Add(scene.name);
      }
      PublicInterface publicInterface = new PublicInterface();
      publicInterface.FrameOrVv(this, nameList, new List<string> { }, StringId.addSceneLogic, (index) =>
      {
        var sceneSelecetd = sceneList[index];
        Input input = new Input();
        input.sid = sceneSelecetd.sid;
        input.condition_type = "10";
        Dictionary<string, string> dic = new Dictionary<string, string>();
        LogicMethod.CurrLogicMethod.dictionary(dic, "key", "scene");
        LogicMethod.CurrLogicMethod.dictionary(dic, "comparator", "=");
        LogicMethod.CurrLogicMethod.dictionary(dic, "data_type", "string");
        LogicMethod.CurrLogicMethod.dictionary(dic, "value", "on");
        input.condition.Add(dic);
        AddCondition(input);
        LogicMethod.CurrLogicMethod.RemoveAllView();
        AddLogic addLogic = new AddLogic();
        MainPage.BasePageView.AddChidren(addLogic);
        addLogic.Show();
        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      });
    }
    /// <summary>
    /// 添加地理围栏
    /// </summary>
    /// <param name="flMain">Fl main.</param>
    /// <param name="edit">If set to <c>true</c> edit.</param>
    public void LocationView(FrameLayout flMain, bool edit)
    {
      string strname = "";
      ///通过调试宝给的经纬度<标准GPS>
      double latitude = Entity.DB_ResidenceData.Instance.CurrentRegion.latitude;//纬度
      double longitude = Entity.DB_ResidenceData.Instance.CurrentRegion.longitude;//经度
      LogicMethod.CurrLogicMethod.WGS84_to_GCJ02(Entity.DB_ResidenceData.Instance.CurrentRegion.longitude, Entity.DB_ResidenceData.Instance.CurrentRegion.latitude, out longitude, out latitude);
      int r = 500;//默认半径
      if (edit)
      {
        for (var i = 0; i < Logic.currlogic.input.Count; i++)
        public AddInputType()
        {
          var input = Logic.currlogic.input[i];
          if (input.condition_type != "8")
          {
            continue;
          }
          if (input.condition[0]["value"] == "arrive")
          {
            //到达某地
            strname = Language.StringByID(StringId.daoda);
          }
          else
          {
            //离开地点
            strname = Language.StringByID(StringId.likai);
          }
          //再一次编辑地理围栏 <控件暂时不支持显示记录上一次的状态>
          if (!string.IsNullOrEmpty(input.geo_fence.latitude) && !string.IsNullOrEmpty(input.geo_fence.longitude))
          {
            ////纬度
            //var latitude1 = Convert.ToDouble(input.geo_fence.latitude);
            ////经度
            //var longitude1 = Convert.ToDouble(input.geo_fence.longitude);
            //半径
            r = int.Parse(input.geo_fence.radius);
            //WGS84坐标转高德坐标
            //LogicMethod.CurrLogicMethod.WGS84_to_GCJ02(longitude1, latitude1, out longitude, out latitude);
          }
            Tag = "Logic";
        }
      }
      PublicInterface publicInterface = new PublicInterface();
      var list = publicInterface.GetViewList("地理围栏");
      publicInterface.SingleSelectionShow(flMain, list, Language.StringByID(StringId.likiadaoda), strname, (str) =>
       {
        /// <summary>
        /// 默认选中是房间时:全部区域
        /// </summary>
        private Entity.Room selectedRoom = new Entity.Room { roomId = "6688" };
        /// <summary>
        /// 表示是(条件/目标)
        /// </summary>
        private string if_type = LogicMethod.condition_if;
        public void Show()
        {
            LogicView.TopView topView = new LogicView.TopView();
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
            {
                RemoveFromParent();
            };
            topView.topNameBtn.TextID = StringId.selectionCondition;
         string valueStr = "arrive";
         if (str == Language.StringByID(StringId.daoda))
         {
           //到达某地
           valueStr = "arrive";
         }
         else
         {
           //离开
           valueStr = "leave";
         }
            FrameLayout viewLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(64),
                Width = Application.GetRealWidth(LogicView.TextSize.view375),
                Height = Application.GetRealHeight(LogicView.TextSize.view667 - 64),
                BackgroundColor = CSS.CSS_Color.viewMiddle,
            };
            this.AddChidren(viewLayout);
            #region 时间  功能 室外变化
            //时间
            LogicView.SelectTypeView timeView = new LogicView.SelectTypeView();
            timeView.btnText.TextID = StringId.time;
            timeView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png";
            if (MainView.IsGatewayType)
            {
                viewLayout.AddChidren(timeView.FLayoutView());
            }
            //场景
            LogicView.SelectTypeView sceneView = new LogicView.SelectTypeView();
            sceneView.frameLayout.Y = timeView.frameLayout.Bottom;
            sceneView.btnText.TextID = StringId.Scenes;
            sceneView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png";
            viewLayout.AddChidren(sceneView.FLayoutView());
            //室外变化
            LogicView.SelectTypeView shiwaiView = new LogicView.SelectTypeView();
            shiwaiView.frameLayout.Y = sceneView.frameLayout.Bottom;
            shiwaiView.btnText.TextID = StringId.shiwaibainhua;
            shiwaiView.btnIcon.UnSelectedImagePath = "LogicIcon/changesinoutdoor.png";
            if (MainView.IsGatewayType)
            {
                viewLayout.AddChidren(shiwaiView.FLayoutView());
            }
            //地理围栏
            LogicView.SelectTypeView likiadaodaView = new LogicView.SelectTypeView();
            likiadaodaView.frameLayout.Y = shiwaiView.frameLayout.Bottom;
            likiadaodaView.btnText.TextID = StringId.likiadaoda;
            likiadaodaView.btnIcon.UnSelectedImagePath = "LogicIcon/location.png";
            if (MainView.IsGatewayType)
            {
                viewLayout.AddChidren(likiadaodaView.FLayoutView());
            }
            ////功能
            ///产品经理君焕要求,设备功能移到这里。<2022-3-7>
            new FunTpye(LogicMethod.condition_if).FunTypeView(viewLayout, likiadaodaView.frameLayout.Bottom,4);
            #endregion
            #region  所有点击事件
            //时间
            timeView.btnClick.MouseUpEventHandler += (sen, e) =>
      {
          TimeTpye timeTpye = new TimeTpye();
          MainPage.BasePageView.AddChidren(timeTpye);
          timeTpye.Show();
          MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      };
            //场景点击事件
            sceneView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                SceneMethod();
            };
            //室外变化
            shiwaiView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                //if (string.IsNullOrEmpty(Entity.DB_ResidenceData.Instance.CurrentRegion.homeAddress))//.longitude == 0 && Entity.DB_ResidenceData.Instance.CurrentRegion.latitude == 0)
                //{
                //    new PublicAssmebly().TipMsg(StringId.tip, StringId.GatewayLocationInformationIsNotConfigured);
                //    return;
                //}
                Weather weather = new Weather();
                MainPage.BasePageView.AddChidren(weather);
                weather.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            //地理围栏
            likiadaodaView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                LocationView(this, false);
            };
            #endregion
        }
        /// <summary>
        /// 添加场景
        /// </summary>
        public void SceneMethod()
        {
            var sceneList = LogicMethod.CurrLogicMethod.GetSceneList();
            List<string> nameList = new List<string>();
            for (int i = 0; i < sceneList.Count; i++)
            {
                var scene = sceneList[i];
                nameList.Add(scene.name);
            }
            PublicInterface publicInterface = new PublicInterface();
            publicInterface.FrameOrVv(this, nameList, new List<string> { }, StringId.addSceneLogic, (index) =>
            {
                var sceneSelecetd = sceneList[index];
                Input input = new Input();
                input.sid = sceneSelecetd.sid;
                input.condition_type = "10";
                Dictionary<string, string> dic = new Dictionary<string, string>();
                LogicMethod.CurrLogicMethod.dictionary(dic, "key", "scene");
                LogicMethod.CurrLogicMethod.dictionary(dic, "comparator", "=");
                LogicMethod.CurrLogicMethod.dictionary(dic, "data_type", "string");
                LogicMethod.CurrLogicMethod.dictionary(dic, "value", "on");
                input.condition.Add(dic);
                AddCondition(input);
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
        }
        /// <summary>
        /// 添加地理围栏
        /// </summary>
        /// <param name="flMain">Fl main.</param>
        /// <param name="edit">If set to <c>true</c> edit.</param>
        public void LocationView(FrameLayout flMain, bool edit)
        {
            string strname = "";
            ///通过调试宝给的经纬度<标准GPS>
            double latitude = Entity.DB_ResidenceData.Instance.CurrentRegion.latitude;//纬度
            double longitude = Entity.DB_ResidenceData.Instance.CurrentRegion.longitude;//经度
            LogicMethod.CurrLogicMethod.WGS84_to_GCJ02(Entity.DB_ResidenceData.Instance.CurrentRegion.longitude, Entity.DB_ResidenceData.Instance.CurrentRegion.latitude, out longitude, out latitude);
            int r = 500;//默认半径
            if (edit)
            {
                for (var i = 0; i < Logic.currlogic.input.Count; i++)
                {
                    var input = Logic.currlogic.input[i];
                    if (input.condition_type != "8")
                    {
                        continue;
                    }
                    if (input.condition[0]["value"] == "arrive")
                    {
                        //到达某地
                        strname = Language.StringByID(StringId.daoda);
                    }
                    else
                    {
                        //离开地点
                        strname = Language.StringByID(StringId.likai);
                    }
                    //再一次编辑地理围栏 <控件暂时不支持显示记录上一次的状态>
                    if (!string.IsNullOrEmpty(input.geo_fence.latitude) && !string.IsNullOrEmpty(input.geo_fence.longitude))
                    {
                        ////纬度
                        //var latitude1 = Convert.ToDouble(input.geo_fence.latitude);
                        ////经度
                        //var longitude1 = Convert.ToDouble(input.geo_fence.longitude);
                        //半径
                        r = int.Parse(input.geo_fence.radius);
                        //WGS84坐标转高德坐标
                        //LogicMethod.CurrLogicMethod.WGS84_to_GCJ02(longitude1, latitude1, out longitude, out latitude);
                    }
                }
            }
            PublicInterface publicInterface = new PublicInterface();
            var list = publicInterface.GetViewList("地理围栏");
            publicInterface.SingleSelectionShow(flMain, list, Language.StringByID(StringId.likiadaoda), strname, (str) =>
             {
                 string valueStr = "arrive";
                 if (str == Language.StringByID(StringId.daoda))
                 {
                     //到达某地
                     valueStr = "arrive";
                 }
                 else
                 {
                     //离开
                     valueStr = "leave";
                 }
#if __Android__
                 //申请定位权限
                 ((BaseActivity)Application.Activity).SetGPSLocationPermission((result1) =>
                  {
                    if (result1 == false) { return; }
                       //申请定位权限
                       ((BaseActivity)Application.Activity).SetGPSLocationPermission((result1) =>
                        {
                            if (result1 == false) { return; }
                  //申请允许程序写入外部存储,如SD卡上写文件
                  ((BaseActivity)Application.Activity).SetPermission((result2) =>
                  {
                    if (result2 == false) { return; }
                       //读取电话状态权限
                       ((BaseActivity)Application.Activity).SetPermission((result3) =>
                       {
                         if (result3 == false) { return; }
                         //调用方法,跳转页面
                         Location(valueStr, strname, latitude, longitude, r);
                       }, "android.permission.READ_PHONE_STATE");
                        //申请允许程序写入外部存储,如SD卡上写文件
                        ((BaseActivity)Application.Activity).SetPermission((result2) =>
                        {
                            if (result2 == false) { return; }
                             //读取电话状态权限
                             ((BaseActivity)Application.Activity).SetPermission((result3) =>
                             {
                                 if (result3 == false) { return; }
                                 //调用方法,跳转页面
                                 Location(valueStr, strname, latitude, longitude, r);
                             }, "android.permission.READ_PHONE_STATE");
                  }, "android.permission.WRITE_EXTERNAL_STORAGE");
                  });
                        }, "android.permission.WRITE_EXTERNAL_STORAGE");
                        });
#endif
#if __IOS__
               //调用方法,跳转页面
                  Location(valueStr, strname, latitude, longitude, r);
#endif
       });
             });
    }
    /// <summary>
    /// 地理围栏View
    /// </summary>
    /// <param name="valueStr">进入(arrive)或者离开(leave)</param>
    /// <param name="strname"></param>
    /// <param name="latitude">纬度</param>
    /// <param name="longitude">经度</param>
    /// <param name="r">半径(默认500米)</param>
    private void Location(string valueStr, string strname, double latitude, double longitude, int r)
    {
      if (r == 0)
      {
        //按道理说不会出现
        r = 500;
      }
      //调用方法,跳转页面
      GDMapKit.Show((mLatitude, mLongitude, mRadius, name) =>
      {
        //高德坐标转WGS84坐标(高德地图设置GPS)
        double out_lng, out_lat;
        LogicMethod.CurrLogicMethod.GCJ02_to_WGS84(mLongitude, mLatitude, out out_lng, out out_lat);
        Input input = new Input();
        input.sid = LogicMethod.CurrLogicMethod.NewSid();
        input.condition_type = "8";
        Dictionary<string, string> dic = new Dictionary<string, string>();
        LogicMethod.CurrLogicMethod.dictionary(dic, "key", "direction");
        LogicMethod.CurrLogicMethod.dictionary(dic, "comparator", "=");
        LogicMethod.CurrLogicMethod.dictionary(dic, "data_type", "string");
        LogicMethod.CurrLogicMethod.dictionary(dic, "value", valueStr);
        input.condition.Add(dic);
        //纬度
        input.geo_fence.latitude = out_lat.ToString();
        //经度
        input.geo_fence.longitude = out_lng.ToString();
        //半径<单位米>
        input.geo_fence.radius = mRadius.ToString();
        AddCondition(input);
        LogicMethod.CurrLogicMethod.RemoveAllView();
        AddLogic addLogic = new AddLogic();
        MainPage.BasePageView.AddChidren(addLogic);
        addLogic.Show();
        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      }, strname, Language.StringByID(StringId.save), true, latitude, longitude, r);
    }
    /// <summary>
    /// 添加条件
    /// </summary>
    /// <param name="input"></param>
    private void AddCondition(Input input)
    {
      ///记录索引值
      int index = -1;
      for (var i = 0; i < Logic.currlogic.input.Count; i++)
      {
        var condition_type = Logic.currlogic.input[i].condition_type;
        if (condition_type == "10" || condition_type == "8")
        {
          //支持场景=10,地理围栏=8
          ///找到标记索引,退出循环体
          index = i;
          break;
        }
      }
      if (index != -1)
      {
        //移除旧数据
        Logic.currlogic.input.RemoveAt(index);
        //新数据插入旧数据的位置
        Logic.currlogic.input.Insert(index, input);
      }
      else
      {
        Logic.currlogic.input.Add(input);
      }
        /// <summary>
        /// 地理围栏View
        /// </summary>
        /// <param name="valueStr">进入(arrive)或者离开(leave)</param>
        /// <param name="strname"></param>
        /// <param name="latitude">纬度</param>
        /// <param name="longitude">经度</param>
        /// <param name="r">半径(默认500米)</param>
        private void Location(string valueStr, string strname, double latitude, double longitude, int r)
        {
            if (r == 0)
            {
                //按道理说不会出现
                r = 500;
            }
            //调用方法,跳转页面
            GDMapKit.Show((mLatitude, mLongitude, mRadius, name) =>
            {
                //高德坐标转WGS84坐标(高德地图设置GPS)
                double out_lng, out_lat;
                LogicMethod.CurrLogicMethod.GCJ02_to_WGS84(mLongitude, mLatitude, out out_lng, out out_lat);
                Input input = new Input();
                input.sid = LogicMethod.CurrLogicMethod.NewSid();
                input.condition_type = "8";
                Dictionary<string, string> dic = new Dictionary<string, string>();
                LogicMethod.CurrLogicMethod.dictionary(dic, "key", "direction");
                LogicMethod.CurrLogicMethod.dictionary(dic, "comparator", "=");
                LogicMethod.CurrLogicMethod.dictionary(dic, "data_type", "string");
                LogicMethod.CurrLogicMethod.dictionary(dic, "value", valueStr);
                input.condition.Add(dic);
                //纬度
                input.geo_fence.latitude = out_lat.ToString();
                //经度
                input.geo_fence.longitude = out_lng.ToString();
                //半径<单位米>
                input.geo_fence.radius = mRadius.ToString();
                AddCondition(input);
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            }, strname, Language.StringByID(StringId.save), true, latitude, longitude, r);
        }
        /// <summary>
        /// 添加条件
        /// </summary>
        /// <param name="input"></param>
        private void AddCondition(Input input)
        {
            ///记录索引值
            int index = -1;
            for (var i = 0; i < Logic.currlogic.input.Count; i++)
            {
                var condition_type = Logic.currlogic.input[i].condition_type;
                if (condition_type == "10" || condition_type == "8")
                {
                    //支持场景=10,地理围栏=8
                    ///找到标记索引,退出循环体
                    index = i;
                    break;
                }
            }
            if (index != -1)
            {
                //移除旧数据
                Logic.currlogic.input.RemoveAt(index);
                //新数据插入旧数据的位置
                Logic.currlogic.input.Insert(index, input);
            }
            else
            {
                Logic.currlogic.input.Add(input);
            }
        }
    }
  }
}