From 20d8d3e0ca8b2e382578c60514ce6f4c03665ab1 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 8 Sep 2023 15:29:35 +0800 Subject: [PATCH] update --- README.md | 7 + src/db/db_service.cpp | 326 +++++++++++++++++++++++++++---------------- src/db/db_service.hpp | 94 +++++++------ src/db/user_behavior_des.cpp | 48 +++++++ src/db/user_behavior_des.hpp | 38 +++++ src/main_control_service.cpp | 94 +++++++++++-- 6 files changed, 432 insertions(+), 175 deletions(-) create mode 100644 src/db/user_behavior_des.cpp create mode 100644 src/db/user_behavior_des.hpp diff --git a/README.md b/README.md index 5f0837f..0f8ed87 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ 2. iflytop9973属于admin的超级密码 3. 修改用户密码 OK 4. 登陆时给出提示,用户不存在,或者密码错误 + +消毒前,如果湿度太大,不允许消毒。 添加预设参数 添加预设参数配置 @@ -23,6 +25,11 @@ 通过getState可以获得到log,小数 +排液自动停止 + +水禁传感器测试 + + ``` # 测试指令 diff --git a/src/db/db_service.cpp b/src/db/db_service.cpp index 582dc81..c3f3a46 100644 --- a/src/db/db_service.cpp +++ b/src/db/db_service.cpp @@ -2,9 +2,9 @@ // #include +#include #include "db_service.hpp" - // #include "iflytop/components/sqlite_orm/sqlite_orm.hpp" @@ -37,48 +37,25 @@ using namespace nlohmann; make_column("permission_level", &Setting::permission_level), /**/ \ make_column("val", &Setting::val)) -// #define SETTING_DB_STRUCT \ -// make_table("settings", /**/ \ -// make_column("id", &PreSetting::id, primary_key()), /**/ \ -// make_column("name", &PreSetting::group_id), /**/ \ -// make_column("name", &PreSetting::name), /**/ \ -// make_column("name_ch", &PreSetting::name_ch), /**/ \ -// make_column("val_lower_limit", &PreSetting::val_lower_limit), /**/ \ -// make_column("val_upper_limit", &PreSetting::val_upper_limit), /**/ \ -// make_column("permission_level", &PreSetting::permission_level), /**/ \ -// make_column("val", &PreSetting::val)) - -// // PreSetting - -#define DISINFECTION_RECORD_DB_STRUCT \ - DISINFECTION_RECORD_DB, \ - make_table("disinfection_records", /**/ \ - make_column("id", &DisinfectionRecord::id, primary_key().autoincrement()), /**/ \ - make_column("uuid", &DisinfectionRecord::uuid), /**/ \ - make_column("uid", &DisinfectionRecord::uid), /**/ \ - make_column("date", &DisinfectionRecord::date), /**/ \ - make_column("loglevel", &DisinfectionRecord::loglevel), /**/ \ - make_column("duration", &DisinfectionRecord::duration)), /**/ \ - make_table("sensor_records", /**/ \ - make_column("id", &SensorRecord::id, primary_key().autoincrement()), /**/ \ - make_column("disinfection_id", &SensorRecord::disinfection_id), /**/ \ - make_column("date", &SensorRecord::date), /**/ \ - make_column("heating_strip", &SensorRecord::heating_strip), /**/ \ - make_column("air_compressor", &SensorRecord::air_compressor), /**/ \ - make_column("sprinkler_pump", &SensorRecord::sprinkler_pump), /**/ \ - make_column("disinfectant_volume", &SensorRecord::disinfectant_volume), /**/ \ - make_column("h2o2_1", &SensorRecord::h2o2_1), /**/ \ - make_column("temp_1", &SensorRecord::temp_1), /**/ \ - make_column("humid_1", &SensorRecord::humid_1), /**/ \ - make_column("saturation_1", &SensorRecord::saturation_1), /**/ \ - make_column("h2o2_2", &SensorRecord::h2o2_2), /**/ \ - make_column("temp_2", &SensorRecord::temp_2), /**/ \ - make_column("humid_2", &SensorRecord::humid_2), /**/ \ - make_column("saturation_2", &SensorRecord::saturation_2), /**/ \ - make_column("h2o2_3", &SensorRecord::h2o2_3), /**/ \ - make_column("temp_3", &SensorRecord::temp_3), /**/ \ - make_column("humid_3", &SensorRecord::humid_3), /**/ \ - make_column("saturation_3", &SensorRecord::saturation_3)) +#define FORMULA_DB_STRUCT \ + make_table("formulas", /**/ \ + make_column("id", &Formula::id, primary_key()), /**/ \ + make_column("formula_id", &Formula::formula_id), /**/ \ + make_column("stoped_gs", &Formula::stoped_gs), /**/ \ + make_column("continued_gs", &Formula::continued_gs), /**/ \ + make_column("stoped_satur", &Formula::stoped_satur), /**/ \ + make_column("continued_satur", &Formula::continued_satur), /**/ \ + make_column("stoped_humi", &Formula::stoped_humi), /**/ \ + make_column("continued_humi", &Formula::continued_humi), /**/ \ + make_column("injection_pump_speed", &Formula::injection_pump_speed)) + +#define USER_BEHAVIOR_RECORD_STRUCT \ + make_table("user_behavior_records", /**/ \ + make_column("id", &UserBehaviorRecord::id, primary_key().autoincrement()), /**/ \ + make_column("uid", &UserBehaviorRecord::uid), /**/ \ + make_column("date", &UserBehaviorRecord::date), /**/ \ + make_column("behavior", &UserBehaviorRecord::behavior), /**/ \ + make_column("behaviorinfo", &UserBehaviorRecord::behaviorinfo)) DBService::DBService(/* args */) {} @@ -90,7 +67,6 @@ void DBService::initialize() { // init_usr_db(); init_setting_db(); - init_disinfection_record_db(); json settings = getAllSettingJson(); logger->info("settings: {}", settings.dump()); @@ -177,17 +153,19 @@ id setting_name setting_name_ch val_upper_limit val_lower_limi } while (!suc); } -void DBService::init_disinfection_record_db() { +void DBService::init_formula_db() { bool suc = false; + do { try { - logger->info("init disinfection record db"); - auto storage = make_storage(DISINFECTION_RECORD_DB_STRUCT); + logger->info("init formula db"); + auto storage = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); storage.sync_schema(); + suc = true; } catch (const std::exception& e) { - logger->error("init disinfection record db failed: {}", e.what()); - system("rm -rf disinfection_record.db"); + logger->error("init setting db failed: {}", e.what()); + system("rm -rf setting.db"); sleep(1); } } while (!suc); @@ -380,83 +358,191 @@ int DBService::getSettingVal(string name) { return setting[0].val; } -json DBService::getAllRecords(string disinfection_id) { - json j_records; - auto recordtable = make_storage(DISINFECTION_RECORD_DB_STRUCT); - - // int id; - // string disinfection_id; - // string date; - // int heating_strip; - // int air_compressor; - // int sprinkler_pump; - // int disinfectant_volume; - // int h2o2_1; - // int temp_1; - // int humid_1; - // int saturation_1; - // int h2o2_2; - // int temp_2; - // int humid_2; - // int saturation_2; - // int h2o2_3; - // int temp_3; - // int humid_3; - // int saturation_3; - - recordtable.sync_schema(); - auto all = recordtable.get_all(where(c(&SensorRecord::disinfection_id) == disinfection_id)); - for (auto& r : all) { - json j_record; - j_record["id"] = r.id; - j_record["disinfection_id"] = r.disinfection_id; - j_record["date"] = r.date; - j_record["heating_strip"] = r.heating_strip; - j_record["air_compressor"] = r.air_compressor; - j_record["sprinkler_pump"] = r.sprinkler_pump; - j_record["disinfectant_volume"] = r.disinfectant_volume; - j_record["h2o2_1"] = r.h2o2_1; - j_record["temp_1"] = r.temp_1; - j_record["humid_1"] = r.humid_1; - j_record["saturation_1"] = r.saturation_1; - j_record["h2o2_2"] = r.h2o2_2; - j_record["temp_2"] = r.temp_2; - j_record["humid_2"] = r.humid_2; - j_record["saturation_2"] = r.saturation_2; - j_record["h2o2_3"] = r.h2o2_3; - j_record["temp_3"] = r.temp_3; - j_record["humid_3"] = r.humid_3; - j_record["saturation_3"] = r.saturation_3; - j_records.push_back(j_record); +list> DBService::getAllFormula() { + list> formulas; + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); + formulatable.sync_schema(); + auto all = formulatable.get_all(); + for (auto& f : all) { + formulas.push_back(make_shared(f)); } - return j_records; + return formulas; } -void DBService::insertSensorRecord(shared_ptr record) { - if (!record) { - logger->error("insert sensor record failed: record is null"); - return; +shared_ptr DBService::getFormula(int id) { + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); + formulatable.sync_schema(); + auto formula = formulatable.get_all(where(c(&Formula::id) == id)); + if (formula.size() == 0) { + return nullptr; } - auto recordtable = make_storage(DISINFECTION_RECORD_DB_STRUCT); - recordtable.sync_schema(); - recordtable.insert(*record); + return make_shared(formula[0]); } -void DBService::insertDisinfectionRecord(shared_ptr record) { - if (!record) { - logger->error("insert disinfection record failed: record is null"); - return; + +json DBService::getAllFormulaJson() { + json j_formulas; + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); + formulatable.sync_schema(); + auto all = formulatable.get_all(); + for (auto& f : all) { + json j_formula; + j_formula["id"] = f.id; + j_formula["formula_id"] = f.formula_id; + j_formula["stoped_gs"] = f.stoped_gs; + j_formula["continued_gs"] = f.continued_gs; + j_formula["stoped_satur"] = f.stoped_satur; + j_formula["continued_satur"] = f.continued_satur; + j_formula["stoped_humi"] = f.stoped_humi; + j_formula["continued_humi"] = f.continued_humi; + j_formula["injection_pump_speed"] = f.injection_pump_speed; + j_formulas.push_back(j_formula); } - auto recordtable = make_storage(DISINFECTION_RECORD_DB_STRUCT); - recordtable.sync_schema(); - recordtable.insert(*record); + return j_formulas; +} +void DBService::addFormula(string formula_id, string stoped_gs, string continued_gs, string stoped_satur, string continued_satur, string stoped_humi, + string continued_humi, string injection_pump_speed) { + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); + formulatable.sync_schema(); + Formula f; + f.formula_id = formula_id; + f.stoped_gs = stoped_gs; + f.continued_gs = continued_gs; + f.stoped_satur = stoped_satur; + f.continued_satur = continued_satur; + f.stoped_humi = stoped_humi; + f.continued_humi = continued_humi; + f.injection_pump_speed = injection_pump_speed; + formulatable.insert(f); + + formulatable.sync_schema(); } -void DBService::setDisinfectionRecordDuration(string disinfection_id, int duration) { - auto recordtable = make_storage(DISINFECTION_RECORD_DB_STRUCT); - recordtable.sync_schema(); - auto record = recordtable.get_all(where(c(&DisinfectionRecord::uuid) == disinfection_id)); - if (record.size() == 0) { - logger->error("set disinfection record duration failed: {} not found", disinfection_id); + +void DBService::addFormula(string formula_id, int stoped_gs, int continued_gs, int stoped_satur, int continued_satur, int stoped_humi, int continued_humi, + int injection_pump_speed) { + addFormula(formula_id, to_string(stoped_gs), to_string(continued_gs), to_string(stoped_satur), to_string(continued_satur), to_string(stoped_humi), + to_string(continued_humi), to_string(injection_pump_speed)); +} +void DBService::delFormula(int id) { + // remove_all + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); + formulatable.sync_schema(); + formulatable.remove_all(where(c(&Formula::id) == id)); + formulatable.sync_schema(); +} +void DBService::updateFormula(int id, string column, string val) { + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); + formulatable.sync_schema(); + auto formula = formulatable.get_all(where(c(&Formula::id) == id)); + if (formula.size() == 0) { return; } - record[0].duration = duration; - recordtable.update(record[0]); + if (column == "formula_id") { + formula[0].formula_id = val; + } else if (column == "stoped_gs") { + formula[0].stoped_gs = val; + } else if (column == "continued_gs") { + formula[0].continued_gs = val; + } else if (column == "stoped_satur") { + formula[0].stoped_satur = val; + } else if (column == "continued_satur") { + formula[0].continued_satur = val; + } else if (column == "stoped_humi") { + formula[0].stoped_humi = val; + } else if (column == "continued_humi") { + formula[0].continued_humi = val; + } else if (column == "injection_pump_speed") { + formula[0].injection_pump_speed = val; + } + formulatable.update(formula[0]); + formulatable.sync_schema(); +} + +int DBService::getUserBehaviorRecordCount() { + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); + user_behavior_record_table.sync_schema(); + return user_behavior_record_table.count(where(c(&UserBehaviorRecord::id) > 0)); +} +int DBService::getUserBehaviorRecordTheFirstId() { + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); + user_behavior_record_table.sync_schema(); + auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).asc()); + if (all.size() == 0) { + return -1; + } + return all[0].id; +} + +json DBService::getUserBehaviorRecordDescJson(int page, int page_size) { + json j_user_behavior_records; + + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); + user_behavior_record_table.sync_schema(); + + auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).desc()); + + int i = 0; + + int from = page * page_size; + int to = (page + 1) * page_size; + + for (auto& u : all) { + if (i >= from && i < to) { + json j_user_behavior_record; + j_user_behavior_record["id"] = u.id; + j_user_behavior_record["uid"] = u.uid; + j_user_behavior_record["behavior"] = u.behavior; + j_user_behavior_record["behaviorZH"] = user_behavior_to_str((user_behavior_t)u.behavior); + j_user_behavior_record["behaviorinfo"] = u.behaviorinfo; + j_user_behavior_record["date"] = u.date; + j_user_behavior_records["iterms"].push_back(j_user_behavior_record); + } else if (i >= to) { + break; + } + i++; + } + + j_user_behavior_records["total"] = all.size(); + j_user_behavior_records["page"] = page; + j_user_behavior_records["totalpage"] = all.size() / page_size + all.size() % page_size == 0 ? 0 : 1; + + return j_user_behavior_records; +} + +static string getTime() { + struct tm tm = {0}; + + time_t t = ::time(nullptr); + struct tm* tmp = localtime_r(&t, &tm); + return fmt::format("{:0>4}-{:0>2}{:0>2}-{:0>2}:{:0>2}:{:0>2}", tm.tm_year + 1900, // + tm.tm_mon + 1, // + tm.tm_mday, // + tm.tm_hour, // + tm.tm_min, tm.tm_sec); +} + +void DBService::addUserBehaviorRecord(string uid, int behavior, string behaviorinfo) { + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); + user_behavior_record_table.sync_schema(); + UserBehaviorRecord u; + u.uid = uid; + u.behavior = behavior; + u.behaviorinfo = behaviorinfo; + u.date = getTime(); + user_behavior_record_table.insert(u); + user_behavior_record_table.sync_schema(); + + auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).asc()); + /** + * @brief 如果记录总数量大于5000条,删除第一条 + */ + if (all.size() > USER_BEHAVIOR_RECORD_DB_MAX_RECORDS) { + user_behavior_record_table.remove_all(where(c(&UserBehaviorRecord::id) == all[0].id)); + user_behavior_record_table.sync_schema(); + } + return; +} +void DBService::cleanUserBehaviorRecord() { + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); + user_behavior_record_table.sync_schema(); + user_behavior_record_table.remove_all(where(c(&UserBehaviorRecord::id) > 0)); + user_behavior_record_table.sync_schema(); } \ No newline at end of file diff --git a/src/db/db_service.hpp b/src/db/db_service.hpp index 88d5cfe..c65a43a 100644 --- a/src/db/db_service.hpp +++ b/src/db/db_service.hpp @@ -16,10 +16,15 @@ #include "iflytop/core/spdlogfactory/logger.hpp" #include "iflytop/core/thread/thread.hpp" +#include "user_behavior_des.hpp" -#define USER_DB "user.db" -#define SETTING_DB "setting.db" -#define DISINFECTION_RECORD_DB "disinfection_record.db" +#define USER_DB "user.db" +#define SETTING_DB "setting.db" +#define DISINFECTION_RECORD_DB "disinfection_record.db" +#define FORMULA_DB "formula.db" +#define USER_BEHAVIOR_RECORD_DB "user_behavior_record.db" + +#define USER_BEHAVIOR_RECORD_DB_MAX_RECORDS 5000 /** * @brief * @@ -70,51 +75,29 @@ struct Setting { int val; }; -struct PreSetting { - public: - int id; - int group_id; - int stoped_gs; - int continued_gs; - int stoped_satur; - int continued_satur; - int stoped_humi; - int continued_humi; - int injection_pump_speed; -}; - -struct DisinfectionRecord { +struct Formula { public: int id; - string uuid; - string uid; - string date; + string formula_id; + string stoped_gs; string loglevel; - int duration; + string continued_gs; + string stoped_satur; + string continued_satur; + string stoped_humi; + string continued_humi; + string injection_pump_speed; }; -struct SensorRecord { - public: +struct UserBehaviorRecord { int id; - string disinfection_id; + string uid; string date; - int heating_strip; - int air_compressor; - int sprinkler_pump; - int disinfectant_volume; - int h2o2_1; - int temp_1; - int humid_1; - int saturation_1; - int h2o2_2; - int temp_2; - int humid_2; - int saturation_2; - int h2o2_3; - int temp_3; - int humid_3; - int saturation_3; + int behavior; + string behaviorinfo; }; + + } // namespace db using namespace db; class DBService : public enable_shared_from_this { @@ -159,18 +142,37 @@ class DBService : public enable_shared_from_this { public: /******************************************************************************* - * SensorRecord_operation * + * Formula * + *******************************************************************************/ + + list> getAllFormula(); + json getAllFormulaJson(); + void addFormula(string formula_id, string stoped_gs, string continued_gs, string stoped_satur, string continued_satur, string stoped_humi, + string continued_humi, string injection_pump_speed); + void addFormula(string formula_id, int stoped_gs, int continued_gs, int stoped_satur, int continued_satur, int stoped_humi, int continued_humi, + int injection_pump_speed); + void delFormula(int id); + void updateFormula(int id, string column, string val); + + shared_ptr getFormula(int id); + + /******************************************************************************* + * UserBehaviorRecord * *******************************************************************************/ - json getAllRecords(string disinfection_id); - void insertSensorRecord(shared_ptr record); - void insertDisinfectionRecord(shared_ptr record); - void setDisinfectionRecordDuration(string disinfection_id, int duration); + list> getAllUserBehaviorRecord(); + + int getUserBehaviorRecordCount(); + int getUserBehaviorRecordTheFirstId(); + + json getUserBehaviorRecordDescJson(int page, int page_size); + void addUserBehaviorRecord(string uid, int behavior, string behaviorinfo); + void cleanUserBehaviorRecord(); private: void init_usr_db(); void init_setting_db(); - void init_disinfection_record_db(); + void init_formula_db(); }; }; // namespace iflytop diff --git a/src/db/user_behavior_des.cpp b/src/db/user_behavior_des.cpp new file mode 100644 index 0000000..6f8631e --- /dev/null +++ b/src/db/user_behavior_des.cpp @@ -0,0 +1,48 @@ +#include "user_behavior_des.hpp" + +using namespace iflytop; +using namespace iflytop::db; + +namespace iflytop { +namespace db { + +string user_behavior_to_str(user_behavior_t behavior) { + switch (behavior) { + case kbehavior_login: + return "登陆"; + case kbehavior_logout: + return "登出"; + case kbehavior_add_user: + return "添加用户"; + case kbehavior_del_user: + return "删除用户"; + case kbehavior_update_user_permission_level: + return "更新用户权限"; + case kbehavior_update_user_passwd: + return "更新用户密码"; + case kbehavior_set_setting_val: + return "设置参数"; + case kbehavior_add_formula: + return "添加配方"; + case kbehavior_del_formula: + return "删除配方"; + case kbehavior_update_formula: + return "更新配方"; + case kbehavior_do_disinfection: + return "开始消毒"; + case kbehavior_stop_disinfection: + return "停止消毒"; + case kbehavior_do_formula: + return "执行配方"; + case kbehavior_update_setting_val_on_disinfection: + return "消毒中更新参数"; + case kbehavior_export_data: + return "导出数据"; + default: + break; + } + return "未知行为"; +} + +} // namespace db +} // namespace iflytop diff --git a/src/db/user_behavior_des.hpp b/src/db/user_behavior_des.hpp new file mode 100644 index 0000000..bda1cb9 --- /dev/null +++ b/src/db/user_behavior_des.hpp @@ -0,0 +1,38 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +namespace iflytop { +using namespace std; + +namespace db { +typedef enum { + kbehavior_login = 0, + kbehavior_logout, + kbehavior_add_user, + kbehavior_del_user, + kbehavior_update_user_permission_level, + kbehavior_update_user_passwd, + kbehavior_set_setting_val, + kbehavior_add_formula, + kbehavior_del_formula, + kbehavior_update_formula, + kbehavior_do_disinfection, + kbehavior_stop_disinfection, + kbehavior_do_formula, + kbehavior_update_setting_val_on_disinfection, + kbehavior_export_data, +} user_behavior_t; + +string user_behavior_to_str(user_behavior_t behavior); + +} // namespace db + +} // namespace iflytop \ No newline at end of file diff --git a/src/main_control_service.cpp b/src/main_control_service.cpp index c919450..8ebe6c9 100644 --- a/src/main_control_service.cpp +++ b/src/main_control_service.cpp @@ -324,15 +324,23 @@ void MainControlService::processFrontEndMessage_Disinfection(weak_ptr * 消毒相关指令 * *******************************************************************************/ string cmdstr = cmd["command"]; - if (cmdstr == "startDisinfection2") { - m_disinfectionCtrlService->startDisinfection(jsonGet(cmd["loglevel"]), - jsonGet(cmd["injection_pump_speed"]), // - jsonGet(cmd["stoped_gs"]), // - jsonGet(cmd["continued_gs"]), - jsonGet(cmd["stoped_satur"]), // - jsonGet(cmd["continued_satur"]), // - jsonGet(cmd["stoped_humi"]), - jsonGet(cmd["continued_humi"])); // + if (cmdstr == "startFormula") { + int id = jsonGet(cmd["id"]); + auto formul = m_dbService->getFormula(id); + if (!formul) { + logger->error("formula id {} not exist", id); + receipt["ackcode"] = err::error_code_get_get_ecode(err::kce, err::kdb_operate_error); + receipt["ackcodeInfo"] = err::error_code_get_desc(err::kce, err::kdb_operate_error, ""); + return; + } + m_disinfectionCtrlService->startDisinfection(atoi(formul->loglevel.c_str()), // + atoi(formul->injection_pump_speed.c_str()), // + atoi(formul->stoped_gs.c_str()), // + atoi(formul->continued_gs.c_str()), // + atoi(formul->stoped_satur.c_str()), // + atoi(formul->continued_satur.c_str()), // + atoi(formul->stoped_humi.c_str()), // + atoi(formul->continued_humi.c_str())); // return; } if (cmdstr == "startDisinfection") { @@ -510,6 +518,74 @@ void MainControlService::processFrontEndMessage(weak_ptr webSocket, j receipt["disinfectionConfig"]["continued_humi"] = m_disinfectionCtrlService->m_context.continued_humi; return; } + + /** + * @brief 配方操作 + */ + + if (cmdstr == "getAllFormula") { + receipt["formula"] = m_dbService->getAllFormulaJson(); + return; + } + + if (cmdstr == "addFormula") { + m_dbService->addFormula(cmd["formula_id"], // + jsonGet(cmd["stoped_gs"]), // + jsonGet(cmd["continued_gs"]), // + jsonGet(cmd["stoped_satur"]), // + jsonGet(cmd["continued_satur"]), // + jsonGet(cmd["stoped_humi"]), // + jsonGet(cmd["continued_humi"]), // + jsonGet(cmd["injection_pump_speed"])); + return; + } + + if (cmdstr == "delFormula") { + m_dbService->delFormula(jsonGet(cmd["id"])); + return; + } + + if (cmdstr == "updateFormula") { + string val_str; + if (cmd["val"].is_string()) { + val_str = cmd["val"]; + } else { + val_str = std::to_string(cmd["val"].get()); + } + m_dbService->updateFormula(jsonGet(cmd["id"]), cmd["column"], val_str); + return; + } + + if (cmdstr == "getUserBehaviorRecordDescJson") { + receipt["records"] = m_dbService->getUserBehaviorRecordDescJson(jsonGet(cmd["page"]), jsonGet(cmd["page_size"])); + return; + } + + if (cmdstr == "cleanUserBehaviorRecord") { + m_dbService->cleanUserBehaviorRecord(); + return; + } + // 导入用户行为测试数据 + if (cmdstr == "importTestData") { + for (size_t i = 0; i < 100; i++) { + m_dbService->addUserBehaviorRecord("admin", kbehavior_login, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_logout, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_add_user, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_del_user, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_update_user_permission_level, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_update_user_passwd, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_set_setting_val, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_add_formula, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_del_formula, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_update_formula, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_do_disinfection, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_stop_disinfection, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_do_formula, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_update_setting_val_on_disinfection, "(....)"); + m_dbService->addUserBehaviorRecord("admin", kbehavior_export_data, "(....)"); + } + return; + } } HttpResponsePtr MainControlService::hello_world( //