Compare commits

...

51 Commits

Author SHA1 Message Date
huangxianguo 57ea062060 集成定时任务框架和配置定时策略 2024-09-13 18:44:13 +08:00
wangkaiyi 7ef948ae48 fix OTA完成;
fix 系统版本上传;
2024-09-13 18:13:00 +08:00
wangkaiyi b692f8e41c feat 上行系统版本信息 2024-09-11 20:43:14 +08:00
wangkaiyi fd52e9c843 fix ota 2024-09-11 16:50:49 +08:00
huangxianguo b3980da48f 修复进程间通讯消息序列号异常问题 2024-09-11 12:00:04 +08:00
huangxianguo e5c23c26ef 完善系统参数下发功能 2024-09-10 19:44:26 +08:00
huangxianguo 504216dfbd 完善配方下发功能 2024-09-10 19:25:18 +08:00
huangxianguo 6f99477de4 完善查询日志的接口 2024-09-10 17:22:05 +08:00
huangxianguo 8b33224428 完善查询坐标文件功能 2024-09-10 16:56:46 +08:00
huangxianguo cdaa4d8d52 完善查询坐标文件功能 2024-09-10 16:54:03 +08:00
huangxianguo 0e5f7a56d8 完善查询坐标的功能 2024-09-10 16:15:26 +08:00
huangxianguo 7bcc84ee8b 完善查询图片的功能 2024-09-10 15:06:10 +08:00
huangxianguo d199ff7f7f 完善上传系统状态信息接口 2024-09-10 11:59:34 +08:00
huangxianguo 5dfbdfee5e 完善上传生产数据问题 2024-09-10 10:17:00 +08:00
huangxianguo 7edb347ec7 添加上传坐标数据的功能 2024-09-09 14:58:21 +08:00
huangxianguo e20129a4c1 集成Serilog日志框架 2024-09-09 11:52:15 +08:00
huangxianguo 4dd680b0dc 完善故障记录和上传图片的接口 2024-09-09 11:06:21 +08:00
huangxianguo 0daf08eb3d 修复配方文件上传问题 2024-09-06 17:20:36 +08:00
huangxianguo 3f24aacb1d 上传配方文件时,增加上传字段属性功能 2024-09-06 16:42:18 +08:00
huangxianguo ae30c33f44 修复mqtt接收的消息反序列化异常问题 2024-09-06 15:08:32 +08:00
huangxianguo e54f601278 调整了远程锁机和解锁接口 2024-09-05 21:25:51 +08:00
huangxianguo 5710bf9005 调整了远程锁机和解锁接口 2024-09-05 19:56:27 +08:00
huangxianguo 8c6c3363b8 调整了远程锁机和解锁接口 2024-09-05 19:55:02 +08:00
huangxianguo c5b12fa559 修复mqtt消费消息反序列化异常问题 2024-09-05 19:41:09 +08:00
huangxianguo b9a7b1350b 修复进程间通讯异常问题 2024-09-04 10:11:04 +08:00
huangxianguo 8cfae665be 修复进程间通讯异常问题 2024-09-03 16:13:49 +08:00
huangxianguo 55ed7729e1 完善数据采集进程逻辑 2024-09-02 21:02:04 +08:00
huangxianguo 3fa0d33bd6 添加上报生产记录功能 2024-08-28 15:58:01 +08:00
wangkaiyi e9dfd46e1d fix 删除单元测试 2024-08-27 17:10:41 +08:00
wangkaiyi 835ce1375b fix OTA 2024-08-27 17:09:48 +08:00
huangxianguo 877cf4ba7a 完善查询日志的功能 2024-08-23 16:23:08 +08:00
huangxianguo 5698acc185 完善图片上传功能 2024-08-23 15:15:43 +08:00
huangxianguo 6014885442 Merge remote-tracking branch 'origin/sprint-731' into sprint-731 2024-08-23 14:14:13 +08:00
wangkaiyi 40569d9184 fix OTA更新逻辑 2024-08-22 17:09:31 +08:00
wangkaiyi afb91406f0 feat ApiClient.cs添加异步下载文件
feat Md5Util.cs添加计算压缩包MD5
fix 修改OTA
2024-08-22 16:29:18 +08:00
huangxianguo 2a0ac107c5 Merge remote-tracking branch 'origin/sprint-731' into sprint-731 2024-08-22 15:01:46 +08:00
huangxianguo 3d1c151f32 完善参数下发相关参数 2024-08-22 15:01:38 +08:00
wangkaiyi 64cf339683 feat OTA 2024-08-20 09:53:11 +08:00
wangkaiyi a303714a63 OTA包更新、回滚;apiClient中下载文件 2024-08-12 12:11:27 +08:00
huangxianguo c140544af7 添加上传坐标文件的功能 2024-07-18 15:46:59 +08:00
huangxianguo 3fdbe7c5c5 添加上传坐标文件的功能 2024-07-18 14:14:41 +08:00
huangxianguo 44456861df 调整图片上传逻辑 2024-07-18 10:46:12 +08:00
huangxianguo 9c1993f730 调整图片上传逻辑 2024-07-18 10:19:53 +08:00
huangxianguo 34c7a83ab7 添加上传图片相关逻辑 2024-07-17 14:28:24 +08:00
huangxianguo 30d8d953a0 添加上传图片相关逻辑 2024-07-17 14:22:08 +08:00
huangxianguo 2b4e179cf9 添加心跳逻辑 2024-07-12 16:22:41 +08:00
huangxianguo 6927c9048c 添加参数上报功能 2024-07-12 16:11:27 +08:00
huangxianguo e98b1bf31f 添加上传日志相关的接口 2024-07-12 14:32:15 +08:00
huangxianguo 5464aa361a 添加上传日志相关的接口 2024-07-09 16:27:33 +08:00
huangxianguo 1076bc6ea8 添加用户操作日志功能 2024-07-09 13:53:06 +08:00
huangxianguo 810bd3e497 添加用户操作日志功能 2024-07-09 11:41:08 +08:00
156 changed files with 7690 additions and 763 deletions

