hxb
2022-09-22 39cf2411b59772d56ee731f229f09ff472889bad
HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
@@ -10,11 +10,23 @@
{
  public class Send
  {
        private static Send s_Current = null;
        public static Send Current
        {
            get
            {
                if (s_Current == null)
                {
                    s_Current = new Send();
                }
                return s_Current;
            }
        }
        public List<Face> faceList = new List<Face>();
    /// <summary>
    /// 调用获取住宅子账号列表
    /// </summary>
    public static List<ResidenceMemberInfo> GetResidenceMemberAccount()
        public  List<ResidenceMemberInfo> GetResidenceMemberAccount()
    {
      var responePack = new HttpServerRequest().GetResidenceMemberAccount();
@@ -34,24 +46,28 @@
    /// 获取逻辑ID列表
    /// </summary>
    /// <returns></returns>
    public static ResponsePackNew GetLogicIdList()
        public ResponsePackNew GetLogicIdList(bool isTip = false)
    {
      var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_List);
            var jObject = new JObject { { "homeId", LogicMethod.Current.HomeId } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_List, "获取逻辑ID列表");
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        GetLogicIdList();
                GetLogicIdList(isTip);
            }
            if (Check(responsePackNew, isTip) == false)
            {
                return null;
      }
      return responsePackNew;
    }
    /// <summary>
    /// 获取逻辑
        /// 获取自动化详情
    /// </summary>
    /// <param name="listIdList">逻辑ID列表</param>
        /// <param name="listIdList">自动化ID列表</param>
    /// <returns></returns>
    public static ResponsePackNew GetLogic(List<string> listIdList)
        public  ResponsePackNew GetLogic(List<string> listIdList, bool isTip = false)
    {
      var jArray = new JArray { };
      for (int i = 0; i < listIdList.Count; i++)
@@ -59,12 +75,16 @@
        jArray.Add(listIdList[i]);
      }
      var jObject = new JObject { { "userLogicIds", jArray } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Info);
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Info, "获取自动化详情");
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        GetLogic(listIdList);
                GetLogic(listIdList,isTip);
            }
            if (Check(responsePackNew, isTip) == false)
            {
                return null;
      }
      return responsePackNew;
    }
@@ -73,7 +93,7 @@
    /// </summary>
    /// <param name="logic"></param>
    /// <returns></returns>
    public static ResponsePackNew AddLogic(Logic logic)
        public  ResponsePackNew AddLogic(Logic logic,bool isTip)
    {
      ResponsePackNew responsePackNew = null;
      try
@@ -94,7 +114,9 @@
          var inputTypeJOb = new JObject { };
          inputTypeJOb.Add("sid", dictionary.sid);
          inputTypeJOb.Add("condition_type", dictionary.condition_type);
                    if (dictionary.condition_type=="9") {
                        inputTypeJOb.Add("identifier", dictionary.identifier);
                    }
          var conditionArray = new JArray { };
          foreach (var dic in dictionary.condition)
          {
@@ -163,7 +185,7 @@
        var logicjArray = new JArray { };
        var logicIfon = new JObject { };
        logicIfon.Add("sid", logic.sid);
        logicIfon.Add("gatewayId", LogicMethod.CurrLogicMethod.GatewayId);
                logicIfon.Add("gatewayId", LogicMethod.Current.GatewayId);
        logicIfon.Add("tag", logic.tag);
        logicIfon.Add("name", logic.name);
        logicIfon.Add("relation", logic.relation);
@@ -174,14 +196,17 @@
        logicIfon.Add("noticeConfig", noticeConfigJObject);
        logicIfon.Add("pushConfigs", pushConfigsArray);
        logicjArray.Add(logicIfon);
       //string str = logicIfon.ToString();
        var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
        responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Add, 5);
                 var jObject = new JObject { { "homeId", LogicMethod.Current.HomeId }, { "logics", logicjArray } };
                responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Add, "添加自动化", 5);
        //如果是token过期则刷新token
        if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
        {
          RefreshToken();
          AddLogic(logic);
                    AddLogic(logic,isTip);
                }
                if (Check(responsePackNew, isTip) == false)
                {
                    return null;
        }
      }
      catch (Exception e)
