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