Files

177 lines
5.0 KiB
C++

#include "LogInfo.h"
#include "runtimectrl.h"
#include <QFileInfo>
RunTimeCtrl::RunTimeCtrl()
{
init();
}
qint64 RunTimeCtrl::updateRuntime()
{
m_totalRuntimeMs += m_elapsedTimer.restart();
return m_totalRuntimeMs;
}
RunTimeCtrl *RunTimeCtrl::instance()
{
static RunTimeCtrl *ins = nullptr;
if (!ins) {
ins = new RunTimeCtrl();
}
return ins;
}
RunTimeCtrl::~RunTimeCtrl()
{
m_runTimer->stop();
m_checkTimer->stop();
m_alertTimer->stop();
}
void RunTimeCtrl::start()
{
m_elapsedTimer.start();
slt_checkRunTime();
m_checkTimer->start(1000 * 60 * 5);
m_runTimer->start(30 * 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::totalRuntimeMs()
{
return updateRuntime();
}
//5min
void RunTimeCtrl::slt_checkRunTime()
{
// 检查运行时间 || 检查保养时间
if (checkRunTime() || checkTimeoutDay()) {
// 立即发送第一次提示
emit sig_alertTimeout();
// 启动定时提示器
m_alertTimer->start(m_alertIntervalMinutes * 60 * 1000);
} else {
m_alertTimer->stop();
}
}
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::sig_saveRunTime);
}
bool RunTimeCtrl::checkRunTime()
{
// 甲方要求提示越来越频繁
// 168h 72h 24h
int runHours = int(updateRuntime() / 1000.0 / 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(180); //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->runtimeMs = 0;
para->maintenanceHours = 3000;
}
// 结束维护的天数maintenanceEndDate = 刷卡日期+维护月份
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("runtimeMs: %1").arg(para->runtimeMs));
LogInfo::setRunStatusText(tr("maintenanceHours: %1").arg(para->maintenanceHours));
if(timeoutDay <= 0 && !para->needMaintenance)
para->needMaintenance = true;
emit sig_updateTimeoutDay(timeoutDay);
m_para = *para;
m_totalRuntimeMs = para->runtimeMs;
}
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->runtimeMs = m_para.runtimeMs;
para->maintenanceHours = m_para.maintenanceHours;
updatePara(para);
}