xm
2021-11-25 47fbfe1cd58bb82b45dfc0a5398799bd856b1fb0
2021-11-25=01
3个文件已修改
897 ■■■■ 已修改文件
HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs 760 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/AddInputType.cs
@@ -158,9 +158,8 @@
        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
      });
    }
    /// <summary>
    /// 地理围栏View
    /// 添加地理围栏
    /// </summary>
    /// <param name="flMain">Fl main.</param>
    /// <param name="edit">If set to <c>true</c> edit.</param>
@@ -170,9 +169,8 @@
      ///通过调试宝给的经纬度<标准GPS>
      double latitude = Entity.DB_ResidenceData.Instance.CurrentRegion.latitude;//纬度
      double longitude = Entity.DB_ResidenceData.Instance.CurrentRegion.longitude;//经度
                                                                                  //WGS84坐标转高德坐标
      LogicMethod.CurrLogicMethod.WGS84_to_GCJ02(Entity.DB_ResidenceData.Instance.CurrentRegion.longitude, Entity.DB_ResidenceData.Instance.CurrentRegion.latitude, out longitude, out latitude);
      int r = 500;//半径
      int r = 500;//默认半径
      if (edit)
      {
        for (var i = 0; i < Logic.currlogic.input.Count; i++)
@@ -192,18 +190,18 @@
            //离开地点
            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);
          //}
          //再一次编辑地理围栏 <控件暂时不支持显示记录上一次的状态>
          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();
@@ -237,37 +235,8 @@
                       ((BaseActivity)Application.Activity).SetPermission((result3) =>
                       {
                         if (result3 == false) { return; }
                         //调用方法,跳转页面
                         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);
                         Location(valueStr, strname, latitude, longitude, r);
                       }, "android.permission.READ_PHONE_STATE");
                  }, "android.permission.WRITE_EXTERNAL_STORAGE");