@@ -191,11 +216,11 @@
      return responsePackNew;
    }
    /// <summary>
    /// 编辑更新逻辑
        /// 编辑更新自动化
    /// </summary>
    /// <param name="logic"></param>
    /// <returns></returns>
    public static ResponsePackNew UpdateLogic(Logic logic)
        public  ResponsePackNew UpdateLogic(Logic logic,bool isTip)
    {
      ResponsePackNew responsePackNew = null;
      try
@@ -215,7 +240,10 @@
          var inputTypeJOb = new JObject { };
          inputTypeJOb.Add("sid", dictionary.sid);
          inputTypeJOb.Add("condition_type", dictionary.condition_type);
                    if (dictionary.condition_type == "9")
                    {
                        inputTypeJOb.Add("identifier", dictionary.identifier);
                    }
          var conditionArray = new JArray { };
          foreach (var dic in dictionary.condition)
          {
@@ -289,7 +317,7 @@
        var logicIfon = new JObject { };
        logicIfon.Add("userLogicId", logic.userLogicId);
        logicIfon.Add("sid", logic.sid);
        logicIfon.Add("gatewayId", LogicMethod.CurrLogicMethod.GatewayId);
                logicIfon.Add("gatewayId", LogicMethod.Current.GatewayId);
        logicIfon.Add("tag", logic.tag);
        logicIfon.Add("name", logic.name);
        logicIfon.Add("relation", logic.relation);
@@ -301,57 +329,74 @@
        logicIfon.Add("pushConfigs", pushConfigsArray);
        logicjArray.Add(logicIfon);
        var jObject = new JObject { { "homeId", LogicMethod.CurrLogicMethod.HomeId }, { "logics", logicjArray } };
                var jObject = new JObject { { "homeId", LogicMethod.Current.HomeId }, { "logics", logicjArray } };
        string str = jObject.ToString();
        responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Update, 5);
                responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Update, "编辑更新自动化", 5);
        //如果是token过期则刷新token
        if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
        {
          RefreshToken();
          UpdateLogic(logic);
                    UpdateLogic(logic, isTip);
                }
                if (Check(responsePackNew, isTip) == false)
                {
                    return null;
        }
      }
      catch (Exception e)
      {
        var dd = e.Message;
                return null;
      }
      return responsePackNew;
    }
    /// <summary>
    /// 删除逻辑
        /// 删除自动化
    /// </summary>
        /// <param name="logic">当前对象</param>
        /// <param name="isTip">是否要提示</param>
    /// <returns></returns>
    public static ResponsePackNew DelLogic(Logic logic)
        public ResponsePackNew DelLogic(Logic logic,bool isTip)
    {
      var jArray = new JArray { };
      jArray.Add(logic.userLogicId);
      var jObject = new JObject { { "userLogicIds", jArray } };
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Delete);
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Delete, "删除自动化");
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        DelLogic(logic);
                DelLogic(logic, isTip);
            }
            if (Check(responsePackNew, isTip) == false)
            {
                return null;
      }
      return responsePackNew;
    }
    /// <summary> 
    /// 逻辑开关
        /// 自动化使能
    /// </summary>
        /// <param name="logic">当前对象</param>
        /// <param name="isTip">是否要提示</param>
    /// <returns></returns>
    public static ResponsePackNew SwitchLogic(Logic logic)
        public ResponsePackNew EnableLogic(Logic logic,bool isTip=false)
    {
      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);
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Enable, "自动化开关");
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        SwitchLogic(logic);
                EnableLogic(logic, isTip);
            }
            if (Check(responsePackNew, isTip) == false)
            {
                return null;
      }
      return responsePackNew;
    }
