陈嘉乐
2020-07-10 48ba446936b51fffafa7c3600c0dadc6ac0e8c20
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -31,32 +31,14 @@
                return m_Current;
            }
        }
        /// <summary>
        /// 当前选择的房间
        /// 当前主页选择的房间对象
        /// </summary>
        private Room m_CurrentRoom = null;
        public Room NowMainPageRoom = null;
        /// <summary>
        /// 当前选择的房间
        /// 当前分类选择的房间对象
        /// </summary>
        public Room CurrentRoom
        {
            get
            {
                if (m_CurrentRoom == null && dicRooms.Count > 0)
                {
                    //设置初始值
                    foreach (var room in dicRooms.Values)
                    {
                        m_CurrentRoom = room;
                        break;
                    }
                }
                return m_CurrentRoom;
            }
            set { m_CurrentRoom = value; }
        }
        public Room NowCategoryRoom = null;
        /// <summary>
        /// 所有的房间信息
        /// </summary>
@@ -72,6 +54,9 @@
        /// </summary>
        public void InitAllRoom()
        {
            this.NowMainPageRoom = null;
            this.NowCategoryRoom = null;
            //清空本地缓存
            this.dicRooms.Clear();
            //检测我的喜爱这个房间对象
@@ -123,7 +108,14 @@
                }
            }
            //检测楼层数据的合法性
            this.CheckFloorData(listRoomFile);
            if (UserCenterResourse.UserInfo.AuthorityNo == 3)
            {
                this.CheckMemberFloorData(listRoomFile);
            }
            else
            {
                this.CheckAdminFloorData(listRoomFile);
            }
            homeTemp.Save(false);
            InitAllRoom();
@@ -136,7 +128,7 @@
        {
            Application.RunOnMainThread(() =>
            {
                Phone.Device.Room.RoomManagement.Instance.Show();
                MainPage.ListRoomViewFrom.Instance?.RefreshListRoom();
            });
        }
@@ -144,8 +136,12 @@
        /// 检测楼层数据的合法性
        /// </summary>
        /// <param name="listRoomFile"></param>
        private void CheckFloorData(List<string> listRoomFile)
        private void CheckAdminFloorData(List<string> listRoomFile)
        {
            //没有楼层,则无需处理
            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
            //主人或者管理员的话,就检测是否存在未分配楼层的房间
            for (int i = 0; i < listRoomFile.Count; i++)
            {
                try
@@ -165,6 +161,49 @@
            }
        }
        /// <summary>
        /// 检测楼层数据的合法性
        /// </summary>
        /// <param name="listRoomFile"></param>
        private void CheckMemberFloorData(List<string> listRoomFile)
        {
            //没有楼层,则无需处理
            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
            //成员的话,就检测是否存在没有房间的楼层
            var listEsixtFloor = new List<string>();
            for (int i = 0; i < listRoomFile.Count; i++)
            {
                try
                {
                    var byteData = Global.ReadFileByHomeId(listRoomFile[i]);
                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                    var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
                    if (roomTemp.FloorId != string.Empty && listEsixtFloor.Contains(roomTemp.FloorId) == false)
                    {
                        //收集楼层
                        listEsixtFloor.Add(roomTemp.FloorId);
                    }
                }
                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
            }
            var listDeleteId = new List<string>();
            foreach (var flootId in Config.Instance.Home.FloorDics.Keys)
            {
                if (listEsixtFloor.Contains(flootId) == false)
                {
                    //如果这个id不存在于任何房间的话,收集它
                    listDeleteId.Add(flootId);
                }
            }
            foreach (var deleteId in listDeleteId)
            {
                //删除这个id
                Config.Instance.Home.FloorDics.Remove(deleteId);
            }
            Config.Instance.Home.Save(false);
        }
        #endregion
        #region ■ 添加房间___________________________
