diff --git a/appdep/iflytop/core/components/zcsv/zcsv.cpp b/appdep/iflytop/core/components/zcsv/zcsv.cpp index 6311a1c..98764e8 100644 --- a/appdep/iflytop/core/components/zcsv/zcsv.cpp +++ b/appdep/iflytop/core/components/zcsv/zcsv.cpp @@ -137,7 +137,7 @@ void ZCSV::dumpCSV(string filename) { file << endl; } } - +#if 0 void ZCSV::addValue(string key, string value) { // printf("addValue key=%s value=%s\n", key.c_str(), value.c_str()); // 查找0行的key是否存在 @@ -163,7 +163,7 @@ void ZCSV::addValue(string key, string value) { for (int i = 0; i <= m_maxRowNum; i++) { ZCSVCell* cell = findCell(i, keyColNum); if (cell == NULL) { - lastRowNum = i-1; + lastRowNum = i - 1; break; } } @@ -175,3 +175,29 @@ void ZCSV::addValue(string key, string value) { setdata(keyColNum, lastRowNum + 1, value); } +#endif +void ZCSV::addValue(int line, string key, string value) { + // printf("addValue key=%s value=%s\n", key.c_str(), value.c_str()); + // 查找0行的key是否存在 + int keyColNum = -1; + for (int i = 0; i <= m_maxColNum; i++) { + ZCSVCell* cell = findCell(0, i); + if (cell != NULL) { + if (cell->data == key) { + keyColNum = i; + break; + } + } + } + + if (keyColNum == -1) { + keyColNum = m_maxColNum + 1; + setdata(keyColNum, 0, key); + } + if (line == 0) { + return; + } + // printf("lastRowNum=%d m_maxRowNum:%d keyColNum:%d\n", lastRowNum, m_maxRowNum, keyColNum); + + setdata(keyColNum, line, value); +} diff --git a/appdep/iflytop/core/components/zcsv/zcsv.hpp b/appdep/iflytop/core/components/zcsv/zcsv.hpp index 77f7092..a10fdee 100644 --- a/appdep/iflytop/core/components/zcsv/zcsv.hpp +++ b/appdep/iflytop/core/components/zcsv/zcsv.hpp @@ -32,7 +32,8 @@ class ZCSV { bool parseCSV(string filename); - void addValue(string key, string value); + // void addValue(string key, string value); + void addValue(int line, string key, string value); void setdata(int colNum, int rowNum, string data); void setdata(int colNum, int rowNum, const char* fmt, ...); diff --git a/appsrc/appbase/appbean/disinfection_record_csv_header.hpp b/appsrc/appbase/appbean/disinfection_record_csv_header.hpp index de59078..8b41782 100644 --- a/appsrc/appbase/appbean/disinfection_record_csv_header.hpp +++ b/appsrc/appbase/appbean/disinfection_record_csv_header.hpp @@ -20,6 +20,7 @@ marco(type, dval) /**/ \ marco(type, nlog) /**/ \ marco(type, tlog) /**/ \ + marco(type, injectionRate) /**/ \ marco(type, remaindisinfectant) /**/ \ marco(type, reamintime) /**/ diff --git a/appsrc/appbase/appbean/disinfection_state.hpp b/appsrc/appbase/appbean/disinfection_state.hpp index cc2bf67..7020042 100644 --- a/appsrc/appbase/appbean/disinfection_state.hpp +++ b/appsrc/appbase/appbean/disinfection_state.hpp @@ -12,7 +12,6 @@ marco(type, dehumidificationBeforeDisinfection) /**/ \ marco(type, dehumidificationAfterDisinfection) /**/ \ marco(type, emptyLiquidFromTheLine) /**/ \ - marco(type, finished) /**/ \ - marco(type, error) /**/ + marco(type, finished) /**/ ZENUM_DECLAR(DisinfectionState, DisinfectionState_LIST); diff --git a/appsrc/appbase/appevent/app_disinfection_snapshot_event.hpp b/appsrc/appbase/appevent/app_disinfection_snapshot_event.hpp index bb67d4c..70bf877 100644 --- a/appsrc/appbase/appevent/app_disinfection_snapshot_event.hpp +++ b/appsrc/appbase/appevent/app_disinfection_snapshot_event.hpp @@ -22,6 +22,9 @@ class DisinfectionStateSnapshot { int remainDisinfectant = 0; int remainTime = 0; int ecode = 0; + + bool isDisinfectionTakeBreak = false; + int inJectionRate = 0; }; class AppDisinfectionSnapshotEvent : public IAppEvent { diff --git a/appsrc/appsetting/project_port/basic/zappversion.hpp b/appsrc/appsetting/project_port/basic/zappversion.hpp index 10d6074..97233ea 100644 --- a/appsrc/appsetting/project_port/basic/zappversion.hpp +++ b/appsrc/appsetting/project_port/basic/zappversion.hpp @@ -1,3 +1,3 @@ #pragma once -#define VERSION "1.0.4" +#define VERSION "1.0.5" #define PROJECT_NAME "TRANSMIT_DM" \ No newline at end of file diff --git a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp index d3779d6..30f3f1c 100644 --- a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp @@ -253,12 +253,11 @@ void DisinfectionCtrlService::tryLogState(bool forceLog) { // 每隔离10秒记录一次 if (forceLog || zsteady_clock().elapsedTimeS(s_lastTakeSnapt) > 10) { s_lastTakeSnapt = zsteady_clock().now(); - logState(forceLog); - traceState(); + pushSnapshot(createSnapshot(forceLog)); } } -void DisinfectionCtrlService::logState(bool forcelog) { +shared_ptr DisinfectionCtrlService::createSnapshot(bool forceLog) { shared_ptr snapshot = make_shared(); snapshot->state = sm.getState(); snapshot->time = zsystem_clock().now(); @@ -268,32 +267,44 @@ void DisinfectionCtrlService::logState(bool forcelog) { snapshot->remainTime = s_remaintime; snapshot->remainDisinfectant = dwus->getWeight(); snapshot->h2o2Snapshot = s_h2o2Snapshot; - snapshot->ecode = s_error; - snapshot->forcelog = forcelog; - AppEventBus::ins()->push(make_shared(snapshot)); + snapshot->ecode = 0; + snapshot->forcelog = forceLog; + snapshot->isDisinfectionTakeBreak = s_isDisinfectionTakeBreak; + snapshot->inJectionRate = getSettingAsInt(SettingId::injection_pump_speed); + return snapshot; +} +shared_ptr DisinfectionCtrlService::createErrorSnapshot(int32_t errorcode) { + auto ss = createSnapshot(true); + ss->ecode = errorcode; + return ss; } -void DisinfectionCtrlService::traceState() { - string tracecontent; - tracecontent += fmt::format("TRACE [{}] ", string(sm.getState())); - tracecontent += fmt::format("e:{} ", s_error); - if (s_h2o2Snapshot->getSensorDataNum() == 1) +void DisinfectionCtrlService::pushSnapshot(shared_ptr ss) { + auto h2o2s = ss->h2o2Snapshot; + + string tracecontent; + tracecontent += fmt::format("TRACE [{}] ", string(ss->state)); + tracecontent += fmt::format("e:{} ", ss->ecode); + if (h2o2s->getSensorDataNum() == 1) tracecontent += fmt::format("s0:[ho2o2 {:>3} rs {:>3} rh {:>3}]", // - s_h2o2Snapshot->h2o2[0], s_h2o2Snapshot->rs[0], s_h2o2Snapshot->rh[0]); - if (s_h2o2Snapshot->getSensorDataNum() == 2) + h2o2s->h2o2[0], h2o2s->rs[0], h2o2s->rh[0]); + if (h2o2s->getSensorDataNum() == 2) tracecontent += fmt::format("s1:[ho2o2 ({:>3} {:>3}) rs ({:>3} {:>3}) rh ({:>3} {:>3})]", // - s_h2o2Snapshot->h2o2[0], s_h2o2Snapshot->h2o2[1], s_h2o2Snapshot->rs[0], s_h2o2Snapshot->rs[1], s_h2o2Snapshot->rh[0], s_h2o2Snapshot->rh[1]); - if (s_h2o2Snapshot->getSensorDataNum() == 3) - tracecontent += fmt::format("s2:[ho2o2 ({:>3} {:>3} {:>3}) rs ({:>3} {:>3} {:>3}) rh ({:>3} {:>3} {:>3})]", s_h2o2Snapshot->h2o2[0], s_h2o2Snapshot->h2o2[1], s_h2o2Snapshot->h2o2[2], s_h2o2Snapshot->rs[0], - s_h2o2Snapshot->rs[1], s_h2o2Snapshot->rs[2], s_h2o2Snapshot->rh[0], s_h2o2Snapshot->rh[1], s_h2o2Snapshot->rh[2]); - - tracecontent += fmt::format("dvalue:{} ", s_dvalue); - tracecontent += fmt::format("log:{:.2f}->{:.2f} ", s_nlog, m_tlog); - tracecontent += fmt::format("break:{} ", s_isDisinfectionTakeBreak); - tracecontent += fmt::format("rtime:({}h:{}m:{}s) ", s_remaintime / 3600, (s_remaintime % 3600) / 60, s_remaintime % 60); + h2o2s->h2o2[0], h2o2s->h2o2[1], h2o2s->rs[0], h2o2s->rs[1], h2o2s->rh[0], h2o2s->rh[1]); + if (h2o2s->getSensorDataNum() == 3) + tracecontent += fmt::format("s2:[ho2o2 ({:>3} {:>3} {:>3}) rs ({:>3} {:>3} {:>3}) rh ({:>3} {:>3} {:>3})]", h2o2s->h2o2[0], h2o2s->h2o2[1], h2o2s->h2o2[2], h2o2s->rs[0], h2o2s->rs[1], h2o2s->rs[2], h2o2s->rh[0], + h2o2s->rh[1], h2o2s->rh[2]); + + tracecontent += fmt::format("dvalue:{} ", ss->dval); + tracecontent += fmt::format("log:{:.2f}->{:.2f} ", ss->nlog, m_tlog); + tracecontent += fmt::format("break:{} ", ss->isDisinfectionTakeBreak); + tracecontent += fmt::format("rtime:({}h:{}m:{}s) ", ss->remainTime / 3600, (ss->remainTime % 3600) / 60, ss->remainTime % 60); tracecontent += fmt::format("hTemp:{:.2f} ", dics->Heater_readTemperature()); - logger->info(tracecontent); + AppEventBus::ins()->push(make_shared(ss)); + if (ss->ecode != 0) { + AppEventBus::ins()->push(make_shared(ss->ecode)); + } } /******************************************************************************* @@ -404,7 +415,6 @@ void DisinfectionCtrlService::processStateInit(DisinfectionEvent* event) { s_start_steady_tp = zsteady_clock().now(); s_afterDisinfectantVolume_g = 0; s_beforeDisinfectantVolume_g = dwus->getWeight(); - s_error = 0; AppEventBus::ins()->push(make_shared(s_sessionId)); GET_SERVICE(WarningLightControler)->setworkFlag(true); @@ -513,7 +523,8 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) s_lastComputeDvalueTp = zsteady_clock().now(); s_nlog = computeNextLogLevel(s_nlog, s_dvalue); updateRemainTime(s_dvalue, s_nlog, m_tlog, s_remaintime); - traceState(); + // traceState(); + tryLogState(true); } s_remaintime--; @@ -525,7 +536,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) dics->SprayPump_stop(); dics->AC_close(); s_isDisinfectionTakeBreak = true; - traceState(); + tryLogState(true); } } else { if (isTimeToResumeDisinfection()) { @@ -533,7 +544,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) dics->SprayPump_start(getSettingAsInt(SettingId::injection_pump_speed)); dics->AC_ctrl(1); s_isDisinfectionTakeBreak = false; - traceState(); + tryLogState(true); } } @@ -546,14 +557,14 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) if (dics->WaterSensor_readDeviceBottom()) { logger->error("kappe_the_bottom_of_the_device_has_water"); - s_error = err::kappe_the_bottom_of_the_device_has_water; - sm.changeState(DisinfectionState::error); + pushSnapshot(createErrorSnapshot(err::kappe_the_bottom_of_the_device_has_water)); + sm.changeState(DisinfectionState::finished); } if (dics->WaterSensor_readEvaporationBin()) { logger->error("kappe_the_evaporation_bin_has_water"); - s_error = err::kappe_the_evaporation_bin_has_water; - sm.changeState(DisinfectionState::error); + pushSnapshot(createErrorSnapshot(err::kappe_the_evaporation_bin_has_water)); + sm.changeState(DisinfectionState::finished); } // AppEventBus @@ -561,6 +572,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) if (dwus->getWeight() < 10) { logger->error("DisinfectantBucket is empty"); AppEventBus::ins()->push(make_shared(err::kappe_disinfectant_insufficient)); + pushSnapshot(createErrorSnapshot(err::kappe_disinfectant_insufficient)); changeToNextState(); } } @@ -681,11 +693,5 @@ void DisinfectionCtrlService::processStateFinished(DisinfectionEvent* event) { } } } -void DisinfectionCtrlService::processStateError(DisinfectionEvent* event) { - if (event->event == kevent_enter_state) { - tryLogState(true); - logger->error("error state {}", s_error); - AppEventBus::ins()->push(make_shared(s_error)); - sm.changeState(DisinfectionState::finished); - } -} + +// AppEventBus::ins()->push(make_shared(s_error)); diff --git a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp index 01a8261..5476119 100644 --- a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp @@ -58,7 +58,6 @@ class DisinfectionCtrlService : public enable_shared_from_this createSnapshot(bool forceLog); + shared_ptr createErrorSnapshot(int32_t errorcode); + + void pushSnapshot(shared_ptr snapshot); }; } // namespace iflytop diff --git a/appsrc/service/disinfection_logs_service.cpp b/appsrc/service/disinfection_logs_service.cpp index 8143432..55655a2 100644 --- a/appsrc/service/disinfection_logs_service.cpp +++ b/appsrc/service/disinfection_logs_service.cpp @@ -66,6 +66,15 @@ static string format_zsystem_tp(zsystem_tp tp) { tm.tm_min); } +static string format_simple_zsystem_tp(zsystem_tp tp) { + time_t time = system_clock().to_time_t(tp); + struct tm tm = {0}; + localtime_r(&time, &tm); + return fmt::format("{:0>2}:{:0>2}", + tm.tm_hour, // + tm.tm_min); +} + static void listDirCSVFile(string path, vector& sv) { sv.clear(); /** @@ -182,6 +191,7 @@ void DisinfectionLogsService::initialize() { m_csvHeaderDict.insert(CSVHeader::tlog, "目标LOG"); m_csvHeaderDict.insert(CSVHeader::remaindisinfectant, "消毒剂剩余量(g)"); m_csvHeaderDict.insert(CSVHeader::reamintime, "预计剩余时间"); + m_csvHeaderDict.insert(CSVHeader::injectionRate, "注液速率"); m_dmStateDict.insert(DisinfectionState::idle, "空闲"); m_dmStateDict.insert(DisinfectionState::init, "初始化"); @@ -192,7 +202,6 @@ void DisinfectionLogsService::initialize() { m_dmStateDict.insert(DisinfectionState::dehumidificationAfterDisinfection, "消毒后除湿"); m_dmStateDict.insert(DisinfectionState::emptyLiquidFromTheLine, "清空管路"); m_dmStateDict.insert(DisinfectionState::finished, "消毒结束"); - m_dmStateDict.insert(DisinfectionState::error, "错误"); // TODO: 检查指令iconv是否可用 @@ -274,6 +283,30 @@ void DisinfectionLogsService::dumpDisinfectionRecord(string sessionId, listinfo("DisinfectionLogsService: dumpDisinfectionRecord, sessionId: {}, min period: {}s", sessionId, logdtime); + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::time), ""); + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::state), ""); + if (PORT.getExtH2O2SensorNum() >= 0) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::ho2o2_0), ""); + if (PORT.getExtH2O2SensorNum() >= 1) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::ho2o2_1), ""); + if (PORT.getExtH2O2SensorNum() >= 2) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::ho2o2_2), ""); + if (PORT.getExtH2O2SensorNum() >= 0) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::temp_0), ""); + if (PORT.getExtH2O2SensorNum() >= 1) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::temp_1), ""); + if (PORT.getExtH2O2SensorNum() >= 2) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::temp_2), ""); + if (PORT.getExtH2O2SensorNum() >= 0) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::rh_0), ""); + if (PORT.getExtH2O2SensorNum() >= 1) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::rh_1), ""); + if (PORT.getExtH2O2SensorNum() >= 2) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::rh_2), ""); + if (PORT.getExtH2O2SensorNum() >= 0) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::rs_0), ""); + if (PORT.getExtH2O2SensorNum() >= 1) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::rs_1), ""); + if (PORT.getExtH2O2SensorNum() >= 2) csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::rs_2), ""); + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::dval), ""); + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::nlog), ""); + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::tlog), ""); + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::injectionRate), ""); + if (ProjectPort::ins().projectTypeInt != kdraw_bar_disinfection_box) { + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::remaindisinfectant), ""); + } + csv.addValue(0, m_csvHeaderDict.getChName(CSVHeader::reamintime), ""); + + int lineNum = 1; for (auto& s : snapshots) { bool logthis = false; @@ -288,45 +321,52 @@ void DisinfectionLogsService::dumpDisinfectionRecord(string sessionId, liststate; lastlogtime = s->time; - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::time), /******************/ tu_sys::fmt(s->time, "%Y-%m-%d %H:%M:%S")); - if (s->state == DisinfectionState::error) { - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::state), /*****************/ m_dmStateDict.getChName(s->state) + ":" + ecode2str(s->ecode)); - } else { - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::state), /*****************/ m_dmStateDict.getChName(s->state)); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::time), /******************/ tu_sys::fmt(s->time, "%Y-%m-%d %H:%M:%S")); + + if (s->ecode != 0) { + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::state), /*****************/ ecode2str(s->ecode)); + lineNum++; + continue; } + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::state), /*****************/ m_dmStateDict.getChName(s->state)); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::injectionRate), /*****************/ s->isDisinfectionTakeBreak ? "0" : fmt::format("{}", s->inJectionRate)); + + // injectionRate = s->injectionRate; + // injectionRate auto h2o2data = s->h2o2Snapshot; for (int i = 0; i < h2o2data->getSensorDataNum(); i++) { if (i == 0) { - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::ho2o2_0), /***************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->h2o2[0])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::temp_0), /****************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->temp[0])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::rh_0), /******************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rh[0])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::rs_0), /******************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rs[0])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::ho2o2_0), /***************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->h2o2[0])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::temp_0), /****************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->temp[0])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::rh_0), /******************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rh[0])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::rs_0), /******************/ h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rs[0])); } if (i == 1) { - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::ho2o2_1), /***************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->h2o2[1])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::temp_1), /****************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->temp[1])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::rh_1), /******************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->rh[1])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::rs_1), /******************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->rs[1])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::ho2o2_1), /***************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->h2o2[1])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::temp_1), /****************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->temp[1])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::rh_1), /******************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->rh[1])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::rs_1), /******************/ h2o2data->isExpired[1] ? "N/A" : formatSensorVal(h2o2data->rs[1])); } if (i == 2) { - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::ho2o2_2), /***************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->h2o2[2])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::temp_2), /****************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->temp[2])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::rh_2), /******************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->rh[2])); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::rs_2), /******************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->rs[2])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::ho2o2_2), /***************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->h2o2[2])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::temp_2), /****************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->temp[2])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::rh_2), /******************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->rh[2])); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::rs_2), /******************/ h2o2data->isExpired[2] ? "N/A" : formatSensorVal(h2o2data->rs[2])); } } - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::dval), /******************/ fmt::format("{}", s->dval)); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::nlog), /******************/ fmt::format("{}", s->nlog)); - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::tlog), /******************/ fmt::format("{}", s->tlog)); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::dval), /******************/ fmt::format("{}", s->dval)); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::nlog), /******************/ fmt::format("{}", s->nlog)); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::tlog), /******************/ fmt::format("{}", s->tlog)); // 拉杆箱消毒机没有消毒剂剩余量 if (ProjectPort::ins().projectTypeInt != kdraw_bar_disinfection_box) { - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::remaindisinfectant), /****/ fmt::format("{}", s->remainDisinfectant)); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::remaindisinfectant), /****/ fmt::format("{}", s->remainDisinfectant)); } - csv.addValue(m_csvHeaderDict.getChName(CSVHeader::reamintime), /************/ fmt::format("{}", formattimeS(s->remainTime))); + csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::reamintime), /************/ fmt::format("{}", formattimeS(s->remainTime))); + lineNum++; } system(fmt::format("mkdir -p {}", LOG_STORGE_PATH).c_str()); @@ -380,43 +420,31 @@ void DisinfectionLogsService::dumpDisinfectionToPrinterLog(string sessionId, lis first = false; lastlogtime = snapshot->time; - if (state == DisinfectionState::disinfection) { + if (snapshot->ecode != 0) { content += fmt::format("{}\n", format_zsystem_tp(snapshot->time)); - if (stateChanged) content += fmt::format("{}\n", m_dmStateDict.getChName(snapshot->state)); + content += fmt::format("错误: {}\n", ecode2str(snapshot->ecode)); + continue; + } - if (snapshot->nlog > snapshot->tlog) { - content += fmt::format("LOG: {:.2f}\n", snapshot->tlog); - } else { - content += fmt::format("LOG: {:.2f}\n", snapshot->nlog); + if (stateChanged) { + content += fmt::format("{}\n", format_zsystem_tp(snapshot->time)); + content += fmt::format("{}...\n", m_dmStateDict.getChName(snapshot->state)); + if (state == DisinfectionState::disinfection) { + content += fmt::format("时间 H2O2(ppm) RS(%) RH(%) LOG \n"); } + continue; + } - auto h2o2data = snapshot->h2o2Snapshot; + if (state == DisinfectionState::disinfection) { + float nlog = nlog < snapshot->tlog ? nlog : snapshot->nlog; + auto h2o2data = snapshot->h2o2Snapshot; for (int i = 0; i < h2o2data->getSensorDataNum(); i++) { if (i == 0) { - content += fmt::format(" [S0] {}(ppm) {}(%RS) {}(%RH) \n", h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->h2o2[0]), // - h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rs[0]), // - h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rh[0])); + content += fmt::format("{} {:>6} {:>4} {:>4} {:>2.2f} \n", format_simple_zsystem_tp(snapshot->time), // + h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->h2o2[0]), // + h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rs[0]), // + h2o2data->isExpired[0] ? "N/A" : formatSensorVal(h2o2data->rh[0]), nlog); } - if (i == 1 && !h2o2data->isExpired[1]) { - content += fmt::format(" [S1] {}(ppm) {}(%RS) {}(%RH) \n", formatSensorVal(h2o2data->h2o2[1]), // - formatSensorVal(h2o2data->rs[1]), // - formatSensorVal(h2o2data->rh[1])); - } - if (i == 2 && !h2o2data->isExpired[2]) { - content += fmt::format(" [S2] {}(ppm) {}(%RS) {}(%RH) \n", formatSensorVal(h2o2data->h2o2[2]), // - formatSensorVal(h2o2data->rs[2]), // - formatSensorVal(h2o2data->rh[2])); - } - } - } else if (state == DisinfectionState::error) { - content += fmt::format("{}\n", format_zsystem_tp(snapshot->time)); - content += fmt::format("{}\n", m_dmStateDict.getChName(snapshot->state)); - content += fmt::format(" 错误:{}\n", ecode2str(snapshot->ecode)); - - } else { - if (stateChanged) { - content += fmt::format("{}\n", format_zsystem_tp(snapshot->time)); - content += fmt::format("{}\n", m_dmStateDict.getChName(snapshot->state)); } } } @@ -621,7 +649,7 @@ void DisinfectionLogsService::selftest(shared_ptr cxt) { onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::dehumidificationBeforeDisinfection, sensorNum, false)); onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::dehumidificationAfterDisinfection, sensorNum, false)); onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::emptyLiquidFromTheLine, sensorNum, false)); - auto esnap = selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::error, sensorNum, false); + auto esnap = selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::disinfection, sensorNum, false); esnap->ecode = err::kappe_the_bottom_of_the_device_has_water; onAppDisinfectionSnapshotEvent(esnap); onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::finished, sensorNum, false));