Compare commits

...

3 Commits

Author SHA1 Message Date
nxiaoxiao 2550084b66 其他指令也一次性添加上去 1 year ago
nxiaoxiao 829bf729e5 新建分组图层 1 year ago
nxiaoxiao cb0103b988 图层排序 1 year ago

@ -13,6 +13,13 @@ namespace OMS.NET.Common
public JsonNode? Members { get; set; }
public JsonNode? Structure { get; set; }
public int Phase { get; set; } = 1;
public string? Name
{
get
{
return Structure?.AsArray().ElementAt(0)?.GetValue<string>();
}
}
public LayerData(long layerId, string type)
{
@ -107,6 +114,38 @@ namespace OMS.NET.Common
}
}
public void AdjustOrderLayer(long layerAId, long layerBId, string type)
{
if (Type == "order")
{
JsonArray array = Members!.AsArray();
int indexA = array.FindElementIndex(layerAId);
int indexB = array.FindElementIndex(layerBId);
if (type == "up")
{
array.RemoveAt(indexA);
array.Insert(indexB, layerAId);
}
if (type == "down")
{
array.RemoveAt(indexA);
indexB = array.FindElementIndex(layerBId);
array.Insert(indexB + 1, layerAId);
}
UpdateToDb();
}
}
public void AddGroupLayer(long layerId)
{
if (Type == "order")
{
Members?.AsArray().Add(layerId);
UpdateToDb();
}
}
public MapLayer ConvertToMapLayer()
{
return new MapLayer()

@ -104,5 +104,34 @@ namespace OMS.NET.Common
}
details = newDetails;
}
/// <summary>
/// 生成 100000 到 999999 之间的随机整数
/// </summary>
public static int GetRandomNumber6()
{
Random random = new();
int minValue = 100000;
int maxValue = 999999;
return random.Next(minValue, maxValue + 1);
}
/// <summary>
/// 创建模板id
/// </summary>
public static string CreateTemplateId()
{
// 定义有效字符集
const string validChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
Random random = new();
int length = random.Next(8, 15);
string result = "";
for (int i = 0; i < length; i++)
{
int byteValue = random.Next(0, 256);
result += validChars[byteValue % validChars.Length];
}
return result;
}
}
}

@ -3,6 +3,7 @@ using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using K4os.Compression.LZ4.Internal;
using OMS.NET.Common;
using OMS.NET.DbClass;
using OMS.NET.Instructs;
@ -380,21 +381,13 @@ 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)
{
return _LayerDataList.Where(x => x.Type == "order").First()!;
}
}
public static dynamic AdjustElementOrder(long elementAId, long elementBId, string templateA, string templateB, string method)
{
@ -435,7 +428,99 @@ namespace OMS.NET
}
}
public static LayerData CreateGroupLayer(string creator)
{
lock (_LayerDataListLock)
{
//int max = _LayerDataList.Count;
LayerData layer = new(-1, "group")
{
Members = new JsonObject(),
TemplateId = CreateGroupLayerTemplateId()
};
layer.Members.AsObject()["0"] = 0;
string time = GetCurrentTime();
layer.Structure = new JsonArray();
layer.Structure.AsArray().Add(CreateGroupLayerName());
layer.Structure.AsArray().Add(new
{
template = new
{
id = layer.TemplateId,
name = "template",
creator = creator,
modify = time,
locked = false,
explain = "none",
typeRule = new
{
point = true,
line = true,
area = true,
curve = true
},
detailsRule = new List<object>
{
new {
set = false,
name = "name",
@default = "default",
type = "text"
}
},
colorRule = new
{
basis = "",
type = "",
condition = new List<object>()
},
widthRule = new
{
basis = "",
type = "",
condition = new List<object>()
}
}
});
MapLayer mapLayer = layer.ConvertToMapLayer();
MapLayer.Add(mapLayer);
if (mapLayer.Id != -1)
{
LayerData order = GetOrderLayerData();
order.AddGroupLayer(mapLayer.Id);
layer.HasChange = true;
layer.LayerId = mapLayer.Id;
_LayerDataList.Add(layer);
}
return layer;
}
}
private static string CreateGroupLayerName()
{
lock (_LayerDataListLock)
{
string name = "layer " + Util.GetRandomNumber6();
while (_LayerDataList.Any(x => x.Name == name))
{
name = "layer " + Util.GetRandomNumber6();
}
return name;
}
}
private static string CreateGroupLayerTemplateId()
{
lock (_LayerDataListLock)
{
string tmpId = Util.CreateTemplateId();
while (_LayerDataList.Any(x => x.TemplateId == tmpId))
{
tmpId = Util.CreateTemplateId();
}
return tmpId;
}
}
#endregion

