wei
2020-12-08 62d77d3bb8e7215d9da9ecf6f5aeda0b69f805f8
HDL_ON/Entity/FunctionList.cs
@@ -168,15 +168,7 @@
                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);
                }
            }
        }
@@ -196,7 +188,7 @@
        /// </summary>
        public List<Function> GetAllDeviceFunctionList()
        {
            if (deviceFunctionList == null)
            //if (deviceFunctionList == null)
            {
                deviceFunctionList = new List<Function>();
                deviceFunctionList.AddRange(aCs);
@@ -246,41 +238,41 @@
                case FunctionType.AC:
                    var sidObj =  Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
                    DB_ResidenceData.functionList.aCs.Add(sidObj);
                    sidObj.SaveFunctionData();
                    sidObj.SaveFunctionData(false);
                    break;
                case FunctionType.FloorHeating:
                    var sidObj1 =  Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
                    DB_ResidenceData.functionList.floorHeatings.Add(sidObj1);
                    sidObj1.SaveFunctionData();
                    sidObj1.SaveFunctionData(false);
                    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();
                    sidObj2.SaveFunctionData(false);
                    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();
                    sidObj3.SaveFunctionData(false);
                    break;
                case FunctionType.TV:
                    var sidObj4 =  Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
                    DB_ResidenceData.functionList.tVs.Add(sidObj4);
                    sidObj4.SaveFunctionData();
                    sidObj4.SaveFunctionData(false);
                    break;
                case FunctionType.Socket:
                    var sidObj5 =  Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
                    DB_ResidenceData.functionList.switchSockets.Add(sidObj5);
                    sidObj5.SaveFunctionData();
                    sidObj5.SaveFunctionData(false);
                    break;
                case FunctionType.Fan:
                    var sidObj6 =  Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
                    DB_ResidenceData.functionList.fans.Add(sidObj6);
                    sidObj6.SaveFunctionData();
                    sidObj6.SaveFunctionData(false);
                    break;
                case FunctionType.CO2:
                case FunctionType.TVOC:
@@ -289,7 +281,7 @@
                case FunctionType.Humidity:
                    var sidObj7 =  Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
                    DB_ResidenceData.functionList.sensorsEnvironmentalScience.Add(sidObj7);
                    sidObj7.SaveFunctionData();
                    sidObj7.SaveFunctionData(false);
                    break;
            }
        }
