using System;
|
using System.IO;
|
using System.Net;
|
using HDL_ON.DAL.Server;
|
using Newtonsoft.Json.Linq;
|
using System.Collections.Generic;
|
using HDL_ON.Entity;
|
|
namespace HDL_ON.UI.UI2.Intelligence.Automation
|
{
|
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>();
|
public List<Face> VideoDoorLockUserListInfo = new List<Face>();
|
/// <summary>
|
/// 调用获取住宅子账号列表
|
/// </summary>
|
public 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 ResponsePackNew GetLogicIdList(bool isTip = false)
|
{
|
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(isTip);
|
}
|
if (Check(responsePackNew, isTip) == false)
|
{
|
return null;
|
}
|
return responsePackNew;
|
}
|
/// <summary>
|
/// 获取自动化详情
|
/// </summary>
|
/// <param name="listIdList">自动化ID列表</param>
|
/// <returns></returns>
|
public ResponsePackNew GetLogic(List<string> listIdList, bool isTip = false)
|
{
|
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,isTip);
|
}
|
if (Check(responsePackNew, isTip) == false)
|
{
|
return null;
|
}
|
return responsePackNew;
|
}
|
/// <summary>
|
/// 添加自动化命令
|
/// </summary>
|
/// <param name="logic"></param>
|
/// <returns></returns>
|
public ResponsePackNew AddLogic(Logic logic,bool isTip)
|
{
|
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);
|
if (!string.IsNullOrEmpty(dictionary.hold_time))
|
{
|
inputTypeJOb.Add("hold_time", dictionary.hold_time);
|
}
|
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)
|
{
|
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.Current.GatewayId);
|
logicIfon.Add("tag", logic.tag);
|
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.Current.HomeId }, { "logics", logicjArray } };
|
string str = jObject.ToString();
|
responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Add, "添加自动化", 5);
|
//如果是token过期则刷新token
|
if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
|
{
|
RefreshToken();
|
AddLogic(logic,isTip);
|
}
|
if (Check(responsePackNew, isTip) == false)
|
{
|
return null;
|
}
|
}
|
catch (Exception e)
|
{
|
var dd = e.Message;
|
}
|
return responsePackNew;
|
}
|
/// <summary>
|
/// 编辑更新自动化
|
/// </summary>
|
/// <param name="logic"></param>
|
/// <returns></returns>
|
public ResponsePackNew UpdateLogic(Logic logic,bool isTip)
|
{
|
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);
|
if (!string.IsNullOrEmpty(dictionary.hold_time))
|
{
|
inputTypeJOb.Add("hold_time", dictionary.hold_time);
|
}
|
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)
|
{
|
|
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.Current.GatewayId);
|
logicIfon.Add("tag", logic.tag);
|
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.Current.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, isTip);
|
}
|
if (Check(responsePackNew, isTip) == false)
|
{
|
return null;
|
}
|
}
|
catch (Exception e)
|
{
|
return null;
|
}
|
return responsePackNew;
|
}
|
|
/// <summary>
|
/// 删除自动化
|
/// </summary>
|
/// <param name="logic">当前对象</param>
|
/// <param name="isTip">是否要提示</param>
|
/// <returns></returns>
|
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, "删除自动化");
|
//如果是token过期则刷新token
|
if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
|
{
|
RefreshToken();
|
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 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, "自动化开关");
|
//如果是token过期则刷新token
|
if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
|
{
|
RefreshToken();
|
EnableLogic(logic, isTip);
|
}
|
if (Check(responsePackNew, isTip) == false)
|
{
|
return null;
|
}
|
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 bool GetFenceStateReport(string userLogicId, string logicSid, string direction)
|
{
|
var jObject = new JObject();
|
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, "自动化地理围栏状态上报");
|
//如果是token过期则刷新token
|
if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
|
{
|
RefreshToken();
|
GetFenceStateReport(userLogicId, logicSid, direction);
|
}
|
if (responsePackNew.Code == "0")
|
{
|
//成功
|
return true;
|
}
|
//失败
|
return false;
|
}
|
|
/// <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>
|
/// 获取住宅已录入人脸信息
|
/// </summary>
|
/// <param name="deviceId">可视对讲设备id</param>
|
/// <returns></returns>
|
public List<Face> GetHomeFaceList(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 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);
|
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 ResponsePackNew RequestServer(object o, string api_Url,string tag)
|
{
|
Log($"发送数据->{tag}", api_Url, o.ToString());
|
var requestJson = HttpUtil.GetSignRequestJson(o);
|
var r = HttpUtil.RequestHttpsPost(api_Url, requestJson);
|
Log($"回复数据->{tag}", "", Newtonsoft.Json.JsonConvert.SerializeObject(r));
|
return r;
|
}
|
/// <summary>
|
/// 刷新Token
|
/// </summary>
|
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;
|
}
|
}
|