Browse Source

修改消毒日志显示效果

storage-in-realtime
zhaohe 11 months ago
parent
commit
0262c74cf5
  1. 30
      appdep/iflytop/core/components/zcsv/zcsv.cpp
  2. 3
      appdep/iflytop/core/components/zcsv/zcsv.hpp
  3. 1
      appsrc/appbase/appbean/disinfection_record_csv_header.hpp
  4. 3
      appsrc/appbase/appbean/disinfection_state.hpp
  5. 3
      appsrc/appbase/appevent/app_disinfection_snapshot_event.hpp
  6. 2
      appsrc/appsetting/project_port/basic/zappversion.hpp
  7. 84
      appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp
  8. 9
      appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp
  9. 136
      appsrc/service/disinfection_logs_service.cpp

30
appdep/iflytop/core/components/zcsv/zcsv.cpp

@ -137,7 +137,7 @@ void ZCSV::dumpCSV(string filename) {
file << endl; file << endl;
} }
} }
#if 0
void ZCSV::addValue(string key, string value) { void ZCSV::addValue(string key, string value) {
// printf("addValue key=%s value=%s\n", key.c_str(), value.c_str()); // printf("addValue key=%s value=%s\n", key.c_str(), value.c_str());
// 查找0行的key是否存在 // 查找0行的key是否存在
@ -163,7 +163,7 @@ void ZCSV::addValue(string key, string value) {
for (int i = 0; i <= m_maxRowNum; i++) { for (int i = 0; i <= m_maxRowNum; i++) {
ZCSVCell* cell = findCell(i, keyColNum); ZCSVCell* cell = findCell(i, keyColNum);
if (cell == NULL) { if (cell == NULL) {
lastRowNum = i-1;
lastRowNum = i - 1;
break; break;
} }
} }
@ -175,3 +175,29 @@ void ZCSV::addValue(string key, string value) {
setdata(keyColNum, lastRowNum + 1, 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);
}

3
appdep/iflytop/core/components/zcsv/zcsv.hpp

@ -32,7 +32,8 @@ class ZCSV {
bool parseCSV(string filename); 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, string data);
void setdata(int colNum, int rowNum, const char* fmt, ...); void setdata(int colNum, int rowNum, const char* fmt, ...);

1
appsrc/appbase/appbean/disinfection_record_csv_header.hpp

@ -20,6 +20,7 @@
marco(type, dval) /**/ \ marco(type, dval) /**/ \
marco(type, nlog) /**/ \ marco(type, nlog) /**/ \
marco(type, tlog) /**/ \ marco(type, tlog) /**/ \
marco(type, injectionRate) /**/ \
marco(type, remaindisinfectant) /**/ \ marco(type, remaindisinfectant) /**/ \
marco(type, reamintime) /**/ marco(type, reamintime) /**/

3
appsrc/appbase/appbean/disinfection_state.hpp

@ -12,7 +12,6 @@
marco(type, dehumidificationBeforeDisinfection) /**/ \ marco(type, dehumidificationBeforeDisinfection) /**/ \
marco(type, dehumidificationAfterDisinfection) /**/ \ marco(type, dehumidificationAfterDisinfection) /**/ \
marco(type, emptyLiquidFromTheLine) /**/ \ marco(type, emptyLiquidFromTheLine) /**/ \
marco(type, finished) /**/ \
marco(type, error) /**/
marco(type, finished) /**/
ZENUM_DECLAR(DisinfectionState, DisinfectionState_LIST); ZENUM_DECLAR(DisinfectionState, DisinfectionState_LIST);

3
appsrc/appbase/appevent/app_disinfection_snapshot_event.hpp

@ -22,6 +22,9 @@ class DisinfectionStateSnapshot {
int remainDisinfectant = 0; int remainDisinfectant = 0;
int remainTime = 0; int remainTime = 0;
int ecode = 0; int ecode = 0;
bool isDisinfectionTakeBreak = false;
int inJectionRate = 0;
}; };
class AppDisinfectionSnapshotEvent : public IAppEvent { class AppDisinfectionSnapshotEvent : public IAppEvent {

2
appsrc/appsetting/project_port/basic/zappversion.hpp

@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION "1.0.4"
#define VERSION "1.0.5"
#define PROJECT_NAME "TRANSMIT_DM" #define PROJECT_NAME "TRANSMIT_DM"

84
appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp

@ -253,12 +253,11 @@ void DisinfectionCtrlService::tryLogState(bool forceLog) {
// 每隔离10秒记录一次 // 每隔离10秒记录一次
if (forceLog || zsteady_clock().elapsedTimeS(s_lastTakeSnapt) > 10) { if (forceLog || zsteady_clock().elapsedTimeS(s_lastTakeSnapt) > 10) {
s_lastTakeSnapt = zsteady_clock().now(); s_lastTakeSnapt = zsteady_clock().now();
logState(forceLog);
traceState();
pushSnapshot(createSnapshot(forceLog));
} }
} }
void DisinfectionCtrlService::logState(bool forcelog) {
shared_ptr<DisinfectionStateSnapshot> DisinfectionCtrlService::createSnapshot(bool forceLog) {
shared_ptr<DisinfectionStateSnapshot> snapshot = make_shared<DisinfectionStateSnapshot>(); shared_ptr<DisinfectionStateSnapshot> snapshot = make_shared<DisinfectionStateSnapshot>();
snapshot->state = sm.getState(); snapshot->state = sm.getState();
snapshot->time = zsystem_clock().now(); snapshot->time = zsystem_clock().now();
@ -268,32 +267,44 @@ void DisinfectionCtrlService::logState(bool forcelog) {
snapshot->remainTime = s_remaintime; snapshot->remainTime = s_remaintime;
snapshot->remainDisinfectant = dwus->getWeight(); snapshot->remainDisinfectant = dwus->getWeight();
snapshot->h2o2Snapshot = s_h2o2Snapshot; snapshot->h2o2Snapshot = s_h2o2Snapshot;
snapshot->ecode = s_error;
snapshot->forcelog = forcelog;
AppEventBus::ins()->push(make_shared<AppDisinfectionSnapshotEvent>(snapshot));
snapshot->ecode = 0;
snapshot->forcelog = forceLog;
snapshot->isDisinfectionTakeBreak = s_isDisinfectionTakeBreak;
snapshot->inJectionRate = getSettingAsInt(SettingId::injection_pump_speed);
return snapshot;
}
shared_ptr<DisinfectionStateSnapshot> 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<DisinfectionStateSnapshot> 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}]", // 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})]", // 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()); tracecontent += fmt::format("hTemp:{:.2f} ", dics->Heater_readTemperature());
logger->info(tracecontent); logger->info(tracecontent);
AppEventBus::ins()->push(make_shared<AppDisinfectionSnapshotEvent>(ss));
if (ss->ecode != 0) {
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(ss->ecode));
}
} }
/******************************************************************************* /*******************************************************************************
@ -404,7 +415,6 @@ void DisinfectionCtrlService::processStateInit(DisinfectionEvent* event) {
s_start_steady_tp = zsteady_clock().now(); s_start_steady_tp = zsteady_clock().now();
s_afterDisinfectantVolume_g = 0; s_afterDisinfectantVolume_g = 0;
s_beforeDisinfectantVolume_g = dwus->getWeight(); s_beforeDisinfectantVolume_g = dwus->getWeight();
s_error = 0;
AppEventBus::ins()->push(make_shared<AppDisinfectionStartEvent>(s_sessionId)); AppEventBus::ins()->push(make_shared<AppDisinfectionStartEvent>(s_sessionId));
GET_SERVICE(WarningLightControler)->setworkFlag(true); GET_SERVICE(WarningLightControler)->setworkFlag(true);
@ -513,7 +523,8 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event)
s_lastComputeDvalueTp = zsteady_clock().now(); s_lastComputeDvalueTp = zsteady_clock().now();
s_nlog = computeNextLogLevel(s_nlog, s_dvalue); s_nlog = computeNextLogLevel(s_nlog, s_dvalue);
updateRemainTime(s_dvalue, s_nlog, m_tlog, s_remaintime); updateRemainTime(s_dvalue, s_nlog, m_tlog, s_remaintime);
traceState();
// traceState();
tryLogState(true);
} }
s_remaintime--; s_remaintime--;
@ -525,7 +536,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event)
dics->SprayPump_stop(); dics->SprayPump_stop();
dics->AC_close(); dics->AC_close();
s_isDisinfectionTakeBreak = true; s_isDisinfectionTakeBreak = true;
traceState();
tryLogState(true);
} }
} else { } else {
if (isTimeToResumeDisinfection()) { if (isTimeToResumeDisinfection()) {
@ -533,7 +544,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event)
dics->SprayPump_start(getSettingAsInt(SettingId::injection_pump_speed)); dics->SprayPump_start(getSettingAsInt(SettingId::injection_pump_speed));
dics->AC_ctrl(1); dics->AC_ctrl(1);
s_isDisinfectionTakeBreak = false; s_isDisinfectionTakeBreak = false;
traceState();
tryLogState(true);
} }
} }
@ -546,14 +557,14 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event)
if (dics->WaterSensor_readDeviceBottom()) { if (dics->WaterSensor_readDeviceBottom()) {
logger->error("kappe_the_bottom_of_the_device_has_water"); 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()) { if (dics->WaterSensor_readEvaporationBin()) {
logger->error("kappe_the_evaporation_bin_has_water"); 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 // AppEventBus
@ -561,6 +572,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event)
if (dwus->getWeight() < 10) { if (dwus->getWeight() < 10) {
logger->error("DisinfectantBucket is empty"); logger->error("DisinfectantBucket is empty");
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_disinfectant_insufficient)); AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_disinfectant_insufficient));
pushSnapshot(createErrorSnapshot(err::kappe_disinfectant_insufficient));
changeToNextState(); 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<AppWarningPromoptEvent>(s_error));
sm.changeState(DisinfectionState::finished);
}
}
// AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(s_error));

9
appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp

@ -58,7 +58,6 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
float s_nlog = {}; float s_nlog = {};
int s_beforeDisinfectantVolume_g = {}; // 消毒前消毒剂量 int s_beforeDisinfectantVolume_g = {}; // 消毒前消毒剂量
int s_afterDisinfectantVolume_g = {}; // 消毒后消毒剂量 int s_afterDisinfectantVolume_g = {}; // 消毒后消毒剂量
int s_error = 0;
public: public:
void initialize(); void initialize();
@ -104,14 +103,16 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
void processStateDehumidificationBeforeDisinfection(DisinfectionEvent* event); void processStateDehumidificationBeforeDisinfection(DisinfectionEvent* event);
void processStateDehumidificationAfterDisinfection(DisinfectionEvent* event); void processStateDehumidificationAfterDisinfection(DisinfectionEvent* event);
void processStateEmpytLiquidFromTheLine(DisinfectionEvent* event); void processStateEmpytLiquidFromTheLine(DisinfectionEvent* event);
void processStateError(DisinfectionEvent* event);
void changeToNextState(); void changeToNextState();
private: private:
void tryLogState(bool forceLog); void tryLogState(bool forceLog);
void logState(bool forcelog);
void traceState();
shared_ptr<DisinfectionStateSnapshot> createSnapshot(bool forceLog);
shared_ptr<DisinfectionStateSnapshot> createErrorSnapshot(int32_t errorcode);
void pushSnapshot(shared_ptr<DisinfectionStateSnapshot> snapshot);
}; };
} // namespace iflytop } // namespace iflytop

136
appsrc/service/disinfection_logs_service.cpp

@ -66,6 +66,15 @@ static string format_zsystem_tp(zsystem_tp tp) {
tm.tm_min); 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<string>& sv) { static void listDirCSVFile(string path, vector<string>& sv) {
sv.clear(); sv.clear();
/** /**
@ -182,6 +191,7 @@ void DisinfectionLogsService::initialize() {
m_csvHeaderDict.insert(CSVHeader::tlog, "目标LOG"); m_csvHeaderDict.insert(CSVHeader::tlog, "目标LOG");
m_csvHeaderDict.insert(CSVHeader::remaindisinfectant, "消毒剂剩余量(g)"); m_csvHeaderDict.insert(CSVHeader::remaindisinfectant, "消毒剂剩余量(g)");
m_csvHeaderDict.insert(CSVHeader::reamintime, "预计剩余时间"); m_csvHeaderDict.insert(CSVHeader::reamintime, "预计剩余时间");
m_csvHeaderDict.insert(CSVHeader::injectionRate, "注液速率");
m_dmStateDict.insert(DisinfectionState::idle, "空闲"); m_dmStateDict.insert(DisinfectionState::idle, "空闲");
m_dmStateDict.insert(DisinfectionState::init, "初始化"); m_dmStateDict.insert(DisinfectionState::init, "初始化");
@ -192,7 +202,6 @@ void DisinfectionLogsService::initialize() {
m_dmStateDict.insert(DisinfectionState::dehumidificationAfterDisinfection, "消毒后除湿"); m_dmStateDict.insert(DisinfectionState::dehumidificationAfterDisinfection, "消毒后除湿");
m_dmStateDict.insert(DisinfectionState::emptyLiquidFromTheLine, "清空管路"); m_dmStateDict.insert(DisinfectionState::emptyLiquidFromTheLine, "清空管路");
m_dmStateDict.insert(DisinfectionState::finished, "消毒结束"); m_dmStateDict.insert(DisinfectionState::finished, "消毒结束");
m_dmStateDict.insert(DisinfectionState::error, "错误");
// TODO: 检查指令iconv是否可用 // TODO: 检查指令iconv是否可用
@ -274,6 +283,30 @@ void DisinfectionLogsService::dumpDisinfectionRecord(string sessionId, list<shar
logger->info("DisinfectionLogsService: dumpDisinfectionRecord, sessionId: {}, min period: {}s", sessionId, logdtime); logger->info("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) { for (auto& s : snapshots) {
bool logthis = false; bool logthis = false;
@ -288,45 +321,52 @@ void DisinfectionLogsService::dumpDisinfectionRecord(string sessionId, list<shar
state = s->state; state = s->state;
lastlogtime = s->time; 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; auto h2o2data = s->h2o2Snapshot;
for (int i = 0; i < h2o2data->getSensorDataNum(); i++) { for (int i = 0; i < h2o2data->getSensorDataNum(); i++) {
if (i == 0) { 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) { 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) { 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) { 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()); system(fmt::format("mkdir -p {}", LOG_STORGE_PATH).c_str());
@ -380,43 +420,31 @@ void DisinfectionLogsService::dumpDisinfectionToPrinterLog(string sessionId, lis
first = false; first = false;
lastlogtime = snapshot->time; lastlogtime = snapshot->time;
if (state == DisinfectionState::disinfection) {
if (snapshot->ecode != 0) {
content += fmt::format("{}\n", format_zsystem_tp(snapshot->time)); 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++) { for (int i = 0; i < h2o2data->getSensorDataNum(); i++) {
if (i == 0) { 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<MsgProcessContext> cxt) {
onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::dehumidificationBeforeDisinfection, sensorNum, false)); 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::dehumidificationAfterDisinfection, sensorNum, false));
onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::emptyLiquidFromTheLine, 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; esnap->ecode = err::kappe_the_bottom_of_the_device_has_water;
onAppDisinfectionSnapshotEvent(esnap); onAppDisinfectionSnapshotEvent(esnap);
onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::finished, sensorNum, false)); onAppDisinfectionSnapshotEvent(selftest_createFakeSnapshot(time_point_increment(now, 10), DisinfectionState::finished, sensorNum, false));

Loading…
Cancel
Save