From 4dce704aaf8587cf3f91cf88f2208315a03c4cbb Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期三, 08 四月 2020 13:54:58 +0800
Subject: [PATCH] 先上传一个版本

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs |  399 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 293 insertions(+), 106 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index 048a5e9..925d1eb 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,124 @@
         #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)
+            var result1 = await Scene.GetSceneNewIdAsync(sceneName);
+            //鍏遍�氶敊璇娴�
+            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
+            if (error != null)
             {
-                return 0;
+                this.ShowErrorMsg(error);
+                return null;
             }
-            var getSceneIdData = getSceneIdAllData.getSceneIdData;
-
-            bool result = true;
-            foreach (var common in commons)
+            if (result1 == null || result1.getSceneIdData == null)
             {
-                //娣诲姞鏂版垚鍛�
-                var addSceneMemberData = new Scene.AddSceneMemberData
+                //娣诲姞鍦烘櫙澶辫触
+                string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+                this.ShowTipMsg(msg1);
+                return null;
+            }
+            //娣诲姞鎵ц鐩爣
+            var listSuccess = await this.AddTargetToScene(result1.getSceneIdData.NewScenesId, listAdjustTarget);
+            if (listSuccess == null)
+            {
+                return null;
+            }
+
+            //鍒涘缓鍦烘櫙瀵硅薄
+            var newScene = new SceneUI();
+            newScene.Name = sceneName;
+            newScene.Id = result1.getSceneIdData.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)
+        {
+            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)
                 {
-                    Type = common.Type,
-                    DeviceAddr = common.DeviceAddr,
-                    Epoint = common.Epoint,
-                    ScenesId = getSceneIdData.NewScenesId,
-                    TaskList = common.TaskList,
-                    DelayTime = common.DelayTime,
-                    MemberNumber = common.MemberNumber,
-                    ElseScenesId = common.ElseScenesId
-                };
+                    //璁惧
+                    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 +245,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 +289,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 +319,120 @@
         #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)
+            //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
+            var deleteData = new Scene.SceneRemoveMemberData();
+            var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
+            for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++)
             {
-                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
+                var data = sceneUI.AdjustTargetList[i];
+                var removeData = new Scene.RemoveSceneDeviceListInfo();
+                if (data.Type == 0)
                 {
-                    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;
+                    //璁惧
+                    removeData.Type = 0;
+                    removeData.DeviceAddr = data.DeviceAddr;
+                    removeData.Epoint = data.Epoint;
+                    removeData.MemberNumber = data.MemberNumber;
                 }
-                var addSceneMemberResponseData = addSceneMemberResponseAllData.addSceneMemberResponseData;
-                if (addSceneMemberResponseData == null && addSceneMemberResponseData.Result != 1)
+                else if (data.Type == 1)
                 {
-                    result = false;
+                    //鍦烘櫙
+                    removeData.Type = 1;
+                    removeData.ElseScenesId = data.ElseScenesId;
+                    removeData.MemberNumber = data.MemberNumber;
                 }
+                else
+                {
+                    //寤舵椂
+                    removeData.Type = 2;
+                    removeData.DelayTime = data.DelayTime;
+                    removeData.MemberNumber = i + 1;
+                }
+                //鎷ユ湁鎴愬姛鐨�
+                deleteTargetData.Add(removeData);
             }
-            //鍔犲叆鎴愬姛
-            if (result)
+            deleteData.DeviceList = deleteTargetData;
+            deleteData.ScenesId = sceneUI.Id;
+            //鎵ц娓呯┖
+            var result = await Scene.RemoveSceneMemberAsync(deleteData);
+            if (result == null || result.removeSceneMemberResponseData == null)
             {
-                sceneUI.AddSceneMemberDataList = addCommons;
-                sceneUI.Save();
-                return 1;
+                //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+                string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
+                this.ShowTipMsg(msg1);
+                return false;
             }
-            return 0;
+            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)
+        {
+            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
@@ -550,6 +672,44 @@
 
         #endregion
 
+        #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________
+
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛�
+        /// </summary>
+        /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
+        /// <returns></returns>
+        public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
+        {
+            var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
+            //鍏遍�氶敊璇娴�
+            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
+            if (error != null)
+            {
+                this.ShowErrorMsg(error);
+                return null;
+            }
+            if (result == null || result.getSceneDeviceListInfo == null)
+            {
+                //鑾峰彇鎵ц鐩爣澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+                this.ShowTipMsg(msg);
+                return null;
+            }
+            i_scene.AdjustTargetList = result.getSceneDeviceListInfo.DeviceList;
+            //淇濆瓨缂撳瓨
+            i_scene.Save(false);
+
+            var listData = new List<Scene.DeviceListData>();
+            listData.AddRange(result.getSceneDeviceListInfo.DeviceList);
+
+            return listData;
+        }
+        #endregion
+
         #region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________
 
         /// <summary>
@@ -599,6 +759,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