wei
2020-12-08 62d77d3bb8e7215d9da9ecf6f5aeda0b69f805f8
HDL_ON/Entity/Room.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using HDL_ON.DAL.Server;
using Shared;
namespace HDL_ON.Entity
{
@@ -57,29 +58,31 @@
        public string uid = Guid.NewGuid().ToString();
        public string createTime = "";
        public string modifyTime = "";
        /// <summary>
        /// 删除标记
        /// 需要删除数据时,标记为:true
        /// 由云端删除成功之后,返回数据再清除本地数据
        /// </summary>
        public bool DeleteSign = false;
        ///// <summary>
        ///// 删除标记 20201208:可欣:APP的在线和离线问题,刚刚确定了,离线无法编辑,只能控制
        ///// 需要删除数据时,标记为:true
        ///// 由云端删除成功之后,返回数据再清除本地数据
        ///// </summary>
        //public bool DeleteSign = false;
        protected void SaveSpatialInfo()
        protected ResponsePackNew SaveSpatialInfo()
        {
            var pm = new HttpServerRequest();
            var revPack = new ResponsePackNew();
            if (string.IsNullOrEmpty(createTime) && string.IsNullOrEmpty(modifyTime))
            {
                pm.AddRoom(new List<SpatialInfo>() { this });
                revPack = pm.AddRoom(new List<SpatialInfo>() { this });
            }
            else if (string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime))
            {
                pm.DeleteRoom(new List<string>() { roomId });
                revPack = pm.DeleteRoom(new List<string>() { roomId });
            }
            else if (!string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime))
            {
                pm.UpdateRoom(new List<SpatialInfo>() { this });
                revPack = pm.UpdateRoom(new List<SpatialInfo>() { this });
            }
            return revPack;
        }
        /// <summary>
@@ -123,13 +126,6 @@
                {
                    foreach (var updateTemp in roomUpdateList)
                    {
                        var localDelRoom = CurrentSpatial.needDeleteRooms.Find((obj) => obj.roomId == updateTemp.roomId);
                        if(localDelRoom!= null)
                        {
                                    DelRoom(localDelRoom);
                            continue;
                        }
                        var localRoom = CurrentSpatial.RoomList.Find((obj) => obj.roomId == updateTemp.roomId);
                        if (localRoom != null)
                        {
@@ -140,11 +136,11 @@
                                localRoom.parentId = updateTemp.parentId;
                                localRoom.createTime = updateTemp.createTime;
                                localRoom.modifyTime = updateTemp.modifyTime;
                                localRoom.SaveRoomData();
                                localRoom.SaveRoomData(false);
                            }
                        }else
                        {
                            updateTemp.SaveRoomData();
                            updateTemp.SaveRoomData(false);
                        }
                    }
                }
@@ -153,7 +149,7 @@
                    CurrentSpatial.DeleteAllRoom();
                    foreach(var newRoom in roomUpdateList)
                    {
                        newRoom.SaveRoomData();
                        newRoom.SaveRoomData(false);
                        RoomList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(
                            Newtonsoft.Json.JsonConvert.SerializeObject(newRoom)));
                    }
@@ -176,7 +172,6 @@
                            localFloor = updateTemp;
                        }
                    }
                    CurrentSpatial.SaveFloorData();
                }
                if(optionType == OptionType.Cover)
                {
@@ -185,9 +180,9 @@
                    {
                        FloorList.Add(updateTemp);
                    }
                    var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList));
                    FileUtils.WriteFileByBytes(dataSavePath, ssd);
                }
                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList));
                FileUtils.WriteFileByBytes(dataSavePath, ssd);
            }
        }
@@ -254,8 +249,10 @@
        /// <param name="floor"></param>
        public void AddFloor(SpatialInfo floor)
        {
            FloorList.Add(floor);
            SaveFloorData();
            if (floor.SaveFloorData() == StateCode.SUCCESS)
            {
                FloorList.Add(floor);
            }
        }
        /// <summary>
        /// 更新楼层信息
