黄学彪
2020-04-28 e22fdb94322e6cec38e5e4a9aec13d431a133fde
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -109,7 +109,7 @@
            foreach (var sceneui in listDelete)
            {
                //执行删除
                this.RemoveScene(sceneui);
                this.DeleteLocalScene(sceneui);
            }
            return true;
@@ -127,25 +127,36 @@
        /// <returns></returns>
        public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
        {
            var result1 = await Scene.GetSceneNewIdAsync(sceneName);
            //共通错误检测
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
            if (error != null)
            int NewScenesId = -1;
            //如果当前住宅不是虚拟住宅
            if (Common.Config.Instance.Home.IsVirtually == false)
            {
                this.ShowErrorMsg(error);
                return null;
                var result1 = await Scene.GetSceneNewIdAsync(sceneName);
                //共通错误检测
                string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
                if (error != null)
                {
                    this.ShowErrorMsg(error);
                    return null;
                }
                if (result1 == null || result1.getSceneIdData == null)
                {
                    //添加场景失败
                    string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
                    //拼接上【网关回复超时】的Msg
                    msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
                    this.ShowTipMsg(msg1);
                    return null;
                }
                NewScenesId = result1.getSceneIdData.NewScenesId;
            }
            if (result1 == null || result1.getSceneIdData == null)
            else
            {
                //添加场景失败
                string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
                //拼接上【网关回复超时】的Msg
                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
                this.ShowTipMsg(msg1);
                return null;
                //虚拟场景ID
                NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
            }
            //添加执行目标
            var listSuccess = await this.AddTargetToScene(result1.getSceneIdData.NewScenesId, listAdjustTarget);
            var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
            if (listSuccess == null)
            {
                return null;
@@ -154,7 +165,7 @@
            //创建场景对象
            var newScene = new SceneUI();
            newScene.Name = sceneName;
            newScene.Id = result1.getSceneIdData.NewScenesId;
            newScene.Id = NewScenesId;
            newScene.AdjustTargetList.AddRange(listSuccess);
            //添加缓存
            newScene.Save();
@@ -172,6 +183,12 @@
        /// <returns></returns>
        private async Task<List<Scene.DeviceListData>> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
        {
            //如果当前住宅是虚拟住宅的话
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                //不需要更新网关
                return listAdjustTarget;
            }
            var listSuccess = new List<Scene.DeviceListData>();
            for (int i = 0; i < listAdjustTarget.Count; i++)
            {
@@ -286,32 +303,34 @@
        }
        /// <summary>
        /// 删除场景(这个只移除内存)
        /// 添加虚拟场景
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
        /// <param name="sceneId">指定场景id,如果为-1,则会内部自动编号(可能会重复)</param>
        /// <param name="sceneName">场景名字</param>
        /// <param name="listAdjustTarget">绑定目标</param>
        /// <returns></returns>
        public SceneUI AddVirtualScene(int sceneId, string sceneName, List<Scene.DeviceListData> listAdjustTarget)
        {
            //移除缓存
            if (i_room.ListSceneId.Contains(scene.Id) == true)
            if (sceneId == -1)
            {
                i_room.ListSceneId.Remove(scene.Id);
                i_room.Save();
                sceneId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
            }
        }
            //创建场景对象
            var newScene = new SceneUI();
            newScene.Name = sceneName;
            newScene.IconPath = "SceneIcon/0.png";
            //虚拟场景ID
            newScene.Id = sceneId;
            if (listAdjustTarget != null)
            {
                newScene.AdjustTargetList.AddRange(listAdjustTarget);
            }
            //添加缓存
            newScene.Save();
            //加入缓存
            this.dicScenes[newScene.Id] = newScene;
        /// <summary>
        /// 删除搜藏场景
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteLoveScene(SceneUI scene)
        {
            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
            //移除缓存
            if (nowRoom.ListSceneId.Contains(scene.Id) == true)
            {
                nowRoom.ListSceneId.Remove(scene.Id);
                nowRoom.Save();
            }
            return newScene;
        }
        #endregion
@@ -326,6 +345,16 @@
        /// <returns></returns>
        public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
        {
            //如果当前住宅是虚拟住宅的话
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                //清空场景的执行目标列表的缓存
                sceneUI.AdjustTargetList.Clear();
                sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
                sceneUI.Save();
                return true;
            }
            //先清空全部的执行目标
            var deleteData = new Scene.SceneRemoveMemberData();
            var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
@@ -401,6 +430,12 @@
        /// <returns></returns>
        public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
        {
            //如果当前住宅是虚拟住宅的话
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                //不需要更新网关
                return true;
            }
            var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
            //共通错误检测
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
@@ -440,10 +475,10 @@
        #region ■ 删除场景___________________________
        /// <summary>
        /// 移除场景--该仅进行了对本地场景数据的删除
        /// 删除本地场景数据
        /// </summary>
        /// <param name="sceneUI">Scene user interface.</param>
        public void RemoveScene(SceneUI sceneUI)
        public void DeleteLocalScene(SceneUI sceneUI)
        {
            //移除缓存
            this.dicScenes.Remove(sceneUI.Id);
@@ -476,6 +511,35 @@
                    Global.DeleteFilebyHomeId(sceneUI.IconPath);
                    HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
                }
            }
        }
        /// <summary>
        /// 删除场景(这个只移除内存)
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
        {
            //移除缓存
            if (i_room.ListSceneId.Contains(scene.Id) == true)
            {
                i_room.ListSceneId.Remove(scene.Id);
                i_room.Save();
            }
        }
        /// <summary>
        /// 删除搜藏场景
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteLoveScene(SceneUI scene)
        {
            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
            //移除缓存
            if (nowRoom.ListSceneId.Contains(scene.Id) == true)
            {
                nowRoom.ListSceneId.Remove(scene.Id);
                nowRoom.Save();
            }
        }
@@ -639,6 +703,13 @@
                });
                return false;
            }
            //如果是虚拟住宅
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                //不调用网关
                return true;
            }
            //执行调用场景
            var result = await Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
            if (result == null || result.sceneOpenData == null)
@@ -681,6 +752,14 @@
        /// <returns></returns>
        public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
        {
            //如果住宅为虚拟住宅
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                var listAdjustTarget = new List<Scene.DeviceListData>();
                listAdjustTarget.AddRange(i_scene.AdjustTargetList);
                return listAdjustTarget;
            }
            var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
            //共通错误检测
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);