@@ -362,19 +407,19 @@
    /// <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)
        public  bool GetFenceStateReport(string userLogicId, string logicSid, string direction)
    {
      var jObject = new JObject();
      jObject.Add("homeId", LogicMethod.CurrLogicMethod.HomeId);
            jObject.Add("homeId", LogicMethod.Current.HomeId);
      jObject.Add("userLogicId", userLogicId);
      jObject.Add("sid", logicSid);
      jObject.Add("direction", direction);
      var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_GeoFenceStateReport);
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_GeoFenceStateReport, "自动化地理围栏状态上报");
      //如果是token过期则刷新token
      if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
      {
        RefreshToken();
        GeoFenceStateReport(userLogicId, logicSid, direction);
                GetFenceStateReport(userLogicId, logicSid, direction);
      }
      if (responsePackNew.Code == "0")
      {
@@ -386,32 +431,120 @@
    }
    /// <summary>
        /// 获取住宅已录入人脸信息(可视对讲人脸开门触发自动化配置用)
        /// </summary>
        /// <param name="deviceId">可视对讲设备id</param>
        /// <returns></returns>
        public List<Face> GetListHomeFace(string deviceId, bool isTip)
        {
            var jObject = new JObject();
            jObject.Add("homeId", LogicMethod.Current.HomeId);
            jObject.Add("deviceId", deviceId);
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.Api_Post_GetListHomeFace, "获取住宅已录入人脸信息");
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
            {
                RefreshToken();
                GetListHomeFace(deviceId, isTip);
            }
            if (Check(responsePackNew, isTip) == false)
            {
                return new List<Face>();
            }
            var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Face>>(responsePackNew.Data.ToString());
            if (list == null)
            {
                list = new List<Face>();
            }
            faceList.Clear();
            faceList.AddRange(list);
            return list;
        }
        /// <summary>
    ///请求服务器(与住宅有关:例如;homeId) 
    /// </summary>
        /// <param name="o">发送数据</param>
        /// <param name="api_Url">请求地址(不是绝对地址)</param>
        /// <param name="tag">标记->描述接口(自定义)</param>
    /// <returns></returns>
    public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 3)
        public ResponsePackNew RequestServerhomeId(object o, string api_Url, string tag,int mTimeout = 3)
    {
            Log($"{DateTime.Now}->发送->{tag}", api_Url,o.ToString());
      var requestJson = HttpUtil.GetSignRequestJson(o);
      return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
            var r= HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
            Log($"{DateTime.Now}->回复->{tag}", "", Newtonsoft.Json.JsonConvert.SerializeObject(r));
            return r;
    }
    /// <summary>
    /// 请求服务器
    /// </summary>
        /// <param name="o">发送数据</param>
        /// <param name="api_Url">请求地址(不是绝对地址)</param>
        /// <param name="tag">标记</param>
    /// <returns></returns>
    public static ResponsePackNew RequestServer(object o, string api_Url)
        public  ResponsePackNew RequestServer(object o, string api_Url,string tag)
    {
            Log($"发送数据->{tag}", api_Url, o.ToString());
      var requestJson = HttpUtil.GetSignRequestJson(o);
      return HttpUtil.RequestHttpsPost(api_Url, requestJson);
            var r = HttpUtil.RequestHttpsPost(api_Url, requestJson);
            Log($"回复数据->{tag}", "", Newtonsoft.Json.JsonConvert.SerializeObject(r));
            return r;
    }
    /// <summary>
    /// 刷新Token
    /// </summary>
    public static void RefreshToken()
        public  void RefreshToken()
    {
      IMessageCommon.Current.StartRefreshToken();
    }
        /// <summary>
        /// 检验数据是否合法的
        /// </summary>
        /// <param name="r"></param>
        /// <param name="isTip">是否要弹窗(默认是false不需要)</param>
        /// <returns></returns>
        public bool Check(ResponsePackNew r, bool isTip)
        {
            if (r.Code == "0" && r.Data != null && r.Data.ToString() != "")
            {
                return true;
            }
            if (r.Code != "0")
            {
                //失败时是否要提示
                if (isTip)
                {
                    new LogicView.TipPopView().FlashingBox(r.message + $"({r.Code})");
                }
            }
            return false;
        }
        /// <summary>
        /// 打印日志
        /// </summary>
        /// <param name="tag">打印标记</param>
        /// <param name="content">打印内容</param>
        public void Log(string tag,string url, string content)
        {
         #if DEBUG
            Console.WriteLine(tag + $"\r\n{url}\r\n{content}");
         #endif
        }
    }
    public class Face
    {
        /// <summary>
        /// 用户名称
        /// </summary>
        public string userName = string.Empty;
        /// <summary>
        /// 用户人脸id
        /// </summary>
        public string userId = string.Empty;
  }
}