From 43b0d5870d528f23ecd6aeceb6cfd4325188b46f Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期四, 01 七月 2021 15:50:43 +0800 Subject: [PATCH] Revert "1" --- HDL_ON/Entity/FunctionList.cs | 649 +++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 460 insertions(+), 189 deletions(-) diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs index 74a3890..1f2fe17 100644 --- a/HDL_ON/Entity/FunctionList.cs +++ b/HDL_ON/Entity/FunctionList.cs @@ -1,261 +1,532 @@ 锘縰sing 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 { - public 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; + } } + /// <summary> + /// 鍔熻兘鍒楄〃 + /// </summary> + public List<Function> Functions = new List<Function>(); /// <summary> /// 绌鸿皟鍒楄〃 /// </summary> - public List<AC> aCs = new List<AC>(); + /// <returns></returns> + public List<Function> GetAcList() + { + var spkList = SPK.AcSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + /// <summary> /// 鐏厜鍒楄〃 /// </summary> - public List<Light> lights = new List<Light>(); + public List<Function> GetLightList() + { + var spkList = SPK.LightSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } /// <summary> /// 绐楀笜鍒楄〃 /// </summary> - public List<Curtain> curtains = new List<Curtain>(); + public List<Function> GetCurtainList() + { + var spkList = SPK.CurtainSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + /// <summary> /// 鍦扮儹鍒楄〃 /// </summary> - public List<FloorHeating> floorHeatings = new List<FloorHeating>(); + public List<Function> GetFloorHeatingList() + { + var spkList = SPK.FhSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + + /// <summary> + /// 鏂伴鍒楄〃 + /// </summary> + /// <returns></returns> + public List<Function> GetAirFreshList() + { + var spkList = SPK.AirFreshSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + + /// <summary> + /// 鑳芥簮鍒楄〃 + /// </summary> + /// <returns></returns> + public List<Function> GetEnergyList() + { + var spkList = SPK.EnergySpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + #region 瀹剁數鍒楄〃 electricals /// <summary> /// 瀹剁數鍒楄〃 /// </summary> - public List<Function> electricals + public List<Function> GetElectricals() { - get - { - if(fans == null) - { - fans = new List<Fan>(); - } - if(switchSockets == null) - { - switchSockets = new List<SwitchSocket>(); - } - if(tVs == null) - { - tVs = new List<TV>(); - } - var list = new List<Function>(); - list.AddRange(fans); - list.AddRange(switchSockets); - list.AddRange(tVs); - return list; - } + var spkList = SPK.ElectricalSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); } + + /// <summary> - /// 椋庢墖鍒楄〃 + /// 绾㈠瀹濆垪琛� /// </summary> - public List<Fan> fans = new List<Fan>(); - /// <summary> - /// 鐢佃鍒楄〃 - /// </summary> - public List<TV> tVs = new List<TV>(); - /// <summary> - /// 瀹剁數鍒楄〃 - /// </summary> - public List<SwitchSocket> switchSockets = new List<SwitchSocket>(); + public List<Function> GetIrModuleList() + { + return Functions.FindAll((obj) => obj.spk == SPK.IrModule); + } #endregion + + /// <summary> + /// 闊充箰鍒楄〃 + /// </summary> + /// <returns></returns> + public List<Function> GetMusicList() + { + var spkList = SPK.MusicSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + + /// <summary> /// 鐜浼犳劅鍣ㄥ垪琛� /// </summary> - public List<Sensor> sensorsEnvironmentalScience = new List<Sensor>(); + public List<Function> GetEnvirSensorsList() + { + var spkList = SPK.EnvironSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + /// <summary> + /// 瀹夐槻璁惧鍒楄〃 + /// </summary> + public List<Function> GetArmSensorList() + { + var spkList = SPK.ArmSensorSpkList(); + return Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + + /// <summary> + /// 鍙瀵硅鍒楄〃,褰撲负null鎴杝ize涓�0鍒欎笉鏄剧ず鍙瀵硅icon + /// </summary> + // public UI.UI2.FuntionControlView.Video.VideoClouds videoIntercom; + public List<UI.UI2.FuntionControlView.Video.Video> videoIntercom = new List<UI.UI2.FuntionControlView.Video.Video>(); + + List<Function> _OtherBrandFunction; + /// <summary> + /// 绗笁鏂瑰搧鐗屽姛鑳� + /// </summary> + public List<Function> OtherBrandFunction + { + get + { + if(_OtherBrandFunction == null) + { + _OtherBrandFunction = new List<Function>(); + var spkList = SPK.GetAll3tySPK(); + _OtherBrandFunction = Functions.FindAll((obj) => spkList.Contains(obj.spk)); + } + return _OtherBrandFunction; + } + } + /// <summary> /// 鍦烘櫙鍒楄〃 /// </summary> public List<Scene> scenes = new List<Scene>(); - /// <summary> - /// 鍔熻兘鍒楄〃 - /// </summary> - List<Function> deviceFunctionList; - //[Newtonsoft.Json.JsonIgnore] - //public List<Function> functions = new List<Function>(); - - /// <summary> - /// 鑾峰彇鎵�鏈夊姛鑳藉垪琛� + /// 瀹夐槻鍒楄〃 /// </summary> - public List<Function> GetAllFunction() + public List<SecurityAlarm> securities = new List<SecurityAlarm>(); + + /// <summary> + /// 鍔犺浇鍔熻兘鍒楄〃 + /// </summary> + /// <param name="filePath"></param> + /// <param name="checkRepeat"> + /// <para>鑰冭檻鍒版�ц兘闂杩藉姞姝ゅ彉閲�,鏄惁妫�娴嬮噸澶�,鍙function鏈夋晥</para> + /// <para>true:褰撻噸澶嶅瓨鍦ㄦ椂,鏇挎崲鎺�</para> + /// <para>false:鐩存帴鏃犳潯浠舵坊鍔�</para></param> + public void IniFunctionList(string filePath, bool checkRepeat = false) { - var fs = new List<Function>(); - fs.AddRange(GetAllDeviceFunctionList()); - fs.AddRange(scenes); - return fs; + //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<Function>(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<UI.Music.A31MusicModel>(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<Scene>(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<SecurityAlarm>(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); + } } /// <summary> /// 鑾峰彇璁惧鍔熻兘鍒楄〃 /// </summary> - public List<Function> GetAllDeviceFunctionList() + public List<Function> GetDeviceFunctionList(SPK.BrandType brandType = SPK.BrandType.All) { - if (deviceFunctionList == null) + List<Function> resultFunctions = new List<Function>(); + if (brandType == SPK.BrandType.All) { - deviceFunctionList = new List<Function>(); - 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(); + 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; } - catch (Exception ex) - { - MainPage.Log($"璁惧鍔熻兘鎺掑簭寮傚父锛歿ex.Message}"); - } - return deviceFunctionList; + + return Functions; } + + + + /// <summary> /// 娓呯┖璁惧鍔熻兘鍒楄〃 /// </summary> - public void ClearAllDeviceFunctionList() + public void Clear() { - aCs = new List<AC>(); - lights = new List<Light>(); - curtains = new List<Curtain>(); - floorHeatings = new List<FloorHeating>(); - tVs = new List<TV>(); - switchSockets = new List<SwitchSocket>(); - fans = new List<Fan>(); - sensorsEnvironmentalScience = new List<Sensor>(); - //functions = new List<Function>(); - scenes = new List<Scene>(); - deviceFunctionList = null; + Functions = new List<Function>(); + _FunctionList = null; } /// <summary> - /// 鎺ユ敹bus杞欢涓婁紶鐨勫姛鑳� - /// tcp鏂瑰紡 + /// 鍔熻兘缁戝畾鎴块棿 /// </summary> - /// <param name="sidObj"></param> - public void AddDeviceFunction(Function sidObj0) + public string FunctionsBindRooms(List<string> roomIds,List<string> deviceIds) { - switch (sidObj0.functionType) + var pm = new HttpServerRequest(); + var pack = pm.BindDeviceToRoom(deviceIds, roomIds); + if(pack.Code == StateCode.SUCCESS) { - case FunctionType.AC: - var sidObj = Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); - DB_ResidenceData.functionList.aCs.Add(sidObj); - sidObj.SaveFunctionData(); - break; - case FunctionType.FloorHeating: - var sidObj1 = Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(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<Light>(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<Curtain>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); - DB_ResidenceData.functionList.curtains.Add(sidObj3 ); - sidObj3.SaveFunctionData(); - break; - case FunctionType.TV: - var sidObj4 = Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); - DB_ResidenceData.functionList.tVs.Add(sidObj4); - sidObj4.SaveFunctionData(); - break; - case FunctionType.Socket: - var sidObj5 = Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); - DB_ResidenceData.functionList.switchSockets.Add(sidObj5); - sidObj5.SaveFunctionData(); - break; - case FunctionType.Fan: - var sidObj6 = Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(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<Sensor>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0)); - DB_ResidenceData.functionList.sensorsEnvironmentalScience.Add(sidObj7); - sidObj7.SaveFunctionData(); - break; - } - } - /// <summary> - /// 鎺ユ敹bus杞欢涓婁紶鐨勫姛鑳� - /// http udp - /// </summary> - /// <param name="obj"></param> - public void AddFunction(object obj) - { - var f = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(obj.ToString()); - switch (f.functionCategory) + } + else { - case FunctionCategory.Thermostat: - switch (f.functionType) - { - case FunctionType.AC: - aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(obj.ToString())); - break; - case FunctionType.FloorHeating: - floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(obj.ToString())); - break; - } - break; - case FunctionCategory.Light: - lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(obj.ToString())); - break; - case FunctionCategory.Curtain: - 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())); - break; - case FunctionType.Socket: - electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(obj.ToString())); - break; - case FunctionType.Fan: - electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(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<Sensor>(obj.ToString())); - break; - } - break; + IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); + } + return pack.Code; + } + + /// <summary> + /// 鍒犻櫎鍦烘櫙 + /// todo + /// </summary> + 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); } } + + /// <summary> + /// 鍒犻櫎鏈湴鍔熻兘鍙婃枃浠� + /// </summary> + public void DeleteFunction(Function delTemp) + { + Functions.Remove(Functions.Find((obj) => obj.deviceId == delTemp.deviceId)); + FileUtlis.Files.DeleteFile(delTemp.savePath); + } + + bool lockReadFunctionStatus = false; + + /// <summary> + /// 璇诲彇绗笁鏂硅澶囩姸鎬� + /// </summary> + public void Read3tyFunctionStatus() + { + //璇诲彇娑傞甫璁惧鐘舵�� + if (GetDeviceFunctionList(SPK.BrandType.Tuya).Count > 0) + { + var page = new List<string>(); + 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); + } + + } + + /// <summary> + /// 璇诲彇鍏ㄩ儴鍔熻兘鐨勭姸鎬� + /// </summary> + 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<string>(); + 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 鍦烘櫙鐩稿叧 + /// <summary> + /// 娣诲姞鍦烘櫙 + /// </summary> + 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<List<Scene>>(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 鏀惰棌鍔熻兘 + + /// <summary> + /// 鏀惰棌鍦烘櫙 + /// </summary> + 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 } } -- Gitblit v1.8.0