xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -62,7 +62,7 @@
            //检测我的喜爱这个房间对象
            this.CheckLoveRoom();
            var listFile = Global.FileListByHomeId();
            var listFile = HdlFileLogic.Current.GetRootPathListFile();
            foreach (var fileName in listFile)
            {
                if (fileName.StartsWith("Room_") == true)
@@ -75,8 +75,6 @@
                    }
                }
            }
            //设置当前楼层的ID
            Config.Instance.Home.SetCurrentFloorId();
            //顺便刷新场景
            HdlSceneLogic.Current.ReFreshByLocal();
            //刷新房间视图列表
@@ -88,7 +86,7 @@
        /// </summary>
        public void RefreshAllRoomByLocation()
        {
            var listFile = Global.FileListByHomeId();
            var listFile = HdlFileLogic.Current.GetRootPathListFile();
            //我的喜爱的房间必须要在第0位才行
            string fRoom = "Room_Favorite.json";
@@ -242,6 +240,17 @@
        /// <returns></returns>
        public void RemoveRoom(string roomId, bool refreshLeftView = true)
        {
            if (this.NowMainPageRoom != null && this.NowMainPageRoom.Id == roomId)
            {
                //当删除的是主页的房间的时候
                this.NowMainPageRoom = this.GetLoveRoom();
            }
            if (this.NowCategoryRoom != null && this.NowCategoryRoom.Id == roomId)
            {
                //当删除的是分类的房间的时候
                this.NowCategoryRoom = this.GetLoveRoom();
            }
            //根据房间Id,获取房间对象
            var room = this.GetRoomById(roomId);
            if (room == null)
@@ -289,7 +298,6 @@
            Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId);
            if (refreshLeftView == true)
            {
                //HdlAutoBackupLogic.DeleteFile(roomFilePath);
                //刷新房间视图列表
                this.RefreshRoomListView();
            }
@@ -482,7 +490,7 @@
                    }
                }
            }
            return listRoom;
            return this.SortRoom(listRoom);
        }
        /// <summary>
@@ -497,35 +505,6 @@
                listRoom.Add(room);
            }
            return this.SortRoom(listRoom);
        }
        /// <summary>
        /// 获取当前楼层的房间名称
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public List<string> GetRoomNamesByFloorId(string id)
        {
            var listName = new List<string>();
            if (Config.Instance.Home.FloorDics.Count == 0)
            {
                //没有楼层
                foreach (var room in this.dicRooms.Values)
                {
                    listName.Add(room.Name);
                }
            }
            else
            {
                foreach (var room in this.dicRooms.Values)
                {
                    if (room.FloorId == id)
                    {
                        listName.Add(room.Name);
                    }
                }
            }
            return listName;
        }
        /// <summary>
@@ -557,17 +536,10 @@
                    }
                }
            }
            listRoom = this.SortRoom(listRoom);
            listRoom.Insert(0, GetLoveRoom());
            return listRoom;
        }
        /// <summary>
        /// 获取当前楼层的房间(拼接了【常用】在第一位)
        /// </summary>
        /// <returns></returns>
        public List<Room> GetRoomsByCurrentFloorIdAppendLoveRoom()
        {
            return this.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
        }
        #endregion
@@ -590,7 +562,7 @@
                //移除我的喜爱
                this.DeleteLoveDevice(device);
                //设备改变房间的话,主页需要重新刷新
                UserView.UserPage.Instance.RefreshForm = true;
                UserView.UserPage.Instance.RefreshAllForm = true;
                return;
            }
            //房间是否修改
@@ -608,7 +580,7 @@
                this.AddDevice(room, device, saveRealRoom);
            }
            //设备改变房间的话,主页需要重新刷新
            UserView.UserPage.Instance.RefreshForm = true;
            UserView.UserPage.Instance.RefreshAllForm = true;
        }
        /// <summary>
@@ -681,6 +653,8 @@
                    //保存到本地
                    loveRoom.ListDevice.Add(mainkeys);
                    loveRoom.Save();
                    //添加收藏设备时,需要刷新主页
                    UserView.UserPage.Instance.RefreshAllForm = true;
                }
            }
        }
@@ -744,6 +718,8 @@
                loveRoom.Save();
                //更改自动备份
                HdlAutoBackupLogic.AddOrEditorFile(loveRoom.FileName);
                //添加收藏设备时,需要刷新主页
                UserView.UserPage.Instance.RefreshAllForm = true;
            }
        }
