From 3272ca5b51e19f7f8a827b0f68400570a547fe60 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期二, 28 四月 2020 15:02:44 +0800
Subject: [PATCH] 2020-04-28-1
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 461 +++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 348 insertions(+), 113 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index 0d8549e..9ec1ecd 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -77,7 +77,7 @@
}
/// <summary>
- /// 鍒锋柊鎴块棿鐨勫満鏅垪琛�
+ /// 鍒锋柊鏈湴鐨勫叏閮ㄥ満鏅�
/// </summary>
public async Task<bool> RefreshSceneUIList()
{
@@ -120,78 +120,136 @@
#region 鈻� 娣诲姞鍦烘櫙___________________________
/// <summary>
- /// 娣诲姞鍦烘櫙(鏇存柊缃戝叧) 0澶辫触 1鎴愬姛 -1宸茬粡瀛樺湪
+ /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊)
/// </summary>
- /// <returns>The scene.</returns>
- /// <param name="sceneName">Scene name.</param>
- /// <param name="sceneIconPath">鑳屾櫙鍥剧墖锛屼笉鍖呭惈浣忓畢璺緞 濡傛灉iconPathType=1鎴栬��2 闇�瑕佹嫾鎺ヤ綇瀹� 鍙樻垚 浣忓畢/sceneIconPath</param>
- /// <param name="commons">Commons.</param>
- /// <param name="iconPathType">I鍦烘櫙鑳屾櫙鍥剧墖鏉ユ簮绫诲瀷 鍥剧墖鏉ユ簮 0--鏈湴鍥惧簱 1--鎷嶇収 2--绯荤粺鍥惧簱 榛樿0</param>
- public async Task<int> AddScene(Room i_room, string sceneName, string sceneIconPath, List<Scene.AddSceneMemberData> commons, int iconPathType)
+ /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
+ /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+ /// <returns></returns>
+ public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
{
- var getSceneIdAllData = await Scene.GetSceneNewIdAsync(sceneName);
- if (getSceneIdAllData == null || getSceneIdAllData.getSceneIdData == null)
+ int NewScenesId = -1;
+ //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+ if (Common.Config.Instance.Home.IsVirtually == false)
{
- return 0;
- }
- var getSceneIdData = getSceneIdAllData.getSceneIdData;
-
- bool result = true;
- foreach (var common in commons)
- {
- //娣诲姞鏂版垚鍛�
- var addSceneMemberData = new Scene.AddSceneMemberData
+ var result1 = await Scene.GetSceneNewIdAsync(sceneName);
+ //鍏遍�氶敊璇娴�
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
+ if (error != null)
{
- Type = common.Type,
- DeviceAddr = common.DeviceAddr,
- Epoint = common.Epoint,
- ScenesId = getSceneIdData.NewScenesId,
- TaskList = common.TaskList,
- DelayTime = common.DelayTime,
- MemberNumber = common.MemberNumber,
- ElseScenesId = common.ElseScenesId
- };
+ this.ShowErrorMsg(error);
+ return null;
+ }
+ if (result1 == null || result1.getSceneIdData == null)
+ {
+ //娣诲姞鍦烘櫙澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+ this.ShowTipMsg(msg1);
+ return null;
+ }
+ NewScenesId = result1.getSceneIdData.NewScenesId;
+ }
+ //娣诲姞鎵ц鐩爣
+ var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
+ if (listSuccess == null)
+ {
+ return null;
+ }
+
+ //鍒涘缓鍦烘櫙瀵硅薄
+ var newScene = new SceneUI();
+ newScene.Name = sceneName;
+ newScene.Id = NewScenesId;
+ newScene.AdjustTargetList.AddRange(listSuccess);
+ //娣诲姞缂撳瓨
+ newScene.Save();
+ //鍔犲叆缂撳瓨
+ this.dicScenes[newScene.Id] = newScene;
+
+ return newScene;
+ }
+
+ /// <summary>
+ /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�)
+ /// </summary>
+ /// <param name="sceneId">鍦烘櫙Id</param>
+ /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+ /// <returns></returns>
+ private async Task<List<Scene.DeviceListData>> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+ {
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶉渶瑕佹洿鏂扮綉鍏�
+ return listAdjustTarget;
+ }
+ var listSuccess = new List<Scene.DeviceListData>();
+ for (int i = 0; i < listAdjustTarget.Count; i++)
+ {
+ var data = listAdjustTarget[i];
+ var addData = new Scene.AddSceneMemberData();
+ if (data.Type == 0)
+ {
+ //璁惧
+ addData.Type = 0;
+ addData.ScenesId = sceneId;
+ addData.DeviceAddr = data.DeviceAddr;
+ addData.Epoint = data.Epoint;
+ addData.TaskList = data.TaskList;
+ addData.DelayTime = 0;
+ addData.MemberNumber = i + 1;
+ }
+ else if (data.Type == 1)
+ {
+ //鍦烘櫙
+ addData.Type = 1;
+ addData.ScenesId = sceneId;
+ addData.ElseScenesId = data.ElseScenesId;
+ addData.DelayTime = 0;
+ addData.MemberNumber = i + 1;
+ }
+ else
+ {
+ //寤舵椂
+ addData.Type = 2;
+ addData.ScenesId = sceneId;
+ addData.DelayTime = data.DelayTime;
+ addData.MemberNumber = i + 1;
+ }
+
//娣诲姞鏂版垚鍛� 杩斿洖缁撴灉
- var addSceneMemberResponseAllData = await Scene.AddSceneMemberAsync(addSceneMemberData);
- if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null)
+ var result2 = await Scene.AddSceneMemberAsync(addData);
+ if (result2 == null || result2.addSceneMemberResponseData == null
+ || result2.addSceneMemberResponseData.Result != 1)
{
continue;
}
- var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData;
- if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1)
- {
- result = false;
- }
+ //鎷ユ湁鎴愬姛鐨�
+ listSuccess.Add(data);
}
- //鍔犲叆鎴愬姛
- if (result)
+ if (listSuccess.Count == 0)
{
- var sceneUI = new SceneUI
- {
- Name = sceneName,
- Id = getSceneIdData.NewScenesId,
- IconPath = sceneIconPath,
- IconPathType = iconPathType,
- AddSceneMemberDataList = commons
- };
- //娣诲姞缂撳瓨
- sceneUI.Save();
- this.dicScenes[sceneUI.Id] = sceneUI;
- if (i_room.ListSceneId.Contains(sceneUI.Id) == false)
- {
- i_room.ListSceneId.Add(sceneUI.Id);
- i_room.Save();
- }
- return 1;
+ //娣诲姞鎵ц鐩爣澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail);
+ this.ShowTipMsg(msg1);
+ return null;
}
- return 0;
+ //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず
+ if (listSuccess.Count != listAdjustTarget.Count)
+ {
+ //涓埆鎵ц鐩爣娣诲姞澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail);
+ this.ShowTipMsg(msg1);
+ }
+ return listSuccess;
}
/// <summary>
/// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
/// </summary>
/// <param name="scene">Scene.</param>
- public void AddScene(Room i_room, SceneUI scene)
+ public void AddSceneToRoom(Room i_room, SceneUI scene)
{
//娣诲姞缂撳瓨
if (i_room.ListSceneId.Contains(scene.Id) == false)
@@ -199,6 +257,29 @@
i_room.ListSceneId.Add(scene.Id);
i_room.Save();
}
+ }
+
+ /// <summary>
+ /// 鏀瑰彉鍦烘櫙鎴块棿
+ /// </summary>
+ /// <param name="scene">鍦烘櫙瀵硅薄</param>
+ /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
+ public void ChangedSceneRoom(SceneUI scene, string newRoomId)
+ {
+ var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
+ if (room != null)
+ {
+ //鎴块棿娌℃湁鏀瑰彉
+ if (room.Id == newRoomId)
+ {
+ return;
+ }
+ //浠庢埧闂翠腑绉婚櫎缂撳瓨
+ this.DeleteSceneFromRoom(room, scene);
+ }
+ //娣诲姞杩涙柊鎴块棿
+ var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
+ this.AddSceneToRoom(newRoom, scene);
}
/// <summary>
@@ -220,7 +301,7 @@
/// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
/// </summary>
/// <param name="scene"></param>
- public void DeleteScene(Room i_room, SceneUI scene)
+ public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
{
//绉婚櫎缂撳瓨
if (i_room.ListSceneId.Contains(scene.Id) == true)
@@ -250,67 +331,136 @@
#region 鈻� 淇敼鍦烘櫙___________________________
/// <summary>
- /// 淇敼鍦烘櫙璁惧 0澶辫触 1鎴愬姛
+ /// 淇敼缃戝叧鐨勫満鏅�
/// </summary>
- /// <returns>The scene.</returns>
- /// <param name="sceneUI">Scene user interface.</param>
- /// <param name="sceneRemoveMemberData">Scene remove member data.</param>
- /// <param name="addCommons">Add commons.</param>
- public async Task<int> ModifyScene(SceneUI sceneUI, Scene.SceneRemoveMemberData sceneRemoveMemberData, List<Scene.AddSceneMemberData> addCommons)
+ /// <param name="sceneUI">鍦烘櫙瀵硅薄</param>
+ /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param>
+ /// <returns></returns>
+ public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
{
- bool result = true;
- //绉婚櫎鎴愬憳 杩斿洖缁撴灉
- var removeSceneMemberResponseAllData = await ZigBee.Device.Scene.RemoveSceneMemberAsync(sceneRemoveMemberData);
- if (removeSceneMemberResponseAllData == null || removeSceneMemberResponseAllData.removeSceneMemberResponseData == null)
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
{
- return 0;
- }
- var removeSceneMemberResponseData = removeSceneMemberResponseAllData.removeSceneMemberResponseData;
- if (removeSceneMemberResponseData == null)
- {
- return 0;
- }
- if (removeSceneMemberResponseData.Result != 0)
- {
- result = false;
- }
- //娣诲姞
- foreach (var addCommon in addCommons)
- {
- //娣诲姞鏂版垚鍛�
- var addSceneMemberData = new ZigBee.Device.Scene.AddSceneMemberData
- {
- DeviceAddr = addCommon.DeviceAddr,
- Type = addCommon.Type,
- Epoint = addCommon.Epoint,
- ScenesId = sceneUI.Id,
- TaskList = addCommon.TaskList,
- DelayTime = addCommon.DelayTime,
- ElseScenesId = addCommon.ElseScenesId,
- MemberNumber = addCommon.MemberNumber
- };
- //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉
- var addSceneMemberResponseAllData = await ZigBee.Device.Scene.AddSceneMemberAsync(addSceneMemberData);
- if (addSceneMemberResponseAllData == null || addSceneMemberResponseAllData.addSceneMemberResponseData == null)
- {
- result = false;
- System.Console.WriteLine("娣诲姞鍦烘櫙澶辫触");
- continue;
- }
- var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData;
- if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1)
- {
- result = false;
- }
- }
- //鍔犲叆鎴愬姛
- if (result)
- {
- sceneUI.AddSceneMemberDataList = addCommons;
+ //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+ sceneUI.AdjustTargetList.Clear();
+ sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
sceneUI.Save();
- return 1;
+ return true;
}
- return 0;
+
+ //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
+ var deleteData = new Scene.SceneRemoveMemberData();
+ var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
+ for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++)
+ {
+ var data = sceneUI.AdjustTargetList[i];
+ var removeData = new Scene.RemoveSceneDeviceListInfo();
+ if (data.Type == 0)
+ {
+ //璁惧
+ removeData.Type = 0;
+ removeData.DeviceAddr = data.DeviceAddr;
+ removeData.Epoint = data.Epoint;
+ removeData.MemberNumber = data.MemberNumber;
+ }
+ else if (data.Type == 1)
+ {
+ //鍦烘櫙
+ removeData.Type = 1;
+ removeData.ElseScenesId = data.ElseScenesId;
+ removeData.MemberNumber = data.MemberNumber;
+ }
+ else
+ {
+ //寤舵椂
+ removeData.Type = 2;
+ removeData.DelayTime = data.DelayTime;
+ removeData.MemberNumber = data.MemberNumber;
+ }
+ //鎷ユ湁鎴愬姛鐨�
+ deleteTargetData.Add(removeData);
+ }
+ deleteData.DeviceList = deleteTargetData;
+ deleteData.ScenesId = sceneUI.Id;
+ //鎵ц娓呯┖
+ var result = await Scene.RemoveSceneMemberAsync(deleteData);
+ if (result == null || result.removeSceneMemberResponseData == null)
+ {
+ //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ if (result.removeSceneMemberResponseData.Result != 0)
+ {
+ //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+ sceneUI.AdjustTargetList.Clear();
+
+ //鐒跺悗閲嶆柊娣诲姞
+ var listSuccess = await this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
+ if (listSuccess == null)
+ {
+ return false;
+ }
+ sceneUI.AdjustTargetList.AddRange(listSuccess);
+ sceneUI.Save();
+
+ return true;
+ }
+
+ /// <summary>
+ /// 淇敼缃戝叧鐨勫満鏅悕绉�
+ /// </summary>
+ /// <param name="scene">鍦烘櫙瀵硅薄</param>
+ /// <param name="newName">鏂扮殑鍚嶅瓧</param>
+ /// <returns></returns>
+ public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
+ {
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶉渶瑕佹洿鏂扮綉鍏�
+ return true;
+ }
+ var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
+ //鍏遍�氶敊璇娴�
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
+ if (error != null)
+ {
+ this.ShowErrorMsg(error);
+ return false;
+ }
+ if (result1 == null || result1.sceneRenameResponseData == null)
+ {
+ //淇敼鍦烘櫙鍚嶇О澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ if (result1.sceneRenameResponseData.Result == 2)
+ {
+ //鐩爣鍦烘櫙涓嶅瓨鍦�
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ if (result1.sceneRenameResponseData.Result != 1)
+ {
+ //淇敼鍦烘櫙鍚嶇О澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ return true;
}
#endregion
@@ -428,6 +578,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)
@@ -512,6 +667,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)
@@ -543,6 +705,52 @@
return true;
}
+ #endregion
+
+ #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________
+
+ /// <summary>
+ /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛�
+ /// </summary>
+ /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
+ /// <returns></returns>
+ public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
+ {
+ //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ var listAdjustTarget = new List<Scene.DeviceListData>();
+ listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+ return listAdjustTarget;
+ }
+
+ var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
+ //鍏遍�氶敊璇娴�
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
+ if (error != null)
+ {
+ this.ShowErrorMsg(error);
+ return null;
+ }
+ if (result == null || result.getSceneDeviceListInfo == null)
+ {
+ //鑾峰彇鎵ц鐩爣澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+ this.ShowTipMsg(msg);
+ return null;
+ }
+ i_scene.AdjustTargetList = result.getSceneDeviceListInfo.DeviceList;
+ //淇濆瓨缂撳瓨
+ i_scene.Save(false);
+
+ var listData = new List<Scene.DeviceListData>();
+ listData.AddRange(result.getSceneDeviceListInfo.DeviceList);
+
+ return listData;
+ }
#endregion
#region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________
@@ -594,6 +802,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