@ -0,0 +1,31 @@
using System.Text.Json;
namespace OMS.NET.Instructs
{
public class BatchDeleteElementInstruct : Instruct
{
public BatchDeleteElementInstruct()
{
Type = "broadcast";
Class = "batchDeleteElement";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
try
{
//string conveyor = GlobalArea.GetLoginEmailByID(wsid);
string time = GlobalArea.GetCurrentTime();
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}

@ -0,0 +1,56 @@
using System.Text.Json;
using OMS.NET.Common;
using OMS.NET.DbClass;
namespace OMS.NET.Instructs
{
public class CreateGroupLayerInstruct : Instruct
{
public CreateGroupLayerInstruct()
{
Type = "broadcast";
Class = "createGroupLayer";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
try
{
string conveyor = GlobalArea.GetLoginEmailByID(wsid);
AccountData accountData = GlobalArea.GetLoginAccountData(conveyor)!;
string creator = $"{accountData.UserName}({conveyor})";
LayerData newGroupLayer = GlobalArea.CreateGroupLayer(creator);
string time = GlobalArea.GetCurrentTime();
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsBroadcast = true,
Type = "broadcast",
Class = "createGroupLayer",
Conveyor = conveyor,
Time = time,
Data = newGroupLayer
});
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsBroadcast = true,
Type = "broadcast",
Class = "updateLayerOrder",
Conveyor = conveyor,
Time = time,
Data = new{
member = GlobalArea.GetOrderLayerData().Members
}
});
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}

@ -0,0 +1,31 @@
using System.Text.Json;
namespace OMS.NET.Instructs
{
public class DeleteLayerAndMembersInstuct : Instruct
{
public DeleteLayerAndMembersInstuct()
{
Type = "broadcast";
Class = "deleteLayerAndMembers";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
try
{
//string conveyor = GlobalArea.GetLoginEmailByID(wsid);
string time = GlobalArea.GetCurrentTime();
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}

@ -0,0 +1,31 @@
using System.Text.Json;
namespace OMS.NET.Instructs
{
public class ForceUpdateDataInstruct : Instruct
{
public ForceUpdateDataInstruct()
{
Type = "broadcast";
Class = "forceUpdate";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
try
{
//string conveyor = GlobalArea.GetLoginEmailByID(wsid);
string time = GlobalArea.GetCurrentTime();
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}

@ -55,7 +55,6 @@ namespace OMS.NET.Instructs
"get_mapLayer" => JsonSerializer.Deserialize<GetMapLayerInstruct>(root.GetRawText(), options),
"get_activeData" => JsonSerializer.Deserialize<GetActiveDataInstruct>(root.GetRawText(), options),
"ping" => JsonSerializer.Deserialize<PingInstuct>(root.GetRawText(), options),
//广播指令
"broadcast" => classValue switch
{
@ -66,10 +65,20 @@ namespace OMS.NET.Instructs
"curve" => JsonSerializer.Deserialize<AddElementInstruct>(root.GetRawText(), options),
"deleteElement" => JsonSerializer.Deserialize<DeleteElementInstruct>(root.GetRawText(), options),
"textMessage" => JsonSerializer.Deserialize<TextMessageInstruct>(root.GetRawText(), options),
"updateElement" => JsonSerializer.Deserialize<UpdateElementInstuct>(root.GetRawText(), options),
"updateElementNode" => JsonSerializer.Deserialize<UpdateElementNodeInstuct>(root.GetRawText(), options),
"selectIngElement" => JsonSerializer.Deserialize<SelectIngElementInstruct>(root.GetRawText(), options),
"selectEndElement" => JsonSerializer.Deserialize<SelectEndElementInstruct>(root.GetRawText(), options),
"pickIngElement" => JsonSerializer.Deserialize<PickIngElementInstruct>(root.GetRawText(), options),
"pickEndElement" => JsonSerializer.Deserialize<PickEndElementInstruct>(root.GetRawText(), options),
"restoreElement" => JsonSerializer.Deserialize<RestoreElementInstruct>(root.GetRawText(), options),
"adjustElementOrder" => JsonSerializer.Deserialize<AdjustElementOrderInstuct>(root.GetRawText(), options),
"updateLayerOrder" => JsonSerializer.Deserialize<UpdateLayerOrderInstruct>(root.GetRawText(), options),
"createGroupLayer" => JsonSerializer.Deserialize<CreateGroupLayerInstruct>(root.GetRawText(), options),
"deleteLayerAndMembers" => JsonSerializer.Deserialize<DeleteLayerAndMembersInstuct>(root.GetRawText(), options),
"batchDeleteElement" => JsonSerializer.Deserialize<BatchDeleteElementInstruct>(root.GetRawText(), options),
"renameLayer" => JsonSerializer.Deserialize<RenameLayerInstruct>(root.GetRawText(), options),
"updateTemplateData" => JsonSerializer.Deserialize<UpdateTemplateDataInstruct>(root.GetRawText(), options),
_ => JsonSerializer.Deserialize<Instruct>(root.GetRawText(), options)
},
_ => null

@ -0,0 +1,31 @@
using System.Text.Json;
namespace OMS.NET.Instructs
{
public class RenameLayerInstruct : Instruct
{
public RenameLayerInstruct()
{
Type = "broadcast";
Class = "renameLayer";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
try
{
//string conveyor = GlobalArea.GetLoginEmailByID(wsid);
string time = GlobalArea.GetCurrentTime();
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}

@ -0,0 +1,50 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using OMS.NET.Common;
namespace OMS.NET.Instructs
{
public class UpdateLayerOrderInstruct : Instruct
{
public UpdateLayerOrderInstruct()
{
Type = "broadcast";
Class = "updateLayerOrder";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
string conveyor = GlobalArea.GetLoginEmailByID(wsid);
try
{
long active = Data.GetProperty("active").GetInt64();
long passive = Data.GetProperty("passive").GetInt64();
string type = Data.GetProperty("type").GetString();
LayerData order = GlobalArea.GetOrderLayerData();
order.AdjustOrderLayer(active, passive, type);
ResponseOrBroadcastInstructs.Add(new Instruct()
{
IsBroadcast = true,
Type = "broadcast",
Class = "updateLayerOrder",
Conveyor = conveyor,
Time = GlobalArea.GetCurrentTime(),
Data = new
{
member = order.Members
}
});
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}

@ -0,0 +1,31 @@
using System.Text.Json;
namespace OMS.NET.Instructs
{
public class UpdateTemplateDataInstruct : Instruct
{
public UpdateTemplateDataInstruct()
{
Type = "broadcast";
Class = "updateTemplateData";
}
public override Task Handler(string wsid)
{
return Task.Run(() =>
{
if (!GlobalArea.LoginCheckByID(wsid)) return;//登录检查不通过则直接退出
if (Data?.GetType() != typeof(JsonElement)) return;//Data 非空和JsonElement类型检查
try
{
//string conveyor = GlobalArea.GetLoginEmailByID(wsid);
string time = GlobalArea.GetCurrentTime();
}
catch (Exception ex)
{
GlobalArea.Log.Warn($"处理{Class}广播指令出错:" + ex.Message);
}
});
}
}
}
Loading…
Cancel
Save