From 2029e64ec0491f7e511dc15bffaf821bfbabe2de Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期一, 20 七月 2020 14:10:22 +0800
Subject: [PATCH] 上传一个很特别的新版本

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs |  231 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 142 insertions(+), 89 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index 402cf70..d087a84 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 bool RefreshSceneUIList()
+        /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+        public bool RefreshSceneUIList(bool useLocalConnect)
         {
             //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
-            var sceneList = this.RefreshSceneListFromGateway();
+            var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
             if (sceneList == null)
             {
                 return false;
@@ -152,8 +153,8 @@
         /// <summary>
         /// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛�
         /// </summary>
-        /// <returns></returns>
-        private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway()
+        /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+        private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect)
         {
             var mainGateway = ZbGateway.MainGateWay;
             if (mainGateway == null)
@@ -192,7 +193,14 @@
             mainGateway.Actions += action;
 
             var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
-            mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+            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)
@@ -229,30 +237,31 @@
         /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
         /// <param name="listAdjustTarget">鎵ц鐩爣</param>
         /// <returns></returns>
-        public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
+        public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
         {
             int NewScenesId = -1;
             //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
-            if (Common.Config.Instance.Home.IsVirtually == false)
+            if (Config.Instance.Home.IsVirtually == false)
             {
-                var result1 = await Scene.GetSceneNewIdAsync(sceneName);
-                //鍏遍�氶敊璇娴�
-                string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
-                if (error != null)
+                //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+                var strCommand = this.GetAddNewSceneCommand(sceneName);
+                var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(ZbGateway.MainGateWay, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
+                if (result.ErrorMsg != null)
                 {
-                    this.ShowErrorMsg(error);
+                    this.ShowTipMsg(result.ErrorMsg);
                     return null;
                 }
-                if (result1 == null || result1.getSceneIdData == null)
+                if (result.ErrorMsgDiv == 0)
                 {
                     //娣诲姞鍦烘櫙澶辫触
                     string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
                     //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
-                    msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+                    msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
                     this.ShowTipMsg(msg1);
                     return null;
                 }
-                NewScenesId = result1.getSceneIdData.NewScenesId;
+                var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData);
+                NewScenesId = getSceneIdData.NewScenesId;
             }
             else
             {
@@ -260,7 +269,7 @@
                 NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
             }
             //娣诲姞鎵ц鐩爣
-            var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
+            var listSuccess = this.AddTargetToScene(NewScenesId, listAdjustTarget);
             if (listSuccess == null)
             {
                 return null;
@@ -280,12 +289,31 @@
         }
 
         /// <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 async Task<List<Scene.DeviceListData>> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+        private List<Scene.DeviceListData> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
         {
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
             if (Common.Config.Instance.Home.IsVirtually == true)
@@ -294,48 +322,22 @@
                 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 result2 = await Scene.AddSceneMemberAsync(addData);
-                if (result2 == null || result2.addSceneMemberResponseData == null
-                    || result2.addSceneMemberResponseData.Result != 1)
+            //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+            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;
                 }
-                //鎷ユ湁鎴愬姛鐨�
-                listSuccess.Add(data);
+                var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData);
+                if (addSceneMemberData.Result == 1)
+                {
+                    listSuccess.Add(listAdjustTarget[i]);
+                }
             }
             if (listSuccess.Count == 0)
             {
@@ -355,6 +357,53 @@
         }
 
         /// <summary>
+        /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+        /// </summary>
+        /// <param name="sceneId"></param>
+        /// <param name="listAdjustTarget"></param>
+        /// <returns></returns>
+        public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+        {
+            var listCommand = new List<string>();
+            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)
+                {
+                    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",data.DeviceAddr} ,
+                         { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",i + 1}};
+                    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",i + 1} };
+                    jObject.Add("Data", data2);
+                }
+                //寤舵椂
+                else
+                {
+                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId},
+                         { "DelayTime", data.DelayTime} ,{ "MemberNumber",i + 1}};
+                    jObject.Add("Data", data2);
+                }
+                listCommand.Add(jObject.ToString());
+            }
+            return listCommand;
+        }
+
+
+        /// <summary>
         /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
         /// </summary>
         /// <param name="scene">Scene.</param>
@@ -366,29 +415,6 @@
                 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>
@@ -517,7 +543,7 @@
             sceneUI.AdjustTargetList.Clear();
 
             //鐒跺悗閲嶆柊娣诲姞
-            var listSuccess = await this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
+            var listSuccess = this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
             if (listSuccess == null)
             {
                 return false;
@@ -891,7 +917,7 @@
         /// </summary>
         /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
         /// <returns></returns>
-        public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
+        public List<Scene.DeviceListData> GetAdjustTargetList(SceneUI i_scene)
         {
             //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
@@ -900,16 +926,18 @@
                 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");
 
-            var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
-            //鍏遍�氶敊璇娴�
-            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
-            if (error != null)
+            if (result.ErrorMsg != null)
             {
-                this.ShowErrorMsg(error);
+                this.ShowTipMsg(result.ErrorMsg);
                 return null;
             }
-            if (result == null || result.getSceneDeviceListInfo == null)
+            if (result.ErrorMsgDiv == 0)
             {
                 //鑾峰彇鎵ц鐩爣澶辫触
                 string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
@@ -919,12 +947,14 @@
                 this.ShowTipMsg(msg);
                 return null;
             }
-            i_scene.AdjustTargetList = result.getSceneDeviceListInfo.DeviceList;
+            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(result.getSceneDeviceListInfo.DeviceList);
+            listData.AddRange(sceneGetDeviceListObj.DeviceList);
 
             return listData;
         }
@@ -960,6 +990,29 @@
         #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>

--
Gitblit v1.8.0