@@ -275,40 +244,57 @@
#endif
#if __IOS__
               //调用方法,跳转页面
               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", "arrive");
            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);
                  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>
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -864,7 +864,7 @@
      {
        try
        {
          //获取逻辑ID列表<备注:如果只针对当前手机的话,可以直接拿缓存数据自动化列表遍历>
          //获取逻辑ID列表,目前针对所有<备注:如果只针对当前手机的话,可以直接拿缓存数据自动化列表遍历>
          var idStr = Send.GetLogicIdList();
          if (idStr.Code == "0" && idStr.Data != null && idStr.Data.ToString() != "")
          {
@@ -905,6 +905,7 @@
                //离开
                direction = "leave";
              }
              ///遍历缓存列表<不为空说明数据已经推送过,不再推送>
              var isPush = pushList.Find((o) => o.homeId == HomeId && o.userId == UserInfo.Current.ID && o.userLogicId == logicDate.userLogicId && o.arriveOnLeave == direction);
              if (isPush == null)
              {
HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
@@ -8,408 +8,406 @@
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
    public  class Send
  public class Send
  {
    /// <summary>
    /// 调用获取住宅子账号列表
    /// </summary>
    public static List<ResidenceMemberInfo> GetResidenceMemberAccount()
    {
        /// <summary>
        /// 调用获取住宅子账号列表
        /// </summary>
        public static List<ResidenceMemberInfo> GetResidenceMemberAccount()
      var responePack = new HttpServerRequest().GetResidenceMemberAccount();
      if (responePack.Code == StateCode.SUCCESS)
      {
        return Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceMemberInfo>>(responePack.Data.ToString());
      }
      //失败
      else
      {
        //提示
        IMessageCommon.Current.ShowErrorInfoAlter(responePack.Code);
      }
      return new List<ResidenceMemberInfo>();
    }
    /// <summary>
    /// 获取逻辑ID列表
    /// </summary>
    /// <returns></returns>
    public static ResponsePackNew GetLogicIdList()
    {
      var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_List);
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        GetLogicIdList();
      }
      return responsePackNew;
    }
    /// <summary>
    /// 获取逻辑
    /// </summary>
    /// <param name="listIdList">逻辑ID列表</param>
    /// <returns></returns>
    public static ResponsePackNew GetLogic(List<string> listIdList)
    {
      var jArray = new JArray { };
      for (int i = 0; i < listIdList.Count; i++)
      {
        jArray.Add(listIdList[i]);
      }
      var jObject = new JObject { { "userLogicIds", jArray } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Info);
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        GetLogic(listIdList);
      }
      return responsePackNew;
    }
    /// <summary>
    /// 添加自动化命令
    /// </summary>
    /// <param name="logic"></param>
    /// <returns></returns>
    public static ResponsePackNew AddLogic(Logic logic)
    {
      ResponsePackNew responsePackNew = null;
      try
      {
        var cycleJObject = new JObject { };
        var cyclevaluejArray = new JArray { };
        cycleJObject.Add("type", logic.cycle.type);
        foreach (var dictionary in logic.cycle.value)
        {
          cyclevaluejArray.Add(dictionary);
        }
        cycleJObject.Add("value", cyclevaluejArray);
            var responePack = new HttpServerRequest().GetResidenceMemberAccount();
            if (responePack.Code == StateCode.SUCCESS)
            {
                return Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceMemberInfo>>(responePack.Data.ToString());
            }
            //失败
            else
            {
                //提示
                IMessageCommon.Current.ShowErrorInfoAlter(responePack.Code);
            }
            return new List<ResidenceMemberInfo>();
        var inputArray = new JArray { };
        foreach (var dictionary in logic.input)
        {
          var inputTypeJOb = new JObject { };
          inputTypeJOb.Add("sid", dictionary.sid);
          inputTypeJOb.Add("condition_type", dictionary.condition_type);
          var conditionArray = new JArray { };
          foreach (var dic in dictionary.condition)
          {
            var conditionJOb = new JObject { };
            conditionJOb.Add("key", dic["key"]);
            conditionJOb.Add("comparator", dic["comparator"]);
            conditionJOb.Add("data_type", dic["data_type"]);
            conditionJOb.Add("value", dic["value"]);
            conditionArray.Add(conditionJOb);
          }
          inputTypeJOb.Add("condition", conditionArray);
          if (dictionary.condition_type == "8")
          {
            ///地理围栏
            var geo_fencejob = new JObject();
            geo_fencejob.Add("longitude", dictionary.geo_fence.longitude);
            geo_fencejob.Add("latitude", dictionary.geo_fence.latitude);
            geo_fencejob.Add("radius", dictionary.geo_fence.radius);
            inputTypeJOb.Add("geo_fence", geo_fencejob);
          }
          inputArray.Add(inputTypeJOb);
        }
        /// <summary>
        /// 获取逻辑ID列表
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew GetLogicIdList()
        var outputArray = new JArray { };
        foreach (var dictionary in logic.output)
        {
            var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_List);
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
            {
                RefreshToken();
                GetLogicIdList();
            }
            return responsePackNew;
        }
        /// <summary>
        /// 获取逻辑
        /// </summary>
        /// <param name="listIdList">逻辑ID列表</param>
        /// <returns></returns>
        public static ResponsePackNew GetLogic(List<string> listIdList)
        {
            var jArray = new JArray { };
            for (int i = 0; i < listIdList.Count; i++)
            {
                jArray.Add(listIdList[i]);
            }
            var jObject = new JObject { { "userLogicIds", jArray } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Info);
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
            {
                RefreshToken();
                GetLogic(listIdList);
            }
            return responsePackNew;
        }
        /// <summary>
        /// 添加自动化命令
        /// </summary>
        /// <param name="logic"></param>
        /// <returns></returns>
        public static ResponsePackNew AddLogic(Logic logic)
        {
            ResponsePackNew responsePackNew = null;
            try
            {
                var cycleJObject = new JObject { };
                var cyclevaluejArray = new JArray { };
                cycleJObject.Add("type", logic.cycle.type);
                foreach (var dictionary in logic.cycle.value)
                {
                    cyclevaluejArray.Add(dictionary);
                }
                cycleJObject.Add("value", cyclevaluejArray);
                var inputArray = new JArray { };
                foreach (var dictionary in logic.input)
                {
                    var inputTypeJOb = new JObject { };
                    inputTypeJOb.Add("sid", dictionary.sid);
                    inputTypeJOb.Add("condition_type", dictionary.condition_type);
                    var conditionArray = new JArray { };
                    foreach (var dic in dictionary.condition)
                    {
                        var conditionJOb = new JObject { };
                        conditionJOb.Add("key", dic["key"]);
                        conditionJOb.Add("comparator", dic["comparator"]);
                        conditionJOb.Add("data_type", dic["data_type"]);
                        conditionJOb.Add("value", dic["value"]);
                        conditionArray.Add(conditionJOb);
                    }
                    inputTypeJOb.Add("condition",conditionArray);
                    if (dictionary.condition_type=="8") {
                        ///地理围栏
                        var geo_fencejob = new JObject();
                        geo_fencejob.Add("longitude", dictionary.geo_fence.longitude);
                        geo_fencejob.Add("latitude", dictionary.geo_fence.latitude);
                        geo_fencejob.Add("radius", dictionary.geo_fence.radius);
                        inputTypeJOb.Add("geo_fence", geo_fencejob);
                    }
                    inputArray.Add(inputTypeJOb);
                }
                var outputArray = new JArray { };
                foreach (var dictionary in logic.output)
                {
                    var outputTypeJOb = new JObject { };
                    outputTypeJOb.Add("sid", dictionary.sid);
                    outputTypeJOb.Add("delay", dictionary.delay);
                    outputTypeJOb.Add("target_type", dictionary.target_type);
                    var statusArray = new JArray { };
                    foreach (var dic in dictionary.status)
                    {
                        var statusJOb = new JObject { };
                        statusJOb.Add("key", dic["key"]);
                        statusJOb.Add("value", dic["value"]);
                        statusArray.Add(statusJOb);
                    }
                    outputTypeJOb.Add("status", statusArray);
                    outputArray.Add(outputTypeJOb);
                }
                var noticeConfigJObject = new JObject();
                noticeConfigJObject.Add("enable", logic.noticeConfig.enable);
                noticeConfigJObject.Add("noticeContent", logic.noticeConfig.noticeContent);
                var pushConfigsArray = new JArray { };
                if (logic.pushConfigs.Count > 0)
                {   // 推送文本
                    foreach (var pushConfig in logic.pushConfigs)
                    {
                        var pushConfigJob = new JObject { };
                        pushConfigJob.Add("pushMethod", pushConfig.pushMethod);
                        var accountArray = new JArray { };
                        foreach (var account in pushConfig.pushTarget)
                        {
                            accountArray.Add(account);
                        }
                        pushConfigJob.Add("pushTarget", accountArray);
                        pushConfigsArray.Add(pushConfigJob);
                    }
                }
                var logicjArray = new JArray { };
                var logicIfon = new JObject { };
                logicIfon.Add("sid", logic.sid);
                logicIfon.Add("gatewayId", LogicMethod.CurrLogicMethod.GatewayId);
                logicIfon.Add("name", logic.name);
                logicIfon.Add("relation", logic.relation);
                logicIfon.Add("enable", logic.enable);
                logicIfon.Add("cycle", cycleJObject);
                logicIfon.Add("input", inputArray);
                logicIfon.Add("output", outputArray);
                logicIfon.Add("noticeConfig", noticeConfigJObject);
                logicIfon.Add("pushConfigs", pushConfigsArray);
                logicjArray.Add(logicIfon);
                var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
                responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Add,5);
                //如果是token过期则刷新token
                if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
                {
                    RefreshToken();
                    AddLogic(logic);
                }
            }
            catch (Exception e)
            {
                var dd = e.Message;
            }
            return responsePackNew;
        }
        /// <summary>
        /// 编辑更新逻辑
        /// </summary>
        /// <param name="logic"></param>
        /// <returns></returns>
        public static ResponsePackNew UpdateLogic(Logic logic)
        {
            ResponsePackNew responsePackNew = null;
            try
            {
                var cycleJObject = new JObject { };
                var cyclevaluejArray = new JArray { };
                cycleJObject.Add("type", logic.cycle.type);
                foreach (var dictionary in logic.cycle.value)
                {
                    cyclevaluejArray.Add(dictionary);
                }
                cycleJObject.Add("value", cyclevaluejArray);
                var inputArray = new JArray { };
                foreach (var dictionary in logic.input)
                {
                    var inputTypeJOb = new JObject { };
                    inputTypeJOb.Add("sid", dictionary.sid);
                    inputTypeJOb.Add("condition_type", dictionary.condition_type);
                    var conditionArray = new JArray { };
                    foreach (var dic in dictionary.condition)
                    {
                           var conditionJOb = new JObject { };
                        conditionJOb.Add("key", dic["key"]);
                        var c1 = "";
                        dic.TryGetValue("comparator", out c1);
                        c1 = string.IsNullOrEmpty(c1) ? "" : c1;
                        conditionJOb.TryAdd("comparator", c1);
                        conditionJOb.Add("data_type", dic["data_type"]);
                        conditionJOb.Add("value", dic["value"]);
                        conditionArray.Add(conditionJOb);
                        if (dictionary.condition_type == "8")
                        {
                            ///地理围栏
                            var geo_fencejob = new JObject();
                            geo_fencejob.Add("longitude", dictionary.geo_fence.longitude);
                            geo_fencejob.Add("latitude", dictionary.geo_fence.latitude);
                            geo_fencejob.Add("radius", dictionary.geo_fence.radius);
                            inputTypeJOb.Add("geo_fence", geo_fencejob);
                        }
                    }
                    inputTypeJOb.Add("condition", conditionArray);
                    inputArray.Add(inputTypeJOb);
                }
                var outputArray = new JArray { };
                foreach (var dictionary in logic.output)
                {
                    var outputTypeJOb = new JObject { };
                    outputTypeJOb.Add("sid", dictionary.sid);
                    outputTypeJOb.Add("delay", dictionary.delay);
                    outputTypeJOb.Add("target_type", dictionary.target_type);
                    var statusArray = new JArray { };
                    foreach (var dic in dictionary.status)
                    {
                        var statusJOb = new JObject { };
                        statusJOb.Add("key", dic["key"]);
                        statusJOb.Add("value", dic["value"]);
                        statusArray.Add(statusJOb);
                    }
                    outputTypeJOb.Add("status", statusArray);
                    outputArray.Add(outputTypeJOb);
                }
                var noticeConfigJObject = new JObject();
                noticeConfigJObject.Add("enable", logic.noticeConfig.enable);
                noticeConfigJObject.Add("noticeContent", logic.noticeConfig.noticeContent);
                var pushConfigsArray = new JArray { };
                if (logic.pushConfigs.Count > 0)
                {
                    // 推送文本
                    foreach (var pushConfig in logic.pushConfigs)
                    {
                        var pushConfigJob = new JObject { };
                        pushConfigJob.Add("pushMethod", pushConfig.pushMethod);
                        var accountArray = new JArray { };
                        foreach (var account in pushConfig.pushTarget)
                        {
                            accountArray.Add(account);
                        }
                        pushConfigJob.Add("pushTarget", accountArray);
                        pushConfigsArray.Add(pushConfigJob);
                    }
                }
                var logicjArray = new JArray { };
                var logicIfon = new JObject { };
                logicIfon.Add("userLogicId", logic.userLogicId);
                logicIfon.Add("sid", logic.sid);
                logicIfon.Add("gatewayId", LogicMethod.CurrLogicMethod.GatewayId);
                logicIfon.Add("name", logic.name);
                logicIfon.Add("relation", logic.relation);
                logicIfon.Add("enable", logic.enable);
                logicIfon.Add("cycle", cycleJObject);
                logicIfon.Add("input", inputArray);
                logicIfon.Add("output", outputArray);
                logicIfon.Add("noticeConfig", noticeConfigJObject);
                logicIfon.Add("pushConfigs", pushConfigsArray);
                logicjArray.Add(logicIfon);
                var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
                string str = jObject.ToString();
                responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Update,5);
                //如果是token过期则刷新token
                if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
                {
                    RefreshToken();
                    UpdateLogic(logic);
                }
            }
            catch (Exception e)
            {
                var dd = e.Message;
            }
            return responsePackNew;
        }
        /// <summary>
        /// 删除逻辑
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew DelLogic(Logic logic)
        {
            var jArray = new JArray { };
            jArray.Add(logic.userLogicId);
            var jObject = new JObject { { "userLogicIds", jArray } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Delete);
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
            {
                RefreshToken();
                DelLogic(logic);
            }
            return responsePackNew;
        }
        /// <summary>
        /// 逻辑开关
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew SwitchLogic(Logic logic)
        {
            var jArray = new JArray { };
            var job = new JObject { { "userLogicId", logic.userLogicId } , { "enable", logic.enable } };
            jArray.Add(job);
            var jObject = new JObject { { "logics", jArray } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Enable);
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
            {
                RefreshToken();
                SwitchLogic(logic);
            }
            return responsePackNew;
          var outputTypeJOb = new JObject { };
          outputTypeJOb.Add("sid", dictionary.sid);
          outputTypeJOb.Add("delay", dictionary.delay);
          outputTypeJOb.Add("target_type", dictionary.target_type);
          var statusArray = new JArray { };
          foreach (var dic in dictionary.status)
          {
            var statusJOb = new JObject { };
            statusJOb.Add("key", dic["key"]);
            statusJOb.Add("value", dic["value"]);
            statusArray.Add(statusJOb);
          }
          outputTypeJOb.Add("status", statusArray);
          outputArray.Add(outputTypeJOb);
        }
        /// <summary>
        /// 自动化地理围栏状态上报
        /// </summary>
        /// <param name="userLogicId">自动化云端id<备注:logicSid与userLogicId 不能同时为空></param>
        /// <param name="logicSid">自动化sid<备注:logicSid与userLogicId 不能同时为空></param>
        /// <param name="direction">arrive:到达(进入) leave:离开</param>
        /// <returns></returns>
        public static bool GeoFenceStateReport(string userLogicId, string logicSid, string direction)
        {
            var jObject = new JObject();
            jObject.Add("homeId", LogicMethod.CurrLogicMethod.HomeId);
            jObject.Add("userLogicId", userLogicId);
            jObject.Add("sid", logicSid);
            jObject.Add("direction", direction);
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_GeoFenceStateReport);
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
        var noticeConfigJObject = new JObject();
        noticeConfigJObject.Add("enable", logic.noticeConfig.enable);
        noticeConfigJObject.Add("noticeContent", logic.noticeConfig.noticeContent);
        var pushConfigsArray = new JArray { };
        if (logic.pushConfigs.Count > 0)
        {   // 推送文本
          foreach (var pushConfig in logic.pushConfigs)
          {
            var pushConfigJob = new JObject { };
            pushConfigJob.Add("pushMethod", pushConfig.pushMethod);
            var accountArray = new JArray { };
            foreach (var account in pushConfig.pushTarget)
            {
                RefreshToken();
                GeoFenceStateReport(userLogicId, logicSid, direction);
              accountArray.Add(account);
            }
            if (responsePackNew.Code == "0")
            pushConfigJob.Add("pushTarget", accountArray);
            pushConfigsArray.Add(pushConfigJob);
          }
        }
        var logicjArray = new JArray { };
        var logicIfon = new JObject { };
        logicIfon.Add("sid", logic.sid);
        logicIfon.Add("gatewayId", LogicMethod.CurrLogicMethod.GatewayId);
        logicIfon.Add("name", logic.name);
        logicIfon.Add("relation", logic.relation);
        logicIfon.Add("enable", logic.enable);
        logicIfon.Add("cycle", cycleJObject);
        logicIfon.Add("input", inputArray);
        logicIfon.Add("output", outputArray);
        logicIfon.Add("noticeConfig", noticeConfigJObject);
        logicIfon.Add("pushConfigs", pushConfigsArray);
        logicjArray.Add(logicIfon);
        var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
        responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Add, 5);
        //如果是token过期则刷新token
        if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
        {
          RefreshToken();
          AddLogic(logic);
        }
      }
      catch (Exception e)
      {
        var dd = e.Message;
      }
      return responsePackNew;
    }
    /// <summary>
    /// 编辑更新逻辑
    /// </summary>
    /// <param name="logic"></param>
    /// <returns></returns>
    public static ResponsePackNew UpdateLogic(Logic logic)
    {
      ResponsePackNew responsePackNew = null;
      try
      {
        var cycleJObject = new JObject { };
        var cyclevaluejArray = new JArray { };
        cycleJObject.Add("type", logic.cycle.type);
        foreach (var dictionary in logic.cycle.value)
        {
          cyclevaluejArray.Add(dictionary);
        }
        cycleJObject.Add("value", cyclevaluejArray);
        var inputArray = new JArray { };
        foreach (var dictionary in logic.input)
        {
          var inputTypeJOb = new JObject { };
          inputTypeJOb.Add("sid", dictionary.sid);
          inputTypeJOb.Add("condition_type", dictionary.condition_type);
          var conditionArray = new JArray { };
          foreach (var dic in dictionary.condition)
          {
            var conditionJOb = new JObject { };
            conditionJOb.Add("key", dic["key"]);
            var c1 = "";
            dic.TryGetValue("comparator", out c1);
            c1 = string.IsNullOrEmpty(c1) ? "" : c1;
            conditionJOb.TryAdd("comparator", c1);
            conditionJOb.Add("data_type", dic["data_type"]);
            conditionJOb.Add("value", dic["value"]);
            conditionArray.Add(conditionJOb);
            if (dictionary.condition_type == "8")
            {
                //成功
                return true;
              ///地理围栏
              var geo_fencejob = new JObject();
              geo_fencejob.Add("longitude", dictionary.geo_fence.longitude);
              geo_fencejob.Add("latitude", dictionary.geo_fence.latitude);
              geo_fencejob.Add("radius", dictionary.geo_fence.radius);
              inputTypeJOb.Add("geo_fence", geo_fencejob);
            }
            //失败
            return false;
          }
          inputTypeJOb.Add("condition", conditionArray);
          inputArray.Add(inputTypeJOb);
        }
        /// <summary>
        ///请求服务器(与住宅有关:例如;homeId)
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 3)
        var outputArray = new JArray { };
        foreach (var dictionary in logic.output)
        {
            var requestJson = HttpUtil.GetSignRequestJson(o);
            return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
          var outputTypeJOb = new JObject { };
          outputTypeJOb.Add("sid", dictionary.sid);
          outputTypeJOb.Add("delay", dictionary.delay);
          outputTypeJOb.Add("target_type", dictionary.target_type);
          var statusArray = new JArray { };
          foreach (var dic in dictionary.status)
          {
            var statusJOb = new JObject { };
            statusJOb.Add("key", dic["key"]);
            statusJOb.Add("value", dic["value"]);
            statusArray.Add(statusJOb);
          }
          outputTypeJOb.Add("status", statusArray);
          outputArray.Add(outputTypeJOb);
        }
        }
        /// <summary>
        /// 请求服务器
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew RequestServer(object o, string api_Url)
        {
            var requestJson = HttpUtil.GetSignRequestJson(o);
            return HttpUtil.RequestHttpsPost(api_Url, requestJson);
        var noticeConfigJObject = new JObject();
        noticeConfigJObject.Add("enable", logic.noticeConfig.enable);
        noticeConfigJObject.Add("noticeContent", logic.noticeConfig.noticeContent);
        }
        /// <summary>
        /// 刷新Token
        /// </summary>
        public static void RefreshToken()
        var pushConfigsArray = new JArray { };
        if (logic.pushConfigs.Count > 0)
        {
            IMessageCommon.Current.StartRefreshToken();
          // 推送文本
          foreach (var pushConfig in logic.pushConfigs)
          {
            var pushConfigJob = new JObject { };
            pushConfigJob.Add("pushMethod", pushConfig.pushMethod);
            var accountArray = new JArray { };
            foreach (var account in pushConfig.pushTarget)
            {
              accountArray.Add(account);
            }
            pushConfigJob.Add("pushTarget", accountArray);
            pushConfigsArray.Add(pushConfigJob);
          }
        }
        var logicjArray = new JArray { };
        var logicIfon = new JObject { };
        logicIfon.Add("userLogicId", logic.userLogicId);
        logicIfon.Add("sid", logic.sid);
        logicIfon.Add("gatewayId", LogicMethod.CurrLogicMethod.GatewayId);
        logicIfon.Add("name", logic.name);
        logicIfon.Add("relation", logic.relation);
        logicIfon.Add("enable", logic.enable);
        logicIfon.Add("cycle", cycleJObject);
        logicIfon.Add("input", inputArray);
        logicIfon.Add("output", outputArray);
        logicIfon.Add("noticeConfig", noticeConfigJObject);
        logicIfon.Add("pushConfigs", pushConfigsArray);
        logicjArray.Add(logicIfon);
        var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
        string str = jObject.ToString();
        responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Update, 5);
        //如果是token过期则刷新token
        if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
        {
          RefreshToken();
          UpdateLogic(logic);
        }
      }
      catch (Exception e)
      {
        var dd = e.Message;
      }
      return responsePackNew;
    }
    /// <summary>
    /// 删除逻辑
    /// </summary>
    /// <returns></returns>
    public static ResponsePackNew DelLogic(Logic logic)
    {
      var jArray = new JArray { };
      jArray.Add(logic.userLogicId);
      var jObject = new JObject { { "userLogicIds", jArray } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Delete);
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        DelLogic(logic);
      }
      return responsePackNew;
    }
    /// <summary>
    /// 逻辑开关
    /// </summary>
    /// <returns></returns>
    public static ResponsePackNew SwitchLogic(Logic logic)
    {
      var jArray = new JArray { };
      var job = new JObject { { "userLogicId", logic.userLogicId }, { "enable", logic.enable } };
      jArray.Add(job);
      var jObject = new JObject { { "logics", jArray } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Enable);
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        SwitchLogic(logic);
      }
      return responsePackNew;
    }
    /// <summary>
    /// 自动化地理围栏状态上报
    /// </summary>
    /// <param name="userLogicId">自动化云端id<备注:logicSid与userLogicId 不能同时为空></param>
    /// <param name="logicSid">自动化sid<备注:logicSid与userLogicId 不能同时为空></param>
    /// <param name="direction">arrive:到达(进入) leave:离开</param>
    /// <returns></returns>
    public static bool GeoFenceStateReport(string userLogicId, string logicSid, string direction)
    {
      var jObject = new JObject();
      jObject.Add("homeId", LogicMethod.CurrLogicMethod.HomeId);
      jObject.Add("userLogicId", userLogicId);
      jObject.Add("sid", logicSid);
      jObject.Add("direction", direction);
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_GeoFenceStateReport);
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        GeoFenceStateReport(userLogicId, logicSid, direction);
      }
      if (responsePackNew.Code == "0")
      {
        //成功
        return true;
      }
      //失败
      return false;
    }
    /// <summary>
    ///请求服务器(与住宅有关:例如;homeId)
    /// </summary>
    /// <returns></returns>
    public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 3)
    {
      var requestJson = HttpUtil.GetSignRequestJson(o);
      return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
    }
    /// <summary>
    /// 请求服务器
    /// </summary>
    /// <returns></returns>
    public static ResponsePackNew RequestServer(object o, string api_Url)
    {
      var requestJson = HttpUtil.GetSignRequestJson(o);
      return HttpUtil.RequestHttpsPost(api_Url, requestJson);
    }
    /// <summary>
    /// 刷新Token
    /// </summary>
    public static void RefreshToken()
    {
      IMessageCommon.Current.StartRefreshToken();
    }
  }
}