View File

@ -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>

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,10 @@
namespace MasstransferCommon.Events;
/// <summary>
/// 用于声明当前方法为事件处理器
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public class EventAction(params EventType[] types) : Attribute
{
public EventType[] Types => types;
}

View File

@ -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);
}
}
}

View File

@ -0,0 +1,10 @@
namespace MasstransferCommon.Events;
/// <summary>
/// 用于声明当前类为事件监听
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class EventListener(string name = "") : Attribute
{
private string Name => name;
}

View File

@ -0,0 +1,15 @@
using System.ComponentModel;
namespace MasstransferCommon.Events;
/// <summary>
/// 通过事件发布订阅模式实现系统各组件的解耦
/// 这里定义的是事件的驱动类型
/// </summary>
public enum EventType
{
// 系统初始化事件
[Description("系统初始化事件")] SetupNotify,
[Description("系统已经启动事件")] StartUp,
}

View File

@ -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>

View File

@ -0,0 +1,6 @@
namespace MasstransferCommon.Model.Atrributes;
[AttributeUsage(AttributeTargets.Property)]
public class Hide : Attribute
{
}

View File

@ -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;
}

View File

@ -0,0 +1,6 @@
namespace MasstransferCommon.Model.Constant;
public class Constants
{
public const string SN = "G5506771257";
}

View File

@ -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";
} }

View File

@ -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}";
} }

View File

@ -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;
} }

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -0,0 +1,9 @@
using System.ComponentModel;
namespace MasstransferCommon.Model.Enum;
public enum AltimetryStrategyEnum
{
[Description("按面积")] ByArea = 1,
[Description("按坐标")] ByCoordinate = 2
}

View File

@ -0,0 +1,8 @@
namespace MasstransferCommon.Model.Enum;
public enum ChipColorEnum
{
R = 1,
G = 2,
B = 3
}

View File

