diff --git a/DOAN.Admin.WebApi/Controllers/MES/recipe/PfRecipeVersionController.cs b/DOAN.Admin.WebApi/Controllers/MES/recipe/PfRecipeVersionController.cs
index 8023a99..a771d06 100644
--- a/DOAN.Admin.WebApi/Controllers/MES/recipe/PfRecipeVersionController.cs
+++ b/DOAN.Admin.WebApi/Controllers/MES/recipe/PfRecipeVersionController.cs
@@ -120,5 +120,19 @@ namespace DOAN.WebApi.Controllers.MES.recipe
var response = _PfRecipeVersionService.QuerylatestVersion(parm);
return response;
}
+
+ ///
+ /// 添加配方版本控制表和参数信息
+ ///
+ ///
+ [HttpPost("delPfRecipeVersion")]
+ [Log(Title = "配方版本控制表删除", BusinessType = BusinessType.DELETE)]
+ public ApiResult DELPfRecipeVersion([FromBody] PfRecipeVersionDto parm)
+ {
+
+ var response = _PfRecipeVersionService.DELPfRecipeVersion(parm);
+
+ return response;
+ }
}
}
\ No newline at end of file
diff --git a/DOAN.Service/MES/recipe/IService/IPfRecipeVersionService.cs b/DOAN.Service/MES/recipe/IService/IPfRecipeVersionService.cs
index f043cd2..4372ca1 100644
--- a/DOAN.Service/MES/recipe/IService/IPfRecipeVersionService.cs
+++ b/DOAN.Service/MES/recipe/IService/IPfRecipeVersionService.cs
@@ -20,5 +20,7 @@ namespace DOAN.Service.MES.recipe.IService
PfRecipeVersion AddPfRecipeVersion(PfRecipeVersion parm);
int UpdatePfRecipeVersion(PfRecipeVersion parm);
ApiResult CreatePfRecipeVersionAndParameters(PfRecipeVersionDto parm);
+ ApiResult DELPfRecipeVersion(PfRecipeVersionDto parm);
+
}
}
diff --git a/DOAN.Service/MES/recipe/PfRecipeVersionService.cs b/DOAN.Service/MES/recipe/PfRecipeVersionService.cs
index c8cbde6..39bc727 100644
--- a/DOAN.Service/MES/recipe/PfRecipeVersionService.cs
+++ b/DOAN.Service/MES/recipe/PfRecipeVersionService.cs
@@ -204,5 +204,29 @@ namespace DOAN.Service.MES.recipe
}
}
}
+
+ public ApiResult DELPfRecipeVersion(PfRecipeVersionDto parm)
+ {
+ string recipeCode = parm.RecipeCode;
+ string version = parm.Version;
+ if (string.IsNullOrEmpty(recipeCode) || string.IsNullOrEmpty(version))
+ {
+ return ApiResult.Error("参数错误!");
+ }
+ var iResult = Deleteable()
+ .Where(x => x.RecipeCode == recipeCode && x.Version == version)
+ .ExecuteCommand();
+ if (iResult > 0)
+ {
+ pfRecipeParametersService.Deleteable()
+ .Where(x => x.RecipeCode == recipeCode && x.Version == version)
+ .ExecuteCommand();
+ return ApiResult.Success("操作成功!");
+ }
+ else
+ {
+ return ApiResult.Error("操作失败!");
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Infrastructure/DOAN.Infrastructure.csproj b/Infrastructure/DOAN.Infrastructure.csproj
index afa789c..a42dadc 100644
--- a/Infrastructure/DOAN.Infrastructure.csproj
+++ b/Infrastructure/DOAN.Infrastructure.csproj
@@ -18,6 +18,7 @@
+
diff --git a/Infrastructure/Helper/MqttHelper.cs b/Infrastructure/Helper/MqttHelper.cs
new file mode 100644
index 0000000..063634f
--- /dev/null
+++ b/Infrastructure/Helper/MqttHelper.cs
@@ -0,0 +1,169 @@
+using MQTTnet;
+using MQTTnet.Formatter;
+using MQTTnet.Protocol;
+using System;
+using System.Threading.Tasks;
+namespace DOAN.Infrastructure.Helper
+{
+
+ ///
+ /// MQTT 消息发送工具类
+ ///
+ public class MqttHelper : IDisposable
+ {
+ // MQTT Broker 配置(可外部设置或配置文件读取)
+ public string MqttBrokerUrl { get; set; } = "broker.hivemq.com";
+ public int MqttBrokerPort { get; set; } = 1883;
+ public string MqttUsername { get; set; } = null;
+ public string MqttPassword { get; set; } = null;
+
+ private IMqttClient _mqttClient;
+
+ private bool _disposed = false;
+
+ ///
+ /// 构造函数 - 使用默认配置
+ ///
+ public MqttHelper() { }
+
+ ///
+ /// 构造函数 - 自定义配置
+ ///
+ public MqttHelper(string brokerUrl, int brokerPort, string username = null, string password = null)
+ {
+ MqttBrokerUrl = brokerUrl;
+ MqttBrokerPort = brokerPort;
+ MqttUsername = username;
+ MqttPassword = password;
+ }
+
+ ///
+ /// 连接到 MQTT Broker
+ ///
+ public async Task ConnectAsync()
+ {
+ try
+ {
+ if (_mqttClient?.IsConnected == true)
+ {
+ Console.WriteLine("MQTT 客户端已经连接");
+ return true;
+ }
+
+ var factory = new MqttClientFactory();
+ _mqttClient = factory.CreateMqttClient();
+
+ var options = new MqttClientOptionsBuilder()
+ .WithTcpServer(MqttBrokerUrl, MqttBrokerPort)
+ .WithCredentials(MqttUsername, MqttPassword)
+ .WithCleanSession()
+ .Build();
+
+ Console.WriteLine($"正在连接到 MQTT Broker: {MqttBrokerUrl}:{MqttBrokerPort}...");
+ await _mqttClient.ConnectAsync(options);
+
+ Console.WriteLine("✅ MQTT 连接成功!");
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"❌ MQTT 连接失败: {ex.Message}");
+ return false;
+ }
+ }
+
+ ///
+ /// 发送消息到指定主题
+ ///
+ /// 目标主题
+ /// 消息内容
+ /// QoS 级别,默认为 AtLeastOnce(1)
+ /// 是否保留消息,默认为 false
+ public async Task PublishMessageAsync(string topic, string messageContent,
+ MqttQualityOfServiceLevel qosLevel = MqttQualityOfServiceLevel.AtLeastOnce,
+ bool retain = false)
+ {
+ try
+ {
+ if (_mqttClient?.IsConnected != true)
+ {
+ Console.WriteLine("MQTT 客户端未连接,尝试重新连接...");
+ if (!await ConnectAsync())
+ {
+ Console.WriteLine("❌ 重连失败,无法发送消息");
+ return false;
+ }
+ }
+
+ var message = new MqttApplicationMessageBuilder()
+ .WithTopic(topic)
+ .WithPayload(messageContent)
+ .WithQualityOfServiceLevel(qosLevel)
+ .WithRetainFlag(retain)
+ .Build();
+
+ Console.WriteLine($"正在向主题 '{topic}' 发送消息: {messageContent}");
+ await _mqttClient.PublishAsync(message);
+
+ Console.WriteLine("✅ 消息发送成功!");
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"❌ 消息发送失败: {ex.Message}");
+ return false;
+ }
+ }
+
+ ///
+ /// 发送消息(使用默认主题配置)
+ ///
+ /// 消息内容
+ /// QoS 级别
+ /// 是否保留消息
+ public async Task PublishMessageAsync(string messageContent,
+ MqttQualityOfServiceLevel qosLevel = MqttQualityOfServiceLevel.AtLeastOnce,
+ bool retain = false)
+ {
+ return await PublishMessageAsync("product/topic", messageContent, qosLevel, retain);
+ }
+
+ ///
+ /// 断开 MQTT 连接
+ ///
+ public async Task DisconnectAsync()
+ {
+ try
+ {
+ if (_mqttClient?.IsConnected == true)
+ {
+ await _mqttClient.DisconnectAsync();
+ Console.WriteLine("🔌 MQTT 已断开连接");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"❌ 断开连接时发生错误: {ex.Message}");
+ }
+ }
+
+ ///
+ /// 检查是否已连接
+ ///
+ public bool IsConnected => _mqttClient?.IsConnected == true;
+
+ ///
+ /// 释放资源
+ ///
+ public void Dispose()
+ {
+ if (!_disposed)
+ {
+ DisconnectAsync().Wait();
+ _mqttClient?.Dispose();
+ _disposed = true;
+ }
+ }
+ }
+
+}