From 9ef48d7b2da7c408b53f73be0f6eef3cbac1c84a Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期四, 19 十一月 2020 10:23:45 +0800
Subject: [PATCH] Evoyo.Home1.1.0120111601_Release

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs |  241 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 234 insertions(+), 7 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
index e0c1f4e..e3836b1 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -43,6 +43,10 @@
         /// 鎵�鏈夌殑鎴块棿淇℃伅
         /// </summary>
         private Dictionary<string, Room> dicRooms = new Dictionary<string, Room>();
+        /// <summary>
+        /// 鐗╃悊璁惧灞炰簬鍝釜鎴块棿鐨勮褰�
+        /// </summary>
+        private Dictionary<string, string> dicDeviceRoomId = null;
 
         #endregion
 
@@ -295,7 +299,7 @@
             HdlAutoBackupLogic.DeleteFile(roomFilePath);
 
             //鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰�
-            Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId);
+            HdlRoomLogic.Current.DeleteRealDeviceByRoomId(roomId);
             if (refreshLeftView == true)
             {
                 //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
@@ -542,6 +546,219 @@
             return listRoom;
         }
 
+        /// <summary>
+        /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿
+        /// </summary>
+        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
+        /// <returns></returns>
+        public Room GetRoomByGateway(ZbGateway zbGateway)
+        {
+            return this.GetRoomByGateway(zbGateway.GwId);
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿
+        /// </summary>
+        /// <param name="gatewayId">缃戝叧ID</param>
+        /// <returns></returns>
+        public Room GetRoomByGateway(string gatewayId)
+        {
+            var localGateway = HdlGatewayLogic.Current.GetLocalGateway(gatewayId);
+            if (localGateway == null)
+            {
+                return null;
+            }
+            return HdlRoomLogic.Current.GetRoomById(localGateway.RoomId);
+        }
+
+        /// <summary>
+        /// 鍙樻洿缃戝叧鎴块棿
+        /// </summary>
+        /// <param name="gwId">缃戝叧Id</param>
+        /// <param name="roomId">鎴块棿ID</param>
+        public void ChangedGatewayRoom(string gwId, string roomId)
+        {
+            var localGateway = HdlGatewayLogic.Current.GetLocalGateway(gwId);
+            if (localGateway != null)
+            {
+                localGateway.RoomId = roomId;
+                localGateway.ReSave();
+                //娣诲姞澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(localGateway.FilePath);
+            }
+        }
+
+        #endregion
+
+
+        #region 鈻� 鐗╃悊璁惧鎵�灞炴埧闂確__________________
+
+        /// <summary>
+        /// 鍒濆鍖栫墿鐞嗚澶囨墍灞炴埧闂寸殑璁板綍
+        /// </summary>
+        public void InitRealDeviceRoomId()
+        {
+            this.dicDeviceRoomId = new Dictionary<string, string>();
+            string fullName = DirNameResourse.DeviceRoomIdFile;
+            var strData = HdlFileLogic.Current.ReadFileTextContent(fullName);
+            if (strData != null)
+            {
+                this.dicDeviceRoomId = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(strData);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, string> GetAllRealDeviceRoomData()
+        {
+            return this.dicDeviceRoomId;
+        }
+
+        /// <summary>
+        /// 淇濆瓨鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍
+        /// </summary>
+        /// <param name="listDevice">闇�瑕佷繚瀛樼殑璁惧瀵硅薄</param>
+        /// <param name="roomId">闇�瑕佷繚瀛樼殑鍝釜璁惧鐨勬埧闂碔D</param>
+        /// <param name="saveRoadDevice">濡傛灉鍙湁涓�涓洖璺�,鏄惁鎶婂洖璺殑鎴块棿涓�璧蜂慨鏀�</param>
+        public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId, bool saveRoadDevice = true)
+        {
+            if (listDevice == null || listDevice.Count == 0)
+            {
+                return;
+            }
+            //濡傛灉璁惧鍙湁涓�涓洖璺紝濡傛灉鏀瑰彉浜嗙湡瀹炶澶囧尯鍩燂紝鍒欏畠鐨勫洖璺殑鍖哄煙涔熶竴璧锋敼浜�
+            if (saveRoadDevice == true && listDevice.Count == 1)
+            {
+                if ((listDevice[0] is OTADevice) == false)
+                {
+                    //ota璁惧涓嶉渶瑕佸鐞�
+                    HdlRoomLogic.Current.ChangedRoom(listDevice[0], roomId, false);
+                }
+            }
+            bool save = false;
+            if (roomId == string.Empty)
+            {
+                //閫夋嫨鐨勬槸鏈垎閰�
+                this.dicDeviceRoomId.Remove(listDevice[0].DeviceAddr);
+                save = true;
+            }
+            else
+            {
+                if (this.dicDeviceRoomId.ContainsKey(listDevice[0].DeviceAddr) == false)
+                {
+                    this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
+                    save = true;
+                }
+                else
+                {
+                    //2020.05.18杩藉姞:濡傛灉璁板綍鐨勬埧闂碔D鏄笉瀛樺湪鐨勮瘽,鍒欓噸鏂拌鐩�
+                    var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[listDevice[0].DeviceAddr]);
+                    if (room == null || this.dicDeviceRoomId[listDevice[0].DeviceAddr] != roomId)
+                    {
+                        this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
+                        save = true;
+                    }
+                }
+            }
+
+            if (save == true)
+            {
+                //淇濆瓨璁板綍
+                HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceRoomIdFile, this.dicDeviceRoomId);
+
+                //娣诲姞鑷姩澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐪熷疄鐗╃悊璁惧鐨勬埧闂村悕瀛�
+        /// </summary>
+        /// <param name="device">璁惧鐨勬煇涓�涓洖璺�</param>
+        /// <returns></returns>
+        public string GeteRealDeviceRoomName(CommonDevice device)
+        {
+            if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false)
+            {
+                //鏈垎閰嶅尯鍩�
+                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
+            }
+            var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]);
+            return HdlRoomLogic.Current.GetRoomName(room);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐪熷疄鐗╃悊璁惧灞炰簬鍝釜鎴块棿
+        /// </summary>
+        /// <param name="device">璁惧鐨勬煇涓�涓洖璺�</param>
+        /// <returns></returns>
+        public Room GeteRealDeviceRoom(CommonDevice device)
+        {
+            if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false)
+            {
+                return null;
+            }
+            return HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]);
+        }
+
+        /// <summary>
+        /// 灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+        /// </summary>
+        /// <param name="device">闅忎究涓�涓洖璺�</param>
+        public void DeleteRealDeviceFromRoom(CommonDevice device)
+        {
+            //灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+            this.DeleteRealDeviceFromRoom(new List<string>() { device.DeviceAddr });
+        }
+
+        /// <summary>
+        /// 灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+        /// </summary>
+        /// <param name="listMac">璁惧Mac鍦板潃</param>
+        public void DeleteRealDeviceFromRoom(List<string> listMac)
+        {
+            bool save = false;
+            foreach (var deviceMacAddr in listMac)
+            {
+                if (this.dicDeviceRoomId.ContainsKey(deviceMacAddr) == true)
+                {
+                    this.dicDeviceRoomId.Remove(deviceMacAddr);
+                    save = true;
+                }
+            }
+            if (save == false)
+            {
+                //娌℃湁鏀瑰彉,涓嶉渶瑕佷繚瀛�
+                return;
+            }
+            //淇濆瓨璁板綍
+            HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceRoomIdFile, this.dicDeviceRoomId);
+
+            //娣诲姞鑷姩澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
+        }
+
+        /// <summary>
+        /// 鏍规嵁鎴块棿ID,绉婚櫎鎸囧畾鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�灞炴埧闂磋褰�
+        /// </summary>
+        /// <param name="i_RoomId"></param>
+        public void DeleteRealDeviceByRoomId(string i_RoomId)
+        {
+            var listDeleteKey = new List<string>();
+            foreach (var deviceAddr in this.dicDeviceRoomId.Keys)
+            {
+                if (this.dicDeviceRoomId[deviceAddr] == i_RoomId
+                    && listDeleteKey.Contains(deviceAddr) == false)
+                {
+                    listDeleteKey.Add(deviceAddr);
+                }
+            }
+            //灏嗙湡瀹炵墿鐞嗚澶囦粠鎴块棿涓Щ闄�
+            this.DeleteRealDeviceFromRoom(listDeleteKey);
+        }
+
         #endregion
 
         #region 鈻� 鎴块棿鏂规硶___________________________
