From dc0309e64f02227d8e1468b7326c07955f804612 Mon Sep 17 00:00:00 2001 From: chenqiyang <1406175257@qq.com> Date: 星期三, 22 六月 2022 11:22:18 +0800 Subject: [PATCH] 修改引用路径 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 2220 ++++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,116 insertions(+), 1,104 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs old mode 100755 new mode 100644 index c9d80ec..7dd4fc8 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs @@ -1,1104 +1,1116 @@ -锘縰sing Shared.Common; -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using ZigBee.Device; - -namespace Shared.Phone.UserCenter -{ - /// <summary> - /// 鍦烘櫙鐨勯�昏緫 - /// </summary> - public class HdlSceneLogic - { - #region 鈻� 鍙橀噺澹版槑___________________________ - - /// <summary> - /// 鍦烘櫙鐨勯�昏緫 - /// </summary> - private static HdlSceneLogic m_Current = null; - /// <summary> - /// 鍦烘櫙鐨勯�昏緫 - /// </summary> - public static HdlSceneLogic Current - { - get - { - if (m_Current == null) - { - m_Current = new HdlSceneLogic(); - } - return m_Current; - } - } - - /// <summary> - /// 鍦烘櫙瀵硅薄 - /// </summary> - private Dictionary<int, SceneUI> dicScenes = new Dictionary<int, SceneUI>(); - - #endregion - - #region 鈻� 鍒锋柊鍦烘櫙___________________________ - - /// <summary> - /// 浠庢湰鍦板埛鏂板満鏅� - /// </summary> - public void ReFreshByLocal() - { - //娓呯┖鍦烘櫙 - this.dicScenes.Clear(); - //鑾峰彇鍏ㄩ儴鏂囦欢 - var listFile = this.GetAllSceneFile(); - foreach (string fileName in listFile) - { - try - { - var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName)); - var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo); - if (tempScene == null) - { - continue; - } - this.dicScenes[tempScene.Id] = tempScene; - } - catch(Exception ex) - { - HdlLogLogic.Current.WriteLog(ex); - try - { - //鍒犳帀閿欒鏂囦欢 - Global.DeleteFilebyHomeId(fileName); - } - catch { } - } - } - } - - /// <summary> - /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙 - /// </summary> - /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param> - public bool RefreshSceneUIList(bool useLocalConnect) - { - //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅� - var sceneList = this.RefreshSceneListFromGateway(useLocalConnect); - if (sceneList == null) - { - return false; - } - var listEsxit = new HashSet<int>(); - foreach (var scene in sceneList) - { - if (scene == null) - { - continue; - } - listEsxit.Add(scene.ScenesId); - //鍒锋柊scene鐨勪俊鎭� - this.RefreshScene(scene); - } - - var listDelete = new List<SceneUI>(); - foreach (var scId in this.dicScenes.Keys) - { - if (listEsxit.Contains(scId) == false) - { - //鍒犻櫎鐨勫璞� - listDelete.Add(this.dicScenes[scId]); - } - } - foreach (var sceneui in listDelete) - { - //鎵ц鍒犻櫎 - 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> - /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param> - private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect) - { - 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()); - if (sceneGetAllInfo.ScenesSum != 0) - { - //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵 - 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 } }; - if (useLocalConnect == false) - { - mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString())); - } - else - { - mainGateway.SendLocation(("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 - - #region 鈻� 娣诲姞鍦烘櫙___________________________ - - /// <summary> - /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊) - /// </summary> - /// <param name="sceneName">鍦烘櫙鍚嶇О</param> - /// <param name="listAdjustTarget">鎵ц鐩爣</param> - /// <returns></returns> - public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget) - { - int NewScenesId = -1; - //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢 - if (Config.Instance.Home.IsVirtually == false) - { - //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃 - var strCommand = this.GetAddNewSceneCommand(sceneName); - var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon"); - if (result.ErrorMsg != null) - { - this.ShowTipMsg(result.ErrorMsg); - return null; - } - if (result.ErrorMsgDiv == 0) - { - //娣诲姞鍦烘櫙澶辫触 - string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail); - //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg - msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result); - this.ShowTipMsg(msg1); - return null; - } - var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData); - NewScenesId = getSceneIdData.NewScenesId; - } - else - { - //铏氭嫙鍦烘櫙ID - NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); - } - //娣诲姞鎵ц鐩爣 - var listSuccess = 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="sceneName">鍦烘櫙鍚嶇О</param> - /// <returns></returns> - public string GetAddNewSceneCommand(string sceneName) - { - var bytes = new byte[32]; - var reamarkGwBytes = Encoding.UTF8.GetBytes(sceneName); - Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length); - sceneName = Encoding.UTF8.GetString(bytes); - - var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 800 } }; - var data = new Newtonsoft.Json.Linq.JObject { { "ScenesName", sceneName } }; - jObject.Add("Data", data); - - return jObject.ToString(); - } - - /// <summary> - /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�) - /// </summary> - /// <param name="sceneId">鍦烘櫙Id</param> - /// <param name="listAdjustTarget">鎵ц鐩爣</param> - /// <returns></returns> - private 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>(); - - //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护 - var listCommand = this.GetAddTargetToSceneCommand(sceneId, listAdjustTarget); - for (int i = 0; i < listCommand.Count; i++) - { - var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon"); - if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) - { - //鍑虹幇閿欒 - continue; - } - var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData); - if (addSceneMemberData.Result == 1) - { - listSuccess.Add(listAdjustTarget[i]); - } - } - if (listSuccess.Count == 0) - { - //娣诲姞鎵ц鐩爣澶辫触 - string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail); - this.ShowTipMsg(msg1); - return null; - } - //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず - if (listSuccess.Count != listAdjustTarget.Count) - { - //涓埆鎵ц鐩爣娣诲姞澶辫触 - string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail); - this.ShowTipMsg(msg1); - } - return listSuccess; - } - - /// <summary> - /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护 - /// </summary> - /// <param name="sceneId">鍦烘櫙id</param> - /// <param name="listAdjustTarget">鎵ц鐩爣</param> - /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param> - /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param> - /// <returns></returns> - public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null) - { - var listCommand = new List<string>(); - int index = 1; - for (int i = 0; i < listAdjustTarget.Count; i++) - { - var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } }; - var data = listAdjustTarget[i]; - //璁惧 - if (data.Type == 0) - { - string deviceAddr = data.DeviceAddr; - if (dicChangedMac != null) - { - //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄 - if (dicChangedMac.ContainsKey(deviceAddr) == false) - { - continue; - } - deviceAddr = dicChangedMac[deviceAddr]; - } - - var taskList = new Newtonsoft.Json.Linq.JArray { }; - foreach (var taskInfo in data.TaskList) - { - var tInfo = new Newtonsoft.Json.Linq.JObject{{ "TaskType", taskInfo.TaskType}, - { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}}; - taskList.Add(tInfo); - } - var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} , - { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}}; - if (sceneName != null) - { - data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName)); - } - jObject.Add("Data", data2); - } - //鍦烘櫙 - else if (data.Type == 1) - { - var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} , - { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} }; - if (sceneName != null) - { - data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName)); - } - jObject.Add("Data", data2); - } - //寤舵椂 - else - { - var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId}, - { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}}; - if (sceneName != null) - { - data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName)); - } - jObject.Add("Data", data2); - } - listCommand.Add(jObject.ToString()); - index++; - } - return listCommand; - } - - - /// <summary> - /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿) - /// </summary> - /// <param name="scene">Scene.</param> - public void AddSceneToRoom(Room i_room, SceneUI scene) - { - //娣诲姞缂撳瓨 - if (i_room.ListSceneId.Contains(scene.Id) == false) - { - i_room.ListSceneId.Add(scene.Id); - i_room.Save(); - } - } - - /// <summary> - /// 娣诲姞鎼滆棌鍦烘櫙 - /// </summary> - /// <param name="scene">Scene.</param> - public void AddLoveScene(SceneUI scene) - { - var nowRoom = HdlRoomLogic.Current.GetLoveRoom(); - //娣诲姞缂撳瓨 - if (nowRoom.ListSceneId.Contains(scene.Id) == false) - { - nowRoom.ListSceneId.Add(scene.Id); - nowRoom.Save(); - //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤� - UserView.UserPage.Instance.RefreshAllForm = true; - } - } - - /// <summary> - /// 娣诲姞铏氭嫙鍦烘櫙 - /// </summary> - /// <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 (sceneId == -1) - { - 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; - - return newScene; - } - - #endregion - - #region 鈻� 淇敼鍦烘櫙___________________________ - - /// <summary> - /// 淇敼缃戝叧鐨勫満鏅� - /// </summary> - /// <param name="sceneUI">鍦烘櫙瀵硅薄</param> - /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param> - /// <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>(); - 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 = 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 - - #region 鈻� 鍒犻櫎鍦烘櫙___________________________ - - /// <summary> - /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁 - /// </summary> - /// <param name="sceneUI">Scene user interface.</param> - public void DeleteLocalScene(SceneUI sceneUI) - { - //绉婚櫎缂撳瓨 - this.dicScenes.Remove(sceneUI.Id); - var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id); - if (room != null) - { - room.ListSceneId.Remove(sceneUI.Id); - room.Save(); - } - - //绉婚櫎鍠滅埍 - var roomLove = HdlRoomLogic.Current.GetLoveRoom(); - if (roomLove.ListSceneId.Contains(sceneUI.Id) == true) - { - roomLove.ListSceneId.Remove(sceneUI.Id); - roomLove.Save(); - } - - //鍒犻櫎鏂囦欢 - if (Global.IsExistsByHomeId(sceneUI.FileName) == true) - { - Global.DeleteFilebyHomeId(sceneUI.FileName); - HdlAutoBackupLogic.DeleteFile(sceneUI.FileName); - } - //鍒犻櫎鍥剧墖 - if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2) - { - if (Global.IsExistsByHomeId(sceneUI.IconPath)) - { - Global.DeleteFilebyHomeId(sceneUI.IconPath); - 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鑾峰彇鍦烘櫙 - /// </summary> - /// <returns>The scene UIB y scene identifier.</returns> - /// <param name="sceneId">Scene identifier.</param> - public SceneUI GetSceneUIBySceneId(int sceneId) - { - if (this.dicScenes.ContainsKey(sceneId) == true) - { - return this.dicScenes[sceneId]; - } - return null; - } - - /// <summary> - /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅� - /// </summary> - /// <param name="floorId"></param> - /// <returns></returns> - public List<SceneUI> GetSameFloorScenes(string floorId) - { - List<SceneUI> sceneUIs = new List<SceneUI>(); - var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId); - foreach (var r in rooms) - { - foreach (int sceneId in r.ListSceneId) - { - if (this.dicScenes.ContainsKey(sceneId) == true) - { - sceneUIs.Add(this.dicScenes[sceneId]); - } - } - } - return sceneUIs; - } - - /// <summary> - /// 鏍规嵁鍦烘櫙Id锛岃幏鍙栨ゼ灞傚拰鎴块棿鍚嶅瓧(妤煎眰,鎴块棿鍚嶅瓧) - /// </summary> - /// <returns></returns> - public string GetZoneById(int sceneId) - { - var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId); - if (room == null) - { - return null; - } - var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId); - //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥� - if (string.IsNullOrEmpty(floorName)) - { - return room.Name; - } - return $"{floorName},{room.Name}"; - } - - /// <summary> - /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅� - /// </summary> - /// <returns></returns> - public List<SceneUI> GetUnalloctedScenes() - { - List<SceneUI> sceneUIs = new List<SceneUI>(); - //宸茬粡瀛樺湪鐨勫満鏅� - var listEsxit = new HashSet<int>(); - 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) - { - listEsxit.Add(sceneId); - } - } - } - foreach (var myScene in this.dicScenes.Values) - { - if (listEsxit.Contains(myScene.Id) == false) - { - sceneUIs.Add(myScene); - } - } - return sceneUIs; - } - - /// <summary> - /// 鑾峰彇鍏ㄩ儴鎴块棿鐨勫叏閮ㄥ満鏅� - /// </summary> - /// <returns></returns> - public List<SceneUI> GetAllRoomSceneList() - { - List<SceneUI> sceneUIs = new List<SceneUI>(); - 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) - { - sceneUIs.Add(this.dicScenes[sceneId]); - } - } - } - - return sceneUIs; - } - - /// <summary> - /// 鑾峰彇鎸囧畾鎴块棿鐨勫叏閮ㄥ満鏅� - /// </summary> - /// <returns></returns> - public List<SceneUI> GetRoomSceneList(Room i_room) - { - List<SceneUI> sceneUIs = new List<SceneUI>(); - foreach (int sceneId in i_room.ListSceneId) - { - if (this.dicScenes.ContainsKey(sceneId) == true) - { - sceneUIs.Add(this.dicScenes[sceneId]); - } - } - - return sceneUIs; - } - - #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 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; - } - //濡傛灉鏄湁妯℃澘,鏈夎澶囩殑鏃跺��,鍦ㄦ病鏈夊彂閫佹垚鍔熶箣鍓�,涓嶅厑璁稿埛鏂版墽琛岀洰鏍囧璞� - if (Common.Config.Instance.Home.TemplateMode == 2 - && Common.Config.Instance.Home.SendTemplateSuccess == false) - { - var listAdjustTarget = new List<Scene.DeviceListData>(); - listAdjustTarget.AddRange(i_scene.AdjustTargetList); - return listAdjustTarget; - } - - var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 806 } }; - var data = new Newtonsoft.Json.Linq.JObject { { "ScenesId", i_scene.Id } }; - jObject.Add("Data", data); - //鍙戦�佸懡浠� - var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon"); - - if (result.ErrorMsg != null) - { - this.ShowTipMsg(result.ErrorMsg); - return null; - } - if (result.ErrorMsgDiv == 0) - { - //鑾峰彇鎵ц鐩爣澶辫触 - string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail); - //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg - msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); - - this.ShowTipMsg(msg); - return null; - } - var sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneDeviceListInfo>(result.ReceiptData); - - i_scene.AdjustTargetList = sceneGetDeviceListObj.DeviceList; - //淇濆瓨缂撳瓨 - i_scene.Save(false); - - var listData = new List<Scene.DeviceListData>(); - listData.AddRange(sceneGetDeviceListObj.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> - /// 鏀瑰彉鍦烘櫙鎴块棿 - /// </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> - /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠� - /// </summary> - /// <returns></returns> - public List<string> GetAllSceneFile() - { - List<string> listSceneFile = new List<string>(); - List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile(); - - foreach (string file in listAllFile) - { - if (file.StartsWith("Scene_") == false) - { - //濡傛灉涓嶆槸鍦烘櫙鏂囦欢 - continue; - } - listSceneFile.Add(file); - } - 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 - } -} +锘縰sing Shared.Common; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using ZigBee.Device; + +namespace Shared.Phone.UserCenter +{ + /// <summary> + /// 鍦烘櫙鐨勯�昏緫 + /// </summary> + public class HdlSceneLogic + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 鍦烘櫙鐨勯�昏緫 + /// </summary> + private static HdlSceneLogic m_Current = null; + /// <summary> + /// 鍦烘櫙鐨勯�昏緫 + /// </summary> + public static HdlSceneLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlSceneLogic(); + } + return m_Current; + } + } + + /// <summary> + /// 鍦烘櫙瀵硅薄 + /// </summary> + private Dictionary<int, SceneUI> dicScenes = new Dictionary<int, SceneUI>(); + + #endregion + + #region 鈻� 鍒锋柊鍦烘櫙___________________________ + + /// <summary> + /// 浠庢湰鍦板埛鏂板満鏅� + /// </summary> + public void ReFreshByLocal() + { + //娓呯┖鍦烘櫙 + this.dicScenes.Clear(); + //鑾峰彇鍏ㄩ儴鏂囦欢 + var listFile = this.GetAllSceneFile(); + foreach (string fileName in listFile) + { + try + { + var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName)); + var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo); + if (tempScene == null) + { + continue; + } + this.dicScenes[tempScene.Id] = tempScene; + } + catch(Exception ex) + { + HdlLogLogic.Current.WriteLog(ex); + try + { + //鍒犳帀閿欒鏂囦欢 + Global.DeleteFilebyHomeId(fileName); + } + catch { } + } + } + } + + /// <summary> + /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙 + /// </summary> + /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param> + public bool RefreshSceneUIList(bool useLocalConnect) + { + if (Config.Instance.Home.TemplateMode == 2 && Config.Instance.Home.SendTemplateSuccess == false) + { + //濡傛灉鏄湁妯℃澘鏈夎澶囨ā寮�,浣嗘槸杩樻病鏈夊鍏ユ垚鍔熺殑鎯呭喌涓�,涓嶅厑璁稿埛鏂板満鏅垪琛� + return true; + } + //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅� + var sceneList = this.RefreshSceneListFromGateway(useLocalConnect); + if (sceneList == null) + { + return false; + } + var listEsxit = new HashSet<int>(); + foreach (var scene in sceneList) + { + if (scene == null) + { + continue; + } + listEsxit.Add(scene.ScenesId); + //鍒锋柊scene鐨勪俊鎭� + this.RefreshScene(scene); + } + + var listDelete = new List<SceneUI>(); + foreach (var scId in this.dicScenes.Keys) + { + if (listEsxit.Contains(scId) == false) + { + //鍒犻櫎鐨勫璞� + listDelete.Add(this.dicScenes[scId]); + } + } + foreach (var sceneui in listDelete) + { + //鎵ц鍒犻櫎 + 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> + /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param> + private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect) + { + 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()); + if (sceneGetAllInfo.ScenesSum != 0) + { + //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵 + 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 } }; + if (useLocalConnect == false) + { + mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString())); + } + else + { + mainGateway.SendLocation(("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 + + #region 鈻� 娣诲姞鍦烘櫙___________________________ + + /// <summary> + /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊) + /// </summary> + /// <param name="sceneName">鍦烘櫙鍚嶇О</param> + /// <param name="listAdjustTarget">鎵ц鐩爣</param> + /// <returns></returns> + public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget) + { + int NewScenesId = -1; + //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢 + if (Config.Instance.Home.IsVirtually == false) + { + var mainWay = ZbGateway.MainGateWay; + if (mainWay == null) { return null; } + + //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃 + var strCommand = this.GetAddNewSceneCommand(sceneName); + var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon"); + if (result.ErrorMsg != null) + { + this.ShowTipMsg(result.ErrorMsg); + return null; + } + if (result.ErrorMsgDiv == 0) + { + //娣诲姞鍦烘櫙澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result); + this.ShowTipMsg(msg1); + return null; + } + var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData); + NewScenesId = getSceneIdData.NewScenesId; + } + else + { + //铏氭嫙鍦烘櫙ID + NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); + } + //娣诲姞鎵ц鐩爣 + var listSuccess = 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="sceneName">鍦烘櫙鍚嶇О</param> + /// <returns></returns> + public string GetAddNewSceneCommand(string sceneName) + { + var bytes = new byte[32]; + var reamarkGwBytes = Encoding.UTF8.GetBytes(sceneName); + Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length); + sceneName = Encoding.UTF8.GetString(bytes); + + var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 800 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "ScenesName", sceneName } }; + jObject.Add("Data", data); + + return jObject.ToString(); + } + + /// <summary> + /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�) + /// </summary> + /// <param name="sceneId">鍦烘櫙Id</param> + /// <param name="listAdjustTarget">鎵ц鐩爣</param> + /// <returns></returns> + private 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>(); + var mainWay = ZbGateway.MainGateWay; + if (mainWay == null) { return listSuccess; } + + //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护 + var listCommand = this.GetAddTargetToSceneCommand(sceneId, listAdjustTarget); + for (int i = 0; i < listCommand.Count; i++) + { + var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon"); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + //鍑虹幇閿欒 + continue; + } + var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData); + if (addSceneMemberData.Result == 1) + { + listSuccess.Add(listAdjustTarget[i]); + } + } + if (listSuccess.Count == 0) + { + //娣诲姞鎵ц鐩爣澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail); + this.ShowTipMsg(msg1); + return null; + } + //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず + if (listSuccess.Count != listAdjustTarget.Count) + { + //涓埆鎵ц鐩爣娣诲姞澶辫触 + string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail); + this.ShowTipMsg(msg1); + } + return listSuccess; + } + + /// <summary> + /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护 + /// </summary> + /// <param name="sceneId">鍦烘櫙id</param> + /// <param name="listAdjustTarget">鎵ц鐩爣</param> + /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param> + /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param> + /// <returns></returns> + public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null) + { + var listCommand = new List<string>(); + int index = 1; + for (int i = 0; i < listAdjustTarget.Count; i++) + { + var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } }; + var data = listAdjustTarget[i]; + //璁惧 + if (data.Type == 0) + { + string deviceAddr = data.DeviceAddr; + if (dicChangedMac != null) + { + //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄 + if (dicChangedMac.ContainsKey(deviceAddr) == false) + { + continue; + } + deviceAddr = dicChangedMac[deviceAddr]; + } + + var taskList = new Newtonsoft.Json.Linq.JArray { }; + foreach (var taskInfo in data.TaskList) + { + var tInfo = new Newtonsoft.Json.Linq.JObject{{ "TaskType", taskInfo.TaskType}, + { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}}; + taskList.Add(tInfo); + } + var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} , + { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}}; + if (sceneName != null) + { + data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName)); + } + jObject.Add("Data", data2); + } + //鍦烘櫙 + else if (data.Type == 1) + { + var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} , + { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} }; + if (sceneName != null) + { + data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName)); + } + jObject.Add("Data", data2); + } + //寤舵椂 + else + { + var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId}, + { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}}; + if (sceneName != null) + { + data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName)); + } + jObject.Add("Data", data2); + } + listCommand.Add(jObject.ToString()); + index++; + } + return listCommand; + } + + + /// <summary> + /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿) + /// </summary> + /// <param name="scene">Scene.</param> + public void AddSceneToRoom(Room i_room, SceneUI scene) + { + //娣诲姞缂撳瓨 + if (i_room.ListSceneId.Contains(scene.Id) == false) + { + i_room.ListSceneId.Add(scene.Id); + i_room.Save(); + } + } + + /// <summary> + /// 娣诲姞鎼滆棌鍦烘櫙 + /// </summary> + /// <param name="scene">Scene.</param> + public void AddLoveScene(SceneUI scene) + { + var nowRoom = HdlRoomLogic.Current.GetLoveRoom(); + //娣诲姞缂撳瓨 + if (nowRoom.ListSceneId.Contains(scene.Id) == false) + { + nowRoom.ListSceneId.Add(scene.Id); + nowRoom.Save(); + //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤� + UserView.UserPage.Instance.RefreshAllForm = true; + } + } + + /// <summary> + /// 娣诲姞铏氭嫙鍦烘櫙 + /// </summary> + /// <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 (sceneId == -1) + { + 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; + + return newScene; + } + + #endregion + + #region 鈻� 淇敼鍦烘櫙___________________________ + + /// <summary> + /// 淇敼缃戝叧鐨勫満鏅� + /// </summary> + /// <param name="sceneUI">鍦烘櫙瀵硅薄</param> + /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param> + /// <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>(); + 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 = 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 + + #region 鈻� 鍒犻櫎鍦烘櫙___________________________ + + /// <summary> + /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁 + /// </summary> + /// <param name="sceneUI">Scene user interface.</param> + public void DeleteLocalScene(SceneUI sceneUI) + { + //绉婚櫎缂撳瓨 + this.dicScenes.Remove(sceneUI.Id); + var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id); + if (room != null) + { + room.ListSceneId.Remove(sceneUI.Id); + room.Save(); + } + + //绉婚櫎鍠滅埍 + var roomLove = HdlRoomLogic.Current.GetLoveRoom(); + if (roomLove.ListSceneId.Contains(sceneUI.Id) == true) + { + roomLove.ListSceneId.Remove(sceneUI.Id); + roomLove.Save(); + } + + //鍒犻櫎鏂囦欢 + if (Global.IsExistsByHomeId(sceneUI.FileName) == true) + { + Global.DeleteFilebyHomeId(sceneUI.FileName); + HdlAutoBackupLogic.DeleteFile(sceneUI.FileName); + } + //鍒犻櫎鍥剧墖 + if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2) + { + if (Global.IsExistsByHomeId(sceneUI.IconPath)) + { + Global.DeleteFilebyHomeId(sceneUI.IconPath); + 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鑾峰彇鍦烘櫙 + /// </summary> + /// <returns>The scene UIB y scene identifier.</returns> + /// <param name="sceneId">Scene identifier.</param> + public SceneUI GetSceneUIBySceneId(int sceneId) + { + if (this.dicScenes.ContainsKey(sceneId) == true) + { + return this.dicScenes[sceneId]; + } + return null; + } + + /// <summary> + /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅� + /// </summary> + /// <param name="floorId"></param> + /// <returns></returns> + public List<SceneUI> GetSameFloorScenes(string floorId) + { + List<SceneUI> sceneUIs = new List<SceneUI>(); + var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId); + foreach (var r in rooms) + { + foreach (int sceneId in r.ListSceneId) + { + if (this.dicScenes.ContainsKey(sceneId) == true) + { + sceneUIs.Add(this.dicScenes[sceneId]); + } + } + } + return sceneUIs; + } + + /// <summary> + /// 鏍规嵁鍦烘櫙Id锛岃幏鍙栨ゼ灞傚拰鎴块棿鍚嶅瓧(妤煎眰,鎴块棿鍚嶅瓧) + /// </summary> + /// <returns></returns> + public string GetZoneById(int sceneId) + { + var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId); + if (room == null) + { + return null; + } + var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId); + //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥� + if (string.IsNullOrEmpty(floorName)) + { + return room.Name; + } + return $"{floorName},{room.Name}"; + } + + /// <summary> + /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅� + /// </summary> + /// <returns></returns> + public List<SceneUI> GetUnalloctedScenes() + { + List<SceneUI> sceneUIs = new List<SceneUI>(); + //宸茬粡瀛樺湪鐨勫満鏅� + var listEsxit = new HashSet<int>(); + 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) + { + listEsxit.Add(sceneId); + } + } + } + foreach (var myScene in this.dicScenes.Values) + { + if (listEsxit.Contains(myScene.Id) == false) + { + sceneUIs.Add(myScene); + } + } + return sceneUIs; + } + + /// <summary> + /// 鑾峰彇鍏ㄩ儴鎴块棿鐨勫叏閮ㄥ満鏅� + /// </summary> + /// <returns></returns> + public List<SceneUI> GetAllRoomSceneList() + { + List<SceneUI> sceneUIs = new List<SceneUI>(); + 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) + { + sceneUIs.Add(this.dicScenes[sceneId]); + } + } + } + + return sceneUIs; + } + + /// <summary> + /// 鑾峰彇鎸囧畾鎴块棿鐨勫叏閮ㄥ満鏅� + /// </summary> + /// <returns></returns> + public List<SceneUI> GetRoomSceneList(Room i_room) + { + List<SceneUI> sceneUIs = new List<SceneUI>(); + foreach (int sceneId in i_room.ListSceneId) + { + if (this.dicScenes.ContainsKey(sceneId) == true) + { + sceneUIs.Add(this.dicScenes[sceneId]); + } + } + + return sceneUIs; + } + + #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 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; + } + //濡傛灉鏄湁妯℃澘,鏈夎澶囩殑鏃跺��,鍦ㄦ病鏈夊彂閫佹垚鍔熶箣鍓�,涓嶅厑璁稿埛鏂版墽琛岀洰鏍囧璞� + if (Common.Config.Instance.Home.TemplateMode == 2 + && Common.Config.Instance.Home.SendTemplateSuccess == false) + { + var listAdjustTarget = new List<Scene.DeviceListData>(); + listAdjustTarget.AddRange(i_scene.AdjustTargetList); + return listAdjustTarget; + } + var mainWay = ZbGateway.MainGateWay; + if (mainWay == null) { return null; } + + var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 806 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "ScenesId", i_scene.Id } }; + jObject.Add("Data", data); + //鍙戦�佸懡浠� + var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon"); + + if (result.ErrorMsg != null) + { + this.ShowTipMsg(result.ErrorMsg); + return null; + } + if (result.ErrorMsgDiv == 0) + { + //鑾峰彇鎵ц鐩爣澶辫触 + string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail); + //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result); + + this.ShowTipMsg(msg); + return null; + } + var sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneDeviceListInfo>(result.ReceiptData); + + i_scene.AdjustTargetList = sceneGetDeviceListObj.DeviceList; + //淇濆瓨缂撳瓨 + i_scene.Save(false); + + var listData = new List<Scene.DeviceListData>(); + listData.AddRange(sceneGetDeviceListObj.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> + /// 鏀瑰彉鍦烘櫙鎴块棿 + /// </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> + /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠� + /// </summary> + /// <returns></returns> + public List<string> GetAllSceneFile() + { + List<string> listSceneFile = new List<string>(); + List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile(); + + foreach (string file in listAllFile) + { + if (file.StartsWith("Scene_") == false) + { + //濡傛灉涓嶆槸鍦烘櫙鏂囦欢 + continue; + } + listSceneFile.Add(file); + } + 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