#include "LogInfo.h" #include "runtimectrl.h" #include 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); }