|
@@ -4,6 +4,7 @@
|
|
|
|
|
|
#include "ThreadManager.h"
|
|
|
#include "GlobalInfo.h"
|
|
|
+#include "ThreadAlarmManager.h"
|
|
|
|
|
|
|
|
|
CalculateDBThread::CalculateDBThread(CalculateThreadInfo_t& threadInfo)
|
|
@@ -58,49 +59,49 @@ bool CalculateDBThread::getlastVolumeInfo(OneRoadVolume_t& volumeInfo)
|
|
|
}
|
|
|
|
|
|
/* 获取报警数据 */
|
|
|
-AlarmInfo_t CalculateDBThread::getAlarm(EAlarmType alarmType)
|
|
|
-{
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexVolumeInfo);
|
|
|
- switch(alarmType)
|
|
|
- {
|
|
|
- case EAlarmType::EAT_Silent:
|
|
|
- {
|
|
|
- if(m_alarmSilence.AlarmType != EAlarmType::EAT_None && m_alarmLastSilence.isAlarm == false)
|
|
|
- {
|
|
|
- /* 报警结束了,返回报警信息,并清空 */
|
|
|
- AlarmInfo_t alarmInfo = m_alarmLastSilence;
|
|
|
- m_alarmLastSilence = AlarmInfo_t(); // 清空报警信息
|
|
|
- return alarmInfo;
|
|
|
- }
|
|
|
- return m_alarmSilence;
|
|
|
- }
|
|
|
- case EAlarmType::EAT_Overload:
|
|
|
- {
|
|
|
- if(m_alarmOverload.AlarmType != EAlarmType::EAT_None && m_alarmLastOverload.isAlarm == false)
|
|
|
- {
|
|
|
- /* 报警结束了,返回报警信息,并清空 */
|
|
|
- AlarmInfo_t alarmInfo = m_alarmLastOverload;
|
|
|
- m_alarmLastOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
- return alarmInfo;
|
|
|
- }
|
|
|
- return m_alarmOverload;
|
|
|
- }
|
|
|
- case EAlarmType::EAT_Reversed:
|
|
|
- {
|
|
|
- if(m_alarmPhase.AlarmType != EAlarmType::EAT_None && m_alarmLastPhase.isAlarm == false)
|
|
|
- {
|
|
|
- /* 报警结束了,返回报警信息,并清空 */
|
|
|
- AlarmInfo_t alarmInfo = m_alarmLastPhase;
|
|
|
- m_alarmLastPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
- return alarmInfo;
|
|
|
- }
|
|
|
- return m_alarmPhase;
|
|
|
- }
|
|
|
- default:
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{} 获取报警数据失败,未知报警类型: {}", m_logBase, static_cast<int>(alarmType));
|
|
|
- return m_alarmNull; // 返回一个空的报警信息
|
|
|
- }
|
|
|
-}
|
|
|
+// AlarmInfo_t CalculateDBThread::getAlarm(EAlarmType alarmType)
|
|
|
+// {
|
|
|
+// std::lock_guard<std::mutex> lock(m_mutexVolumeInfo);
|
|
|
+// switch(alarmType)
|
|
|
+// {
|
|
|
+// case EAlarmType::EAT_Silent:
|
|
|
+// {
|
|
|
+// if(m_alarmSilence.AlarmType != EAlarmType::EAT_None && m_alarmLastSilence.isAlarm == false)
|
|
|
+// {
|
|
|
+// /* 报警结束了,返回报警信息,并清空 */
|
|
|
+// AlarmInfo_t alarmInfo = m_alarmLastSilence;
|
|
|
+// m_alarmLastSilence = AlarmInfo_t(); // 清空报警信息
|
|
|
+// return alarmInfo;
|
|
|
+// }
|
|
|
+// return m_alarmSilence;
|
|
|
+// }
|
|
|
+// case EAlarmType::EAT_Overload:
|
|
|
+// {
|
|
|
+// if(m_alarmOverload.AlarmType != EAlarmType::EAT_None && m_alarmLastOverload.isAlarm == false)
|
|
|
+// {
|
|
|
+// /* 报警结束了,返回报警信息,并清空 */
|
|
|
+// AlarmInfo_t alarmInfo = m_alarmLastOverload;
|
|
|
+// m_alarmLastOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
+// return alarmInfo;
|
|
|
+// }
|
|
|
+// return m_alarmOverload;
|
|
|
+// }
|
|
|
+// case EAlarmType::EAT_Reversed:
|
|
|
+// {
|
|
|
+// if(m_alarmPhase.AlarmType != EAlarmType::EAT_None && m_alarmLastPhase.isAlarm == false)
|
|
|
+// {
|
|
|
+// /* 报警结束了,返回报警信息,并清空 */
|
|
|
+// AlarmInfo_t alarmInfo = m_alarmLastPhase;
|
|
|
+// m_alarmLastPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
+// return alarmInfo;
|
|
|
+// }
|
|
|
+// return m_alarmPhase;
|
|
|
+// }
|
|
|
+// default:
|
|
|
+// SPDLOG_LOGGER_ERROR(m_logger, "{} 获取报警数据失败,未知报警类型: {}", m_logBase, static_cast<int>(alarmType));
|
|
|
+// return m_alarmNull; // 返回一个空的报警信息
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
/* 线程功能函数 */
|
|
|
void CalculateDBThread::task()
|
|
@@ -120,7 +121,7 @@ void CalculateDBThread::task()
|
|
|
* 更新最新数据
|
|
|
* --------------------------------------------------------------------------------*/
|
|
|
/* 获取最新数据 */
|
|
|
- if(!m_threadCreateDBPhase->getLatestResult(m_caculateDBData.ringQueue))
|
|
|
+ if(!m_threadCreateDB->getLatestResult(m_caculateDBData.ringQueue))
|
|
|
{
|
|
|
// SPDLOG_LOGGER_DEBUG(m_logger, "{} 获取最新的音量数据失败", m_logBase);
|
|
|
continue; // 没有获取到最新数据,继续等待
|
|
@@ -155,8 +156,17 @@ bool CalculateDBThread::initData()
|
|
|
auto m_startTime = std::chrono::steady_clock::now(); // 记录开始时间
|
|
|
while(true)
|
|
|
{
|
|
|
- m_threadCreateDBPhase = ThreadMan.getCreateDBThread(m_roadInfo.scRoadInfo.nSoundCardNum, m_roadInfo.scRoadInfo.roadInfo.nRoadNum);
|
|
|
- if(m_threadCreateDBPhase != nullptr)
|
|
|
+ /* 获取计算音量的线程 */
|
|
|
+ if(m_threadCreateDB == nullptr)
|
|
|
+ {
|
|
|
+ m_threadCreateDB = ThreadMan.getCreateDBThread(m_roadInfo.scRoadInfo.nSoundCardNum, m_roadInfo.scRoadInfo.roadInfo.nRoadNum);
|
|
|
+ }
|
|
|
+ if(m_threadCreateAlarmFile == nullptr)
|
|
|
+ {
|
|
|
+ m_threadCreateAlarmFile = ThreadMan.getCreateLongFileThread(m_roadInfo.scRoadInfo.nSoundCardNum, m_roadInfo.scRoadInfo.roadInfo.nRoadNum);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(m_threadCreateDB != nullptr && m_threadCreateAlarmFile != nullptr)
|
|
|
{
|
|
|
break; // 获取到线程,跳出循环
|
|
|
}
|
|
@@ -168,7 +178,7 @@ bool CalculateDBThread::initData()
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
|
|
|
|
|
}
|
|
|
- if (m_threadCreateDBPhase == nullptr)
|
|
|
+ if (m_threadCreateDB == nullptr)
|
|
|
{
|
|
|
SPDLOG_LOGGER_ERROR(m_logger, "{} 获取创建音量线程失败", m_logBase);
|
|
|
return false;
|
|
@@ -287,6 +297,13 @@ void CalculateDBThread::processSilence()
|
|
|
}
|
|
|
m_alarmSilence.StartTime = startTime; // 静音开始时间
|
|
|
m_alarmSilence.EndTime = m_currSecondData.endTime;
|
|
|
+
|
|
|
+ /* 开启录音 */
|
|
|
+ if(!m_threadCreateAlarmFile->startRecordAlarmFile(m_alarmSilence))
|
|
|
+ {
|
|
|
+ /* 开启录制报警音频失败 */
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 开启录制静音报警音频失败", m_logBase);
|
|
|
+ }
|
|
|
}else
|
|
|
{
|
|
|
/* 静音报警已经开启,更新结束时间 */
|
|
@@ -311,36 +328,46 @@ void CalculateDBThread::processSilence()
|
|
|
}
|
|
|
/* 保存报警信息 */
|
|
|
// m_alarmLastSilence = m_alarmSilence;
|
|
|
- // m_alarmSilence = AlarmInfo_t(); // 清空报警信息,报警信息在对比项获取到结果后再清空
|
|
|
- /* 将报警信息给截取报警文件的线程 */
|
|
|
+
|
|
|
+ /* 停止录制报警音频 */
|
|
|
+ if(!m_threadCreateAlarmFile->stopRecordAlarmFile(m_alarmSilence))
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 停止录制静音报警音频失败", m_logBase);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 将报警信息发送给写入报警信息的线程 */
|
|
|
+ AlarmManager.addAlarmInfo(m_alarmSilence);
|
|
|
|
|
|
/* 打印日志 */
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "{} 静音报警结束,开始时间:{},结束时间:{}",
|
|
|
m_logBase,
|
|
|
m_alarmSilence.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
m_alarmSilence.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString());
|
|
|
+
|
|
|
+ /* 清空报警信息 */
|
|
|
+ m_alarmSilence = AlarmInfo_t();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 更新结果,实时更新 */
|
|
|
- if(m_alarmSilence.AlarmType != EAlarmType::EAT_None)
|
|
|
- {
|
|
|
- /* 有报警类型,进一步判断是否有报警 */
|
|
|
- if(m_alarmSilence.isAlarm)
|
|
|
- {
|
|
|
- /* 有报警,更新报警信息,判断一下上次的报警是否被取走 */
|
|
|
- if(m_alarmLastSilence.AlarmType == EAlarmType::EAT_None || m_alarmLastSilence.isAlarm == true)
|
|
|
- {
|
|
|
- /* 报警结束信息被取走了,清空了结果,或者正在报警中,更新信息 */
|
|
|
- m_alarmLastSilence = m_alarmSilence;
|
|
|
- }
|
|
|
- }else
|
|
|
- {
|
|
|
- /* 有报警类型无报警,说明是报警结束了 */
|
|
|
- m_alarmLastSilence = m_alarmSilence;
|
|
|
- m_alarmSilence = AlarmInfo_t(); // 清空报警信息
|
|
|
- }
|
|
|
- }
|
|
|
+ // if(m_alarmSilence.AlarmType != EAlarmType::EAT_None)
|
|
|
+ // {
|
|
|
+ // /* 有报警类型,进一步判断是否有报警 */
|
|
|
+ // if(m_alarmSilence.isAlarm)
|
|
|
+ // {
|
|
|
+ // /* 有报警,更新报警信息,判断一下上次的报警是否被取走 */
|
|
|
+ // if(m_alarmLastSilence.AlarmType == EAlarmType::EAT_None || m_alarmLastSilence.isAlarm == true)
|
|
|
+ // {
|
|
|
+ // /* 报警结束信息被取走了,清空了结果,或者正在报警中,更新信息 */
|
|
|
+ // m_alarmLastSilence = m_alarmSilence;
|
|
|
+ // }
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // /* 有报警类型无报警,说明是报警结束了 */
|
|
|
+ // m_alarmLastSilence = m_alarmSilence;
|
|
|
+ // m_alarmSilence = AlarmInfo_t(); // 清空报警信息
|
|
|
+ // }
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
/* 处理过载报警 */
|
|
@@ -369,6 +396,14 @@ void CalculateDBThread::processOverload()
|
|
|
}
|
|
|
m_alarmOverload.StartTime = startTime; // 过载开始时间
|
|
|
m_alarmOverload.EndTime = m_currSecondData.endTime;
|
|
|
+
|
|
|
+ /* 开启录音 */
|
|
|
+ if(!m_threadCreateAlarmFile->startRecordAlarmFile(m_alarmSilence))
|
|
|
+ {
|
|
|
+ /* 开启录制报警音频失败 */
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 开启录制过载报警音频失败", m_logBase);
|
|
|
+ }
|
|
|
+
|
|
|
}else
|
|
|
{
|
|
|
/* 过载报警已经开启,更新结束时间 */
|
|
@@ -393,36 +428,47 @@ void CalculateDBThread::processOverload()
|
|
|
}
|
|
|
/* 保存报警信息 */
|
|
|
// m_alarmLastOverload = m_alarmOverload;
|
|
|
- // m_alarmOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
- /* 将报警信息给截取报警文件的线程 */
|
|
|
+
|
|
|
+ /* 停止录制报警音频 */
|
|
|
+ if(!m_threadCreateAlarmFile->stopRecordAlarmFile(m_alarmOverload))
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 停止录制过载报警音频失败", m_logBase);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 将报警信息发送给写入报警信息的线程 */
|
|
|
+ AlarmManager.addAlarmInfo(m_alarmOverload);
|
|
|
+
|
|
|
|
|
|
/* 打印日志 */
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "{} 过载报警结束,开始时间:{},结束时间:{}",
|
|
|
m_logBase,
|
|
|
m_alarmOverload.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
m_alarmOverload.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString());
|
|
|
+
|
|
|
+ /* 清空报警信息 */
|
|
|
+ m_alarmOverload = AlarmInfo_t();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 更新结果,实时更新 */
|
|
|
- if(m_alarmOverload.AlarmType != EAlarmType::EAT_None)
|
|
|
- {
|
|
|
- /* 有报警类型,进一步判断是否有报警 */
|
|
|
- if(m_alarmOverload.isAlarm)
|
|
|
- {
|
|
|
- /* 有报警,更新报警信息,判断一下上次的报警是否被取走 */
|
|
|
- if(m_alarmLastOverload.AlarmType == EAlarmType::EAT_None || m_alarmLastOverload.isAlarm == true)
|
|
|
- {
|
|
|
- /* 报警结束信息被取走了,或者正在报警中,更新信息 */
|
|
|
- m_alarmLastOverload = m_alarmOverload;
|
|
|
- }
|
|
|
- }else
|
|
|
- {
|
|
|
- /* 有报警类型无报警,说明是报警结束了 */
|
|
|
- m_alarmLastOverload = m_alarmOverload;
|
|
|
- m_alarmOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
- }
|
|
|
- }
|
|
|
+ // if(m_alarmOverload.AlarmType != EAlarmType::EAT_None)
|
|
|
+ // {
|
|
|
+ // /* 有报警类型,进一步判断是否有报警 */
|
|
|
+ // if(m_alarmOverload.isAlarm)
|
|
|
+ // {
|
|
|
+ // /* 有报警,更新报警信息,判断一下上次的报警是否被取走 */
|
|
|
+ // if(m_alarmLastOverload.AlarmType == EAlarmType::EAT_None || m_alarmLastOverload.isAlarm == true)
|
|
|
+ // {
|
|
|
+ // /* 报警结束信息被取走了,或者正在报警中,更新信息 */
|
|
|
+ // m_alarmLastOverload = m_alarmOverload;
|
|
|
+ // }
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // /* 有报警类型无报警,说明是报警结束了 */
|
|
|
+ // m_alarmLastOverload = m_alarmOverload;
|
|
|
+ // m_alarmOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -452,6 +498,14 @@ void CalculateDBThread::processPhase()
|
|
|
}
|
|
|
m_alarmPhase.StartTime = startTime; // 反相开始时间
|
|
|
m_alarmPhase.EndTime = m_currSecondData.endTime;
|
|
|
+
|
|
|
+ /* 开启录音 */
|
|
|
+ if(!m_threadCreateAlarmFile->startRecordAlarmFile(m_alarmSilence))
|
|
|
+ {
|
|
|
+ /* 开启录制报警音频失败 */
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 开启录制反相报警音频失败", m_logBase);
|
|
|
+ }
|
|
|
+
|
|
|
}else
|
|
|
{
|
|
|
/* 反相报警已经开启,更新结束时间 */
|
|
@@ -476,35 +530,46 @@ void CalculateDBThread::processPhase()
|
|
|
}
|
|
|
/* 保存报警信息 */
|
|
|
// m_alarmLastPhase = m_alarmPhase;
|
|
|
- // m_alarmPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
- /* 将报警信息给截取报警文件的线程 */
|
|
|
+
|
|
|
+ /* 停止录制报警音频 */
|
|
|
+ if(!m_threadCreateAlarmFile->stopRecordAlarmFile(m_alarmPhase))
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 停止录制反相报警音频失败", m_logBase);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 将报警信息发送给写入报警信息的线程 */
|
|
|
+ AlarmManager.addAlarmInfo(m_alarmPhase);
|
|
|
+
|
|
|
/* 打印日志 */
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "{} 反相报警结束,开始时间:{},结束时间:{}",
|
|
|
m_logBase,
|
|
|
m_alarmPhase.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
m_alarmPhase.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString());
|
|
|
+
|
|
|
+ /* 清空报警信息 */
|
|
|
+ m_alarmPhase = AlarmInfo_t();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 更新结果,实时更新 */
|
|
|
- if(m_alarmPhase.AlarmType != EAlarmType::EAT_None)
|
|
|
- {
|
|
|
- /* 有报警类型,进一步判断是否有报警 */
|
|
|
- if(m_alarmPhase.isAlarm)
|
|
|
- {
|
|
|
- /* 有报警,更新报警信息,判断一下上次的报警是否被取走 */
|
|
|
- if(m_alarmLastPhase.AlarmType == EAlarmType::EAT_None || m_alarmLastPhase.isAlarm == true)
|
|
|
- {
|
|
|
- /* 报警结束信息被取走了,或者正在报警中,更新信息 */
|
|
|
- m_alarmLastPhase = m_alarmPhase;
|
|
|
- }
|
|
|
- }else
|
|
|
- {
|
|
|
- /* 有报警类型无报警,说明是报警结束了 */
|
|
|
- m_alarmLastPhase = m_alarmPhase;
|
|
|
- m_alarmPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
- }
|
|
|
- }
|
|
|
+ // if(m_alarmPhase.AlarmType != EAlarmType::EAT_None)
|
|
|
+ // {
|
|
|
+ // /* 有报警类型,进一步判断是否有报警 */
|
|
|
+ // if(m_alarmPhase.isAlarm)
|
|
|
+ // {
|
|
|
+ // /* 有报警,更新报警信息,判断一下上次的报警是否被取走 */
|
|
|
+ // if(m_alarmLastPhase.AlarmType == EAlarmType::EAT_None || m_alarmLastPhase.isAlarm == true)
|
|
|
+ // {
|
|
|
+ // /* 报警结束信息被取走了,或者正在报警中,更新信息 */
|
|
|
+ // m_alarmLastPhase = m_alarmPhase;
|
|
|
+ // }
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // /* 有报警类型无报警,说明是报警结束了 */
|
|
|
+ // m_alarmLastPhase = m_alarmPhase;
|
|
|
+ // m_alarmPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
+ // }
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
|