@ -0,0 +1,9 @@
using System.ComponentModel;
namespace MasstransferCommon.Model.Enum;
public enum DirectionEnum
{
[Description("行方向")] ROW = 1,
[Description("列方向")] COLUMN = 2,
}

View File

@ -0,0 +1,8 @@
namespace MasstransferCommon.Model.Enum;
public enum ExceptionLevel : int
{
NORMAL,
WARN,
ERROR,
}

View File

@ -0,0 +1,8 @@
namespace MasstransferCommon.Model.Enum;
public enum GainAutoEnum
{
Off,
Once,
Continuous
}

View File

@ -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,
}

View File

@ -0,0 +1,6 @@
namespace MasstransferCommon.Model.Enum;
public enum LineModeEnum
{
Strobe
}

View File

@ -0,0 +1,8 @@
namespace MasstransferCommon.Model.Enum;
public enum LineSelectorEnum
{
Line0,
Line1,
Line2,
}

View File

@ -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
}

View File

@ -0,0 +1,7 @@
namespace MasstransferCommon.Model.Enum;
public enum TlsProtocolsEnum
{
TLS_1_2,
TLS_1_3
}

View File

@ -0,0 +1,10 @@
namespace MasstransferCommon.Model.Enum;
public enum TriggerActivationEnum
{
RisingEdge,
FallingEdge,
LevelHigh,
LevelLow,
AnyEdge
}

View File

@ -0,0 +1,7 @@
namespace MasstransferCommon.Model.Enum;
public enum TriggerModeEnum
{
Off,
On
}

View File

@ -0,0 +1,10 @@
namespace MasstransferCommon.Model.Enum;
public enum TriggerSourceEnum
{
Software,
Line0,
Line2,
Counter0,
Anyway
}

View File

@ -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), "延时时间不能为负数");
await Task.Delay(delay, cancellationToken);
if (cancellationToken.IsCancellationRequested)
{
return;
} }
private void TimerCallback(object? state) action();
}
catch (Exception e)
{ {
_timer?.Dispose(); if (e is not TaskCanceledException)
_action?.Invoke(); {
Log.Error(e, "延时任务执行失败");
}
}
} }
} }

View File

@ -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();
}
}

View File

@ -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));
}
}

View File

@ -0,0 +1,9 @@
namespace MasstransferCommon.Atrributes;
public interface Instant
{
/// <summary>
/// 初始化对象后进行回调
/// </summary>
void Initialized();
}

View File

@ -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);
}
}
}

View File

@ -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
{ {

View File

@ -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;
}
}
}
} }

View File

@ -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);
} }
} }

View File

@ -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;
}
}

View File

@ -4,7 +4,6 @@ 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);
@ -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对象

View File

@ -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")]

View File

@ -1 +1 @@
55253de7166d1dd8e0b57bd70c6516d44d5416d0 24bba642a13e6757b4f3f31fb043b50bb46d2cbfc99854439c2393c381e11be8

View File

@ -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 =

View File

@ -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"
} }
} }
} }

View File

@ -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>

View File

@ -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>

View File

@ -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"
} }
} }
} }

View File

@ -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": []
} }

View File

@ -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"}}

View File

@ -1 +1 @@
17173821281053621 17234348310820990

View File

@ -1 +1 @@
17187849294453387 17234348310820990

View File

@ -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

View File

@ -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">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="Test" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;MSTest::DBEDC6E1-AEE6-47FA-A17A-2B412CE99C7C::net7.0::MasstransferCommon.Tests.Utils.JsonUtilTest.Test&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>

View File

@ -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);
}
}

View File

@ -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;
}
}
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}
}
}

View File

@ -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; }
}

View File

@ -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);
}
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -0,0 +1,10 @@
namespace MasstransferExporter.DataExporter.Model;
/// <summary>
/// 配方参数信息
/// </summary>
public class FormulaConfig
{
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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;R2:G3: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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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);
}
} }

View File

@ -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; }
}

View File

@ -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);
}
}
}
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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);
}
}
}
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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);
} }
} }

View File

@ -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