mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
上传项目代码
This commit is contained in:
218
src/database/DaoEntity.cpp
Normal file
218
src/database/DaoEntity.cpp
Normal file
@@ -0,0 +1,218 @@
|
||||
#include "DaoEntity.h"
|
||||
//#include "PvInstance.h"
|
||||
//#include "spdlogger.h"
|
||||
|
||||
MysqlOptions DaoEntity::options_;
|
||||
|
||||
DaoEntity::DaoEntity(string tb_name)
|
||||
{
|
||||
//MysqlOptions opts;
|
||||
//opts.host = "localhost";
|
||||
//opts.user = "root";
|
||||
//opts.password = "123456";
|
||||
//opts.port = 3306;
|
||||
//opts.dbname = "pvb";
|
||||
db_ = make_shared<MysqlClient>(DaoEntity::options_);
|
||||
if (!db_->isConnected())
|
||||
{
|
||||
//Global::data().status_msg = "数据库连接异常!";
|
||||
//PvInstance::send_user_event(nullptr, EUserEvent::ALARM_DB, "数据库连接异常!");
|
||||
}
|
||||
tableName_ = tb_name;
|
||||
}
|
||||
|
||||
DaoEntity::~DaoEntity()
|
||||
{
|
||||
db_ = nullptr;
|
||||
}
|
||||
|
||||
MysqlOptions& DaoEntity::mysqlOptions()
|
||||
{
|
||||
return DaoEntity::options_;
|
||||
}
|
||||
|
||||
std::shared_ptr<DaoEntity> DaoEntity::create(string tb_name)
|
||||
{
|
||||
std::shared_ptr<DaoEntity> dao = std::make_shared<DaoEntity>(tb_name);
|
||||
return (dao->isConnected() ? dao : nullptr);
|
||||
}
|
||||
|
||||
bool DaoEntity::execOnce(string sql)
|
||||
{
|
||||
auto db = make_shared<MysqlClient>(DaoEntity::options_);
|
||||
return db->exec(sql);
|
||||
}
|
||||
|
||||
bool DaoEntity::execOnce(string sql, vector<DataFields>& result)
|
||||
{
|
||||
auto db = make_shared<MysqlClient>(DaoEntity::options_);
|
||||
return db->exec(sql, result);
|
||||
}
|
||||
|
||||
void DaoEntity::setTableName(string tb_name)
|
||||
{
|
||||
tableName_ = tb_name;
|
||||
}
|
||||
|
||||
bool DaoEntity::isConnected()
|
||||
{
|
||||
return db_->isConnected();
|
||||
}
|
||||
|
||||
bool DaoEntity::exec(string sql)
|
||||
{
|
||||
return db_->exec(sql);
|
||||
}
|
||||
|
||||
bool DaoEntity::exec(string sql, vector<DataFields>& result)
|
||||
{
|
||||
return db_->exec(sql, result);
|
||||
}
|
||||
|
||||
bool DaoEntity::insertFields(DataFields& fields)
|
||||
{
|
||||
string sql = fields.get_insert_sql(tableName_);
|
||||
return this->db_->exec(sql);
|
||||
}
|
||||
|
||||
bool DaoEntity::insertFields(vector<DataFields>& vec_fields)
|
||||
{
|
||||
//"insert into TABLE () values ()";
|
||||
string sql = "insert into " + tableName_;
|
||||
bool first = true;
|
||||
string keys;
|
||||
string values;
|
||||
|
||||
for (auto& field : vec_fields)
|
||||
{
|
||||
keys = "";
|
||||
values = "";
|
||||
for (auto& item : field.fields())
|
||||
{
|
||||
const string& k = item.first;
|
||||
const string& v = item.second;
|
||||
if (first)
|
||||
{
|
||||
if (!keys.empty())
|
||||
{
|
||||
keys += ",";
|
||||
}
|
||||
keys += k;
|
||||
}
|
||||
if (!values.empty())
|
||||
{
|
||||
values += ",";
|
||||
}
|
||||
values += ("'" + v + "'");
|
||||
}
|
||||
if (first)
|
||||
{
|
||||
sql += (" (" + keys + ")");
|
||||
sql += (" values (" + values + ")");
|
||||
first = !first;
|
||||
}
|
||||
else
|
||||
{
|
||||
sql += (",(" + values + ")");
|
||||
}
|
||||
}
|
||||
sql += ";";
|
||||
return this->db_->exec(sql);
|
||||
}
|
||||
|
||||
bool DaoEntity::duplicateUpdate(DataFields& fields, vector<string>& keys)
|
||||
{
|
||||
//insert into device_attr(device_id, attr_id, attr_val) values('26', 'model', '型号1') on duplicate key update attr_val='型号1';
|
||||
string s_key;
|
||||
string s_val;
|
||||
for (auto& item : fields.fields())
|
||||
{
|
||||
if (!s_key.empty())
|
||||
{
|
||||
s_key += ","; s_val += ",";
|
||||
}
|
||||
s_key += (item.first);
|
||||
s_val += ("'" + item.second + "'");
|
||||
}
|
||||
string s_data;
|
||||
for (auto& k : keys)
|
||||
{
|
||||
if (!s_data.empty())
|
||||
{
|
||||
s_data += ",";
|
||||
}
|
||||
s_data += (k + "='" + fields.get_str(k) + "'");
|
||||
}
|
||||
string sql = "INSERT INTO " + tableName_ + "(" + s_key + ") VALUES (" + s_val + ") ON duplicate KEY UPDATE " + s_data;
|
||||
return this->db_->exec(sql);
|
||||
}
|
||||
|
||||
//void DaoEntity::queryFields(const string& condition, DaoPageinfo& pageinfo, vector<map<string, string>>& result)
|
||||
//{
|
||||
// this->query_by_page(condition, pageinfo, [&](map<string, string>& row) mutable {
|
||||
// result.push_back(row);
|
||||
// });
|
||||
//}
|
||||
|
||||
|
||||
bool DaoEntity::queryFields(string keys, const string& sql_c, vector<DataFields>& result)
|
||||
{
|
||||
ostringstream oss;
|
||||
oss << "SELECT " + keys + " FROM " << tableName_ << (" " + sql_c) << "; ";
|
||||
return this->db_->exec(oss.str(), result);
|
||||
}
|
||||
|
||||
bool DaoEntity::queryFields(string keys, const string& sql_c, PageInfo& pageinfo, vector<DataFields>& result)
|
||||
{
|
||||
ostringstream oss;
|
||||
oss << "SELECT count(1) total FROM `" << tableName_ << "` " << sql_c << ";";
|
||||
|
||||
vector<DataFields> res_total;
|
||||
if (!this->db_->exec(oss.str().c_str(), res_total))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (res_total.size() <= 0)
|
||||
{
|
||||
pageinfo.total = 0;
|
||||
return true;
|
||||
}
|
||||
pageinfo.total = res_total[0].get_int("total");
|
||||
if (pageinfo.total <= 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
pageinfo.page_max = pageinfo.total / pageinfo.page_size + (pageinfo.total % pageinfo.page_size > 0 ? 1 : 0);
|
||||
oss.str("");
|
||||
if (pageinfo.page_id <= 0)
|
||||
{
|
||||
pageinfo.page_id = 1;
|
||||
}
|
||||
int start = (pageinfo.page_id - 1) * pageinfo.page_size;
|
||||
oss << "SELECT " << keys << " FROM `" << tableName_ << "` " << sql_c << " LIMIT " << start << "," << pageinfo.page_size << ";";
|
||||
return this->db_->exec(oss.str().c_str(), result);
|
||||
}
|
||||
|
||||
bool DaoEntity::updateFields(DataFields& fields, const string& sql_c)
|
||||
{
|
||||
string sql = fields.get_update_sql(tableName_, sql_c);
|
||||
if (sql_c.empty())
|
||||
{
|
||||
//Spdlogger::error("[DB] update condition is empty, not exec, sql={}", sql);
|
||||
return false;
|
||||
}
|
||||
return this->db_->exec(sql.c_str());
|
||||
}
|
||||
|
||||
bool DaoEntity::updateFields(DataFields& fields, vector<string> vec_keys, const string& sql_c)
|
||||
{
|
||||
string sql = fields.get_update_sql(tableName_, vec_keys, sql_c);
|
||||
if (sql_c.empty())
|
||||
{
|
||||
//Spdlogger::error("[DB] update condition is empty, not exec, sql={}", sql);
|
||||
return false;
|
||||
}
|
||||
return this->db_->exec(sql.c_str());
|
||||
}
|
||||
Reference in New Issue
Block a user