|
@@ -52,11 +52,10 @@ void ThreadCompareItemManager::thread_CompareItemManager()
|
|
m_pEventLoop = new QEventLoop();
|
|
m_pEventLoop = new QEventLoop();
|
|
m_pTimer = new QTimer();
|
|
m_pTimer = new QTimer();
|
|
|
|
|
|
- // std::function<void()> task = std::bind(&ThreadCompareItemManager::do_task, this);
|
|
|
|
-
|
|
|
|
// m_pTimer->setInterval(10000);
|
|
// m_pTimer->setInterval(10000);
|
|
m_pTimer->setTimerType(Qt::PreciseTimer);
|
|
m_pTimer->setTimerType(Qt::PreciseTimer);
|
|
m_pTimer->setSingleShot(false); // 设置为非单次定时器
|
|
m_pTimer->setSingleShot(false); // 设置为非单次定时器
|
|
|
|
+ /* 这里要设置直接连接,才会在子线程中调用槽函数 */
|
|
connect(m_pTimer, &QTimer::timeout, this, &ThreadCompareItemManager::do_task, Qt::DirectConnection);
|
|
connect(m_pTimer, &QTimer::timeout, this, &ThreadCompareItemManager::do_task, Qt::DirectConnection);
|
|
|
|
|
|
/* 初始化webapi */
|
|
/* 初始化webapi */
|
|
@@ -70,14 +69,16 @@ void ThreadCompareItemManager::thread_CompareItemManager()
|
|
}
|
|
}
|
|
/* 获取MQTT发布订阅 */
|
|
/* 获取MQTT发布订阅 */
|
|
m_pubTopic = GInfo.mqttPubTopicCompareItem();
|
|
m_pubTopic = GInfo.mqttPubTopicCompareItem();
|
|
-
|
|
|
|
|
|
+ initMQTT();
|
|
|
|
|
|
/* 获取基础配置,目前只获取一次 */
|
|
/* 获取基础配置,目前只获取一次 */
|
|
updateBaseSettings();
|
|
updateBaseSettings();
|
|
|
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "开启对比项管理线程");
|
|
SPDLOG_LOGGER_INFO(m_logger, "开启对比项管理线程");
|
|
|
|
|
|
- m_pTimer->start(1000);
|
|
|
|
|
|
+ m_pTimer->start(2000);
|
|
|
|
+ /* 连接mqtt服务 */
|
|
|
|
+ m_pFromMQTT->connectToServer();
|
|
m_pEventLoop->exec();
|
|
m_pEventLoop->exec();
|
|
|
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "ThreadCompareItemManager: 线程结束");
|
|
SPDLOG_LOGGER_INFO(m_logger, "ThreadCompareItemManager: 线程结束");
|
|
@@ -131,20 +132,17 @@ SoundCardRoadInfo_t ThreadCompareItemManager::getSoundCardRoadInfo(int compareIt
|
|
/* 任务函数 */
|
|
/* 任务函数 */
|
|
void ThreadCompareItemManager::do_task()
|
|
void ThreadCompareItemManager::do_task()
|
|
{
|
|
{
|
|
- // SPDLOG_LOGGER_ERROR(m_logger, "ThreadCompareItemManager: do_task() 函数被调用");
|
|
|
|
/* 如果定时间隔小于10秒,则设置成10秒,一开始小是为了线程开启后立马执行一次 */
|
|
/* 如果定时间隔小于10秒,则设置成10秒,一开始小是为了线程开启后立马执行一次 */
|
|
if(m_pTimer->interval() < 10000)
|
|
if(m_pTimer->interval() < 10000)
|
|
{
|
|
{
|
|
- // m_pTimer->stop();
|
|
|
|
m_pTimer->setInterval(10000);
|
|
m_pTimer->setInterval(10000);
|
|
- // m_pTimer->start();
|
|
|
|
}
|
|
}
|
|
- if(m_pFromMQTT == nullptr)
|
|
|
|
|
|
+ /* 判断MQTT是否连接成功,未连接则再次连接 */
|
|
|
|
+ if(m_pFromMQTT->connectState() != QMQTT::ConnectionState::STATE_CONNECTED)
|
|
{
|
|
{
|
|
- /* 初始化MQTT */
|
|
|
|
- initMQTT();
|
|
|
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "MQTT未连接,尝试重新连接");
|
|
|
|
+ m_pFromMQTT->connectToServer();
|
|
}
|
|
}
|
|
- // SPDLOG_LOGGER_WARN(m_logger, "定时器是否在运行: {}, 触发间隔: {} ms", m_pTimer->isActive(), m_pTimer->interval());
|
|
|
|
/* ------------------------------------------------------------------
|
|
/* ------------------------------------------------------------------
|
|
* 处理对比项信息
|
|
* 处理对比项信息
|
|
* ------------------------------------------------------------------ */
|
|
* ------------------------------------------------------------------ */
|
|
@@ -159,7 +157,6 @@ void ThreadCompareItemManager::do_task()
|
|
* 更新对比项信息到MQTT
|
|
* 更新对比项信息到MQTT
|
|
* ------------------------------------------------------------------ */
|
|
* ------------------------------------------------------------------ */
|
|
updateCompareItemInfoToMQTT();
|
|
updateCompareItemInfoToMQTT();
|
|
- // SPDLOG_LOGGER_WARN(m_logger, "ThreadCompareItemManager: do_task() 函数执行完毕");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/* 更新基础设置信息,如数据库设置,噪音参数等 */
|
|
/* 更新基础设置信息,如数据库设置,噪音参数等 */
|
|
@@ -247,6 +244,11 @@ void ThreadCompareItemManager::checkCompareItemInfo(QList<CompareItemInfo_t>& ne
|
|
{
|
|
{
|
|
if(!m_mapNowCompareItem.contains(item.nID))
|
|
if(!m_mapNowCompareItem.contains(item.nID))
|
|
{
|
|
{
|
|
|
|
+ /* 判断这个是否被启用 */
|
|
|
|
+ if(item.isEnable == false)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
/* 新对比项,添加到创建列表 */
|
|
/* 新对比项,添加到创建列表 */
|
|
createList.append(item);
|
|
createList.append(item);
|
|
} else
|
|
} else
|
|
@@ -256,7 +258,13 @@ void ThreadCompareItemManager::checkCompareItemInfo(QList<CompareItemInfo_t>& ne
|
|
/* 先对比基础信息 */
|
|
/* 先对比基础信息 */
|
|
if(!existingItem.isEqualBase(item))
|
|
if(!existingItem.isEqualBase(item))
|
|
{
|
|
{
|
|
- /* 基础信息不同,需要更新 */
|
|
|
|
|
|
+ /* 基础信息不同,需要更新,也可能是被禁用了导致的不同 */
|
|
|
|
+ if(item.isEnable == false)
|
|
|
|
+ {
|
|
|
|
+ /* 如果新对比项被禁用,则需要删除 */
|
|
|
|
+ deleteList.append(item.nID);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
updateList.append(item);
|
|
updateList.append(item);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -267,6 +275,7 @@ void ThreadCompareItemManager::checkCompareItemInfo(QList<CompareItemInfo_t>& ne
|
|
updateList.append(item);
|
|
updateList.append(item);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* 遍历当前对比项信息,找出需要删除的对比项 */
|
|
/* 遍历当前对比项信息,找出需要删除的对比项 */
|
|
@@ -277,8 +286,9 @@ void ThreadCompareItemManager::checkCompareItemInfo(QList<CompareItemInfo_t>& ne
|
|
{
|
|
{
|
|
if(it.nID == newItem.nID)
|
|
if(it.nID == newItem.nID)
|
|
{
|
|
{
|
|
|
|
+ /* 找到对应的对比项,跳过 */
|
|
isFound = true;
|
|
isFound = true;
|
|
- break; // 找到对应的对比项,不需要删除
|
|
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(!isFound)
|
|
if(!isFound)
|
|
@@ -289,6 +299,7 @@ void ThreadCompareItemManager::checkCompareItemInfo(QList<CompareItemInfo_t>& ne
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -460,16 +471,83 @@ void ThreadCompareItemManager::checkDetectPeriodInfo(QMap<int, DetectPeriodConfi
|
|
|
|
|
|
/* 更新对比项信息到MQTT */
|
|
/* 更新对比项信息到MQTT */
|
|
void ThreadCompareItemManager::updateCompareItemInfoToMQTT()
|
|
void ThreadCompareItemManager::updateCompareItemInfoToMQTT()
|
|
|
|
+{
|
|
|
|
+ QMap<int, CompareItemInfo_t> newMap;
|
|
|
|
+ /* 获取当前的对比项信息 */
|
|
|
|
+ for(auto it = m_mapThreads.begin(); it != m_mapThreads.end(); ++it)
|
|
|
|
+ {
|
|
|
|
+ BaseCalculateThread* pThread = it.value();
|
|
|
|
+ if(pThread == nullptr)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* 获取对比项信息 */
|
|
|
|
+ CompareItemInfo_t itemInfo = pThread->getThreadInfo().compareItemInfo;
|
|
|
|
+ newMap.insert(itemInfo.nID, itemInfo);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* 和之前的对比,对比项是否有更新,有更新则发送 */
|
|
|
|
+ bool isUpdated = false;
|
|
|
|
+ if(newMap.size() != m_mapMQTTItemInfo.size())
|
|
|
|
+ {
|
|
|
|
+ isUpdated = true;
|
|
|
|
+ } else
|
|
|
|
+ {
|
|
|
|
+ /* 进一步对比相信信息 */
|
|
|
|
+ for(const auto& newItem : newMap)
|
|
|
|
+ {
|
|
|
|
+ auto nowIt = m_mapMQTTItemInfo.find(newItem.nID);
|
|
|
|
+ if(nowIt == m_mapMQTTItemInfo.end())
|
|
|
|
+ {
|
|
|
|
+ isUpdated = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ /* 比较对比项通道数量和对比项名称 */
|
|
|
|
+ if(nowIt.value().strName != newItem.strName || nowIt.value().mapRoad.size() != newItem.mapRoad.size())
|
|
|
|
+ {
|
|
|
|
+ isUpdated = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ /* 挨个比较对比项通道信息 */
|
|
|
|
+ for(const auto& road : newItem.mapRoad)
|
|
|
|
+ {
|
|
|
|
+ auto roadIt = nowIt.value().mapRoad.find(road.nCompareRoadNum);
|
|
|
|
+ if(roadIt == nowIt.value().mapRoad.end() || roadIt.value().strCompareRoadName != road.strCompareRoadName)
|
|
|
|
+ {
|
|
|
|
+ isUpdated = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(isUpdated)
|
|
|
|
+ {
|
|
|
|
+ sendCompareItemInfoToMQTT(newMap);
|
|
|
|
+ m_mapMQTTItemInfo = newMap;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 发送到MQTT */
|
|
|
|
+void ThreadCompareItemManager::sendCompareItemInfoToMQTT(const QMap<int, CompareItemInfo_t>& mapCompareItem)
|
|
{
|
|
{
|
|
/* 生成发送的json文件 */
|
|
/* 生成发送的json文件 */
|
|
nJson jsonArray = nJson::array();
|
|
nJson jsonArray = nJson::array();
|
|
- for(const auto& it : m_mapNowCompareItem)
|
|
|
|
|
|
+ for(const auto& it : mapCompareItem)
|
|
{
|
|
{
|
|
|
|
+ /* 判断这个对比项是否启用,不启用就跳过 */
|
|
|
|
+ if(it.isEnable == false)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
nJson jsonItem;
|
|
nJson jsonItem;
|
|
/* 对比项ID */
|
|
/* 对比项ID */
|
|
jsonItem["compareItem_id"] = it.nID;
|
|
jsonItem["compareItem_id"] = it.nID;
|
|
/* 对比项名称 */
|
|
/* 对比项名称 */
|
|
jsonItem["compareItem_name"] = it.strName.toStdString();
|
|
jsonItem["compareItem_name"] = it.strName.toStdString();
|
|
|
|
+ nJson josnItemRoads = nJson::array();
|
|
for(const auto& road : it.mapRoad)
|
|
for(const auto& road : it.mapRoad)
|
|
{
|
|
{
|
|
nJson jsonRoad;
|
|
nJson jsonRoad;
|
|
@@ -477,26 +555,27 @@ void ThreadCompareItemManager::updateCompareItemInfoToMQTT()
|
|
jsonRoad["road_num"] = road.nCompareRoadNum;
|
|
jsonRoad["road_num"] = road.nCompareRoadNum;
|
|
jsonRoad["road_name"] = road.strCompareRoadName.toStdString();
|
|
jsonRoad["road_name"] = road.strCompareRoadName.toStdString();
|
|
/* 通道使用的声卡编号 */
|
|
/* 通道使用的声卡编号 */
|
|
- jsonRoad["sound_card_num"] = road.scRoadInfo.nSoundCardNum;
|
|
|
|
- jsonRoad["sound_card_road_num"] = road.scRoadInfo.roadInfo.nRoadNum;
|
|
|
|
|
|
+ // jsonRoad["sound_card_num"] = road.scRoadInfo.nSoundCardNum;
|
|
|
|
+ // jsonRoad["sound_card_road_num"] = road.scRoadInfo.roadInfo.nRoadNum;
|
|
|
|
|
|
- jsonRoad["compareItem_roads"].push_back(jsonRoad);
|
|
|
|
|
|
+ josnItemRoads.push_back(jsonRoad);
|
|
}
|
|
}
|
|
- /* 静音条件 */
|
|
|
|
- jsonItem["silence_switch"] = it.paramMute.isEnable;
|
|
|
|
- jsonItem["silence_threshold"] = it.paramMute.threshold.nThreshold;
|
|
|
|
- jsonItem["silence_duration"] = it.paramMute.nLen;
|
|
|
|
- jsonItem["silence_sensitivity"] = it.paramMute.nSensitivity;
|
|
|
|
- /* 过载条件 */
|
|
|
|
- jsonItem["overload_switch"] = it.paramOverload.isEnable;
|
|
|
|
- jsonItem["overload_threshold"] = it.paramOverload.threshold.nThreshold;
|
|
|
|
- jsonItem["overload_duration"] = it.paramOverload.nLen;
|
|
|
|
- jsonItem["overload_sensitivity"] = it.paramOverload.nSensitivity;
|
|
|
|
- /* 反相条件 */
|
|
|
|
- jsonItem["reverse_switch"] = it.paramPhase.isEnable;
|
|
|
|
- jsonItem["reverse_threshold"] = it.paramPhase.threshold.dThreshold;
|
|
|
|
- jsonItem["reverse_duration"] = it.paramPhase.nLen;
|
|
|
|
- jsonItem["reverse_sensitivity"] = it.paramPhase.nSensitivity;
|
|
|
|
|
|
+ jsonItem["compareItem_roads"] = josnItemRoads;
|
|
|
|
+ // /* 静音条件 */
|
|
|
|
+ // jsonItem["silence_switch"] = it.paramMute.isEnable;
|
|
|
|
+ // jsonItem["silence_threshold"] = it.paramMute.threshold.nThreshold;
|
|
|
|
+ // jsonItem["silence_duration"] = it.paramMute.nLen;
|
|
|
|
+ // jsonItem["silence_sensitivity"] = it.paramMute.nSensitivity;
|
|
|
|
+ // /* 过载条件 */
|
|
|
|
+ // jsonItem["overload_switch"] = it.paramOverload.isEnable;
|
|
|
|
+ // jsonItem["overload_threshold"] = it.paramOverload.threshold.nThreshold;
|
|
|
|
+ // jsonItem["overload_duration"] = it.paramOverload.nLen;
|
|
|
|
+ // jsonItem["overload_sensitivity"] = it.paramOverload.nSensitivity;
|
|
|
|
+ // /* 反相条件 */
|
|
|
|
+ // jsonItem["reverse_switch"] = it.paramPhase.isEnable;
|
|
|
|
+ // jsonItem["reverse_threshold"] = it.paramPhase.threshold.dThreshold;
|
|
|
|
+ // jsonItem["reverse_duration"] = it.paramPhase.nLen;
|
|
|
|
+ // jsonItem["reverse_sensitivity"] = it.paramPhase.nSensitivity;
|
|
|
|
|
|
jsonArray.push_back(jsonItem);
|
|
jsonArray.push_back(jsonItem);
|
|
}
|
|
}
|
|
@@ -534,7 +613,7 @@ void ThreadCompareItemManager::initMQTT()
|
|
m_pFromMQTT->setIPAndPort(GInfo.mqttIP(), GInfo.mqttPort());
|
|
m_pFromMQTT->setIPAndPort(GInfo.mqttIP(), GInfo.mqttPort());
|
|
// m_pFromMQTT->addSubcribe("LH_WEBINFO");
|
|
// m_pFromMQTT->addSubcribe("LH_WEBINFO");
|
|
m_pFromMQTT->setAutoReconnect(true);
|
|
m_pFromMQTT->setAutoReconnect(true);
|
|
- m_pFromMQTT->connectToServer();
|
|
|
|
|
|
+ // m_pFromMQTT->connectToServer();
|
|
|
|
|
|
// connect(m_pFromMQTT, &FromMQTT::signal_recvMessage, [this](const QMQTT::Message& message) {
|
|
// connect(m_pFromMQTT, &FromMQTT::signal_recvMessage, [this](const QMQTT::Message& message) {
|
|
// SPDLOG_LOGGER_WARN(m_logger, "--------------------- 接收到MQTT消息: {}", message.topic().toStdString());
|
|
// SPDLOG_LOGGER_WARN(m_logger, "--------------------- 接收到MQTT消息: {}", message.topic().toStdString());
|