实现删除元素指令

dev
nxiaoxiao 1 year ago
parent f4006f8c7d
commit 9e085dbbdc

@ -30,17 +30,17 @@ namespace OMS.NET.Common
Phase = layer.Phase; Phase = layer.Phase;
} }
public void AppendElement(long itemId, string ItemType) public void AppendElement(long elementId, string elementType)
{ {
if (Type == "order") if (Type == "order")
{ {
GlobalArea.Log.Error($"order图层不能添加{ItemType}元素"); GlobalArea.Log.Error($"order图层不能添加{elementType}元素");
return; return;
} }
if (Members![itemId.ToString()] == null) if (Members![elementId.ToString()] == null)
{ {
Members![itemId.ToString()] = ItemType; Members![elementId.ToString()] = elementType;
Structure!.AsArray().Add(itemId); Structure!.AsArray().Add(elementId);
HasChange = true; HasChange = true;
//上传图层到数据库 //上传图层到数据库
MapLayer mapLayer = ConvertToMapLayer(); MapLayer mapLayer = ConvertToMapLayer();
@ -48,6 +48,30 @@ namespace OMS.NET.Common
} }
} }
public void DeleteElement(long elementId)
{
if (Type == "order")
{
GlobalArea.Log.Error($"order图层不能移除Element元素");
return;
}
Members!.AsObject().Remove(elementId.ToString());
//移除structure中的值
for (int i = 0; i < Structure!.AsArray().Count; i++)
{
JsonNode node = Structure!.AsArray().ElementAt(i)!;
if (node.GetValueKind() == JsonValueKind.Number &&
node.GetValue<long>() == elementId)
{
Structure!.AsArray().RemoveAt(i);
break;
}
}
//上传图层到数据库
MapLayer mapLayer = ConvertToMapLayer();
MapLayer.Update(mapLayer);
}
public MapLayer ConvertToMapLayer() public MapLayer ConvertToMapLayer()
{ {
return new MapLayer() return new MapLayer()

@ -329,6 +329,17 @@ namespace OMS.NET
} }
} }
/// <summary>
/// 移除活动数据,调用前必需确保对象已存在
/// </summary>
public static void RemoveActiveDataElement(long elementId)
{
lock (_ActiveDataListLock)
{
_ActiveDataList.Remove(GetActiveDataElement(elementId)!);
}
}
/// <summary> /// <summary>
/// 从数据库中构建layerid 和 templateid的对应关系 /// 从数据库中构建layerid 和 templateid的对应关系
/// </summary> /// </summary>

@ -92,16 +92,14 @@ namespace OMS.NET.Instructs
Class = "upload", Class = "upload",
Conveyor = conveyor, Conveyor = conveyor,
Time = time, Time = time,
Data = new Dictionary<string, object>() Data = new
{ {
{"vid",id}, vid = id,
{"rid",mapData.Id} rid = mapData.Id
}, }
}); });
} }
} }
else else
{ {

@ -1,4 +1,6 @@
using System.Text.Json; using System.Text.Json;
using OMS.NET.Common;
using OMS.NET.DbClass;
namespace OMS.NET.Instructs namespace OMS.NET.Instructs
{ {
@ -6,6 +8,7 @@ namespace OMS.NET.Instructs
{ {
public DeleteElementInstruct() public DeleteElementInstruct()
{ {
Type = "broadcast";
Class = "deleteElement"; Class = "deleteElement";
} }
@ -15,17 +18,91 @@ namespace OMS.NET.Instructs
{ {
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出 if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查 if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
string conveyor = GlobalArea.GetLoginEmailByID(wsid);
try try
{ {
string conveyor = GlobalArea.GetLoginEmailByID(wsid);
//解析id和tmpId //解析id和tmpId
long id = Data.GetProperty("id").GetInt64(); long id = Data.GetProperty("id").GetInt64();
string tmpId = Data.GetProperty("tmpId").GetString(); string tmpId = Data.GetProperty("tmpId").GetString();
//需要先实现activeData相关 //需要先实现activeData相关
MapData mapData = MapData.Get(id) ?? throw new Exception($"Element{id}不存在");
mapData.Phase = 2;
int row = MapData.Update(mapData);
if (row == -1) throw new Exception("数据库修改失败");
if (GlobalArea.IsElementExit(id))
{
GlobalArea.RemoveActiveDataElement(id);
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsBroadcast = true,
Type = "broadcast",
Class = "pickSelectEndElements",
Conveyor = conveyor,
Time = GlobalArea.GetCurrentTime(),
Data = new
{
id = id
}
});
}
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsResponse = true,
Type = "send_correct",
Class = "delete",
Conveyor = conveyor,
Time = GlobalArea.GetCurrentTime(),
Data = new
{
rid = id
}
});
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsBroadcast = true,
Type = "broadcast",
Class = "deleteElement",
Conveyor = conveyor,
Time = GlobalArea.GetCurrentTime(),
Data = new
{
id = id
}
});
LayerData layer = GlobalArea.GetLayerDataByTemplateId(tmpId)!;
layer.DeleteElement(id);
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsBroadcast = true,
Type = "broadcast",
Class = "updateLayerData",
Conveyor = conveyor,
Time = GlobalArea.GetCurrentTime(),
Data = new
{
id = layer.LayerId,
members = layer.Members!.ToString(),
structure = layer.Structure!.ToString(),
}
});
} }
catch catch (Exception ex)
{ {
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
//ResponseOrBroadcastInstructs.Clear();
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsResponse = true,
Type = "send_error",
Class = "delete",
Conveyor = conveyor,
Time = GlobalArea.GetCurrentTime(),
Data = new
{
source = Data,
message = ex.Message
}
});
} }
}); });
} }

Loading…
Cancel
Save