| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using HDL_ON.DAL.Server; |
| | | using Shared; |
| | | |
| | | namespace HDL_ON.Entity |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 房间对象 |
| | | /// 房间命名规则 typeof (Room).Name + "_" + etNameBox.Text.Trim (); |
| | | /// 读取服务器空间信息返回到数据包 |
| | | /// </summary> |
| | | [System.Serializable] |
| | | public class Room |
| | | public class SpatialApiPack |
| | | { |
| | | /// <summary> |
| | | /// 房间名 |
| | | /// </summary> |
| | | public string name = "Room"; |
| | | /// <summary> |
| | | /// 房间ID |
| | | /// </summary> |
| | | public string sid; |
| | | public List<SpatialInfo> list = new List<SpatialInfo>(); |
| | | |
| | | public string totalCount = "0"; |
| | | |
| | | public string totalPage = "0"; |
| | | |
| | | public string pageNo = "0"; |
| | | |
| | | public string pageSize = "0"; |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 空间信息基础类 |
| | | /// 包含楼层/房间 |
| | | /// </summary> |
| | | public class SpatialInfo |
| | | { |
| | | static SpatialInfo _currentSpatial; |
| | | public static SpatialInfo CurrentSpatial |
| | | { |
| | | get |
| | | { |
| | | if (_currentSpatial == null) |
| | | { |
| | | _currentSpatial = new SpatialInfo(); |
| | | } |
| | | return _currentSpatial; |
| | | } |
| | | } |
| | | public SpatialInfo() |
| | | { |
| | | } |
| | | |
| | | public SpatialInfo(string spatialType) |
| | | { |
| | | roomType = "FLOOR"; |
| | | parentId = DB_ResidenceData.Instance.CurrentRegion.id; |
| | | } |
| | | |
| | | public string homeId = ""; |
| | | public string roomId = ""; |
| | | public string roomName = ""; |
| | | //public string roomImage = ""; |
| | | public string roomImage = "Classification/Room/Roombg.png"; |
| | | public string roomType = ""; |
| | | public string parentId = ""; |
| | | public string uid = Guid.NewGuid().ToString(); |
| | | public string floorRoomName = ""; |
| | | public string createTime = ""; |
| | | public string modifyTime = ""; |
| | | ///// <summary> |
| | | ///// 删除标记 20201208:可欣:APP的在线和离线问题,刚刚确定了,离线无法编辑,只能控制 |
| | | ///// 需要删除数据时,标记为:true |
| | | ///// 由云端删除成功之后,返回数据再清除本地数据 |
| | | ///// </summary> |
| | | //public bool DeleteSign = false; |
| | | |
| | | /// <summary> |
| | | /// 房间背景 |
| | | /// 更新空间信息 |
| | | /// </summary> |
| | | public string backgroundImage = "Classification/Room/Roombg.png"; |
| | | /// <param name="spatials">空间信息</param> |
| | | /// <param name="optionType">操作类型:ADD/UPDATE/DELETE</param> |
| | | public void UpdateSpatialList(List<SpatialInfo> spatials) |
| | | { |
| | | var roomUpdateList = spatials.FindAll((obj) => obj.roomType == "ROOM"); |
| | | var floorUpdateList = spatials.FindAll((obj) => obj.roomType == "FLOOR"); |
| | | CurrentSpatial.DeleteAllRoom(); |
| | | FloorList.Clear(); |
| | | //处理房间列表 |
| | | if (roomUpdateList != null && roomUpdateList.Count > 0) |
| | | { |
| | | foreach (var newRoom in roomUpdateList) |
| | | { |
| | | newRoom.SaveRoomFile(); |
| | | RoomList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Room>( |
| | | Newtonsoft.Json.JsonConvert.SerializeObject(newRoom))); |
| | | } |
| | | } |
| | | //楼层房间列表 |
| | | if (floorUpdateList != null && floorUpdateList.Count > 0) |
| | | { |
| | | foreach (var updateTemp in floorUpdateList) |
| | | { |
| | | FloorList.Add(updateTemp); |
| | | } |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList)); |
| | | Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); |
| | | } |
| | | } |
| | | |
| | | #region 楼层列表 |
| | | /// <summary> |
| | | /// 楼层列表 |
| | | /// </summary> |
| | | List<SpatialInfo> floors; |
| | | /// <summary> |
| | | /// 楼层列表 |
| | | /// </summary> |
| | | public List<SpatialInfo> FloorList |
| | | { |
| | | get |
| | | { |
| | | if (MainPage.NoLoginMode) |
| | | { |
| | | if (floors == null) |
| | | { |
| | | floors = new List<SpatialInfo>(); |
| | | } |
| | | return floors; |
| | | } |
| | | |
| | | if (floors == null) |
| | | { |
| | | try |
| | | { |
| | | var floorsDataBytes = Common.FileUtlis.Files.ReadFile("FloorsData"); |
| | | if (floorsDataBytes != null) |
| | | { |
| | | var floorsDataString = System.Text.Encoding.UTF8.GetString(floorsDataBytes); |
| | | MainPage.Log(floorsDataString); |
| | | floors = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SpatialInfo>>(floorsDataString); |
| | | } |
| | | if(floors == null) |
| | | { |
| | | floors = new List<SpatialInfo>(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | floors = new List<SpatialInfo>(); |
| | | MainPage.Log($"楼层数据初始化失败:{ex.Message}"); |
| | | } |
| | | } |
| | | return floors; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 数据保存路径 |
| | | /// </summary> |
| | | string dataSavePath |
| | | { |
| | | get |
| | | { |
| | | if(roomType == "ROOM") |
| | | { |
| | | return "RoomPath_" + uid; |
| | | } |
| | | if(roomType == "FLOOR") |
| | | { |
| | | return "FloorsData"; |
| | | } |
| | | else |
| | | { |
| | | return "SpatialInfo_"+uid; |
| | | } |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 增加楼层 |
| | | /// </summary> |
| | | /// <param name="floor"></param> |
| | | public string AddFloor(SpatialInfo floor, out SpatialInfo newFloor) |
| | | { |
| | | var pm = new HttpServerRequest(); |
| | | var revPack = new ResponsePackNew(); |
| | | revPack = pm.AddRoom(new List<SpatialInfo>() { floor }); |
| | | if (revPack.Code == StateCode.SUCCESS) |
| | | { |
| | | var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SpatialInfo>>(revPack.Data.ToString()); |
| | | if (revData.Count > 0) |
| | | { |
| | | var addFloor = revData.Find((obj) => obj.uid == floor.uid); |
| | | if (addFloor != null) |
| | | { |
| | | CurrentSpatial.FloorList.Add(addFloor); |
| | | floor = addFloor; |
| | | } |
| | | } |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(CurrentSpatial.FloorList)); |
| | | Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); |
| | | } |
| | | else |
| | | { |
| | | Utlis.ShowTip(Language.StringByID(StringId.AddFloorFail) + "\r\nCode:" + revPack.Code); |
| | | } |
| | | newFloor = floor; |
| | | return revPack.Code; |
| | | } |
| | | /// <summary> |
| | | /// 更新楼层信息 |
| | | /// </summary> |
| | | /// <param name="floor"></param> |
| | | public string UpdateFloor(SpatialInfo floor) |
| | | { |
| | | var pm = new HttpServerRequest(); |
| | | var revPack = pm.UpdateRoom(new List<SpatialInfo>() { floor }); |
| | | if (revPack.Code == StateCode.SUCCESS) |
| | | { |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList)); |
| | | Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); |
| | | } |
| | | return revPack.Code; |
| | | } |
| | | /// <summary> |
| | | /// 删除楼层 |
| | | /// </summary> |
| | | /// <param name="floor"></param> |
| | | public string DelFloor(string floorId) |
| | | { |
| | | if (string.IsNullOrEmpty( floorId)) |
| | | return ""; |
| | | var pm = new HttpServerRequest(); |
| | | var code = pm.DeleteRoom(new List<string>() { floorId }).Code; |
| | | if (code == StateCode.SUCCESS) |
| | | { |
| | | var tRoom = CurrentSpatial.FloorList.Find((obj) => obj.roomId == floorId); |
| | | if (tRoom != null) |
| | | { |
| | | CurrentSpatial.FloorList.Remove(tRoom); |
| | | } |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList)); |
| | | Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); |
| | | } |
| | | else |
| | | { |
| | | Utlis.ShowTip(Language.StringByID(StringId.DeleteFloorFail) + "\r\nCode:" + code); |
| | | } |
| | | return code; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 房间列表 |
| | | /// <summary> |
| | | /// 房间列表 |
| | | /// </summary> |
| | | List<Room> rooms; |
| | | /// <summary> |
| | | /// 房间列表 |
| | | /// </summary> |
| | | public List<Room> RoomList |
| | | { |
| | | get |
| | | { |
| | | if(MainPage.NoLoginMode ) |
| | | { |
| | | if (rooms == null) |
| | | { |
| | | rooms = new List<Room>(); |
| | | } |
| | | return rooms; |
| | | } |
| | | if (rooms == null) |
| | | { |
| | | try |
| | | { |
| | | rooms = new List<Room> { }; |
| | | var filePathList = Common.FileUtlis.Files.ReadFiles(); |
| | | |
| | | foreach (var filePath in filePathList) |
| | | { |
| | | if (filePath.StartsWith("RoomData_")) |
| | | { |
| | | var roomDataBytes = Common.FileUtlis.Files.ReadFile(filePath); |
| | | var roomDataString = System.Text.Encoding.UTF8.GetString(roomDataBytes); |
| | | var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(roomDataString); |
| | | if (room != null) |
| | | { |
| | | rooms.Add(room); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"功能数据初始化失败:{ex.Message}"); |
| | | } |
| | | } |
| | | return rooms; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 增加房间 |
| | | /// </summary> |
| | | /// <param name="room"></param> |
| | | public string AddRoom(Room room,out Room newRoom) |
| | | { |
| | | var pm = new HttpServerRequest(); |
| | | var pack = pm.AddRoom(new List<SpatialInfo>() { room }); |
| | | |
| | | if (pack.Code == StateCode.SUCCESS) |
| | | { |
| | | var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SpatialInfo>>(pack.Data.ToString()); |
| | | if (revData != null) |
| | | { |
| | | if (revData.Count > 0) |
| | | { |
| | | var tempRoom = revData.Find((obj) => obj.uid == room.uid); |
| | | if (tempRoom != null) |
| | | { |
| | | room.roomId = tempRoom.roomId; |
| | | CurrentSpatial.RoomList.Add(room); |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(room)); |
| | | Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | newRoom = room; |
| | | return pack.Code; |
| | | } |
| | | /// <summary> |
| | | /// 删除房间 |
| | | /// </summary> |
| | | /// <param name="room"></param> |
| | | public string DelRoom(Room room) |
| | | { |
| | | var pm = new HttpServerRequest(); |
| | | var pack = pm.DeleteRoom(new List<string>() { room.roomId }); |
| | | if (pack.Code == StateCode.SUCCESS) |
| | | { |
| | | var tRoom = RoomList.Find((obj) => obj.roomId == room.roomId); |
| | | if (tRoom != null) |
| | | { |
| | | CurrentSpatial.RoomList.Remove(room); |
| | | } |
| | | Common.FileUtlis.Files.DeleteFile(room.dataSavePath); |
| | | } |
| | | return pack.Code; |
| | | } |
| | | /// <summary> |
| | | /// 删除所有房间 |
| | | /// </summary> |
| | | public void DeleteAllRoom() |
| | | { |
| | | for(int i=0;i< RoomList.Count;) |
| | | { |
| | | Common.FileUtlis.Files.DeleteFile(RoomList[i].dataSavePath); |
| | | RoomList.RemoveAt(i); |
| | | } |
| | | rooms = null; |
| | | } |
| | | |
| | | public void Clear() |
| | | { |
| | | if (_currentSpatial != null) |
| | | { |
| | | if (_currentSpatial.floors != null) |
| | | { |
| | | _currentSpatial.floors.Clear(); |
| | | } |
| | | if (_currentSpatial.rooms != null) |
| | | { |
| | | _currentSpatial.rooms.Clear(); |
| | | } |
| | | _currentSpatial = null; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化每个房间的功能数据 |
| | | /// </summary> |
| | | public void InitRoomListFunctions() |
| | | { |
| | | new System.Threading.Thread(() => |
| | | { |
| | | try |
| | | { |
| | | //初始化住宅所有房间功能数据 |
| | | foreach (var r in RoomList) |
| | | { |
| | | InitRoomFuntion(r); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"Init room function error : {ex.Message}"); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | /// <summary> |
| | | /// 初始化房间功能 |
| | | /// </summary> |
| | | /// <param name="tempRoom"></param> |
| | | public void InitRoomFuntion(Room tempRoom) |
| | | { |
| | | tempRoom.GetRoomFunctions(true); |
| | | tempRoom.GetRoomScenes(true); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 保存房间数据文件 |
| | | /// </summary> |
| | | public void SaveRoomFile() |
| | | { |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); |
| | | Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); |
| | | } |
| | | /// <summary> |
| | | /// 更新房间数据 |
| | | /// </summary> |
| | | public void UpdataRoomInfo() |
| | | { |
| | | new System.Threading.Thread(() => |
| | | { |
| | | var pm = new HttpServerRequest(); |
| | | var pack = pm.UpdateRoom(new List<SpatialInfo>() { this }); |
| | | this.SaveRoomFile(); |
| | | if (pack.Code != StateCode.SUCCESS) |
| | | { |
| | | IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | [Serializable] |
| | | public class Room : SpatialInfo |
| | | { |
| | | public Room() |
| | | { |
| | | roomType = "ROOM"; |
| | | roomName = "Room"; |
| | | } |
| | | //public string backgroundImage = "Classification/Room/Roombg.png"; |
| | | public string backgroundImage |
| | | { |
| | | get |
| | | { |
| | | if (string.IsNullOrEmpty(roomImage)) |
| | | { |
| | | return "Classification/Room/Roombg.png"; |
| | | } |
| | | else |
| | | { |
| | | return roomImage; |
| | | } |
| | | } |
| | | set |
| | | { |
| | | roomImage = value; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 楼层 |
| | | /// </summary> |
| | | public string floor { |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string floorName |
| | | { |
| | | get |
| | | { |
| | | string str = ""; |
| | | if (floorIndex != -1) |
| | | if (CurrentSpatial.FloorList.Count > 0) |
| | | { |
| | | if (floorIndex < DB_ResidenceData.residenceData.floors.Count) |
| | | str = DB_ResidenceData.residenceData.floors[floorIndex]; |
| | | var f = CurrentSpatial.FloorList.Find((obj) => obj.uid == parentId); |
| | | if (f != null) |
| | | { |
| | | return f.roomName + " "; |
| | | } |
| | | } |
| | | return str; |
| | | return ""; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 楼层索引 |
| | | /// </summary> |
| | | public int floorIndex = -1; |
| | | |
| | | ///// <summary> |
| | | ///// 房间功能列表 |
| | | ///// </summary> |
| | | //List<Function> functions = new List<Function>(); |
| | | /// <summary> |
| | | /// 房间功能列表 |
| | | /// 获取房间功能列表 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public List<Function> functionData = new List<Function>(); |
| | | |
| | | public void RefreshFunctions() |
| | | public List<Function> GetRoomFunctions(bool needRefresh) |
| | | { |
| | | List<Function> funcList = new List<Function>(); |
| | | foreach (var f in DB_ResidenceData.residenceData.functionList.functions) |
| | | if (needRefresh) |
| | | { |
| | | if (f.roomIdList.Contains(sid)) |
| | | } |
| | | var functions = new List<Function>(); |
| | | if (functions.Count == 0) |
| | | { |
| | | foreach (var f in FunctionList.List.GetDeviceFunctionList()) |
| | | { |
| | | funcList.Add(f); |
| | | if (f.roomIds.Contains(roomId) && roomId != null) |
| | | { |
| | | functions.Add(f); |
| | | } |
| | | } |
| | | } |
| | | functionData = funcList; |
| | | return functions; |
| | | } |
| | | ///// <summary> |
| | | ///// 增加房间功能 |
| | | ///// 操作的是缓存数据,不用保存 |
| | | ///// </summary> |
| | | //public void AddRoomFunction(Function function) |
| | | //{ |
| | | // functions.Add(function); |
| | | //} |
| | | ///// <summary> |
| | | ///// 删除房间功能 |
| | | ///// 操作的是缓存数据,不用保存 |
| | | ///// </summary> |
| | | //public void RemoveRoomFunction(Function function) |
| | | //{ |
| | | // functions.Remove(functions.Find((obj) => obj.sid == function.sid)); |
| | | //} |
| | | /// <summary> |
| | | /// 房间场景列表 |
| | | /// </summary> |
| | | List<Scene> scenes = new List<Scene>(); |
| | | /// <summary> |
| | | /// 获取场景列表 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public List<Scene> GetRoomScenes(bool needRefresh) |
| | | { |
| | | if (needRefresh) |
| | | { |
| | | scenes = new List<Scene>(); |
| | | } |
| | | if (scenes.Count == 0) |
| | | { |
| | | foreach (var s in FunctionList.List.scenes) |
| | | { |
| | | if (s.roomIds.Contains(roomId) && roomId != null) |
| | | { |
| | | scenes.Add(s); |
| | | } |
| | | } |
| | | } |
| | | return scenes; |
| | | } |
| | | /// <summary> |
| | | /// 增加房间场景 |
| | | /// 操作的是缓存数据,不用保存 |
| | | /// </summary> |
| | | /// <param name="scene"></param> |
| | | public void AddRoomScene(Scene scene) |
| | | { |
| | | scenes.Add(scene); |
| | | } |
| | | /// <summary> |
| | | /// 移除房间场景 |
| | | /// 操作的是缓存数据,不用保存 |
| | | /// </summary> |
| | | /// <param name="scene"></param> |
| | | public void RemoveRoomScene(Scene scene) |
| | | { |
| | | scenes.Remove(scenes.Find((obj) => obj.sid == scene.sid)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |