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 faceList = new List(); public List VideoDoorLockUserListInfo = new List(); /// /// 调用获取住宅子账号列表 /// public List GetResidenceMemberAccount() { var responePack = new HttpServerRequest().GetResidenceMemberAccount(); if (responePack.Code == StateCode.SUCCESS) { return Newtonsoft.Json.JsonConvert.DeserializeObject>(responePack.Data.ToString()); } //失败 else { //提示 IMessageCommon.Current.ShowErrorInfoAlter(responePack.Code); } return new List(); } /// /// 获取逻辑ID列表 /// /// 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; } /// /// 获取自动化详情 /// /// 自动化ID列表 /// public ResponsePackNew GetLogic(List 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; } /// /// 添加自动化命令 /// /// /// 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; } /// /// 编辑更新自动化 /// /// /// 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; } /// /// 删除自动化 /// /// 当前对象 /// 是否要提示 /// 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; } /// /// 自动化使能 /// /// 当前对象 /// 是否要提示 /// 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; } /// /// 自动化地理围栏状态上报 /// /// 自动化云端id<备注:logicSid与userLogicId 不能同时为空> /// 自动化sid<备注:logicSid与userLogicId 不能同时为空> /// arrive:到达(进入) leave:离开 /// 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; } /// /// 获取住宅已录入人脸信息(可视对讲人脸开门触发自动化配置用) /// /// 可视对讲设备id /// public List 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(); } var list = Newtonsoft.Json.JsonConvert.DeserializeObject>(responsePackNew.Data.ToString()); if (list == null) { list = new List(); } faceList.Clear(); faceList.AddRange(list); return list; } /// /// 获取住宅已录入人脸信息 /// /// 可视对讲设备id /// public List 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(); } var list = Newtonsoft.Json.JsonConvert.DeserializeObject>(responsePackNew.Data.ToString()); if (list == null) { list = new List(); } faceList.Clear(); faceList.AddRange(list); return list; } /// /// 获取门锁用户列表(萤石视频门锁) /// /// 设备 /// public List GetVideoDoorLockUserListInfo(Function device) { var userList = FuntionControlView.VideoDoorLock.VideDoorLockSend.Current.GetVideoDoorLockUserListInfo(device); List faceIdList = new List(); for (int i = 0; i < userList.Count; i++) { Face face = new Face(); var user = userList[i]; face.userId = user.extUserId; face.userName = user.extUserName; faceIdList.Add(face); } VideoDoorLockUserListInfo.Clear(); VideoDoorLockUserListInfo.AddRange(faceIdList); return faceIdList; } /// ///请求服务器(与住宅有关:例如;homeId) /// /// 发送数据 /// 请求地址(不是绝对地址) /// 标记->描述接口(自定义) /// 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; } /// /// 请求服务器 /// /// 发送数据 /// 请求地址(不是绝对地址) /// 标记 /// 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; } /// /// 刷新Token /// public void RefreshToken() { IMessageCommon.Current.StartRefreshToken(); } /// /// 检验数据是否合法的 /// /// /// 是否要弹窗(默认是false不需要) /// 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; } /// /// 打印日志 /// /// 打印标记 /// 打印内容 public void Log(string tag,string url, string content) { #if DEBUG Console.WriteLine(tag + $"\r\n{url}\r\n{content}"); #endif } } public class Face { /// /// 用户名称 /// public string userName = string.Empty; /// /// 用户人脸id /// public string userId = string.Empty; } }