@@ -173,7 +212,8 @@
        /// 增加房间
        /// </summary>
        /// <param name="room">Room.</param>
        public void AddRoom(Room room)
        /// <param name="rorefreshRoomViewom">是否刷新房间视图列表界面</param>
        public void AddRoom(Room room, bool refreshRoomView = true)
        {
            if (Global.IsExistsByHomeId(room.FileName) == true
                || Config.Instance.Home.ListRooms.Contains(room.Id) == true)
@@ -188,8 +228,11 @@
            room.Save();
            //备份
            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
            //刷新房间视图列表
            this.RefreshRoomListView();
            if (refreshRoomView == true)
            {
                //刷新房间视图列表
                this.RefreshRoomListView();
            }
        }
        #endregion
@@ -247,6 +290,10 @@
                Global.DeleteFilebyHomeId(roomFilePath);
            }
            HdlAutoBackupLogic.DeleteFile(roomFilePath);
            //根据房间ID,移除指定的真实物理设备的所属房间记录
            Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId);
            //刷新房间视图列表
            this.RefreshRoomListView();
        }
@@ -307,10 +354,19 @@
        /// </summary>
        /// <returns>房间名</returns>
        /// <param name="device">设备对象</param>
        /// <param name="append">在楼层和房间名字的中间添加的字符(仅限有楼层的时候有效)</param>
        public string GetRoomNameByDevice(CommonDevice device, string append = " ")
        public string GetRoomNameByDevice(CommonDevice device)
        {
            var room = this.GetRoomByDevice(device);
            return this.GetFloorRoomName(room);
        }
        /// <summary>
        /// 获取房间名字(楼层+房间名)
        /// </summary>
        /// <returns>房间名</returns>
        /// <param name="room">房间对象</param>
        public string GetFloorRoomName(Room room)
        {
            if (room == null)
            {
                //未分配区域
@@ -319,7 +375,7 @@
            if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
            {
                //(楼层+房间名)
                return Config.Instance.Home.FloorDics[room.FloorId] + append + room.Name;
                return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name;
            }
            return room.Name;
        }
@@ -510,13 +566,24 @@
        /// <param name="saveRealRoom">是否修改真实物理设备的房间,不出意外,这个值默认为true即可</param>
        public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true)
        {
            //选择的是未分配
            if (roomId == string.Empty)
            {
                //从原来的房间移除设备
                this.DeleteDevice(device);
                //移除我的喜爱
                this.DeleteLoveDevice(device);
                //设备改变房间的话,主页需要重新刷新
                UserView.UserPage.Instance.RefreshForm = true;
                return;
            }
            //房间是否修改
            if (this.IsRoomChanged(device, roomId) == false)
            {
                return;
            }
            //从原来的房间移除设备
            this.DeleteDevice(device);
            //从原来的房间移除设备,这里不删除真实设备的房间
            this.DeleteDevice(device, false);
            //添加到新的房间
            var room = this.GetRoomById(roomId);
@@ -524,6 +591,8 @@
            {
                this.AddDevice(room, device, saveRealRoom);
            }
            //设备改变房间的话,主页需要重新刷新
            UserView.UserPage.Instance.RefreshForm = true;
        }
        /// <summary>
