From 64dbbfe1d6488635e160189a704afccffc7d34d0 Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期一, 07 十二月 2020 11:33:06 +0800 Subject: [PATCH] Merge branch 'WJC' --- HDL_ON/Entity/FunctionList.cs | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 311 insertions(+), 16 deletions(-) diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs index 74a3890..a7ef6e8 100644 --- a/HDL_ON/Entity/FunctionList.cs +++ b/HDL_ON/Entity/FunctionList.cs @@ -1,15 +1,32 @@ 锘縰sing System; using System.Collections.Generic; using System.Linq; +using System.Threading; using HDL_ON.DAL; +using HDL_ON.DAL.Server; namespace HDL_ON.Entity { public class FunctionList { - public 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; + } } /// <summary> @@ -81,9 +98,87 @@ /// 鍔熻兘鍒楄〃 /// </summary> List<Function> deviceFunctionList; - //[Newtonsoft.Json.JsonIgnore] - //public List<Function> functions = new List<Function>(); + + /// <summary> + /// 鍔犺浇鍔熻兘鍒楄〃 + /// todo 闇�瑕佷紭鍖栵紝鍚庢湡涓嶈兘淇濊瘉鑳戒娇鐢╯id瑙f瀽鍑烘槸浠�涔堢被鍨嬬殑璁惧 + /// </summary> + /// <param name="filePath"></param> + 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<Function>(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: + _FunctionList.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(functionDataString)); + break; + case SPK.CurtainRoller: + case SPK.CurtainShades: + case SPK.CurtainSwitch: + case SPK.CurtainTrietex: + _FunctionList.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(functionDataString)); + break; + case SPK.AcStandard: + _FunctionList.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(functionDataString)); + break; + case SPK.FloorHeatStandard: + //鎭㈠鍦扮儹鏁版嵁 + _FunctionList.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(functionDataString)); + break; + case SPK.SensorPm25: + case SPK.SensorCO2: + case SPK.SensorTVOC: + case SPK.SensorTemperature: + case SPK.SensorHumidity: + //鎭㈠鐜鏁版嵁 + _FunctionList.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString)); + break; + case SPK.ElectricSocket: + //鎭㈠鎻掑骇鏁版嵁 + _FunctionList.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(functionDataString)); + break; + case SPK.ElectricTV: + //鎭㈠鐢佃鏁版嵁 + _FunctionList.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(functionDataString)); + break; + case SPK.ElectricFan: + //鎭㈠椋庢墖鏁版嵁 + _FunctionList.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(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<Scene>(sceneDataString); + if (tempScene.DeleteSign) + { + var pm = new HttpServerRequest(); + pm.DeleteScene(tempScene.userSceneId); + } + else + { + List.scenes.Add(tempScene); + } + } + } /// <summary> @@ -93,7 +188,6 @@ { var fs = new List<Function>(); fs.AddRange(GetAllDeviceFunctionList()); - fs.AddRange(scenes); return fs; } @@ -136,7 +230,6 @@ switchSockets = new List<SwitchSocket>(); fans = new List<Fan>(); sensorsEnvironmentalScience = new List<Sensor>(); - //functions = new List<Function>(); scenes = new List<Scene>(); deviceFunctionList = null; } @@ -208,37 +301,38 @@ public void AddFunction(object obj) { var f = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(obj.ToString()); - + if (f == null) + return; switch (f.functionCategory) { case FunctionCategory.Thermostat: switch (f.functionType) { case FunctionType.AC: - aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(obj.ToString())); + _FunctionList.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(obj.ToString())); break; case FunctionType.FloorHeating: - floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(obj.ToString())); + _FunctionList.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(obj.ToString())); break; } break; case FunctionCategory.Light: - lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(obj.ToString())); + _FunctionList.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(obj.ToString())); break; case FunctionCategory.Curtain: - curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(obj.ToString())); + _FunctionList.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(obj.ToString())); break; case FunctionCategory.Electrical: switch(f.functionType) { case FunctionType.TV: - electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(obj.ToString())); + _FunctionList.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(obj.ToString())); break; case FunctionType.Socket: - electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(obj.ToString())); + _FunctionList.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(obj.ToString())); break; case FunctionType.Fan: - electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(obj.ToString())); + _FunctionList.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(obj.ToString())); break; } break; @@ -249,13 +343,214 @@ case FunctionType.CO2: case FunctionType.PM25: case FunctionType.Humidity: - //case FunctionType.Noise: - sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(obj.ToString())); + case FunctionType.Temp: + _FunctionList.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(obj.ToString())); break; } break; } } + + /// <summary> + /// 涓嬫潵浜戠璁惧鏁版嵁 + /// </summary> + 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<DevcieApiPack>(pack.Data.ToString()); + if (deviceList != null) + { + foreach(var localFunction in List.GetAllDeviceFunctionList()) + { + var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId); + if (newFunction == null)//濡傛灉浜戠鏈�鏂版暟鎹病鏈夎鏉℃暟鎹紝鍒欐湰鍦伴渶瑕佸垹鎺夎鏁版嵁璁板綍 + { + List.DeleteFunction(localFunction); + } + else + { + if (localFunction.modifyTime != newFunction.modifyTime) + { + localFunction.name = newFunction.name; + localFunction.collect = newFunction.collect; + localFunction.modifyTime = newFunction.modifyTime; + localFunction.createTime = newFunction.createTime; + localFunction.roomIds = newFunction.roomIds; + localFunction.bus_Data = newFunction.bus_Data; + new System.Threading.Thread(() => + { + localFunction.SaveFunctionData(); + }) + { IsBackground = true }.Start(); + } + deviceList.list.Remove(newFunction);//鎿嶄綔瀹岀殑鏁版嵁娓呯悊鎺夛紝鍓╀笅鐨勫氨鏄柊澧炵殑鍔熻兘 + } + } + //澶勭悊鍓╀笅鐨勬柊澧炲姛鑳� + foreach (var newFunction in deviceList.list) + { + new System.Threading.Thread(() => + { + newFunction.SaveFunctionData(); + List.IniFunctionList(newFunction.savePath); + }) + { IsBackground = true }.Start(); + } + } + MainPage.Log($"璇诲彇浜戠璁惧鏁版嵁:\r\n{ pack.Data.ToString()}"); + }else + { + MainPage.Log($"璇诲彇浜戠璁惧鏁版嵁澶辫触:\r\nCode:{pack.Code}; Msg:{pack.message}"); + } + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// 涓嬭浇浜戠鍦烘櫙鏁版嵁 + /// </summary> + 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(); + } + + + /// <summary> + /// 鍒犻櫎鎵嬫満瀛樺偍閮芥墍鏈夌紦瀛樺姛鑳芥暟鎹� + /// </summary> + 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(); + } + /// <summary> + /// 鍒犻櫎鍦烘櫙 + /// </summary> + public void DeleteScene(Scene scene) + { + scene.DeleteSign = true; + List.scenes.Remove(scene); + } + /// <summary> + /// 鍒犻櫎鏈湴鍔熻兘鏂囦欢 + /// </summary> + public void DeleteFunction(Function delTemp) + { + switch (delTemp.spk) + { + case SPK.LightSwitch: + case SPK.LightDimming: + case SPK.LightRGB: + case SPK.LightRGBW: + case SPK.LightCCT: + _FunctionList.lights.Remove(_FunctionList.lights.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.CurtainRoller: + case SPK.CurtainShades: + case SPK.CurtainSwitch: + case SPK.CurtainTrietex: + _FunctionList.curtains.Remove(_FunctionList.curtains.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.AcStandard: + _FunctionList.aCs.Remove(_FunctionList.aCs.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.FloorHeatStandard: + _FunctionList.floorHeatings.Remove(_FunctionList.floorHeatings.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.SensorPm25: + case SPK.SensorCO2: + case SPK.SensorTVOC: + case SPK.SensorTemperature: + case SPK.SensorHumidity: + _FunctionList.sensorsEnvironmentalScience.Remove(_FunctionList.sensorsEnvironmentalScience.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.ElectricSocket: + _FunctionList.switchSockets.Remove(_FunctionList.switchSockets.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.ElectricTV: + _FunctionList.tVs.Remove(_FunctionList.tVs.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + case SPK.ElectricFan: + _FunctionList.fans.Remove(_FunctionList.fans.Find((obj) => obj.deviceId == delTemp.deviceId)); + break; + } + FileUtils.DeleteFile(delTemp.savePath); + } + + /// <summary> + /// 璇诲彇鍏ㄩ儴鍔熻兘鐨勭姸鎬� + /// </summary> + public void ReadAllFunctionStatus() + { + new Thread(() => + { + try + { + if (DB_ResidenceData.residenceData.GatewayType == 0) + { + foreach (var function in GetAllDeviceFunctionList()) + { + switch (function.functionCategory) + { + case FunctionCategory.Light: + case FunctionCategory.Electrical: + case FunctionCategory.SwitchDevice: + case FunctionCategory.Curtain: + case FunctionCategory.Thermostat: + DriverLayer.Control.Ins.SendReadCommand(function); + break; + } + } + } + else + { + List<Dictionary<string, string>> keyValuePairs = new List<Dictionary<string, string>>(); + foreach (var function in GetAllDeviceFunctionList()) + { + var kv = new Dictionary<string, string>(); + kv.Add("sid", function.sid); + keyValuePairs.Add(kv); + } + DriverLayer.Control.Ins.SendReadCommand(keyValuePairs); + } + } + catch (Exception ex) + { + MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}"); + } + }) + { IsBackground = true }.Start(); + + + } + } } -- Gitblit v1.8.0