diff --git a/Common/LayerData.cs b/Common/LayerData.cs index 781f081..8b49fe9 100644 --- a/Common/LayerData.cs +++ b/Common/LayerData.cs @@ -138,7 +138,7 @@ namespace OMS.NET.Common } } - public void AddGroupLayer(long layerId) + public void OrderAddGroupLayer(long layerId) { if (Type == "order") { @@ -146,6 +146,32 @@ namespace OMS.NET.Common UpdateToDb(); } } + + public void OrderDeleteGroupLayer(long layerId) + { + if (Type == "order") + { + int index = Members!.AsArray().FindElementIndex(layerId); + Members!.AsArray().RemoveAt(index); + UpdateToDb(); + } + } + + public void Reset() + { + if (Type == "group") + { + Members = new JsonObject(); + Members.AsObject()["0"] = 0; + int Count = Structure!.AsArray().Count; + for (int i = Count - 1; i <= 1; i--) + { + Structure!.AsArray().RemoveAt(i); + } + UpdateToDb(); + } + } + public MapLayer ConvertToMapLayer() { return new MapLayer() diff --git a/GlobalArea.cs b/GlobalArea.cs index d1ffccc..d708fee 100644 --- a/GlobalArea.cs +++ b/GlobalArea.cs @@ -290,7 +290,7 @@ namespace OMS.NET } } - private static readonly List _LayerDataList = new(); + private static List _LayerDataList = new(); private static readonly object _LayerDataListLock = new(); private static readonly List _ActiveDataList = new(); @@ -351,7 +351,7 @@ namespace OMS.NET List mapLayer = MapLayer.GetMapLayerList(); lock (_LayerDataListLock) { - foreach (MapLayer layer in mapLayer) + foreach (MapLayer layer in mapLayer.Where(x => x.Phase == 1)) { LayerData layerData = new(null, layer); if (layerData.Type != "order") @@ -381,6 +381,22 @@ namespace OMS.NET } } + public static LayerData? GetLayerDataByLayerId(long layerId) + { + lock (_LayerDataListLock) + { + try + { + return _LayerDataList.Where(x => x.LayerId == layerId).First(); + } + catch + { + Log.Warn("通过图层id未获取到图层数据"); + return null; + } + } + } + public static LayerData GetOrderLayerData() { lock (_LayerDataListLock) @@ -389,6 +405,17 @@ namespace OMS.NET } } + /// + /// 移除已经标记删除的图层模板映射 + /// + public static void RemoveDeletedLayerData() + { + lock (_LayerDataListLock) + { + _LayerDataList = _LayerDataList.Where(x => x.Phase == 1).ToList(); + } + } + public static dynamic AdjustElementOrder(long elementAId, long elementBId, string templateA, string templateB, string method) { lock (_LayerDataListLock) @@ -487,7 +514,7 @@ namespace OMS.NET if (mapLayer.Id != -1) { LayerData order = GetOrderLayerData(); - order.AddGroupLayer(mapLayer.Id); + order.OrderAddGroupLayer(mapLayer.Id); layer.HasChange = true; layer.LayerId = mapLayer.Id; _LayerDataList.Add(layer); diff --git a/Instructs/DeleteLayerAndMembersInstuct.cs b/Instructs/DeleteLayerAndMembersInstuct.cs index 7ef5946..ea79096 100644 --- a/Instructs/DeleteLayerAndMembersInstuct.cs +++ b/Instructs/DeleteLayerAndMembersInstuct.cs @@ -1,4 +1,7 @@ using System.Text.Json; +using System.Text.Json.Nodes; +using OMS.NET.Common; +using OMS.NET.DbClass; namespace OMS.NET.Instructs { @@ -18,8 +21,42 @@ namespace OMS.NET.Instructs if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查 try { - //string conveyor = GlobalArea.GetLoginEmailByID(wsid); + long id = Data.GetProperty("id").GetInt64(); + LayerData layer = GlobalArea.GetLayerDataByLayerId(id)!; + if (layer.Type == "order") throw new Exception("Order Layer不能删"); + layer.Phase = 2; + layer.Reset();//本身移除member和structure内的elementId引用,然后更新到数据库 + layer.HasChange = true; + LayerData order = GlobalArea.GetOrderLayerData(); + order.OrderDeleteGroupLayer(id); + GlobalArea.RemoveDeletedLayerData();//更新图层模板映射 + string conveyor = GlobalArea.GetLoginEmailByID(wsid); string time = GlobalArea.GetCurrentTime(); + ResponseOrBroadcastInstructs.Add(new Instruct() + { + IsBroadcast = true, + Type = "broadcast", + Class = "updateLayerOrder", + Conveyor = conveyor, + Time = time, + Data = new + { + member = order.Members + } + }); + ResponseOrBroadcastInstructs.Add(new Instruct() + { + IsBroadcast = true, + Type = "broadcast", + Class = "deleteLayerAndMembers", + Conveyor = conveyor, + Time = time, + Data = new + { + id = id, + member = layer.Members + } + }); } catch (Exception ex) {