@@ -356,7 +348,7 @@
        /// </summary>
        public void DownloadFunctionList()
        {
            new System.Threading.Thread(() =>
            new Thread(() =>
            {
                var pm = new HttpServerRequest();
                var pack = pm.GetDeviceList();
@@ -365,6 +357,14 @@
                    var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(pack.Data.ToString());
                    if (deviceList != null)
                    {
                        ////将下载到到数据全部保存
                        //new Thread(() => {
                        //    foreach (var temp in deviceList.list)
                        //    {
                        //        temp.SaveFunctionData();
                        //    }
                        //})
                        //{ IsBackground = true }.Start();
                        foreach(var localFunction in List.GetAllDeviceFunctionList())
                        {
                            var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
@@ -379,14 +379,9 @@
                                    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();
                                    localFunction.SaveFunctionData(false);
                                }
                                deviceList.list.Remove(newFunction);//操作完的数据清理掉,剩下的就是新增的功能
                            }
@@ -394,16 +389,13 @@
                        //处理剩下的新增功能
                        foreach (var newFunction in deviceList.list)
                        {
                            new System.Threading.Thread(() =>
                            {
                                newFunction.SaveFunctionData();
                            newFunction.SaveFunctionData(false);
                                List.IniFunctionList(newFunction.savePath);
                            })
                            { IsBackground = true }.Start();
                        }
                    }
                    MainPage.Log($"读取云端设备数据:\r\n{ pack.Data.ToString()}");
                }else
                }
                else
                {
                    MainPage.Log($"读取云端设备数据失败:\r\nCode:{pack.Code};  Msg:{pack.message}");
                }
@@ -416,18 +408,54 @@
        /// </summary>
        public void DownloadSceneList()
        {
            new System.Threading.Thread(() =>
            new Thread(() =>
            {
                var pm = new HttpServerRequest();
                var pack = pm.GetSceneList();
                if(pack.Code == StateCode.SUCCESS)
                {
                    MainPage.Log($"读取云端场景数据:\r\n{pack.Data.ToString()}");
                    var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
                    if (sceneList != null)
                    {
                        ////将下载到到数据全部保存
                        //new Thread(() => {
                        //    foreach (var temp in sceneList)
                        //    {
                        //        temp.SaveSceneData();
                        //    }
                        //})
                        //{ IsBackground = true }.Start();
                        foreach (var localScene in List.scenes)
                        {
                            var newScene = sceneList.Find((obj) => obj.userSceneId == localScene.userSceneId);
                            if (newScene == null)//如果云端最新数据没有该条数据,则本地需要删掉该数据记录
                            {
                                List.DeleteScene(localScene,false);
                }
                else
                {
                                if (localScene.modifyTime != newScene.modifyTime)
                                {
                                    localScene.name = newScene.name;
                                    localScene.collect = newScene.collect;
                                    localScene.modifyTime = newScene.modifyTime;
                                    localScene.roomIds = newScene.roomIds;
                                    localScene.SaveSceneData(false);
                                }
                                sceneList.Remove(newScene);//操作完的数据清理掉,剩下的就是新增的功能
                            }
                        }
                        //处理剩下的新增功能
                        foreach (var newScene in sceneList)
                        {
                            newScene.SaveSceneData(false);
                            List.scenes.Add(newScene);
                        }
                    }
                }
                else
                {
                    MainPage.Log($"读取云端场景数据失败:\r\nCode:{pack.Code};  Msg:{pack.message}");
                }
            })
@@ -453,10 +481,27 @@
        /// <summary>
        /// 删除场景
        /// </summary>
        public void DeleteScene(Scene scene)
        public void DeleteScene(Scene scene,bool upSevser)
        {
            scene.DeleteSign = true;
            if (upSevser)
            {
                var pm = new HttpServerRequest();
                var packCode = pm.DeleteScene(scene.userSceneId);
                if (packCode == StateCode.SUCCESS)
                {
                    FileUtils.DeleteFile(scene.savePath);
            List.scenes.Remove(scene);
                }
                else
                {
                    Utlis.ShowTip(Shared.Language.StringByID(StringId.DeleteSceneFail) + "Code:" + packCode);
                }
            }
            else
            {
                FileUtils.DeleteFile(scene.savePath);
                List.scenes.Remove(scene);
            }
        }
        /// <summary>
        /// 删除本地功能文件
@@ -504,16 +549,27 @@
            FileUtils.DeleteFile(delTemp.savePath);
        }
        bool lockReadFunctionStatus = false;
        /// <summary>
        /// 读取全部功能的状态
        /// </summary>
        public void ReadAllFunctionStatus()
        {
            if (lockReadFunctionStatus)
            {
                MainPage.Log($"多次进入--返回");
                return;
            }
            new Thread(() =>
            {
                try
                if (lockReadFunctionStatus)
                {
                    if (DB_ResidenceData.residenceData.GatewayType == 0)
                    MainPage.Log($"多次进入--返回");
                    return;
                }
                MainPage.Log($"进入--读取");
                lockReadFunctionStatus = true;
                try
                    {
                        foreach (var function in GetAllDeviceFunctionList())
                        {
@@ -529,26 +585,17 @@
                            }
                        }
                    }
                    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}");
                }
                finally
                {
                    lockReadFunctionStatus = false;
                    MainPage.Log($"结束--读取");
                }
            })
            { IsBackground = true }.Start();
        }
    }