@@ -553,7 +622,7 @@
            {
                return i_room.Name;
            }
            var floorName = Config.Instance.Home.GetFloorNameById(i_room.FloorId);
            var floorName = HdlResidenceLogic.Current.GetFloorNameById(i_room.FloorId);
            if (floorName == null)
            {
                return i_room.Name;
@@ -627,12 +696,20 @@
        /// 删除设备(这个函数不删除我的喜爱)
        /// </summary>
        /// <param name="device">要删除的设备对象</param>
        public void DeleteDevice(CommonDevice device)
        /// <param name="deleteReal">是否删除真实物理设备的房间</param>
        public void DeleteDevice(CommonDevice device, bool deleteReal = true)
        {
            if (device == null)
            {
                return;
            }
            //如果它只有一个回路
            if (deleteReal == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
            {
                //删除掉它的真实物理设备的所在位置
                LocalDevice.Current.DeleteRealDeviceFromRoom(device);
            }
            //根据设备,获取所在的房间
            var room = this.GetRoomByDevice(device);
            if (room == null)
@@ -647,7 +724,7 @@
            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
            //递归:删除掉以前的旧数据导致的多个房间的问题
            this.DeleteDevice(device);
            this.DeleteDevice(device, deleteReal);
        }
        /// <summary>
@@ -683,12 +760,28 @@
        /// <returns></returns>
        public List<CommonDevice> GetRoomListDevice(Room i_room)
        {
            var listDevice = new List<CommonDevice>();
            var dicSort = new Dictionary<string, List<int>>();
            foreach (var mainKeys in i_room.ListDevice)
            {
                var device = LocalDevice.Current.GetDevice(mainKeys);
                if (device != null)
                {
                    if (dicSort.ContainsKey(device.DeviceAddr) == false)
                    {
                        dicSort[device.DeviceAddr] = new List<int>();
                    }
                    dicSort[device.DeviceAddr].Add(device.DeviceEpoint);
                }
            }
            var listDevice = new List<CommonDevice>();
            foreach (var strMac in dicSort.Keys)
            {
                var listEpont = dicSort[strMac];
                //排序
                listEpont.Sort();
                for (int i = 0; i < listEpont.Count; i++)
                {
                    var device = LocalDevice.Current.GetDevice(strMac, listEpont[i]);
                    listDevice.Add(device);
                }
            }
@@ -747,6 +840,11 @@
            var listEsxit = new HashSet<string>();
            foreach (var room in this.dicRooms.Values)
            {
                if (room.IsLove == true)
                {
                    //不包含收藏房间
                    continue;
                }
                foreach (string mainkeys in room.ListDevice)
                {
                    if (listEsxit.Contains(mainkeys) == false)
@@ -760,15 +858,16 @@
            var commonDeviceList = LocalDevice.Current.listAllDevice;
            foreach (var device in commonDeviceList)
            {
                //判断该设备能否显示在主页
                if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false)
                {
                    continue;
                }
                string mainkeys = LocalDevice.Current.GetDeviceMainKeys(device);
                if (listEsxit.Contains(mainkeys) == false)
                {
                    listDevice.Add(device);
                }
            }
            if (listDevice.Count == 0)
            {
                return null;
            }
            return listDevice;
        }
@@ -825,13 +924,17 @@
        #region ■ 楼层和房间顺序相关_________________
        /// <summary>
        /// 根据楼层的主键获取排序后的房间列表
        /// 根据楼层的主键获取排序后的房间列表(支持无楼层模式,不获取收藏房间)
        /// </summary>
        /// <param name="i_floorKeys">楼层的主键</param>
        /// <param name="getShard">分享的房间是否也获取</param>
        /// <returns></returns>
        public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true)
        {
            if (i_floorKeys == null)
            {
                i_floorKeys = string.Empty;
            }
            Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>();
            //读取房间顺序
            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile);
@@ -854,9 +957,14 @@
            var dicRoom = new Dictionary<string, Common.Room>();
            foreach (var room in this.dicRooms.Values)
            {
                if (room.FloorId != i_floorKeys || room.IsLove == true)
                if (room.FloorId != i_floorKeys && i_floorKeys != string.Empty)
                {
                    //不是同一个楼层
                    continue;
                }
                if (room.IsLove == true)
                {
                    //不要我的喜爱
                    continue;
                }
                if (listRoomSort.Contains(room.Id) == false)
@@ -993,7 +1101,7 @@
            if (Config.Instance.Home.ListRooms.Contains("Favorite") == false)
            {
                //默认添加喜爱的房间--禁止修改房间名
                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.JPG", Id = "Favorite" };
                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.jpg", Id = "Favorite" };
                love.Save(false);
                //添加到house 房间路径列表
                var currentHome = Config.Instance.Home;