| | |
| | | /// Guid.NewGuid().ToString() |
| | | /// </summary> |
| | | public string Id = Guid.NewGuid().ToString(); |
| | | |
| | | /// <summary> |
| | | /// 楼层Id |
| | | /// 新增时使用Guid |
| | | /// </summary> |
| | | public string FloorId = string.Empty; |
| | | /// <summary> |
| | | /// 房间名 |
| | | /// </summary> |
| | |
| | | /// 是否可以刷新房间数据了 |
| | | /// 需要等初始化本地设备数据后在可以初始化房间数据 |
| | | /// </summary> |
| | | public static bool canInitAllRoom; |
| | | public static bool CanInitAllRoom; |
| | | |
| | | /// <summary> |
| | | /// 获取喜爱房间的所有设备路径 |
| | |
| | | /// </summary> |
| | | public static void InitAllRoom() |
| | | { |
| | | if (canInitAllRoom == false) |
| | | if (CanInitAllRoom == false) |
| | | { |
| | | return; |
| | | } |
| | |
| | | }
|
| | | }
|
| | | homeTemp.Save(false);
|
| | | canInitAllRoom = true;
|
| | | CanInitAllRoom = true;
|
| | | InitAllRoom();
|
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /// <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> |
| | |
| | | /// 设备的房间变更 |
| | | /// </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; |
| | | } |
| | |
| | | /// 添加设备 |
| | | /// </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) |
| | | { |
| | |
| | | /// 删除设备 |
| | | /// </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) |
| | | { |
| | |
| | | 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 |
| | |
| | |
|
| | | #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>
|
| | |
| | | var newRoom = new Room();
|
| | | //克隆属性
|
| | | newRoom.Id = this.Id;
|
| | | newRoom.FloorId = this.FloorId;
|
| | | newRoom.Name = this.Name;
|
| | | newRoom.BackgroundImage = this.BackgroundImage;
|
| | | newRoom.BackgroundImageType = this.BackgroundImageType;
|