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; + } + } + } + +}