From 949ba11883af6b4562a2d8ee6e9705c4796ea2a7 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 12 Aug 2024 15:10:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_protocols/apperrorcode/apperrorcode.hpp | 13 +-- appsrc/baseservice/db/db_service.cpp | 98 ++++++++++++---------- appsrc/baseservice/db/db_service.hpp | 15 ++-- .../front_msg_processer/front_msg_processer.cpp | 6 +- .../front_msg_processer/front_msg_processer.hpp | 1 + appsrc/service/device_info_mgr_service.cpp | 0 appsrc/service/device_info_mgr_service.hpp | 0 appsrc/service/main_control_service.cpp | 3 + appsrc/service/setting_mgr_service.cpp | 92 ++++++++++++++++++++ appsrc/service/setting_mgr_service.hpp | 37 ++++++++ 10 files changed, 207 insertions(+), 58 deletions(-) create mode 100644 appsrc/service/device_info_mgr_service.cpp create mode 100644 appsrc/service/device_info_mgr_service.hpp create mode 100644 appsrc/service/setting_mgr_service.cpp create mode 100644 appsrc/service/setting_mgr_service.hpp diff --git a/app_protocols/apperrorcode/apperrorcode.hpp b/app_protocols/apperrorcode/apperrorcode.hpp index 64c8e6d..c97371c 100644 --- a/app_protocols/apperrorcode/apperrorcode.hpp +++ b/app_protocols/apperrorcode/apperrorcode.hpp @@ -44,12 +44,13 @@ typedef enum { kappe_the_sensor_is_prehearting = 10004, // 传感器正在预热 kappe_code_error = 10005, // 代码错误 - kappe_user_not_exist = 10006, - kappe_operate_error = 10007, - kappe_passwd_error = 10008, - kappe_cmd_not_support = 10009, - kappe_parse_json_err = 10010, - kappe_std_exception = 10011, + kappe_user_not_exist = 10006, + kappe_operate_error = 10007, + kappe_passwd_error = 10008, + kappe_cmd_not_support = 10009, + kappe_parse_json_err = 10010, + kappe_std_exception = 10011, + kappe_db_operate_error = 10012, } apperror_t; } diff --git a/appsrc/baseservice/db/db_service.cpp b/appsrc/baseservice/db/db_service.cpp index b20310b..76650e2 100644 --- a/appsrc/baseservice/db/db_service.cpp +++ b/appsrc/baseservice/db/db_service.cpp @@ -26,16 +26,17 @@ using namespace nlohmann; make_column("is_admin", &User::is_admin) /**/ \ ) -#define SETTING_DB_STRUCT \ - make_table("settings", /**/ \ - make_column("id", &Setting::id, primary_key()), /**/ \ - make_column("name", &Setting::name), /**/ \ - make_column("name_ch", &Setting::name_ch), /**/ \ - make_column("val_lower_limit", &Setting::val_lower_limit), /**/ \ - make_column("val_upper_limit", &Setting::val_upper_limit), /**/ \ - make_column("permission_level", &Setting::permission_level), /**/ \ - make_column("val", &Setting::val), /**/ \ - make_column("default_val", &Setting::default_val) /**/ \ +#define SETTING_DB_STRUCT \ + make_table("settings", /**/ \ + make_column("id", &Setting::id, primary_key()), /**/ \ + make_column("name", &Setting::name), /**/ \ + make_column("name_ch", &Setting::name_ch), /**/ \ + make_column("val_lower_limit", &Setting::val_lower_limit), /**/ \ + make_column("val_upper_limit", &Setting::val_upper_limit), /**/ \ + make_column("val_type", &Setting::val_type), /**/ \ + make_column("val", &Setting::val), /**/ \ + make_column("default_val", &Setting::default_val), /**/ \ + make_column("is_editable", &Setting::is_editable) /**/ \ ) #define FORMULA_DB_STRUCT \ @@ -63,23 +64,40 @@ using namespace nlohmann; * 配置列表 * *******************************************************************************/ -#define SETTING_ITEM(_id, _name, _name_ch, _val_lower_limit, _val_upper_limit, _val) \ - {.id = _id, .name = _name, .name_ch = _name_ch, .val_lower_limit = _val_lower_limit, .val_upper_limit = _val_upper_limit, .permission_level = 0, .val = _val, .default_val = _val} +#define SETTING_ITEM(_id, _name, _name_ch, _val_type, _val_lower_limit, _val_upper_limit, _val, _is_editable) \ + { \ + /**/ \ + .id = _id, /**/ \ + .name = _name, /**/ \ + .name_ch = _name_ch, /**/ \ + .val_type = _val_type, /**/ \ + .val_lower_limit = _val_lower_limit, /**/ \ + .val_upper_limit = _val_upper_limit, /**/ \ + .val = _val, /**/ \ + .default_val = _val, /**/ \ + .is_editable = _is_editable /**/ \ + } + +// int,float,bool,string static Setting config_settings_table[] = { - SETTING_ITEM(1, "stoped_gs", /*************/ "消毒停止过氧化氢溶度", /**********/ 0, 2000, 300), // - SETTING_ITEM(2, "continued_gs", /**********/ "消毒继续过氧化氢溶度", /**********/ 0, 2000, 200), // - SETTING_ITEM(3, "stoped_satur", /**********/ "消毒停止过氧化氢相对饱和度", /*****/ 0, 100, 85), // - SETTING_ITEM(4, "continued_satur", /*******/ "消毒继续过氧化氢相对饱和度", /*****/ 0, 100, 60), // - SETTING_ITEM(5, "max_humidity", /**********/ "允许消毒最大湿度", /*************/ 0, 100, 90), // - SETTING_ITEM(6, "drainage_pump_speed", /***/ "排液蠕动泵最大转速", /************/ 0, 400, 400), // - SETTING_ITEM(7, "injection_pump_speed", /**/ "喷射蠕动泵转速", /***************/ 0, INJECTION_PUMP_SPEED_LIMIT_VAL, INJECTION_PUMP_SPEED_DEFAULT), // - SETTING_ITEM(8, "pre_heat_time_s", /*******/ "预热时间", /*******************/ 0, 1200, 120), // - SETTING_ITEM(9, "stoped_humi", /***********/ "消毒停止相对湿度", /************/ 0, 100, 85), // - SETTING_ITEM(10, "continued_humi", /*******/ "消毒继续相对湿度", /************/ 0, 100, 60), // - SETTING_ITEM(11, "proportional_valve_default_value", "正负压默认开合比例", 0, 100, 10), // - SETTING_ITEM(12, "record_period_min", "消毒日志记录间隔", 1, 10, 1), // - SETTING_ITEM(13, "record_printer_period_min", "消毒日志打印间隔", 1, 10, 3), // + SETTING_ITEM(1, "stoped_gs", /*********************/ "int", "消毒停止过氧化氢溶度", /**********/ "0", "2000", "300", true), // + SETTING_ITEM(2, "continued_gs", /******************/ "int", "消毒继续过氧化氢溶度", /**********/ "0", "2000", "200", true), // + SETTING_ITEM(3, "stoped_satur", /******************/ "int", "消毒停止过氧化氢相对饱和度", /*****/ "0", "100", "85", true), // + SETTING_ITEM(4, "continued_satur", /***************/ "int", "消毒继续过氧化氢相对饱和度", /*****/ "0", "100", "60", true), // + SETTING_ITEM(5, "max_humidity", /******************/ "int", "允许消毒最大湿度", /*************/ "0", "100", "90", true), // + SETTING_ITEM(6, "drainage_pump_speed", /***********/ "int", "排液蠕动泵最大转速", /************/ "0", "400", "400", true), // + SETTING_ITEM(7, "injection_pump_speed", /**********/ "int", "喷射蠕动泵转速", /***************/ "0", "0", "0", true), // + SETTING_ITEM(8, "pre_heat_time_s", /***************/ "int", "预热时间", /*******************/ "0", "1200", "120", true), // + SETTING_ITEM(9, "stoped_humi", /*******************/ "int", "消毒停止相对湿度", /************/ "0", "100", "85", true), // + SETTING_ITEM(10, "continued_humi", /***************/ "int", "消毒继续相对湿度", /************/ "0", "100", "60", true), // + SETTING_ITEM(11, "proportional_valve_default_value", "int", "正负压默认开合比例", "0", "100", "10", true), // + SETTING_ITEM(12, "record_period_min", "int", "消毒日志记录间隔", "1", "10", "1", true), // + SETTING_ITEM(13, "record_printer_period_min", "int", "消毒日志打印间隔", "1", "10", "3", true), // + SETTING_ITEM(14, "test_string", "string", "字符串类型测试", "", "", "12345", true), // + SETTING_ITEM(13, "test_float", "float", "floag类型测试", "1", "10", "3.4", true), // + SETTING_ITEM(14, "test_string", "string", "字符串类型测试", "", "", "12345", false), // + SETTING_ITEM(14, "test_bool", "bool", "bool类型测试", "false", "true", "false", false), // }; @@ -312,15 +330,14 @@ json DBService::getAllSettingJson() { auto all = settingtable.get_all(); for (auto& s : all) { json j_setting; - j_setting["id"] = s.id; - j_setting["name"] = s.name; - j_setting["name_ch"] = s.name_ch; - j_setting["val"] = s.val; - j_setting["val_lower_limit"] = s.val_lower_limit; - j_setting["val_upper_limit"] = s.val_upper_limit; - j_setting["permission_level"] = s.permission_level; - j_setting["val"] = s.val; - j_setting["default_val"] = s.default_val; + j_setting["id"] = s.id; + j_setting["name"] = s.name; + j_setting["name_ch"] = s.name_ch; + j_setting["val"] = s.val; + j_setting["val_lower_limit"] = s.val_lower_limit; + j_setting["val_upper_limit"] = s.val_upper_limit; + j_setting["val"] = s.val; + j_setting["default_val"] = s.default_val; j_settings.push_back(j_setting); } return j_settings; @@ -359,7 +376,7 @@ bool DBService::ispasswdCorrect(string uid, string passwd) { return false; } -bool DBService::setSettingVal(int id, int val) { +bool DBService::setSettingVal(int id, string val) { lock_guard lock(lock_); auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT); @@ -368,14 +385,11 @@ bool DBService::setSettingVal(int id, int val) { if (setting.size() == 0) { return false; } - if (setting[0].val < setting[0].val_lower_limit || setting[0].val > setting[0].val_upper_limit) { - return false; - } setting[0].val = val; settingtable.update(setting[0]); return true; } -bool DBService::setSettingVal(string setting_name, int val) { +bool DBService::setSettingVal(string setting_name, string val) { lock_guard lock(lock_); logger->info("set setting val: {} {}", setting_name, val); @@ -386,10 +400,6 @@ bool DBService::setSettingVal(string setting_name, int val) { logger->error("set setting val failed: {} not found", setting_name); return false; } - if (setting[0].val < setting[0].val_lower_limit || setting[0].val > setting[0].val_upper_limit) { - logger->error("set setting val failed: {} out of range", setting_name); - return false; - } setting[0].val = val; Setting s = setting[0]; settingtable.update(s); @@ -406,7 +416,7 @@ int DBService::getSettingVal(string name) { if (setting.size() == 0) { return -1; } - return setting[0].val; + return atoi(setting[0].val.c_str()); } list> DBService::getAllFormula() { diff --git a/appsrc/baseservice/db/db_service.hpp b/appsrc/baseservice/db/db_service.hpp index cfc50c8..a0ef140 100644 --- a/appsrc/baseservice/db/db_service.hpp +++ b/appsrc/baseservice/db/db_service.hpp @@ -67,11 +67,12 @@ struct Setting { int id; string name; string name_ch; - int val_lower_limit; - int val_upper_limit; - int permission_level; - int val; - int default_val; + string val_type; // int,float,bool,string + string val_lower_limit; + string val_upper_limit; + string val; + string default_val; + bool is_editable; }; struct Formula { @@ -135,8 +136,8 @@ class DBService : public enable_shared_from_this { *******************************************************************************/ list> getAllSetting(); json getAllSettingJson(); - bool setSettingVal(int id, int val); - bool setSettingVal(string name, int val); + bool setSettingVal(int id, string val); + bool setSettingVal(string name, string val); int getSettingVal(string name); void settingfactoryReset(); diff --git a/appsrc/baseservice/front_msg_processer/front_msg_processer.cpp b/appsrc/baseservice/front_msg_processer/front_msg_processer.cpp index 38d1557..81cee4d 100644 --- a/appsrc/baseservice/front_msg_processer/front_msg_processer.cpp +++ b/appsrc/baseservice/front_msg_processer/front_msg_processer.cpp @@ -22,7 +22,7 @@ void FrontMsgProcesser::processMsg(shared_ptr cxt) { string fnName = cxt->cmd["fnName"]; string key = className + "." + fnName; - string fn = className+ "." + fnName; + string fn = className + "." + fnName; string param = cxt->cmd["param"].dump(); logger->info("call: {}->({})", fn, param); @@ -33,6 +33,10 @@ void FrontMsgProcesser::processMsg(shared_ptr cxt) { if (int(cxt->receipt["ackcode"]) != 0) { cxt->receipt["message"] = fmt::format("[{}],{}", ecode2str(cxt->receipt["ackcode"]), cxt->ackcodeExtMessage); } + if (cxt->content.empty() == false) { + cxt->receipt["content"] = cxt->content; + } + } catch (const appexception& e) { logger->error("process {} error: {}", key, e.what()); cxt->receipt["ackcode"] = e.ecode(); diff --git a/appsrc/baseservice/front_msg_processer/front_msg_processer.hpp b/appsrc/baseservice/front_msg_processer/front_msg_processer.hpp index ab9dc91..226e80a 100644 --- a/appsrc/baseservice/front_msg_processer/front_msg_processer.hpp +++ b/appsrc/baseservice/front_msg_processer/front_msg_processer.hpp @@ -36,6 +36,7 @@ class MsgProcessContext { json cmd; json receipt; int ackcode = 0; + json content; string ackcodeExtMessage; }; diff --git a/appsrc/service/device_info_mgr_service.cpp b/appsrc/service/device_info_mgr_service.cpp new file mode 100644 index 0000000..e69de29 diff --git a/appsrc/service/device_info_mgr_service.hpp b/appsrc/service/device_info_mgr_service.hpp new file mode 100644 index 0000000..e69de29 diff --git a/appsrc/service/main_control_service.cpp b/appsrc/service/main_control_service.cpp index 7a4e54a..f651201 100644 --- a/appsrc/service/main_control_service.cpp +++ b/appsrc/service/main_control_service.cpp @@ -1,6 +1,7 @@ #include "main_control_service.hpp" #include "baseservice/baseservice.hpp" +#include "service/setting_mgr_service.hpp" #include "service/user_mgr_service.hpp" using namespace iflytop; @@ -24,6 +25,8 @@ void MainControlService::initialize() { GET_SERVICE(UartPrinter)->initialize(GET_SERVICE(GConfig)->get_printerUart(), "9600"); // ExtApi BUILD_AND_REG_SERRVICE(UserMgrService); + BUILD_AND_REG_SERRVICE(SettingMgrService); + // GET_SERVICE(IflytopFrontEndService)->startListen(); GET_SERVICE(IflytopFrontEndService)->onMessage.connect([this](weak_ptr webSocket, json& cmd, json& receipt) { diff --git a/appsrc/service/setting_mgr_service.cpp b/appsrc/service/setting_mgr_service.cpp new file mode 100644 index 0000000..9579e9d --- /dev/null +++ b/appsrc/service/setting_mgr_service.cpp @@ -0,0 +1,92 @@ +#include "setting_mgr_service.hpp" + +using namespace iflytop; +using namespace std; +using namespace core; + +SettingMgrService::SettingMgrService() {} +void SettingMgrService::initialize() { + GET_TO_SERVICE(m_db); + GET_TO_SERVICE(m_ds); + + REGFN(SettingMgrService, getAllSetting); + REGFN(SettingMgrService, setSettingVal); + REGFN(SettingMgrService, getAllFormula); + REGFN(SettingMgrService, addFormula); + REGFN(SettingMgrService, delFormula); + REGFN(SettingMgrService, updateFormula); + REGFN(SettingMgrService, updateFormulaIterm); + REGFN(SettingMgrService, factoryResetSettings); +} + +void SettingMgrService::getAllSetting(shared_ptr cxt) { cxt->receipt["content"] = m_db->getAllSettingJson(); } +void SettingMgrService::setSettingVal(shared_ptr cxt) { + string settingName = cxt->cmd["param"]["settingName"]; + string settingVal = cxt->cmd["param"]["settingVal"]; + bool suc = m_db->setSettingVal(settingName, settingVal); + APPCHECK(suc, err::kappe_db_operate_error, "setSettingVal failed"); +} +void SettingMgrService::getAllFormula(shared_ptr cxt) { cxt->receipt["content"] = m_db->getAllFormulaJson(); } +void SettingMgrService::addFormula(shared_ptr cxt) { + string formula_id = cxt->cmd["param"]["formula_id"]; + m_db->addFormula(cxt->cmd["formula_id"], // + jsonGet(cxt->cmd["loglevel"]), // + jsonGet(cxt->cmd["stoped_gs"]), // + jsonGet(cxt->cmd["continued_gs"]), // + jsonGet(cxt->cmd["stoped_satur"]), // + jsonGet(cxt->cmd["continued_satur"]), // + jsonGet(cxt->cmd["stoped_humi"]), // + jsonGet(cxt->cmd["continued_humi"]), // + jsonGet(cxt->cmd["injection_pump_speed"])); + return; +} +void SettingMgrService::delFormula(shared_ptr cxt) { m_db->delFormula(jsonGet(cxt->cmd["param"]["id"])); } +void SettingMgrService::updateFormula(shared_ptr cxt) { + auto param = cxt->cmd["param"]; + string val_str; + if (param["val"].is_string()) { + val_str = param["val"]; + } else { + val_str = std::to_string(param["val"].get()); + } + auto formula = m_db->updateFormula(jsonGet(param["id"]), param["itemName"], val_str); + return; +} +void SettingMgrService::updateFormulaIterm(shared_ptr cxt) { + auto param = cxt->cmd["param"]; + + int id = jsonGet(param["id"]); + string formula_id = param["formula_id"]; + int loglevel = jsonGet(param["loglevel"]); + int stoped_gs = jsonGet(param["stoped_gs"]); + int continued_gs = jsonGet(param["continued_gs"]); + int stoped_satur = jsonGet(param["stoped_satur"]); + int continued_satur = jsonGet(param["continued_satur"]); + int stoped_humi = jsonGet(param["stoped_humi"]); + int continued_humi = jsonGet(param["continued_humi"]); + int injection_pump_speed = jsonGet(param["injection_pump_speed"]); + + shared_ptr formula = m_db->getFormula(id); + APPCHECK(formula, err::kappe_db_operate_error, "formula id {} not exist", id); + + string oldname = formula->formula_id; + formula->formula_id = formula_id; + formula->loglevel = std::to_string(loglevel); + formula->stoped_gs = std::to_string(stoped_gs); + formula->continued_gs = std::to_string(continued_gs); + formula->stoped_satur = std::to_string(stoped_satur); + formula->continued_satur = std::to_string(continued_satur); + formula->stoped_humi = std::to_string(stoped_humi); + formula->continued_humi = std::to_string(continued_humi); + formula->injection_pump_speed = std::to_string(injection_pump_speed); + + m_db->updateFormula(formula); + + return; +} +void SettingMgrService::factoryResetSettings(shared_ptr cxt) { + m_db->settingfactoryReset(); + auto dbval = m_db->getAllSettingJson(); + cxt->content = dbval; + return; +} diff --git a/appsrc/service/setting_mgr_service.hpp b/appsrc/service/setting_mgr_service.hpp new file mode 100644 index 0000000..bb275ae --- /dev/null +++ b/appsrc/service/setting_mgr_service.hpp @@ -0,0 +1,37 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +// +#include "baseservice/baseservice.hpp" +namespace iflytop { +class SettingMgrService : public enable_shared_from_this { + ENABLE_LOGGER(SettingMgrService); + + shared_ptr m_db; + shared_ptr m_ds; + + public: + SettingMgrService(); + void initialize(); + + private: + void getAllSetting(shared_ptr cxt); + void setSettingVal(shared_ptr cxt); + void getAllFormula(shared_ptr cxt); + void addFormula(shared_ptr cxt); + void delFormula(shared_ptr cxt); + void updateFormula(shared_ptr cxt); + void updateFormulaIterm(shared_ptr cxt); + void factoryResetSettings(shared_ptr cxt); + + private: +}; + +} // namespace iflytop