176 lines
4.9 KiB
C++
176 lines
4.9 KiB
C++
#include "LogInfo.h"
|
|
#include "runtimectrl.h"
|
|
|
|
#include <QFileInfo>
|
|
|
|
RunTimeCtrl::RunTimeCtrl()
|
|
{
|
|
init();
|
|
}
|
|
|
|
RunTimeCtrl::~RunTimeCtrl()
|
|
{
|
|
m_checkTimer->stop();
|
|
m_alertTimer->stop();
|
|
delete m_checkTimer;
|
|
delete m_alertTimer;
|
|
}
|
|
|
|
void RunTimeCtrl::start()
|
|
{
|
|
slt_checkRunTime();
|
|
m_checkTimer->start(1000 * 60 * 5);
|
|
m_runTimer->start(1000);
|
|
}
|
|
|
|
void RunTimeCtrl::stop()
|
|
{
|
|
m_checkTimer->stop();
|
|
m_alertTimer->stop();
|
|
m_runTimer->stop();
|
|
}
|
|
|
|
void RunTimeCtrl::setAlertInterval(qint64 minutes)
|
|
{
|
|
if (minutes > 0) {
|
|
m_alertIntervalMinutes = minutes;
|
|
m_alertTimer->stop();
|
|
m_alertTimer->start(m_alertIntervalMinutes * 60 * 1000);
|
|
}
|
|
}
|
|
|
|
qint64 RunTimeCtrl::getElapsedSeconds() const
|
|
{
|
|
return m_elapsedSeconds;
|
|
}
|
|
|
|
qint64 RunTimeCtrl::getTotalSeconds() const
|
|
{
|
|
return m_totalSeconds;
|
|
}
|
|
|
|
//5min
|
|
void RunTimeCtrl::slt_checkRunTime()
|
|
{
|
|
// 检查运行时间 || 检查保养时间
|
|
if (checkRunTime() || checkTimeoutDay()) {
|
|
// 立即发送第一次提示
|
|
emit sig_alertTimeout();
|
|
|
|
// 启动定时提示器
|
|
m_alertTimer->start(m_alertIntervalMinutes * 60 * 1000);
|
|
} else {
|
|
m_alertTimer->stop();
|
|
}
|
|
}
|
|
|
|
void RunTimeCtrl::slt_recodeTime()
|
|
{
|
|
m_elapsedSeconds++;
|
|
if (m_elapsedSeconds % 30 == 0) {
|
|
m_totalSeconds += 30;
|
|
m_para.runTime += 30;
|
|
emit sig_saveRunTime();
|
|
}
|
|
}
|
|
|
|
void RunTimeCtrl::init()
|
|
{
|
|
m_checkTimer = new QTimer(this);
|
|
m_alertTimer = new QTimer(this);
|
|
m_runTimer = new QTimer(this);
|
|
|
|
// 每5分钟1次,检查运行时间
|
|
connect(m_checkTimer, &QTimer::timeout, this, &RunTimeCtrl::slt_checkRunTime);
|
|
// 每 m_alertIntervalMinutes 分钟一次消息框提示
|
|
connect(m_alertTimer, &QTimer::timeout, this, &RunTimeCtrl::sig_alertTimeout);
|
|
// 每30s,记录一次总时间
|
|
connect(m_runTimer, &QTimer::timeout, this, &RunTimeCtrl::slt_recodeTime);
|
|
}
|
|
|
|
bool RunTimeCtrl::checkRunTime()
|
|
{
|
|
// 甲方要求提示越来越频繁
|
|
// 168h 72h 24h
|
|
int runHours = m_totalSeconds/60.0/60.0;
|
|
if (runHours + 24 >= m_para.maintenanceHours) {
|
|
setAlertInterval(15); //15min
|
|
return true;
|
|
}
|
|
if (runHours + 72 >= m_para.maintenanceHours) {
|
|
setAlertInterval(60); //1h
|
|
return true;
|
|
}
|
|
if (runHours + 168 >= m_para.maintenanceHours) {
|
|
setAlertInterval(1); //3h
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool RunTimeCtrl::checkTimeoutDay()
|
|
{
|
|
return (timeoutDay < 30);
|
|
}
|
|
|
|
// 读配置 初始化的时候调用
|
|
void RunTimeCtrl::loadConfig(RFIDPara_t* para)
|
|
{
|
|
QDate curDate = QDate::currentDate();
|
|
unsigned int curDateInt = curDate.toString("yyMMdd").toInt();
|
|
// 第一次初始化
|
|
if(para->maintenanceDate == 0){
|
|
para->maintenanceDate = curDateInt;
|
|
para->maintenanceInterval = 6;
|
|
QDate mtEndDate = curDate.addMonths(para->maintenanceInterval);
|
|
para->maintenanceEndDate = mtEndDate.toString("yyMMdd").toInt();
|
|
para->runTime = 0;
|
|
para->maintenanceHours = 3000;
|
|
}
|
|
// 结束维护的天数
|
|
QString mtEndDatestr = "20" + QString::number(para->maintenanceEndDate);
|
|
QDate mtEndDate = QDate::fromString(mtEndDatestr,"yyyyMMdd");
|
|
timeoutDay = curDate.daysTo(mtEndDate);
|
|
|
|
LogInfo::setRunStatusText(tr("mtDate: %1").arg(para->maintenanceDate));
|
|
LogInfo::setRunStatusText(tr("mtInterval: %1").arg(para->maintenanceInterval));
|
|
LogInfo::setRunStatusText(tr("mtEndDate: %1").arg(para->maintenanceEndDate));
|
|
LogInfo::setRunStatusText(tr("mtFlag: %1").arg(para->needMaintenance));
|
|
LogInfo::setRunStatusText(tr("timeoutDay: %1").arg(timeoutDay));
|
|
LogInfo::setRunStatusText(tr("runTime: %1").arg(para->runTime));
|
|
LogInfo::setRunStatusText(tr("maintenanceHours: %1").arg(para->maintenanceHours));
|
|
if(timeoutDay <= 0 && !para->needMaintenance)
|
|
para->needMaintenance = true;
|
|
|
|
emit sig_updateTimeoutDay(timeoutDay);
|
|
|
|
m_para = *para;
|
|
m_totalSeconds = para->runTime;
|
|
}
|
|
|
|
void RunTimeCtrl::updatePara(RFIDPara_t* para)
|
|
{
|
|
QString mtDatestr = QString::number(para->maintenanceDate);
|
|
QDate mtDate = QDate::fromString(mtDatestr,"yyMMdd");
|
|
QDate mtEndDate = mtDate.addMonths(para->maintenanceInterval); // 结束维护日期
|
|
|
|
para->maintenanceEndDate = mtEndDate.toString("yyMMdd").toInt();
|
|
LogInfo::setRunStatusText(tr("mtDate1: %1").arg(para->maintenanceDate));
|
|
LogInfo::setRunStatusText(tr("mtInterval1: %1").arg(para->maintenanceInterval));
|
|
LogInfo::setRunStatusText(tr("mtEndDate1: %1").arg(para->maintenanceEndDate));
|
|
LogInfo::setRunStatusText(tr("mtFlog1: %1").arg(para->needMaintenance));
|
|
|
|
m_para = *para;
|
|
}
|
|
|
|
void RunTimeCtrl::authorizationAccepted(RFIDPara_t* para)
|
|
{
|
|
para->maintenanceDate = m_para.maintenanceDate;
|
|
para->maintenanceInterval = m_para.maintenanceInterval;
|
|
para->maintenanceEndDate = m_para.maintenanceEndDate;
|
|
para->runTime = m_para.runTime;
|
|
para->maintenanceHours = m_para.maintenanceHours;
|
|
updatePara(para);
|
|
}
|
|
|