From f3e65daca7978b21b5888f49b1bf35e1a6e5d4fd Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期一, 13 七月 2020 12:33:31 +0800 Subject: [PATCH] 新版本 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 322 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 271 insertions(+), 51 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs index 925d1eb..402cf70 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs @@ -79,10 +79,10 @@ /// <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,112 @@ 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; + bool canReceve = 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); + + //鏇村鎺ユ敹寰楀埌鍦烘櫙 + canReceve = true; + 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 (canReceve == false) + { + //鑾峰彇鍦烘櫙鍒楄〃澶辫触,缃戝叧鍥炲瓒呮椂 + this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetSceneListFailAndTimeOut)); + return null; + } + else if (receiptAll == false) + { + //缃戠粶涓嶇ǔ瀹氾紝鍦烘櫙鍒楄〃淇℃伅缂烘崯 + this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull)); + return null; + } + + return listScene; } #endregion @@ -127,25 +231,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 +269,7 @@ //鍒涘缓鍦烘櫙瀵硅薄 var newScene = new SceneUI(); newScene.Name = sceneName; - newScene.Id = result1.getSceneIdData.NewScenesId; + newScene.Id = NewScenesId; newScene.AdjustTargetList.AddRange(listSuccess); //娣诲姞缂撳瓨 newScene.Save(); @@ -172,6 +287,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++) { @@ -282,36 +403,40 @@ { nowRoom.ListSceneId.Add(scene.Id); nowRoom.Save(); + //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤� + UserView.UserPage.Instance.RefreshAllForm = true; } } /// <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 +451,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>(); @@ -353,7 +488,7 @@ //寤舵椂 removeData.Type = 2; removeData.DelayTime = data.DelayTime; - removeData.MemberNumber = i + 1; + removeData.MemberNumber = data.MemberNumber; } //鎷ユ湁鎴愬姛鐨� deleteTargetData.Add(removeData); @@ -401,6 +536,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 +581,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); @@ -477,11 +618,74 @@ HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath); } } + //鍒犻櫎鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤� + UserView.UserPage.Instance.RefreshAllForm = true; + } + + /// <summary> + /// 娓呯┖鏈湴鍏ㄩ儴鐨勫満鏅暟鎹� + /// </summary> + public void DeleteAllLocalScene() + { + var listScene = new List<SceneUI>(); + foreach (var scene in this.dicScenes.Values) + { + listScene.Add(scene); + } + foreach (var scene in listScene) + { + this.DeleteLocalScene(scene); + } + } + + /// <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(); + //鍙栨秷鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤� + UserView.UserPage.Instance.RefreshAllForm = true; + } } #endregion #region 鈻� 鑾峰彇鍦烘櫙___________________________ + + /// <summary> + /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅�(鍖呭惈鏈垎閰�) + /// </summary> + /// <returns></returns> + public List<SceneUI> GetAllLocalScene() + { + //鎴块棿鐨勫満鏅斁鍦ㄥ墠闈� + var listScene = this.GetAllRoomSceneList(); + //鏈垎閰嶇殑鍦烘櫙 + var listUnalloctScene = this.GetUnalloctedScenes(); + listScene.AddRange(listUnalloctScene); + return listScene; + } /// <summary> /// 閫氳繃鍦烘櫙id鑾峰彇鍦烘櫙 @@ -525,13 +729,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; } @@ -570,11 +775,6 @@ sceneUIs.Add(myScene); } } - - if (sceneUIs.Count == 0) - { - return null; - } return sceneUIs; } @@ -588,6 +788,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) @@ -639,6 +844,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 +893,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); @@ -746,7 +966,7 @@ public List<string> GetAllSceneFile() { List<string> listSceneFile = new List<string>(); - List<string> listAllFile = Global.FileListByHomeId(); + List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile(); foreach (string file in listAllFile) { -- Gitblit v1.8.0