黄学彪
2019-10-10 2ed75b8b337048e5d75e6d9ec8307633134f02fd
ZigbeeApp/Shared/Common/Room.cs
@@ -32,7 +32,11 @@
        /// Guid.NewGuid().ToString()
        /// </summary>
        public string Id = Guid.NewGuid().ToString();
        /// <summary>
        /// 楼层Id
        /// 新增时使用Guid
        /// </summary>
        public string FloorId = string.Empty;
        /// <summary>
        /// 房间名
        /// </summary>
@@ -91,7 +95,7 @@
        /// 是否可以刷新房间数据了
        /// 需要等初始化本地设备数据后在可以初始化房间数据
        /// </summary>
        public static bool canInitAllRoom;
        public static bool CanInitAllRoom;
        /// <summary>
        /// 获取喜爱房间的所有设备路径
@@ -192,7 +196,7 @@
        /// </summary>
        public static void InitAllRoom()
        {
            if (canInitAllRoom == false)
            if (CanInitAllRoom == false)
            {
                return;
            }
@@ -249,7 +253,7 @@
                }
            }
            homeTemp.Save(false);
            canInitAllRoom = true;
            CanInitAllRoom = true;
            InitAllRoom();
        }
@@ -417,71 +421,48 @@
        }
        /// <summary>
        /// 根据房间名字,获取房间对象
        /// 根据房间Id,获取房间对象
        /// </summary>
        /// <returns>The room by name.</returns>
        /// <param name="roomName">房间名</param>
        public Room GetRoomByName(string roomName)
        /// <param name="roomId">房间ID</param>
        public Room GetRoomById(string roomId)
        {
            return Lists.Find((obj) => obj.Name == roomName);
            return Lists.Find((obj) => obj.Id == roomId);
        }
        /// <summary>
        /// 根据设备获取房间名字
        /// </summary>
        /// <returns>房间名</returns>
        /// <param name="device">设备对象</param>
        public List<string> GetRoomListNameByDevice(CommonDevice device)
        {
            var listName = new List<string>();
            var listroom = this.GetRoomByDevice(device);
            foreach (var room in listroom)
            {
                listName.Add(room.Name);
            }
            return listName;
        }
        /// <summary>
        /// 根据设备获取房间名字(多个房间的时候,用“,”分割)
        /// 根据设备获取房间名字(楼层+房间名)
        /// </summary>
        /// <returns>房间名</returns>
        /// <param name="device">设备对象</param>
        public string GetRoomNameByDevice(CommonDevice device)
        {
            var listName = this.GetRoomListNameByDevice(device);
            return this.GetRoomName(listName);
        }
        /// <summary>
        /// 获取多个房间的连接起来的名字
        /// </summary>
        /// <param name="listName"></param>
        /// <returns></returns>
        public string GetRoomName(List<string> listName)
        {
            if (listName.Count == 0)
            {
                //未分配区域
                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
            var room = this.GetRoomByDevice(device);
            if (room == null)
            {
                //未分配区域
                return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
            }
            return string.Join(",", listName);
            if (Config.Instance.Home.FloorDics.ContainsKey(room.FloorId) == true)
            {
                //(楼层+房间名)
                return Config.Instance.Home.FloorDics[room.FloorId] + " " + room.Name;
            }
            return room.Name;
        }
        /// <summary>
        /// 获取所有房间的所有设备
        /// 获取设备所在的房间
        /// </summary>
        /// <returns>The room by device.</returns>
        /// <param name="device">设备对象</param>
        public List<Room> GetRoomByDevice(CommonDevice device)
        public Room GetRoomByDevice(CommonDevice device)
        {
            var deviceUI = new DeviceUI { };
            deviceUI.DeviceAddr = device.DeviceAddr;
            deviceUI.DeviceEpoint = device.DeviceEpoint;
            return Lists.FindAll((obj) => obj.DeviceUIFilePathList.Contains(deviceUI.FileName));
            return Lists.Find((obj) => obj.DeviceUIFilePathList.Contains(deviceUI.FileName));
        }
        /// <summary>
@@ -528,52 +509,37 @@
        /// 设备的房间变更
        /// </summary>
        /// <param name="device">设备对象</param>
        /// <param name="listnewName">新房间名字列表</param>
        public void ChangedRoom(CommonDevice device, List<string> listnewName)
        /// <param name="roomId">新房间Id</param>
        public void ChangedRoom(CommonDevice device, string roomId)
        {
            //房间是否修改
            if (this.IsRoomChanged(device, listnewName) == false)
            if (this.IsRoomChanged(device, roomId) == false)
            {
                return;
            }
            var list = new List<string>();
            list.AddRange(listnewName);
            //从原来的房间移除设备,但是不删除UI文件
            this.DeleteDevice(device, ref list, false);
            //从原来的房间移除设备
            this.DeleteDevice(device);
            //添加到新的房间
            foreach (string newRoom in list)
            {
                var room = this.GetRoomByName(newRoom);
                if (room != null)
                {
                    //不覆盖UI文件
                    room.AddDevice(device, false);
                }
            var room = this.GetRoomById(roomId);
            if (room != null)
            {
                room.AddDevice(device);
            }
        }
        }
        /// <summary>
        /// 房间名字是否有修改
        /// </summary>
        /// <param name="device">设备对象</param>
        /// <param name="listnewName">新房间名字列表</param>
        /// <param name="roomId">新房间Id</param>
        /// <returns></returns>
        public bool IsRoomChanged(CommonDevice device, List<string> listnewName)
        public bool IsRoomChanged(CommonDevice device, string roomId)
        {
            var listOld = this.GetRoomListNameByDevice(device);
            if (listOld.Count != listnewName.Count)
            {
                return true;
            }
            //个数一样时,比较内容
            foreach (string newstring in listnewName)
            {
                if (listOld.Contains(newstring) == false)
                {
                    return true;
                }
            var room = this.GetRoomByDevice(device);
            if (room == null || room.Id != roomId)
            {
                return true;
            }
            return false;
        }
@@ -676,8 +642,7 @@
        /// 添加设备
        /// </summary>
        /// <param name="device">要添加的设备对象</param>
        /// <param name="backUpUI">是否要覆盖UI文件</param>
        public void AddDevice(CommonDevice device, bool backUpUI = true)
        public void AddDevice(CommonDevice device)
        {
            if (device == null)
            {
@@ -726,21 +691,7 @@
        /// 删除设备
        /// </summary>
        /// <param name="device">要删除的设备对象</param>
        /// <param name="DeleteUi">是否删除UI文件</param>
        public void DeleteDevice(CommonDevice device, bool DeleteUi = true)
        {
            List<string> listNotDelRoom = new List<string>();
            //删除设备
            this.DeleteDevice(device, ref listNotDelRoom, DeleteUi);
        }
        /// <summary>
        /// 删除设备(特殊函数,现阶段是给设备变更房间使用的)
        /// </summary>
        /// <param name="device">要删除的设备对象</param>
        /// <param name="listNotDelRoom">不执行删除的房间,当指定的不能删除的房间存在时,会从这个列表中移除,最终只剩下新的房间</param>
        /// <param name="DeleteUi">是否删除UI文件</param>
        public void DeleteDevice(CommonDevice device, ref List<string> listNotDelRoom, bool DeleteUi)
        public void DeleteDevice(CommonDevice device)
        {
            if (device == null)
            {
@@ -750,36 +701,23 @@
            deviceUI.DeviceAddr = device.DeviceAddr;
            deviceUI.DeviceEpoint = device.DeviceEpoint;
            //根据设备,获取所在的房间,因为它删的不一定是当前房间
            List<Room> listroom = this.GetRoomByDevice(device);
            //删除UI文件
            if (DeleteUi == true && Global.IsExistsByHomeId(deviceUI.FileName) == true)
            {
                Global.DeleteFilebyHomeId(deviceUI.FileName);
                //删除自动备份
                Phone.UserCenter.HdlAutoBackupLogic.DeleteFile(deviceUI.FileName);
            }
            foreach (Room room in listroom)
            {
                if (listNotDelRoom.Contains(room.Name) == true)
                {
                    listNotDelRoom.Remove(room.Name);
                    continue;
                }
                //移除缓存
                if (room.DeviceUIFilePathList.Contains(deviceUI.FileName) == false)
                {
                    return;
                }
                room.DeviceUIFilePathList.Remove(deviceUI.FileName);
                room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUI.FileName);
                room.Save();
                //更改自动备份
                Phone.UserCenter.HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
            }
            //根据设备,获取所在的房间
            var room = this.GetRoomByDevice(device);
            if (room == null)
            {
                return;
            }
            //移除缓存
            if (room.DeviceUIFilePathList.Contains(deviceUI.FileName) == false)
            {
                return;
            }
            room.DeviceUIFilePathList.Remove(deviceUI.FileName);
            room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUI.FileName);
            room.Save();
            //更改自动备份
            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
        }
        #endregion
@@ -1151,6 +1089,142 @@
        #endregion
        #region ◆ 楼层和房间顺序相关_______________
        /// <summary>
        /// 根据楼层的主键获取排序后的房间列表
        /// </summary>
        /// <param name="i_floorKeys">楼层的主键</param>
        /// <param name="getShard">分享的房间是否也获取</param>
        /// <returns></returns>
        public List<Room> GetFloorSortRoom(string i_floorKeys, bool getShard = true)
        {
            Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>();
            //读取房间顺序
            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile);
            var strData = UserCenterLogic.LoadFileContent(fullName);
            if (strData != null)
            {
                dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
            }
            var listRoomSort = new List<string>();
            if (dicAllSort.ContainsKey(i_floorKeys) == true)
            {
                listRoomSort = dicAllSort[i_floorKeys];
            }
            else
            {
                dicAllSort[i_floorKeys] = listRoomSort;
            }
            var dicRoom = new Dictionary<string, Common.Room>();
            foreach (var room in Common.Room.Lists)
            {
                if (room.FloorId != i_floorKeys)
                {
                    //不是同一个楼层
                    continue;
                }
                if (listRoomSort.Contains(room.Id) == false)
                {
                    //新添加的房间
                    listRoomSort.Add(room.Id);
                }
                if (getShard == false && room.IsSharedRoom == true)
                {
                    //不要分享的房间
                    continue;
                }
                dicRoom[room.Id] = room;
            }
            var listSortRoom = new List<Room>();
            for (int i = 0; i < listRoomSort.Count; i++)
            {
                if (dicRoom.ContainsKey(listRoomSort[i]) == true)
                {
                    listSortRoom.Add(dicRoom[listRoomSort[i]]);
                }
            }
            //保存顺序
            UserCenterLogic.SaveFileContent(fullName, dicAllSort);
            return listSortRoom;
        }
        /// <summary>
        /// 保存房间的顺序
        /// </summary>
        /// <param name="i_floorKeys">楼层主键</param>
        /// <param name="listSort">房间顺序(房间的主键)</param>
        public void SaveRoomSort(string i_floorKeys, List<string> listSort)
        {
            Dictionary<string, List<string>> dicAllSort = new Dictionary<string, List<string>>();
            //读取房间顺序
            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.RoomSortFile);
            var strData = UserCenterLogic.LoadFileContent(fullName);
            if (strData != null)
            {
                dicAllSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
            }
            //保存顺序
            dicAllSort[i_floorKeys] = listSort;
            UserCenterLogic.SaveFileContent(fullName, dicAllSort);
            dicAllSort.Clear();
        }
        /// <summary>
        /// 获取排序后的楼层
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, string> GetFloorSortList()
        {
            //读取楼层顺序
            var listFloorSort = new List<string>();
            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.FloorSortFile);
            var strData = UserCenterLogic.LoadFileContent(fullName);
            if (strData != null)
            {
                listFloorSort = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(strData);
            }
            foreach (string keys in Common.Config.Instance.Home.FloorDics.Keys)
            {
                if (listFloorSort.Contains(keys) == false)
                {
                    //新添加的楼层
                    listFloorSort.Add(keys);
                }
            }
            var dic = new Dictionary<string, string>();
            for (int i = 0; i < listFloorSort.Count; i++)
            {
                if (Config.Instance.Home.FloorDics.ContainsKey(listFloorSort[i]) == true)
                {
                    dic[listFloorSort[i]] = Config.Instance.Home.FloorDics[listFloorSort[i]];
                }
            }
            //保存顺序
            UserCenterLogic.SaveFileContent(fullName, listFloorSort);
            return dic;
        }
        /// <summary>
        /// 保存楼层的顺序
        /// </summary>
        /// <param name="listSort">楼层的主键</param>
        public void SaveFloorSort(List<string> listSort)
        {
            string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.FloorSortFile);
            //保存顺序
            UserCenterLogic.SaveFileContent(fullName, listSort);
        }
        #endregion
        #region ◆ 克隆房间对象_____________________
        /// <summary>
@@ -1162,6 +1236,7 @@
            var newRoom = new Room();
            //克隆属性
            newRoom.Id = this.Id;
            newRoom.FloorId = this.FloorId;
            newRoom.Name = this.Name;
            newRoom.BackgroundImage = this.BackgroundImage;
            newRoom.BackgroundImageType = this.BackgroundImageType;