添加上传坐标数据的功能

This commit is contained in:
huangxianguo 2024-09-09 14:58:21 +08:00
parent e20129a4c1
commit 7edb347ec7
3 changed files with 157 additions and 69 deletions

View File

@ -1,119 +1,207 @@
using MasstransferCommon.Atrributes; using MasstransferCommon.Model.Constant;
using MasstransferCommon.Model.Constant;
using MasstransferCommon.Utils; using MasstransferCommon.Utils;
using MasstransferCommunicate.Minio; using MasstransferCommunicate.Minio;
using MasstransferCommunicate.Mqtt.Client; using MasstransferCommunicate.Mqtt.Client;
using MasstransferExporter.DataExporter.Model; using MasstransferExporter.DataExporter.Model;
using MasstransferInfrastructure.Database.Sqlite; using MasstransferInfrastructure.Database.Sqlite;
using Masuit.Tools;
namespace MasstransferExporter.DataExporter; namespace MasstransferExporter.DataExporter;
/// <summary> /// <summary>
/// 坐标信息业务类 /// 坐标信息业务类
/// </summary> /// </summary>
public class CoordinateService : Instant public class CoordinateService
{ {
private static readonly SqliteHelper Db = SqliteHelper.GetInstance(); private static readonly SqliteHelper Db = SqliteHelper.GetInstance();
private static MinioHelper _minio = MinioHelper.GetInstance(); private static readonly MinioHelper Minio = MinioHelper.GetInstance();
/// <summary> /// <summary>
/// 坐标信息导出 /// 坐标信息导出
/// 每5秒钟自动上报一次当前时间内的坐标信息
/// </summary> /// </summary>
public static async void CoordinateExporter() public static Task CoordinateExporter()
{ {
await MarkPointExporter(); 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.AddDays(-5);
WaferCoordinateExporter(startTime, endTime);
SubstrateCoordinateExporter(startTime, endTime);
PathCoordinateExporter(startTime, endTime);
});
} }
/// <summary> /// <summary>
/// 上传mark点坐标文件 /// 上传mark点坐标文件
/// </summary> /// </summary>
private static async Task MarkPointExporter() private static async Task MarkPointExporter(string batchCode, string substrateCode)
{ {
var formula = FormulaService.GetSelectedFormula(); var path = Path.Combine(Environment.CurrentDirectory, "temp", "mark.json");
try
if (formula == null) return;
var benchSetting = FormulaService.GetWorkBenchSettingByFormulaId(formula.Id);
if (benchSetting == null) return;
// 将mark点转为json,写到临时文件
var coordinates = new Dictionary<string, double>
{ {
{ "SolderJointX1", benchSetting.SolderJointX1 }, var formula = FormulaService.GetSelectedFormula();
{ "SolderJointY1", benchSetting.SolderJointY1 },
{ "SolderJointX2", benchSetting.SolderJointX2 },
{ "SolderJointY2", benchSetting.SolderJointY2 },
{ "SolderJointX3", benchSetting.SolderJointX3 },
{ "SolderJointY3", benchSetting.SolderJointY3 }
};
var json = JsonUtil.ToJson(coordinates); if (formula == null) return;
var path = Path.Combine(Environment.CurrentDirectory, "mark.json"); var benchSetting = FormulaService.GetWorkBenchSettingByFormulaId(formula.Id);
await File.WriteAllTextAsync(path, json); if (benchSetting == null) return;
var fileName = $"{Constants.SN}/20230301/20230301/mark/mark.json"; // 将mark点转为json,写到临时文件
var coordinates = new Dictionary<string, double>
{
{ "SolderJointX1", benchSetting.SolderJointX1 },
{ "SolderJointY1", benchSetting.SolderJointY1 },
{ "SolderJointX2", benchSetting.SolderJointX2 },
{ "SolderJointY2", benchSetting.SolderJointY2 },
{ "SolderJointX3", benchSetting.SolderJointX3 },
{ "SolderJointY3", benchSetting.SolderJointY3 }
};
await _minio.UploadFileAsync("coordinate", fileName, path); var json = JsonUtil.ToJson(coordinates);
// 上传完成后删除本地的文件 await File.WriteAllTextAsync(path, json);
File.Delete(path);
var data = new CoordinateData() 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)
{ {
FileType = "MARK", Console.WriteLine(e);
BatchNumber = "20230301", }
BizNumber = "20230301"
};
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
} }
/// <summary> /// <summary>
/// 上传wafer坐标文件 /// 上传wafer坐标文件
/// </summary> /// </summary>
private async void WaferCoordinateExporter() private static async void WaferCoordinateExporter(DateTime startTime, DateTime endTime)
{ {
var data = new CoordinateData() // 找出当前时间段内所有的晶环信息
var wafers = Db.Query<Wafer>("SELECT * FROM wafers WHERE create_time >= ? AND create_time <= ?", startTime,
endTime);
foreach (var wafer in wafers)
{ {
FileType = "WAFER", var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{wafer.Id}.json");
BatchNumber = "20230301", try
BizNumber = "20230301" {
}; await File.WriteAllTextAsync(path, wafer.CoordinateJson);
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
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>
/// 上传基板坐标文件 /// 上传基板坐标文件
/// </summary> /// </summary>
private async void SubstrateCoordinateExporter() private static async void SubstrateCoordinateExporter(DateTime startTime, DateTime endTime)
{ {
var data = new CoordinateData() // 找出当前时间段内的基板信息
var substrates = Db.Query<Substrate>("SELECT * FROM substrates WHERE create_time >= ? AND create_time <= ?",
startTime, endTime);
foreach (var substrate in substrates)
{ {
FileType = "PCB", var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{substrate.Id}.json");
BatchNumber = "20230301", try
BizNumber = "20230301" {
}; await File.WriteAllTextAsync(path, substrate.CoordinateJson);
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
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);
// 上传mark 点坐标信息
await MarkPointExporter(substrate.BatchNo, substrate.SubstrateCode);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
} }
/// <summary> /// <summary>
/// 上传动打路径坐标文件 /// 上传动打路径坐标文件
/// </summary> /// </summary>
private async void PathCoordinateExporter() private static async void PathCoordinateExporter(DateTime startTime, DateTime endTime)
{ {
var data = new CoordinateData() // 找出当前时间段内的打路径信息
{ var records = Db.Query<StrikeRecord>("SELECT * FROM strike_records WHERE create_time >= ? AND create_time <= ?",
FileType = "ROUTE", startTime, endTime);
BatchNumber = "20230301",
BizNumber = "20230301"
};
await MessageQueueHelper.Publish(Topics.CoordinateUpload, data);
}
public void Initialized() foreach (var record in records)
{ {
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);
}
}
} }
} }

View File

@ -16,7 +16,7 @@ public class FaultRecordService
public static async Task FaultRecordDataExporter() public static async Task FaultRecordDataExporter()
{ {
var endTime = DateTime.Now; var endTime = DateTime.Now;
var startTime = endTime.AddMinutes(-30); var startTime = endTime.AddMinutes(-5);
// 查询5分钟内的故障记录 // 查询5分钟内的故障记录
var sql = "SELECT * FROM fault_records WHERE update_time >= ? AND update_time <= ?"; var sql = "SELECT * FROM fault_records WHERE update_time >= ? AND update_time <= ?";

View File

@ -1,7 +1,9 @@
using MasstransferCommon.Config; using MasstransferCommon.Config;
using MasstransferCommon.Events; using MasstransferCommon.Events;
using MasstransferCommon.Model.Entity; using MasstransferCommon.Model.Entity;
using MasstransferCommon.Scheduler;
using MasstransferCommunicate.Mqtt.Client; using MasstransferCommunicate.Mqtt.Client;
using MasstransferExporter.DataExporter;
using MasstransferExporter.Init; using MasstransferExporter.Init;
using MasstransferInfrastructure.Database.Sqlite; using MasstransferInfrastructure.Database.Sqlite;
using MasstransferInfrastructure.Mqtt.Model; using MasstransferInfrastructure.Mqtt.Model;
@ -15,12 +17,10 @@ class Program
public static async Task Main() public static async Task Main()
{ {
// 进行初始化调用
InstantUtil.Init();
Log.Logger = LogConfiguration.GetLogger(); Log.Logger = LogConfiguration.GetLogger();
Log.Error("Masstransfer Exporter Startup"); // 进行初始化调用
InstantUtil.Init();
var mqttParams = Db.Query<MqttParams>("select * from mqtt_params").FirstOrDefault(); var mqttParams = Db.Query<MqttParams>("select * from mqtt_params").FirstOrDefault();
@ -38,8 +38,8 @@ class Program
// 启动完成后,广播启动通知 // 启动完成后,广播启动通知
EventBus<bool>.Publish(EventType.StartUp, true); EventBus<bool>.Publish(EventType.StartUp, true);
// DelayScheduler.Delay(async () => ImageService.ImageExporter(), DelayScheduler.Delay(async () => await CoordinateService.CoordinateExporter(),
// TimeSpan.FromSeconds(5)); TimeSpan.FromSeconds(5));
// 启动与主程序的通信 // 启动与主程序的通信
// ProcessHelper.Init(); // ProcessHelper.Init();