上传配方文件时,增加上传字段属性功能

This commit is contained in:
huangxianguo 2024-09-06 16:42:18 +08:00
parent ae30c33f44
commit 3f24aacb1d
8 changed files with 68 additions and 42 deletions

View File

@ -75,6 +75,11 @@ public static class Topics
/// </summary>
public const string RemoteControl = $"down/{SN}/402/{Version}";
/// <summary>
/// 上报配置字典数据
/// </summary>
public const string ReportConfigDictionary = $"up/{SN}/403/{Version}";
/// <summary>
/// 下发OTA包
/// </summary>

View File

@ -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
/// 处理接收到的配置下发事件,根据配置类型执行不同的操作
/// </summary>
/// <param name="topic"></param>
/// <param name="payload"></param>
private static void HandleConfigIssuedEvent(string topic, string payload)
/// <param name="data"></param>
private static void HandleConfigIssuedEvent(string topic, ConfigData data)
{
if (payload.IsNullOrEmpty()) return;
var data = JsonUtil.FromJson<ConfigData>(payload);
if (data.IsNullOrEmpty()) return;
var type = data.Type;

View File

@ -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<string, object>();
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}");
}
}
/// <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

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

View File

@ -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
/// <summary>
/// 处理图片查询请求
/// </summary>
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<ImageQueryDTO>(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);
}
}
}

View File

@ -42,8 +42,8 @@ class Program
// 启动完成后,广播启动通知
EventBus<bool>.Publish(EventType.StartUp, true);
// DelayScheduler.Delay(async () => await FormulaService.FormulaDataExporter(),
// TimeSpan.FromSeconds(5));
DelayScheduler.Delay(async () => await FormulaService.FormulaDataExporter(),
TimeSpan.FromSeconds(5));
// 启动与主程序的通信
ProcessHelper.Init();

View File

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

View File

@ -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<MqttApplicationMessageReceivedEventArgs> MessageReceived;
public event EventHandler<MqttApplicationMessageReceivedEventArgs>? 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();