Browse Source

添加配置

storage-in-realtime
zhaohe 12 months ago
parent
commit
949ba11883
  1. 13
      app_protocols/apperrorcode/apperrorcode.hpp
  2. 98
      appsrc/baseservice/db/db_service.cpp
  3. 15
      appsrc/baseservice/db/db_service.hpp
  4. 6
      appsrc/baseservice/front_msg_processer/front_msg_processer.cpp
  5. 1
      appsrc/baseservice/front_msg_processer/front_msg_processer.hpp
  6. 0
      appsrc/service/device_info_mgr_service.cpp
  7. 0
      appsrc/service/device_info_mgr_service.hpp
  8. 3
      appsrc/service/main_control_service.cpp
  9. 92
      appsrc/service/setting_mgr_service.cpp
  10. 37
      appsrc/service/setting_mgr_service.hpp

13
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;
}

98
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<Setting>();
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<recursive_mutex> 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<recursive_mutex> 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<shared_ptr<db::Formula>> DBService::getAllFormula() {

15
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<DBService> {
*******************************************************************************/
list<shared_ptr<db::Setting>> 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();

6
appsrc/baseservice/front_msg_processer/front_msg_processer.cpp

@ -22,7 +22,7 @@ void FrontMsgProcesser::processMsg(shared_ptr<MsgProcessContext> 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<MsgProcessContext> 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();

1
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;
};

0
appsrc/service/device_info_mgr_service.cpp

0
appsrc/service/device_info_mgr_service.hpp

3
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> webSocket, json& cmd, json& receipt) {

92
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<MsgProcessContext> cxt) { cxt->receipt["content"] = m_db->getAllSettingJson(); }
void SettingMgrService::setSettingVal(shared_ptr<MsgProcessContext> 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<MsgProcessContext> cxt) { cxt->receipt["content"] = m_db->getAllFormulaJson(); }
void SettingMgrService::addFormula(shared_ptr<MsgProcessContext> cxt) {
string formula_id = cxt->cmd["param"]["formula_id"];
m_db->addFormula(cxt->cmd["formula_id"], //
jsonGet<int>(cxt->cmd["loglevel"]), //
jsonGet<int>(cxt->cmd["stoped_gs"]), //
jsonGet<int>(cxt->cmd["continued_gs"]), //
jsonGet<int>(cxt->cmd["stoped_satur"]), //
jsonGet<int>(cxt->cmd["continued_satur"]), //
jsonGet<int>(cxt->cmd["stoped_humi"]), //
jsonGet<int>(cxt->cmd["continued_humi"]), //
jsonGet<int>(cxt->cmd["injection_pump_speed"]));
return;
}
void SettingMgrService::delFormula(shared_ptr<MsgProcessContext> cxt) { m_db->delFormula(jsonGet<int>(cxt->cmd["param"]["id"])); }
void SettingMgrService::updateFormula(shared_ptr<MsgProcessContext> 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<int>());
}
auto formula = m_db->updateFormula(jsonGet<int>(param["id"]), param["itemName"], val_str);
return;
}
void SettingMgrService::updateFormulaIterm(shared_ptr<MsgProcessContext> cxt) {
auto param = cxt->cmd["param"];
int id = jsonGet<int>(param["id"]);
string formula_id = param["formula_id"];
int loglevel = jsonGet<int>(param["loglevel"]);
int stoped_gs = jsonGet<int>(param["stoped_gs"]);
int continued_gs = jsonGet<int>(param["continued_gs"]);
int stoped_satur = jsonGet<int>(param["stoped_satur"]);
int continued_satur = jsonGet<int>(param["continued_satur"]);
int stoped_humi = jsonGet<int>(param["stoped_humi"]);
int continued_humi = jsonGet<int>(param["continued_humi"]);
int injection_pump_speed = jsonGet<int>(param["injection_pump_speed"]);
shared_ptr<Formula> 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<MsgProcessContext> cxt) {
m_db->settingfactoryReset();
auto dbval = m_db->getAllSettingJson();
cxt->content = dbval;
return;
}

37
appsrc/service/setting_mgr_service.hpp

@ -0,0 +1,37 @@
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
//
#include "baseservice/baseservice.hpp"
namespace iflytop {
class SettingMgrService : public enable_shared_from_this<SettingMgrService> {
ENABLE_LOGGER(SettingMgrService);
shared_ptr<DBService> m_db;
shared_ptr<DeviceStateService> m_ds;
public:
SettingMgrService();
void initialize();
private:
void getAllSetting(shared_ptr<MsgProcessContext> cxt);
void setSettingVal(shared_ptr<MsgProcessContext> cxt);
void getAllFormula(shared_ptr<MsgProcessContext> cxt);
void addFormula(shared_ptr<MsgProcessContext> cxt);
void delFormula(shared_ptr<MsgProcessContext> cxt);
void updateFormula(shared_ptr<MsgProcessContext> cxt);
void updateFormulaIterm(shared_ptr<MsgProcessContext> cxt);
void factoryResetSettings(shared_ptr<MsgProcessContext> cxt);
private:
};
} // namespace iflytop
Loading…
Cancel
Save