From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期五, 10 七月 2020 10:52:13 +0800 Subject: [PATCH] 2020-07-10-01 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 738 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 592 insertions(+), 146 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs index ff5759c..b7c17d8 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs @@ -77,12 +77,12 @@ } /// <summary> - /// 鍒锋柊鎴块棿鐨勫満鏅垪琛� + /// 鍒锋柊鏈湴鐨勫叏閮ㄥ満鏅� /// </summary> - public async Task<bool> RefreshSceneUIList() + public bool RefreshSceneUIList() { //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅� - var sceneList = await ZigBee.Device.Scene.GetSceneListAsync(); + var sceneList = this.RefreshSceneListFromGateway(); if (sceneList == null) { return false; @@ -95,6 +95,8 @@ continue; } listEsxit.Add(scene.ScenesId); + //鍒锋柊scene鐨勪俊鎭� + this.RefreshScene(scene); } var listDelete = new List<SceneUI>(); @@ -109,10 +111,103 @@ foreach (var sceneui in listDelete) { //鎵ц鍒犻櫎 - this.RemoveScene(sceneui); + this.DeleteLocalScene(sceneui); } return true; + } + + /// <summary> + /// 鍒锋柊scene鐨勪俊鎭� + /// </summary> + /// <param name="sceneInfo"></param> + private void RefreshScene(Scene.GetSceneAllInfo sceneInfo) + { + if (this.dicScenes.ContainsKey(sceneInfo.ScenesId) == true) + { + var localScene = this.dicScenes[sceneInfo.ScenesId]; + //鍙埛鏂板悕瀛楀拰缁戝畾琛� + localScene.Name = sceneInfo.ScenesName; + localScene.AdjustTargetList.Clear(); + localScene.AdjustTargetList.AddRange(sceneInfo.DeviceList); + localScene.Save(); + } + else + { + var newScene = new SceneUI(); + newScene.Name = sceneInfo.ScenesName; + newScene.IconPath = "SceneIcon/0.png"; + newScene.Id = sceneInfo.ScenesId; + newScene.AdjustTargetList.AddRange(sceneInfo.DeviceList); + //娣诲姞缂撳瓨 + newScene.Save(); + //鍔犲叆缂撳瓨 + this.dicScenes[newScene.Id] = newScene; + //澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(newScene.FileName); + } + + } + + /// <summary> + /// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛� + /// </summary> + /// <returns></returns> + private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway() + { + var mainGateway = ZbGateway.MainGateWay; + if (mainGateway == null) + { + //鑾峰彇缃戝叧瀵硅薄澶辫触 + this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail)); + return null; + } + + //瓒呮椂鏃堕棿 + int TimeOut = 0; + bool receiptAll = false; + + var listScene = new List<Scene.GetSceneAllInfo>(); + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon") + { + var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString()); + listScene.Add(sceneGetAllInfo); + + if (sceneGetAllInfo.ScenesNum == sceneGetAllInfo.ScenesSum) + { + //鎺ユ敹瀹屾垚 + receiptAll = true; + TimeOut = 0; + } + } + }; + mainGateway.Actions += action; + + var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 807 } }; + mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString())); + + int waitTime = 20 * 6; + while (receiptAll == false && TimeOut < waitTime) + { + //鍏ㄩ儴鎺ユ敹鎵嶉��鍑� + System.Threading.Thread.Sleep(50); + TimeOut++; + } + mainGateway.Actions -= action; + action = null; + if (receiptAll == false) + { + //缃戠粶涓嶇ǔ瀹氾紝鍦烘櫙鍒楄〃淇℃伅缂烘崯 + this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull)); + return null; + } + + return listScene; } #endregion @@ -120,78 +215,141 @@ #region 鈻� 娣诲姞鍦烘櫙___________________________ /// <summary> - /// 娣诲姞鍦烘櫙(鏇存柊缃戝叧) 0澶辫触 1鎴愬姛 -1宸茬粡瀛樺湪 + /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊) /// </summary> - /// <returns>The scene.</returns> - /// <param name="sceneName">Scene name.</param> - /// <param name="sceneIconPath">鑳屾櫙鍥剧墖锛屼笉鍖呭惈浣忓畢璺緞 濡傛灉iconPathType=1鎴栬��2 闇�瑕佹嫾鎺ヤ綇瀹� 鍙樻垚 浣忓畢/sceneIconPath</param> - /// <param name="commons">Commons.</param> - /// <param name="iconPathType">I鍦烘櫙鑳屾櫙鍥剧墖鏉ユ簮绫诲瀷 鍥剧墖鏉ユ簮 0--鏈湴鍥惧簱 1--鎷嶇収 2--绯荤粺鍥惧簱 榛樿0</param> - public async Task<int> AddScene(Room i_room, string sceneName, string sceneIconPath, List<Scene.AddSceneMemberData> commons, int iconPathType) + /// <param name="sceneName">鍦烘櫙鍚嶇О</param> + /// <param name="listAdjustTarget">鎵ц鐩爣</param> + /// <returns></returns> + public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget) { - var getSceneIdAllData = await Scene.GetSceneNewIdAsync(sceneName); - if (getSceneIdAllData == null || getSceneIdAllData.getSceneIdData == null) + int NewScenesId = -1; + //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢 + if (Common.Config.Instance.Home.IsVirtually == false) { - return 0; - } - var getSceneIdData = getSceneIdAllData.getSceneIdData; - - bool result = true; - foreach (var common in commons) - { - //娣诲姞鏂版垚鍛� - var addSceneMemberData = new Scene.AddSceneMemberData + var result1 = await Scene.GetSceneNewIdAsync(sceneName); + //鍏遍�氶敊璇娴� + string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1); + if (error != null) { - Type = common.Type, - DeviceAddr = common.DeviceAddr, - Epoint = common.Epoint, - ScenesId = getSceneIdData.NewScenesId, - TaskList = common.TaskList, - DelayTime = common.DelayTime, - MemberNumber = common.MemberNumber, - ElseScenesId = common.ElseScenesId - }; + 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; + } + else + { + //铏氭嫙鍦烘櫙ID + NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); + } + //娣诲姞鎵ц鐩爣 + var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget); + if (listSuccess == null) + { + return null; + } + + //鍒涘缓鍦烘櫙瀵硅薄 + var newScene = new SceneUI(); + newScene.Name = sceneName; + newScene.Id = NewScenesId; + newScene.AdjustTargetList.AddRange(listSuccess); + //娣诲姞缂撳瓨 + newScene.Save(); + //鍔犲叆缂撳瓨 + this.dicScenes[newScene.Id] = newScene; + + return newScene; + } + + /// <summary> + /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�) + /// </summary> + /// <param name="sceneId">鍦烘櫙Id</param> + /// <param name="listAdjustTarget">鎵ц鐩爣</param> + /// <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++) + { + var data = listAdjustTarget[i]; + var addData = new Scene.AddSceneMemberData(); + if (data.Type == 0) + { + //璁惧 + addData.Type = 0; + addData.ScenesId = sceneId; + addData.DeviceAddr = data.DeviceAddr; + addData.Epoint = data.Epoint; + addData.TaskList = data.TaskList; + addData.DelayTime = 0; + addData.MemberNumber = i + 1; + } + else if (data.Type == 1) + { + //鍦烘櫙 + addData.Type = 1; + addData.ScenesId = sceneId; + addData.ElseScenesId = data.ElseScenesId; + addData.DelayTime = 0; + addData.MemberNumber = i + 1; + } + else + { + //寤舵椂 + addData.Type = 2; + addData.ScenesId = sceneId; + addData.DelayTime = data.DelayTime; + addData.MemberNumber = i + 1; + } + //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉 - var addSceneMemberResponseAllData = await Scene.AddSceneMemberAsync(addSceneMemberData); - if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null) + var result2 = await Scene.AddSceneMemberAsync(addData); + if (result2 == null || result2.addSceneMemberResponseData == null + || result2.addSceneMemberResponseData.Result != 1) { continue; } - var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData; - if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1) - { - result = false; - } + //鎷ユ湁鎴愬姛鐨� + listSuccess.Add(data); } - //鍔犲叆鎴愬姛 - if (result) + if (listSuccess.Count == 0) { - var sceneUI = new SceneUI - { - Name = sceneName, - Id = getSceneIdData.NewScenesId, - IconPath = sceneIconPath, - IconPathType = iconPathType, - AddSceneMemberDataList = commons - }; - //娣诲姞缂撳瓨 - sceneUI.Save(); - this.dicScenes[sceneUI.Id] = sceneUI; - if (i_room.ListSceneId.Contains(sceneUI.Id) == false) - { - i_room.ListSceneId.Add(sceneUI.Id); - i_room.Save(); - } - return 1; + //娣诲姞鎵ц鐩爣澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail); + this.ShowTipMsg(msg1); + return null; } - return 0; + //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず + if (listSuccess.Count != listAdjustTarget.Count) + { + //涓埆鎵ц鐩爣娣诲姞澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail); + this.ShowTipMsg(msg1); + } + return listSuccess; } /// <summary> /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿) /// </summary> /// <param name="scene">Scene.</param> - public void AddScene(Room i_room, SceneUI scene) + public void AddSceneToRoom(Room i_room, SceneUI scene) { //娣诲姞缂撳瓨 if (i_room.ListSceneId.Contains(scene.Id) == false) @@ -199,6 +357,29 @@ i_room.ListSceneId.Add(scene.Id); i_room.Save(); } + } + + /// <summary> + /// 鏀瑰彉鍦烘櫙鎴块棿 + /// </summary> + /// <param name="scene">鍦烘櫙瀵硅薄</param> + /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param> + public void ChangedSceneRoom(SceneUI scene, string newRoomId) + { + var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id); + if (room != null) + { + //鎴块棿娌℃湁鏀瑰彉 + if (room.Id == newRoomId) + { + return; + } + //浠庢埧闂翠腑绉婚櫎缂撳瓨 + this.DeleteSceneFromRoom(room, scene); + } + //娣诲姞杩涙柊鎴块棿 + var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId); + this.AddSceneToRoom(newRoom, scene); } /// <summary> @@ -217,32 +398,34 @@ } /// <summary> - /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�) + /// 娣诲姞铏氭嫙鍦烘櫙 /// </summary> - /// <param name="scene"></param> - public void DeleteScene(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 @@ -250,67 +433,136 @@ #region 鈻� 淇敼鍦烘櫙___________________________ /// <summary> - /// 淇敼鍦烘櫙璁惧 0澶辫触 1鎴愬姛 + /// 淇敼缃戝叧鐨勫満鏅� /// </summary> - /// <returns>The scene.</returns> - /// <param name="sceneUI">Scene user interface.</param> - /// <param name="sceneRemoveMemberData">Scene remove member data.</param> - /// <param name="addCommons">Add commons.</param> - public async Task<int> ModifyScene(SceneUI sceneUI, Scene.SceneRemoveMemberData sceneRemoveMemberData, List<Scene.AddSceneMemberData> addCommons) + /// <param name="sceneUI">鍦烘櫙瀵硅薄</param> + /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param> + /// <returns></returns> + public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget) { - bool result = true; - //绉婚櫎鎴愬憳 杩斿洖缁撴灉 - var removeSceneMemberResponseAllData = await ZigBee.Device.Scene.RemoveSceneMemberAsync(sceneRemoveMemberData); - if (removeSceneMemberResponseAllData == null || removeSceneMemberResponseAllData.removeSceneMemberResponseData == null) + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇� + if (Common.Config.Instance.Home.IsVirtually == true) { - return 0; - } - var removeSceneMemberResponseData = removeSceneMemberResponseAllData.removeSceneMemberResponseData; - if (removeSceneMemberResponseData == null) - { - return 0; - } - if (removeSceneMemberResponseData.Result != 0) - { - result = false; - } - //娣诲姞 - foreach (var addCommon in addCommons) - { - //娣诲姞鏂版垚鍛� - var addSceneMemberData = new ZigBee.Device.Scene.AddSceneMemberData - { - DeviceAddr = addCommon.DeviceAddr, - Type = addCommon.Type, - Epoint = addCommon.Epoint, - ScenesId = sceneUI.Id, - TaskList = addCommon.TaskList, - DelayTime = addCommon.DelayTime, - ElseScenesId = addCommon.ElseScenesId, - MemberNumber = addCommon.MemberNumber - }; - //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉 - var addSceneMemberResponseAllData = await ZigBee.Device.Scene.AddSceneMemberAsync(addSceneMemberData); - if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null) - { - result = false; - System.Console.WriteLine("娣诲姞鍦烘櫙澶辫触"); - continue; - } - var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData; - if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1) - { - result = false; - } - } - //鍔犲叆鎴愬姛 - if (result) - { - sceneUI.AddSceneMemberDataList = addCommons; + //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨 + sceneUI.AdjustTargetList.Clear(); + sceneUI.AdjustTargetList.AddRange(listAdjustTarget); sceneUI.Save(); - return 1; + return true; } - return 0; + + //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣 + var deleteData = new Scene.SceneRemoveMemberData(); + var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>(); + for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++) + { + var data = sceneUI.AdjustTargetList[i]; + var removeData = new Scene.RemoveSceneDeviceListInfo(); + if (data.Type == 0) + { + //璁惧 + removeData.Type = 0; + removeData.DeviceAddr = data.DeviceAddr; + removeData.Epoint = data.Epoint; + removeData.MemberNumber = data.MemberNumber; + } + else if (data.Type == 1) + { + //鍦烘櫙 + removeData.Type = 1; + removeData.ElseScenesId = data.ElseScenesId; + removeData.MemberNumber = data.MemberNumber; + } + else + { + //寤舵椂 + removeData.Type = 2; + removeData.DelayTime = data.DelayTime; + removeData.MemberNumber = data.MemberNumber; + } + //鎷ユ湁鎴愬姛鐨� + deleteTargetData.Add(removeData); + } + deleteData.DeviceList = deleteTargetData; + deleteData.ScenesId = sceneUI.Id; + //鎵ц娓呯┖ + var result = await Scene.RemoveSceneMemberAsync(deleteData); + if (result == null || result.removeSceneMemberResponseData == null) + { + //鍒濆鍖栨墽琛岀洰鏍囧け璐� + string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result); + this.ShowTipMsg(msg1); + return false; + } + if (result.removeSceneMemberResponseData.Result != 0) + { + //鍒濆鍖栨墽琛岀洰鏍囧け璐� + string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail); + this.ShowTipMsg(msg1); + return false; + } + //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨 + sceneUI.AdjustTargetList.Clear(); + + //鐒跺悗閲嶆柊娣诲姞 + var listSuccess = await this.AddTargetToScene(sceneUI.Id, listAdjustTarget); + if (listSuccess == null) + { + return false; + } + sceneUI.AdjustTargetList.AddRange(listSuccess); + sceneUI.Save(); + + return true; + } + + /// <summary> + /// 淇敼缃戝叧鐨勫満鏅悕绉� + /// </summary> + /// <param name="scene">鍦烘櫙瀵硅薄</param> + /// <param name="newName">鏂扮殑鍚嶅瓧</param> + /// <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); + if (error != null) + { + this.ShowErrorMsg(error); + return false; + } + if (result1 == null || result1.sceneRenameResponseData == null) + { + //淇敼鍦烘櫙鍚嶇О澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1); + this.ShowTipMsg(msg1); + return false; + } + if (result1.sceneRenameResponseData.Result == 2) + { + //鐩爣鍦烘櫙涓嶅瓨鍦� + string msg1 = Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit); + this.ShowTipMsg(msg1); + return false; + } + if (result1.sceneRenameResponseData.Result != 1) + { + //淇敼鍦烘櫙鍚嶇О澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail); + this.ShowTipMsg(msg1); + return false; + } + return true; } #endregion @@ -318,10 +570,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); @@ -354,6 +606,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(); } } @@ -403,13 +684,14 @@ /// <returns></returns> public string GetZoneById(int sceneId) { - var room =HdlRoomLogic.Current.GetRoomBySceneId(sceneId); + var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId); if (room == null) { return null; } - var floorName = Shared.Common.Config.Instance.Home.GetFloorNameById(room.FloorId); - if (floorName == null) + var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId); + //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥� + if (string.IsNullOrEmpty(floorName)) { return room.Name; } @@ -428,6 +710,11 @@ var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { + if (room.IsLove == true) + { + //涓嶅寘鍚敹钘忔埧闂� + continue; + } foreach (int sceneId in room.ListSceneId) { if (listEsxit.Contains(sceneId) == false) @@ -443,11 +730,6 @@ sceneUIs.Add(myScene); } } - - if (sceneUIs.Count == 0) - { - return null; - } return sceneUIs; } @@ -461,6 +743,11 @@ var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { + if (room.IsLove == true) + { + //涓嶅寘鍚敹钘忔埧闂� + continue; + } foreach (int sceneId in room.ListSceneId) { if (this.dicScenes.ContainsKey(sceneId) == true) @@ -493,6 +780,138 @@ #endregion + #region 鈻� 璋冪敤鍦烘櫙___________________________ + + /// <summary> + /// 璋冪敤鍦烘櫙 + /// </summary> + /// <param name="scene"></param> + /// <returns></returns> + public async Task<bool> ControlScene(SceneUI scene) + { + if (scene.RemainTime > 0) + { + HdlThreadLogic.Current.RunMain(() => + { + //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚� + var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying)); + msgContr.Show(); + }); + 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) + { + //鎺у埗鍦烘櫙澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + HdlThreadLogic.Current.RunMain(() => + { + //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚� + var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg); + msgContr.Show(); + }); + return false; + } + if (result.sceneOpenData.Result == 0) + { + //鎺у埗鍦烘櫙澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail); + HdlThreadLogic.Current.RunMain(() => + { + //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚� + var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg); + msgContr.Show(); + }); + return false; + } + return true; + } + + #endregion + + #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________ + + /// <summary> + /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛� + /// </summary> + /// <param name="i_scene">鍦烘櫙瀵硅薄</param> + /// <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); + if (error != null) + { + this.ShowErrorMsg(error); + return null; + } + if (result == null || result.getSceneDeviceListInfo == null) + { + //鑾峰彇鎵ц鐩爣澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + + this.ShowTipMsg(msg); + return null; + } + i_scene.AdjustTargetList = result.getSceneDeviceListInfo.DeviceList; + //淇濆瓨缂撳瓨 + i_scene.Save(false); + + var listData = new List<Scene.DeviceListData>(); + listData.AddRange(result.getSceneDeviceListInfo.DeviceList); + + return listData; + } + #endregion + + #region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________ + + /// <summary> + /// 寮�鍚欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾) + /// </summary> + public void StartDelayTimeThread(SceneUI i_scene) + { + if (i_scene.RemainThreadAction == true) + { + //绾跨▼鍦ㄨ繍琛屼腑 + return; + } + i_scene.RemainThreadAction = true; + + HdlThreadLogic.Current.RunThread(() => + { + while (i_scene.RemainTime > 0) + { + System.Threading.Thread.Sleep(1000); + i_scene.RemainTime--; + } + i_scene.RemainThreadAction = false; + }); + } + + #endregion + #region 鈻� 涓�鑸柟娉昣__________________________ /// <summary> @@ -515,6 +934,33 @@ } return listSceneFile; } + + /// <summary> + /// 鏄剧ず閿欒淇℃伅绐楀彛 + /// </summary> + /// <param name="msg"></param> + private void ShowErrorMsg(string msg) + { + Application.RunOnMainThread(() => + { + var contr = new ShowMsgControl(ShowMsgType.Error, msg); + contr.Show(); + }); + } + + /// <summary> + /// 鏄剧ずTip淇℃伅绐楀彛 + /// </summary> + /// <param name="msg"></param> + private void ShowTipMsg(string msg) + { + Application.RunOnMainThread(() => + { + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + }); + } + #endregion } } -- Gitblit v1.8.0