|
@@ -1,4 +1,5 @@
|
|
|
#include "CalculateDBThread.h"
|
|
|
+#include "GlobalVariable.h"
|
|
|
#include "spdlog.h"
|
|
|
|
|
|
#include "ThreadManager.h"
|
|
@@ -23,8 +24,13 @@ OneRoadVolume_t CalculateDBThread::getVolumeInfo()
|
|
|
return m_roadVolumeInfo;
|
|
|
}
|
|
|
|
|
|
-/* 获取最新的结果
|
|
|
- * 结果包括:静音、过载、反相和音量包信息
|
|
|
+/**
|
|
|
+ * @brief 获取最新的结果
|
|
|
+ * 结果包括:静音、过载、反相和音量包信息
|
|
|
+ *
|
|
|
+ * @param volumeInfo
|
|
|
+ * @return true 结果更新成功
|
|
|
+ * @return false 没有更新结果,可能是没有,也可能传入的已经是最新的结果了
|
|
|
*/
|
|
|
bool CalculateDBThread::getlastVolumeInfo(OneRoadVolume_t& volumeInfo)
|
|
|
{
|
|
@@ -52,17 +58,44 @@ bool CalculateDBThread::getlastVolumeInfo(OneRoadVolume_t& volumeInfo)
|
|
|
}
|
|
|
|
|
|
/* 获取报警数据 */
|
|
|
-const AlarmInfo_t& CalculateDBThread::getAlarm(EAlarmType alarmType)
|
|
|
+AlarmInfo_t CalculateDBThread::getAlarm(EAlarmType alarmType)
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexVolumeInfo);
|
|
|
switch(alarmType)
|
|
|
{
|
|
|
case EAlarmType::EAT_Silent:
|
|
|
- return m_alarmLastSilence;
|
|
|
+ {
|
|
|
+ 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:
|
|
|
- return m_alarmLastOverload;
|
|
|
+ {
|
|
|
+ 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:
|
|
|
- return m_alarmLastPhase;
|
|
|
+ {
|
|
|
+ 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; // 返回一个空的报警信息
|
|
@@ -276,18 +309,36 @@ void CalculateDBThread::processSilence()
|
|
|
{
|
|
|
m_alarmSilence.EndTime = m_currSecondData.endTime.addSecs(- m_volumeParam.GetSilentDuration());
|
|
|
}
|
|
|
- m_alarmSilence.strAlarmFilePath = generateAlarmFilePath(m_alarmSilence); // 生成报警文件路径
|
|
|
/* 保存报警信息 */
|
|
|
- m_alarmLastSilence = m_alarmSilence;
|
|
|
- m_alarmSilence = AlarmInfo_t(); // 清空报警信息
|
|
|
+ // m_alarmLastSilence = m_alarmSilence;
|
|
|
+ // m_alarmSilence = AlarmInfo_t(); // 清空报警信息,报警信息在对比项获取到结果后再清空
|
|
|
/* 将报警信息给截取报警文件的线程 */
|
|
|
|
|
|
/* 打印日志 */
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{} 静音报警结束,开始时间:{},结束时间:{},文件路径:{}",
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 静音报警结束,开始时间:{},结束时间:{}",
|
|
|
m_logBase,
|
|
|
- m_alarmLastSilence.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
- m_alarmLastSilence.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
- m_alarmLastSilence.strAlarmFilePath);
|
|
|
+ m_alarmSilence.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
+ m_alarmSilence.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 更新结果,实时更新 */
|
|
|
+ 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(); // 清空报警信息
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -340,18 +391,36 @@ void CalculateDBThread::processOverload()
|
|
|
{
|
|
|
m_alarmOverload.EndTime = m_currSecondData.endTime.addSecs(- m_volumeParam.GetOverloadDuration());
|
|
|
}
|
|
|
- m_alarmOverload.strAlarmFilePath = generateAlarmFilePath(m_alarmOverload); // 生成报警文件路径
|
|
|
/* 保存报警信息 */
|
|
|
- m_alarmLastOverload = m_alarmOverload;
|
|
|
- m_alarmOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
+ // m_alarmLastOverload = m_alarmOverload;
|
|
|
+ // m_alarmOverload = AlarmInfo_t(); // 清空报警信息
|
|
|
/* 将报警信息给截取报警文件的线程 */
|
|
|
|
|
|
/* 打印日志 */
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{} 过载报警结束,开始时间:{},结束时间:{},文件路径:{}",
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 过载报警结束,开始时间:{},结束时间:{}",
|
|
|
m_logBase,
|
|
|
- m_alarmLastOverload.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
- m_alarmLastOverload.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
- m_alarmLastOverload.strAlarmFilePath);
|
|
|
+ m_alarmOverload.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(),
|
|
|
+ m_alarmOverload.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 更新结果,实时更新 */
|
|
|
+ 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(); // 清空报警信息
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -405,17 +474,35 @@ void CalculateDBThread::processPhase()
|
|
|
{
|
|
|
m_alarmPhase.EndTime = m_currSecondData.endTime.addSecs(- m_volumeParam.GetPhaseDuration());
|
|
|
}
|
|
|
- m_alarmPhase.strAlarmFilePath = generateAlarmFilePath(m_alarmPhase); // 生成报警文件路径
|
|
|
/* 保存报警信息 */
|
|
|
- m_alarmLastPhase = m_alarmPhase;
|
|
|
- m_alarmPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
+ // m_alarmLastPhase = m_alarmPhase;
|
|
|
+ // m_alarmPhase = AlarmInfo_t(); // 清空报警信息
|
|
|
/* 将报警信息给截取报警文件的线程 */
|
|
|
/* 打印日志 */
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{} 反相报警结束,开始时间:{},结束时间:{},文件路径:{}",
|
|
|
+ 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.strAlarmFilePath);
|
|
|
+ m_alarmPhase.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 更新结果,实时更新 */
|
|
|
+ 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(); // 清空报警信息
|
|
|
}
|
|
|
}
|
|
|
}
|