Compare commits
51 Commits
sprint-630
...
sprint-731
Author | SHA1 | Date |
---|---|---|
huangxianguo | 57ea062060 | |
wangkaiyi | 7ef948ae48 | |
wangkaiyi | b692f8e41c | |
wangkaiyi | fd52e9c843 | |
huangxianguo | b3980da48f | |
huangxianguo | e5c23c26ef | |
huangxianguo | 504216dfbd | |
huangxianguo | 6f99477de4 | |
huangxianguo | 8b33224428 | |
huangxianguo | cdaa4d8d52 | |
huangxianguo | 0e5f7a56d8 | |
huangxianguo | 7bcc84ee8b | |
huangxianguo | d199ff7f7f | |
huangxianguo | 5dfbdfee5e | |
huangxianguo | 7edb347ec7 | |
huangxianguo | e20129a4c1 | |
huangxianguo | 4dd680b0dc | |
huangxianguo | 0daf08eb3d | |
huangxianguo | 3f24aacb1d | |
huangxianguo | ae30c33f44 | |
huangxianguo | e54f601278 | |
huangxianguo | 5710bf9005 | |
huangxianguo | 8c6c3363b8 | |
huangxianguo | c5b12fa559 | |
huangxianguo | b9a7b1350b | |
huangxianguo | 8cfae665be | |
huangxianguo | 55ed7729e1 | |
huangxianguo | 3fa0d33bd6 | |
wangkaiyi | e9dfd46e1d | |
wangkaiyi | 835ce1375b | |
huangxianguo | 877cf4ba7a | |
huangxianguo | 5698acc185 | |
huangxianguo | 6014885442 | |
wangkaiyi | 40569d9184 | |
wangkaiyi | afb91406f0 | |
huangxianguo | 2a0ac107c5 | |
huangxianguo | 3d1c151f32 | |
wangkaiyi | 64cf339683 | |
wangkaiyi | a303714a63 | |
huangxianguo | c140544af7 | |
huangxianguo | 3fdbe7c5c5 | |
huangxianguo | 44456861df | |
huangxianguo | 9c1993f730 | |
huangxianguo | 34c7a83ab7 | |
huangxianguo | 30d8d953a0 | |
huangxianguo | 2b4e179cf9 | |
huangxianguo | 6927c9048c | |
huangxianguo | e98b1bf31f | |
huangxianguo | 5464aa361a | |
huangxianguo | 1076bc6ea8 | |
huangxianguo | 810bd3e497 |
|
@ -0,0 +1,21 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>net7.0</TargetFrameworks>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="JetBrains.Annotations" Version="2024.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||||
|
<PackageReference Include="MSTest.TestAdapter" Version="3.5.2" />
|
||||||
|
<PackageReference Include="MSTest.TestFramework" Version="3.5.2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\MasstransferCommon\MasstransferCommon.csproj" />
|
||||||
|
<ProjectReference Include="..\MasstransferExporter\MasstransferExporter.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System.IO;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Tests.Utils;
|
||||||
|
|
||||||
|
[TestClass]
|
||||||
|
[TestSubject(typeof(JsonUtil))]
|
||||||
|
public class JsonUtilTest
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public void Test()
|
||||||
|
{
|
||||||
|
var json = File.ReadAllText("C:\\Users\\huangxianguo\\Desktop\\formula.json");
|
||||||
|
|
||||||
|
var dto = JsonUtil.FromJson<FormulaDTO>(json);
|
||||||
|
Assert.IsNotNull(dto);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
namespace MasstransferCommon.Annotation;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通过添加特性注解实现开启定时任务
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cron"></param>
|
||||||
|
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
|
||||||
|
public class ScheduledJobAttribute(string cron) : Attribute
|
||||||
|
{
|
||||||
|
public string Cron { get; } = cron;
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
using Serilog;
|
||||||
|
using Serilog.Core;
|
||||||
|
using Serilog.Events;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Config;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 日志配置类
|
||||||
|
/// </summary>
|
||||||
|
public class LogConfiguration
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取日志配置对象
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static Logger GetLogger()
|
||||||
|
{
|
||||||
|
// 日志输出目录
|
||||||
|
var basePath = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
|
||||||
|
return new LoggerConfiguration()
|
||||||
|
.MinimumLevel.Debug()
|
||||||
|
.Enrich.FromLogContext()
|
||||||
|
.WriteTo.Logger(
|
||||||
|
l =>
|
||||||
|
l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug)
|
||||||
|
.WriteTo.File(
|
||||||
|
Path.Combine(basePath, "logs", "debug", "debug-.log"),
|
||||||
|
rollingInterval: RollingInterval.Hour,
|
||||||
|
retainedFileCountLimit: 24
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.WriteTo.Logger(
|
||||||
|
l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information)
|
||||||
|
.WriteTo.File(
|
||||||
|
Path.Combine(basePath, "logs", "info", "info-.log"),
|
||||||
|
rollingInterval: RollingInterval.Hour,
|
||||||
|
retainedFileCountLimit: 72
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.WriteTo.Logger(
|
||||||
|
l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning)
|
||||||
|
.WriteTo.File(
|
||||||
|
Path.Combine(basePath, "logs", "warning", "warning-.log"),
|
||||||
|
rollingInterval: RollingInterval.Day,
|
||||||
|
retainedFileCountLimit: 30
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.WriteTo.Logger(
|
||||||
|
l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
|
||||||
|
.WriteTo.File(
|
||||||
|
Path.Combine(basePath, "logs", "error", "error-.log"),
|
||||||
|
rollingInterval: RollingInterval.Day,
|
||||||
|
retainedFileCountLimit: 90
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.WriteTo.Console()
|
||||||
|
.CreateLogger();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using JsonSerializer = Newtonsoft.Json.JsonSerializer;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Convert;
|
||||||
|
|
||||||
|
public class DatetimeConverter : JsonConverter<DateTime>
|
||||||
|
{
|
||||||
|
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||||
|
|
||||||
|
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
long timestamp = (long)(value.ToUniversalTime() - UnixEpoch).TotalMilliseconds;
|
||||||
|
writer.WriteValue(timestamp < 0 ? 0 : timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue,
|
||||||
|
JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var value = reader.Value;
|
||||||
|
|
||||||
|
return long.TryParse(value + "", out var timestamp)
|
||||||
|
? UnixEpoch.AddMilliseconds(timestamp)
|
||||||
|
: UnixEpoch.AddMilliseconds((long)value);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace MasstransferCommon.Events;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用于声明当前方法为事件处理器
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Method)]
|
||||||
|
public class EventAction(params EventType[] types) : Attribute
|
||||||
|
{
|
||||||
|
public EventType[] Types => types;
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
using Serilog;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Events;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 事件总线
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
public abstract class EventBus<T>
|
||||||
|
{
|
||||||
|
private static readonly Dictionary<EventType, List<Delegate>> Subscribers = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 添加订阅
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type"></param>
|
||||||
|
/// <param name="action"></param>
|
||||||
|
public static void AddEventHandler(EventType type, Delegate action)
|
||||||
|
{
|
||||||
|
if (Subscribers.TryGetValue(type, out var subscribers))
|
||||||
|
{
|
||||||
|
var any = subscribers.Any(item => item.Equals(action));
|
||||||
|
if (!any) subscribers.Add(action);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Subscribers.Add(type, [action]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 移除订阅逻辑
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">事件类型</param>
|
||||||
|
/// <param name="action">回调方法</param>
|
||||||
|
public static void RemoveEventHandler(EventType type, Delegate action)
|
||||||
|
{
|
||||||
|
if (!Subscribers.TryGetValue(type, out var handlers)) return;
|
||||||
|
|
||||||
|
handlers.Remove(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发布事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type"></param>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
public static void Publish(EventType type, T data)
|
||||||
|
{
|
||||||
|
if (!Subscribers.TryGetValue(type, out var subscribers)) return;
|
||||||
|
|
||||||
|
// 创建一个副本,避免在回调中修改订阅列表导致迭代异常
|
||||||
|
var actions = subscribers.ToList();
|
||||||
|
|
||||||
|
foreach (var action in actions)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
action.DynamicInvoke(type, data);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e, e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace MasstransferCommon.Events;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用于声明当前类为事件监听
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
|
public class EventListener(string name = "") : Attribute
|
||||||
|
{
|
||||||
|
private string Name => name;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Events;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通过事件发布订阅模式实现系统各组件的解耦
|
||||||
|
/// 这里定义的是事件的驱动类型
|
||||||
|
/// </summary>
|
||||||
|
public enum EventType
|
||||||
|
{
|
||||||
|
// 系统初始化事件
|
||||||
|
[Description("系统初始化事件")] SetupNotify,
|
||||||
|
|
||||||
|
[Description("系统已经启动事件")] StartUp,
|
||||||
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
<TargetFramework>net7.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
|
<LangVersion>preview</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -11,6 +12,11 @@
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
|
||||||
<PackageReference Include="Quartz" Version="3.10.0" />
|
<PackageReference Include="Quartz" Version="3.10.0" />
|
||||||
|
<PackageReference Include="Serilog.Enrichers.Environment" Version="3.0.1" />
|
||||||
|
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
|
||||||
|
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.1-dev-00077" />
|
||||||
|
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||||
|
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.1-dev-00771" />
|
||||||
<PackageReference Include="sqlite-net-sqlcipher" Version="1.9.172" />
|
<PackageReference Include="sqlite-net-sqlcipher" Version="1.9.172" />
|
||||||
<PackageReference Include="System.Management" Version="8.0.0"/>
|
<PackageReference Include="System.Management" Version="8.0.0"/>
|
||||||
<PackageReference Include="Serilog" Version="4.0.0"/>
|
<PackageReference Include="Serilog" Version="4.0.0"/>
|
||||||
|
@ -39,8 +45,4 @@
|
||||||
<None Remove=".gitignore" />
|
<None Remove=".gitignore" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="Service\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
namespace MasstransferCommon.Model.Atrributes;
|
||||||
|
|
||||||
|
[AttributeUsage(AttributeTargets.Property)]
|
||||||
|
public class Hide : Attribute
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
namespace MasstransferCommon.Model.Atrributes;
|
||||||
|
|
||||||
|
[AttributeUsage(AttributeTargets.Property)]
|
||||||
|
public class Property : Attribute
|
||||||
|
{
|
||||||
|
public bool IsReadOnly { get; set; } = false;
|
||||||
|
|
||||||
|
// 字符串格式
|
||||||
|
public string? Format { get; set; }
|
||||||
|
|
||||||
|
// 显示控件的宽
|
||||||
|
public double Width { get; set; }
|
||||||
|
|
||||||
|
// 显示控件的高
|
||||||
|
public double Height { get; set; }
|
||||||
|
|
||||||
|
public double Max { get; set; }
|
||||||
|
|
||||||
|
public double Min { get; set; }
|
||||||
|
|
||||||
|
public string Group { get; set; }
|
||||||
|
|
||||||
|
public bool IsPassword { get; set; }
|
||||||
|
|
||||||
|
public string Variable { get; set; }
|
||||||
|
|
||||||
|
public int Axis { get; set; } = -1;
|
||||||
|
|
||||||
|
public int Index { get; set; } = -1;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
namespace MasstransferCommon.Model.Constant;
|
||||||
|
|
||||||
|
public class Constants
|
||||||
|
{
|
||||||
|
public const string SN = "G5506771257";
|
||||||
|
}
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
public class ProcessTopics
|
public class ProcessTopics
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 测试topic
|
||||||
|
/// </summary>
|
||||||
|
public const string TestEvent = "TestEvent";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 证书更新事件
|
/// 证书更新事件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -11,4 +16,29 @@ public class ProcessTopics
|
||||||
/// 证书更新事件反馈
|
/// 证书更新事件反馈
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string LicenseUpdateEventFeedback = "LicenseUpdateEventFeedback";
|
public const string LicenseUpdateEventFeedback = "LicenseUpdateEventFeedback";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OTA请求事件
|
||||||
|
/// </summary>
|
||||||
|
public const string OTAQueryEvent = "OTAQueryEvent";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OTA请求反馈事件
|
||||||
|
/// </summary>
|
||||||
|
public const string OTAQueryEventFeedback = "OTAQueryEventFeedback";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OTA更新事件
|
||||||
|
/// </summary>
|
||||||
|
public const string OTAUpdateEvent = "OTAUpdateEvent";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载更新包事件
|
||||||
|
/// </summary>
|
||||||
|
public const string DownloadUpdatePackageEvent = "DownloadUpdatePackageEvent";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载更新包事件反馈
|
||||||
|
/// </summary>
|
||||||
|
public const string DownloadUpdatePackageEventFeedback = "DownloadUpdatePackageEventFeedback";
|
||||||
}
|
}
|
|
@ -2,16 +2,127 @@
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 这里保存所有的 Mqtt Topic
|
/// 这里保存所有的 Mqtt Topic
|
||||||
|
/// topic 的基本结构构成
|
||||||
|
/// up/{sn}/{cmd}/{version}
|
||||||
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Topics
|
public static class Topics
|
||||||
{
|
{
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
private const string SN = "G5506771257";
|
||||||
|
|
||||||
|
private const string Version = "1.0.0";
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报生产数据
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportProductRecord = $"up/{SN}/100/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 图片上传
|
||||||
|
/// </summary>
|
||||||
|
public const string ImageUpload = $"up/{SN}/102/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询图片
|
||||||
|
/// </summary>
|
||||||
|
public const string QueryImage = $"down/{SN}/103/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 坐标文件上传
|
||||||
|
/// </summary>
|
||||||
|
public const string CoordinateUpload = $"up/{SN}/104/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询坐标文件
|
||||||
|
/// </summary>
|
||||||
|
public const string QueryCoordinate = $"down/{SN}/105/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报用户操作数据
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportOperationLog = $"up/{SN}/200/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传系统日志文件
|
||||||
|
/// </summary>
|
||||||
|
public const string UploadLogFile = $"up/{SN}/201/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询系统日志文件
|
||||||
|
/// </summary>
|
||||||
|
public const string QueryLogFile = $"down/{SN}/202/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报故障信息
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportFaultRecord = $"up/{SN}/203/{Version}";
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报配置数据
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportConfigData = $"up/{SN}/400/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下发配置数据
|
||||||
|
/// </summary>
|
||||||
|
public const string DownloadConfigData = $"down/{SN}/401/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下发远程控制指令
|
||||||
|
/// </summary>
|
||||||
|
public const string RemoteControl = $"down/{SN}/402/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报配置字典数据
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportConfigDictionary = $"up/{SN}/403/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下发OTA包
|
||||||
|
/// </summary>
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public const string IssuedOTAPackage = $"down/{SN}/500/{Version}";
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询OTA信息
|
||||||
|
/// </summary>
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public const string QueryOTA = $"up/{SN}/501/{Version}";
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OTA 更新反馈
|
||||||
|
/// </summary>
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public const string OTAUpgradeFeedback = $"up/{SN}/502/{Version}";
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新证书事件
|
/// 更新证书事件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string UpdateLicenseEvent = "UpdateLicenseEvent";
|
public const string UpdateLicenseEvent = $"up/{SN}/503/{Version}";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新证书事件反馈
|
/// 更新证书事件反馈
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string UpdateLicenseEventFeedback = "UpdateLicenseEventFeedback";
|
public const string UpdateLicenseEventFeedback = $"up/{SN}/505/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上行心跳信息
|
||||||
|
/// </summary>
|
||||||
|
public const string HeartBeat = $"up/{SN}/600/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上行系统状态信息
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportSystemStat = $"up/{SN}/601/{Version}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上行系统版本信息
|
||||||
|
/// </summary>
|
||||||
|
public const string ReportSystemVersion = $"up/{SN}/602/{Version}";
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using SQLite;
|
using Newtonsoft.Json;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
namespace MasstransferCommon.Model.Entity;
|
namespace MasstransferCommon.Model.Entity;
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ public class Entity
|
||||||
{
|
{
|
||||||
[PrimaryKey] public string? Id { get; set; }
|
[PrimaryKey] public string? Id { get; set; }
|
||||||
|
|
||||||
[Column("create_time")] public DateTime CreateTime { get; set; } = DateTime.Now;
|
[Column("create_time"), JsonIgnore] public DateTime CreateTime { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
[Column("update_time")] public DateTime UpdateTime { get; set; } = DateTime.Now;
|
[Column("update_time"), JsonIgnore] public DateTime UpdateTime { get; set; } = DateTime.Now;
|
||||||
}
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Entity;
|
||||||
|
|
||||||
|
[Table("minio_params"), Description("MinIO参数")]
|
||||||
|
public class MinioParams : Entity
|
||||||
|
{
|
||||||
|
[Column("minio_access_key"), Description("Minio AccessKey")]
|
||||||
|
public string MinioAccessKey { get; set; }
|
||||||
|
|
||||||
|
[Column("minio_secret_key"), Description("Minio SecretKey")]
|
||||||
|
public string MinioSecretKey { get; set; }
|
||||||
|
|
||||||
|
[Column("minio_bucket"), Description("Minio Bucket")]
|
||||||
|
public string MinioBucket { get; set; }
|
||||||
|
|
||||||
|
[Column("minio_endpoint"), Description("Minio Endpoint")]
|
||||||
|
public string MinioEndpoint { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Entity;
|
||||||
|
|
||||||
|
[Table("mqtt_params"), Description("Mqtt连接参数")]
|
||||||
|
public class MqttParams : Entity
|
||||||
|
{
|
||||||
|
[Column("server_address"), Description("服务器地址")]
|
||||||
|
public string ServerAddress { get; set; }
|
||||||
|
|
||||||
|
[Column("port"), Description("端口")] public int Port { get; set; }
|
||||||
|
|
||||||
|
[Column("user_name"), Description("用户名")]
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
[Column("password"), Description("密码")]
|
||||||
|
public string Password { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Entity;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户操作日志
|
||||||
|
/// </summary>
|
||||||
|
[Table("operation_logs")]
|
||||||
|
public class OperationLog : Entity
|
||||||
|
{
|
||||||
|
[Column("user_id"), Description("用户ID")]
|
||||||
|
public string UserId { get; set; }
|
||||||
|
|
||||||
|
[Column("user_name"), Description("用户名")]
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
[Column("action"), Description("操作")] public string Action { get; set; }
|
||||||
|
|
||||||
|
[Column("params"), Description("参数")] public string? Params { get; set; }
|
||||||
|
|
||||||
|
[Column("exception"), Description("异常信息")]
|
||||||
|
public string? Exception { get; set; }
|
||||||
|
|
||||||
|
[Column("operate_time"), Description("操作时间")]
|
||||||
|
public DateTime OperateTime { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Entity;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 路径参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("path_params"), Description("文件路径参数")]
|
||||||
|
public class PathParams : Entity
|
||||||
|
{
|
||||||
|
[Column("AppDir"), Description("应用程序路径")]
|
||||||
|
public string AppDir { get; set; }
|
||||||
|
|
||||||
|
[Column("AssemblyPath"), Description("程序集路径")]
|
||||||
|
public string AssemblyPath { get; set; }
|
||||||
|
|
||||||
|
[Column("CriticalBackupDir"), Description("重要文件备份目录地址")]
|
||||||
|
public string CriticalBackupDir { get; set; }
|
||||||
|
|
||||||
|
[Column("CriticalFileExtension"), Description("重要文件后缀")]
|
||||||
|
public string[] CriticalFileExtension { get; set; }
|
||||||
|
|
||||||
|
[Column("CriticalSourceLogPath"), Description("重要文件备份记录文件地址")]
|
||||||
|
public string CriticalSourceLogPath { get; set; }
|
||||||
|
|
||||||
|
[Column("PreviousBackupPath"), Description("原应用程序备份目录地址")]
|
||||||
|
public string PreviousBackupPath { get; set; }
|
||||||
|
|
||||||
|
[Column("UpdatePackagePath"), Description("更新包下载地址")]
|
||||||
|
public string UpdatePackagePath { get; set; }
|
||||||
|
}
|
|
@ -1,34 +0,0 @@
|
||||||
using System.ComponentModel;
|
|
||||||
using MasstransferCommon.Model.Enum;
|
|
||||||
using SQLite;
|
|
||||||
|
|
||||||
namespace MasstransferCommon.Model.Entity;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 基板信息
|
|
||||||
/// </summary>
|
|
||||||
[Table("substrates")]
|
|
||||||
public class Substrate : Entity
|
|
||||||
{
|
|
||||||
[Column("context_id"), Description("上下文ID")]
|
|
||||||
public string? ContextId { get; set; }
|
|
||||||
|
|
||||||
[Column("substrate_code"), Description("基板编号")]
|
|
||||||
public string SubstrateCode { get; set; }
|
|
||||||
|
|
||||||
[Column("jig_code"), Description("治具编号")]
|
|
||||||
public string JigCode { get; set; }
|
|
||||||
|
|
||||||
[Column("substrate_type"), Description("基板类型")]
|
|
||||||
public SubstrateTypeEnum SubstrateType { get; set; }
|
|
||||||
|
|
||||||
[Column("row"), Description("基板行")] public int Row { get; set; }
|
|
||||||
|
|
||||||
[Column("column"), Description("基板列")] public int Column { get; set; }
|
|
||||||
|
|
||||||
[Column("batch_no"), Description("批次号")]
|
|
||||||
public string BatchNo { get; set; }
|
|
||||||
|
|
||||||
[Column("formula_id"), Description("配方ID")]
|
|
||||||
public string FormulaId { get; set; }
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
using System.ComponentModel;
|
|
||||||
using SQLite;
|
|
||||||
|
|
||||||
namespace MasstransferCommon.Model.Entity;
|
|
||||||
|
|
||||||
[Table("wafers"), Description("晶环信息")]
|
|
||||||
public class Wafer : Entity
|
|
||||||
{
|
|
||||||
[Column("wafer_code"), Description("晶片编号")]
|
|
||||||
public string? WaferCode { get; set; }
|
|
||||||
|
|
||||||
[Column("color"), Description("晶片颜色")] public ChipColorEnum Color { get; set; }
|
|
||||||
|
|
||||||
[Column("context_id"), Description("上下文id")]
|
|
||||||
public string? ContextId { get; set; }
|
|
||||||
|
|
||||||
[Column("column"), Description("列")] public int Column { get; set; }
|
|
||||||
|
|
||||||
[Column("row"), Description("行")] public int Row { get; set; }
|
|
||||||
|
|
||||||
[Column("used"), Description("是否已使用")] public bool Used { get; set; }
|
|
||||||
}
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum AltimetryStrategyEnum
|
||||||
|
{
|
||||||
|
[Description("按面积")] ByArea = 1,
|
||||||
|
[Description("按坐标")] ByCoordinate = 2
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum ChipColorEnum
|
||||||
|
{
|
||||||
|
R = 1,
|
||||||
|
G = 2,
|
||||||
|
B = 3
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum DirectionEnum
|
||||||
|
{
|
||||||
|
[Description("行方向")] ROW = 1,
|
||||||
|
[Description("列方向")] COLUMN = 2,
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum ExceptionLevel : int
|
||||||
|
{
|
||||||
|
NORMAL,
|
||||||
|
WARN,
|
||||||
|
ERROR,
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum GainAutoEnum
|
||||||
|
{
|
||||||
|
Off,
|
||||||
|
Once,
|
||||||
|
Continuous
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产作业状态
|
||||||
|
/// </summary>
|
||||||
|
public enum JobStateEnum
|
||||||
|
{
|
||||||
|
[Description("待生产")] Waiting = 0,
|
||||||
|
|
||||||
|
[Description("生产中")] Producing = 1,
|
||||||
|
|
||||||
|
[Description("已完成")] Completed = 2,
|
||||||
|
|
||||||
|
[Description("已取消")] Canceled = 3,
|
||||||
|
|
||||||
|
[Description("生产异常")] Abnormal = 4,
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum LineModeEnum
|
||||||
|
{
|
||||||
|
Strobe
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum LineSelectorEnum
|
||||||
|
{
|
||||||
|
Line0,
|
||||||
|
Line1,
|
||||||
|
Line2,
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 扫码枪接口类型
|
||||||
|
/// </summary>
|
||||||
|
public enum ScannerInterfaceEnum
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 串口
|
||||||
|
/// </summary>
|
||||||
|
[Description("串口")] Serial,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// TCP
|
||||||
|
/// </summary>
|
||||||
|
[Description("网口")] Tcp,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// USB
|
||||||
|
/// </summary>
|
||||||
|
[Description("USB")] Usb,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 蓝牙
|
||||||
|
/// </summary>
|
||||||
|
[Description("蓝牙")] Bluetooth,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 无线
|
||||||
|
/// </summary>
|
||||||
|
[Description("无线")] Wireless
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum TlsProtocolsEnum
|
||||||
|
{
|
||||||
|
TLS_1_2,
|
||||||
|
TLS_1_3
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum TriggerActivationEnum
|
||||||
|
{
|
||||||
|
RisingEdge,
|
||||||
|
FallingEdge,
|
||||||
|
LevelHigh,
|
||||||
|
LevelLow,
|
||||||
|
AnyEdge
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum TriggerModeEnum
|
||||||
|
{
|
||||||
|
Off,
|
||||||
|
On
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace MasstransferCommon.Model.Enum;
|
||||||
|
|
||||||
|
public enum TriggerSourceEnum
|
||||||
|
{
|
||||||
|
Software,
|
||||||
|
Line0,
|
||||||
|
Line2,
|
||||||
|
Counter0,
|
||||||
|
Anyway
|
||||||
|
}
|
|
@ -1,22 +1,42 @@
|
||||||
namespace MasstransferCommon.Scheduler;
|
using Serilog;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Scheduler;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 延时定时任务
|
/// 延时定时任务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DelayScheduler
|
public class DelayScheduler
|
||||||
{
|
{
|
||||||
private Timer _timer;
|
/// <summary>
|
||||||
private Action _action;
|
/// 设定延时任务
|
||||||
|
/// </summary>
|
||||||
public void Schedule(Action action, TimeSpan delay)
|
/// <param name="action"></param>
|
||||||
|
/// <param name="delay"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <exception cref="ArgumentNullException"></exception>
|
||||||
|
/// <exception cref="ArgumentOutOfRangeException"></exception>
|
||||||
|
public static async void Delay(Action action, TimeSpan delay, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
_action = action;
|
try
|
||||||
_timer = new Timer(TimerCallback, null, delay, Timeout.InfiniteTimeSpan);
|
{
|
||||||
}
|
if (action == null) throw new ArgumentNullException(nameof(action));
|
||||||
|
if (delay.TotalMilliseconds < 0)
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(delay), "延时时间不能为负数");
|
||||||
|
|
||||||
private void TimerCallback(object? state)
|
await Task.Delay(delay, cancellationToken);
|
||||||
{
|
if (cancellationToken.IsCancellationRequested)
|
||||||
_timer?.Dispose();
|
{
|
||||||
_action?.Invoke();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
action();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (e is not TaskCanceledException)
|
||||||
|
{
|
||||||
|
Log.Error(e, "延时任务执行失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using MasstransferCommon.Annotation;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using Quartz;
|
||||||
|
using Quartz.Impl;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Scheduler;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 定时任务器
|
||||||
|
/// </summary>
|
||||||
|
public class QuartzScheduler
|
||||||
|
{
|
||||||
|
private readonly IScheduler _scheduler;
|
||||||
|
|
||||||
|
private QuartzScheduler()
|
||||||
|
{
|
||||||
|
var schedulerFactory = new StdSchedulerFactory();
|
||||||
|
_scheduler = schedulerFactory.GetScheduler().Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static QuartzScheduler Instance { get; } = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 启动定时任务器
|
||||||
|
/// </summary>
|
||||||
|
public async Task StartAsync()
|
||||||
|
{
|
||||||
|
await _scheduler.Start();
|
||||||
|
|
||||||
|
// 查找所有带有 ScheduledJobAttribute 的类
|
||||||
|
var jobs = AssemblyUtil.GetTypesByAttribute(typeof(ScheduledJobAttribute));
|
||||||
|
|
||||||
|
foreach (var job in jobs)
|
||||||
|
{
|
||||||
|
var attribute = job.GetCustomAttribute<ScheduledJobAttribute>();
|
||||||
|
var jobDetail = JobBuilder.Create(job)
|
||||||
|
.WithIdentity(job.Name)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var trigger = TriggerBuilder.Create()
|
||||||
|
.WithIdentity($"{job.Name}.trigger")
|
||||||
|
.WithCronSchedule(attribute!.Cron)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
await _scheduler.ScheduleJob(jobDetail, trigger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 停止定时器
|
||||||
|
/// </summary>
|
||||||
|
public async Task StopAsync()
|
||||||
|
{
|
||||||
|
await _scheduler.Shutdown();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,98 +0,0 @@
|
||||||
using Quartz;
|
|
||||||
using Quartz.Impl;
|
|
||||||
using Serilog;
|
|
||||||
|
|
||||||
namespace MasstransferCommon.scheduler;
|
|
||||||
|
|
||||||
public class SchedulerHelper
|
|
||||||
{
|
|
||||||
private static readonly Lazy<IScheduler> lazyScheduler = new(() => InitSchedulerAsync().GetAwaiter().GetResult());
|
|
||||||
|
|
||||||
private static readonly Dictionary<string, IJobDetail> _jobDetails = new();
|
|
||||||
|
|
||||||
private static IScheduler Scheduler => lazyScheduler.Value;
|
|
||||||
|
|
||||||
private static async Task<IScheduler> InitSchedulerAsync()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return await new StdSchedulerFactory().GetScheduler();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Log.Error($"Failed to initialize scheduler: {ex.Message}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task Start()
|
|
||||||
{
|
|
||||||
await Scheduler.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task SchedulerInterval<T>(Dictionary<string, object>? data, int interval,
|
|
||||||
string group = "defaultGroup") where T : IJob
|
|
||||||
{
|
|
||||||
var job = CreateJob<T>(data, group);
|
|
||||||
|
|
||||||
var trigger = TriggerBuilder.Create()
|
|
||||||
.WithIdentity(typeof(T).Name, group)
|
|
||||||
.StartNow()
|
|
||||||
.WithSimpleSchedule(x => x.WithIntervalInSeconds(interval).RepeatForever())
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
await Scheduler.ScheduleJob(job, trigger);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task SchedulerCorn<T>(Dictionary<string, object>? data, string? cronExpression,
|
|
||||||
string group = "defaultGroup") where T : IJob
|
|
||||||
{
|
|
||||||
var job = CreateJob<T>(data, group);
|
|
||||||
|
|
||||||
var trigger = TriggerBuilder.Create()
|
|
||||||
.WithIdentity(typeof(T).Name, group)
|
|
||||||
.StartNow()
|
|
||||||
.WithSchedule(CronScheduleBuilder.CronSchedule(cronExpression))
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
await Scheduler.ScheduleJob(job, trigger);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IJobDetail CreateJob<T>(Dictionary<string, object>? data, string group) where T : IJob
|
|
||||||
{
|
|
||||||
if (_jobDetails.ContainsKey(typeof(T).Name)) return _jobDetails[typeof(T).Name];
|
|
||||||
|
|
||||||
var job = JobBuilder.Create<T>()
|
|
||||||
.WithIdentity(typeof(T).Name, group)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
if (data != null && data.Count > 0)
|
|
||||||
foreach (var item in data)
|
|
||||||
job.JobDataMap.Add(item.Key, item.Value);
|
|
||||||
|
|
||||||
_jobDetails[typeof(T).Name] = job;
|
|
||||||
return job;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task PauseJob<T>(string group = "defaultGroup")
|
|
||||||
{
|
|
||||||
if (_jobDetails.ContainsKey(typeof(T).Name)) await Scheduler.PauseJob(JobKey.Create(typeof(T).Name, group));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task ResumeJob<T>(string group = "defaultGroup")
|
|
||||||
{
|
|
||||||
if (_jobDetails.ContainsKey(typeof(T).Name)) await Scheduler.ResumeJob(JobKey.Create(typeof(T).Name, group));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task Shutdown()
|
|
||||||
{
|
|
||||||
if (!Scheduler.IsShutdown) await Scheduler.Shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task TriggerOnceImmediately<T>(string group = "defaultGroup") where T : IJob
|
|
||||||
{
|
|
||||||
if (!_jobDetails.ContainsKey(typeof(T).Name)) return;
|
|
||||||
|
|
||||||
await Scheduler.TriggerJob(new JobKey(typeof(T).Name, group));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
namespace MasstransferCommon.Atrributes;
|
||||||
|
|
||||||
|
public interface Instant
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化对象后进行回调
|
||||||
|
/// </summary>
|
||||||
|
void Initialized();
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace MasstransferCommon.Utils;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 包含程序集相关的工具类
|
||||||
|
/// </summary>
|
||||||
|
public class AssemblyUtil
|
||||||
|
{
|
||||||
|
private const string Token = "masstransfer";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据注解来获取类信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="attributeType"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static List<Type> GetTypesByAttribute(Type attributeType)
|
||||||
|
{
|
||||||
|
return GetAssemblies()
|
||||||
|
.SelectMany(a => a.GetTypes()
|
||||||
|
.Where(t => t.GetCustomAttributes(attributeType, true).Length > 0))
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<Assembly> GetAssemblies()
|
||||||
|
{
|
||||||
|
var assemblies = new List<Assembly>();
|
||||||
|
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
||||||
|
{
|
||||||
|
var name = assembly.GetName().Name;
|
||||||
|
if (name != null && name.ToLower().Contains(Token)) GetReferenceAssemblies(assembly, assemblies);
|
||||||
|
}
|
||||||
|
|
||||||
|
return assemblies;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void GetReferenceAssemblies(Assembly assembly, ICollection<Assembly> assemblies)
|
||||||
|
{
|
||||||
|
foreach (var assemblyName in assembly.GetReferencedAssemblies())
|
||||||
|
{
|
||||||
|
var name = assemblyName.Name;
|
||||||
|
if (name == null || !name.ToLower().Contains(Token)) continue;
|
||||||
|
var ass = Assembly.Load(assemblyName);
|
||||||
|
if (assemblies.Contains(ass)) continue;
|
||||||
|
assemblies.Add(ass);
|
||||||
|
GetReferenceAssemblies(ass, assemblies);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using Newtonsoft.Json;
|
using MasstransferCommon.Convert;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace MasstransferCommon.Utils;
|
namespace MasstransferCommon.Utils;
|
||||||
|
|
||||||
|
@ -8,7 +9,13 @@ public class JsonUtil
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return JsonConvert.SerializeObject(obj);
|
var settings = new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
NullValueHandling = NullValueHandling.Ignore,
|
||||||
|
};
|
||||||
|
settings.Converters.Add(new DatetimeConverter());
|
||||||
|
|
||||||
|
return JsonConvert.SerializeObject(obj, settings);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -28,14 +35,21 @@ public class JsonUtil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static T FromJson<T>(string json)
|
public static T? FromJson<T>(string json)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return JsonConvert.DeserializeObject<T>(json);
|
var settings = new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
NullValueHandling = NullValueHandling.Ignore,
|
||||||
|
};
|
||||||
|
settings.Converters.Add(new DatetimeConverter());
|
||||||
|
|
||||||
|
return JsonConvert.DeserializeObject<T>(json, settings);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
throw new ArgumentException($" 无效的json 字符串 {json} ");
|
throw new ArgumentException($" 无效的json 字符串 {json} ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +58,13 @@ public class JsonUtil
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return JsonConvert.DeserializeObject(json, type);
|
var settings = new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
NullValueHandling = NullValueHandling.Ignore,
|
||||||
|
};
|
||||||
|
settings.Converters.Add(new DatetimeConverter());
|
||||||
|
|
||||||
|
return JsonConvert.DeserializeObject(json, type, settings);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -52,7 +72,7 @@ public class JsonUtil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static T FromJsonOrDefault<T>(string json)
|
public static T? FromJsonOrDefault<T>(string json)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,4 +21,24 @@ public class Md5Util
|
||||||
|
|
||||||
return hashString.ToString();
|
return hashString.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算压缩包md5
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filePath"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string Md5ForZipFile(string filePath)
|
||||||
|
{
|
||||||
|
using (var md5 = MD5.Create())
|
||||||
|
{
|
||||||
|
using (var stream = File.OpenRead(filePath))
|
||||||
|
{
|
||||||
|
// 计算文件流的哈希值
|
||||||
|
var hash = md5.ComputeHash(stream);
|
||||||
|
// 将哈希值转换为字符串格式
|
||||||
|
var hashString = BitConverter.ToString(hash).Replace("-", string.Empty).ToLowerInvariant();
|
||||||
|
return hashString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -22,11 +22,11 @@ public static class RegistryHelper
|
||||||
public static void DeleteValue(string keyPath, string valueName)
|
public static void DeleteValue(string keyPath, string valueName)
|
||||||
{
|
{
|
||||||
using var key = Registry.CurrentUser.OpenSubKey(keyPath, writable: true);
|
using var key = Registry.CurrentUser.OpenSubKey(keyPath, writable: true);
|
||||||
key?.DeleteValue(valueName);
|
key?.DeleteValue(valueName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DeleteKey(string keyPath)
|
public static void DeleteKey(string keyPath)
|
||||||
{
|
{
|
||||||
Registry.CurrentUser.DeleteSubKeyTree(keyPath, throwOnMissingSubKey: false);
|
Registry.CurrentUser.DeleteSubKeyTree(keyPath, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
namespace MasstransferCommon.Utils;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public class SnowflakeId
|
||||||
|
{
|
||||||
|
private static readonly DateTime Epoch = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||||
|
private const int WorkerIdBits = 5;
|
||||||
|
private const int DatacenterIdBits = 5;
|
||||||
|
private const int SequenceBits = 12;
|
||||||
|
|
||||||
|
private const long MaxWorkerId = -1L ^ (-1L << WorkerIdBits);
|
||||||
|
private const long MaxDatacenterId = -1L ^ (-1L << DatacenterIdBits);
|
||||||
|
|
||||||
|
private const long WorkerIdShift = SequenceBits;
|
||||||
|
private const long DatacenterIdShift = SequenceBits + WorkerIdBits;
|
||||||
|
private const long TimestampLeftShift = SequenceBits + WorkerIdBits + DatacenterIdBits;
|
||||||
|
private const long SequenceMask = -1L ^ (-1L << SequenceBits);
|
||||||
|
|
||||||
|
private readonly object _lock = new object();
|
||||||
|
private long _lastTimestamp = -1L;
|
||||||
|
private long _sequence = 0L;
|
||||||
|
|
||||||
|
private static readonly SnowflakeId Instance = new SnowflakeId(0, 0);
|
||||||
|
|
||||||
|
public long WorkerId { get; }
|
||||||
|
public long DatacenterId { get; }
|
||||||
|
|
||||||
|
public SnowflakeId(long workerId, long datacenterId)
|
||||||
|
{
|
||||||
|
if (workerId > MaxWorkerId || workerId < 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentException($"workerId must be between 0 and {MaxWorkerId}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (datacenterId > MaxDatacenterId || datacenterId < 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentException($"datacenterId must be between 0 and {MaxDatacenterId}");
|
||||||
|
}
|
||||||
|
|
||||||
|
WorkerId = workerId;
|
||||||
|
DatacenterId = datacenterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetNextId()
|
||||||
|
{
|
||||||
|
return Instance.NextId().ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private long NextId()
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
var timestamp = TimeGen();
|
||||||
|
|
||||||
|
if (timestamp < _lastTimestamp)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Clock moved backwards. Refusing to generate id");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_lastTimestamp == timestamp)
|
||||||
|
{
|
||||||
|
_sequence = (_sequence + 1) & SequenceMask;
|
||||||
|
if (_sequence == 0)
|
||||||
|
{
|
||||||
|
timestamp = TilNextMillis(_lastTimestamp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_sequence = 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
_lastTimestamp = timestamp;
|
||||||
|
|
||||||
|
return ((timestamp - EpochTicks()) << (int)TimestampLeftShift) |
|
||||||
|
(DatacenterId << (int)DatacenterIdShift) |
|
||||||
|
(WorkerId << (int)WorkerIdShift) |
|
||||||
|
_sequence;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private long TilNextMillis(long lastTimestamp)
|
||||||
|
{
|
||||||
|
var timestamp = TimeGen();
|
||||||
|
while (timestamp <= lastTimestamp)
|
||||||
|
{
|
||||||
|
timestamp = TimeGen();
|
||||||
|
}
|
||||||
|
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private long TimeGen()
|
||||||
|
{
|
||||||
|
return (long)(DateTime.UtcNow - Epoch).TotalMilliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long EpochTicks()
|
||||||
|
{
|
||||||
|
return (long)(Epoch - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,12 +4,11 @@ namespace MasstransferCommon.Utils;
|
||||||
|
|
||||||
public class TimeUtil
|
public class TimeUtil
|
||||||
{
|
{
|
||||||
|
|
||||||
public static void Sleep(int milliseconds)
|
public static void Sleep(int milliseconds)
|
||||||
{
|
{
|
||||||
Thread.Sleep(milliseconds);
|
Thread.Sleep(milliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取当前的时间戳
|
/// 获取当前的时间戳
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -19,6 +18,11 @@ public class TimeUtil
|
||||||
return new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
|
return new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static DateTime ConvertTime(long time)
|
||||||
|
{
|
||||||
|
return DateTimeOffset.FromUnixTimeMilliseconds(time).DateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 格式化时间
|
/// 格式化时间
|
||||||
|
@ -32,6 +36,12 @@ public class TimeUtil
|
||||||
return dateTime.ToString(format);
|
return dateTime.ToString(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static string FormatTime(DateTime dateTime, string format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
{
|
||||||
|
return dateTime.ToString(format);
|
||||||
|
}
|
||||||
|
|
||||||
public static string ToTimeSpan(long time)
|
public static string ToTimeSpan(long time)
|
||||||
{
|
{
|
||||||
// 使用TimeSpan.FromMilliseconds来创建TimeSpan对象
|
// 使用TimeSpan.FromMilliseconds来创建TimeSpan对象
|
||||||
|
|
|
@ -13,7 +13,7 @@ using System.Reflection;
|
||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("MasstransferCommon")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("MasstransferCommon")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+877cf4ba7ae74758a89a91f7ed677f7e83789ca8")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("MasstransferCommon")]
|
[assembly: System.Reflection.AssemblyProductAttribute("MasstransferCommon")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("MasstransferCommon")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("MasstransferCommon")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
55253de7166d1dd8e0b57bd70c6516d44d5416d0
|
24bba642a13e6757b4f3f31fb043b50bb46d2cbfc99854439c2393c381e11be8
|
||||||
|
|
|
@ -8,4 +8,6 @@ build_property.PlatformNeutralAssembly =
|
||||||
build_property.EnforceExtendedAnalyzerRules =
|
build_property.EnforceExtendedAnalyzerRules =
|
||||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||||
build_property.RootNamespace = MasstransferCommon
|
build_property.RootNamespace = MasstransferCommon
|
||||||
build_property.ProjectDir = C:\workspace\code_repos\haiju\MasstransferExporter\MasstransferCommon\
|
build_property.ProjectDir = C:\Users\wangkaiyi\RiderProjects\MasstransferExporter\MasstransferCommon\
|
||||||
|
build_property.EnableComHosting =
|
||||||
|
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,25 +1,27 @@
|
||||||
{
|
{
|
||||||
"format": 1,
|
"format": 1,
|
||||||
"restore": {
|
"restore": {
|
||||||
"C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj": {}
|
"C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj": {}
|
||||||
},
|
},
|
||||||
"projects": {
|
"projects": {
|
||||||
"C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj": {
|
"C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"restore": {
|
"restore": {
|
||||||
"projectUniqueName": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
"projectUniqueName": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
||||||
"projectName": "MasstransferCommon",
|
"projectName": "MasstransferCommon",
|
||||||
"projectPath": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
"projectPath": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
||||||
"packagesPath": "C:\\Users\\huangxianguo\\.nuget\\packages\\",
|
"packagesPath": "C:\\Users\\wangkaiyi\\.nuget\\packages\\",
|
||||||
"outputPath": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\obj\\",
|
"outputPath": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\obj\\",
|
||||||
"projectStyle": "PackageReference",
|
"projectStyle": "PackageReference",
|
||||||
"configFilePaths": [
|
"configFilePaths": [
|
||||||
"C:\\Users\\huangxianguo\\AppData\\Roaming\\NuGet\\NuGet.Config"
|
"C:\\Users\\wangkaiyi\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||||
],
|
],
|
||||||
"originalTargetFrameworks": [
|
"originalTargetFrameworks": [
|
||||||
"net7.0"
|
"net7.0"
|
||||||
],
|
],
|
||||||
"sources": {
|
"sources": {
|
||||||
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||||
"https://api.nuget.org/v3/index.json": {}
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
},
|
},
|
||||||
"frameworks": {
|
"frameworks": {
|
||||||
|
@ -38,10 +40,22 @@
|
||||||
"net7.0": {
|
"net7.0": {
|
||||||
"targetAlias": "net7.0",
|
"targetAlias": "net7.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"BouncyCastle.NetCore": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[2.2.1, )"
|
||||||
|
},
|
||||||
|
"Microsoft.EntityFrameworkCore.Abstractions": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[7.0.15, )"
|
||||||
|
},
|
||||||
"Newtonsoft.Json": {
|
"Newtonsoft.Json": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[13.0.3, )"
|
"version": "[13.0.3, )"
|
||||||
},
|
},
|
||||||
|
"Quartz": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[3.10.0, )"
|
||||||
|
},
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[4.0.0, )"
|
"version": "[4.0.0, )"
|
||||||
|
@ -53,6 +67,10 @@
|
||||||
"System.Management": {
|
"System.Management": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[8.0.0, )"
|
"version": "[8.0.0, )"
|
||||||
|
},
|
||||||
|
"sqlite-net-sqlcipher": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[1.9.172, )"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"imports": [
|
"imports": [
|
||||||
|
@ -71,7 +89,7 @@
|
||||||
"privateAssets": "all"
|
"privateAssets": "all"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.407\\RuntimeIdentifierGraph.json"
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.203\\RuntimeIdentifierGraph.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\huangxianguo\.nuget\packages\</NuGetPackageFolders>
|
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\wangkaiyi\.nuget\packages\</NuGetPackageFolders>
|
||||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.9.1</NuGetToolVersion>
|
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.9.1</NuGetToolVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
<SourceRoot Include="C:\Users\huangxianguo\.nuget\packages\" />
|
<SourceRoot Include="C:\Users\wangkaiyi\.nuget\packages\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -1,2 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<Import Project="$(NuGetPackageRoot)sqlitepclraw.lib.e_sqlcipher\2.1.2\buildTransitive\net7.0\SQLitePCLRaw.lib.e_sqlcipher.targets" Condition="Exists('$(NuGetPackageRoot)sqlitepclraw.lib.e_sqlcipher\2.1.2\buildTransitive\net7.0\SQLitePCLRaw.lib.e_sqlcipher.targets')" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -2,6 +2,67 @@
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"targets": {
|
"targets": {
|
||||||
"net7.0": {
|
"net7.0": {
|
||||||
|
"BouncyCastle.NetCore/2.2.1": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/BouncyCastle.Crypto.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/BouncyCastle.Crypto.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.EntityFrameworkCore.Abstractions/7.0.15": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions/2.1.1": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/netcoreapp3.1/_._": {}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||||
|
"assetType": "runtime",
|
||||||
|
"rid": "win"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Newtonsoft.Json/13.0.3": {
|
"Newtonsoft.Json/13.0.3": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"compile": {
|
"compile": {
|
||||||
|
@ -15,6 +76,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Quartz/3.10.0": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "2.1.1",
|
||||||
|
"System.Configuration.ConfigurationManager": "6.0.1"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/Quartz.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Quartz.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Serilog/4.0.0": {
|
"Serilog/4.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"compile": {
|
"compile": {
|
||||||
|
@ -44,6 +122,161 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sqlite-net-sqlcipher/1.9.172": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"SQLitePCLRaw.bundle_e_sqlcipher": "2.1.2"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/SQLite-net.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/SQLite-net.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.bundle_e_sqlcipher/2.1.2": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"SQLitePCLRaw.lib.e_sqlcipher": "2.1.2",
|
||||||
|
"SQLitePCLRaw.provider.e_sqlcipher": "2.1.2"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.batteries_v2.dll": {}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.batteries_v2.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.core/2.1.2": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Memory": "4.5.3"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.core.dll": {}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.core.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.lib.e_sqlcipher/2.1.2": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/_._": {}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/_._": {}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/net7.0/SQLitePCLRaw.lib.e_sqlcipher.targets": {}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/alpine-arm/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "alpine-arm"
|
||||||
|
},
|
||||||
|
"runtimes/alpine-arm64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "alpine-arm64"
|
||||||
|
},
|
||||||
|
"runtimes/alpine-x64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "alpine-x64"
|
||||||
|
},
|
||||||
|
"runtimes/browser-wasm/nativeassets/net7.0/e_sqlcipher.a": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "browser-wasm"
|
||||||
|
},
|
||||||
|
"runtimes/linux-arm/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-arm"
|
||||||
|
},
|
||||||
|
"runtimes/linux-arm64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-arm64"
|
||||||
|
},
|
||||||
|
"runtimes/linux-armel/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-armel"
|
||||||
|
},
|
||||||
|
"runtimes/linux-mips64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-mips64"
|
||||||
|
},
|
||||||
|
"runtimes/linux-musl-arm/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-musl-arm"
|
||||||
|
},
|
||||||
|
"runtimes/linux-musl-arm64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-musl-arm64"
|
||||||
|
},
|
||||||
|
"runtimes/linux-musl-x64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-musl-x64"
|
||||||
|
},
|
||||||
|
"runtimes/linux-s390x/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-s390x"
|
||||||
|
},
|
||||||
|
"runtimes/linux-x64/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-x64"
|
||||||
|
},
|
||||||
|
"runtimes/linux-x86/native/libe_sqlcipher.so": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "linux-x86"
|
||||||
|
},
|
||||||
|
"runtimes/maccatalyst-arm64/native/libe_sqlcipher.dylib": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "maccatalyst-arm64"
|
||||||
|
},
|
||||||
|
"runtimes/maccatalyst-x64/native/libe_sqlcipher.dylib": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "maccatalyst-x64"
|
||||||
|
},
|
||||||
|
"runtimes/osx-arm64/native/libe_sqlcipher.dylib": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "osx-arm64"
|
||||||
|
},
|
||||||
|
"runtimes/osx-x64/native/libe_sqlcipher.dylib": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "osx-x64"
|
||||||
|
},
|
||||||
|
"runtimes/win-arm/native/e_sqlcipher.dll": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "win-arm"
|
||||||
|
},
|
||||||
|
"runtimes/win-arm64/native/e_sqlcipher.dll": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "win-arm64"
|
||||||
|
},
|
||||||
|
"runtimes/win-x64/native/e_sqlcipher.dll": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "win-x64"
|
||||||
|
},
|
||||||
|
"runtimes/win-x86/native/e_sqlcipher.dll": {
|
||||||
|
"assetType": "native",
|
||||||
|
"rid": "win-x86"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.provider.e_sqlcipher/2.1.2": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"SQLitePCLRaw.core": "2.1.2"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/SQLitePCLRaw.provider.e_sqlcipher.dll": {}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/SQLitePCLRaw.provider.e_sqlcipher.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"System.CodeDom/8.0.0": {
|
"System.CodeDom/8.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"compile": {
|
"compile": {
|
||||||
|
@ -60,6 +293,55 @@
|
||||||
"buildTransitive/net6.0/_._": {}
|
"buildTransitive/net6.0/_._": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Security.Cryptography.ProtectedData": "6.0.0",
|
||||||
|
"System.Security.Permissions": "6.0.0"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/System.Configuration.ConfigurationManager.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Configuration.ConfigurationManager.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/netcoreapp3.1/_._": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Drawing.Common/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Win32.SystemEvents": "6.0.0"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/System.Drawing.Common.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Drawing.Common.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/netcoreapp3.1/_._": {}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/unix/lib/net6.0/System.Drawing.Common.dll": {
|
||||||
|
"assetType": "runtime",
|
||||||
|
"rid": "unix"
|
||||||
|
},
|
||||||
|
"runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
|
||||||
|
"assetType": "runtime",
|
||||||
|
"rid": "win"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"System.Management/8.0.0": {
|
"System.Management/8.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -84,10 +366,176 @@
|
||||||
"rid": "win"
|
"rid": "win"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"System.Memory/4.5.3": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"ref/netcoreapp2.1/_._": {}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp2.1/_._": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Security.AccessControl/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/System.Security.AccessControl.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Security.AccessControl.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/netcoreapp3.1/_._": {}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net6.0/System.Security.AccessControl.dll": {
|
||||||
|
"assetType": "runtime",
|
||||||
|
"rid": "win"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/netcoreapp3.1/_._": {}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||||
|
"assetType": "runtime",
|
||||||
|
"rid": "win"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Security.Permissions/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Security.AccessControl": "6.0.0",
|
||||||
|
"System.Windows.Extensions": "6.0.0"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/System.Security.Permissions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Security.Permissions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"buildTransitive/netcoreapp3.1/_._": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Windows.Extensions/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Drawing.Common": "6.0.0"
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/System.Windows.Extensions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Windows.Extensions.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net6.0/System.Windows.Extensions.dll": {
|
||||||
|
"assetType": "runtime",
|
||||||
|
"rid": "win"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"libraries": {
|
"libraries": {
|
||||||
|
"BouncyCastle.NetCore/2.2.1": {
|
||||||
|
"sha512": "yfWn8JYPc4rkeM2kcsCqFVFOvwCuuQvIieGtQWcjoWxOioeznXQB3M/GmHgbCWbJjc8ycrwGhZaZPiasifYi4A==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "bouncycastle.netcore/2.2.1",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"bouncycastle.netcore.2.2.1.nupkg.sha512",
|
||||||
|
"bouncycastle.netcore.nuspec",
|
||||||
|
"lib/net45/BouncyCastle.Crypto.dll",
|
||||||
|
"lib/net45/BouncyCastle.Crypto.xml",
|
||||||
|
"lib/netstandard2.0/BouncyCastle.Crypto.dll",
|
||||||
|
"lib/netstandard2.0/BouncyCastle.Crypto.xml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Microsoft.EntityFrameworkCore.Abstractions/7.0.15": {
|
||||||
|
"sha512": "YZYw1g0EGGkWdC+ymHRccQryerGyh7XlcL8nRo3r7kkPurPJgVCCtC+PK5pBwJGPDdwCYMrwHSoAtfEWcqqQjQ==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "microsoft.entityframeworkcore.abstractions/7.0.15",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll",
|
||||||
|
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.xml",
|
||||||
|
"microsoft.entityframeworkcore.abstractions.7.0.15.nupkg.sha512",
|
||||||
|
"microsoft.entityframeworkcore.abstractions.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions/2.1.1": {
|
||||||
|
"sha512": "XRzK7ZF+O6FzdfWrlFTi1Rgj2080ZDsd46vzOjadHUB0Cz5kOvDG8vI7caa5YFrsHQpcfn0DxtjS4E46N4FZsA==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "microsoft.extensions.logging.abstractions/2.1.1",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
|
||||||
|
"microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512",
|
||||||
|
"microsoft.extensions.logging.abstractions.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||||
|
"sha512": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "microsoft.win32.systemevents/6.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"buildTransitive/netcoreapp2.0/Microsoft.Win32.SystemEvents.targets",
|
||||||
|
"buildTransitive/netcoreapp3.1/_._",
|
||||||
|
"lib/net461/Microsoft.Win32.SystemEvents.dll",
|
||||||
|
"lib/net461/Microsoft.Win32.SystemEvents.xml",
|
||||||
|
"lib/net6.0/Microsoft.Win32.SystemEvents.dll",
|
||||||
|
"lib/net6.0/Microsoft.Win32.SystemEvents.xml",
|
||||||
|
"lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.dll",
|
||||||
|
"lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.xml",
|
||||||
|
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll",
|
||||||
|
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.xml",
|
||||||
|
"microsoft.win32.systemevents.6.0.0.nupkg.sha512",
|
||||||
|
"microsoft.win32.systemevents.nuspec",
|
||||||
|
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll",
|
||||||
|
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.xml",
|
||||||
|
"runtimes/win/lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.dll",
|
||||||
|
"runtimes/win/lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.xml",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
"Newtonsoft.Json/13.0.3": {
|
"Newtonsoft.Json/13.0.3": {
|
||||||
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
|
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
@ -118,6 +566,27 @@
|
||||||
"packageIcon.png"
|
"packageIcon.png"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"Quartz/3.10.0": {
|
||||||
|
"sha512": "9LqcKWFtn5nrj7KX8VASOK8FMgrgMCT9NlHzDtYtVQlKMnOaf45329KnA4dNSmpQqJofZqEJPnsIlnQP4xNbyA==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "quartz/3.10.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"lib/net462/Quartz.dll",
|
||||||
|
"lib/net462/Quartz.xml",
|
||||||
|
"lib/net472/Quartz.dll",
|
||||||
|
"lib/net472/Quartz.xml",
|
||||||
|
"lib/net6.0/Quartz.dll",
|
||||||
|
"lib/net6.0/Quartz.xml",
|
||||||
|
"lib/netstandard2.0/Quartz.dll",
|
||||||
|
"lib/netstandard2.0/Quartz.xml",
|
||||||
|
"quartz-logo-small.png",
|
||||||
|
"quartz.3.10.0.nupkg.sha512",
|
||||||
|
"quartz.nuspec",
|
||||||
|
"quick-start.md"
|
||||||
|
]
|
||||||
|
},
|
||||||
"Serilog/4.0.0": {
|
"Serilog/4.0.0": {
|
||||||
"sha512": "2jDkUrSh5EofOp7Lx5Zgy0EB+7hXjjxE2ktTb1WVQmU00lDACR2TdROGKU0K1pDTBSJBN1PqgYpgOZF8mL7NJw==",
|
"sha512": "2jDkUrSh5EofOp7Lx5Zgy0EB+7hXjjxE2ktTb1WVQmU00lDACR2TdROGKU0K1pDTBSJBN1PqgYpgOZF8mL7NJw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
@ -171,6 +640,109 @@
|
||||||
"serilog.sinks.file.nuspec"
|
"serilog.sinks.file.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"sqlite-net-sqlcipher/1.9.172": {
|
||||||
|
"sha512": "o7W5HfQZCiaVa6MSWr87j6U2xKrDRK5F3Gj/IwdIMYuZ92ETF1wpTZPSE3cQTtaTGcg6HbIVBvU5CYMrZuZh7w==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "sqlite-net-sqlcipher/1.9.172",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"LICENSE.txt",
|
||||||
|
"Logo-low.png",
|
||||||
|
"lib/netstandard2.0/SQLite-net.dll",
|
||||||
|
"lib/netstandard2.0/SQLite-net.xml",
|
||||||
|
"sqlite-net-sqlcipher.1.9.172.nupkg.sha512",
|
||||||
|
"sqlite-net-sqlcipher.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.bundle_e_sqlcipher/2.1.2": {
|
||||||
|
"sha512": "KqemHza33Ya5FKS1xBkWiMK6b11VfQtLrxcjlh01byYyC5iburSeB2UbW3citHpWL2+Vw/zCZrR/9tVU+PjhwA==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "sqlitepclraw.bundle_e_sqlcipher/2.1.2",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"lib/monoandroid90/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"lib/net461/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"lib/net6.0-android31.0/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"lib/net6.0-android31.0/SQLitePCLRaw.batteries_v2.xml",
|
||||||
|
"lib/net6.0-ios14.0/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"lib/net6.0-ios14.2/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"lib/xamarinios10/SQLitePCLRaw.batteries_v2.dll",
|
||||||
|
"sqlitepclraw.bundle_e_sqlcipher.2.1.2.nupkg.sha512",
|
||||||
|
"sqlitepclraw.bundle_e_sqlcipher.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.core/2.1.2": {
|
||||||
|
"sha512": "A8EBepVqY2lnAp3a8jnhbgzF2tlj2S3HcJQGANTYg/TbYbKa8Z5cM1h74An/vy0svhfzT7tVY0sFmUglLgv+2g==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "sqlitepclraw.core/2.1.2",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.core.dll",
|
||||||
|
"sqlitepclraw.core.2.1.2.nupkg.sha512",
|
||||||
|
"sqlitepclraw.core.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.lib.e_sqlcipher/2.1.2": {
|
||||||
|
"sha512": "bYYFK6y9XkNzE6HJCphdbnGr8fyrZ9sibGJzZUw6e5oD0I8gv3lpDhrnz86FfIw/SHolHheoAB4cxE7YWHGVPQ==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "sqlitepclraw.lib.e_sqlcipher/2.1.2",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"buildTransitive/net461/SQLitePCLRaw.lib.e_sqlcipher.targets",
|
||||||
|
"buildTransitive/net6.0/SQLitePCLRaw.lib.e_sqlcipher.targets",
|
||||||
|
"buildTransitive/net7.0/SQLitePCLRaw.lib.e_sqlcipher.targets",
|
||||||
|
"lib/net461/_._",
|
||||||
|
"lib/netstandard2.0/_._",
|
||||||
|
"runtimes/alpine-arm/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/alpine-arm64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/alpine-x64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/browser-wasm/nativeassets/net6.0/e_sqlcipher.a",
|
||||||
|
"runtimes/browser-wasm/nativeassets/net7.0/e_sqlcipher.a",
|
||||||
|
"runtimes/linux-arm/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-arm64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-armel/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-mips64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-musl-arm/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-musl-arm64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-musl-x64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-s390x/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-x64/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/linux-x86/native/libe_sqlcipher.so",
|
||||||
|
"runtimes/maccatalyst-arm64/native/libe_sqlcipher.dylib",
|
||||||
|
"runtimes/maccatalyst-x64/native/libe_sqlcipher.dylib",
|
||||||
|
"runtimes/osx-arm64/native/libe_sqlcipher.dylib",
|
||||||
|
"runtimes/osx-x64/native/libe_sqlcipher.dylib",
|
||||||
|
"runtimes/win-arm/native/e_sqlcipher.dll",
|
||||||
|
"runtimes/win-arm64/native/e_sqlcipher.dll",
|
||||||
|
"runtimes/win-x64/native/e_sqlcipher.dll",
|
||||||
|
"runtimes/win-x86/native/e_sqlcipher.dll",
|
||||||
|
"runtimes/win10-arm/nativeassets/uap10.0/e_sqlcipher.dll",
|
||||||
|
"runtimes/win10-arm64/nativeassets/uap10.0/e_sqlcipher.dll",
|
||||||
|
"runtimes/win10-x64/nativeassets/uap10.0/e_sqlcipher.dll",
|
||||||
|
"runtimes/win10-x86/nativeassets/uap10.0/e_sqlcipher.dll",
|
||||||
|
"sqlitepclraw.lib.e_sqlcipher.2.1.2.nupkg.sha512",
|
||||||
|
"sqlitepclraw.lib.e_sqlcipher.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SQLitePCLRaw.provider.e_sqlcipher/2.1.2": {
|
||||||
|
"sha512": "9NrrdGK3SNdmgK8CAShcEFGABoo8N3LwM0XN2r0vvX+s1fw7Hej//m4VN0z6EtEqc64N6QO9np7kwDFQj4Xyyw==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "sqlitepclraw.provider.e_sqlcipher/2.1.2",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"lib/net6.0-windows7.0/SQLitePCLRaw.provider.e_sqlcipher.dll",
|
||||||
|
"lib/net6.0/SQLitePCLRaw.provider.e_sqlcipher.dll",
|
||||||
|
"lib/netstandard2.0/SQLitePCLRaw.provider.e_sqlcipher.dll",
|
||||||
|
"sqlitepclraw.provider.e_sqlcipher.2.1.2.nupkg.sha512",
|
||||||
|
"sqlitepclraw.provider.e_sqlcipher.nuspec"
|
||||||
|
]
|
||||||
|
},
|
||||||
"System.CodeDom/8.0.0": {
|
"System.CodeDom/8.0.0": {
|
||||||
"sha512": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==",
|
"sha512": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
@ -200,6 +772,70 @@
|
||||||
"useSharedDesignerContext.txt"
|
"useSharedDesignerContext.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||||
|
"sha512": "jXw9MlUu/kRfEU0WyTptAVueupqIeE3/rl0EZDMlf8pcvJnitQ8HeVEp69rZdaStXwTV72boi/Bhw8lOeO+U2w==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.configuration.configurationmanager/6.0.1",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"buildTransitive/netcoreapp2.0/System.Configuration.ConfigurationManager.targets",
|
||||||
|
"buildTransitive/netcoreapp3.1/_._",
|
||||||
|
"lib/net461/System.Configuration.ConfigurationManager.dll",
|
||||||
|
"lib/net461/System.Configuration.ConfigurationManager.xml",
|
||||||
|
"lib/net6.0/System.Configuration.ConfigurationManager.dll",
|
||||||
|
"lib/net6.0/System.Configuration.ConfigurationManager.xml",
|
||||||
|
"lib/netstandard2.0/System.Configuration.ConfigurationManager.dll",
|
||||||
|
"lib/netstandard2.0/System.Configuration.ConfigurationManager.xml",
|
||||||
|
"runtimes/win/lib/net461/System.Configuration.ConfigurationManager.dll",
|
||||||
|
"runtimes/win/lib/net461/System.Configuration.ConfigurationManager.xml",
|
||||||
|
"system.configuration.configurationmanager.6.0.1.nupkg.sha512",
|
||||||
|
"system.configuration.configurationmanager.nuspec",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"System.Drawing.Common/6.0.0": {
|
||||||
|
"sha512": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.drawing.common/6.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"buildTransitive/netcoreapp2.0/System.Drawing.Common.targets",
|
||||||
|
"buildTransitive/netcoreapp3.1/_._",
|
||||||
|
"lib/MonoAndroid10/_._",
|
||||||
|
"lib/MonoTouch10/_._",
|
||||||
|
"lib/net461/System.Drawing.Common.dll",
|
||||||
|
"lib/net461/System.Drawing.Common.xml",
|
||||||
|
"lib/net6.0/System.Drawing.Common.dll",
|
||||||
|
"lib/net6.0/System.Drawing.Common.xml",
|
||||||
|
"lib/netcoreapp3.1/System.Drawing.Common.dll",
|
||||||
|
"lib/netcoreapp3.1/System.Drawing.Common.xml",
|
||||||
|
"lib/netstandard2.0/System.Drawing.Common.dll",
|
||||||
|
"lib/netstandard2.0/System.Drawing.Common.xml",
|
||||||
|
"lib/xamarinios10/_._",
|
||||||
|
"lib/xamarinmac20/_._",
|
||||||
|
"lib/xamarintvos10/_._",
|
||||||
|
"lib/xamarinwatchos10/_._",
|
||||||
|
"runtimes/unix/lib/net6.0/System.Drawing.Common.dll",
|
||||||
|
"runtimes/unix/lib/net6.0/System.Drawing.Common.xml",
|
||||||
|
"runtimes/unix/lib/netcoreapp3.1/System.Drawing.Common.dll",
|
||||||
|
"runtimes/unix/lib/netcoreapp3.1/System.Drawing.Common.xml",
|
||||||
|
"runtimes/win/lib/net6.0/System.Drawing.Common.dll",
|
||||||
|
"runtimes/win/lib/net6.0/System.Drawing.Common.xml",
|
||||||
|
"runtimes/win/lib/netcoreapp3.1/System.Drawing.Common.dll",
|
||||||
|
"runtimes/win/lib/netcoreapp3.1/System.Drawing.Common.xml",
|
||||||
|
"system.drawing.common.6.0.0.nupkg.sha512",
|
||||||
|
"system.drawing.common.nuspec",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
"System.Management/8.0.0": {
|
"System.Management/8.0.0": {
|
||||||
"sha512": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==",
|
"sha512": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
@ -232,35 +868,178 @@
|
||||||
"system.management.nuspec",
|
"system.management.nuspec",
|
||||||
"useSharedDesignerContext.txt"
|
"useSharedDesignerContext.txt"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"System.Memory/4.5.3": {
|
||||||
|
"sha512": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.memory/4.5.3",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"lib/netcoreapp2.1/_._",
|
||||||
|
"lib/netstandard1.1/System.Memory.dll",
|
||||||
|
"lib/netstandard1.1/System.Memory.xml",
|
||||||
|
"lib/netstandard2.0/System.Memory.dll",
|
||||||
|
"lib/netstandard2.0/System.Memory.xml",
|
||||||
|
"ref/netcoreapp2.1/_._",
|
||||||
|
"system.memory.4.5.3.nupkg.sha512",
|
||||||
|
"system.memory.nuspec",
|
||||||
|
"useSharedDesignerContext.txt",
|
||||||
|
"version.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"System.Security.AccessControl/6.0.0": {
|
||||||
|
"sha512": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.security.accesscontrol/6.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"buildTransitive/netcoreapp2.0/System.Security.AccessControl.targets",
|
||||||
|
"buildTransitive/netcoreapp3.1/_._",
|
||||||
|
"lib/net461/System.Security.AccessControl.dll",
|
||||||
|
"lib/net461/System.Security.AccessControl.xml",
|
||||||
|
"lib/net6.0/System.Security.AccessControl.dll",
|
||||||
|
"lib/net6.0/System.Security.AccessControl.xml",
|
||||||
|
"lib/netstandard2.0/System.Security.AccessControl.dll",
|
||||||
|
"lib/netstandard2.0/System.Security.AccessControl.xml",
|
||||||
|
"runtimes/win/lib/net461/System.Security.AccessControl.dll",
|
||||||
|
"runtimes/win/lib/net461/System.Security.AccessControl.xml",
|
||||||
|
"runtimes/win/lib/net6.0/System.Security.AccessControl.dll",
|
||||||
|
"runtimes/win/lib/net6.0/System.Security.AccessControl.xml",
|
||||||
|
"runtimes/win/lib/netstandard2.0/System.Security.AccessControl.dll",
|
||||||
|
"runtimes/win/lib/netstandard2.0/System.Security.AccessControl.xml",
|
||||||
|
"system.security.accesscontrol.6.0.0.nupkg.sha512",
|
||||||
|
"system.security.accesscontrol.nuspec",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||||
|
"sha512": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.security.cryptography.protecteddata/6.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"buildTransitive/netcoreapp2.0/System.Security.Cryptography.ProtectedData.targets",
|
||||||
|
"buildTransitive/netcoreapp3.1/_._",
|
||||||
|
"lib/MonoAndroid10/_._",
|
||||||
|
"lib/MonoTouch10/_._",
|
||||||
|
"lib/net461/System.Security.Cryptography.ProtectedData.dll",
|
||||||
|
"lib/net461/System.Security.Cryptography.ProtectedData.xml",
|
||||||
|
"lib/net6.0/System.Security.Cryptography.ProtectedData.dll",
|
||||||
|
"lib/net6.0/System.Security.Cryptography.ProtectedData.xml",
|
||||||
|
"lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll",
|
||||||
|
"lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml",
|
||||||
|
"lib/xamarinios10/_._",
|
||||||
|
"lib/xamarinmac20/_._",
|
||||||
|
"lib/xamarintvos10/_._",
|
||||||
|
"lib/xamarinwatchos10/_._",
|
||||||
|
"runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.dll",
|
||||||
|
"runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.xml",
|
||||||
|
"runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll",
|
||||||
|
"runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.xml",
|
||||||
|
"runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll",
|
||||||
|
"runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml",
|
||||||
|
"system.security.cryptography.protecteddata.6.0.0.nupkg.sha512",
|
||||||
|
"system.security.cryptography.protecteddata.nuspec",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"System.Security.Permissions/6.0.0": {
|
||||||
|
"sha512": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.security.permissions/6.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"buildTransitive/netcoreapp2.0/System.Security.Permissions.targets",
|
||||||
|
"buildTransitive/netcoreapp3.1/_._",
|
||||||
|
"lib/net461/System.Security.Permissions.dll",
|
||||||
|
"lib/net461/System.Security.Permissions.xml",
|
||||||
|
"lib/net5.0/System.Security.Permissions.dll",
|
||||||
|
"lib/net5.0/System.Security.Permissions.xml",
|
||||||
|
"lib/net6.0/System.Security.Permissions.dll",
|
||||||
|
"lib/net6.0/System.Security.Permissions.xml",
|
||||||
|
"lib/netcoreapp3.1/System.Security.Permissions.dll",
|
||||||
|
"lib/netcoreapp3.1/System.Security.Permissions.xml",
|
||||||
|
"lib/netstandard2.0/System.Security.Permissions.dll",
|
||||||
|
"lib/netstandard2.0/System.Security.Permissions.xml",
|
||||||
|
"runtimes/win/lib/net461/System.Security.Permissions.dll",
|
||||||
|
"runtimes/win/lib/net461/System.Security.Permissions.xml",
|
||||||
|
"system.security.permissions.6.0.0.nupkg.sha512",
|
||||||
|
"system.security.permissions.nuspec",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"System.Windows.Extensions/6.0.0": {
|
||||||
|
"sha512": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "system.windows.extensions/6.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"Icon.png",
|
||||||
|
"LICENSE.TXT",
|
||||||
|
"THIRD-PARTY-NOTICES.TXT",
|
||||||
|
"lib/net6.0/System.Windows.Extensions.dll",
|
||||||
|
"lib/net6.0/System.Windows.Extensions.xml",
|
||||||
|
"lib/netcoreapp3.1/System.Windows.Extensions.dll",
|
||||||
|
"lib/netcoreapp3.1/System.Windows.Extensions.xml",
|
||||||
|
"runtimes/win/lib/net6.0/System.Windows.Extensions.dll",
|
||||||
|
"runtimes/win/lib/net6.0/System.Windows.Extensions.xml",
|
||||||
|
"runtimes/win/lib/netcoreapp3.1/System.Windows.Extensions.dll",
|
||||||
|
"runtimes/win/lib/netcoreapp3.1/System.Windows.Extensions.xml",
|
||||||
|
"system.windows.extensions.6.0.0.nupkg.sha512",
|
||||||
|
"system.windows.extensions.nuspec",
|
||||||
|
"useSharedDesignerContext.txt"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"projectFileDependencyGroups": {
|
"projectFileDependencyGroups": {
|
||||||
"net7.0": [
|
"net7.0": [
|
||||||
|
"BouncyCastle.NetCore >= 2.2.1",
|
||||||
|
"Microsoft.EntityFrameworkCore.Abstractions >= 7.0.15",
|
||||||
"Newtonsoft.Json >= 13.0.3",
|
"Newtonsoft.Json >= 13.0.3",
|
||||||
|
"Quartz >= 3.10.0",
|
||||||
"Serilog >= 4.0.0",
|
"Serilog >= 4.0.0",
|
||||||
"Serilog.Sinks.File >= 5.0.1-dev-00972",
|
"Serilog.Sinks.File >= 5.0.1-dev-00972",
|
||||||
"System.Management >= 8.0.0"
|
"System.Management >= 8.0.0",
|
||||||
|
"sqlite-net-sqlcipher >= 1.9.172"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"packageFolders": {
|
"packageFolders": {
|
||||||
"C:\\Users\\huangxianguo\\.nuget\\packages\\": {}
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\": {}
|
||||||
},
|
},
|
||||||
"project": {
|
"project": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"restore": {
|
"restore": {
|
||||||
"projectUniqueName": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
"projectUniqueName": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
||||||
"projectName": "MasstransferCommon",
|
"projectName": "MasstransferCommon",
|
||||||
"projectPath": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
"projectPath": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
||||||
"packagesPath": "C:\\Users\\huangxianguo\\.nuget\\packages\\",
|
"packagesPath": "C:\\Users\\wangkaiyi\\.nuget\\packages\\",
|
||||||
"outputPath": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\obj\\",
|
"outputPath": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\obj\\",
|
||||||
"projectStyle": "PackageReference",
|
"projectStyle": "PackageReference",
|
||||||
"configFilePaths": [
|
"configFilePaths": [
|
||||||
"C:\\Users\\huangxianguo\\AppData\\Roaming\\NuGet\\NuGet.Config"
|
"C:\\Users\\wangkaiyi\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||||
],
|
],
|
||||||
"originalTargetFrameworks": [
|
"originalTargetFrameworks": [
|
||||||
"net7.0"
|
"net7.0"
|
||||||
],
|
],
|
||||||
"sources": {
|
"sources": {
|
||||||
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||||
"https://api.nuget.org/v3/index.json": {}
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
},
|
},
|
||||||
"frameworks": {
|
"frameworks": {
|
||||||
|
@ -279,10 +1058,22 @@
|
||||||
"net7.0": {
|
"net7.0": {
|
||||||
"targetAlias": "net7.0",
|
"targetAlias": "net7.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"BouncyCastle.NetCore": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[2.2.1, )"
|
||||||
|
},
|
||||||
|
"Microsoft.EntityFrameworkCore.Abstractions": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[7.0.15, )"
|
||||||
|
},
|
||||||
"Newtonsoft.Json": {
|
"Newtonsoft.Json": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[13.0.3, )"
|
"version": "[13.0.3, )"
|
||||||
},
|
},
|
||||||
|
"Quartz": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[3.10.0, )"
|
||||||
|
},
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[4.0.0, )"
|
"version": "[4.0.0, )"
|
||||||
|
@ -294,6 +1085,10 @@
|
||||||
"System.Management": {
|
"System.Management": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[8.0.0, )"
|
"version": "[8.0.0, )"
|
||||||
|
},
|
||||||
|
"sqlite-net-sqlcipher": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[1.9.172, )"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"imports": [
|
"imports": [
|
||||||
|
@ -312,7 +1107,7 @@
|
||||||
"privateAssets": "all"
|
"privateAssets": "all"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.407\\RuntimeIdentifierGraph.json"
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.203\\RuntimeIdentifierGraph.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,31 @@
|
||||||
{
|
{
|
||||||
"version": 2,
|
"version": 2,
|
||||||
"dgSpecHash": "G7BHmT4HD4EhvdtwN5WLC+yFWrgNE7L93eN14kEaAdsPlQnFPr/MP4gc5x29sduC6A/XHEEuEtZunQUaIsn1Dw==",
|
"dgSpecHash": "unISIat3Z07bxHbfaQ5fFQ2qWX+GR/WwRL4AsE9kzvUrz9UOHareaVBe1wl0TMonTmxrFaWype+ijI+XFQaqOg==",
|
||||||
"success": true,
|
"success": true,
|
||||||
"projectFilePath": "C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
"projectFilePath": "C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj",
|
||||||
"expectedPackageFiles": [
|
"expectedPackageFiles": [
|
||||||
"C:\\Users\\huangxianguo\\.nuget\\packages\\newtonsoft.json\\13.0.3\\newtonsoft.json.13.0.3.nupkg.sha512",
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\bouncycastle.netcore\\2.2.1\\bouncycastle.netcore.2.2.1.nupkg.sha512",
|
||||||
"C:\\Users\\huangxianguo\\.nuget\\packages\\serilog\\4.0.0\\serilog.4.0.0.nupkg.sha512",
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\7.0.15\\microsoft.entityframeworkcore.abstractions.7.0.15.nupkg.sha512",
|
||||||
"C:\\Users\\huangxianguo\\.nuget\\packages\\serilog.sinks.file\\5.0.1-dev-00972\\serilog.sinks.file.5.0.1-dev-00972.nupkg.sha512",
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\2.1.1\\microsoft.extensions.logging.abstractions.2.1.1.nupkg.sha512",
|
||||||
"C:\\Users\\huangxianguo\\.nuget\\packages\\system.codedom\\8.0.0\\system.codedom.8.0.0.nupkg.sha512",
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\microsoft.win32.systemevents\\6.0.0\\microsoft.win32.systemevents.6.0.0.nupkg.sha512",
|
||||||
"C:\\Users\\huangxianguo\\.nuget\\packages\\system.management\\8.0.0\\system.management.8.0.0.nupkg.sha512"
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\newtonsoft.json\\13.0.3\\newtonsoft.json.13.0.3.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\quartz\\3.10.0\\quartz.3.10.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\serilog\\4.0.0\\serilog.4.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\serilog.sinks.file\\5.0.1-dev-00972\\serilog.sinks.file.5.0.1-dev-00972.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\sqlite-net-sqlcipher\\1.9.172\\sqlite-net-sqlcipher.1.9.172.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\sqlitepclraw.bundle_e_sqlcipher\\2.1.2\\sqlitepclraw.bundle_e_sqlcipher.2.1.2.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\sqlitepclraw.core\\2.1.2\\sqlitepclraw.core.2.1.2.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\sqlitepclraw.lib.e_sqlcipher\\2.1.2\\sqlitepclraw.lib.e_sqlcipher.2.1.2.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\sqlitepclraw.provider.e_sqlcipher\\2.1.2\\sqlitepclraw.provider.e_sqlcipher.2.1.2.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.codedom\\8.0.0\\system.codedom.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.configuration.configurationmanager\\6.0.1\\system.configuration.configurationmanager.6.0.1.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.drawing.common\\6.0.0\\system.drawing.common.6.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.management\\8.0.0\\system.management.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.memory\\4.5.3\\system.memory.4.5.3.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.security.accesscontrol\\6.0.0\\system.security.accesscontrol.6.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.security.cryptography.protecteddata\\6.0.0\\system.security.cryptography.protecteddata.6.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.security.permissions\\6.0.0\\system.security.permissions.6.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\wangkaiyi\\.nuget\\packages\\system.windows.extensions\\6.0.0\\system.windows.extensions.6.0.0.nupkg.sha512"
|
||||||
],
|
],
|
||||||
"logs": []
|
"logs": []
|
||||||
}
|
}
|
|
@ -1 +1 @@
|
||||||
"restore":{"projectUniqueName":"C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj","projectName":"MasstransferCommon","projectPath":"C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj","outputPath":"C:\\workspace\\code_repos\\haiju\\MasstransferExporter\\MasstransferCommon\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net7.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net7.0":{"targetAlias":"net7.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net7.0":{"targetAlias":"net7.0","dependencies":{"Newtonsoft.Json":{"target":"Package","version":"[13.0.3, )"},"Serilog":{"target":"Package","version":"[4.0.0, )"},"Serilog.Sinks.File":{"target":"Package","version":"[5.0.1-dev-00972, )"},"System.Management":{"target":"Package","version":"[8.0.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\7.0.407\\RuntimeIdentifierGraph.json"}}
|
"restore":{"projectUniqueName":"C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj","projectName":"MasstransferCommon","projectPath":"C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\MasstransferCommon.csproj","outputPath":"C:\\Users\\wangkaiyi\\RiderProjects\\MasstransferExporter\\MasstransferCommon\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net7.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net7.0":{"targetAlias":"net7.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net7.0":{"targetAlias":"net7.0","dependencies":{"BouncyCastle.NetCore":{"target":"Package","version":"[2.2.1, )"},"Microsoft.EntityFrameworkCore.Abstractions":{"target":"Package","version":"[7.0.15, )"},"Newtonsoft.Json":{"target":"Package","version":"[13.0.3, )"},"Quartz":{"target":"Package","version":"[3.10.0, )"},"Serilog":{"target":"Package","version":"[4.0.0, )"},"Serilog.Sinks.File":{"target":"Package","version":"[5.0.1-dev-00972, )"},"System.Management":{"target":"Package","version":"[8.0.0, )"},"sqlite-net-sqlcipher":{"target":"Package","version":"[1.9.172, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\8.0.203\\RuntimeIdentifierGraph.json"}}
|
|
@ -1 +1 @@
|
||||||
17173821281053621
|
17234348310820990
|
|
@ -1 +1 @@
|
||||||
17187849294453387
|
17234348310820990
|
|
@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MasstransferInfrastructure"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MasstransferCommon", "MasstransferCommon\MasstransferCommon.csproj", "{66C6D73C-BADB-4E28-9C83-E701B019626D}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MasstransferCommon", "MasstransferCommon\MasstransferCommon.csproj", "{66C6D73C-BADB-4E28-9C83-E701B019626D}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MasstransferCommon.Tests", "MasstransferCommon.Tests\MasstransferCommon.Tests.csproj", "{DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -24,5 +26,9 @@ Global
|
||||||
{66C6D73C-BADB-4E28-9C83-E701B019626D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{66C6D73C-BADB-4E28-9C83-E701B019626D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{66C6D73C-BADB-4E28-9C83-E701B019626D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{66C6D73C-BADB-4E28-9C83-E701B019626D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{66C6D73C-BADB-4E28-9C83-E701B019626D}.Release|Any CPU.Build.0 = Release|Any CPU
|
{66C6D73C-BADB-4E28-9C83-E701B019626D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
|
<s:String x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/TestProjectMapping/=66C6D73C_002DBADB_002D4E28_002D9C83_002DE701B019626D/@EntryIndexedValue">MasstransferCommon.Tests</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/TestTemplateMapping/=MSTest/@EntryIndexedValue">d6790ab7-33c2-4425-b2c9-51480cd1a852</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=df21ed25_002D5064_002D4b51_002D96dd_002D1d6a1eb4ab6c/@EntryIndexedValue"><SessionState ContinuousTestingMode="0" IsActive="True" Name="Test" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
||||||
|
<TestAncestor>
|
||||||
|
<TestId>MSTest::DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C::net7.0::MasstransferCommon.Tests.Utils.JsonUtilTest.Test</TestId>
|
||||||
|
</TestAncestor>
|
||||||
|
</SessionState></s:String></wpf:ResourceDictionary>
|
|
@ -0,0 +1,63 @@
|
||||||
|
using MasstransferCommon.Atrributes;
|
||||||
|
using MasstransferCommon.Events;
|
||||||
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using Masuit.Tools;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 配置服务
|
||||||
|
/// </summary>
|
||||||
|
public class ConfigService : Instant
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 监听配置下发事件
|
||||||
|
/// </summary>
|
||||||
|
private static async Task ListenConfigIssuedEvent(EventType type, bool start)
|
||||||
|
{
|
||||||
|
await MessageQueueHelper.Subscribe(Topics.DownloadConfigData, HandleConfigIssuedEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理接收到的配置下发事件,根据配置类型执行不同的操作
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="topic"></param>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
private static void HandleConfigIssuedEvent(string topic, ConfigData<object> data)
|
||||||
|
{
|
||||||
|
if (data.IsNullOrEmpty()) return;
|
||||||
|
|
||||||
|
var type = data.Type;
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case "SYSTEM":
|
||||||
|
var systemParamsDto = JsonUtil.FromJson<SystemParamsDTO>(data.Param.ToString());
|
||||||
|
if (systemParamsDto != null)
|
||||||
|
{
|
||||||
|
SystemParamsService.HandleSystemParamsIssuedEvent(systemParamsDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "FORMULA":
|
||||||
|
{
|
||||||
|
var formulaDto = JsonUtil.FromJson<FormulaDTO>(data.Param.ToString());
|
||||||
|
if (formulaDto != null)
|
||||||
|
{
|
||||||
|
formulaDto.Name = data.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
FormulaService.HandleFormulaIssuedEvent(formulaDto);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialized()
|
||||||
|
{
|
||||||
|
EventBus<bool>.AddEventHandler(EventType.StartUp, ListenConfigIssuedEvent);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,300 @@
|
||||||
|
using MasstransferCommon.Atrributes;
|
||||||
|
using MasstransferCommon.Events;
|
||||||
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommunicate.Minio;
|
||||||
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using MasstransferInfrastructure.Database.Sqlite;
|
||||||
|
using Masuit.Tools;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 坐标信息业务类
|
||||||
|
/// </summary>
|
||||||
|
public class CoordinateService : Instant
|
||||||
|
{
|
||||||
|
private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
|
||||||
|
|
||||||
|
private static readonly MinioHelper Minio = MinioHelper.GetInstance();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 坐标信息导出
|
||||||
|
/// 每5分钟自动上报一次当前时间内的坐标信息
|
||||||
|
/// </summary>
|
||||||
|
public static Task CoordinateExporter()
|
||||||
|
{
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
var temp = Path.Combine(Environment.CurrentDirectory, "temp");
|
||||||
|
|
||||||
|
// 先清理上次的临时空间
|
||||||
|
if (Directory.Exists(temp))
|
||||||
|
{
|
||||||
|
Directory.Delete(temp, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 然后创建临时目录
|
||||||
|
Directory.CreateDirectory(temp);
|
||||||
|
|
||||||
|
var endTime = DateTime.Now;
|
||||||
|
var startTime = endTime.AddMinutes(-5);
|
||||||
|
|
||||||
|
WaferCoordinateExporter(startTime, endTime);
|
||||||
|
SubstrateCoordinateExporter(startTime, endTime);
|
||||||
|
PathCoordinateExporter(startTime, endTime);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传mark点坐标文件
|
||||||
|
/// </summary>
|
||||||
|
private static async Task MarkPointExporter(Substrate substrate)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Environment.CurrentDirectory, "temp", "mark.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var batchCode = substrate.BatchNo;
|
||||||
|
var substrateCode = substrate.SubstrateCode;
|
||||||
|
|
||||||
|
await File.WriteAllTextAsync(path, substrate.SubstrateMarkPointJson);
|
||||||
|
|
||||||
|
var fileName = $"{Constants.SN}/{batchCode}/{substrateCode}/MARK/mark.json";
|
||||||
|
|
||||||
|
await Minio.UploadFileAsync("coordinate", fileName, path);
|
||||||
|
|
||||||
|
// 上传完成后删除本地的文件
|
||||||
|
File.Delete(path);
|
||||||
|
|
||||||
|
var data = new CoordinateData()
|
||||||
|
{
|
||||||
|
FileType = "MARK",
|
||||||
|
BatchNumber = batchCode,
|
||||||
|
BizNumber = substrateCode
|
||||||
|
};
|
||||||
|
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传wafer坐标文件
|
||||||
|
/// </summary>
|
||||||
|
private static async void WaferCoordinateExporter(DateTime startTime, DateTime endTime)
|
||||||
|
{
|
||||||
|
// 找出当前时间段内所有的晶环信息
|
||||||
|
var wafers = Db.Query<Wafer>("SELECT * FROM wafers WHERE create_time >= ? AND create_time <= ?", startTime,
|
||||||
|
endTime);
|
||||||
|
|
||||||
|
foreach (var wafer in wafers)
|
||||||
|
{
|
||||||
|
await UploadWaferCoords(wafer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产晶环坐标文件并上传
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="wafer"></param>
|
||||||
|
private static async Task UploadWaferCoords(Wafer wafer)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{wafer.Id}.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await File.WriteAllTextAsync(path, wafer.CoordinateJson);
|
||||||
|
|
||||||
|
var fileName = $"{Constants.SN}/{wafer.BatchCode}/{wafer.WaferCode}/WAFER/wafer.json";
|
||||||
|
|
||||||
|
await Minio.UploadFileAsync("coordinate", fileName, path);
|
||||||
|
|
||||||
|
var data = new CoordinateData()
|
||||||
|
{
|
||||||
|
FileType = "WAFER",
|
||||||
|
BatchNumber = wafer.BatchCode,
|
||||||
|
BizNumber = wafer.WaferCode
|
||||||
|
};
|
||||||
|
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传基板坐标文件
|
||||||
|
/// </summary>
|
||||||
|
private static async void SubstrateCoordinateExporter(DateTime startTime, DateTime endTime)
|
||||||
|
{
|
||||||
|
// 找出当前时间段内的基板信息
|
||||||
|
var substrates = Db.Query<Substrate>("SELECT * FROM substrates WHERE create_time >= ? AND create_time <= ?",
|
||||||
|
startTime, endTime);
|
||||||
|
foreach (var substrate in substrates)
|
||||||
|
{
|
||||||
|
// 上传mark 点坐标信息
|
||||||
|
await MarkPointExporter(substrate);
|
||||||
|
|
||||||
|
await UploadSubstrateCoords(substrate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传基板坐标文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="substrate"></param>
|
||||||
|
private static async Task UploadSubstrateCoords(Substrate substrate)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{substrate.Id}.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await File.WriteAllTextAsync(path, substrate.CoordinateJson);
|
||||||
|
|
||||||
|
var fileName = $"{Constants.SN}/{substrate.BatchNo}/{substrate.SubstrateCode}/PCB/pcb.json";
|
||||||
|
|
||||||
|
await Minio.UploadFileAsync("coordinate", fileName, path);
|
||||||
|
|
||||||
|
var data = new CoordinateData()
|
||||||
|
{
|
||||||
|
FileType = "PCB",
|
||||||
|
BatchNumber = substrate.BatchNo,
|
||||||
|
BizNumber = substrate.SubstrateCode
|
||||||
|
};
|
||||||
|
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传动打路径坐标文件
|
||||||
|
/// </summary>
|
||||||
|
private static async void PathCoordinateExporter(DateTime startTime, DateTime endTime)
|
||||||
|
{
|
||||||
|
// 找出当前时间段内的打路径信息
|
||||||
|
var records = Db.Query<StrikeRecord>("SELECT * FROM strike_records WHERE create_time >= ? AND create_time <= ?",
|
||||||
|
startTime, endTime);
|
||||||
|
|
||||||
|
foreach (var record in records)
|
||||||
|
{
|
||||||
|
await UploadStrikeRecord(record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传动打记录
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="record"></param>
|
||||||
|
private static async Task UploadStrikeRecord(StrikeRecord record)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{record.Id}.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await File.WriteAllTextAsync(path, record.ToJsonString());
|
||||||
|
|
||||||
|
var fileName = $"{Constants.SN}/{record.BatchNo}/{record.SubstrateCode}/ROUTE/{record.Id}.json";
|
||||||
|
|
||||||
|
await Minio.UploadFileAsync("coordinate", fileName, path);
|
||||||
|
|
||||||
|
var data = new CoordinateData()
|
||||||
|
{
|
||||||
|
FileType = "ROUTE",
|
||||||
|
BatchNumber = record.BatchNo,
|
||||||
|
BizNumber = record.SubstrateCode
|
||||||
|
};
|
||||||
|
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialized()
|
||||||
|
{
|
||||||
|
EventBus<bool>.AddEventHandler(EventType.StartUp, ListenCoordinateQueryEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task ListenCoordinateQueryEvent(EventType type, bool start)
|
||||||
|
{
|
||||||
|
await MessageQueueHelper.Subscribe(Topics.QueryCoordinate, QueryCoordinate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理查询坐标请求
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="topic"></param>
|
||||||
|
/// <param name="dto"></param>
|
||||||
|
private static async Task QueryCoordinate(string topic, QueryCoordinateDTO? dto)
|
||||||
|
{
|
||||||
|
if (dto == null) return;
|
||||||
|
|
||||||
|
var temp = Path.Combine(Environment.CurrentDirectory, "temp");
|
||||||
|
|
||||||
|
// 先清理上次的临时空间
|
||||||
|
if (Directory.Exists(temp))
|
||||||
|
{
|
||||||
|
Directory.Delete(temp, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 然后创建临时目录
|
||||||
|
Directory.CreateDirectory(temp);
|
||||||
|
|
||||||
|
|
||||||
|
var batchNumber = dto.BatchNumber;
|
||||||
|
var bizNumber = dto.BizNumber;
|
||||||
|
var fileType = dto.FileType;
|
||||||
|
|
||||||
|
// 根据文件类型查询对应的文件
|
||||||
|
if ("WAFER".Equals(fileType))
|
||||||
|
{
|
||||||
|
// 查询的是晶圆的数据
|
||||||
|
var wafer = Db.Query<Wafer>(
|
||||||
|
"SELECT * FROM wafers WHERE wafer_code = ? and batch_code = ? order by create_time desc limit 1",
|
||||||
|
bizNumber,
|
||||||
|
batchNumber).FirstOrDefault();
|
||||||
|
if (wafer == null) return;
|
||||||
|
|
||||||
|
// 生产晶圆坐标文件并上传
|
||||||
|
await UploadWaferCoords(wafer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 对应查询的是基板的数据
|
||||||
|
var substrate = Db.Query<Substrate>(
|
||||||
|
"SELECT * FROM substrates WHERE substrate_code = ? and batch_no = ? order by create_time desc limit 1",
|
||||||
|
bizNumber,
|
||||||
|
batchNumber).FirstOrDefault();
|
||||||
|
if (substrate == null) return;
|
||||||
|
|
||||||
|
switch (fileType)
|
||||||
|
{
|
||||||
|
case "MARK":
|
||||||
|
// 上传基板mark点坐标
|
||||||
|
await MarkPointExporter(substrate);
|
||||||
|
break;
|
||||||
|
case "PCB":
|
||||||
|
// 上传基板坐标
|
||||||
|
await UploadSubstrateCoords(substrate);
|
||||||
|
break;
|
||||||
|
case "PATH":
|
||||||
|
{
|
||||||
|
// 上传打路径坐标
|
||||||
|
// 查询跟这个基板的动打记录
|
||||||
|
const string sql = "SELECT * FROM strike_records WHERE substrate_id = ?";
|
||||||
|
var records = Db.Query<StrikeRecord>(sql, substrate.Id);
|
||||||
|
foreach (var record in records)
|
||||||
|
{
|
||||||
|
await UploadStrikeRecord(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using MasstransferInfrastructure.Database.Sqlite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter;
|
||||||
|
|
||||||
|
public class FaultRecordService
|
||||||
|
{
|
||||||
|
private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 每5分钟上传一次故障数据
|
||||||
|
/// </summary>
|
||||||
|
public static async Task FaultRecordDataExporter()
|
||||||
|
{
|
||||||
|
var endTime = DateTime.Now;
|
||||||
|
var startTime = endTime.AddMinutes(-5);
|
||||||
|
|
||||||
|
// 查询5分钟内的故障记录
|
||||||
|
var sql = "SELECT * FROM fault_records WHERE update_time >= ? AND update_time <= ?";
|
||||||
|
var records = Db.Query<FaultRecord>(sql, startTime, endTime);
|
||||||
|
foreach (var record in records)
|
||||||
|
{
|
||||||
|
var dto = new FaultRecordDTO()
|
||||||
|
{
|
||||||
|
ErrorCode = record.FaultCode,
|
||||||
|
Timestamp = record.UpdateTime,
|
||||||
|
Status = record.Solved ? 0 : 1
|
||||||
|
};
|
||||||
|
|
||||||
|
await MessageQueueHelper.Publish(Topics.ReportFaultRecord, dto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,272 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Reflection;
|
||||||
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using MasstransferInfrastructure.Database.Sqlite;
|
||||||
|
using Masuit.Tools;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 配方管理相关业务类
|
||||||
|
/// </summary>
|
||||||
|
public class FormulaService
|
||||||
|
{
|
||||||
|
private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理配方下发事件
|
||||||
|
/// </summary>
|
||||||
|
public static void HandleFormulaIssuedEvent(FormulaDTO formulaDto)
|
||||||
|
{
|
||||||
|
if (formulaDto.IsNullOrEmpty() || formulaDto.Name.IsNullOrEmpty()) return;
|
||||||
|
|
||||||
|
var name = formulaDto.Name;
|
||||||
|
|
||||||
|
var formula = GetFormulaByName(name);
|
||||||
|
|
||||||
|
if (formula.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
// 当前不存在这个配方,则去创建这个配方
|
||||||
|
formula = new Formula()
|
||||||
|
{
|
||||||
|
Name = name,
|
||||||
|
Code = formulaDto.Code,
|
||||||
|
Description = formulaDto.Description,
|
||||||
|
Selected = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
Db.Insert(formula);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入其他的配方记录
|
||||||
|
var formulaId = formula.Id;
|
||||||
|
|
||||||
|
var algorithmParams = formulaDto.AlgorithmParams;
|
||||||
|
var altimetryParams = formulaDto.AltimetryParams;
|
||||||
|
var needleSetting = formulaDto.NeedleSetting;
|
||||||
|
var pcbSetting = formulaDto.PcbSetting;
|
||||||
|
var waferSetting = formulaDto.WaferSetting;
|
||||||
|
var jobSetting = formulaDto.JobSetting;
|
||||||
|
|
||||||
|
if (algorithmParams != null)
|
||||||
|
{
|
||||||
|
var algorithmParamsByFormulaId = GetAlgorithmParamsByFormulaId(formulaId);
|
||||||
|
if (algorithmParamsByFormulaId != null)
|
||||||
|
{
|
||||||
|
algorithmParams.Id = algorithmParamsByFormulaId.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(algorithmParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (altimetryParams != null)
|
||||||
|
{
|
||||||
|
var altimetryParamsByFormulaId = GetAltimetryParamsByFormulaId(formulaId);
|
||||||
|
if (altimetryParamsByFormulaId != null)
|
||||||
|
{
|
||||||
|
altimetryParams.Id = altimetryParamsByFormulaId.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(altimetryParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needleSetting != null)
|
||||||
|
{
|
||||||
|
var needleSettingByFormulaId = GetNeedleSettingByFormulaId(formulaId);
|
||||||
|
if (needleSettingByFormulaId != null)
|
||||||
|
{
|
||||||
|
needleSetting.Id = needleSettingByFormulaId.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(needleSetting);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pcbSetting != null)
|
||||||
|
{
|
||||||
|
var pcbSettingByFormulaId = GetPcbSettingByFormulaId(formulaId);
|
||||||
|
if (pcbSettingByFormulaId != null)
|
||||||
|
{
|
||||||
|
pcbSetting.Id = pcbSettingByFormulaId.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(pcbSetting);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (waferSetting != null)
|
||||||
|
{
|
||||||
|
var waferSettingByFormulaId = GetWaferSettingByFormulaId(formulaId);
|
||||||
|
if (waferSettingByFormulaId != null)
|
||||||
|
{
|
||||||
|
waferSetting.Id = waferSettingByFormulaId.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(waferSetting);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jobSetting != null)
|
||||||
|
{
|
||||||
|
var jobSettingByFormulaId = GetJobSettingByFormulaId(formulaId);
|
||||||
|
if (jobSettingByFormulaId != null)
|
||||||
|
{
|
||||||
|
jobSetting.Id = jobSettingByFormulaId.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(jobSetting);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有的配方列表
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static List<FormulaDTO> GetAllFormulas()
|
||||||
|
{
|
||||||
|
var formulas = Db.ListAll<Formula>();
|
||||||
|
return BeanUtil.CopyProperties<FormulaDTO>(formulas);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Formula? GetFormulaByName(string name)
|
||||||
|
{
|
||||||
|
return Db.Query<Formula>("select * from formulas where name = ?", name).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取当前已经启用的配方
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static Formula? GetSelectedFormula()
|
||||||
|
{
|
||||||
|
return Db.Query<Formula>("select * from formulas where selected = 1").FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据配方id来获取配方信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static FormulaDTO? GetFormulaById(string id)
|
||||||
|
{
|
||||||
|
var formula = Db.GetById<Formula>(id);
|
||||||
|
if (formula == null) return null;
|
||||||
|
var dto = BeanUtil.CopyProperties<FormulaDTO>(formula);
|
||||||
|
dto.WorkBenchSetting = GetWorkBenchSettingByFormulaId(id) ?? new WorkBenchSetting();
|
||||||
|
dto.WaferSetting = GetWaferSettingByFormulaId(id) ?? new WaferSetting();
|
||||||
|
dto.PcbSetting = GetPcbSettingByFormulaId(id) ?? new PcbSetting();
|
||||||
|
dto.NeedleSetting = GetNeedleSettingByFormulaId(id) ?? new NeedleSetting();
|
||||||
|
dto.AltimetryParams = GetAltimetryParamsByFormulaId(id) ?? new AltimetryParams();
|
||||||
|
dto.JobSetting = GetJobSettingByFormulaId(id) ?? new JobSetting();
|
||||||
|
dto.AlgorithmParams = GetAlgorithmParamsByFormulaId(id) ?? new AlgorithmParams();
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static NeedleSetting? GetNeedleSettingByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<NeedleSetting>("select * from needle_settings where formulaId = ?", formulaId)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WorkBenchSetting? GetWorkBenchSettingByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<WorkBenchSetting>("select * from work_bench_settings where formulaId = ?", formulaId)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PcbSetting? GetPcbSettingByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<PcbSetting>("select * from pcb_settings where formulaId = ?", formulaId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static WaferSetting? GetWaferSettingByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<WaferSetting>("select * from wafer_settings where formulaId = ?", formulaId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static JobSetting? GetJobSettingByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<JobSetting>("select * from job_settings where formulaId = ?", formulaId)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AlgorithmParams? GetAlgorithmParamsByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<AlgorithmParams>("select * from algorithm_params where formula_id = ?", formulaId)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AltimetryParams? GetAltimetryParamsByFormulaId(string formulaId)
|
||||||
|
{
|
||||||
|
return Db.Query<AltimetryParams>("select * from altimetry_params where formula_id = ?", formulaId)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 定时上报配方数据
|
||||||
|
/// </summary>
|
||||||
|
public static async Task FormulaDataExporter()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var formulas = GetAllFormulas();
|
||||||
|
|
||||||
|
var dto = formulas[0];
|
||||||
|
|
||||||
|
// 推送配方字段名称字典内容
|
||||||
|
var mapping = new Dictionary<string, object>();
|
||||||
|
GetFormulaFieldNameMapping(dto.GetType(), mapping);
|
||||||
|
|
||||||
|
await MessageQueueHelper.Publish(Topics.ReportConfigDictionary, mapping);
|
||||||
|
|
||||||
|
foreach (var formula in formulas)
|
||||||
|
{
|
||||||
|
var formulaDto = GetFormulaById(formula.Id);
|
||||||
|
if (formulaDto == null) continue;
|
||||||
|
var data = new ConfigData<FormulaDTO>()
|
||||||
|
{
|
||||||
|
Name = formulaDto.Name,
|
||||||
|
Param = formulaDto,
|
||||||
|
Type = "FORMULA"
|
||||||
|
};
|
||||||
|
|
||||||
|
await MessageQueueHelper.Publish(Topics.ReportConfigData, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"定时上报配方数据失败: {e}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取配方字段名称映射
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static void GetFormulaFieldNameMapping(Type type, IDictionary<string, object> mapping)
|
||||||
|
{
|
||||||
|
var fields = type.GetProperties();
|
||||||
|
foreach (var field in fields)
|
||||||
|
{
|
||||||
|
// 判定当前的属性是否为 Entity的子类
|
||||||
|
if (field.PropertyType.IsSubclassOf(typeof(Entity)))
|
||||||
|
{
|
||||||
|
var subMapping = new Dictionary<string, object>();
|
||||||
|
GetFormulaFieldNameMapping(field.PropertyType, subMapping);
|
||||||
|
mapping.Add(field.Name, subMapping);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var description = field.GetCustomAttribute<DescriptionAttribute>();
|
||||||
|
if (description != null)
|
||||||
|
{
|
||||||
|
mapping.Add(field.Name, description.Description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Atrributes;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 算法参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("algorithm_params")]
|
||||||
|
[Description("算法参数")]
|
||||||
|
public class AlgorithmParams : Entity
|
||||||
|
{
|
||||||
|
[Column("formula_id"), Description("配方Id"), Hide]
|
||||||
|
public string FormulaId { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_detect_angle_start")]
|
||||||
|
[Description("芯片识别开始角度")]
|
||||||
|
public double ChipDetectAngleStart { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_detect_angle_extent")]
|
||||||
|
[Description("芯片识别角度范围")]
|
||||||
|
public double ChipDetectAngleExtent { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_max_angle")]
|
||||||
|
[Description("芯片识别最大角度")]
|
||||||
|
public double ChipMaxAngle { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_detect_min_score")]
|
||||||
|
[Description("芯片识别最小分数 eg:0.6")]
|
||||||
|
public double ChipDetectMinScore { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_detect_max_overlap")]
|
||||||
|
[Description("芯片识别最大重叠 eg:0.5")]
|
||||||
|
public double ChipDetectMaxOverlap { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_detect_greediness")]
|
||||||
|
[Description("芯片识别贪婪度 eg:0.9")]
|
||||||
|
public double ChipDetectGreediness { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_chip_detect_angle_start")]
|
||||||
|
[Description("焊点识别 开始角度")]
|
||||||
|
public int SolderJointChipDetectAngleStart { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_chip_detect_angle_extent")]
|
||||||
|
[Description("焊点识别 角度范围")]
|
||||||
|
public int SolderJointChipDetectAngleExtent { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_chip_detect_min_score")]
|
||||||
|
[Description("焊点识别最小分数 eg:0.6")]
|
||||||
|
public double SolderJointChipDetectMinScore { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_chip_detect_max_overlap")]
|
||||||
|
[Description("焊点识别贪婪度 eg:0.9")]
|
||||||
|
public double SolderJointChipDetectGreediness { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_amount_per_row")]
|
||||||
|
[Description("每行芯片数量")]
|
||||||
|
public int ChipAmountPerRow { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_padding_x")]
|
||||||
|
[Description("芯片坐标X轴补偿间距值"), Property(Format = "0.#######")]
|
||||||
|
public double ChipPaddingX { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_padding_y")]
|
||||||
|
[Description("芯片坐标Y轴补偿间距值"), Property(Format = "0.#######")]
|
||||||
|
public double ChipPaddingY { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_constant_x"), Property(Format = "0.#######")]
|
||||||
|
[Description("芯片坐标X轴补偿常量")]
|
||||||
|
public double ChipConstantX { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_constant_y")]
|
||||||
|
[Description("芯片坐标Y轴补偿常量"), Property(Format = "0.#######")]
|
||||||
|
public double ChipConstantY { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_constant_x_for_right2left")]
|
||||||
|
[Description("芯片从右到左方向动打补偿值")]
|
||||||
|
public double ChipConstantXForRight2Left { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_constant_x_for_left2_right")]
|
||||||
|
[Description("芯片从左到右方向动打补偿值")]
|
||||||
|
public double ChipConstantXForLeft2Right { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_multi_of_total_padding_x")]
|
||||||
|
[Description("芯片坐标X轴补偿间距值系数")]
|
||||||
|
public double ChipMultiOfTotalPaddingX { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_multi_of_total_padding_y")]
|
||||||
|
[Description("芯片坐标Y轴补偿间距值系数")]
|
||||||
|
public double ChipMultiOfTotalPaddingY { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_diff_x_tolerance")]
|
||||||
|
[Description("PCB路径插补3点之间的距离差值容忍值")]
|
||||||
|
public double PcbDiffXTolerance { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_diff_x_tolerance")]
|
||||||
|
[Description("芯片路径插补3点之间的距离差值容忍值")]
|
||||||
|
public double ChipDiffXTolerance { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_wrap_threshold")]
|
||||||
|
[Description("pcb路径换行逻辑的Y值阈值")]
|
||||||
|
public double PcbWrapThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_wrap_threshold")]
|
||||||
|
[Description("芯片路径换行逻辑的Y值阈值")]
|
||||||
|
public double ChipWrapThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("interpolate_wrap_count")]
|
||||||
|
[Description("换行插点数")]
|
||||||
|
public int InterpolateWrapCount { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_merge_similar_point_windows"), Description("PCB路径合并相似点窗口")]
|
||||||
|
public string PcbMergeSimilarPointWindows { get; set; } = "29,34";
|
||||||
|
|
||||||
|
[Column("chip_merge_similar_point_windows"), Description("芯片路径合并相似点窗口")]
|
||||||
|
public string ChipMergeSimilarPointWindows { get; set; } = "29,34";
|
||||||
|
|
||||||
|
[Column("pcb_row_similar_threshold"), Description("PCB路径行相似度阈值")]
|
||||||
|
public double PcbRowSimilarThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_col_similar_threshold"), Description("PCB路径列相似度阈值")]
|
||||||
|
public double PcbColSimilarThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_row_similar_threshold"), Description("芯片路径行相似度阈值")]
|
||||||
|
public double ChipRowSimilarThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_col_similar_threshold"), Description("芯片路径列相似度阈值")]
|
||||||
|
public double ChipColSimilarThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("skip_chips"), Description("跳过芯片数量")]
|
||||||
|
public int SkipChips { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_coordinate_transform_strategy"), Description("晶圆机构坐标转换策略,0:基于角度,1:基于矩阵")]
|
||||||
|
public int BinCoordinateTransformStrategy { get; set; }
|
||||||
|
|
||||||
|
[Column("x_over_speed_distant_threshold"), Description("动打X方向导致加速度过大的3点之间距离差的阈值")]
|
||||||
|
public double XOverSpeedDistantThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("y_over_speed_distant_threshold"), Description("动打Y方向导致加速度过大的3点之间距离差的阈值")]
|
||||||
|
public double YOverSpeedDistantThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("from_right_Chip_offset_to_solder_joint_center"), Description("从右到左方向芯片对齐焊点中心需要增加的X偏移量")]
|
||||||
|
public double FromRightChipOffsetToSolderJointCenter { get; set; }
|
||||||
|
|
||||||
|
[Column("from_left_Chip_offset_to_solder_joint_center"), Description("从左到右方向芯片对齐焊点中心需要增加的X偏移量")]
|
||||||
|
public double FromLeftChipOffsetToSolderJointCenter { get; set; }
|
||||||
|
|
||||||
|
[Column("from_right_early_strike_offset"), Description("从右到左方向提前下针的X偏移量")]
|
||||||
|
public double FromRightEarlyStrikeOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("from_left_early_strike_offset"), Description("从左到右方向提前下针的X偏移量")]
|
||||||
|
public double FromLeftEarlyStrikeOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_min_gray"), Description("芯片最小灰度值")]
|
||||||
|
public double ChipMinGray { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_max_gray"), Description("芯片最大灰度值")]
|
||||||
|
public double ChipMaxGray { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_min_area"), Description("芯片筛选最小面积")]
|
||||||
|
public double ChipMinArea { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_max_area"), Description("芯片筛选最大面积")]
|
||||||
|
public double ChipMaxArea { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Model.Enum;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 测高参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("altimetry_params")]
|
||||||
|
[Description("测高参数")]
|
||||||
|
public class AltimetryParams : Entity
|
||||||
|
{
|
||||||
|
[Column("formula_id"), Description("配方Id")]
|
||||||
|
public string FormulaId { get; set; }
|
||||||
|
|
||||||
|
[Column("RowArea"), Description("针刺测高区域行数")]
|
||||||
|
public int RowArea { get; set; }
|
||||||
|
|
||||||
|
[Column("ColumnArea"), Description("针刺测高区域列数")]
|
||||||
|
public int ColumnArea { get; set; }
|
||||||
|
|
||||||
|
[Column(" altimetry_strategy"), Description("测高策略,1:按区域,2:按指定点位")]
|
||||||
|
public AltimetryStrategyEnum Strategy { get; set; }
|
||||||
|
|
||||||
|
[Column("delta_height_of_plane"), Description("测高平面高度补偿值")]
|
||||||
|
public double DeltaHeightOfPlane { get; set; }
|
||||||
|
|
||||||
|
[Column("first_point_per_row_delta_height"), Description("换行第一个点的补偿值")]
|
||||||
|
public double FirstPointPerRowDeltaHeight { get; set; }
|
||||||
|
|
||||||
|
[Column("normal_delta_height"), Description("其他点补偿值")]
|
||||||
|
public double NormalDeltaHeight { get; set; }
|
||||||
|
|
||||||
|
[Column("base_height"), Description("针刺测高基准高度")]
|
||||||
|
public double BaseHeight { get; set; }
|
||||||
|
|
||||||
|
[Column("delta_base_height"), Description("第一个针刺测高值与基准高度的差值")]
|
||||||
|
public double DeltaBaseHeight { get; set; }
|
||||||
|
|
||||||
|
[Column("p2p_delta"), Description("p2p的高度补偿")]
|
||||||
|
public double P2PDelta { get; set; }
|
||||||
|
|
||||||
|
[Column("acupuncture_altimetry_coordinates_json"), Description("针刺测高坐标 eg: [[x1,y1],[x2,y2],[x3,y3]]")]
|
||||||
|
public string AcupunctureAltimetryCoordinatesJson { get; set; }
|
||||||
|
|
||||||
|
[Ignore, Description("针刺测高坐标 eg: [[x1,y1],[x2,y2],[x3,y3]]")]
|
||||||
|
public double[][] AcupunctureAltimetryCoordinates
|
||||||
|
{
|
||||||
|
get => JsonUtil.FromJsonOrDefault<double[][]>(AcupunctureAltimetryCoordinatesJson);
|
||||||
|
set => AcupunctureAltimetryCoordinatesJson = JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,227 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Atrributes;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ACS 位置参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("axis_position_params"), Description("轴位置参数")]
|
||||||
|
public class AxisPositionParams : Entity
|
||||||
|
{
|
||||||
|
[Column("wafer_y_manual_position"), Description("晶环龙门Y手动位置"),
|
||||||
|
Property(Group = "WaferY", Variable = "stAxisArPos", Axis = 0, Index = 0)]
|
||||||
|
public double WaferYManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_idle_position"), Description("晶环龙门Y待机位置"),
|
||||||
|
Property(Group = "WaferY", Variable = "stAxisArPos", Axis = 0, Index = 1)]
|
||||||
|
public double WaferYIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_loading_position"), Description("晶环龙门Y换料位置"),
|
||||||
|
Property(Group = "WaferY", Variable = "stAxisArPos", Axis = 0, Index = 2)]
|
||||||
|
public double WaferYLoadingPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_camera_position"), Description("晶环龙门Y拍照位置"),
|
||||||
|
Property(Group = "WaferY", Variable = "stAxisArPos", Axis = 0, Index = 3)]
|
||||||
|
public double WaferYCameraPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_scanner_position"), Description("晶环龙门Y扫码位置"),
|
||||||
|
Property(Group = "WaferY", Variable = "stAxisArPos", Axis = 0, Index = 4)]
|
||||||
|
public double WaferYScannerPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_replace_wafer_box_position"), Description("晶环龙门Y料盒更换位置"),
|
||||||
|
Property(Group = "WaferY", Variable = "stAxisArPos", Axis = 0, Index = 5)]
|
||||||
|
public double WaferYReplaceWaferBoxPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_manual_position"), Description("针刺龙门Y手动位置"),
|
||||||
|
Property(Group = "NeedleY", Variable = "stAxisArPos", Axis = 2, Index = 0)]
|
||||||
|
public double NeedleYManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_idle_position"), Description("针刺龙门Y待机位置"),
|
||||||
|
Property(Group = "NeedleY", Variable = "stAxisArPos", Axis = 2, Index = 1)]
|
||||||
|
public double NeedleYIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_camera_position"), Description("针刺龙门Y拍照位置"),
|
||||||
|
Property(Group = "NeedleY", Variable = "stAxisArPos", Axis = 2, Index = 2)]
|
||||||
|
public double NeedleYCameraPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_scanner_position"), Description("针刺龙门Y扫码位置"),
|
||||||
|
Property(Group = "NeedleY", Variable = "stAxisArPos", Axis = 2, Index = 3)]
|
||||||
|
public double NeedleYScannerPosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_x_manual_position"), Description("晶环龙门X手动位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 4, Index = 0)]
|
||||||
|
public double WaferXManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_idle_position"), Description("晶环龙门X待机位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 4, Index = 1)]
|
||||||
|
public double WaferXIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_loading_position"), Description("晶环龙门X换料位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 4, Index = 2)]
|
||||||
|
public double WaferXLoadingPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_camera_position"), Description("晶环龙门X拍照位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 4, Index = 3)]
|
||||||
|
public double WaferXCameraPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_scanner_position"), Description("晶环龙门X扫码位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 4, Index = 4)]
|
||||||
|
public double WaferXScannerPosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("needle_x_manual_position"), Description("针刺龙门X手动位置"),
|
||||||
|
Property(Group = "NeedleX", Variable = "stAxisArPos", Axis = 5, Index = 0)]
|
||||||
|
public double NeedleXManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_idle_position"), Description("针刺龙门X待机位置"),
|
||||||
|
Property(Group = "NeedleX", Variable = "stAxisArPos", Axis = 5, Index = 1)]
|
||||||
|
public double NeedleXIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_camera_position"), Description("针刺龙门X拍照位置"),
|
||||||
|
Property(Group = "NeedleX", Variable = "stAxisArPos", Axis = 5, Index = 2)]
|
||||||
|
public double NeedleXCameraPosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_x_2_manual_position"), Description("晶环龙门X_2手动位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 6, Index = 0)]
|
||||||
|
public double WaferX2ManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_idle_position"), Description("晶环龙门X_2待机位置"),
|
||||||
|
Property(Group = "WaferX", Variable = "stAxisArPos", Axis = 6, Index = 1)]
|
||||||
|
public double WaferX2IdlePosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("needle_x2_manual_position"), Description("针刺龙门X_2手动位置"),
|
||||||
|
Property(Group = "NeedleX", Variable = "stAxisArPos", Axis = 7, Index = 0)]
|
||||||
|
public double NeedleX2ManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_idle_position"), Description("针刺龙门X_2待机位置"),
|
||||||
|
Property(Group = "NeedleX", Variable = "stAxisArPos", Axis = 7, Index = 1)]
|
||||||
|
public double NeedleX2IdlePosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("needle_z_motor_manual_position"), Description("针刺音圈Z手动位置"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 8, Index = 0)]
|
||||||
|
public double NeedleZMotorManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_motor_idle_position"), Description("针刺音圈Z待机位置"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 8, Index = 1)]
|
||||||
|
public double NeedleZMotorIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_motor_job_position"), Description("针刺音圈Z打晶抬升位置"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 8, Index = 2)]
|
||||||
|
public double NeedleZMotorJobPosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("needle_z_servo_manual_position"), Description("针刺伺服Z手动位置"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 9, Index = 0)]
|
||||||
|
public double NeedleZServoManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_idle_position"), Description("针刺伺服Z待机位置"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 9, Index = 1)]
|
||||||
|
public double NeedleZServoIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_pcb_camera_position"), Description("针刺伺服Z基板拍照位"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 9, Index = 2)]
|
||||||
|
public double NeedleZServoPcbCameraPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_wafer_camera_position"), Description("针刺伺服Z芯片拍照位"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 9, Index = 3)]
|
||||||
|
public double NeedleZServoWaferCameraPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_job_position"), Description("针刺伺服Z打晶位置"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "stAxisArPos", Axis = 9, Index = 4)]
|
||||||
|
public double NeedleZServoJobPosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_manual_position"), Description("晶环旋转伺服手动位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 10, Index = 0)]
|
||||||
|
public double WaferRotateServoManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_idle_position"), Description("晶环旋转伺服待机位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 10, Index = 1)]
|
||||||
|
public double WaferRotateServoIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_origin_position"), Description("晶环旋转伺服相对原点位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 10, Index = 2)]
|
||||||
|
public double WaferRotateServoOriginPosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_loading_manual_position"), Description("晶环换料升降伺服手动位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 0)]
|
||||||
|
public double WaferZServoLoadingManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_loading_idle_position"), Description("晶环换料升降伺服待机位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 1)]
|
||||||
|
public double WaferZServoLoadingIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_relate_wafer_rotate_servo_loading_idle_position"), Description("晶环换料升降伺服晶环旋转端换料位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 2)]
|
||||||
|
public double WaferZServoRelateWaferRotateServoLoadingIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box1_position"), Description("晶环换料升降伺服晶环料盒1层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 3)]
|
||||||
|
public double WaferZServoToWaferBox1Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box2_position"), Description("晶环换料升降伺服晶环料盒2层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 4)]
|
||||||
|
public double WaferZServoToWaferBox2Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box3_position"), Description("晶环换料升降伺服晶环料盒3层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 5)]
|
||||||
|
public double WaferZServoToWaferBox3Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box4_position"), Description("晶环换料升降伺服晶环料盒4层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 6)]
|
||||||
|
public double WaferZServoToWaferBox4Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box5_position"), Description("晶环换料升降伺服晶环料盒5层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 7)]
|
||||||
|
public double WaferZServoToWaferBox5Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box6_position"), Description("晶环换料升降伺服晶环料盒6层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 8)]
|
||||||
|
public double WaferZServoToWaferBox6Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box7_position"), Description("晶环换料升降伺服晶环料盒7层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 9)]
|
||||||
|
public double WaferZServoToWaferBox7Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box8_position"), Description("晶环换料升降伺服晶环料盒8层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 10)]
|
||||||
|
public double WaferZServoToWaferBox8Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box9_position"), Description("晶环换料升降伺服晶环料盒9层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 11)]
|
||||||
|
public double WaferZServoToWaferBox9Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_z_servo_to_wafer_box10_position"), Description("晶环换料升降伺服晶环料盒10层位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 11, Index = 12)]
|
||||||
|
public double WaferZServoToWaferBox10Position { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_loading_manual_position"), Description("晶环换料平移伺服手动位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 12, Index = 0)]
|
||||||
|
public double WaferTranslationServoLoadingManualPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_loading_idle_position"), Description("晶环换料平移伺服待机位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 12, Index = 1)]
|
||||||
|
public double WaferTranslationServoLoadingIdlePosition { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_relate_wafer_rotate_servo_loading_idle_position"),
|
||||||
|
Description("晶环换料平移伺服晶环旋转端换料位置"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 12, Index = 2)]
|
||||||
|
public double WaferTranslationServoRelateWaferRotateServoLoadingIdlePosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_to_wafer_box_take_wafer_position"), Description("晶环换料平移伺服晶环料盒端换料位置-取料"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 12, Index = 3)]
|
||||||
|
public double WaferTranslationServoToWaferBoxTakeWaferPosition { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_to_wafer_box_put_wafer_position"), Description("晶环换料平移伺服晶环料盒端换料位置-放料"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "stAxisArPos", Axis = 12, Index = 4)]
|
||||||
|
public double WaferTranslationServoToWaferBoxPutWaferPosition { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,569 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Atrributes;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轴变量参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("axis_variables"), Description("轴变量")]
|
||||||
|
public class AxisVariables : Entity
|
||||||
|
{
|
||||||
|
[Column("wafer_y_motor_left_soft_limit"), Description("晶圆Y轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 0, Index = 0)]
|
||||||
|
public double WaferYMotorLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_motor_right_soft_limit"), Description("晶圆Y轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 0, Index = 1)]
|
||||||
|
public double WaferYMotorRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_slave_motor_left_soft_limit"), Description("晶圆Y轴从机左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 1, Index = 0)]
|
||||||
|
public double WaferYSlaveMotorLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_slave_motor_right_soft_limit"), Description("晶圆Y轴从机右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 1, Index = 1)]
|
||||||
|
public double WaferYSlaveMotorRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_motor_left_soft_limit"), Description("针刺Y轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 2, Index = 0)]
|
||||||
|
public double NeedleYMotorLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_motor_right_soft_limit"), Description("针刺Y轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 2, Index = 1)]
|
||||||
|
public double NeedleYMotorRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_slave_motor_left_soft_limit"), Description("针刺Y轴从机左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 3, Index = 0)]
|
||||||
|
public double NeedleYSlaveMotorLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_slave_motor_right_soft_limit"), Description("针刺Y轴从机右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 3, Index = 1)]
|
||||||
|
public double NeedleYSlaveMotorRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_motor_1_left_soft_limit"), Description("晶圆X轴1左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 4, Index = 0)]
|
||||||
|
public double WaferXMotor1LeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_motor_1_right_soft_limit"), Description("晶圆X轴1右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 4, Index = 1)]
|
||||||
|
public double WaferXMotor1RightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_motor1_left_soft_limit"), Description("针刺X轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 5, Index = 0)]
|
||||||
|
public double NeedleXMotor1LeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_motor1_right_soft_limit"), Description("针刺X轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 5, Index = 1)]
|
||||||
|
public double NeedleXMotor1RightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_motor_2_left_soft_limit"), Description("晶圆X轴2左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 6, Index = 0)]
|
||||||
|
public double WaferXMotor2LeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_motor_2_right_soft_limit"), Description("晶圆X轴2右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 6, Index = 1)]
|
||||||
|
public double WaferXMotor2RightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_motor2_left_soft_limit"), Description("针刺X轴2左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 7, Index = 0)]
|
||||||
|
public double NeedleXMotor2LeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_motor2_right_soft_limit"), Description("针刺X轴2右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 7, Index = 1)]
|
||||||
|
public double NeedleXMotor2RightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_motor_left_soft_limit"), Description("针刺Z轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 8, Index = 0)]
|
||||||
|
public double NeedleZMotorLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_motor_right_soft_limit"), Description("针刺Z轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 8, Index = 1)]
|
||||||
|
public double NeedleZMotorRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_left_soft_limit"), Description("针刺Z轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 9, Index = 0)]
|
||||||
|
public double NeedleZServoLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_right_soft_limit"), Description("针刺Z轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 9, Index = 1)]
|
||||||
|
public double NeedleZServoRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_left_soft_limit"), Description("晶圆旋转轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 10, Index = 0)]
|
||||||
|
public double WaferRotateServoLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_right_soft_limit"), Description("晶圆旋转轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 10, Index = 1)]
|
||||||
|
public double WaferRotateServoRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_left_soft_limit"), Description("晶圆上下轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 11, Index = 0)]
|
||||||
|
public double WaferUpDownServoLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_right_soft_limit"), Description("晶圆上下轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 11, Index = 1)]
|
||||||
|
public double WaferUpDownServoRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_left_soft_limit"), Description("晶圆平移轴左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 12, Index = 0)]
|
||||||
|
public double WaferTranslationServoLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_right_soft_limit"), Description("晶圆平移轴右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 12, Index = 1)]
|
||||||
|
public double WaferTranslationServoRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_location_servo_left_soft_limit"), Description(" 基板定位步进电机左软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 13, Index = 0)]
|
||||||
|
public double SubstrateLocationServoLeftSoftLimit { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_location_servo_right_soft_limit"), Description(" 基板定位步进电机右软限位"),
|
||||||
|
Property(Group = "SoftLimit", Variable = "stAxisSoftLimit", Axis = 13, Index = 1)]
|
||||||
|
public double SubstrateLocationServoRightSoftLimit { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("needle_z_job_compensation"), Description("针刺Z轴工作补偿"),
|
||||||
|
Property(Group = "Job", Variable = "Axis8TransferPosPlus")]
|
||||||
|
public double NeedleZJobCompensation { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_1_flying_trigger_velocity"), Description("针刺X轴飞拍速度"),
|
||||||
|
Property(Group = "Job", Variable = "axisFlyVel")]
|
||||||
|
public double NeedleX1FlyingTriggerVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("job_frequency"), Description("动打频率"), Property(Group = "Job", Variable = "axisTransferVel")]
|
||||||
|
public int JobFrequency { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_auto_velocity"), Description("晶圆Y轴自动速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisVel", Axis = 0, Index = 0)]
|
||||||
|
public int WaferYAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_auto_acceleration"), Description("晶圆Y轴自动加速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisAcc", Axis = 0, Index = 0)]
|
||||||
|
public int WaferYAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_auto_deceleration"), Description("晶圆Y轴自动减速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisDec", Axis = 0, Index = 0)]
|
||||||
|
public int WaferYAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_auto_jerk"), Description("晶圆Y轴自动加加速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisJerk", Axis = 0, Index = 0)]
|
||||||
|
public int WaferYAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_reset_velocity"), Description("晶圆Y轴回原速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisVel", Axis = 0, Index = 1)]
|
||||||
|
public int WaferYResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_reset_acceleration"), Description("晶圆Y轴回原加速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisAcc", Axis = 0, Index = 1)]
|
||||||
|
public int WaferYResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_reset_deceleration"), Description("晶圆Y轴回原减速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisDec", Axis = 0, Index = 1)]
|
||||||
|
public int WaferYResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_reset_jerk"), Description("晶圆Y轴回原加加速度"),
|
||||||
|
Property(Group = "WaferY", Variable = "axisJerk", Axis = 0, Index = 1)]
|
||||||
|
public int WaferYResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_auto_velocity"), Description("针刺Y轴自动速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisVel", Axis = 2, Index = 0)]
|
||||||
|
public int NeedleYAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_auto_acceleration"), Description("针刺Y轴自动加速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisAcc", Axis = 2, Index = 0)]
|
||||||
|
public int NeedleYAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_auto_deceleration"), Description("针刺Y轴自动减速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisDec", Axis = 2, Index = 0)]
|
||||||
|
public int NeedleYAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_auto_jerk"), Description("针刺Y轴自动加加速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisJerk", Axis = 2, Index = 0)]
|
||||||
|
public int NeedleYAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_reset_velocity"), Description("针刺Y轴回原速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisVel", Axis = 2, Index = 1)]
|
||||||
|
public int NeedleYResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_reset_acceleration"), Description("针刺Y轴回原加速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisAcc", Axis = 2, Index = 1)]
|
||||||
|
public int NeedleYResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_reset_deceleration"), Description("针刺Y轴回原减速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisDec", Axis = 2, Index = 1)]
|
||||||
|
public int NeedleYResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_reset_jerk"), Description("针刺Y轴回原加加速度"),
|
||||||
|
Property(Group = "NeedleY", Variable = "axisJerk", Axis = 2, Index = 1)]
|
||||||
|
public int NeedleYResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_auto_velocity"), Description("晶圆X轴自动速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisVel", Axis = 4, Index = 0)]
|
||||||
|
public int WaferXAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_auto_acceleration"), Description("晶圆X轴自动加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisAcc", Axis = 4, Index = 0)]
|
||||||
|
public int WaferXAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_auto_deceleration"), Description("晶圆X轴自动减速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisDec", Axis = 4, Index = 0)]
|
||||||
|
public int WaferXAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_auto_jerk"), Description("晶圆X轴自动加加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisJerk", Axis = 4, Index = 0)]
|
||||||
|
public int WaferXAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_reset_velocity"), Description("晶圆X回原速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisVel", Axis = 4, Index = 1)]
|
||||||
|
public int WaferXResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_reset_acceleration"), Description("晶圆X轴回原加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisAcc", Axis = 4, Index = 1)]
|
||||||
|
public int WaferXResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_reset_deceleration"), Description("晶圆X轴回原减速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisDec", Axis = 4, Index = 1)]
|
||||||
|
public int WaferXResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_reset_jerk"), Description("晶圆X轴回原加加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisJerk", Axis = 4, Index = 1)]
|
||||||
|
public int WaferXResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_auto_velocity"), Description("针刺X轴自动速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisVel", Axis = 5, Index = 0)]
|
||||||
|
public int NeedleXAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_auto_acceleration"), Description("针刺X轴自动加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisAcc", Axis = 5, Index = 0)]
|
||||||
|
public int NeedleXAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_auto_deceleration"), Description("针刺X轴自动减速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisDec", Axis = 5, Index = 0)]
|
||||||
|
public int NeedleXAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_auto_jerk"), Description("针刺X轴自动加加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisJerk", Axis = 5, Index = 0)]
|
||||||
|
public int NeedleXAutoJerk { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("needle_x_reset_velocity"), Description("针刺X回原速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisVel", Axis = 5, Index = 1)]
|
||||||
|
public int NeedleXResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_reset_acceleration"), Description("针刺X轴回原加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisAcc", Axis = 5, Index = 1)]
|
||||||
|
public int NeedleXResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_reset_deceleration"), Description("针刺X轴回原减速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisDec", Axis = 5, Index = 1)]
|
||||||
|
public int NeedleXResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_reset_jerk"), Description("针刺X轴回原加加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisJerk", Axis = 5, Index = 1)]
|
||||||
|
public int NeedleXResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_auto_velocity"), Description("晶圆X2轴自动速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisVel", Axis = 6, Index = 0)]
|
||||||
|
public int WaferX2AutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_auto_acceleration"), Description("晶圆X2轴自动加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisAcc", Axis = 6, Index = 0)]
|
||||||
|
public int WaferX2AutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_auto_deceleration"), Description("晶圆X2轴自动减速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisDec", Axis = 6, Index = 0)]
|
||||||
|
public int WaferX2AutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_auto_jerk"), Description("晶圆X2轴自动加加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisJerk", Axis = 6, Index = 0)]
|
||||||
|
public int WaferX2AutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_reset_velocity"), Description("晶圆X2回原速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisVel", Axis = 6, Index = 1)]
|
||||||
|
public int WaferX2ResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_reset_acceleration"), Description("晶圆X2轴回原加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisAcc", Axis = 6, Index = 1)]
|
||||||
|
public int WaferX2ResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_reset_deceleration"), Description("晶圆X2轴回原减速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisDec", Axis = 6, Index = 1)]
|
||||||
|
public int WaferX2ResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x2_reset_jerk"), Description("晶圆X2轴回原加加速度"),
|
||||||
|
Property(Group = "WaferX", Variable = "axisJerk", Axis = 6, Index = 1)]
|
||||||
|
public int WaferX2ResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_auto_velocity"), Description("针刺X2轴自动速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisVel", Axis = 7, Index = 0)]
|
||||||
|
public int NeedleX2AutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_auto_acceleration"), Description("针刺X2轴自动加速度"), Property(Group = "NeedleX",
|
||||||
|
Variable = "axisAcc", Axis = 7, Index = 0)]
|
||||||
|
public int NeedleX2AutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_auto_deceleration"), Description("针刺X2轴自动减速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisDec", Axis = 7, Index = 0)]
|
||||||
|
public int NeedleX2AutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_auto_jerk"), Description("针刺X2轴自动加加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisJerk", Axis = 7, Index = 0)]
|
||||||
|
public int NeedleX2AutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_reset_velocity"), Description("针刺X2回原速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisVel", Axis = 7, Index = 1)]
|
||||||
|
public int NeedleX2ResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_reset_acceleration"), Description("针刺X2轴回原加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisAcc", Axis = 7, Index = 1)]
|
||||||
|
public int NeedleX2ResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_reset_deceleration"), Description("针刺X2轴回原减速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisDec", Axis = 7, Index = 1)]
|
||||||
|
public int NeedleX2ResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x2_reset_jerk"), Description("针刺X2轴回原加加速度"),
|
||||||
|
Property(Group = "NeedleX", Variable = "axisJerk", Axis = 7, Index = 1)]
|
||||||
|
public int NeedleX2ResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_auto_velocity"), Description("针刺升降音圈电机自动速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisVel", Axis = 8, Index = 0)]
|
||||||
|
public int NeedleZAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_auto_acceleration"), Description("针刺升降音圈电机自动加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisAcc", Axis = 8, Index = 0)]
|
||||||
|
public int NeedleZAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_auto_deceleration"), Description("针刺升降音圈电机自动减速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisDec", Axis = 8, Index = 0)]
|
||||||
|
public int NeedleZAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_auto_jerk"), Description("针刺升降音圈电机自动加加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisJerk", Axis = 8, Index = 0)]
|
||||||
|
public int NeedleZAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_reset_velocity"), Description("针刺升降音圈电机回原速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisVel", Axis = 8, Index = 1)]
|
||||||
|
public int NeedleZResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_reset_acceleration"), Description("针刺升降音圈电机回原加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisAcc", Axis = 8, Index = 1)]
|
||||||
|
public int NeedleZResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_reset_deceleration"), Description("针刺升降音圈电机回原减速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisDec", Axis = 8, Index = 1)]
|
||||||
|
public int NeedleZResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_reset_jerk"), Description("针刺升降音圈电机回原加加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisJerk", Axis = 8, Index = 1)]
|
||||||
|
public int NeedleZResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_auto_velocity"), Description("针刺升降伺服自动速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisVel", Axis = 9, Index = 0)]
|
||||||
|
public int NeedleZServoAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_auto_acceleration"), Description("针刺升降伺服自动加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisAcc", Axis = 9, Index = 0)]
|
||||||
|
public int NeedleZServoAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_auto_deceleration"), Description("针刺升降伺服自动减速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisDec", Axis = 9, Index = 0)]
|
||||||
|
public int NeedleZServoAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_auto_jerk"), Description("针刺升降伺服自动加加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisJerk", Axis = 9, Index = 0)]
|
||||||
|
public int NeedleZServoAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_reset_velocity"), Description("针刺升降伺服回原速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisVel", Axis = 9, Index = 1)]
|
||||||
|
public int NeedleZServoResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_reset_acceleration"), Description("针刺升降伺服回原加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisAcc", Axis = 9, Index = 1)]
|
||||||
|
public int NeedleZServoResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_reset_deceleration"), Description("针刺升降伺服回原减速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisDec", Axis = 9, Index = 1)]
|
||||||
|
public int NeedleZServoResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_reset_jerk"), Description("针刺升降伺服回原加加速度"),
|
||||||
|
Property(Group = "NeedleZ", Variable = "axisJerk", Axis = 9, Index = 1)]
|
||||||
|
public int NeedleZServoResetJerk { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_auto_velocity"), Description("晶环旋转伺服自动速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisVel", Axis = 10, Index = 0)]
|
||||||
|
public int WaferRotateServoAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_auto_acceleration"), Description("晶环旋转伺服自动加速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisAcc", Axis = 10, Index = 0)]
|
||||||
|
public int WaferRotateServoAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_auto_deceleration"), Description("晶环旋转伺服自动减速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisDec", Axis = 10, Index = 0)]
|
||||||
|
public int WaferRotateServoAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_auto_jerk"), Description("晶环旋转伺服自动加加速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisJerk", Axis = 10, Index = 0)]
|
||||||
|
public int WaferRotateServoAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_reset_velocity"), Description("晶环旋转伺服回原速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisVel", Axis = 10, Index = 1)]
|
||||||
|
public int WaferRotateServoResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_reset_acceleration"), Description("晶环旋转伺服回原加速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisAcc", Axis = 10, Index = 1)]
|
||||||
|
public int WaferRotateServoResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_reset_deceleration"), Description("晶环旋转伺服回原减速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisDec", Axis = 10, Index = 1)]
|
||||||
|
public int WaferRotateServoResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_reset_jerk"), Description("晶环旋转伺服回原加加速度"),
|
||||||
|
Property(Group = "WaferRotate", Variable = "axisJerk", Axis = 10, Index = 1)]
|
||||||
|
public int WaferRotateServoResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_auto_velocity"), Description("晶环上料升降步进自动速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisVel", Axis = 11, Index = 0)]
|
||||||
|
public int WaferUpDownServoAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_auto_acceleration"), Description("晶环上料升降步进自动加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisAcc", Axis = 11, Index = 0)]
|
||||||
|
public int WaferUpDownServoAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_auto_deceleration"), Description("晶环上料升降步进自动减速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisDec", Axis = 11, Index = 0)]
|
||||||
|
public int WaferUpDownServoAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_auto_jerk"), Description("晶环上料升降步进自动加加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisJerk", Axis = 11, Index = 0)]
|
||||||
|
public int WaferUpDownServoAutoJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_reset_velocity"), Description("晶环上料升降步进回原速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisVel", Axis = 11, Index = 1)]
|
||||||
|
public int WaferUpDownServoResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_reset_acceleration"), Description("晶环上料升降步进回原加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisAcc", Axis = 11, Index = 1)]
|
||||||
|
public int WaferUpDownServoResetAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_reset_deceleration"), Description("晶环上料升降步进回原减速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisDec", Axis = 11, Index = 1)]
|
||||||
|
public int WaferUpDownServoResetDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_reset_jerk"), Description("晶环上料升降步进回原加加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisJerk", Axis = 11, Index = 1)]
|
||||||
|
public int WaferUpDownServoResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_auto_velocity"), Description("晶环上料平移步进自动速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisVel", Axis = 12, Index = 0)]
|
||||||
|
public int WaferTranslationServoAutoVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_auto_acceleration"), Description("晶环上料平移步进自动加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisAcc", Axis = 12, Index = 0)]
|
||||||
|
public int WaferTranslationServoAutoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_auto_deceleration"), Description("晶环上料平移步进自动减速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisDec", Axis = 12, Index = 0)]
|
||||||
|
public int WaferTranslationServoAutoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_auto_jerk"), Description("晶环上料平移步进自动加加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisJerk", Axis = 12, Index = 0)]
|
||||||
|
public int WaferTranslationServoAutoJerk { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_reset_velocity"), Description("晶环上料平移步进回原速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisVel", Axis = 12, Index = 1)]
|
||||||
|
public int WaferTranslationServoResetVelocity { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_acceleration"), Description("晶环上料平移步进回原加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisAcc", Axis = 12, Index = 1)]
|
||||||
|
public int WaferTranslationServoAcceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_deceleration"), Description("晶环上料平移步进回原减速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisDec", Axis = 12, Index = 1)]
|
||||||
|
public int WaferTranslationServoDeceleration { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_reset_jerk"), Description("晶环上料平移步进回原加加速度"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "axisJerk", Axis = 12, Index = 1)]
|
||||||
|
public int WaferTranslationServoResetJerk { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_loading_z_offset"), Description("料盒取料升降避让偏移量"),
|
||||||
|
Property(Group = "WaferLoading", Variable = "iBinLoadZOffset")]
|
||||||
|
public double WaferLoadingZOffset { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("wafer_y_motor_origin_offset"), Description("晶片Y轴回源偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 0)]
|
||||||
|
public double WaferYMotorOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_y_slave_motor_origin_offset"), Description("晶圆Y轴电机从轴回源偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 1)]
|
||||||
|
public double WaferYSlaveMotorOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_motor_origin_offset"), Description("针刺Y轴回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 2)]
|
||||||
|
public double NeedleYMotorOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_slave_motor_origin_offset"), Description("针刺Y轴从轴回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 3)]
|
||||||
|
public double NeedleYSlaveMotorOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_motor1_origin_offset"), Description("晶园X轴电机回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 4)]
|
||||||
|
public double WaferXMotor1OriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_motor1_origin_offset"), Description("针刺X轴电机回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 5)]
|
||||||
|
public double NeedleXMotor1OriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_motor2_origin_offset"), Description("晶圆X轴电机从轴回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 6)]
|
||||||
|
public double WaferXMotor2OriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_x_motor2_origin_offset"), Description("针刺X轴电机从轴回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 7)]
|
||||||
|
public double NeedleXMotor2OriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_motor_origin_offset"), Description("针刺Z轴电机回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 8)]
|
||||||
|
public double NeedleZMotorOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_servo_origin_offset"), Description("针刺Z轴私服回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 9)]
|
||||||
|
public double NeedleZServoOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_rotate_servo_origin_offset"), Description(" 晶膜旋转伺服回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 10)]
|
||||||
|
public double WaferRotateServoOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_up_down_servo_origin_offset"), Description("晶片上下升降伺服回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 11)]
|
||||||
|
public double WaferUpDownServoOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_translation_servo_origin_offset"), Description("晶片平移伺服回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 12)]
|
||||||
|
public double WaferTranslationServoOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_location_servo_origin_offset"), Description("基板定位步进电机回原偏移量"),
|
||||||
|
Property(Group = "OriginOffset", Variable = "stAxisOriginOffset", Axis = 13)]
|
||||||
|
public double SubstrateLocationServoOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("y_motor_ran_limit_space"), Description("横梁干涉限位"),
|
||||||
|
Property(Group = "RanLimitSpace", Variable = "stRANLimitSpace", Index = 0)]
|
||||||
|
public double YMotorRanLimitSpace { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_y_and_wafer_y_ran_limit_space"), Description("针刺Y和晶圆Y旋转干涉限位"),
|
||||||
|
Property(Group = "RanLimitSpace", Variable = "stRANLimitSpace", Index = 1)]
|
||||||
|
public double NeedleYAndWaferYRanLimitSpace { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_x_and_needle_x_ran_limit_space"), Description("晶圆X和针刺X旋转干涉限位"),
|
||||||
|
Property(Group = "RanLimitSpace", Variable = "stRANLimitSpace", Index = 2)]
|
||||||
|
public double WaferXMotorAndNeedleXMotorRanLimitSpace { get; set; }
|
||||||
|
|
||||||
|
[Column("needle_z_and_needle_z_servo_ran_limit_space"), Description("音圈Z和私服Z旋转干涉限位"),
|
||||||
|
Property(Group = "RanLimitSpace", Variable = "stRANLimitSpace", Index = 3)]
|
||||||
|
public double NeedleZAndNeedleZServoRanLimitSpace { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Atrributes;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Model.Enum;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
[Table("camera_internal_params"), Description("相机内部参数")]
|
||||||
|
public class CameraInternalParams : Entity
|
||||||
|
{
|
||||||
|
[Column("type"), Description("参数类型")] public string Type { get; set; }
|
||||||
|
|
||||||
|
[Column("balance_ratio"), Description("白平衡值")]
|
||||||
|
public int BalanceRatio { get; set; }
|
||||||
|
|
||||||
|
[Column("exposure_time"), Description("曝光时间"), Property(Min = 15, Max = 2000)]
|
||||||
|
public int ExposureTime { get; set; }
|
||||||
|
|
||||||
|
[Column("exposure_auto"), Description("自动曝光")]
|
||||||
|
public bool ExposureAuto { get; set; }
|
||||||
|
|
||||||
|
[Column("gain"), Description("增益")] public float Gain { get; set; }
|
||||||
|
|
||||||
|
[Column("gain_auto"), Description("自动增益")]
|
||||||
|
public GainAutoEnum GainAuto { get; set; }
|
||||||
|
|
||||||
|
[Column("black_level"), Description("灰度值")]
|
||||||
|
public float BlackLevel { get; set; }
|
||||||
|
|
||||||
|
[Column("black_level_enable"), Description("黑电平调节使能")]
|
||||||
|
public bool BlackLevelEnable { get; set; }
|
||||||
|
|
||||||
|
[Column("balance_white_auto"), Description("自动白平衡")]
|
||||||
|
public bool BalanceWhiteAuto { get; set; }
|
||||||
|
|
||||||
|
[Column("resulting_frame_rate"), Description("实际采集帧率fps")]
|
||||||
|
public float ResultingFrameRate { get; set; }
|
||||||
|
|
||||||
|
[Column("gamma"), Description("gamma值"), Property(Min = 0, Max = 4)]
|
||||||
|
public float Gamma { get; set; }
|
||||||
|
|
||||||
|
[Column("gamma_enable"), Description("是否gamma使能")]
|
||||||
|
public bool GammaEnable { get; set; }
|
||||||
|
|
||||||
|
[Column("line_mode"), Description("IO 模式")]
|
||||||
|
public LineModeEnum LineMode { get; set; }
|
||||||
|
|
||||||
|
[Column("line_selector"), Description("IO 选择")]
|
||||||
|
public LineSelectorEnum LineSelector { get; set; }
|
||||||
|
|
||||||
|
[Column("trigger_activation"), Description("触发激活")]
|
||||||
|
public TriggerActivationEnum TriggerActivation { get; set; }
|
||||||
|
|
||||||
|
[Column("trigger_mode"), Description("触发模式")]
|
||||||
|
public TriggerModeEnum TriggerMode { get; set; }
|
||||||
|
|
||||||
|
[Column("trigger_source"), Description("触发源")]
|
||||||
|
public TriggerSourceEnum TriggerSource { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Atrributes;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 相机参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("camera_params")]
|
||||||
|
[Description("相机参数")]
|
||||||
|
public class CameraParams : Entity
|
||||||
|
{
|
||||||
|
[Column("camera_sn"), Description("相机序列号")]
|
||||||
|
public string CameraSn { get; set; }
|
||||||
|
|
||||||
|
[Column("sdk"), Description("SDK")] public string Sdk { get; set; }
|
||||||
|
|
||||||
|
[Column("dll"), Description("DLL")] public string Dll { get; set; }
|
||||||
|
|
||||||
|
[Column("scale_ratio"), Description("视频缩放比例")]
|
||||||
|
public double ScaleRatio { get; set; }
|
||||||
|
|
||||||
|
[Column("pixel_length"), Description("像素长度"), Property(Format = "0.########")]
|
||||||
|
public double PixelLength { get; set; }
|
||||||
|
|
||||||
|
[Column("deflect_angle"), Description("相机偏转角度"), Property(Format = "0.#####")]
|
||||||
|
public double DeflectAngle { get; set; }
|
||||||
|
|
||||||
|
[Column("camera_inner_param_template"), Description("相机内参模板")]
|
||||||
|
public string CameraInnerParamTemplate { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 配置数据
|
||||||
|
/// </summary>
|
||||||
|
public class ConfigData<T>
|
||||||
|
{
|
||||||
|
[JsonProperty("name")] public string Name { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("type")] public string Type { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("param")] public T? Param { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
public class CoordinateData
|
||||||
|
{
|
||||||
|
[JsonProperty("fileType")] public string FileType { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("bizNumber")] public string BizNumber { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("batchNumber")] public string BatchNumber { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Model.Enum;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 故障记录
|
||||||
|
/// </summary>
|
||||||
|
[Table("fault_records"), Description("故障记录")]
|
||||||
|
public class FaultRecord : Entity
|
||||||
|
{
|
||||||
|
[Column("source"), Description("故障来源")]
|
||||||
|
public string? Source { get; set; }
|
||||||
|
|
||||||
|
[Column("fault_code"), Description("故障编码")]
|
||||||
|
public string? FaultCode { get; set; }
|
||||||
|
|
||||||
|
[Column("fault_desc"), Description("故障描述")]
|
||||||
|
public string? FaultDesc { get; set; }
|
||||||
|
|
||||||
|
[Column("fault_time"), Description("故障时间")]
|
||||||
|
public DateTime FaultTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fault_level"), Description("故障级别")]
|
||||||
|
public ExceptionLevel Level { get; set; }
|
||||||
|
|
||||||
|
[Column("fault_message"), Description("故障信息")]
|
||||||
|
public string? FaultMessage { get; set; }
|
||||||
|
|
||||||
|
[Column("solved"), Description("是否已处理")]
|
||||||
|
public bool Solved { get; set; }
|
||||||
|
|
||||||
|
[Column("solved_time"), Description("处理时间")]
|
||||||
|
public DateTime? SolvedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("solved_by_user_id"), Description("处理人Id")]
|
||||||
|
public string? SolvedByUserId { get; set; }
|
||||||
|
|
||||||
|
[Column("solved_by_user_name"), Description("处理人名称")]
|
||||||
|
public string? SolvedByUserName { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报的故障信息
|
||||||
|
/// </summary>
|
||||||
|
public class FaultRecordDTO
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 错误码
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("errorCode")]
|
||||||
|
public string? ErrorCode { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("timestamp")] public DateTime Timestamp { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 故障状态项
|
||||||
|
/// 0:解除故障
|
||||||
|
/// 1:发生故障
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("status")]
|
||||||
|
public int Status { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 配方信息
|
||||||
|
/// </summary>
|
||||||
|
[Table("formulas")]
|
||||||
|
public class Formula : Entity
|
||||||
|
{
|
||||||
|
[Column("name"), Description("配方名称")] public string Name { get; set; }
|
||||||
|
|
||||||
|
[Column("code"), Description("配方编码")] public string Code { get; set; }
|
||||||
|
|
||||||
|
[Column("description"), Description("配方描述")]
|
||||||
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
[Column("selected"), Description("是否启用")]
|
||||||
|
public bool Selected { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 配方参数信息
|
||||||
|
/// </summary>
|
||||||
|
public class FormulaConfig
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 配方信息
|
||||||
|
/// </summary>
|
||||||
|
public class FormulaDTO
|
||||||
|
{
|
||||||
|
[Description("配方id"), JsonProperty("id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
[Description("配方名称"), JsonProperty("name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[Description("配方编号"), JsonProperty("code")]
|
||||||
|
public string Code { get; set; }
|
||||||
|
|
||||||
|
[Description("配方描述"), JsonProperty("description")]
|
||||||
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
[Description("是否启用")] public bool Selected { get; set; }
|
||||||
|
|
||||||
|
public WorkBenchSetting? WorkBenchSetting { get; set; }
|
||||||
|
|
||||||
|
public PcbSetting? PcbSetting { get; set; }
|
||||||
|
|
||||||
|
public WaferSetting? WaferSetting { get; set; }
|
||||||
|
|
||||||
|
public NeedleSetting? NeedleSetting { get; set; }
|
||||||
|
|
||||||
|
public AltimetryParams? AltimetryParams { get; set; }
|
||||||
|
public JobSetting? JobSetting { get; set; }
|
||||||
|
|
||||||
|
public AlgorithmParams? AlgorithmParams { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 作业配置
|
||||||
|
/// </summary>
|
||||||
|
[Table("job_settings")]
|
||||||
|
public class JobSetting : Entity
|
||||||
|
{
|
||||||
|
[Column("formulaId"), Description("配方Id")]
|
||||||
|
public string? FormulaId { get; set; }
|
||||||
|
|
||||||
|
[Column("batch_no"), Description("批次号")]
|
||||||
|
public string? BatchNo { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_amount_per_batch"), Description("每批次的芯片数量")]
|
||||||
|
public int ChipAmountPerBatch { get; set; }
|
||||||
|
|
||||||
|
[Column("strike_detect_threshold"), Description("每次动打数量检测阈值")]
|
||||||
|
public int StrikeDetectThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("max_re_strike_times"), Description("最大补打次数")]
|
||||||
|
public int MaxReStrikeTimes { get; set; }
|
||||||
|
|
||||||
|
[Column("missing_threshold"), Description("最大漏打数量阈值")]
|
||||||
|
public int MissingThreshold { get; set; }
|
||||||
|
|
||||||
|
[Column("batch_preset_capacity"), Description("批次预设容量")]
|
||||||
|
public int BatchPresetCapacity { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 日志参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("log_params")]
|
||||||
|
[Description("日志参数")]
|
||||||
|
public class LogParams : Entity
|
||||||
|
{
|
||||||
|
[Column("level"), Description("日志级别")] public string? Level { get; set; }
|
||||||
|
|
||||||
|
[Column("path"), Description("日志存放路径")]
|
||||||
|
public string? Path { get; set; }
|
||||||
|
|
||||||
|
[Column("upload_corn"), Description("日志上传时间")]
|
||||||
|
public string? UploadCorn { get; set; }
|
||||||
|
|
||||||
|
[Column("upload_levels"), Description("日志上传级别")]
|
||||||
|
public string? UploadLevels { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
[Table("minio_params"), Description("MinIO参数")]
|
||||||
|
public class MinioParams : Entity
|
||||||
|
{
|
||||||
|
[Column("minio_access_key"), Description("Minio AccessKey")]
|
||||||
|
public string MinioAccessKey { get; set; }
|
||||||
|
|
||||||
|
[Column("minio_secret_key"), Description("Minio SecretKey")]
|
||||||
|
public string MinioSecretKey { get; set; }
|
||||||
|
|
||||||
|
[Column("minio_bucket"), Description("Minio Bucket")]
|
||||||
|
public string MinioBucket { get; set; }
|
||||||
|
|
||||||
|
[Column("minio_endpoint"), Description("Minio Endpoint")]
|
||||||
|
public string MinioEndpoint { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Atrributes;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
[Table("mqtt_params"), Description("Mqtt连接参数")]
|
||||||
|
public class MqttParams : Entity
|
||||||
|
{
|
||||||
|
[Column("server_address"), Description("服务器地址")]
|
||||||
|
public string ServerAddress { get; set; }
|
||||||
|
|
||||||
|
[Column("port"), Description("端口")] public int Port { get; set; }
|
||||||
|
|
||||||
|
[Column("user_name"), Description("用户名")]
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
[Column("password"), Description("密码"), Property(IsPassword = true)]
|
||||||
|
public string Password { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产配方-针刺机构配置参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("needle_settings")]
|
||||||
|
public class NeedleSetting : Entity
|
||||||
|
{
|
||||||
|
[Column("formulaId"), Description("配方Id")]
|
||||||
|
public string FormulaId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 基础下针高度
|
||||||
|
/// </summary>
|
||||||
|
[Column("base_acupuncture_high"), Description("基础下针高度")]
|
||||||
|
public double BaseAcupunctureHigh { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 针刺x坐标相对于激光x坐标的偏移值
|
||||||
|
/// </summary>
|
||||||
|
[Column("delta_x_between_pcb_and_laser"), Description("针刺x坐标相对于激光x坐标的偏移值")]
|
||||||
|
public double DeltaXBetweenPcbAndLaser { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 针刺y坐标相对于激光y坐标的偏移值
|
||||||
|
/// </summary>
|
||||||
|
[Column("delta_y_between_pcb_and_laser"), Description("针刺y坐标相对于激光y坐标的偏移值")]
|
||||||
|
public double DeltaYBetweenPcbAndLaser { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Model.Enum;
|
||||||
|
using SQLite;
|
||||||
|
using ChipColorEnum = MasstransferCommon.Model.Entity.ChipColorEnum;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产配方-pcb设置参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("pcb_settings"), Description("PCB设置")]
|
||||||
|
public class PcbSetting : Entity
|
||||||
|
{
|
||||||
|
[Column("formulaId"), Description("配方Id")]
|
||||||
|
public string? FormulaId { get; set; }
|
||||||
|
|
||||||
|
[Column("type"), Description("基材类型")] public SubstrateTypeEnum TypeEnum { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Column("solder_joint_width"), Description("焊点宽度")]
|
||||||
|
public double SolderJointWidth { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_height"), Description("焊点高度")]
|
||||||
|
public double SolderJointHeight { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 焊点内间距
|
||||||
|
/// </summary>
|
||||||
|
[Column("padding"), Description("焊点内间距")]
|
||||||
|
public double Padding { get; set; }
|
||||||
|
|
||||||
|
[Column("row_margin"), Description("焊点的行间距")]
|
||||||
|
public double RowMargin { get; set; }
|
||||||
|
|
||||||
|
[Column("column_margin"), Description("焊点的列间距")]
|
||||||
|
public double ColumnMargin { get; set; }
|
||||||
|
|
||||||
|
[Column("row"), Description("行数")] public int Row { get; set; }
|
||||||
|
|
||||||
|
[Column("column"), Description("列数")] public int Column { get; set; }
|
||||||
|
|
||||||
|
[Column("strike_direction"), Description("动打方向")]
|
||||||
|
public DirectionEnum StrikeDirection { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RGB 1;R,2:G,3:B
|
||||||
|
/// </summary>
|
||||||
|
[Column("rgb"), Description("RGB")]
|
||||||
|
public ChipColorEnum ChipColor { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_chip_amount_per_row"), Description("每行PCB芯片数量")]
|
||||||
|
public int PcbChipAmountPerRow { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PCB模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("pcb_template"), Description("PCB模板")]
|
||||||
|
public string? PcbTemplate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mark1模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("mark1_template"), Description("Mark1模板")]
|
||||||
|
public string? Mark1Template { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mark2模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("mark2_template"), Description("Mark2模板")]
|
||||||
|
public string? Mark2Template { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mark3模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("mark3_template"), Description("Mark3模板")]
|
||||||
|
public string? Mark3Template { get; set; }
|
||||||
|
|
||||||
|
[Column("mark_origin_coordinates_json"), Description("Mark点的像素坐标系下对应像素原点的针刺坐标")]
|
||||||
|
[Obsolete("已废弃,使用WorkBenchSetting.SolderJointX 配置")]
|
||||||
|
public string MarkOriginCoordinatesJson { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 动打记录
|
||||||
|
/// 每次基板动打完成后进行触发上传
|
||||||
|
/// </summary>
|
||||||
|
public class ProductionRecord
|
||||||
|
{
|
||||||
|
[JsonProperty("batchNumber")] public string BatchNumber { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("pcbNumber")] public string PcbNumber { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("chipType")] public string ChipType { get; set; }
|
||||||
|
[JsonProperty("hitQuantity")] public string HitQuantity { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("pcbInputTime")] public DateTime PcbInputTime { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("pcbOutputTime")] public DateTime PcbOutputTime { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("pcbInputTimeCost")] public int PcbInputTimeCost { get; set; }
|
||||||
|
[JsonProperty("pcbScanTimeCost")] public int PcbScanTimeCost { get; set; }
|
||||||
|
[JsonProperty("pcbOutputTimeCost")] public int PcbOutputTimeCost { get; set; }
|
||||||
|
[JsonProperty("rounds")] public List<ProductionWaferRecord> Rounds { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 每次动打期间用到的wafer记录
|
||||||
|
/// </summary>
|
||||||
|
public class ProductionWaferRecord
|
||||||
|
{
|
||||||
|
[JsonProperty("waferNumber")] public string WaferNumber { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("chipQuantity")] public int ChipQuantity { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("waferInputTimeCost")] public int WaferInputTimeCost { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("chipScanTimeCost")] public int ChipScanTimeCost { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("productionTimeCost")] public int ProductionTimeCost { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("pcbCheckTimeCost")] public int PcbCheckTimeCost { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("waferOutputTimeCost")] public int WaferOutputTimeCost { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("hitedQuantity")] public int HitedQuantity { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
public class QueryCoordinateDTO
|
||||||
|
{
|
||||||
|
[JsonProperty("fileType")] public string FileType { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("bizNumber")] public string BizNumber { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("batchNumber")] public string BatchNumber { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Model.Enum;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 扫码器参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("scanner_params"), Description("扫描枪参数")]
|
||||||
|
public class ScannerParams : Entity
|
||||||
|
{
|
||||||
|
[Column("interface_enum"), Description("扫码枪接口类型")]
|
||||||
|
public ScannerInterfaceEnum InterfaceEnum { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_ip_address"), Description("晶环扫描枪IP地址")]
|
||||||
|
public string WaferIpAddress { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_port"), Description("晶环扫描枪端口号")]
|
||||||
|
public int WaferPort { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_port_name"), Description("晶环扫码枪串口名称")]
|
||||||
|
public string WaferPortName { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_baud_rate"), Description("晶环扫码枪波特率")]
|
||||||
|
public int WaferBaudRate { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_scan_delay"), Description("晶环扫码枪扫描间隔")]
|
||||||
|
public int WaferScanDelay { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_ip_address"), Description("PCB扫描枪IP地址")]
|
||||||
|
public string PcbIpAddress { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_port"), Description("PCB扫描枪端口号")]
|
||||||
|
public int PcbPort { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_port_name"), Description("PCB扫码枪串口名称")]
|
||||||
|
public string PcbPortName { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_baud_rate"), Description("PCB扫码枪枪波特率")]
|
||||||
|
public int PcbBaudRate { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_scan_delay"), Description("PCB扫码枪枪扫描间隔")]
|
||||||
|
public int PcbScanDelay { get; set; }
|
||||||
|
}
|
|
@ -1,17 +1,104 @@
|
||||||
namespace MasstransferExporter.DataExporter.Model;
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 动打记录
|
/// 动打过程记录
|
||||||
/// 每次基板动打完成后进行触发上传
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class StrikeRecord
|
[Table("strike_records"), Description("动打过程记录")]
|
||||||
|
public class StrikeRecord : Entity
|
||||||
{
|
{
|
||||||
public string BatchNumber { get; set; }
|
[Column("batch_no"), Description("批次号")]
|
||||||
public string PcbNumber { get; set; }
|
public string? BatchNo { get; set; }
|
||||||
public string ChipType { get; set; }
|
|
||||||
public string HitQuantity { get; set; }
|
[Column("wafer_id"), Description("晶圆Id")]
|
||||||
public string PcbInputTimeCost { get; set; }
|
public string? WaferId { get; set; }
|
||||||
public string PcbScanTimeCost { get; set; }
|
|
||||||
public string PcbOutputTimeCost { get; set; }
|
[Column("wafer_code"), Description("晶圆编号")]
|
||||||
public List<StrikeWaferRecord> Rounds { get; set; }
|
public string? WaferCode { get; set; }
|
||||||
|
|
||||||
|
[Column("jig_code"), Description("治具编号")]
|
||||||
|
public string? JigCode { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_id"), Description("基板Id")]
|
||||||
|
public string? SubstrateId { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_code"), Description("基板编号")]
|
||||||
|
public string? SubstrateCode { get; set; }
|
||||||
|
|
||||||
|
[Column("start_time"), Description("开始时间")]
|
||||||
|
public DateTime? StartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("end_time"), Description("结束时间")]
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("strike_consume_time"), Description("动打耗时")]
|
||||||
|
public int StrikeConsumeTime { get; set; }
|
||||||
|
|
||||||
|
[Column("strike_amount"), Description("动打芯片数量")]
|
||||||
|
public int StrikeAmount { get; set; }
|
||||||
|
|
||||||
|
[Column("current_wafer_coords_json"), Description("当前晶圆坐标")]
|
||||||
|
public string? CurrentWaferCoordsJson { get; set; }
|
||||||
|
|
||||||
|
[Column("current_needle_coords_json"), Description("当前针刺坐标")]
|
||||||
|
public string? CurrentNeedleCoordsJson { get; set; }
|
||||||
|
|
||||||
|
[Column("current_needle_deep_json"), Description("当前针刺深度")]
|
||||||
|
public string? CurrentNeedleDeepJson { get; set; }
|
||||||
|
|
||||||
|
[Column("origin_wafer_coords_json"), Description("当前动打原始晶圆坐标")]
|
||||||
|
public string? OriginWaferCoordsJson { get; set; }
|
||||||
|
|
||||||
|
[Column("origin_needle_coords_json"), Description("当前动打原始针刺坐标")]
|
||||||
|
public string? OriginNeedleCoordsJson { get; set; }
|
||||||
|
|
||||||
|
[Column("origin_needle_deep_json"), Description("当前动打原始针刺深度")]
|
||||||
|
public string? OriginNeedleDeepJson { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double[]> CurrentWaferCoords
|
||||||
|
{
|
||||||
|
get => CurrentWaferCoordsJson != null ? JsonUtil.FromJson<List<double[]>>(CurrentWaferCoordsJson) : [];
|
||||||
|
set => CurrentWaferCoordsJson = value == null ? "[]" : JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double[]> CurrentNeedleCoords
|
||||||
|
{
|
||||||
|
get => CurrentNeedleCoordsJson != null ? JsonUtil.FromJson<List<double[]>>(CurrentNeedleCoordsJson) : [];
|
||||||
|
set => CurrentNeedleCoordsJson = value == null ? "[]" : JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double> CurrentNeedleDeep
|
||||||
|
{
|
||||||
|
get => CurrentNeedleDeepJson != null ? JsonUtil.FromJson<List<double>>(CurrentNeedleDeepJson) : [];
|
||||||
|
set => CurrentNeedleDeepJson = value == null ? "[]" : JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double[]> OriginWaferCoords
|
||||||
|
{
|
||||||
|
get => OriginWaferCoordsJson != null ? JsonUtil.FromJson<List<double[]>>(OriginWaferCoordsJson) : [];
|
||||||
|
set => OriginWaferCoordsJson = value == null ? "[]" : JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double[]> OriginNeedleCoords
|
||||||
|
{
|
||||||
|
get => OriginNeedleCoordsJson != null ? JsonUtil.FromJson<List<double[]>>(OriginNeedleCoordsJson) : [];
|
||||||
|
set => OriginNeedleCoordsJson = value == null ? "[]" : JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public double[,] OriginNeedleDeep
|
||||||
|
{
|
||||||
|
get => OriginNeedleDeepJson != null ? JsonUtil.FromJson<double[,]>(OriginNeedleDeepJson) : new double[,] { };
|
||||||
|
set => OriginNeedleDeepJson = value == null ? "[]" : JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,16 +0,0 @@
|
||||||
namespace MasstransferExporter.DataExporter.Model;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 每次动打期间用到的wafer记录
|
|
||||||
/// </summary>
|
|
||||||
public class StrikeWaferRecord
|
|
||||||
{
|
|
||||||
public string WaferNumber { get; set; }
|
|
||||||
public string ChipQuantity { get; set; }
|
|
||||||
public string WaferInputTimeCost { get; set; }
|
|
||||||
public string ChipScanTimeCost { get; set; }
|
|
||||||
public string ProdutionTimeCost { get; set; }
|
|
||||||
public string PcbCheckTimeCost { get; set; }
|
|
||||||
public string WaferOutputTimeCost { get; set; }
|
|
||||||
public string HitedQuantity { get; set; }
|
|
||||||
}
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Model.Enum;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using Masuit.Tools;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 基板信息
|
||||||
|
/// </summary>
|
||||||
|
[Table("substrates")]
|
||||||
|
public class Substrate : Entity
|
||||||
|
{
|
||||||
|
[Column("context_id"), Description("上下文ID")]
|
||||||
|
public string? ContextId { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_code"), Description("基板编号")]
|
||||||
|
public string? SubstrateCode { get; set; }
|
||||||
|
|
||||||
|
[Column("jig_code"), Description("治具编号")]
|
||||||
|
public string? JigCode { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_type"), Description("基板类型")]
|
||||||
|
public SubstrateTypeEnum SubstrateType { get; set; }
|
||||||
|
|
||||||
|
[Column("row"), Description("基板行")] public int Row { get; set; }
|
||||||
|
|
||||||
|
[Column("column"), Description("基板列")] public int Column { get; set; }
|
||||||
|
|
||||||
|
[Column("batch_no"), Description("批次号")]
|
||||||
|
public string? BatchNo { get; set; }
|
||||||
|
|
||||||
|
[Column("formula_id"), Description("配方ID")]
|
||||||
|
public string? FormulaId { get; set; }
|
||||||
|
|
||||||
|
[Column("coordinate_json"), Description("焊点坐标信息")]
|
||||||
|
public string? CoordinateJson { get; set; }
|
||||||
|
|
||||||
|
[Column("altimetry_json"), Description("基板测高信息")]
|
||||||
|
public string? AltimetryJson { get; set; }
|
||||||
|
|
||||||
|
[Column("stander_altimetry_json"), Description("基板测高信息")]
|
||||||
|
public string? StanderAltimetryJson { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_mark_point_json"), Description("基板3个标点信息")]
|
||||||
|
public string? SubstrateMarkPointJson { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double[]>? Coordinates
|
||||||
|
{
|
||||||
|
get => !CoordinateJson.IsNullOrEmpty() ? JsonUtil.FromJson<List<double[]>>(CoordinateJson) : [];
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
CoordinateJson = JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public double[,]? Altimetry
|
||||||
|
{
|
||||||
|
get => !AltimetryJson.IsNullOrEmpty() ? JsonUtil.FromJson<double[,]>(AltimetryJson) : new double[,] { };
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
AltimetryJson = JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public double[,]? StanderAltimetry
|
||||||
|
{
|
||||||
|
get => !StanderAltimetryJson.IsNullOrEmpty()
|
||||||
|
? JsonUtil.FromJson<double[,]>(StanderAltimetryJson)
|
||||||
|
: new double[,] { };
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
StanderAltimetryJson = JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public SubstrateMarkPoint? SubstrateMarkPoint
|
||||||
|
{
|
||||||
|
get => !SubstrateMarkPointJson.IsNullOrEmpty()
|
||||||
|
? JsonUtil.FromJson<SubstrateMarkPoint>(SubstrateMarkPointJson)
|
||||||
|
: new SubstrateMarkPoint();
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
SubstrateMarkPointJson = JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 基板耗时信息
|
||||||
|
/// </summary>
|
||||||
|
[Table("substrate_consume_times"), Description("基板耗时信息")]
|
||||||
|
public class SubstrateConsumeTime : Entity
|
||||||
|
{
|
||||||
|
[Column("substrate_code"), Description("基板编号")]
|
||||||
|
public string SubstrateCode { get; set; }
|
||||||
|
|
||||||
|
[Column("substrate_id"), Description("基板ID")]
|
||||||
|
public string SubstrateId { get; set; }
|
||||||
|
|
||||||
|
[Column("loading_start_time"), Description("开始上料时间")]
|
||||||
|
public DateTime LoadingStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("loading_end_time"), Description("结束上料时间")]
|
||||||
|
public DateTime LoadingEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("loading_consumed_time"), Description("上料耗时")]
|
||||||
|
public int LoadingConsumedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("unloading_start_time"), Description("开始下料时间")]
|
||||||
|
public DateTime UnloadingStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("unloading_end_time"), Description("结束下料时间")]
|
||||||
|
public DateTime UnloadingEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("unloading_consumed_time"), Description("下料耗时")]
|
||||||
|
public int UnloadingConsumedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fly_start_time"), Description("开始飞拍时间")]
|
||||||
|
public DateTime FlyStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fly_end_time"), Description("结束飞拍时间")]
|
||||||
|
public DateTime FlyEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fly_consumed_time"), Description("飞拍耗时")]
|
||||||
|
public int FlyConsumedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("altimetry_start_time"), Description("开始测高时间")]
|
||||||
|
public DateTime AltimetryStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("altimetry_end_time"), Description("结束测高时间")]
|
||||||
|
public DateTime AltimetryEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("altimetry_consumed_time"), Description("测高耗时")]
|
||||||
|
public int AltimetryConsumedTime { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 基板mark点坐标
|
||||||
|
/// </summary>
|
||||||
|
public class SubstrateMarkPoint
|
||||||
|
{
|
||||||
|
public double X1 { get; set; }
|
||||||
|
|
||||||
|
public double Y1 { get; set; }
|
||||||
|
|
||||||
|
public double X2 { get; set; }
|
||||||
|
|
||||||
|
public double Y2 { get; set; }
|
||||||
|
|
||||||
|
public double X3 { get; set; }
|
||||||
|
|
||||||
|
public double Y3 { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 系统参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("system_params")]
|
||||||
|
[Description("系统参数")]
|
||||||
|
public class SystemParams : Entity
|
||||||
|
{
|
||||||
|
[Column("device_type"), Description("设备类型")]
|
||||||
|
public string? DeviceType { get; set; }
|
||||||
|
|
||||||
|
[Column("version"), Description("版本号")]
|
||||||
|
public string? Version { get; set; }
|
||||||
|
|
||||||
|
[Column("name"), Description("名称")] public string? Name { get; set; }
|
||||||
|
|
||||||
|
[Column("acs_ip"), Description("ACS 控制器IP")]
|
||||||
|
public string AcsIp { get; set; }
|
||||||
|
|
||||||
|
[Column("image_storage_path"), Description("照片存储路径")]
|
||||||
|
public string? ImageStoragePath { get; set; }
|
||||||
|
|
||||||
|
[Column("camera_viewer_storage_path"), Description("相机预览控件图片存储路径")]
|
||||||
|
public string? CameraViewerStoragePath { get; set; }
|
||||||
|
|
||||||
|
[Column("enable_auto_clear_image"), Description("是否自动清除历史照片")]
|
||||||
|
public bool EnableAutoClearImage { get; set; }
|
||||||
|
|
||||||
|
[Column("retained_day"), Description("照片保留天数")]
|
||||||
|
public int RetainedDay { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 系统参数DTO
|
||||||
|
/// </summary>
|
||||||
|
public class SystemParamsDTO
|
||||||
|
{
|
||||||
|
public CameraParams? CameraParams { get; set; }
|
||||||
|
|
||||||
|
public SystemParams? SystemParams { get; set; }
|
||||||
|
|
||||||
|
public LogParams? LogParams { get; set; }
|
||||||
|
|
||||||
|
public ScannerParams? ScannerParams { get; set; }
|
||||||
|
|
||||||
|
public CameraInternalParams? WaferCameraInternalParams { get; set; }
|
||||||
|
|
||||||
|
public CameraInternalParams? SubstrateCameraInternalParams { get; set; }
|
||||||
|
|
||||||
|
public MinioParams? MinioParams { get; set; }
|
||||||
|
|
||||||
|
public MqttParams? MqttParams { get; set; }
|
||||||
|
|
||||||
|
public AxisVariables? AxisVariables { get; set; }
|
||||||
|
|
||||||
|
public AxisPositionParams? AxisPositionParams { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using MasstransferCommon.Utils;
|
||||||
|
using Masuit.Tools;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
[Table("wafers"), Description("晶环信息")]
|
||||||
|
public class Wafer : Entity
|
||||||
|
{
|
||||||
|
[Column("wafer_code"), Description("晶片编号")]
|
||||||
|
public string? WaferCode { get; set; }
|
||||||
|
|
||||||
|
[Column("batch_code"), Description("批次号")]
|
||||||
|
public string? BatchCode { get; set; }
|
||||||
|
|
||||||
|
[Column("color"), Description("晶片颜色")] public ChipColorEnum Color { get; set; }
|
||||||
|
|
||||||
|
[Column("context_id"), Description("上下文id")]
|
||||||
|
public string? ContextId { get; set; }
|
||||||
|
|
||||||
|
[Column("column"), Description("列")] public int Column { get; set; }
|
||||||
|
|
||||||
|
[Column("row"), Description("行")] public int Row { get; set; }
|
||||||
|
|
||||||
|
[Column("layer"), Description("所在层")] public int Layer { get; set; }
|
||||||
|
|
||||||
|
[Column("used"), Description("是否已使用")] public bool Used { get; set; }
|
||||||
|
|
||||||
|
[Column("used_times"), Description("已使用次数")]
|
||||||
|
public int UsedTimes { get; set; }
|
||||||
|
|
||||||
|
[Column("chip_amount"), Description("芯片数量")]
|
||||||
|
public int ChipAmount { get; set; }
|
||||||
|
|
||||||
|
[Column("coordinate_json"), Description("芯片坐标信息")]
|
||||||
|
public string? CoordinateJson { get; set; }
|
||||||
|
|
||||||
|
[Ignore]
|
||||||
|
public List<double[]> Coordinates
|
||||||
|
{
|
||||||
|
get => !CoordinateJson.IsNullOrEmpty() ? JsonUtil.FromJson<List<double[]>>(CoordinateJson) : [];
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
CoordinateJson = JsonUtil.ToJson(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 晶环耗时信息
|
||||||
|
/// </summary>
|
||||||
|
[Table("wafer_consume_times"), Description("晶环耗时信息")]
|
||||||
|
public class WaferConsumeTime : Entity
|
||||||
|
{
|
||||||
|
[Column("wafer_id"), Description("晶环ID")]
|
||||||
|
public string WaferId { get; set; }
|
||||||
|
|
||||||
|
[Column("wafer_code"), Description("晶片编号")]
|
||||||
|
public string WaferCode { get; set; }
|
||||||
|
|
||||||
|
[Column("loading_start_time"), Description("开始上料时间")]
|
||||||
|
public DateTime LoadingStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("loading_end_time"), Description("结束上料时间")]
|
||||||
|
public DateTime LoadingEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("loading_consumed_time"), Description("上料耗时")]
|
||||||
|
public int LoadingConsumedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("unloading_start_time"), Description("开始下料时间")]
|
||||||
|
public DateTime UnloadingStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("unloading_end_time"), Description("结束下料时间")]
|
||||||
|
public DateTime UnloadingEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("unloading_consumed_time"), Description("下料耗时")]
|
||||||
|
public int UnloadingConsumedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("rotate_start_time"), Description("开始旋转时间")]
|
||||||
|
public DateTime RotateStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("rotate_end_time"), Description("结束旋转时间")]
|
||||||
|
public DateTime RotateEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("rotate_consumed_time"), Description("旋转耗时")]
|
||||||
|
public int RotateConsumedTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fly_start_time"), Description("开始飞拍时间")]
|
||||||
|
public DateTime FlyStartTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fly_end_time"), Description("结束飞拍时间")]
|
||||||
|
public DateTime FlyEndTime { get; set; }
|
||||||
|
|
||||||
|
[Column("fly_consumed_time"), Description("飞拍耗时")]
|
||||||
|
public int FlyConsumedTime { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产配方-wafer配置参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("wafer_settings")]
|
||||||
|
public class WaferSetting : Entity
|
||||||
|
{
|
||||||
|
[Column("formulaId"), Description("配方Id")]
|
||||||
|
public string FormulaId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 芯片间距
|
||||||
|
/// </summary>
|
||||||
|
[Column("pitch"), Description("芯片间距")]
|
||||||
|
public double Pitch { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 芯片高
|
||||||
|
/// </summary>
|
||||||
|
[Column("height"), Description("芯片高")]
|
||||||
|
public double Height { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 芯片宽
|
||||||
|
/// </summary>
|
||||||
|
[Column("width"), Description("芯片宽")]
|
||||||
|
public double Width { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 合并行容忍度
|
||||||
|
/// </summary>
|
||||||
|
[Column("row_similar_threshold"), Description("合行容忍度")]
|
||||||
|
public double RowSimilarThreshold { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 合并列容忍度
|
||||||
|
/// </summary>
|
||||||
|
[Column("column_similar_threshold"), Description("合列容忍度")]
|
||||||
|
public double ColumnSimilarThreshold { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 芯片最大旋转角度
|
||||||
|
/// </summary>
|
||||||
|
[Column("max_angle"), Description("芯片最大旋转角度")]
|
||||||
|
public double MaxAngle { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 芯片模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("bin_template"), Description("芯片模板")]
|
||||||
|
public string BinTemplate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 芯片ncc模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("bin_ncc_template"), Description("芯片ncc模板")]
|
||||||
|
public string BinNccTemplate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标定模板
|
||||||
|
/// </summary>
|
||||||
|
[Column("calibration_template"), Description("标定模板")]
|
||||||
|
public string CalibrationTemplate { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MasstransferCommon.Model.Entity;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter.Model;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产配方-工作台配置参数
|
||||||
|
/// </summary>
|
||||||
|
[Table("work_bench_settings")]
|
||||||
|
public class WorkBenchSetting : Entity
|
||||||
|
{
|
||||||
|
// 所属的配方id
|
||||||
|
[Column("formulaId"), Description("配方Id")]
|
||||||
|
public string FormulaId { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_start_x"), Description("晶圆飞拍时PCB机构开始X坐标")]
|
||||||
|
public double BinScanStartX { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_start_y"), Description("晶圆飞拍时PCB机构开始Y坐标")]
|
||||||
|
public double BinScanStartY { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_end_x"), Description("晶圆飞拍时PCB机构结束X坐标")]
|
||||||
|
public double BinScanEndX { get; set; }
|
||||||
|
|
||||||
|
[Column("bin"), Description("晶圆飞拍时PCB机构结束Y坐标")]
|
||||||
|
public double BinScanEndY { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_distance_x"), Description("晶圆飞拍X轴间距")]
|
||||||
|
public double BinScanDistanceX { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_distance_y"), Description("晶圆飞拍Y轴间距")]
|
||||||
|
public double BinScanDistanceY { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_move_x"), Description("晶圆飞拍初始X坐标")]
|
||||||
|
public double BinScanMoveX { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_move_y"), Description("晶圆飞拍初始Y坐标")]
|
||||||
|
public double BinScanMoveY { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_Height"), Description("晶圆飞拍相机高度")]
|
||||||
|
public double BinScanHeight { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_scan_Height"), Description("PCB飞拍相机高度")]
|
||||||
|
public double PcbScanHeight { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_x1"), Description("焊点1拍照坐标X")]
|
||||||
|
public double SolderJointX1 { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_y1"), Description("焊点1拍照坐标Y")]
|
||||||
|
public double SolderJointY1 { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_x2"), Description("焊点2拍照坐标X")]
|
||||||
|
public double SolderJointX2 { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_y2"), Description("焊点2拍照坐标Y")]
|
||||||
|
public double SolderJointY2 { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_x3"), Description("焊点3拍照坐标X")]
|
||||||
|
public double SolderJointX3 { get; set; }
|
||||||
|
|
||||||
|
[Column("solder_joint_y3"), Description("焊点3拍照坐标Y")]
|
||||||
|
public double SolderJointY3 { get; set; }
|
||||||
|
|
||||||
|
[Column("pcb_scan_origin_offset"), Description("基板扫描原点补偿值")]
|
||||||
|
public double PcbScanOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_scan_origin_offset"), Description("芯片飞拍原点补偿值")]
|
||||||
|
public double BinScanOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("result_detect_origin_offset"), Description("结果检测原点补偿值")]
|
||||||
|
public double ResultDetectOriginOffset { get; set; }
|
||||||
|
|
||||||
|
[Column("detect_pcb_x_distance"), Description("结果检测时pcbX飞拍间距")]
|
||||||
|
public double DetectPcbXDistance { get; set; }
|
||||||
|
|
||||||
|
[Column("detect_pcb_y_distance"), Description("结果检测时pcbY轴飞拍间距")]
|
||||||
|
public double DetectPcbYDistance { get; set; }
|
||||||
|
|
||||||
|
[Column("delta_x_between_acupuncture_and_bin_structure"),
|
||||||
|
Description("晶圆机构每移动1单位相对于针刺机构移动的x补偿值, binx*(1+DeltaXBetweenAcupunctureAndBinStructure) = pcbx")]
|
||||||
|
public double DeltaXBetweenAcupunctureAndBinStructure { get; set; }
|
||||||
|
|
||||||
|
[Column("delta_Y_between_acupuncture_and_bin_structure"),
|
||||||
|
Description("晶圆机构每移动1单位相对于针刺机构移动的y补偿值, biny*(1+DeltaYBetweenAcupunctureAndBinStructure) = pcby")]
|
||||||
|
public double DeltaYBetweenAcupunctureAndBinStructure { get; set; }
|
||||||
|
|
||||||
|
[Column("angle_between_acupuncture_and_bin_structure"), Description("晶圆机构与针刺机构的夹角")]
|
||||||
|
public double AngleBetweenAcupunctureAndBinStructure { get; set; }
|
||||||
|
|
||||||
|
[Column("bin_calibration_scan_Height"), Description("晶圆机构标定拍照高度")]
|
||||||
|
public double BinCalibrationScanHeight { get; set; }
|
||||||
|
}
|
|
@ -1,13 +1,102 @@
|
||||||
namespace MasstransferExporter.DataExporter;
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using MasstransferInfrastructure.Database.Sqlite;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter;
|
||||||
|
|
||||||
public class StrikeRecordService
|
public class StrikeRecordService
|
||||||
{
|
{
|
||||||
|
private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 上报动打记录
|
/// 上报动打记录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static void ReportStrikeRecord()
|
public static async Task ReportStrikeRecord()
|
||||||
{
|
{
|
||||||
// 根据这个基板编号,从记录中找到所有的跟基板有关的生产记录
|
// 根据这个基板编号,从记录中找到所有的跟基板有关的生产记录
|
||||||
|
await ReportStrikeRecord("1108016217473286144");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上报基板动打
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="substrateId"></param>
|
||||||
|
private static async Task ReportStrikeRecord(string substrateId)
|
||||||
|
{
|
||||||
|
var sql = "select * from substrates where Id = ?";
|
||||||
|
var substrate = Db.Query<Substrate>(sql, substrateId).FirstOrDefault();
|
||||||
|
|
||||||
|
if (substrate == null) return;
|
||||||
|
|
||||||
|
var record = new ProductionRecord
|
||||||
|
{
|
||||||
|
BatchNumber = substrate.BatchNo,
|
||||||
|
PcbNumber = substrate.SubstrateCode,
|
||||||
|
ChipType = substrate.SubstrateType.ToString(),
|
||||||
|
HitQuantity = (substrate.Column * substrate.Row).ToString()
|
||||||
|
};
|
||||||
|
|
||||||
|
// 查询出跟当前的基板相关的所有生产记录
|
||||||
|
var queryStrikeRecord = "select * from strike_records where substrate_id = ?";
|
||||||
|
var strikeRecords = Db.Query<StrikeRecord>(queryStrikeRecord, substrateId);
|
||||||
|
|
||||||
|
var waferIds = strikeRecords.Select(r => r.WaferId).ToList();
|
||||||
|
|
||||||
|
// 查询出当前基板的耗时信息
|
||||||
|
var querySubstrateConsumeTime = "select * from substrate_consume_times where substrate_id = ?";
|
||||||
|
var substrateConsumeTime =
|
||||||
|
Db.Query<SubstrateConsumeTime>(querySubstrateConsumeTime, substrateId).FirstOrDefault();
|
||||||
|
if (substrateConsumeTime != null)
|
||||||
|
{
|
||||||
|
record.PcbInputTimeCost = substrateConsumeTime.LoadingConsumedTime;
|
||||||
|
record.PcbOutputTimeCost = substrateConsumeTime.UnloadingConsumedTime;
|
||||||
|
record.PcbScanTimeCost = substrateConsumeTime.FlyConsumedTime;
|
||||||
|
record.PcbInputTime = substrateConsumeTime.LoadingStartTime;
|
||||||
|
record.PcbOutputTime = substrateConsumeTime.UnloadingEndTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询出当前的作业相关的晶环耗时信息
|
||||||
|
var queryWaferConsumeTime =
|
||||||
|
"select * from wafer_consume_times where wafer_id in (" + string.Join(",", waferIds) + ")";
|
||||||
|
|
||||||
|
var waferConsumeTimes = Db.Query<WaferConsumeTime>(queryWaferConsumeTime);
|
||||||
|
|
||||||
|
// 查询出当前作业的所有晶环信息
|
||||||
|
var queryWafer = "select * from wafers where Id in (" + string.Join(",", waferIds) + ")";
|
||||||
|
|
||||||
|
var wafers = Db.Query<Wafer>(queryWafer);
|
||||||
|
|
||||||
|
// 将晶环耗时信息与晶环信息关联
|
||||||
|
var waferConsumeTimeDict = waferConsumeTimes.ToDictionary(time => time.WaferId);
|
||||||
|
|
||||||
|
// 将生产记录转为以晶环为key的集合
|
||||||
|
var strikeRecordDict = strikeRecords.ToDictionary(r => r.WaferId);
|
||||||
|
|
||||||
|
// 封装晶环动打记录
|
||||||
|
List<ProductionWaferRecord> waferRecords = [];
|
||||||
|
foreach (var wafer in wafers)
|
||||||
|
{
|
||||||
|
var consumeTime = waferConsumeTimeDict!.GetValueOrDefault(wafer.Id);
|
||||||
|
|
||||||
|
var strikeRecord = strikeRecordDict.GetValueOrDefault(wafer.Id);
|
||||||
|
|
||||||
|
var waferRecord = new ProductionWaferRecord
|
||||||
|
{
|
||||||
|
WaferNumber = wafer.WaferCode,
|
||||||
|
ChipQuantity = wafer.ChipAmount,
|
||||||
|
WaferInputTimeCost = consumeTime.LoadingConsumedTime,
|
||||||
|
WaferOutputTimeCost = consumeTime.UnloadingConsumedTime,
|
||||||
|
ChipScanTimeCost = consumeTime.FlyConsumedTime,
|
||||||
|
HitedQuantity = strikeRecord.StrikeAmount,
|
||||||
|
};
|
||||||
|
|
||||||
|
waferRecords.Add(waferRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
record.Rounds = waferRecords;
|
||||||
|
// 将结果上报
|
||||||
|
await MessageQueueHelper.Publish(Topics.ReportProductRecord, record);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,238 @@
|
||||||
|
using MasstransferCommon.Model.Constant;
|
||||||
|
using MasstransferCommunicate.Mqtt.Client;
|
||||||
|
using MasstransferExporter.DataExporter.Model;
|
||||||
|
using MasstransferInfrastructure.Database.Sqlite;
|
||||||
|
using Masuit.Tools;
|
||||||
|
|
||||||
|
namespace MasstransferExporter.DataExporter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 系统配置参数服务
|
||||||
|
/// </summary>
|
||||||
|
public class SystemParamsService
|
||||||
|
{
|
||||||
|
private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理下发的系统配置参数
|
||||||
|
/// </summary>
|
||||||
|
public static void HandleSystemParamsIssuedEvent(SystemParamsDTO dto)
|
||||||
|
{
|
||||||
|
if (dto.IsNullOrEmpty()) return;
|
||||||
|
|
||||||
|
|
||||||
|
if (dto?.CameraParams != null)
|
||||||
|
{
|
||||||
|
var cameraParams = dto.CameraParams;
|
||||||
|
var cameraParamsFromDb = GetCameraParams();
|
||||||
|
if (cameraParamsFromDb != null)
|
||||||
|
{
|
||||||
|
cameraParams.Id = cameraParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(cameraParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.LogParams != null)
|
||||||
|
{
|
||||||
|
var logParams = dto.LogParams;
|
||||||
|
var logParamsFromDb = GetLogParams();
|
||||||
|
if (logParamsFromDb != null)
|
||||||
|
{
|
||||||
|
logParams.Id = logParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(logParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.MinioParams != null)
|
||||||
|
{
|
||||||
|
var minioParams = dto.MinioParams;
|
||||||
|
var minioParamsFromDb = GetMinioParams();
|
||||||
|
if (minioParamsFromDb != null)
|
||||||
|
{
|
||||||
|
minioParams.Id = minioParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(minioParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.MqttParams != null)
|
||||||
|
{
|
||||||
|
var mqttParams = dto.MqttParams;
|
||||||
|
var mqttParamsFromDb = GetMqttConnectParams();
|
||||||
|
if (mqttParamsFromDb != null)
|
||||||
|
{
|
||||||
|
mqttParams.Id = mqttParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(mqttParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.ScannerParams != null)
|
||||||
|
{
|
||||||
|
var scannerParams = dto.ScannerParams;
|
||||||
|
var scannerParamsFromDb = GetScannerParams();
|
||||||
|
if (scannerParamsFromDb != null)
|
||||||
|
{
|
||||||
|
scannerParams.Id = scannerParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(scannerParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.WaferCameraInternalParams != null)
|
||||||
|
{
|
||||||
|
var waferCameraInternalParams = dto.WaferCameraInternalParams;
|
||||||
|
var waferCameraInternalParamsFromDb = GetWaferParams();
|
||||||
|
if (waferCameraInternalParamsFromDb != null)
|
||||||
|
{
|
||||||
|
waferCameraInternalParams.Id = waferCameraInternalParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(waferCameraInternalParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.AxisVariables != null)
|
||||||
|
{
|
||||||
|
var axisVariables = dto.AxisVariables;
|
||||||
|
var axisVariablesFromDb = GetAxisVariables();
|
||||||
|
if (axisVariablesFromDb != null)
|
||||||
|
{
|
||||||
|
axisVariables.Id = axisVariablesFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(axisVariables);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.AxisPositionParams != null)
|
||||||
|
{
|
||||||
|
var axisPositionParams = dto.AxisPositionParams;
|
||||||
|
var axisPositionParamsFromDb = GetAxisPositionParams();
|
||||||
|
if (axisPositionParamsFromDb != null)
|
||||||
|
{
|
||||||
|
axisPositionParams.Id = axisPositionParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(axisPositionParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dto?.SubstrateCameraInternalParams == null) return;
|
||||||
|
|
||||||
|
var substrateCameraInternalParams = dto.SubstrateCameraInternalParams;
|
||||||
|
var substrateCameraInternalParamsFromDb = GetSubstrateParams();
|
||||||
|
if (substrateCameraInternalParamsFromDb != null)
|
||||||
|
{
|
||||||
|
substrateCameraInternalParams.Id = substrateCameraInternalParamsFromDb.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db.SaveOrUpdate(substrateCameraInternalParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 系统参数上报
|
||||||
|
/// </summary>
|
||||||
|
public static async Task ExportSystemParams()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var dto = new SystemParamsDTO()
|
||||||
|
{
|
||||||
|
CameraParams = GetCameraParams(),
|
||||||
|
SubstrateCameraInternalParams = GetSubstrateParams(),
|
||||||
|
WaferCameraInternalParams = GetWaferParams(),
|
||||||
|
LogParams = GetLogParams(),
|
||||||
|
MinioParams = GetMinioParams(),
|
||||||
|
MqttParams = GetMqttConnectParams(),
|
||||||
|
ScannerParams = GetScannerParams(),
|
||||||
|
SystemParams = GetSystemParams(),
|
||||||
|
AxisVariables = GetAxisVariables(),
|
||||||
|
AxisPositionParams = GetAxisPositionParams()
|
||||||
|
};
|
||||||
|
|
||||||
|
var systemParams = new ConfigData<SystemParamsDTO>()
|
||||||
|
{
|
||||||
|
Name = "系统配置",
|
||||||
|
Param = dto,
|
||||||
|
Type = "SYSTEM"
|
||||||
|
};
|
||||||
|
|
||||||
|
await MessageQueueHelper.Publish(Topics.ReportConfigData, systemParams);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"系统配置参数上报失败: {e}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static CameraParams? GetCameraParams()
|
||||||
|
{
|
||||||
|
return Db.Query<CameraParams>("select * from camera_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取wafer相机参数
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static CameraInternalParams? GetWaferParams()
|
||||||
|
{
|
||||||
|
return Db.Query<CameraInternalParams>("select * from camera_internal_params where type = 'wafer'")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取基材相机参数
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static CameraInternalParams? GetSubstrateParams()
|
||||||
|
{
|
||||||
|
return Db.Query<CameraInternalParams>("select * from camera_internal_params where type = 'substrate'")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LogParams? GetLogParams()
|
||||||
|
{
|
||||||
|
return Db.Query<LogParams>("select * from log_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static SystemParams? GetSystemParams()
|
||||||
|
{
|
||||||
|
return Db.Query<SystemParams>("select * from system_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static ScannerParams? GetScannerParams()
|
||||||
|
{
|
||||||
|
return Db.Query<ScannerParams>("select * from scanner_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MinioParams? GetMinioParams()
|
||||||
|
{
|
||||||
|
return Db.Query<MinioParams>("select * from minio_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MqttParams? GetMqttConnectParams()
|
||||||
|
{
|
||||||
|
return Db.Query<MqttParams>("select * from mqtt_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AxisVariables? GetAxisVariables()
|
||||||
|
{
|
||||||
|
return Db.Query<AxisVariables>("select * from axis_variables limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AxisPositionParams? GetAxisPositionParams()
|
||||||
|
{
|
||||||
|
return Db.Query<AxisPositionParams>("select * from axis_position_params limit 1")
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue