diff --git a/MasstransferExporter/DataExporter/CoordinateService.cs b/MasstransferExporter/DataExporter/CoordinateService.cs index a09f314..a588df3 100644 --- a/MasstransferExporter/DataExporter/CoordinateService.cs +++ b/MasstransferExporter/DataExporter/CoordinateService.cs @@ -50,33 +50,15 @@ public class CoordinateService : Instant /// /// 上传mark点坐标文件 /// - private static async Task MarkPointExporter(string batchCode, string substrateCode) + private static async Task MarkPointExporter(Substrate substrate) { var path = Path.Combine(Environment.CurrentDirectory, "temp", "mark.json"); try { - var formula = FormulaService.GetSelectedFormula(); + var batchCode = substrate.BatchNo; + var substrateCode = substrate.SubstrateCode; - if (formula == null) return; - - var benchSetting = FormulaService.GetWorkBenchSettingByFormulaId(formula.Id); - - if (benchSetting == null) return; - - // 将mark点转为json,写到临时文件 - var coordinates = new Dictionary - { - { "SolderJointX1", benchSetting.SolderJointX1 }, - { "SolderJointY1", benchSetting.SolderJointY1 }, - { "SolderJointX2", benchSetting.SolderJointX2 }, - { "SolderJointY2", benchSetting.SolderJointY2 }, - { "SolderJointX3", benchSetting.SolderJointX3 }, - { "SolderJointY3", benchSetting.SolderJointY3 } - }; - - var json = JsonUtil.ToJson(coordinates); - - await File.WriteAllTextAsync(path, json); + await File.WriteAllTextAsync(path, substrate.SubstrateMarkPointJson); var fileName = $"{Constants.SN}/{batchCode}/{substrateCode}/mark/mark.json"; @@ -153,31 +135,39 @@ public class CoordinateService : Instant startTime, endTime); foreach (var substrate in substrates) { - var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{substrate.Id}.json"); - try + // 上传mark 点坐标信息 + await MarkPointExporter(substrate); + + await UploadSubstrateCoords(substrate); + } + } + + /// + /// 上传基板坐标文件 + /// + /// + 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() { - 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); - - - // 上传mark 点坐标信息 - await MarkPointExporter(substrate.BatchNo, substrate.SubstrateCode); - } - catch (Exception e) - { - Console.WriteLine(e); - } + FileType = "PCB", + BatchNumber = substrate.BatchNo, + BizNumber = substrate.SubstrateCode + }; + await MessageQueueHelper.Publish(Topics.CoordinateUpload, data); + } + catch (Exception e) + { + Console.WriteLine(e); } } @@ -192,34 +182,47 @@ public class CoordinateService : Instant foreach (var record in records) { - var path = Path.Combine(Environment.CurrentDirectory, "temp", $"{record.Id}.json"); - try + await UploadStrikeRecord(record); + } + } + + /// + /// 上传动打记录 + /// + /// + 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() { - 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); - } + FileType = "ROUTE", + BatchNumber = record.BatchNo, + BizNumber = record.SubstrateCode + }; + await MessageQueueHelper.Publish(Topics.CoordinateUpload, data); + } + catch (Exception e) + { + Console.WriteLine(e); } } public void Initialized() { - EventBus.AddEventHandler(EventType.StartUp, - async () => { await MessageQueueHelper.Subscribe(Topics.QueryCoordinate, QueryCoordinate); }); + EventBus.AddEventHandler(EventType.StartUp, ListenCoordinateQueryEvent); + } + + private static async Task ListenCoordinateQueryEvent(EventType type, bool start) + { + await MessageQueueHelper.Subscribe(Topics.QueryCoordinate, QueryCoordinate); } /// @@ -231,6 +234,18 @@ public class CoordinateService : Instant { 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; @@ -256,8 +271,31 @@ public class CoordinateService : Instant 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(sql, substrate.Id); + foreach (var record in records) + { + await UploadStrikeRecord(record); + } + + break; + } + } } } } \ No newline at end of file diff --git a/MasstransferExporter/DataExporter/Model/CoordinateData.cs b/MasstransferExporter/DataExporter/Model/CoordinateData.cs index ae8c95f..022f333 100644 --- a/MasstransferExporter/DataExporter/Model/CoordinateData.cs +++ b/MasstransferExporter/DataExporter/Model/CoordinateData.cs @@ -1,10 +1,12 @@ -namespace MasstransferExporter.DataExporter.Model; +using Newtonsoft.Json; + +namespace MasstransferExporter.DataExporter.Model; public class CoordinateData { - public string FileType { get; set; } + [JsonProperty("fileType")] public string FileType { get; set; } - public string BizNumber { get; set; } + [JsonProperty("bizNumber")] public string BizNumber { get; set; } - public string BatchNumber { get; set; } + [JsonProperty("batchNumber")] public string BatchNumber { get; set; } } \ No newline at end of file diff --git a/MasstransferExporter/ImageExporter/ImageService.cs b/MasstransferExporter/ImageExporter/ImageService.cs index 65ca2ab..ed2f29e 100644 --- a/MasstransferExporter/ImageExporter/ImageService.cs +++ b/MasstransferExporter/ImageExporter/ImageService.cs @@ -98,7 +98,7 @@ public class ImageService : Instant BatchNumber = batchDir.Name, BizNumber = codeDir.Name, ImageType = imageType, - PicType = isThumbnail ? "thumbnail" : "raw" + PicType = isThumbnail ? "thumbnail" : "image" }; // 上传完成后发布通知 @@ -233,7 +233,7 @@ public class ImageService : Instant foreach (var image in images) { var fileName = - $"{Constants.SN}/{codeDir.Name}/{batchCode.Name}/{type.Name}/{image.Name}"; + $"{Constants.SN}/{codeDir.Name}/{batchCode.Name}/{type.Name.ToUpper()}/{image.Name}"; var path = image.FullName; @@ -245,7 +245,7 @@ public class ImageService : Instant BatchNumber = batchCode.Name, BizNumber = codeDir.Name, ImageType = type.Name, - PicType = isThumbnail ? "thumbnail" : "raw" + PicType = isThumbnail ? "thumbnail" : "image" }; // 上传完成后发布通知 diff --git a/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs b/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs index 0da143a..7a50a99 100644 --- a/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs +++ b/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs @@ -103,10 +103,13 @@ public class MessageQueueHelper private static void HandleMessageReceived(object? sender, MqttApplicationMessageReceivedEventArgs e) { var applicationMessage = e.ApplicationMessage; + var retain = applicationMessage.Retain; var topic = applicationMessage.Topic; var message = applicationMessage.ConvertPayloadToString(); - Console.WriteLine($"收到消息:{topic} - {message}"); + Console.WriteLine($"收到消息:{topic} -> {message}"); + + if (retain) return; if (!Subscribers.TryGetValue(topic, out var subscribers)) return; diff --git a/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs b/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs index cd966bd..cac79e4 100644 --- a/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs +++ b/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs @@ -30,6 +30,7 @@ internal class MqttClient .WithClientId(Constants.SN) .WithKeepAlivePeriod(TimeSpan.FromSeconds(60)) .WithCleanStart(true) + .WithWillRetain(false) .WithCleanSession() .Build(); }