|
|
@ -4,7 +4,7 @@ |
|
|
|
* BASIC * |
|
|
|
*******************************************************************************/ |
|
|
|
#define SETTING_DB "setting.db"
|
|
|
|
#define DB_VERSION "1.0.5" // 更新这个参数,会自动重置数据库
|
|
|
|
#define DB_VERSION "1.0.6" // 更新这个参数,会自动重置数据库
|
|
|
|
|
|
|
|
namespace iflytop { |
|
|
|
namespace db { |
|
|
@ -54,41 +54,170 @@ void to_json(json& j, list<shared_ptr<Setting>> settings) { |
|
|
|
using namespace iflytop; |
|
|
|
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, 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) \
|
|
|
|
Setting { setting_id, name_ch, "float", 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 } |
|
|
|
|
|
|
|
static Setting settingInitTable[] = { |
|
|
|
// 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
|
|
|
|
INT_SETTING(SettingId::kstoped_gs, "消毒停止过氧化氢浓度", "300", "0", "800", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kcontinued_gs, "消毒继续过氧化氢浓度", "200", "0", "800", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kstoped_satur, "消毒停止过氧化氢相对饱和度", "85", "0", "100", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kcontinued_satur, "消毒继续过氧化氢相对饱和度", "60", "0", "100", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kmax_humidity, "允许消毒最大湿度", "90", "0", "100", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kdrainage_pump_speed, "排液蠕动泵最大转速", "300", "0", "400", /* */ true, false, false, false), |
|
|
|
INT_SETTING(SettingId::kinjection_pump_speed, "喷射蠕动泵转速", "10", "0", "40", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kpre_heat_time_s, "预热时间", "120", "0", "1200", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kstoped_humi, "消毒停止相对湿度", "85", "0", "100", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kcontinued_humi, "消毒继续相对湿度", "60", "0", "100", /* */ true, true, true, true), |
|
|
|
INT_SETTING(SettingId::kproportional_valve_default_value, "正负压默认开合比例", "10", "0", "100", /* */ false, false, false, false), // delete in the future....
|
|
|
|
INT_SETTING(SettingId::krecord_period_min, "消毒日志记录间隔(Min)", "2", "1", "30", /* */ true, true, false, false), |
|
|
|
INT_SETTING(SettingId::krecord_printer_period_min, "消毒日志打印间隔(Min)", "5", "1", "30", /* */ true, true, false, false), |
|
|
|
ENUM_SETTING(SettingId::kloglevel, "消毒等级", "6", vector<string>({"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}), //
|
|
|
|
vector<string>({"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}), /* */ true, false, true, true), |
|
|
|
BOOL_SETTING(SettingId::kenable_bd_dehumidify, "是否启用消毒前除湿", "false", /* */ true, false, false, false), |
|
|
|
INT_SETTING(SettingId::kbd_dehumidify_threshold, "消毒前除湿阈值", "0", "0", "100", /* */ true, false, false, false), |
|
|
|
BOOL_SETTING(SettingId::kenable_ad_dehumidify, "是否启用消毒后除湿", "false", true, /* */ false, false, false), |
|
|
|
INT_SETTING(SettingId::kad_dehumidify_threshold, "消毒后除湿阈值", "0", "0", "100", /* */ true, false, false, false), |
|
|
|
BOOL_SETTING(SettingId::kenable_ad_degrade, "是否启用消毒后降解", "false", /* */ true, false, false, false), |
|
|
|
INT_SETTING(SettingId::kad_degrade_threshold, "消毒后降解阈值", "0", "0", "100", /* */ true, false, false, false), |
|
|
|
{.setting_id = SettingId::kstoped_gs}, |
|
|
|
{.setting_id = SettingId::kcontinued_gs}, |
|
|
|
{.setting_id = SettingId::kstoped_satur}, |
|
|
|
{.setting_id = SettingId::kcontinued_satur}, |
|
|
|
{.setting_id = SettingId::kmax_humidity}, |
|
|
|
{.setting_id = SettingId::kdrainage_pump_speed}, |
|
|
|
{.setting_id = SettingId::kinjection_pump_speed}, |
|
|
|
{.setting_id = SettingId::kpre_heat_time_s}, |
|
|
|
{.setting_id = SettingId::kstoped_humi}, |
|
|
|
{.setting_id = SettingId::kcontinued_humi}, |
|
|
|
{.setting_id = SettingId::krecord_period_min}, |
|
|
|
{.setting_id = SettingId::krecord_printer_period_min}, |
|
|
|
{.setting_id = SettingId::kloglevel}, |
|
|
|
{.setting_id = SettingId::kenable_bd_dehumidify}, |
|
|
|
{.setting_id = SettingId::kbd_dehumidify_threshold}, |
|
|
|
{.setting_id = SettingId::kenable_ad_dehumidify}, |
|
|
|
{.setting_id = SettingId::kad_dehumidify_threshold}, |
|
|
|
{.setting_id = SettingId::kenable_ad_degrade}, |
|
|
|
{.setting_id = SettingId::kad_degrade_threshold}, |
|
|
|
}; |
|
|
|
|
|
|
|
void SettingDBDao::initSettingDefaultValTable() { |
|
|
|
for (auto& setting : settingInitTable) { |
|
|
|
switch (setting.setting_id) //
|
|
|
|
{ |
|
|
|
case SettingId::kstoped_gs: { |
|
|
|
setting.name_ch = "消毒停止过氧化氢浓度"; |
|
|
|
setting.setValConfig("int", "300", "0", "800"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kcontinued_gs: { |
|
|
|
setting.name_ch = "消毒继续过氧化氢浓度"; |
|
|
|
setting.setValConfig("int", "200", "0", "800"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kstoped_satur: { |
|
|
|
setting.name_ch = "消毒停止过氧化氢相对饱和度"; |
|
|
|
setting.setValConfig("int", "85", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kcontinued_satur: { |
|
|
|
setting.name_ch = "消毒继续过氧化氢相对饱和度"; |
|
|
|
setting.setValConfig("int", "60", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kmax_humidity: { |
|
|
|
setting.name_ch = "允许消毒最大湿度"; |
|
|
|
setting.setValConfig("int", "90", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kdrainage_pump_speed: { |
|
|
|
setting.name_ch = "排液蠕动泵最大转速"; |
|
|
|
setting.setValConfig("int", "300", "0", "400"); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kinjection_pump_speed: { |
|
|
|
setting.name_ch = "喷射蠕动泵转速"; |
|
|
|
setting.setValConfig("int", "10", "0", "40"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kpre_heat_time_s: { |
|
|
|
setting.name_ch = "预热时间"; |
|
|
|
setting.setValConfig("int", "120", "0", "1200"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kstoped_humi: { |
|
|
|
setting.name_ch = "消毒停止相对湿度"; |
|
|
|
setting.setValConfig("int", "85", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kcontinued_humi: { |
|
|
|
setting.name_ch = "消毒继续相对湿度"; |
|
|
|
setting.setValConfig("int", "60", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, true, true, true); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::krecord_period_min: { |
|
|
|
setting.name_ch = "消毒日志记录间隔(Min)"; |
|
|
|
setting.setValConfig("int", "2", "1", "30"); |
|
|
|
setting.setVisibleRangeConfig(true, true, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::krecord_printer_period_min: { |
|
|
|
setting.name_ch = "消毒日志打印间隔(Min)"; |
|
|
|
setting.setValConfig("int", "5", "1", "30"); |
|
|
|
setting.setVisibleRangeConfig(true, true, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kloglevel: { |
|
|
|
setting.name_ch = "消毒等级"; |
|
|
|
setting.setValConfig("enum", "6", "", ""); |
|
|
|
setting.enums = vector<string>({"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}); |
|
|
|
setting.enum_display_names = vector<string>({"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kenable_bd_dehumidify: { |
|
|
|
setting.name_ch = "是否启用消毒前除湿"; |
|
|
|
setting.setValConfig("bool", "false", "", ""); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kbd_dehumidify_threshold: { |
|
|
|
setting.name_ch = "消毒前除湿阈值"; |
|
|
|
setting.setValConfig("int", "0", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kenable_ad_dehumidify: { |
|
|
|
setting.name_ch = "是否启用消毒后除湿"; |
|
|
|
setting.setValConfig("bool", "false", "", ""); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kad_dehumidify_threshold: { |
|
|
|
setting.name_ch = "消毒后除湿阈值"; |
|
|
|
setting.setValConfig("int", "0", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kenable_ad_degrade: { |
|
|
|
setting.name_ch = "是否启用消毒后降解"; |
|
|
|
setting.setValConfig("bool", "false", "", ""); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
case SettingId::kad_degrade_threshold: { |
|
|
|
setting.name_ch = "消毒后降解阈值"; |
|
|
|
setting.setValConfig("int", "0", "0", "100"); |
|
|
|
setting.setVisibleRangeConfig(true, false, false, false); |
|
|
|
break; |
|
|
|
} |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Setting SettingDBDao::getSettingConfig(SettingId setting_id) { |
|
|
|
for (auto& setting : settingInitTable) { |
|
|
|
if (setting.setting_id.eq(setting_id.getId())) { |
|
|
|
return setting; |
|
|
|
} |
|
|
|
} |
|
|
|
THROW_APP_EXCEPTION(err::kappe_code_error, fmt::format("SettingDBDao::getSettingConfig not found setting_id:{}", setting_id)); |
|
|
|
} |
|
|
|
|
|
|
|
Setting SettingDBDao::getSettingConfig(string setting_id) { |
|
|
|
for (auto& setting : settingInitTable) { |
|
|
|
if (setting.setting_id.eq(setting_id)) { |
|
|
|
return setting; |
|
|
|
} |
|
|
|
} |
|
|
|
THROW_APP_EXCEPTION(err::kappe_code_error, fmt::format("SettingDBDao::getSettingConfig not found setting_id:{}", setting_id)); |
|
|
|
} |
|
|
|
|
|
|
|
list<shared_ptr<Setting>> SettingDBDao::getRealtimeSetting() { |
|
|
|
list<shared_ptr<Setting>> settings; |
|
|
|
auto all = getAllSetting(); |
|
|
@ -105,13 +234,12 @@ void SettingDBDao::initialize() { // |
|
|
|
mkdir("db", 0755); |
|
|
|
keyvaldb.initialize("db/setting.db", "setting"); |
|
|
|
string version = keyvaldb.get("version"); |
|
|
|
initSettingDefaultValTable(); |
|
|
|
if (version != DB_VERSION) { |
|
|
|
keyvaldb.clear(); |
|
|
|
keyvaldb.set("version", DB_VERSION); |
|
|
|
// auto projSetting = ProjectPort::ins();
|
|
|
|
for (auto& setting : settingInitTable) { |
|
|
|
auto settingJson = setting.toJson(); |
|
|
|
keyvaldb.set(setting.setting_id, settingJson.dump()); |
|
|
|
keyvaldb.set(setting.setting_id, setting.default_val); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (const std::exception& e) { |
|
|
@ -121,33 +249,29 @@ void SettingDBDao::initialize() { // |
|
|
|
} |
|
|
|
|
|
|
|
list<shared_ptr<Setting>> SettingDBDao::getAllSetting() { //
|
|
|
|
|
|
|
|
auto allkeyVal = keyvaldb.getAll(); |
|
|
|
list<shared_ptr<Setting>> allSetting; |
|
|
|
for (auto& kv : allkeyVal) { |
|
|
|
auto setting = make_shared<Setting>(); |
|
|
|
if (kv->key == "version") { |
|
|
|
continue; |
|
|
|
for (auto& kv : settingInitTable) { |
|
|
|
shared_ptr<Setting> setting = make_shared<Setting>(kv); |
|
|
|
setting->val = keyvaldb.get(kv.setting_id); |
|
|
|
if (setting->val.empty()) { |
|
|
|
setting->val = kv.default_val; // 如果没有设置值,则使用默认值
|
|
|
|
} |
|
|
|
json val = json::parse(kv->val); |
|
|
|
*setting = val; |
|
|
|
allSetting.push_back(setting); |
|
|
|
} |
|
|
|
return allSetting; |
|
|
|
} |
|
|
|
|
|
|
|
shared_ptr<Setting> SettingDBDao::getSetting(string name) { |
|
|
|
string settingContent = keyvaldb.get(name); |
|
|
|
if (settingContent.empty()) { |
|
|
|
THROW_APP_EXCEPTION(err::kappe_code_error, "SettingDBDao::getSettingValAsString setting is null"); |
|
|
|
Setting settingConfig = getSettingConfig(name); |
|
|
|
shared_ptr<Setting> setting = make_shared<Setting>(settingConfig); |
|
|
|
setting->val = keyvaldb.get(name); |
|
|
|
if (setting->val.empty()) { |
|
|
|
setting->val = settingConfig.default_val; // 如果没有设置值,则使用默认值
|
|
|
|
} |
|
|
|
auto setting = make_shared<Setting>(); |
|
|
|
json val = json::parse(settingContent); |
|
|
|
*setting = val; |
|
|
|
return setting; |
|
|
|
} |
|
|
|
void SettingDBDao::updateSetting(shared_ptr<Setting> setting) { //
|
|
|
|
keyvaldb.set(setting->setting_id, setting->toJson().dump()); |
|
|
|
keyvaldb.set(setting->setting_id, setting->val); |
|
|
|
} |
|
|
|
|
|
|
|
bool SettingDBDao::setSettingVal(string name, string val) { |
|
|
|