wei
2020-12-02 30b5770f56f99c1f92e933ad31cf7d2af58b033c
HDL_ON/Entity/Room.cs
@@ -4,52 +4,192 @@
namespace HDL_ON.Entity
{
    /// <summary>
    /// 房间对象
    /// 读取服务器空间信息返回到数据包
    /// </summary>
    [Serializable]
    public class Floor
    public class RoomApiPack
    {
        /// <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>
    public class SpatialInfo
    {
        public string roomId = "";
        public string roomName = "";
        public string roomImage = "";
        public string roomType = "";
        public string parentId = "";
        public string uid = Guid.NewGuid().ToString();
        public string createTime = "";
        public string modifyTime = "";
        protected void SaveSpatialInfo()
        {
            var pm = new DAL.Server.HttpServerRequest();
            if (string.IsNullOrEmpty(createTime) && string.IsNullOrEmpty(modifyTime))
            {
                pm.AddRoom(new List<SpatialInfo>() { this });
            }
            else if (string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime))
            {
                pm.DeleteRoom(new List<string>() { roomId });
            }
            else if (!string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime))
            {
                pm.UpdateRoom(new List<SpatialInfo>() { this });
            }
        }
        /// <summary>
        /// 更新楼层信息
        /// </summary>
        public void UpdateSpatialInfoData()
        {
            if (roomType == "ROOM")
            {
            }
            else if (roomType == "FLOOR")
            {
                var tempFloor = Floor.InsFloor.Floors.Find((obj) => obj.roomId == roomId);
                if (tempFloor == null)
                {
                    Floor.InsFloor.Floors.Add(this as Floor);
                }
                else
                {
                    tempFloor = this as Floor;
                }
                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(Floor.InsFloor.Floors));
                FileUtils.WriteFileByBytes(Floor.InsFloor.FloorDataSavePath, ssd);
                MainPage.Log("更新楼层信息");
            }
        }
    }
    /// <summary>
    /// 房间对象
    /// </summary>
    [Serializable]
    public class Room
    public class Floor : SpatialInfo
    {
        #region 楼层数据相关
        static Floor ins_Floor ;
        public static Floor InsFloor {
            get {
                if(ins_Floor== null)
                {
                    ins_Floor = new Floor();
                }
                return ins_Floor;
            }
        }
        public string FloorDataSavePath = "FloorsData";
        /// <summary>
        /// 房间名
        /// 楼层列表
        /// </summary>
        public string name = "Room";
        List<Floor> floors;
        public List<Floor> Floors
        {
            get
            {
                if (floors == null)
                {
                    try
                    {
                        var floorsDataBytes = FileUtils.ReadFile(FloorDataSavePath);
                        if (floorsDataBytes != null)
                        {
                            var floorsDataString = System.Text.Encoding.UTF8.GetString(floorsDataBytes);
                            MainPage.Log(floorsDataString);
                            floors = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Floor>>(floorsDataString);
                            if (floors == null)
                            {
                                floors = new List<Floor>();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MainPage.Log($"楼层数据初始化失败:{ex.Message}");
                    }
                }
                return floors;
            }
        }
        /// <summary>
        /// 增加楼层
        /// </summary>
        /// <param name="floor"></param>
        public void AddFloor(Floor floor)
        {
            ins_Floor.floors.Add(floor);
            floor.SaveFloorData();
        }
        /// <summary>
        /// 删除楼层
        /// </summary>
        /// <param name="floor"></param>
        public void DelFloor(Floor floor)
        {
            var tRoom = ins_Floor.floors.Find((obj) => obj.uid == floor.uid);
            if (tRoom != null)
            {
                ins_Floor.floors.Remove(floor);
                floor.modifyTime = "";
            }
            SaveFloorData();
        }
        #endregion
        public Floor()
        {
            roomType = "FLOOR";
            parentId = DB_ResidenceData.residenceData.CurReginID;
        }
        /// <summary>
        /// 保存楼层数据
        /// </summary>
        public void SaveFloorData()
        {
            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(ins_Floor.floors));
            FileUtils.WriteFileByBytes(FloorDataSavePath, ssd);
            MainPage.Log($"Save floor Data");
            base.SaveSpatialInfo();
        }
    }
    [Serializable]
    public class Room : SpatialInfo
    {
        public Room()
        {
            roomType = "ROOM";
            roomName = "Room";
        }
        public string backgroundImage = "Classification/Room/Roombg.png";
        public string roomSavePath
        {
            get
            {
                return "RoomPath_" + sid;
                return "RoomPath_" + uid;
            }
        }
        /// <summary>
        /// 房间ID
        /// </summary>
        public string sid;
        /// <summary>
        /// 房间背景
        /// </summary>
        public string backgroundImage = "Classification/Room/Roombg.png";
        /// <summary>
        /// 楼层索引
        /// </summary>
        public string floorId = "";
        /// <summary>
        /// 楼层
        /// </summary>
@@ -58,17 +198,18 @@
        {
            get
            {
                if (DB_ResidenceData.residenceData.floors.Count > 0)
                if (Floor.InsFloor.Floors.Count > 0)
                {
                    var f = DB_ResidenceData.residenceData.floors.Find((obj) => obj.sid == floorId);
                    var f = Floor.InsFloor.Floors.Find((obj) => obj.uid == parentId);
                    if (f != null)
                    {
                        return f.name + " ";
                        return f.roomName + " ";
                    }
                }
                return "";
            }
        }
        /// <summary>
        /// 房间功能列表
        /// </summary>
@@ -78,7 +219,7 @@
        /// </summary>
        public List<Function> GetRoomFunctions(bool needRefresh)
        {
            if(needRefresh)
            if (needRefresh)
            {
                functions = new List<Function>();
            }
@@ -86,7 +227,7 @@
            {
                foreach (var f in DB_ResidenceData.functionList.GetAllFunction())
                {
                    if (f.roomIds.Contains(sid) && sid != null)
                    if (f.roomIds.Contains(uid) && uid != null)
                    {
                        functions.Add(f);
                    }
@@ -128,7 +269,7 @@
            {
                foreach (var s in DB_ResidenceData.functionList.scenes)
                {
                    if (s.roomIds.Contains(sid) && sid != null)
                    if (s.roomIds.Contains(uid) && uid != null)
                    {
                        scenes.Add(s);
                    }
@@ -160,35 +301,10 @@
        public void SaveRoomData()
        {
            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}");
            FileUtils.WriteFileByBytes(roomSavePath, ssd);
            MainPage.Log($"Save Room Data {roomName} : {this.uid}");
            base.SaveSpatialInfo();
        }
    }
    /// <summary>
    /// 服务返回的房间对象
    /// </summary>
    public class ServerReplyRoom
    {
        //云端房间ID
        public string roomId = "";
        /// <summary>
        /// 房间名称
        /// </summary>
        public string roomName = "";
        /// <summary>
        /// 房间图片
        /// </summary>
        public string roomImage = "";
        /// <summary>
        /// 房间全名
        /// </summary>
        public string roomFullName = "";
        /// <summary>
        /// 调试软件\app生成的唯一ID
        /// </summary>
        public string uid = "";
    }
}