using System;
using System.IO;
using System.Net;
using HDL_ON.DAL.Server;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
public class Send
{
///
/// 获取逻辑ID列表
///
///
public static ResponsePackNew GetLogicIdList()
{
var jObject = new JObject { { "homeId", LogicMethod.HomeId } };
var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_List);
//如果是token过期则刷新token
if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
{
RefreshToken();
GetLogicIdList();
}
return responsePackNew;
}
///
/// 获取逻辑
///
/// 逻辑ID列表
///
public static ResponsePackNew GetLogic(List 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;
}
///
/// 添加自动化命令
///
///
///
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);
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.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.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;
}
///
/// 编辑更新逻辑
///
///
///
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);
}
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.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.HomeId }, { "logics", logicjArray } };
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;
}
///
/// 删除逻辑
///
///
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;
}
///
/// 逻辑开关
///
///
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;
}
///
///请求服务器(与住宅有关:例如;homeId)
///
///
public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 3)
{
var requestJson = HttpUtil.GetSignRequestJson(o);
return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
}
///
/// 请求服务器
///
///
public static ResponsePackNew RequestServer(object o, string api_Url)
{
var requestJson = HttpUtil.GetSignRequestJson(o);
return HttpUtil.RequestHttpsPost(api_Url, requestJson);
}
///
/// 刷新Token
///
public static void RefreshToken()
{
IMessageCommon.Current.StartRefreshToken();
}
}
}