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