@@ -271,24 +268,44 @@
        /// <param name="floor"></param>
        public void DelFloor(SpatialInfo floor)
        {
            var tRoom = FloorList.Find((obj) => obj.uid == floor.uid);
            if (tRoom != null)
            if (floor == null)
                return;
            var pm = new HttpServerRequest();
            var code = pm.DeleteRoom(new List<string>() { floor.roomId }).Code;
            if (code == StateCode.SUCCESS)
            {
                FloorList.Remove(floor);
                floor.DeleteSign = true;
                var tRoom = FloorList.Find((obj) => obj.uid == floor.uid);
                if (tRoom != null)
                {
                    FloorList.Remove(floor);
                }
                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList));
                FileUtils.WriteFileByBytes(dataSavePath, ssd);
                MainPage.Log($"Save floor Data");
            }
            SaveFloorData();
            else
            {
                Utlis.ShowTip(Language.StringByID(StringId.DeleteFloorFail) + "Code:" + code);
            }
        }
        /// <summary>
        /// 保存楼层数据
        /// </summary>
        void SaveFloorData()
        string SaveFloorData()
        {
            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList));
            FileUtils.WriteFileByBytes(dataSavePath, ssd);
            MainPage.Log($"Save floor Data");
            SaveSpatialInfo();
            var pack = SaveSpatialInfo();
            if (pack.Code == StateCode.SUCCESS)
            {
                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(FloorList));
                FileUtils.WriteFileByBytes(dataSavePath, ssd);
                MainPage.Log($"Save floor Data");
            }
            else
            {
                Utlis.ShowTip(Language.StringByID(StringId.EditRoomInfoFail) + "Code:" + pack.Code);
            }
            return pack.Code;
        }
@@ -320,40 +337,11 @@
                                var roomDataBytes = FileUtils.ReadFile(filePath);
                                var roomDataString = System.Text.Encoding.UTF8.GetString(roomDataBytes);
                                var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(roomDataString);
                                if (room != null )
                                if (room != null)
                                {
                                    if(room.DeleteSign)
                                    {
                                        needDeleteRooms.Add(room);
                                    }else
                                    {
                                        rooms.Add(room);
                                    }
                                    rooms.Add(room);
                                }
                            }
                        }
                        if(needDeleteRooms.Count>0)
                        {
                            //删除已经标记需要删除的房间
                            new System.Threading.Thread(() =>
                            {
                                var delIds = new List<string>();
                                foreach(var delTemp in needDeleteRooms)
                                {
                                    delIds.Add(delTemp.roomId);
                                }
                                var pm = new HttpServerRequest();
                                var pack = pm.DeleteRoom(delIds);
                                if (pack.Code == StateCode.SUCCESS)
                                {
                                    foreach (var delTemp in needDeleteRooms)
                                    {
                                        FileUtils.DeleteFile(delTemp.dataSavePath);
                                    }
                                    needDeleteRooms.Clear();
                                }
                            })
                            { IsBackground = true }.Start();
                        }
                    }
                    catch (Exception ex)
@@ -365,19 +353,15 @@
            }
        }
        /// <summary>
        /// 需要删除的房间
        /// 本地标记删除了,但是服务上没有删除
        /// 无法与服务器通讯造成删除不成功,通讯成功之后要重新删除
        /// </summary>
        List<Room> needDeleteRooms = new List<Room>();
        /// <summary>
        /// 增加房间
        /// </summary>
        /// <param name="room"></param>
        public void AddRoom(Room room)
        {
            RoomList.Add(room);
            room.SaveRoomData();
            if (room.SaveRoomData() == StateCode.SUCCESS)
            {
                RoomList.Add(room);
            }
        }
        /// <summary>
        /// 删除房间
@@ -387,24 +371,16 @@
        {
            new System.Threading.Thread(() =>
            {
                room.DeleteSign = true;
                room.SaveRoomData();
                var tRoom = RoomList.Find((obj) => obj.uid == room.uid);
                if (tRoom != null)
                {
                    RoomList.Remove(room);
                }
                var temp = needDeleteRooms.Find((obj) => obj.uid == room.uid);
                if (temp != null)
                {
                    needDeleteRooms.Add(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.uid == room.uid);
                    if (tRoom != null)
                    {
                        RoomList.Remove(room);
                    }
                    FileUtils.DeleteFile(room.dataSavePath);
                    needDeleteRooms.Remove(room);
                }
            })
            { IsBackground = true }.Start();
@@ -447,12 +423,21 @@
        /// <summary>
        /// 保存房间数据
        /// </summary>
        public void SaveRoomData()
        public string SaveRoomData(bool upServer = true)
        {
            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
            FileUtils.WriteFileByBytes(dataSavePath, ssd);
            MainPage.Log($"Save Room Data {roomName} : {uid}");
            SaveSpatialInfo();
            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));
                FileUtils.WriteFileByBytes(dataSavePath, ssd);
                MainPage.Log($"Save Room Data {roomName} : {uid}");
            }
            return packCode;
        }
        #endregion