|
|
//
// Created by zwsd
//
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <mutex>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "db/db_service.hpp"
#include "disinfection_logs_manager.hpp"
#include "disinfection_state.hpp"
#include "iflytop/components/zcanreceiver/zcanhost.hpp"
#include "iflytop/core/core.hpp"
#include "service/device_io_control_service.hpp"
#include "service/disinfection_printer_service.hpp"
#include "utils/dvalue_computer.hpp"
#include "zservice_container/zservice_container.hpp"
/**
* @brief * * service: DisinfectionCtrlService * * 监听事件: * 依赖状态: * 依赖服务: * 作用: * */
namespace iflytop { using namespace std; using namespace core; class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> { ENABLE_LOGGER(DisinfectionCtrlService);
private: recursive_mutex lock_;
unique_ptr<Thread> m_disinfectionThread; shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService; shared_ptr<DBService> m_dbService; shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager; shared_ptr<DisinfectionPrinterService> m_disinfectionPrinterService; DValueComputer m_dvalueComputer;
int m_disinfectionWorkState = 0; int m_replenishingFluidsWorkState = 0; int m_drainingWorkState = 0; // 消毒工作状态,0:未工作,1:工作中
public: DisinfectionContext m_context;
public: DisinfectionCtrlService();
public: void initialize(); /**
* @brief 开始消毒 * * @param loglevel 消毒等级 */
void startDisinfection(int loglevel, //
int injection_pump_speed, //
int stoped_gs, //
int continued_gs, //
int stoped_satur, //
int continued_satur, //
int stoped_humi, //
int continued_humi //
); void changeDisinfectionParameter(int injection_pump_speed, //
int stoped_gs, //
int continued_gs, //
int stoped_satur, //
int continued_satur, //
int stoped_humi, //
int continued_humi //
);
void stopDisinfection();
int getDisinfectionWorkState(); int getReplenishingFluidsWorkState(); int getDrainingWorkState();
/*******************************************************************************
* 加液 * *******************************************************************************/ void startReplenishingFluids(int stopatg); void stopReplenishingFluids(); /*******************************************************************************
* 排液 * *******************************************************************************/ void startDraining(); void stopDraining(); /*******************************************************************************
* State * *******************************************************************************/ bool isDisinfectionRunning(); int32_t getEstimatedRemainingTimeS(); string getDisinfectionID(); bool isPreheatState(); int32_t getPreHeatRaminTimeS();
private: string createDisinfectionID();
private: float getDisinfectionDValue(float ppm);
void initContext(DisinfectionContext& context, //
int loglevel, //
float injection_pump_speed, //
float stoped_gs, //
float continued_gs, //
float stoped_satur, //
float continued_satur, //
float stoped_humi, //
float continued_humi //
);
void computeRemainTime(DisinfectionContext& context); float computeNowLogLevel(DisinfectionContext& context); void processPreheatState(DisinfectionContext& context); void processDisinfectionState(DisinfectionContext& context); void finishDisinfection(DisinfectionContext& context);
void disinfectionLoop(bool& breakflag);
void processState_Preheat(DisinfectionContext& context); void processState_Disinfection(DisinfectionContext& context, bool& updatedval); void processState_Degradation(DisinfectionContext& context);
private: shared_ptr<DisinfectionLogger> createCSVLogger(string log_file_name); void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
void pushDisinfectionPrinterTask(DisinfectionContext& context);
void log(DisinfectionContext& context); void takeStateSnapshot(DisinfectionContext& context); void updateH2O2SensorData(DisinfectionContext& context); }; } // namespace iflytop
|