新建分组图层

dev
nxiaoxiao 1 year ago
parent cb0103b988
commit 829bf729e5

@ -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)
{
@ -130,6 +137,15 @@ namespace OMS.NET.Common
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;
@ -427,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,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);
}
});
}
}
}
Loading…
Cancel
Save