using System; using System.Collections.Generic; using System.Linq; using System.Threading; using HDL_ON.Common; using HDL_ON.DAL; using HDL_ON.DAL.Server; using Shared; namespace HDL_ON.Entity { public class FunctionList { static FunctionList _FunctionList; public static FunctionList List { get { if (_FunctionList == null) { _FunctionList = new FunctionList(); #region 恢复数据 var filePathList = FileUtlis.Files.ReadFiles(); foreach (var filePath in filePathList) { _FunctionList.IniFunctionList(filePath); } #endregion } return _FunctionList; } } /// /// 功能列表 /// public List Functions = new List(); /// /// 空调列表 /// /// public List GetAcList() { var spkList = SPK.AcSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 灯光列表 /// public List GetLightList() { var spkList = SPK.LightSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 窗帘列表 /// public List GetCurtainList() { var spkList = SPK.CurtainSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 地热列表 /// public List GetFloorHeatingList() { var spkList = SPK.FhSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 新风列表 /// /// public List GetAirFreshList() { var spkList = SPK.AirFreshSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 能源列表 /// /// public List GetEnergyList() { var spkList = SPK.EnergySpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } #region 家电列表 electricals /// /// 家电列表 /// public List GetElectricals() { var spkList = SPK.ElectricalSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 红外宝列表 /// public List GetIrModuleList() { return Functions.FindAll((obj) => obj.spk == SPK.IrModule); } #endregion /// /// 音乐列表 /// /// public List GetMusicList() { var spkList = SPK.MusicSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 环境传感器列表 /// public List GetEnvirSensorsList() { var spkList = SPK.EnvironSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 安防设备列表 /// public List GetArmSensorList() { var spkList = SPK.ArmSensorSpkList(); return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } /// /// 可视对讲列表,当为null或size为0则不显示可视对讲icon /// // public UI.UI2.FuntionControlView.Video.VideoClouds videoIntercom; public List videoIntercom = new List(); List _OtherBrandFunction; /// /// 第三方品牌功能 /// public List OtherBrandFunction { get { if(_OtherBrandFunction == null) { _OtherBrandFunction = new List(); var spkList = SPK.GetAll3tySPK(); _OtherBrandFunction = Functions.FindAll((obj) => spkList.Contains(obj.spk)); } return _OtherBrandFunction; } } /// /// 场景列表 /// public List scenes = new List(); /// /// 安防列表 /// public List securities = new List(); /// /// 加载功能列表 /// /// /// /// 考虑到性能问题追加此变量,是否检测重复,只对function有效 /// true:当重复存在时,替换掉 /// false:直接无条件添加 public void IniFunctionList(string filePath, bool checkRepeat = false) { //MainPage.Log("12346890sdkxghjkl"); // todo 增加设备,增加功能进功能列表 if (filePath.StartsWith("FunctionData_")) { var functionDataBytes = FileUtlis.Files.ReadFile(filePath); var functionDataString = System.Text.Encoding.UTF8.GetString(functionDataBytes); var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString); if (tempFunction == null) { MainPage.Log("null"); FileUtlis.Files.DeleteFile(filePath); return; } //音乐部分要修改 //if(tempFunction.spk.ToString() == SPK.MusicStandard) //{ // UI.Music.A31MusicModel.A31MusicModelList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); //} if (checkRepeat == true) { //检测重复 for (int i = 0; i < Functions.Count; i++) { if (Functions[i].deviceId == tempFunction.deviceId) { //先移除掉再加 Functions.RemoveAt(i); Functions.Add(tempFunction); return; } } } Functions.Add(tempFunction); } if (filePath.StartsWith("SceneData_")) { var sceneDataBytes = FileUtlis.Files.ReadFile(filePath); var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes); var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject(sceneDataString); List.scenes.Add(tempScene); } else if (filePath.StartsWith("SecurityData_")) { var dataBytes = FileUtlis.Files.ReadFile(filePath); var dataString = System.Text.Encoding.UTF8.GetString(dataBytes); var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(dataString); if (temp == null) { MainPage.Log("null"); FileUtlis.Files.DeleteFile(filePath); return; } if (checkRepeat == true) { //检测重复 for (int i = 0; i < securities.Count; i++) { if (securities[i].sid == temp.sid) { //先移除掉再加 securities.RemoveAt(i); securities.Add(temp); return; } } } securities.Add(temp); } } /// /// 获取设备功能列表 /// public List GetDeviceFunctionList(SPK.BrandType brandType = SPK.BrandType.All) { List resultFunctions = new List(); if (brandType == SPK.BrandType.All) { } else { switch (brandType) { case SPK.BrandType.Hdl: foreach (var function in Functions) { if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk)) { resultFunctions.Add(function); } } break; case SPK.BrandType.Tuya: foreach (var function in Functions) { if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk)) { resultFunctions.Add(function); } } break; } return resultFunctions; } return Functions; } /// /// 清空设备功能列表 /// public void Clear() { Functions = new List(); _FunctionList = null; } /// /// 功能绑定房间 /// public string FunctionsBindRooms(List roomIds,List deviceIds) { var pm = new HttpServerRequest(); var pack = pm.BindDeviceToRoom(deviceIds, roomIds); if(pack.Code == StateCode.SUCCESS) { } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } return pack.Code; } /// /// 删除场景 /// todo /// public void DeleteScene(Scene scene,bool upSevser) { if (upSevser) { var pm = new HttpServerRequest(); var packCode = pm.DeleteScene(scene.userSceneId); if (packCode == StateCode.SUCCESS) { FileUtlis.Files.DeleteFile(scene.savePath); List.scenes.Remove(scene); } else { IMessageCommon.Current.ShowErrorInfoAlter(packCode); } } else { FileUtlis.Files.DeleteFile(scene.savePath); List.scenes.Remove(scene); } } /// /// 删除本地功能及文件 /// public void DeleteFunction(Function delTemp) { Functions.Remove(Functions.Find((obj) => obj.deviceId == delTemp.deviceId)); FileUtlis.Files.DeleteFile(delTemp.savePath); } bool lockReadFunctionStatus = false; /// /// 读取第三方设备状态 /// public void Read3tyFunctionStatus() { //读取涂鸦设备状态 if (GetDeviceFunctionList(SPK.BrandType.Tuya).Count > 0) { var page = new List(); int count = 0; foreach (var function in GetDeviceFunctionList(SPK.BrandType.Tuya)) { page.Add(function.deviceId); count++; if (count > 9) { DriverLayer.Control.Ins.ReadFunctionsInfo(page); page.Clear(); count = 0; } } DriverLayer.Control.Ins.ReadFunctionsInfo(page); } } /// /// 读取全部功能的状态 /// public void ReadAllFunctionStatus() { if (lockReadFunctionStatus) { MainPage.Log($"多次进入--返回"); return; } new Thread(() => { if (lockReadFunctionStatus) { MainPage.Log($"多次进入--返回"); return; } MainPage.Log($"进入--读取"); lockReadFunctionStatus = true; try { Read3tyFunctionStatus(); if(DriverLayer.Control.Ins.GatewayOnline_Local) { foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl)) { switch (function.Spk_Prefix) { case FunctionCategory.Music: case FunctionCategory.DryContact: continue; } DriverLayer.Control.Ins.SendReadCommand(function); //switch (function.Spk_Prefix) //{ // case FunctionCategory.Light: // case FunctionCategory.Electric: // case FunctionCategory.Curtain: // case FunctionCategory.AC: // case FunctionCategory.FloorHeat: // case FunctionCategory.Sensor: // DriverLayer.Control.Ins.SendReadCommand(function); // break; //} } } else { var page = new List(); int count = 0; foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl)) { page.Add(function.deviceId); count++; if (count > 9) { DriverLayer.Control.Ins.SendApiReadCommand(page); page.Clear(); count = 0; } } DriverLayer.Control.Ins.SendApiReadCommand(page); } } catch (Exception ex) { MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}"); } finally { lockReadFunctionStatus = false; MainPage.Log($"结束--读取"); } }) { IsBackground = true }.Start(); } #region 场景相关 /// /// 添加场景 /// public string AddScene(Scene scene, out Scene result) { Scene tempScene = null; var pm = new HttpServerRequest(); var revPack = pm.AddScene(scene); if (revPack.Code == StateCode.SUCCESS) { var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString()); tempScene = sceneList.Find((obj) => obj.sid == scene.sid); var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene)); FileUtlis.Files.WriteFileByBytes(scene.savePath, ssd); result = tempScene; } else { result = tempScene; } return revPack.Code; } #endregion #region 收藏功能 /// /// 收藏场景 /// public string CollectScene(Scene scene) { var result = ""; if (scene.collect) { result = ApiUtlis.Ins.HttpRequest.CollectDevice(scene.userSceneId).Code; } else { result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(scene.userSceneId).Code; } //提示错误 if (result != StateCode.SUCCESS) { IMessageCommon.Current.ShowErrorInfoAlter(result); } return result; } #endregion #region #endregion } }