diff --git a/README.md b/README.md index 16a9a28..7648b76 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,9 @@ VERSION 1.2.1 VERSION 1.2.2 1. 添加设备异常检测服务 2. 去掉Prompt概念,直接将AppEvent透传给前端 + +VERSION 1.2.3 + 1. 所有应用服务添加状态主动上报接口 TODO: 1.添加用户增加用户查重检查 diff --git a/appsrc/appsetting/project_port/basic/zappversion.hpp b/appsrc/appsetting/project_port/basic/zappversion.hpp index e5ba8b2..719c593 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.2.2" +#define VERSION "1.2.3" #define PROJECT_NAME "TRANSMIT_DM" \ No newline at end of file diff --git a/appsrc/service/app/add_liquid_service.cpp b/appsrc/service/app/add_liquid_service.cpp index a69db3c..a5ff94d 100644 --- a/appsrc/service/app/add_liquid_service.cpp +++ b/appsrc/service/app/add_liquid_service.cpp @@ -18,6 +18,8 @@ void AddLiquidService::initialize() { REG_EXTFN_VOID(stop, void()); REG_EXTFN_VOID(getState, void()); REG_EXTFN_VOID(getServiceConfig, void()); + REG_EXTFN_VOID(startStateReport, void()); + REG_EXTFN_VOID(stopStateReport, void()); } void AddLiquidService::start(int stopatg) { @@ -30,7 +32,6 @@ void AddLiquidService::start(int stopatg) { THROW_APP_EXCEPTION(getDeviceBusyReason(nowstate), ""); } - if (zsteady_clock().gets() < SENSOR_PREHEART_TIME_S) { THROW_APP_EXCEPTION(err::kappe_sensor_is_pre_hearting, ""); } @@ -143,11 +144,6 @@ AddLiquidService::state_t AddLiquidService::getWorkstate() { return m_workstate; void AddLiquidService::start(shared_ptr cxt, int stopatg) { start(stopatg); } void AddLiquidService::stop(shared_ptr cxt) { stop(); } -void AddLiquidService::getState(shared_ptr cxt) { // - cxt->rely["workState"] = state2str(getWorkstate()); - cxt->rely["workStateDisplay"] = state2chstr(getWorkstate()); - cxt->rely["nowLiquid"] = m_dwus->getWeight(); -} void AddLiquidService::getServiceConfig(shared_ptr cxt) { json cfg; cfg["maxLiquid"] = PORT.getDisinfectantBucketCapacity(); @@ -155,3 +151,36 @@ void AddLiquidService::getServiceConfig(shared_ptr cxt) { cfg["updatePeriod"] = 300; cxt->rely = cfg; } + +void AddLiquidService::getState(shared_ptr cxt) { cxt->rely = getState(); } + +void AddLiquidService::startStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } + + stateUpdateThread.reset(new Thread("stateUpdateThread", [this]() { + while (!ThisThread().getExitFlag()) { + try { + SEND_CLASS_REPORT(thisClass.className, "stateUpdate", getState()); + } catch (const std::exception& e) { + logger->error("stateUpdateThread error:{}", e.what()); + } + ThisThread().sleepForMs(500); + } + })); +} +void AddLiquidService::stopStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } +} +json AddLiquidService::getState() { + json state; + state["workState"] = state2str(getWorkstate()); + state["workStateDisplay"] = state2chstr(getWorkstate()); + state["nowLiquid"] = m_dwus->getWeightNoExpection(); + return state; +} \ No newline at end of file diff --git a/appsrc/service/app/add_liquid_service.hpp b/appsrc/service/app/add_liquid_service.hpp index ce07a52..4609f5f 100644 --- a/appsrc/service/app/add_liquid_service.hpp +++ b/appsrc/service/app/add_liquid_service.hpp @@ -63,6 +63,8 @@ class AddLiquidService : public enable_shared_from_this { unique_ptr m_thread; recursive_mutex lock_; + unique_ptr stateUpdateThread; + public: void initialize(); @@ -70,13 +72,16 @@ class AddLiquidService : public enable_shared_from_this { void stop(); state_t getWorkstate(); - void start(shared_ptr cxt,int stopatg); + void start(shared_ptr cxt, int stopatg); void stop(shared_ptr cxt); void getState(shared_ptr cxt); void getServiceConfig(shared_ptr cxt); private: void addLiquidWork(int stopatg, bool& errorflag); + void startStateReport(shared_ptr cxt); + void stopStateReport(shared_ptr cxt); + json getState(); }; } // namespace iflytop diff --git a/appsrc/service/app/air_leak_detect_test.cpp b/appsrc/service/app/air_leak_detect_test.cpp index 7c2b20f..03a1d9e 100644 --- a/appsrc/service/app/air_leak_detect_test.cpp +++ b/appsrc/service/app/air_leak_detect_test.cpp @@ -17,6 +17,8 @@ void AirLeakDetectTest::initialize() { REG_EXTFN_VOID(stop, void()); REG_EXTFN_VOID(getState, void()); REG_EXTFN_VOID(getServiceConfig, void()); + REG_EXTFN_VOID(startStateReport, void()); + REG_EXTFN_VOID(stopStateReport, void()); } void AirLeakDetectTest::start(int inflationTimeMs) { @@ -101,14 +103,7 @@ void AirLeakDetectTest::start(shared_ptr cxt, int inflationTi start(inflationTimeMs); } void AirLeakDetectTest::stop(shared_ptr cxt) { stop(); } -void AirLeakDetectTest::getState(shared_ptr cxt) { // - if (PORT.isPipeDM()) { - cxt->rely["workState"] = state2str(getWorkstate()); - cxt->rely["workStateDisplay"] = state2chstr(getWorkstate()); - cxt->rely["pressure"] = pressurePa / 1000.0; - } -} void AirLeakDetectTest::getServiceConfig(shared_ptr cxt) { if (PORT.isPipeDM()) { json cfg; @@ -119,4 +114,38 @@ void AirLeakDetectTest::getServiceConfig(shared_ptr cxt) { cfg["inflationTimeMs"] = DEFAULT_INFLATION_TIME_MS; cxt->rely = cfg; } +} + +// +void AirLeakDetectTest::getState(shared_ptr cxt) { cxt->rely = getState(); } + +void AirLeakDetectTest::startStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } + + stateUpdateThread.reset(new Thread("stateUpdateThread", [this]() { + while (!ThisThread().getExitFlag()) { + try { + SEND_CLASS_REPORT(thisClass.className, "stateUpdate", getState()); + } catch (const std::exception& e) { + logger->error("stateUpdateThread error:{}", e.what()); + } + ThisThread().sleepForMs(500); + } + })); +} +void AirLeakDetectTest::stopStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } +} +json AirLeakDetectTest::getState() { + json state; + state["pressure"] = pressurePa / 1000.0; + state["workState"] = state2str(getWorkstate()); + state["workStateDisplay"] = state2chstr(getWorkstate()); + return state; } \ No newline at end of file diff --git a/appsrc/service/app/air_leak_detect_test.hpp b/appsrc/service/app/air_leak_detect_test.hpp index d9787e5..af94697 100644 --- a/appsrc/service/app/air_leak_detect_test.hpp +++ b/appsrc/service/app/air_leak_detect_test.hpp @@ -65,6 +65,7 @@ class AirLeakDetectTest : public enable_shared_from_this { shared_ptr m_dics; unique_ptr m_thread; + unique_ptr stateUpdateThread; state_t m_workstate = kidle; float pressurePa = 0; @@ -72,7 +73,7 @@ class AirLeakDetectTest : public enable_shared_from_this { public: void initialize(); - void start( int inflationTimeMs); + void start(int inflationTimeMs); void stop(); state_t getWorkstate(); @@ -81,6 +82,10 @@ class AirLeakDetectTest : public enable_shared_from_this { void getState(shared_ptr cxt); void getServiceConfig(shared_ptr cxt); + void startStateReport(shared_ptr cxt); + void stopStateReport(shared_ptr cxt); + json getState(); + private: void airLeakDetectTestThread(int inflationTimeMs); }; diff --git a/appsrc/service/app/disinfection_ctrl_service_ext.cpp b/appsrc/service/app/disinfection_ctrl_service_ext.cpp index 8b268a5..711ef0e 100644 --- a/appsrc/service/app/disinfection_ctrl_service_ext.cpp +++ b/appsrc/service/app/disinfection_ctrl_service_ext.cpp @@ -131,9 +131,6 @@ void DisinfectionCtrlServiceExt::startStateReport(shared_ptr DisinfectionState state; json report = getState(state); SEND_CLASS_REPORT(thisClass.className, "stateUpdate", report); - if ((state) == (DisinfectionState::finished) || (state) == (DisinfectionState::idle)) { - break; - } ThisThread().sleepForMs(900); } })); diff --git a/appsrc/service/app/drain_liquid_service.cpp b/appsrc/service/app/drain_liquid_service.cpp index 07d61af..095ade6 100644 --- a/appsrc/service/app/drain_liquid_service.cpp +++ b/appsrc/service/app/drain_liquid_service.cpp @@ -15,6 +15,8 @@ void DrainLiquidService::initialize() { REG_EXTFN_VOID(stop, void()); REG_EXTFN_VOID(getState, void()); REG_EXTFN_VOID(getServiceConfig, void()); + REG_EXTFN_VOID(startStateReport, void()); + REG_EXTFN_VOID(stopStateReport, void()); } void DrainLiquidService::start() { @@ -25,7 +27,6 @@ void DrainLiquidService::start() { THROW_APP_EXCEPTION(getDeviceBusyReason(nowstate), ""); } - if (DS->getDeviceState() != DeviceState::Idle) { THROW_APP_EXCEPTION(err::kappe_state_is_busy, ""); } @@ -77,11 +78,6 @@ void DrainLiquidService::start(shared_ptr cxt) { // start(); } void DrainLiquidService::stop(shared_ptr cxt) { stop(); } -void DrainLiquidService::getState(shared_ptr cxt) { // - cxt->rely["workState"] = state2str(getWorkstate()); - cxt->rely["workStateDisplay"] = state2chstr(getWorkstate()); - cxt->rely["nowLiquid"] = m_dwus->getWeight(); -} void DrainLiquidService::getServiceConfig(shared_ptr cxt) { json cfg; @@ -130,3 +126,36 @@ void DrainLiquidService::workThread() { m_dics->AddLiquidPump_stop(); m_dics->SprayPump_stop(); } + +void DrainLiquidService::getState(shared_ptr cxt) { cxt->rely = getState(); } + +void DrainLiquidService::startStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } + + stateUpdateThread.reset(new Thread("stateUpdateThread", [this]() { + while (!ThisThread().getExitFlag()) { + try { + SEND_CLASS_REPORT(thisClass.className, "stateUpdate", getState()); + } catch (const std::exception& e) { + logger->error("stateUpdateThread error:{}", e.what()); + } + ThisThread().sleepForMs(500); + } + })); +} +void DrainLiquidService::stopStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } +} +json DrainLiquidService::getState() { + json state; + state["workState"] = state2str(getWorkstate()); + state["workStateDisplay"] = state2chstr(getWorkstate()); + state["nowLiquid"] = m_dwus->getWeightNoExpection(); + return state; +} \ No newline at end of file diff --git a/appsrc/service/app/drain_liquid_service.hpp b/appsrc/service/app/drain_liquid_service.hpp index 37b24bc..5802225 100644 --- a/appsrc/service/app/drain_liquid_service.hpp +++ b/appsrc/service/app/drain_liquid_service.hpp @@ -55,6 +55,7 @@ class DrainLiquidService : public enable_shared_from_this { state_t m_workstate = kidle; unique_ptr m_thread; recursive_mutex lock_; + unique_ptr stateUpdateThread; public: void initialize(); @@ -70,6 +71,10 @@ class DrainLiquidService : public enable_shared_from_this { private: void workThread(); + + void startStateReport(shared_ptr cxt); + void stopStateReport(shared_ptr cxt); + json getState(); }; } // namespace iflytop diff --git a/appsrc/service/app/pipeline_pressure_control.cpp b/appsrc/service/app/pipeline_pressure_control.cpp index 68ac3b2..3902e83 100644 --- a/appsrc/service/app/pipeline_pressure_control.cpp +++ b/appsrc/service/app/pipeline_pressure_control.cpp @@ -25,7 +25,8 @@ void PipelinePressureControl::initialize() { REG_EXTFN(setIntensity, void(int), intensity); REG_EXTFN_VOID(getState, void(void)); REG_EXTFN_VOID(getConfig, void(void)); - + REG_EXTFN_VOID(startStateReport, void()); + REG_EXTFN_VOID(stopStateReport, void()); m_type = PressureType::constantPressure; m_intensity = 0; @@ -89,7 +90,34 @@ void PipelinePressureControl::setIntensity(shared_ptr cxt, in m_intensity = intensity; syncPressureValueState(); } -void PipelinePressureControl::getState(shared_ptr cxt) { - cxt->rely["type"] = m_type; - cxt->rely["intensity"] = m_intensity; +void PipelinePressureControl::getState(shared_ptr cxt) { cxt->rely = getState(); } + +void PipelinePressureControl::startStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } + + stateUpdateThread.reset(new Thread("stateUpdateThread", [this]() { + while (!ThisThread().getExitFlag()) { + try { + SEND_CLASS_REPORT(thisClass.className, "stateUpdate", getState()); + } catch (const std::exception& e) { + logger->error("stateUpdateThread error:{}", e.what()); + } + ThisThread().sleepForMs(500); + } + })); +} +void PipelinePressureControl::stopStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } } +json PipelinePressureControl::getState() { + json state; + state["type"] = m_type; + state["intensity"] = m_intensity; + return state; +} \ No newline at end of file diff --git a/appsrc/service/app/pipeline_pressure_control.hpp b/appsrc/service/app/pipeline_pressure_control.hpp index 74e06f3..2f92c2a 100644 --- a/appsrc/service/app/pipeline_pressure_control.hpp +++ b/appsrc/service/app/pipeline_pressure_control.hpp @@ -56,6 +56,7 @@ class PipelinePressureControl : public enable_shared_from_this m_ds; shared_ptr m_dics; shared_ptr m_gConfig; + unique_ptr stateUpdateThread; PressureType m_type; int m_intensity = 0; @@ -72,6 +73,10 @@ class PipelinePressureControl : public enable_shared_from_this cxt); void getConfig(shared_ptr cxt); + void startStateReport(shared_ptr cxt); + void stopStateReport(shared_ptr cxt); + json getState(); + private: }; diff --git a/appsrc/service/app_core.cpp b/appsrc/service/app_core.cpp index fa18fa9..6f153a3 100644 --- a/appsrc/service/app_core.cpp +++ b/appsrc/service/app_core.cpp @@ -175,6 +175,8 @@ void AppCore::initialize() { REG_EXTFN_VOID(getState, void(void)); REG_EXTFN(appEventConfirm, void(string), evenid); + REG_EXTFN_VOID(startStateReport, void(void)); + REG_EXTFN_VOID(stopStateReport, void(void)); }; int AppCore::demofn(int a, int b) { return 0; } @@ -224,3 +226,27 @@ json AppCore::getState() { } return ret; } + +void AppCore::startStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } + + stateUpdateThread.reset(new Thread("stateUpdateThread", [this]() { + while (!ThisThread().getExitFlag()) { + try { + SEND_CLASS_REPORT(thisClass.className, "stateUpdate", getState()); + } catch (const std::exception& e) { + logger->error("stateUpdateThread error:{}", e.what()); + } + ThisThread().sleepForMs(500); + } + })); +} +void AppCore::stopStateReport(shared_ptr cxt) { + if (stateUpdateThread) { + stateUpdateThread->join(); + stateUpdateThread = nullptr; + } +} \ No newline at end of file diff --git a/appsrc/service/app_core.hpp b/appsrc/service/app_core.hpp index 3cdaede..b2db2bf 100644 --- a/appsrc/service/app_core.hpp +++ b/appsrc/service/app_core.hpp @@ -42,8 +42,7 @@ class AppCore : public enable_shared_from_this { unique_ptr wq; list> appEventList; recursive_mutex appEventListMutex; - - + unique_ptr stateUpdateThread; public: AppCore() {}; @@ -52,10 +51,11 @@ class AppCore : public enable_shared_from_this { private: void getState(shared_ptr cxt); void appEventConfirm(shared_ptr cxt, string appevenid); - + void startStateReport(shared_ptr cxt); + void stopStateReport(shared_ptr cxt); + json getState(); private: - json getState(); void dosystem(string order, bool dump); void loop(); int demofn(int a, int b); diff --git a/appsrc/service/device_check_point_check_service.cpp b/appsrc/service/device_check_point_check_service.cpp index c3fb19e..4107c0b 100644 --- a/appsrc/service/device_check_point_check_service.cpp +++ b/appsrc/service/device_check_point_check_service.cpp @@ -8,8 +8,8 @@ using namespace iflytop; void DeviceCheckPointCheckService::initialize() { // - checkPoints.push_back(CheckPoint(kCheckPointCode_evaporationBinWSTrigger, "蒸发仓内液位检查", false)); - checkPoints.push_back(CheckPoint(kCheckPointCode_deviceBottomWSTrigger, "硬件仓液位检测", false)); + checkPoints.push_back(CheckPoint(kCheckPointCode_evaporationBinWSTrigger, "蒸发仓内液位检查", true)); + checkPoints.push_back(CheckPoint(kCheckPointCode_deviceBottomWSTrigger, "硬件仓液位检测", true)); REG_TYPE(CheckPoint); REG_TYPE(vector); @@ -31,24 +31,30 @@ void DeviceCheckPointCheckService::initialize() { // // 检查各个检查点 for (auto& checkPoint : checkPoints) { CheckPointCode_t checkPointIndex = checkPoint.index; - if (checkPointIndex == kCheckPointCode_evaporationBinWSTrigger) { - if (GET_SERVICE(DeviceIoControlService)->WaterSensor_readEvaporationBin()) { - checkPoint.passed = true; - } else { - checkPoint.passed = false; - } - } else if (checkPointIndex == kCheckPointCode_deviceBottomWSTrigger) { - if (GET_SERVICE(DeviceIoControlService)->WaterSensor_readDeviceBottom()) { - checkPoint.passed = true; - } else { - checkPoint.passed = false; + + try { + if (checkPointIndex == kCheckPointCode_evaporationBinWSTrigger) { + if (GET_SERVICE(DeviceIoControlService)->WaterSensor_readEvaporationBin()) { + checkPoint.passed = false; + } else { + checkPoint.passed = true; + } + } else if (checkPointIndex == kCheckPointCode_deviceBottomWSTrigger) { + if (GET_SERVICE(DeviceIoControlService)->WaterSensor_readDeviceBottom()) { + checkPoint.passed = false; + } else { + checkPoint.passed = true; + } } + } catch (const std::exception& e) { + // + // 硬件错误这里不做处理 } } bool newstate = isPassed(); if (newstate != oldstate) { - if (newstate) { + if (!newstate) { if (DS->getDeviceState() == DeviceState::Disinfection) { GET_SERVICE(DisinfectionCtrlService)->stop(); } else if (DS->getDeviceState() == DeviceState::AddingLiquid) { diff --git a/appsrc/service/hardware/disinfectant_weight_update_service.cpp b/appsrc/service/hardware/disinfectant_weight_update_service.cpp index ec7a202..2b460bc 100644 --- a/appsrc/service/hardware/disinfectant_weight_update_service.cpp +++ b/appsrc/service/hardware/disinfectant_weight_update_service.cpp @@ -13,6 +13,13 @@ void DisinfectantWeightUpdateService::initialize() { // })); } } +float DisinfectantWeightUpdateService::getWeightNoExpection() { + try { + return getWeight(); + } catch (const std::exception& e) { + return -1; + } +} float DisinfectantWeightUpdateService::getWeight() { // if (DS->isTestMode()) { diff --git a/appsrc/service/hardware/disinfectant_weight_update_service.hpp b/appsrc/service/hardware/disinfectant_weight_update_service.hpp index c5db986..7a5fd5d 100644 --- a/appsrc/service/hardware/disinfectant_weight_update_service.hpp +++ b/appsrc/service/hardware/disinfectant_weight_update_service.hpp @@ -50,6 +50,8 @@ class DisinfectantWeightUpdateService : public enable_shared_from_this