Files
energy_storage/src/database/Dao.cpp

308 lines
8.8 KiB
C++
Raw Normal View History

#include "Dao.h"
#include "common/Utils.h"
std::string DAO::sqlPageLimit(int index, int size)
{
int startIndex = index * size;
if (startIndex < 0) { startIndex = 0; }
return " LIMIT " + std::to_string(startIndex) + "," + std::to_string(size);
}
bool DAO::count(DaoEntity& dao, std::string tableName, std::string condition, int& count)
{
std::string sql = "SELECT COUNT(*) count FROM " + tableName;
if (!condition.empty()) { sql += " WHERE " + condition; };
sql += ";";
std::vector<Fields> result;
bool ret = dao.exec(sql, result);
if (ret)
{
count = (result.size() > 0) ? result[0].getInt("count") : 0;
}
return ret;
}
static bool QueryCount(DaoEntity& dao, std::string sqlFrom, int& count)
{
std::vector<Fields> result;
bool ret = dao.exec("SELECT COUNT(*) count " + sqlFrom, result);
if (ret)
{
count = (result.size() > 0) ? result[0].getInt("count") : 0;
}
return ret;
}
static bool QueryPagination(std::string sqlFields, std::string sqlCondition, PageInfo& page, vector<Fields>& result)
{
DaoEntity dao("");
int count {0};
if (!QueryCount(dao, sqlCondition, count))
{
return false;
}
page.total = count;
std::string sql = "SELECT " + sqlFields + " " + sqlCondition + DAO::sqlPageLimit(page.index, page.size);
bool ret = dao.exec(sql, result);
if (!ret)
{
XLOGE() << "DAO database error: sql=" << sql;
}
return ret;
}
// 新增用户信息
Errcode DAO::insertUser(Fields& params)
{
std::string createTime = Utils::timeStr();
auto dao = DaoEntity::create(DMUser::TABLENAME);
std::string account = params.value(DMUser::ACCOUNT);
// step1: 查询
std::vector<Fields> result;
bool ret = dao->exec("SELECT * from user WHERE account='" + account + "';", result);
if (!ret)
{
return Errcode::ERR_DB_CONN;
}
if (result.size() > 0)
{
return Errcode::ERR_DB_DUPLICATE;
}
params.set(DMUser::CREATETIME, createTime);
ret = dao->insertFields(params);
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
Fields paramsUserRole;
paramsUserRole.set(DMUser::USER_ID, params.value(DMUser::USER_ID));
paramsUserRole.set(DMRole::ROLE_ID, params.value(DMRole::ROLE_ID));
paramsUserRole.set(DMUser::UPDATETIME, createTime);
ret = dao->duplicateUpdate(paramsUserRole, {DMUser::USER_ID});
return Errcode::OK;
}
// 分页查询用户信息列表
bool DAO::queryUserList(PageInfo& pageInfo, vector<Fields>& result)
{
std::string sqlFields = "u.*, r.role_id , r.name role_name";
std::string sqlCondition = "FROM USER u LEFT JOIN user_role ur ON ur.user_id = u.user_id LEFT JOIN ROLE r ON r.role_id =ur.role_id";
DaoEntity dao("");
bool ret = QueryPagination(sqlFields, sqlCondition, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: queryUserList failed.";
}
return ret;
}
Errcode DAO::updateUserById(Fields& params)
{
std::string createTime = Utils::timeStr();
std::string userId = params.value(DMUser::USER_ID);
std::string roleId = "";
if (params.hasKey(DMRole::ROLE_ID))
{
roleId = params.value(DMRole::ROLE_ID);
params.remove(DMUser::USER_ID);
}
auto dao = DaoEntity::create(DMUser::TABLENAME);
bool ret = dao->updateFields(params, "WHERE " + DMUser::USER_ID + "='" + userId + "'");
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
if (!roleId.empty())
{
dao->setTableName(DMUserRole::TABLENAME);
Fields paramsUserRole;
paramsUserRole.set(DMUserRole::USER_ID, params.value(DMUserRole::USER_ID));
paramsUserRole.set(DMUserRole::ROLE_ID, params.value(DMUserRole::ROLE_ID));
paramsUserRole.set(DMUserRole::UPDATETIME, createTime);
ret = dao->duplicateUpdate(paramsUserRole, {DMUser::USER_ID});
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
}
return Errcode::OK;
}
bool DAO::queryRoleList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result)
{
if (!dao) { dao = DaoEntity::create(""); }
std::string sql = "SELECT * FROM " + DMRole::TABLENAME + ";";
return dao->exec(sql, result);
}
bool DAO::queryRoleList(PageInfo& pageInfo, vector<Fields>& result)
{
DaoEntity dao("");
std::string sqlFrom = "FROM " + DMRole::TABLENAME;
bool ret = QueryPagination("*", sqlFrom, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: queryRoleList failed.";
}
return ret;
}
bool DAO::queryPermissionList(PageInfo& pageInfo, vector<Fields>& result)
{
DaoEntity dao("");
std::string sqlFrom = "FROM " + DMPermission::TABLENAME;
bool ret = QueryPagination("*", sqlFrom, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: queryPermissionList failed.";
}
return ret;
}
Errcode DAO::insertStation(Fields& params)
{
auto dao = DaoEntity::create(DMStation::TABLENAME);
params.remove(DMStation::STATION_ID);
params.check(DMStation::LATITUDE, "", "NULL");
params.check(DMStation::LONGITUDE, "", "NULL");
bool ret = dao->insertFields(params);
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
return Errcode::OK;
}
// 查询场站信息列表
bool DAO::queryStationList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result)
{
if (!dao) { dao = DaoEntity::create(""); }
std::string sql = "SELECT * FROM " + DMStation::TABLENAME;
return DaoEntity::execOnce(sql, result);
}
// 分页查询场站信息列表
bool DAO::queryStationList(PageInfo& pageInfo, vector<Fields>& result)
{
DaoEntity dao("");
std::string sqlFrom = "FROM " + DMStation::TABLENAME;
bool ret = QueryPagination("*", sqlFrom, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: queryStationList failed.";
}
return ret;
}
Errcode DAO::updateStationById(Fields& params)
{
std::string stationId = params.value(DMStation::STATION_ID);
if (stationId.empty())
{
return Errcode::ERR_DB_SQL;
}
params.remove(DMStation::STATION_ID);
auto dao = DaoEntity::create(DMStation::TABLENAME);
bool ret = dao->updateFields(params, "WHERE " + DMStation::STATION_ID + "='" + stationId + "'");
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
return Errcode::OK;
}
// 查询设备信息列表
bool DAO::queryDeviceList(std::shared_ptr<DaoEntity> dao, vector<Fields>& result)
{
if (!dao) { dao = DaoEntity::create(""); }
std::string sql = "SELECT * FROM " + DMDevice::TABLENAME;
return DaoEntity::execOnce(sql, result);
}
// 分页查询设备信息列表
bool DAO::queryDeviceList(PageInfo& pageInfo, vector<Fields>& result)
{
DaoEntity dao("");
std::string sqlFrom = "FROM " + DMDevice::TABLENAME;
bool ret = QueryPagination("*", sqlFrom, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: queryDeviceList failed.";
}
return ret;
}
// 查询设备类型定义
bool DAO::queryDeviceTypeDef(std::shared_ptr<DaoEntity> dao, vector<Fields>& result)
{
if (!dao) { dao = DaoEntity::create(""); }
std::string sql = "SELECT * FROM " + DMDeviceTypeDef::TABLENAME + ";";
return DaoEntity::execOnce(sql, result);
}
Errcode DAO::insertDevice(Fields& params)
{
auto dao = DaoEntity::create(DMDevice::TABLENAME);
bool ret = dao->insertFields(params);
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
return Errcode::OK;
}
Errcode DAO::updateDeviceById(Fields& params)
{
std::string deviceId = params.value(DMDevice::DEVICE_ID);
if (deviceId.empty())
{
return Errcode::ERR_DB_SQL;
}
auto dao = DaoEntity::create(DMDevice::TABLENAME);
bool ret = dao->updateFields(params, "WHERE " + DMDevice::DEVICE_ID + "='" + deviceId + "'");
if (!ret)
{
return Errcode::ERR_DB_SQL;
}
return Errcode::OK;
}
// 策略管理
bool DAO::queryPolicyList(PageInfo& pageInfo, vector<Fields>& result)
{
auto dao = DaoEntity::create("");
std::string sqlFrom = "FROM " + DMPolicy::TABLENAME;
bool ret = QueryPagination("*", sqlFrom, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: queryPolicyList failed.";
}
return ret;
}
// 系统日志管理
bool DAO::querySystemLogList(PageInfo& pageInfo, vector<Fields>& result)
{
DaoEntity dao("");
std::string sqlFrom = "FROM " + DMSystemLog::TABLENAME;
bool ret = QueryPagination("*", sqlFrom, pageInfo, result);
if (!ret)
{
XLOGE() << "DAO database error: querySystemLogList failed.";
}
return ret;
}
bool DAO::queryStatDataList(std::string startDate, std::string endDate, vector<Fields>& result)
{
std::string sql = "SELECT * FROM " + DMStatStation::TABLENAME + " WHERE dt BETWEEN '" + startDate + "' AND '" + endDate + "';";
return DaoEntity::execOnce(sql, result);
}