From 6232971783bee3df0ccd51b11ad0e81a6e366e78 Mon Sep 17 00:00:00 2001 From: “wangming” <“wangming@antissoft.com”> Date: Tue, 19 Aug 2025 17:11:06 +0800 Subject: [PATCH] 修复了一些BUG --- .DS_Store | Bin 12292 -> 0 bytes netcore/.DS_Store | Bin 10244 -> 0 bytes netcore/src/.DS_Store | Bin 12292 -> 0 bytes netcore/src/Application/.DS_Store | Bin 10244 -> 0 bytes netcore/src/Application/NCC.API/.DS_Store | Bin 14340 -> 0 bytes netcore/src/Modularity/Extend/.DS_Store | Bin 10244 -> 0 bytes netcore/src/Modularity/Extend/NCC.Extend.Entitys/uavDevice/Dto/UavDeviceCrInput.cs | 5 +++++ netcore/src/Modularity/Extend/NCC.Extend/.DS_Store | Bin 8196 -> 0 bytes netcore/src/Modularity/Extend/NCC.Extend/MqttPublisherService.cs | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------ netcore/src/Modularity/Extend/NCC.Extend/NCC.Extend.xml | 12 ++++++++++++ 10 files changed, 168 insertions(+), 18 deletions(-) diff --git a/.DS_Store b/.DS_Store index f9dc49d..c4f9490 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/netcore/.DS_Store b/netcore/.DS_Store index 21c94c0..334dc2f 100644 Binary files a/netcore/.DS_Store and b/netcore/.DS_Store differ diff --git a/netcore/src/.DS_Store b/netcore/src/.DS_Store index a413dae..863dc7b 100644 Binary files a/netcore/src/.DS_Store and b/netcore/src/.DS_Store differ diff --git a/netcore/src/Application/.DS_Store b/netcore/src/Application/.DS_Store index ba57064..2cbe18c 100644 Binary files a/netcore/src/Application/.DS_Store and b/netcore/src/Application/.DS_Store differ diff --git a/netcore/src/Application/NCC.API/.DS_Store b/netcore/src/Application/NCC.API/.DS_Store index a76095c..21b3a62 100644 Binary files a/netcore/src/Application/NCC.API/.DS_Store and b/netcore/src/Application/NCC.API/.DS_Store differ diff --git a/netcore/src/Modularity/Extend/.DS_Store b/netcore/src/Modularity/Extend/.DS_Store index 1925aee..a00a373 100644 Binary files a/netcore/src/Modularity/Extend/.DS_Store and b/netcore/src/Modularity/Extend/.DS_Store differ diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/uavDevice/Dto/UavDeviceCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/uavDevice/Dto/UavDeviceCrInput.cs index dc540c6..35db526 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/uavDevice/Dto/UavDeviceCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/uavDevice/Dto/UavDeviceCrInput.cs @@ -48,6 +48,11 @@ namespace NCC.Extend.Entitys.Dto.UavDevice /// 备注 /// public string remark { get; set; } + + /// + /// 区县、位置 + /// + public string district { get; set; } /// /// 机柜货道列表 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/.DS_Store b/netcore/src/Modularity/Extend/NCC.Extend/.DS_Store index 909bdb5..e26dc5c 100644 Binary files a/netcore/src/Modularity/Extend/NCC.Extend/.DS_Store and b/netcore/src/Modularity/Extend/NCC.Extend/.DS_Store differ diff --git a/netcore/src/Modularity/Extend/NCC.Extend/MqttPublisherService.cs b/netcore/src/Modularity/Extend/NCC.Extend/MqttPublisherService.cs index 5fe6ade..c8e77fb 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/MqttPublisherService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/MqttPublisherService.cs @@ -69,24 +69,27 @@ public class MqttPublisherService : IMqttPublisherService, ITransient }); // 连接断开事件 - _mqttClient.UseDisconnectedHandler(e => + _mqttClient.UseDisconnectedHandler(async e => { Log.Warning("MQTT 已断开连接"); int retryInterval = 5; // 秒 - // while (!_mqttClient.IsConnected) - // { - // try - // { - // Log.Information($"尝试在 {retryInterval} 秒后重新连接 MQTT..."); - // Task.Delay(TimeSpan.FromSeconds(retryInterval)); - // _mqttClient.ConnectAsync(_mqttOptions, CancellationToken.None); - // Log.Information("MQTT 重连成功"); - // } - // catch (Exception ex) - // { - // Log.Error($"MQTT 重连失败: {ex.Message}"); - // } - // } + while (!_mqttClient.IsConnected) + { + try + { + Log.Information($"尝试在 {retryInterval} 秒后重新连接 MQTT..."); + await Task.Delay(TimeSpan.FromSeconds(retryInterval)); + await _mqttClient.ConnectAsync(_mqttOptions, CancellationToken.None); + Log.Information("MQTT 重连成功"); + break; // 重连成功后跳出循环 + } + catch (Exception ex) + { + Log.Error($"MQTT 重连失败: {ex.Message}"); + // 重连失败后继续循环,但增加延迟避免频繁重试 + await Task.Delay(TimeSpan.FromSeconds(retryInterval * 2)); + } + } }); // 收到消息事件:处理设备回传的消息 _mqttClient.UseApplicationMessageReceivedHandler(e => @@ -123,17 +126,23 @@ public class MqttPublisherService : IMqttPublisherService, ITransient var lastLog = _db.Queryable().Where(p => p.DeviceId == deviceId && p.Payload == payload && p.CreatedAt >= twoSecondsAgo).Any(); if (lastLog == false) { - + Log.Information($"[订阅消息] 处理新消息:设备 {deviceId},内容:{payload}"); var orderService = _serviceProvider.GetRequiredService(); orderService.HandleSubscribeMessage(payload); } else { - Log.Information($"[订阅消息] 接收到重复的消息,已忽略:{payload}"); + Log.Information($"[订阅消息] 接收到重复的消息,已忽略:设备 {deviceId},内容:{payload}"); } //只保存正常消息 _db.Insertable(logEntity).ExecuteCommand(); } + else + { + Log.Debug($"[订阅消息] 接收到确认消息,不处理:设备 {deviceId},内容:{payload}"); + // 保存确认消息到日志 + _db.Insertable(logEntity).ExecuteCommand(); + } } } catch (Exception ex) @@ -157,7 +166,22 @@ public class MqttPublisherService : IMqttPublisherService, ITransient // 如果未连接则先连接 if (!_mqttClient.IsConnected) { + Log.Warning($"MQTT 未连接,尝试重新连接..."); await _mqttClient.ConnectAsync(_mqttOptions, CancellationToken.None); + + // 等待连接稳定 + int retryCount = 0; + while (!_mqttClient.IsConnected && retryCount < 3) + { + await Task.Delay(1000); + retryCount++; + } + + if (!_mqttClient.IsConnected) + { + Log.Error("MQTT 连接失败,无法发送消息"); + return false; + } } // 构建 MQTT 消息 @@ -189,6 +213,29 @@ public class MqttPublisherService : IMqttPublisherService, ITransient catch (Exception ex) { Log.Error($"MQTT 发送失败:{ex.Message}"); + + // 记录失败的消息到数据库 + try + { + var topicParts = topic.Split('/'); + UavMqttMessageLogEntity logEntity = new UavMqttMessageLogEntity + { + Id = YitIdHelper.NextId().ToString(), + MessageType = "send", + Topic = topic, + Payload = payload, + DeviceId = topicParts.Length > 1 ? topicParts[1] : "unknown", + Processed = 0, + Status = "failed", + CreatedAt = DateTime.Now, + }; + _db.Insertable(logEntity).ExecuteCommand(); + } + catch (Exception logEx) + { + Log.Error($"记录失败消息到数据库时出错:{logEx.Message}"); + } + return false; } } @@ -454,7 +501,93 @@ public class MqttPublisherService : IMqttPublisherService, ITransient #region 私有回调逻辑 + #endregion + /// + /// 检查MQTT连接健康状态 + /// + /// 连接状态信息 + public async Task GetConnectionHealthAsync() + { + try + { + if (_mqttClient.IsConnected) + { + try + { + await _mqttClient.PingAsync(CancellationToken.None); + Log.Debug("MQTT Ping 成功"); + return new + { + IsConnected = true, + ConnectionTime = DateTime.Now, + LastPing = DateTime.Now, + ClientId = _mqttOptions.ClientId, + BrokerAddress = "mqtt.cqjiangzhichao.cn:1883" + }; + } + catch (Exception pingEx) + { + Log.Warning($"MQTT Ping 失败: {pingEx.Message}"); + return new + { + IsConnected = false, + ConnectionTime = (DateTime?)null, + LastPing = DateTime.Now, + ClientId = _mqttOptions.ClientId, + BrokerAddress = "mqtt.cqjiangzhichao.cn:1883", + PingError = pingEx.Message + }; + } + } + else + { + return new + { + IsConnected = false, + ConnectionTime = (DateTime?)null, + LastPing = DateTime.Now, + ClientId = _mqttOptions.ClientId, + BrokerAddress = "mqtt.cqjiangzhichao.cn:1883" + }; + } + } + catch (Exception ex) + { + Log.Error($"获取连接健康状态失败: {ex.Message}"); + return new + { + IsConnected = false, + Error = ex.Message, + Timestamp = DateTime.Now + }; + } + } - #endregion + /// + /// 强制重新连接MQTT + /// + /// 重连是否成功 + public async Task ForceReconnectAsync() + { + try + { + if (_mqttClient.IsConnected) + { + await _mqttClient.DisconnectAsync(); + Log.Information("MQTT 主动断开连接"); + } + + await Task.Delay(2000); // 等待2秒后重连 + + await _mqttClient.ConnectAsync(_mqttOptions, CancellationToken.None); + Log.Information("MQTT 强制重连成功"); + return true; + } + catch (Exception ex) + { + Log.Error($"MQTT 强制重连失败: {ex.Message}"); + return false; + } + } } \ No newline at end of file diff --git a/netcore/src/Modularity/Extend/NCC.Extend/NCC.Extend.xml b/netcore/src/Modularity/Extend/NCC.Extend/NCC.Extend.xml index 8cdd88b..6961022 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/NCC.Extend.xml +++ b/netcore/src/Modularity/Extend/NCC.Extend/NCC.Extend.xml @@ -169,6 +169,18 @@ 清理过期的缓存数据(建议定期调用) + + + 检查MQTT连接健康状态 + + 连接状态信息 + + + + 强制重新连接MQTT + + 重连是否成功 + 广告管理服务 -- libgit2 0.21.4