From 81a730327d4d3ecc33601e3ea3f6c1baba3667de Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 14 Aug 2024 15:07:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=AF=92=E6=8E=A7=E5=88=B6=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appsrc/baseservice/db/formula_db_dao.cpp | 1 + appsrc/baseservice/db/formula_db_dao.hpp | 1 + appsrc/baseservice/db/setting_db_dao.cpp | 25 ++-- appsrc/baseservice/db/setting_db_dao.hpp | 8 +- appsrc/service/app/disinfection_ctrl_service.cpp | 139 +++++++---------------- appsrc/service/app/disinfection_ctrl_service.hpp | 55 ++------- 6 files changed, 72 insertions(+), 157 deletions(-) diff --git a/appsrc/baseservice/db/formula_db_dao.cpp b/appsrc/baseservice/db/formula_db_dao.cpp index 721295e..57027cf 100644 --- a/appsrc/baseservice/db/formula_db_dao.cpp +++ b/appsrc/baseservice/db/formula_db_dao.cpp @@ -51,3 +51,4 @@ json FormulaDBDao::newFormula() { keyvaldb.set(formula["formula_id"], formula.dump()); return formula; } +json FormulaDBDao::getFormula(string formulaid) { return keyvaldb.get(formulaid); } diff --git a/appsrc/baseservice/db/formula_db_dao.hpp b/appsrc/baseservice/db/formula_db_dao.hpp index 6fd99a2..f27e749 100644 --- a/appsrc/baseservice/db/formula_db_dao.hpp +++ b/appsrc/baseservice/db/formula_db_dao.hpp @@ -52,6 +52,7 @@ class FormulaDBDao : public enable_shared_from_this { void updateFormula(string formulaid, json formula); void updateFormula(string formulaid, string key, string val); void deleteFormula(string formulaid); + json getFormula(string formulaid); json newFormula(); public: diff --git a/appsrc/baseservice/db/setting_db_dao.cpp b/appsrc/baseservice/db/setting_db_dao.cpp index a89cf1c..f80823d 100644 --- a/appsrc/baseservice/db/setting_db_dao.cpp +++ b/appsrc/baseservice/db/setting_db_dao.cpp @@ -4,7 +4,7 @@ * BASIC * *******************************************************************************/ #define SETTING_DB "setting.db" -#define DB_VERSION "1.0.1" // 更新这个参数,会自动重置数据库 +#define DB_VERSION "1.0.2" // 更新这个参数,会自动重置数据库 namespace iflytop { namespace db { @@ -22,8 +22,8 @@ void to_json(json& j, const Setting& p) { j["val_upper_limit"] = p.val_upper_limit; j["val"] = p.val; j["default_val"] = p.default_val; - j["enum_vals"] = p.enum_vals; - j["enum_dis_vals"] = p.enum_dis_vals; + j["enums"] = p.enums; + j["enum_display_names"] = p.enum_display_names; j["is_editable"] = p.is_editable; j["is_visible_in_setting_page"] = p.is_visible_in_setting_page; j["is_visible_in_formula_page"] = p.is_visible_in_formula_page; @@ -37,8 +37,8 @@ void from_json(const json& j, Setting& p) { j.at("val_upper_limit").get_to(p.val_upper_limit); j.at("val").get_to(p.val); j.at("default_val").get_to(p.default_val); - j.at("enum_vals").get_to(p.enum_vals); - j.at("enum_dis_vals").get_to(p.enum_dis_vals); + j.at("enums").get_to(p.enums); + j.at("enum_display_names").get_to(p.enum_display_names); j.at("is_editable").get_to(p.is_editable); j.at("is_visible_in_setting_page").get_to(p.is_visible_in_setting_page); j.at("is_visible_in_formula_page").get_to(p.is_visible_in_formula_page); @@ -56,8 +56,8 @@ using namespace db; #define INT_SETTING(setting_id, name_ch, default_val, val_lower_limit, val_upper_limit, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \ Setting { setting_id, name_ch, "int", default_val, default_val, val_lower_limit, val_upper_limit, {}, {}, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page } -#define ENUM_SETTING(setting_id, name_ch, default_val, enum_vals, enum_dis_vals, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \ - Setting { setting_id, name_ch, "enum", default_val, default_val, "", "", enum_vals, enum_dis_vals, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page } +#define ENUM_SETTING(setting_id, name_ch, default_val, enums, enum_display_names, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \ + Setting { setting_id, name_ch, "enum", default_val, default_val, "", "", enums, enum_display_names, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page } #define BOOL_SETTING(setting_id, name_ch, default_val, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \ Setting { setting_id, name_ch, "bool", default_val, default_val, "", "", {}, {}, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page } #define FLOAT_SETTING(setting_id, name_ch, default_val, val_lower_limit, val_upper_limit, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \ @@ -88,6 +88,17 @@ static Setting settingInitTable[] = { }; +list> SettingDBDao::getRealtimeSetting() { + list> settings; + auto all = getAllSetting(); + for (auto& setting : all) { + if (setting->is_visible_in_rt_page) { + settings.push_back(make_shared(*setting)); + } + } + return settings; +} + void SettingDBDao::initialize() { // try { keyvaldb.initialize("setting.db", "setting"); diff --git a/appsrc/baseservice/db/setting_db_dao.hpp b/appsrc/baseservice/db/setting_db_dao.hpp index 73663f8..5fd5e10 100644 --- a/appsrc/baseservice/db/setting_db_dao.hpp +++ b/appsrc/baseservice/db/setting_db_dao.hpp @@ -20,8 +20,6 @@ #include "base/keyvaldb.hpp" #include "user_behavior_des.hpp" - - namespace iflytop { using namespace std; using namespace std; @@ -48,8 +46,8 @@ class Setting { string val_lower_limit; string val_upper_limit; - vector enum_vals; - vector enum_dis_vals; + vector enums; + vector enum_display_names; bool is_editable = true; bool is_visible_in_setting_page = true; @@ -94,6 +92,8 @@ class SettingDBDao : public enable_shared_from_this { shared_ptr getSetting(string name); void updateSetting(shared_ptr setting); + list> getRealtimeSetting(); + bool setSettingVal(string name, string val); int getSettingValAsInt(string name); string getSettingValAsString(string name); diff --git a/appsrc/service/app/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl_service.cpp index 557b630..bd47fbe 100644 --- a/appsrc/service/app/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl_service.cpp @@ -1,5 +1,7 @@ #include "disinfection_ctrl_service.hpp" using namespace iflytop; +#define SETTING_DB SettingDBDao::ins() +#define FORMULA_DB FormulaDBDao::ins() static string disinfectionState2DisplayName(disinfection_state_t state) { switch (state) { @@ -25,116 +27,51 @@ static string disinfectionState2DisplayName(disinfection_state_t state) { } void DisinfectionCtrlService::initialize() { - REGFNV2(DisinfectionCtrlService, enableDehumidifyBD); - REGFNV2(DisinfectionCtrlService, setDehumidifyBDThreshold); - REGFNV2(DisinfectionCtrlService, enableDehumidifyAD); - REGFNV2(DisinfectionCtrlService, setDehumidifyADThreshold); - REGFNV2(DisinfectionCtrlService, enableDegradeAD); - REGFNV2(DisinfectionCtrlService, startDisinfection); - REGFNV2(DisinfectionCtrlService, changeDisinfectionParameter); - REGFNV2(DisinfectionCtrlService, getDisinfectionConfig); - REGFNV2(DisinfectionCtrlService, stopDisinfection); + REGFNV2(DisinfectionCtrlService, start); + REGFNV2(DisinfectionCtrlService, startWithFormula); + REGFNV2(DisinfectionCtrlService, stop); REGFNV2(DisinfectionCtrlService, getState); REGFNV2(DisinfectionCtrlService, getServiceConfig); + REGFNV2(DisinfectionCtrlService, getRealtimeConfig); } -/******************************************************************************* - * 配置 * - *******************************************************************************/ - -// 消毒前除 -void DisinfectionCtrlService::fn_enableDehumidifyBD(shared_ptr cxt) { - // - bool enable = cxt->params["val"]; - m_enableDehumidifyBD = enable; +void DisinfectionCtrlService::fn_start(shared_ptr cxt) { + // 从setting中获取实时参数 + m_formulaid = ""; + auto allrealtimesetting = SETTING_DB->getRealtimeSetting(); + for (auto& setting : allrealtimesetting) { + m_realtimeCfg[string(setting->setting_id)] = setting->val; + } + m_state = kstate_preheat; } -void DisinfectionCtrlService::fn_setDehumidifyBDThreshold(shared_ptr cxt) { - int threshold = cxt->params["val"]; - m_dehumidifyBDThreshold = threshold; +void DisinfectionCtrlService::fn_startWithFormula(shared_ptr cxt) { // + m_formulaid = cxt->params["formula_id"]; + m_defaultFormulaJson = FORMULA_DB->getFormula(m_formulaid); + auto allrealtimesetting = SETTING_DB->getRealtimeSetting(); + for (auto& setting : allrealtimesetting) { + m_realtimeCfg[string(setting->setting_id)] = m_defaultFormulaJson[string(setting->setting_id)]; + } + m_state = kstate_preheat; } - -void DisinfectionCtrlService::fn_enableDehumidifyAD(shared_ptr cxt) { - bool enable = cxt->params["val"]; - m_enableDehumidifyAD = enable; -} // 消毒后除 -void DisinfectionCtrlService::fn_setDehumidifyADThreshold(shared_ptr cxt) { - int threshold = cxt->params["val"]; - m_dehumidifyADThreshold = threshold; +void DisinfectionCtrlService::fn_stop(shared_ptr cxt) { + m_formulaid = ""; + m_state = kstate_idle; } -void DisinfectionCtrlService::fn_enableDegradeAD(shared_ptr cxt) { - bool enable = cxt->params["val"]; - m_enableDegradeAD = enable; -} // 消毒后降 - -/******************************************************************************* - * 控制 * - *******************************************************************************/ -void DisinfectionCtrlService::fn_startDisinfection(shared_ptr cxt) { // - m_state = kstate_preheat; +void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr cxt) { + json& rely = cxt->content; + for (auto& cfg : m_realtimeCfg) { + rely[cfg.first] = cfg.second; + } } -void DisinfectionCtrlService::fn_changeDisinfectionParameter(shared_ptr cxt) { - - int injection_pump_speed = m_runCfg.injection_pump_speed; - int stoped_gs = m_runCfg.stoped_gs; - int continued_gs = m_runCfg.continued_gs; - int stoped_satur = m_runCfg.stoped_satur; - int continued_satur = m_runCfg.continued_satur; - int stoped_humi = m_runCfg.stoped_humi; - int continued_humi = m_runCfg.continued_humi; - -// if (cmd.find("injection_pump_speed") != cmd.end()) { -// injection_pump_speed = jsonGet(cmd["injection_pump_speed"]); -// } -// if (cmd.find("stoped_gs") != cmd.end()) { -// stoped_gs = jsonGet(cmd["stoped_gs"]); -// } -// if (cmd.find("continued_gs") != cmd.end()) { -// continued_gs = jsonGet(cmd["continued_gs"]); -// } -// if (cmd.find("stoped_satur") != cmd.end()) { -// stoped_satur = jsonGet(cmd["stoped_satur"]); -// } -// if (cmd.find("continued_satur") != cmd.end()) { -// continued_satur = jsonGet(cmd["continued_satur"]); -// } -// if (cmd.find("stoped_humi") != cmd.end()) { -// stoped_humi = jsonGet(cmd["stoped_humi"]); -// } -// if (cmd.find("continued_humi") != cmd.end()) { -// continued_humi = jsonGet(cmd["continued_humi"]); -// } - -// dfs->setInjectionPumpSpeed(injection_pump_speed); -// dfs->setStopedGS(stoped_gs); -// dfs->setContinuedGS(continued_gs); -// dfs->setStopedSatur(stoped_satur); -// dfs->setContinuedSatur(continued_satur); -// dfs->setStopedHumi(stoped_humi); -// dfs->setContinuedHumi(continued_humi); - -// m_disinfectionCtrlService->changeDisinfectionParameter(); - return; +void DisinfectionCtrlService::fn_setRealtimeConfig(shared_ptr cxt) { + string key = cxt->params["key"]; + string val = cxt->params["val"]; + m_realtimeCfg[key] = val; } -void DisinfectionCtrlService::fn_getDisinfectionConfig(shared_ptr cxt) {} -void DisinfectionCtrlService::fn_stopDisinfection(shared_ptr cxt) {} -/******************************************************************************* - * 状态 * - *******************************************************************************/ void DisinfectionCtrlService::fn_getState(shared_ptr cxt) { - json content; - content["cfg"]["enableDehumidifyBD"] = m_enableDehumidifyBD; - content["cfg"]["dehumidifyBDThreshold"] = m_dehumidifyBDThreshold; - content["cfg"]["enableDehumidifyAD"] = m_enableDehumidifyAD; - content["cfg"]["dehumidifyADThreshold"] = m_dehumidifyADThreshold; - content["cfg"]["enableDegradeAD"] = m_enableDegradeAD; - content["state"]["disinfectionState"] = disinfectionState2DisplayName(m_state); - content["state"]["dval"] = 12.3; - content["state"]["nlog"] = 1.0; - content["state"]["tlog"] = 3.0; - cxt->content = content; + json& rely = cxt->content; + rely["statedisplayName"] = disinfectionState2DisplayName(m_state); + rely["state"] = toString(m_state); } -void DisinfectionCtrlService::fn_getServiceConfig(shared_ptr cxt) { - // - // -} \ No newline at end of file +void DisinfectionCtrlService::fn_getServiceConfig(shared_ptr cxt) { json& rely = cxt->content; } \ No newline at end of file diff --git a/appsrc/service/app/disinfection_ctrl_service.hpp b/appsrc/service/app/disinfection_ctrl_service.hpp index 0b7eaa2..ae33c7f 100644 --- a/appsrc/service/app/disinfection_ctrl_service.hpp +++ b/appsrc/service/app/disinfection_ctrl_service.hpp @@ -15,66 +15,31 @@ namespace iflytop { class DisinfectionCtrlService : public enable_shared_from_this { THISCLASS(DisinfectionCtrlService); - typedef struct { - int pre_heat_time_s; - int stoped_gs; - int continued_gs; - int stoped_satur; - int continued_satur; - int stoped_humi; - int continued_humi; - int injection_pump_speed; - } cfg_t; - - typedef struct { - bool enable_bf_dinft_dehumidification; - bool enable_af_dinft_dehumidification; - bool enable_degradation; - int bf_dinft_dehumidification_target_val; - int af_dinft_dehumidification_target_val; - int degradation_target_val; - } beforeRunCfg_t; public: shared_ptr m_db; shared_ptr m_ds; shared_ptr m_gConfig; - bool m_enableDehumidifyBD = false; - int m_dehumidifyBDThreshold = 0; - bool m_enableDehumidifyAD = false; - int m_dehumidifyADThreshold = 0; - bool m_enableDegradeAD = false; - - cfg_t m_runCfg; - beforeRunCfg_t m_beforeRunCfg; - disinfection_state_t m_state = kstate_idle; + map m_realtimeCfg; + json m_defaultFormulaJson; + string m_formulaid; + public: void initialize(); public: - public: - /******************************************************************************* - * 配置 * - *******************************************************************************/ - - void fn_enableDehumidifyBD(shared_ptr cxt); // 消毒前除湿 - void fn_setDehumidifyBDThreshold(shared_ptr cxt); - - void fn_enableDehumidifyAD(shared_ptr cxt); // 消毒后除湿 - void fn_setDehumidifyADThreshold(shared_ptr cxt); - - void fn_enableDegradeAD(shared_ptr cxt); // 消毒后降解 - /******************************************************************************* * 控制 * *******************************************************************************/ - void fn_startDisinfection(shared_ptr cxt); - void fn_changeDisinfectionParameter(shared_ptr cxt); - void fn_getDisinfectionConfig(shared_ptr cxt); - void fn_stopDisinfection(shared_ptr cxt); + void fn_start(shared_ptr cxt); + void fn_startWithFormula(shared_ptr cxt); + void fn_stop(shared_ptr cxt); + + void fn_getRealtimeConfig(shared_ptr cxt); + void fn_setRealtimeConfig(shared_ptr cxt); /******************************************************************************* * 状态 * *******************************************************************************/