@@ -628,7 +845,7 @@
                 if (i_room.IsLove == false && saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
                 {
                     //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿
-                    LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false);
+                    this.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, i_room.Id, false);
                 }
             }
         }
@@ -678,7 +895,7 @@
             if (deleteReal == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
             {
                 //鍒犻櫎鎺夊畠鐨勭湡瀹炵墿鐞嗚澶囩殑鎵�鍦ㄤ綅缃�
-                LocalDevice.Current.DeleteRealDeviceFromRoom(device);
+                HdlRoomLogic.Current.DeleteRealDeviceFromRoom(device);
             }
 
             //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿
@@ -1107,7 +1324,7 @@
             var houseInfo = new AreaSpaceInfo();
             houseInfo.name = Common.Config.Instance.Home.Name;
             houseInfo.uid = Common.Config.Instance.Home.Id;
-            houseInfo.parentId = "null";
+            houseInfo.parentId = null;
             listAreaSpaceInfo.Add(houseInfo);
             //鐒跺悗娣诲姞妤煎眰
             foreach (var floorId in Common.Config.Instance.Home.FloorDics.Keys)
@@ -1150,7 +1367,7 @@
             gatewayInfo.uid = "000101" + gwMac.Substring(2) + "07";
             gatewayInfo.name = HdlGatewayLogic.Current.GetGatewayName(loaclGateway);
 
-            var roomGateway = HdlGatewayLogic.Current.GetRoomByGateway(loaclGateway);
+            var roomGateway = HdlRoomLogic.Current.GetRoomByGateway(loaclGateway);
             if (roomGateway != null)
             {
                 gatewayInfo.parentId = roomGateway.Id;
@@ -1171,8 +1388,13 @@
                 {
                     //鍒涘缓鏂囦欢瀵硅薄
                     var result0 = await realMain.CreateFileAsync("DeviceRoomInfo.json");
-                    if (result0 == null || result0.Result != 0)
+                    if (result0 == null)
                     {
+                        return;
+                    }
+                    if (result0.Result != 0 && result0.Result != 2)
+                    {
+                        //濡傛灉鏄�2,鍏佽涓婁紶
                         return;
                     }
                     //鍙戦�佹暟鎹祦
@@ -1187,10 +1409,15 @@
 
                 //鍒涘缓鏂囦欢瀵硅薄
                 var result3 = await realMain.CreateFileAsync("space.json");
-                if (result3 == null || result3.Result != 0)
+                if (result3 == null)
                 {
                     return;
                 }
+                if (result3.Result != 0 && result3.Result != 2)
+                {
+                    //濡傛灉鏄�2,鍏佽涓婁紶
+                    return;
+                }
 
                 //鍙戦�佸尯鍩熶俊鎭�
                 var byteData2 = ASCIIEncoding.UTF8.GetBytes(strSendRoomInfo);

--
Gitblit v1.8.0