From 3f24aacb1d6834a24656bd2462a85c5a1b5d3d03 Mon Sep 17 00:00:00 2001 From: huangxianguo Date: Fri, 6 Sep 2024 16:42:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E9=85=8D=E6=96=B9=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=97=B6=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=B1=9E=E6=80=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MasstransferCommon/Model/Constant/Topics.cs | 5 +++ .../DataExporter/ConfigService.cs | 10 +---- .../DataExporter/FormulaService.cs | 41 ++++++++++++++++++- .../DataExporter/Model/FormulaDTO.cs | 13 +++--- .../ImageExporter/ImageService.cs | 22 ++++------ MasstransferExporter/Program.cs | 4 +- .../Mqtt/Client/MessageQueueHelper.cs | 2 +- .../Mqtt/Client/MqttClient.cs | 13 ++---- 8 files changed, 68 insertions(+), 42 deletions(-) diff --git a/MasstransferCommon/Model/Constant/Topics.cs b/MasstransferCommon/Model/Constant/Topics.cs index b7388c2..dbcba63 100644 --- a/MasstransferCommon/Model/Constant/Topics.cs +++ b/MasstransferCommon/Model/Constant/Topics.cs @@ -75,6 +75,11 @@ public static class Topics /// public const string RemoteControl = $"down/{SN}/402/{Version}"; + /// + /// 上报配置字典数据 + /// + public const string ReportConfigDictionary = $"up/{SN}/403/{Version}"; + /// /// 下发OTA包 /// diff --git a/MasstransferExporter/DataExporter/ConfigService.cs b/MasstransferExporter/DataExporter/ConfigService.cs index ca228ef..37745d5 100644 --- a/MasstransferExporter/DataExporter/ConfigService.cs +++ b/MasstransferExporter/DataExporter/ConfigService.cs @@ -1,8 +1,6 @@ using MasstransferCommon.Atrributes; using MasstransferCommon.Events; -using MasstransferCommon.Model.Constant; using MasstransferCommon.Utils; -using MasstransferCommunicate.Mqtt.Client; using MasstransferExporter.DataExporter.Model; using Masuit.Tools; @@ -26,13 +24,9 @@ public class ConfigService : Instant /// 处理接收到的配置下发事件,根据配置类型执行不同的操作 /// /// - /// - private static void HandleConfigIssuedEvent(string topic, string payload) + /// + private static void HandleConfigIssuedEvent(string topic, ConfigData data) { - if (payload.IsNullOrEmpty()) return; - - var data = JsonUtil.FromJson(payload); - if (data.IsNullOrEmpty()) return; var type = data.Type; diff --git a/MasstransferExporter/DataExporter/FormulaService.cs b/MasstransferExporter/DataExporter/FormulaService.cs index 68c94a4..694cc36 100644 --- a/MasstransferExporter/DataExporter/FormulaService.cs +++ b/MasstransferExporter/DataExporter/FormulaService.cs @@ -1,4 +1,7 @@ -using MasstransferCommon.Model.Constant; +using System.ComponentModel; +using System.Reflection; +using MasstransferCommon.Model.Constant; +using MasstransferCommon.Model.Entity; using MasstransferCommon.Utils; using MasstransferCommunicate.Mqtt.Client; using MasstransferCore.Model.Entity; @@ -249,6 +252,14 @@ public class FormulaService { var formulas = GetAllFormulas(); + var dto = formulas[0]; + + // 推送配方字段名称字典内容 + var mapping = new Dictionary(); + GetFormulaFieldNameMapping(dto.GetType(), mapping); + + await MessageQueueHelper.Publish(Topics.ReportConfigDictionary, mapping); + foreach (var formula in formulas) { var formulaDto = GetFormulaById(formula.Id); @@ -268,4 +279,32 @@ public class FormulaService Console.WriteLine($"定时上报配方数据失败: {e}"); } } + + + /// + /// 获取配方字段名称映射 + /// + /// + private static void GetFormulaFieldNameMapping(Type type, IDictionary mapping) + { + var fields = type.GetProperties(); + foreach (var field in fields) + { + // 判定当前的属性是否为 Entity的子类 + if (field.PropertyType.IsSubclassOf(typeof(Entity))) + { + var subMapping = new Dictionary(); + GetFormulaFieldNameMapping(field.PropertyType, subMapping); + mapping.Add(field.Name, subMapping); + } + else + { + var description = field.GetCustomAttribute(); + if (description != null) + { + mapping.Add(field.Name, description.Description); + } + } + } + } } \ No newline at end of file diff --git a/MasstransferExporter/DataExporter/Model/FormulaDTO.cs b/MasstransferExporter/DataExporter/Model/FormulaDTO.cs index 59c31c5..0302c9e 100644 --- a/MasstransferExporter/DataExporter/Model/FormulaDTO.cs +++ b/MasstransferExporter/DataExporter/Model/FormulaDTO.cs @@ -1,4 +1,5 @@ -using MasstransferCore.Model.Entity; +using System.ComponentModel; +using MasstransferCore.Model.Entity; namespace MasstransferExporter.DataExporter.Model; @@ -7,15 +8,15 @@ namespace MasstransferExporter.DataExporter.Model; /// public class FormulaDTO { - public string Id { get; set; } + [Description("配方id")] public string Id { get; set; } - public string Name { get; set; } + [Description("配方名称")] public string Name { get; set; } - public string Code { get; set; } + [Description("配方编号")] public string Code { get; set; } - public string Description { get; set; } + [Description("配方描述")] public string Description { get; set; } - public bool Selected { get; set; } + [Description("是否启用")] public bool Selected { get; set; } public WorkBenchSetting? WorkBenchSetting { get; set; } diff --git a/MasstransferExporter/ImageExporter/ImageService.cs b/MasstransferExporter/ImageExporter/ImageService.cs index 3cab2e0..1ab3029 100644 --- a/MasstransferExporter/ImageExporter/ImageService.cs +++ b/MasstransferExporter/ImageExporter/ImageService.cs @@ -2,7 +2,6 @@ using MasstransferCommon.Atrributes; using MasstransferCommon.Events; using MasstransferCommon.Model.Constant; -using MasstransferCommon.Utils; using MasstransferCommunicate.Minio; using MasstransferCommunicate.Mqtt.Client; using MasstransferExporter.DataExporter.Model; @@ -31,12 +30,8 @@ public class ImageService : Instant /// /// 处理图片查询请求 /// - private static async Task HandleImageQueryEvent(string topic, string payload) + private static async Task HandleImageQueryEvent(string topic, ImageQueryDTO queryDto) { - if (payload == null) return; - - var queryDto = JsonUtil.FromJson(payload); - if (queryDto == null) return; var batchNumber = queryDto.batchNumber; @@ -130,20 +125,19 @@ public class ImageService : Instant // 获取文件夹下所有文件的信息 var fs = dir.GetFiles(); - if (fs != null && fs.Length > 0) + if (fs.Length > 0) { try { foreach (var file in fs) { - if (file.Name.EndsWith(".bmp") && !file.Name.Contains("_thumbnail")) + if (!file.Name.EndsWith(".bmp") || file.Name.Contains("_thumbnail")) continue; + + // 判断是否已经存在缩略图,如果存在的话,则跳过生成过程 + var thumbnailFilePath = file.FullName.Replace(".bmp", "_thumbnail.bmp"); + if (!File.Exists(thumbnailFilePath)) { - // 判断是否已经存在缩略图,如果存在的话,则跳过生成过程 - var thumbnailFilePath = file.FullName.Replace(".bmp", "_thumbnail.bmp"); - if (!File.Exists(thumbnailFilePath)) - { - GenerateThumbnail(file.FullName); - } + GenerateThumbnail(file.FullName); } } } diff --git a/MasstransferExporter/Program.cs b/MasstransferExporter/Program.cs index 334e5ba..4664f89 100644 --- a/MasstransferExporter/Program.cs +++ b/MasstransferExporter/Program.cs @@ -42,8 +42,8 @@ class Program // 启动完成后,广播启动通知 EventBus.Publish(EventType.StartUp, true); - // DelayScheduler.Delay(async () => await FormulaService.FormulaDataExporter(), - // TimeSpan.FromSeconds(5)); + DelayScheduler.Delay(async () => await FormulaService.FormulaDataExporter(), + TimeSpan.FromSeconds(5)); // 启动与主程序的通信 ProcessHelper.Init(); diff --git a/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs b/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs index 9ae2c51..0da143a 100644 --- a/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs +++ b/MasstransferInfrastructure/Mqtt/Client/MessageQueueHelper.cs @@ -8,7 +8,7 @@ using MQTTnet; using MQTTnet.Client; using MQTTnet.Protocol; using Serilog; -using MqttClient = MasstransferInfrastructure.Mqtt.Client.MqttClient; +using MqttClient = MasstransferCommunicate.Mqtt.Client.MqttClient; namespace MasstransferCommunicate.Mqtt.Client; diff --git a/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs b/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs index 5b659e5..0d8f842 100644 --- a/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs +++ b/MasstransferInfrastructure/Mqtt/Client/MqttClient.cs @@ -4,18 +4,17 @@ using MasstransferCommon.Utils; using MasstransferCommunicate.Mqtt.Model; using MasstransferInfrastructure.Mqtt.Model; using MasstransferSecurity.Utils; -using Masuit.Tools.Systems; using MQTTnet; using MQTTnet.Client; using MQTTnet.Protocol; -namespace MasstransferInfrastructure.Mqtt.Client; +namespace MasstransferCommunicate.Mqtt.Client; -class MqttClient +internal class MqttClient { private IMqttClient? _client; - public event EventHandler MessageReceived; + public event EventHandler? MessageReceived; private static readonly DateTime Epoch = new DateTime(2024, 1, 1, 0, 0, 0, DateTimeKind.Utc); @@ -30,11 +29,6 @@ class MqttClient { var clientId = DeviceInfoUtil.GenerateUniqueID(); - // var caCert = GetCertificate(options.CaCert); - // var clientCert = GetCertificate(options.ClientCert); - // - // var chain = new X509Certificate2Collection(new[] { caCert, clientCert }); - return new MqttClientOptionsBuilder() .WithTcpServer(options.ServerAddress, options.Port) // .WithCredentials(options.UserName, options.Password) @@ -45,7 +39,6 @@ class MqttClient { o.UseTls(options.EnableTls); o.WithSslProtocols(options.Protocols); - // o.WithTrustChain(chain); } ) .Build();