using System; using System.Collections.Generic; using System.Linq; using HDL_ON.DAL; using HDL_ON.DAL.Server; namespace HDL_ON.Entity { public class FunctionList { static FunctionList _FunctionList; public static FunctionList List { get { if(_FunctionList == null) { _FunctionList = new FunctionList(); #region 恢复数据 var filePathList = FileUtils.ReadFiles(); foreach (var filePath in filePathList) { _FunctionList.IniFunctionList(filePath); } #endregion } return _FunctionList; } } /// /// 空调列表 /// public List aCs = new List(); /// /// 灯光列表 /// public List lights = new List(); /// /// 窗帘列表 /// public List curtains = new List(); /// /// 地热列表 /// public List floorHeatings = new List(); #region 家电列表 electricals /// /// 家电列表 /// public List electricals { get { if(fans == null) { fans = new List(); } if(switchSockets == null) { switchSockets = new List(); } if(tVs == null) { tVs = new List(); } var list = new List(); list.AddRange(fans); list.AddRange(switchSockets); list.AddRange(tVs); return list; } } /// /// 风扇列表 /// public List fans = new List(); /// /// 电视列表 /// public List tVs = new List(); /// /// 家电列表 /// public List switchSockets = new List(); #endregion /// /// 环境传感器列表 /// public List sensorsEnvironmentalScience = new List(); /// /// 场景列表 /// public List scenes = new List(); /// /// 功能列表 /// List deviceFunctionList; /// /// 加载功能列表 /// todo 需要优化,后期不能保证能使用sid解析出是什么类型的设备 /// /// public void IniFunctionList(string filePath) { if (filePath.StartsWith("FunctionData_")) { var functionDataBytes = FileUtils.ReadFile(filePath); var functionDataString = System.Text.Encoding.UTF8.GetString(functionDataBytes); var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString); if (tempFunction.DeleteSign) { //todo 删除云端数据 20201203--App不能删除功能数据 } else { switch (tempFunction.spk) { case SPK.LightSwitch: case SPK.LightDimming: case SPK.LightRGB: case SPK.LightRGBW: case SPK.LightCCT: List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.CurtainRoller: case SPK.CurtainShades: case SPK.CurtainSwitch: case SPK.CurtainTrietex: List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.AcStandard: List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.FloorHeatStandard: //恢复地热数据 List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.SensorPm25: case SPK.SensorCO2: case SPK.SensorTVOC: case SPK.SensorTemperature: case SPK.SensorHumidity: //恢复环境数据 List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.ElectricSocket: //恢复插座数据 List.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.ElectricTV: //恢复电视数据 List.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; case SPK.ElectricFan: //恢复风扇数据 List.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString)); break; } } } if (filePath.StartsWith("SceneData_")) { var sceneDataBytes = FileUtils.ReadFile(filePath); var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes); var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject(sceneDataString); if (tempScene.DeleteSign) { var pm = new HttpServerRequest(); pm.DeleteScene(tempScene.userSceneId); } else { List.scenes.Add(tempScene); } } } /// /// 获取所有功能列表 /// public List GetAllFunction() { var fs = new List(); fs.AddRange(GetAllDeviceFunctionList()); return fs; } /// /// 获取设备功能列表 /// public List GetAllDeviceFunctionList() { deviceFunctionList = new List(); deviceFunctionList.AddRange(aCs); deviceFunctionList.AddRange(lights); deviceFunctionList.AddRange(curtains); deviceFunctionList.AddRange(floorHeatings); deviceFunctionList.AddRange(electricals); deviceFunctionList.AddRange(sensorsEnvironmentalScience); deviceFunctionList.AddRange(UI.Music.A31MusicModel.A31MusicModelList); try { deviceFunctionList.OrderByDescending(o => o.usageCount).ToList(); } catch (Exception ex) { MainPage.Log($"设备功能排序异常:{ex.Message}"); } return deviceFunctionList; } /// /// 清空设备功能列表 /// public void ClearAllDeviceFunctionList() { aCs = new List(); lights = new List(); curtains = new List(); floorHeatings = new List(); tVs = new List(); switchSockets = new List(); fans = new List(); sensorsEnvironmentalScience = new List(); scenes = new List(); deviceFunctionList = null; } /// /// 接收bus软件上传的功能 /// tcp方式 /// /// public void AddDeviceFunction(Function sidObj0) { switch (sidObj0.functionType) { case FunctionType.AC: var sidObj = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.aCs.Add(sidObj); sidObj.SaveFunctionData(); break; case FunctionType.FloorHeating: var sidObj1 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.floorHeatings.Add(sidObj1); sidObj1.SaveFunctionData(); break; case FunctionType.Dimmer: case FunctionType.RGB: case FunctionType.Relay: var sidObj2 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.lights.Add(sidObj2); sidObj2.SaveFunctionData(); break; case FunctionType.Curtain: case FunctionType.RollingShutter: case FunctionType.MotorCurtain: var sidObj3 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.curtains.Add(sidObj3 ); sidObj3.SaveFunctionData(); break; case FunctionType.TV: var sidObj4 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.tVs.Add(sidObj4); sidObj4.SaveFunctionData(); break; case FunctionType.Socket: var sidObj5 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.switchSockets.Add(sidObj5); sidObj5.SaveFunctionData(); break; case FunctionType.Fan: var sidObj6 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.fans.Add(sidObj6); sidObj6.SaveFunctionData(); break; case FunctionType.CO2: case FunctionType.TVOC: case FunctionType.PM25: case FunctionType.Temp: case FunctionType.Humidity: var sidObj7 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); DB_ResidenceData.functionList.sensorsEnvironmentalScience.Add(sidObj7); sidObj7.SaveFunctionData(); break; } } /// /// 接收bus软件上传的功能 /// http udp /// /// public void AddFunction(object obj) { var f = Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()); if (f == null) return; switch (f.functionCategory) { case FunctionCategory.Thermostat: switch (f.functionType) { case FunctionType.AC: aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; case FunctionType.FloorHeating: floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; } break; case FunctionCategory.Light: lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; case FunctionCategory.Curtain: curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; case FunctionCategory.Electrical: switch(f.functionType) { case FunctionType.TV: electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; case FunctionType.Socket: electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; case FunctionType.Fan: electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; } break; case FunctionCategory.Sensor: switch(f.functionType) { case FunctionType.TVOC: case FunctionType.CO2: case FunctionType.PM25: case FunctionType.Humidity: //case FunctionType.Noise: sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString())); break; } break; } } /// /// 下来云端设备数据 /// public void DownloadFunctionList() { new System.Threading.Thread(() => { var pm = new HttpServerRequest(); var pack = pm.GetDeviceList(); if (pack.Code == StateCode.SUCCESS) { var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject(pack.Data.ToString()); if (deviceList != null) { foreach (var function in deviceList.list) { var localFunction = DB_ResidenceData.functionList.GetAllDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId); if (localFunction != null) { if (localFunction.modifyTime != function.modifyTime) { localFunction.name = function.name; localFunction.collect = function.collect; localFunction.modifyTime = function.modifyTime; localFunction.createTime = function.createTime; localFunction.roomIds = function.roomIds; localFunction.bus_Data = function.bus_Data; } localFunction.SaveFunctionData(); } else { function.SaveFunctionData(); List.IniFunctionList(function.savePath); } var funcitonInfoPack = pm.GetDeviceInfoList(new List() { function.deviceId }); var funcitonInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(funcitonInfoPack.Data.ToString()); if (funcitonInfo != null) { } } } MainPage.Log($"读取云端设备数据:\r\n{ pack.Data.ToString()}"); }else { MainPage.Log($"读取云端设备数据失败:\r\nCode:{pack.Code}; Msg:{pack.message}"); } }) { IsBackground = true }.Start(); } /// /// 下载云端场景数据 /// public void DownloadSceneList() { new System.Threading.Thread(() => { var pm = new HttpServerRequest(); var pack = pm.GetSceneList(); if(pack.Code == StateCode.SUCCESS) { MainPage.Log($"读取云端场景数据:\r\n{pack.Data.ToString()}"); } else { MainPage.Log($"读取云端场景数据失败:\r\nCode:{pack.Code}; Msg:{pack.message}"); } }) { IsBackground = true }.Start(); } /// /// 删除手机存储都所有缓存功能数据 /// public void DelAllFunctionData() { var filePathList = FileUtils.ReadFiles(); foreach (var filePath in filePathList) { if (filePath.StartsWith("FunctionData_") && filePath.Length == 13 + 28) { FileUtils.DeleteFile(filePath); } } _FunctionList = new FunctionList(); } /// /// 删除场景 /// public void DeleteScene(Scene scene) { scene.DeleteSign = true; List.scenes.Remove(scene); } } }