From 23ca39219c5075d829d14137cb54896a24ae513d Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期五, 04 十二月 2020 13:57:08 +0800
Subject: [PATCH] 20201204

---
 HDL_ON/Entity/FunctionList.cs |  295 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 280 insertions(+), 15 deletions(-)

diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index cce8348..c5e82f0 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -2,11 +2,32 @@
 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;
+            }
+        }
+
         /// <summary>
         /// 绌鸿皟鍒楄〃
         /// </summary>
@@ -76,9 +97,153 @@
         /// 鍔熻兘鍒楄〃
         /// </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_"))
+            {
+                //if (filePath.Length == 13 + 28)
+                //{
+                //    var _functionTypeString = filePath.Substring(16 + 13, 4);
+                //    var ft = (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16));
+                //    switch (ft)
+                //    {
+                //        case FunctionType.AC:
+                //            //鎭㈠绌鸿皟鏁版嵁
+                //            var acDataBytes = FileUtils.ReadFile(filePath);
+                //            var acString = System.Text.Encoding.UTF8.GetString(acDataBytes);
+                //            List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(acString));
+                //            break;
+                //        case FunctionType.Relay:
+                //        case FunctionType.Dimmer:
+                //        case FunctionType.RGB:
+                //            //鎭㈠鐏厜鏁版嵁
+                //            var lightsDataBytes = FileUtils.ReadFile(filePath);
+                //            var lightsString = System.Text.Encoding.UTF8.GetString(lightsDataBytes);
+                //            List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(lightsString));
+                //            break;
+                //        case FunctionType.Curtain:
+                //        case FunctionType.MotorCurtain:
+                //        case FunctionType.RollingShutter:
+                //            //鎭㈠绐楀笜鏁版嵁
+                //            var curtainsDataBytes = FileUtils.ReadFile(filePath);
+                //            var curtainsString = System.Text.Encoding.UTF8.GetString(curtainsDataBytes);
+                //            List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(curtainsString));
+                //            break;
+                //        case FunctionType.FloorHeating:
+                //            //鎭㈠鍦扮儹鏁版嵁
+                //            var fhDataBytes = FileUtils.ReadFile(filePath);
+                //            var fhString = System.Text.Encoding.UTF8.GetString(fhDataBytes);
+                //            List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(fhString));
+                //            break;
+                //        case FunctionType.PM25:
+                //        case FunctionType.CO2:
+                //        case FunctionType.TVOC:
+                //        case FunctionType.Temp:
+                //        case FunctionType.Humidity:
+                //            //鎭㈠鐜鏁版嵁
+                //            var sesDataBytes = FileUtils.ReadFile(filePath);
+                //            var sesString = System.Text.Encoding.UTF8.GetString(sesDataBytes);
+                //            List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(sesString));
+                //            break;
+                //        case FunctionType.Socket:
+                //            //鎭㈠鎻掑骇鏁版嵁
+                //            var eleDataBytes = FileUtils.ReadFile(filePath);
+                //            var eleString = System.Text.Encoding.UTF8.GetString(eleDataBytes);
+                //            List.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(eleString));
+                //            break;
+                //        case FunctionType.TV:
+                //            //鎭㈠鐢佃鏁版嵁
+                //            var eleDataBytes1 = FileUtils.ReadFile(filePath);
+                //            var eleString1 = System.Text.Encoding.UTF8.GetString(eleDataBytes1);
+                //            List.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(eleString1));
+                //            break;
+                //        case FunctionType.Fan:
+                //            //鎭㈠椋庢墖鏁版嵁
+                //            var eleDataBytes2 = FileUtils.ReadFile(filePath);
+                //            var eleString2 = System.Text.Encoding.UTF8.GetString(eleDataBytes2);
+                //            List.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(eleString2));
+                //            break;
+                //    }
+                //}
+                //else//sid闈炴爣鍑嗘儏鍐典笅锛岄�氳繃spk鍔犺浇璁惧
+                {
+                    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:
+                                List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(functionDataString));
+                                break;
+                            case SPK.CurtainRoller:
+                            case SPK.CurtainShades:
+                            case SPK.CurtainSwitch:
+                            case SPK.CurtainTrietex:
+                                List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(functionDataString));
+                                break;
+                            case SPK.AcStandard:
+                                List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(functionDataString));
+                                break;
+                            case SPK.FloorHeatStandard:
+                                //鎭㈠鍦扮儹鏁版嵁
+                                List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(functionDataString));
+                                break;
+                            case SPK.SensorPm25:
+                            case SPK.SensorCO2:
+                            case SPK.SensorTVOC:
+                            case SPK.SensorTemperature:
+                            case SPK.SensorHumidity:
+                                //鎭㈠鐜鏁版嵁
+                                List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString));
+                                break;
+                            case SPK.ElectricSocket:
+                                //鎭㈠鎻掑骇鏁版嵁
+                                List.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(functionDataString));
+                                break;
+                            case SPK.ElectricTV:
+                                //鎭㈠鐢佃鏁版嵁
+                                List.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(functionDataString));
+                                break;
+                            case SPK.ElectricFan:
+                                //鎭㈠椋庢墖鏁版嵁
+                                List.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>
@@ -96,17 +261,14 @@
         /// </summary>
         public List<Function> GetAllDeviceFunctionList()
         {
-            //if (deviceFunctionList == null || deviceFunctionList.Count == 0)
-            {
-                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);
-            }
+            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();
@@ -130,7 +292,6 @@
             switchSockets = new List<SwitchSocket>();
             fans = new List<Fan>();
             sensorsEnvironmentalScience = new List<Sensor>();
-            //functions = new List<Function>();
             scenes = new List<Scene>();
             deviceFunctionList = null;
         }
@@ -202,7 +363,8 @@
         public void AddFunction(object obj)
         {
             var f = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(obj.ToString());
-
+            if (f == null)
+                return;
             switch (f.functionCategory)
             {
                 case FunctionCategory.Thermostat:
@@ -250,6 +412,109 @@
                     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 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<string>() { function.deviceId });
+                            var funcitonInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(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();
+        }
+
+        /// <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);
+        }
+
     }
 
 }

--
Gitblit v1.8.0