From f35f1397c980efdc2542dff7aaa23b1a7dbb65e7 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期三, 16 十二月 2020 10:53:34 +0800 Subject: [PATCH] 2020-12-16-1 --- HDL_ON/Entity/Room.cs | 589 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 543 insertions(+), 46 deletions(-) diff --git a/HDL_ON/Entity/Room.cs b/HDL_ON/Entity/Room.cs index 6bfcc90..dfcbf83 100644 --- a/HDL_ON/Entity/Room.cs +++ b/HDL_ON/Entity/Room.cs @@ -1,57 +1,518 @@ 锘縰sing System; using System.Collections.Generic; +using HDL_ON.DAL.Server; +using Shared; namespace HDL_ON.Entity { - - /// <summary> - /// 鎴块棿瀵硅薄 + /// 璇诲彇鏈嶅姟鍣ㄧ┖闂翠俊鎭繑鍥炲埌鏁版嵁鍖� /// </summary> - [Serializable] - public class Floor + public class SpatialApiPack { - /// <summary> - /// 妤煎眰鍚嶇О - /// </summary> - public string name = "1F"; - /// <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> - [Serializable] - public class Room + public class SpatialInfo { - /// <summary> - /// 鎴块棿鍚� - /// </summary> - public string name = "Room"; - - public string roomSavePath + static SpatialInfo _currentSpatial; + public static SpatialInfo CurrentSpatial { get { - return "RoomPath_" + sid; + if (_currentSpatial == null) + { + _currentSpatial = new SpatialInfo(); + } + return _currentSpatial; + } + } + public SpatialInfo() + { + } + + public SpatialInfo(string spatialType) + { + roomType = "FLOOR"; + parentId = DB_ResidenceData.Instance.CurrentRegion.RegionID; + } + + 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 createTime = ""; + public string modifyTime = ""; + ///// <summary> + ///// 鍒犻櫎鏍囪 20201208锛氬彲娆�:APP鐨勫湪绾垮拰绂荤嚎闂锛屽垰鍒氱‘瀹氫簡锛岀绾挎棤娉曠紪杈戯紝鍙兘鎺у埗 + ///// 闇�瑕佸垹闄ゆ暟鎹椂锛屾爣璁颁负锛歵rue + ///// 鐢变簯绔垹闄ゆ垚鍔熶箣鍚庯紝杩斿洖鏁版嵁鍐嶆竻闄ゆ湰鍦版暟鎹� + ///// </summary> + //public bool DeleteSign = false; + + + protected ResponsePackNew SaveSpatialInfo() + { + var pm = new HttpServerRequest(); + var revPack = new ResponsePackNew(); + if (string.IsNullOrEmpty(createTime) && string.IsNullOrEmpty(modifyTime)) + { + revPack = pm.AddRoom(new List<SpatialInfo>() { this }); + } + else if (string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime)) + { + revPack = pm.DeleteRoom(new List<string>() { roomId }); + } + else if (!string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime)) + { + revPack = pm.UpdateRoom(new List<SpatialInfo>() { this }); + } + return revPack; + } + + /// <summary> + /// 涓嬭浇浜戠鎴块棿鏁版嵁 + /// </summary> + public void DownloadRoomList() + { + new System.Threading.Thread(() => + { + var pm = new HttpServerRequest(); + var pack = pm.GetRoomList(); + if (pack.Code == StateCode.SUCCESS) + { + var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<SpatialApiPack>(pack.Data.ToString()); + if (revData != null) + { + CurrentSpatial.UpdateSpatialList(revData.list, OptionType.Cover); + } + } + else + { + MainPage.Log($"璇诲彇鎴块棿鏁版嵁澶辫触:\r\nCode:{pack.Code}; msg:{pack.message}"); + } + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// 鏇存柊绌洪棿淇℃伅 + /// </summary> + /// <param name="spatials">绌洪棿淇℃伅</param> + /// <param name="optionType">鎿嶄綔绫诲瀷锛欰DD/UPDATE/DELETE</param> + public void UpdateSpatialList(List<SpatialInfo> spatials,OptionType optionType) + { + var roomUpdateList = spatials.FindAll((obj) => obj.roomType == "ROOM"); + var floorUpdateList = spatials.FindAll((obj) => obj.roomType == "FLOOR"); + //澶勭悊鎴块棿鍒楄〃 + if (roomUpdateList != null && roomUpdateList.Count > 0) + { + if (optionType == OptionType.Update) + { + foreach (var updateTemp in roomUpdateList) + { + var localRoom = CurrentSpatial.RoomList.Find((obj) => obj.roomId == updateTemp.roomId); + if (localRoom != null) + { + if (localRoom.modifyTime != updateTemp.modifyTime) + { + localRoom.roomName = updateTemp.roomName; + localRoom.roomImage = updateTemp.roomImage; + localRoom.parentId = updateTemp.parentId; + localRoom.createTime = updateTemp.createTime; + localRoom.modifyTime = updateTemp.modifyTime; + localRoom.SaveRoomData(false); + } + }else + { + updateTemp.SaveRoomData(false); + } + } + } + else if (optionType == OptionType.Cover) + { + CurrentSpatial.DeleteAllRoom(); + foreach(var newRoom in roomUpdateList) + { + newRoom.SaveRoomData(false); + RoomList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Room>( + Newtonsoft.Json.JsonConvert.SerializeObject(newRoom))); + } + } + } + //妤煎眰鎴块棿鍒楄〃 + if (floorUpdateList != null && floorUpdateList.Count > 0) + { + if (optionType == OptionType.Update) + { + foreach(var updateTemp in floorUpdateList) + { + var localFloor = FloorList.Find((obj) => obj.roomId == updateTemp.roomId); + if (localFloor == null) + { + FloorList.Add(updateTemp); + } + else + { + localFloor = updateTemp; + } + } + } + if(optionType == OptionType.Cover) + { + FloorList.Clear(); + 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 (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) + { + MainPage.Log($"妤煎眰鏁版嵁鍒濆鍖栧け璐ワ細{ex.Message}"); + } + } + return floors; } } /// <summary> - /// 鎴块棿ID + /// 鏁版嵁淇濆瓨璺緞 /// </summary> - public string sid; + string dataSavePath + { + get + { + if(roomType == "ROOM") + { + return "RoomPath_" + uid; + } + if(roomType == "FLOOR") + { + return "FloorsData"; + } + else + { + return "SpatialInfo_"+uid; + } + } + } /// <summary> - /// 鎴块棿鑳屾櫙 + /// 澧炲姞妤煎眰 /// </summary> - public string backgroundImage = "Classification/Room/Roombg.png"; + /// <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> - public string floorId = ""; + /// <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 (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() + { + foreach(var localRoom in RoomList) + { + Common.FileUtlis.Files.DeleteFile(localRoom.dataSavePath); + } + 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 InitRoomFunction() + { + new System.Threading.Thread(() => + { + try + { + //鍒濆鍖栦綇瀹呮墍鏈夋埧闂村姛鑳芥暟鎹� + foreach (var r in RoomList) + { + r.GetRoomFunctions(true); + r.GetRoomScenes(true); + } + } + catch (Exception ex) + { + MainPage.Log($"Init room function error : {ex.Message}"); + } + }) + { IsBackground = true }.Start(); + } + + /// <summary> + /// 淇濆瓨鎴块棿鏁版嵁 + /// </summary> + public string SaveRoomData(bool upServer = true) + { + var packCode = StateCode.SUCCESS; + bool needSave = true; + if (upServer) + { + packCode = SaveSpatialInfo().Code; + } + if (needSave) + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); + Common.FileUtlis.Files.WriteFileByBytes(dataSavePath, ssd); + } + return packCode; + } + #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> @@ -60,35 +521,36 @@ { get { - if (DB_ResidenceData.residenceData.floors.Count > 0) + if (CurrentSpatial.FloorList.Count > 0) { - var f = DB_ResidenceData.residenceData.floors.Find((obj) => obj.sid == floorId); + var f = CurrentSpatial.FloorList.Find((obj) => obj.roomId == parentId); if (f != null) { - return f.name + " "; + return f.roomName + " "; } } return ""; } } + /// <summary> /// 鎴块棿鍔熻兘鍒楄〃 /// </summary> List<Function> functions = new List<Function>(); /// <summary> - /// 鍒锋柊鎴块棿鍔熻兘鍒楄〃 + /// 鑾峰彇鎴块棿鍔熻兘鍒楄〃 /// </summary> public List<Function> GetRoomFunctions(bool needRefresh) { - if(needRefresh) + if (needRefresh) { functions = new List<Function>(); } if (functions.Count == 0) { - foreach (var f in DB_ResidenceData.functionList.GetAllFunction()) + foreach (var f in FunctionList.List.GetDeviceFunctionList()) { - if (f.roomIdList.Contains(sid) && sid != null) + if (f.roomIds.Contains(roomId) && roomId != null) { functions.Add(f); } @@ -98,6 +560,7 @@ } /// <summary> /// 澧炲姞鎴块棿鍔熻兘 + /// 鎿嶄綔鐨勬槸缂撳瓨鏁版嵁锛屼笉鐢ㄤ繚瀛� /// </summary> public void AddRoomFunction(Function function) { @@ -105,22 +568,56 @@ } /// <summary> /// 鍒犻櫎鎴块棿鍔熻兘 + /// 鎿嶄綔鐨勬槸缂撳瓨鏁版嵁锛屼笉鐢ㄤ繚瀛� /// </summary> public void RemoveRoomFunction(Function function) { functions.Remove(functions.Find((obj) => obj.sid == function.sid)); } - /// <summary> - /// 淇濆瓨鎴块棿鏁版嵁 + /// 鎴块棿鍦烘櫙鍒楄〃 /// </summary> - public void SaveRoomData() + List<Scene> scenes = new List<Scene>(); + /// <summary> + /// 鑾峰彇鍦烘櫙鍒楄〃 + /// </summary> + /// <returns></returns> + public List<Scene> GetRoomScenes(bool needRefresh) { - var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); - FileUtils.WriteFileByBytes("RoomData_" + this.sid, ssd); - MainPage.Log($"Save FunctionData {name} : {this.sid}"); + 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)); + } } + } \ No newline at end of file -- Gitblit v1.8.0