From 4f0ab0ad21ce450b7856d50f98322a7899361386 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期二, 22 九月 2020 10:30:01 +0800
Subject: [PATCH] 不要下载这个备份
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 876 +++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 745 insertions(+), 131 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index 6bfcf49..c9d80ec 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -77,12 +77,13 @@
}
/// <summary>
- /// 鍒锋柊鎴块棿鐨勫満鏅垪琛�
+ /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙
/// </summary>
- public async Task<bool> RefreshSceneUIList()
+ /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+ public bool RefreshSceneUIList(bool useLocalConnect)
{
//鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
- var sceneList = await ZigBee.Device.Scene.GetSceneListAsync();
+ var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
if (sceneList == null)
{
return false;
@@ -95,6 +96,8 @@
continue;
}
listEsxit.Add(scene.ScenesId);
+ //鍒锋柊scene鐨勪俊鎭�
+ this.RefreshScene(scene);
}
var listDelete = new List<SceneUI>();
@@ -109,10 +112,123 @@
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>
+ /// <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
@@ -120,78 +236,209 @@
#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 SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
{
- var getSceneIdAllData = await Scene.GetSceneNewIdAsync(sceneName);
- if (getSceneIdAllData == null || getSceneIdAllData.getSceneIdData == null)
+ int NewScenesId = -1;
+ //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+ if (Config.Instance.Home.IsVirtually == false)
{
- return 0;
+ //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+ 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;
}
- var getSceneIdData = getSceneIdAllData.getSceneIdData;
-
- bool result = true;
- foreach (var common in commons)
+ else
{
- //娣诲姞鏂版垚鍛�
- var addSceneMemberData = new Scene.AddSceneMemberData
+ //铏氭嫙鍦烘櫙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)
{
- Type = common.Type,
- DeviceAddr = common.DeviceAddr,
- Epoint = common.Epoint,
- ScenesId = getSceneIdData.NewScenesId,
- TaskList = common.TaskList,
- DelayTime = common.DelayTime,
- MemberNumber = common.MemberNumber,
- ElseScenesId = common.ElseScenesId
- };
- //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉
- var addSceneMemberResponseAllData = await Scene.AddSceneMemberAsync(addSceneMemberData);
- if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null)
- {
+ //鍑虹幇閿欒
continue;
}
- var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData;
- if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1)
+ var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData);
+ if (addSceneMemberData.Result == 1)
{
- result = false;
+ listSuccess.Add(listAdjustTarget[i]);
}
}
- //鍔犲叆鎴愬姛
- 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="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 AddScene(Room i_room, SceneUI scene)
+ public void AddSceneToRoom(Room i_room, SceneUI scene)
{
//娣诲姞缂撳瓨
if (i_room.ListSceneId.Contains(scene.Id) == false)
@@ -202,17 +449,51 @@
}
/// <summary>
- /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
+ /// 娣诲姞鎼滆棌鍦烘櫙
/// </summary>
- /// <param name="scene"></param>
- public void DeleteScene(Room i_room, SceneUI scene)
+ /// <param name="scene">Scene.</param>
+ public void AddLoveScene(SceneUI scene)
{
- //绉婚櫎缂撳瓨
- if (i_room.ListSceneId.Contains(scene.Id) == true)
+ var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
+ //娣诲姞缂撳瓨
+ if (nowRoom.ListSceneId.Contains(scene.Id) == false)
{
- i_room.ListSceneId.Remove(scene.Id);
- i_room.Save();
+ 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
@@ -220,67 +501,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 = 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
@@ -288,10 +638,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);
@@ -325,11 +675,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鑾峰彇鍦烘櫙
@@ -373,13 +786,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;
}
@@ -398,6 +812,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)
@@ -413,11 +832,6 @@
sceneUIs.Add(myScene);
}
}
-
- if (sceneUIs.Count == 0)
- {
- return null;
- }
return sceneUIs;
}
@@ -431,6 +845,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)
@@ -463,7 +882,175 @@
#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>
/// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠�
@@ -472,7 +1059,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)
{
@@ -485,6 +1072,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