@@ -1021,6 +997,11 @@
        /// <returns></returns>
        public Dictionary<string, string> GetFloorSortList()
        {
            //没有楼层
            if (Config.Instance.Home.FloorDics.Count == 0)
            {
                return new Dictionary<string, string>();
            }
            //从一堆文字中,获取这一堆文字里面数字字符串的最长长度
            var listName = new List<string>();
            foreach (var floorName in Config.Instance.Home.FloorDics.Values)
@@ -1080,6 +1061,258 @@
        #endregion
        #region ■ 发送房间信息给网关_________________
        /// <summary>
        /// 发送房间信息给网关
        /// </summary>
        public void SetRoomInfoToGateway()
        {
            if (UserCenterResourse.UserInfo.AuthorityNo != 1 && UserCenterResourse.UserInfo.AuthorityNo != 2)
            {
                //不是主人和管理员,则不处理
                return;
            }
            var realMain = ZbGateway.MainGateWay;
            if (realMain == null || Common.Config.Instance.Home.IsVirtually == true)
            {
                //没有主网关,则不理
                return;
            }
            //获取房间全部的设备对象
            string strSendDeviceRoomInfo = string.Empty;
            foreach (var room in this.dicRooms.Values)
            {
                if (room.IsSharedRoom || room.IsLove)
                {
                    continue;
                }
                var listDevice = this.GetRoomListDevice(room);
                //发送给网关的设备房间json
                foreach (var device in listDevice)
                {
                    if (strSendDeviceRoomInfo != string.Empty)
                    {
                        strSendDeviceRoomInfo += "\r\n";
                    }
                    strSendDeviceRoomInfo += " " + this.SetDoublMark(device.DeviceAddr) + " ";
                    strSendDeviceRoomInfo += this.SetDoublMark("0x" + Convert.ToString(device.DeviceEpoint, 16).PadLeft(2, '0')) + " ";
                    strSendDeviceRoomInfo += this.SetDoublMark(LocalDevice.Current.GetDeviceEpointName(device).Replace(UserCenterResourse.douMarks, string.Empty)) + " ";
                    strSendDeviceRoomInfo += this.SetDoublMark(room.Id);
                }
            }
            var listAreaSpaceInfo = new List<AreaSpaceInfo>();
            //首先添加住宅
            var houseInfo = new AreaSpaceInfo();
            houseInfo.name = Common.Config.Instance.Home.Name;
            houseInfo.uid = Common.Config.Instance.Home.Id;
            houseInfo.parentId = "null";
            listAreaSpaceInfo.Add(houseInfo);
            //然后添加楼层
            foreach (var floorId in Common.Config.Instance.Home.FloorDics.Keys)
            {
                var floorInfo = new AreaSpaceInfo();
                floorInfo.name = Common.Config.Instance.Home.FloorDics[floorId];
                floorInfo.uid = floorId;
                floorInfo.parentId = Common.Config.Instance.Home.Id;
                listAreaSpaceInfo.Add(floorInfo);
            }
            //然后添加房间
            var listRoom = this.GetAllListRooms();
            foreach (var room in listRoom)
            {
                if (room.IsLove == true) { continue; }
                var roomInfo = new AreaSpaceInfo();
                roomInfo.name = room.Name;
                roomInfo.uid = room.Id;
                if (Common.Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
                {
                    roomInfo.parentId = room.FloorId;
                }
                else
                {
                    roomInfo.parentId = Common.Config.Instance.Home.Id;
                }
                listAreaSpaceInfo.Add(roomInfo);
            }
            //然后添加网关房间信息
            var gatewayInfo = new GatewayAreaSpaceInfo();
            var loaclGateway = HdlGatewayLogic.Current.GetLocalGateway(realMain.GwId);
            if (loaclGateway == null || loaclGateway.GwMac == string.Empty)
            {
                //没有mac,或者找不到对象,则不上传
                return;
            }
            string gwMac = loaclGateway.GwMac.Replace(":", string.Empty);
            gatewayInfo.uid = "000101" + gwMac.Substring(2) + "07";
            gatewayInfo.name = HdlGatewayLogic.Current.GetGatewayName(loaclGateway);
            var roomGateway = HdlGatewayLogic.Current.GetRoomByGateway(loaclGateway);
            if (roomGateway != null)
            {
                gatewayInfo.parentId = roomGateway.Id;
            }
            gatewayInfo.hwInfo = new GatewayHwInfo();
            gatewayInfo.pkgInfo = new GatewayPkgInfo { version = loaclGateway.LinuxFirmwareVersion.ToString() };
            gatewayInfo.swInfo = new List<GatewaySwInfo> { new GatewaySwInfo { ver = loaclGateway.LinuxFirmwareVersion.ToString() } };
            gatewayInfo.ip = loaclGateway.GwIP;
            gatewayInfo.mac = loaclGateway.GwMac;
            var data = new { spaces = listAreaSpaceInfo, gateway = gatewayInfo };
            string strSendRoomInfo = Newtonsoft.Json.JsonConvert.SerializeObject(data);
            HdlThreadLogic.Current.RunThread(async () =>
            {
                //发送设备区域信息
                if (strSendDeviceRoomInfo != string.Empty)
                {
                    //创建文件对象
                    var result0 = await realMain.CreateFileAsync("DeviceRoomInfo.json");
                    if (result0 == null || result0.Result != 0)
                    {
                        return;
                    }
                    //发送数据流
                    var byteData = ASCIIEncoding.UTF8.GetBytes(strSendDeviceRoomInfo);
                    var result1 = await realMain.SendFileAsync(byteData);
                    if (result1 == null || result1.Result != 0)
                    {
                        return;
                    }
                }
                //创建文件对象
                var result3 = await realMain.CreateFileAsync("space.json");
                if (result3 == null || result3.Result != 0)
                {
                    return;
                }
                //发送区域信息
                var byteData2 = ASCIIEncoding.UTF8.GetBytes(strSendRoomInfo);
                var result4 = await realMain.SendFileAsync(byteData2);
            });
        }
        /// <summary>
        /// 设置双引号
        /// </summary>
        /// <param name="i_text"></param>
        /// <returns></returns>
        private string SetDoublMark(string i_text)
        {
            return UserCenterResourse.douMarks + i_text + UserCenterResourse.douMarks;
        }
        /// <summary>
        /// 空间区域信息
        /// </summary>
        private class AreaSpaceInfo
        {
            /// <summary>
            /// 住宅ID 或者 楼层ID 或者 房间ID
            /// </summary>
            public string uid = string.Empty;
            /// <summary>
            /// 住宅名称 或者 楼层名称 或者 房间名称
            /// </summary>
            public string name = string.Empty;
            /// <summary>
            /// 当前ID的父ID,如果没有,则为带双引号的"null" 比如 楼层ID就填住宅ID  房间ID就填楼层ID
            /// </summary>
            public string parentId = string.Empty;
        }
        /// <summary>
        /// 网关空间区域信息
        /// </summary>
        private class GatewayAreaSpaceInfo
        {
            /// <summary>
            /// 【000101】+绑定网关的时间戳转16进制+【07】
            /// </summary>
            public string uid = string.Empty;
            /// <summary>
            /// 这个固定
            /// </summary>
            public string name = "hdl_bus_gatway";
            /// <summary>
            /// 网关所在的房间ID
            /// </summary>
            public string parentId = string.Empty;
            /// <summary>
            /// 这个固定
            /// </summary>
            public int deviceType = 61184;
            /// <summary>
            /// 网关硬件信息
            /// </summary>
            public GatewayHwInfo hwInfo = null;
            /// <summary>
            /// 网关标准信息
            /// </summary>
            public GatewayPkgInfo pkgInfo = null;
            /// <summary>
            /// 网关固件版本
            /// </summary>
            public List<GatewaySwInfo> swInfo = null;
            /// <summary>
            /// 网关IP
            /// </summary>
            public string ip = string.Empty;
            /// <summary>
            /// 网关的Mac
            /// </summary>
            public string mac = string.Empty;
        }
        /// <summary>
        /// 网关硬件信息
        /// </summary>
        private class GatewayHwInfo
        {
            /// <summary>
            /// 这个固定
            /// </summary>
            public string brand = "MIPS";
            /// <summary>
            /// 这个固定
            /// </summary>
            public string model = "MT7688";
        }
        /// <summary>
        /// 网关标准信息
        /// </summary>
        private class GatewayPkgInfo
        {
            /// <summary>
            /// 这个是Linux的固件版本
            /// </summary>
            public string version = string.Empty;
        }
        /// <summary>
        /// 网关固件版本
        /// </summary>
        private class GatewaySwInfo
        {
            /// <summary>
            /// 这个固定
            /// </summary>
            public string name = "HDL";
            /// <summary>
            /// 这个是Linux的固件版本
            /// </summary>
            public string ver = string.Empty;
        }
        #endregion
        #region ■ 克隆房间对象_______________________
        /// <summary>
@@ -1093,9 +1326,7 @@
            newRoom.Id = i_room.Id;
            newRoom.FloorId = i_room.FloorId;
            newRoom.TemperatrueDevice = i_room.TemperatrueDevice;
            newRoom.Temperatrue = i_room.Temperatrue;
            newRoom.HumidityDevice = i_room.HumidityDevice;
            newRoom.Humidity = i_room.Humidity;
            newRoom.Name = i_room.Name;
            newRoom.BackgroundImage = i_room.BackgroundImage;
            newRoom.BackgroundImageType = i_room.BackgroundImageType;