优化命名
This commit is contained in:
@@ -0,0 +1,409 @@
|
||||
|
||||
#include <sqliteManager/sqlManager.h>
|
||||
#include <FrontendBackendBridge.h>
|
||||
//老代码
|
||||
std::vector<std::string> getFutureDates(int days)
|
||||
{
|
||||
std::vector<std::string> futureDates;
|
||||
|
||||
// 获取当前时间点
|
||||
auto now = std::chrono::system_clock::now();
|
||||
|
||||
for (int i = 0; i < days; i++) {
|
||||
// 将当前时间点加上指定天数
|
||||
auto future = now + std::chrono::hours(24 * i);
|
||||
|
||||
// 将时间转换为时间结构体
|
||||
std::time_t futureTime = std::chrono::system_clock::to_time_t(future);
|
||||
|
||||
// 将时间结构体格式化为 "年月日" 的字符串
|
||||
std::tm* futureTm = std::localtime(&futureTime);
|
||||
std::ostringstream oss;
|
||||
oss << futureTm->tm_year + 1900 << '-' << std::setw(2) << std::setfill('0') << futureTm->tm_mon + 1
|
||||
<< '-' << std::setw(2) << std::setfill('0') << futureTm->tm_mday;
|
||||
|
||||
futureDates.push_back(oss.str());
|
||||
}
|
||||
|
||||
return futureDates;
|
||||
}
|
||||
std::string getCurrentDate()
|
||||
{
|
||||
std::time_t now = std::time(nullptr);
|
||||
std::tm* localTime = std::localtime(&now);
|
||||
|
||||
std::ostringstream oss;
|
||||
oss << localTime->tm_year + 1900 << "-"
|
||||
<< std::setw(2) << std::setfill('0') << localTime->tm_mon + 1 << "-"
|
||||
<< std::setw(2) << std::setfill('0') << localTime->tm_mday;
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
std::string getPreviousDate()
|
||||
{
|
||||
std::time_t now = std::time(nullptr);
|
||||
|
||||
const std::time_t oneDay = 24 * 60 * 60;
|
||||
std::time_t previousTime = now - oneDay;
|
||||
|
||||
std::tm* previousLocalTime = std::localtime(&previousTime);
|
||||
|
||||
std::ostringstream oss;
|
||||
oss << previousLocalTime->tm_year + 1900 << "-"
|
||||
<< std::setw(2) << std::setfill('0') << previousLocalTime->tm_mon + 1 << "-"
|
||||
<< std::setw(2) << std::setfill('0') << previousLocalTime->tm_mday;
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
void sqlManager::uninitlize()
|
||||
{
|
||||
sqlite3_close(db);
|
||||
}
|
||||
sqlTableDatas sqlManager::selectSingleData(std::string selectStr, std::string SN)
|
||||
{
|
||||
sqlTableDatas selectResult;
|
||||
dbPtr->Select(getCurrentDate(), { selectStr }, "SN", SN, selectResult);
|
||||
if (selectResult.rowDatas.size() == 0)//无指定数据 查找前一天
|
||||
dbPtr->Select(getPreviousDate(), { selectStr }, "SN", SN, selectResult);
|
||||
|
||||
return selectResult;
|
||||
}
|
||||
sqlTableDatas sqlManager::selectAllData(std::string SN)
|
||||
{
|
||||
//dbPtr->Update(getCurrentTableName(), { {"send","1" } }, "sn", SN);
|
||||
sqlTableDatas selectResult;
|
||||
dbPtr->Select(getCurrentDate(), {}, "SN", SN, selectResult);
|
||||
if(selectResult.rowDatas.size()==0)//无指定数据 查找前一天
|
||||
dbPtr->Select(getPreviousDate(), {}, "SN", SN, selectResult);
|
||||
return selectResult;
|
||||
}
|
||||
void sqlManager::initPara(std::string dataBasePath, bool backup)
|
||||
{
|
||||
std::cout << "SQL runing Init..." << std::endl;
|
||||
dbPtr = new sqliteModule(dataBasePath);//初始化
|
||||
dbPtr->backup(dataBasePath + getCurrentDate() + ".db");//备份
|
||||
std::vector<std::string>tables = getFutureDates(180);
|
||||
|
||||
//整合所需要的数据名
|
||||
std::vector<std::string>dataStr;
|
||||
for (auto data : bridge.back.json.summaryData.datas)
|
||||
dataStr.push_back(data.first.toStdString());
|
||||
|
||||
//创建未来180天的表格
|
||||
for (auto table : tables)
|
||||
dbPtr->createTable(table, dataStr);
|
||||
|
||||
//查询是否有后期添加未创建的表格
|
||||
for (auto table : tables)
|
||||
{
|
||||
std::vector<std::string> res = dbPtr->getColumn(table);
|
||||
std::unordered_map<std::string, int> map;
|
||||
for (auto str : res)
|
||||
map.insert({ str,0 });
|
||||
|
||||
for (auto str : dataStr)//判断此值是否存在
|
||||
{
|
||||
auto iter = map.find(str);//寻找
|
||||
if (iter == map.end())//找不到
|
||||
{
|
||||
dbPtr->addColumn(table, str, "REAL");//插入
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << "SQL init end" << std::endl;
|
||||
//std::vector<sqlData> dataVec = {
|
||||
//{"_2DPResult" , "8096"},
|
||||
//{"_2DNResult" , "8097"},
|
||||
//{"_3DResult" , "8098"},
|
||||
|
||||
//{"P_JiZhuZangWu" , "6120"},
|
||||
//{"P_JiZhuHuaHeng" , "6121"},
|
||||
//{"P_JueYuanQuanFanHuang" , "6122"},
|
||||
//{"P_JiZhuAoDian" , "6123"},
|
||||
//{"P_LvDingHanJie" , "6124"},
|
||||
//{"P_JiZhuCanQue" , "6125"},
|
||||
//{"P_JueYuanPianPoSun" , "6126"},
|
||||
//{"P_LvDingBianSe" , "6127"},
|
||||
//{"P_JueYuanPianYiWu" , "6128"},
|
||||
//{"P_HanJieQuYiWu" , "6129"},
|
||||
//{"P_HanJieQuZangWu" , "6130"},
|
||||
|
||||
//{"N_GaiBanZangWu" , "6140"},
|
||||
//{"N_GaiBanHuaHeng" , "6141"},
|
||||
//{"N_JueYuanQuanFengKouWaiXie" , "6142"},
|
||||
//{"N_JueYuanQuanFanHuang" , "6143"},
|
||||
//{"N_GaiBanTuDian" , "6144"},
|
||||
//{"N_JueYuanPianPoSun" , "6145"},
|
||||
//{"N_JueYuanPianYiWu" , "6146"},
|
||||
//{"N_HanJieQuYiWu" , "6147"},
|
||||
//{"N_HanJieQuZangWu" , "6148"},
|
||||
|
||||
//{"_3D_LvDingHanJieTuQi" , "6161"},
|
||||
//{"_3D_LvDingHanJieZhaHan" , "6161"},
|
||||
//{"_3D_HanJieQuYiWu" , "6162"},
|
||||
//{"_3D_HanJieQuZangWu" , "6163"}
|
||||
//};
|
||||
//addData("12345", dataVec);
|
||||
|
||||
}
|
||||
bool sqlManager::addData(std::string SN,std::vector<sqlData> data)
|
||||
{
|
||||
if (SN.empty())//SN码为空,将停止处理
|
||||
{
|
||||
qDebug() << "[INFO] " << " SN empty!";
|
||||
return false;
|
||||
}
|
||||
sqlTableDatas selectResult;
|
||||
sqlErr res=dbPtr->Select(getCurrentDate(), {},"sn", SN, selectResult);
|
||||
if (res != sqlOK)
|
||||
{
|
||||
qDebug() << "[INFO] " << "select False SN:"<<QString::fromStdString(SN);
|
||||
return false;
|
||||
}
|
||||
if (selectResult.rowDatas.size() == 0)//未找到该SN的数据,进行新增操作
|
||||
{
|
||||
dbPtr->Insert(getCurrentDate(), SN, data);
|
||||
}
|
||||
else//已存在相同SN的数据,将进行更新操作
|
||||
{
|
||||
dbPtr->Update(getCurrentDate(), data,"sn", SN);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void sqlManager::checkCol(sqlite3* db, std::string tableName, std::string columnName)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 执行查询,检查表是否存在并且包含指定的列
|
||||
const char* query = "SELECT sql FROM sqlite_master WHERE type='table' AND name=?";
|
||||
sqlite3_stmt* stmt;
|
||||
int rc = sqlite3_prepare_v2(db, query, -1, &stmt, nullptr);
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
std::cerr << "无法准备查询: " << sqlite3_errmsg(db) << std::endl;
|
||||
}
|
||||
sqlite3_bind_text(stmt, 1, tableName.c_str(), -1, SQLITE_STATIC);
|
||||
|
||||
if (sqlite3_step(stmt) == SQLITE_ROW) {
|
||||
// 表存在,现在检查是否包含指定的列
|
||||
const char* tableDefinition = reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0));
|
||||
if (sqlite3_strlike(columnName.c_str(), tableDefinition, 0)) {
|
||||
//std::cout << "table '" << tableName << "' exist and true '" << columnName << "'" << std::endl;
|
||||
}
|
||||
else {
|
||||
std::cout << "table '" << tableName << "' exist ,but not true '" << columnName << "'" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
// 清理资源
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
}
|
||||
|
||||
catch (std::exception& e) {
|
||||
std::cerr << "SQLite异常: " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
sqlDataStruct sqlManager::selectData(std::string SN, int send)
|
||||
{
|
||||
std::string query;
|
||||
int rc;
|
||||
//send设true
|
||||
{
|
||||
query = "UPDATE \'" + getCurrentTableName() + "\' SET send = " + std::to_string(send) + " WHERE sn = \'" + SN + "\' ; ";
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
rc = sqlite3_exec(db, query.c_str(), nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
query = "SELECT * FROM \'" + getCurrentTableName() + "\' WHERE sn =\'" + SN + "\' ; ";
|
||||
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
|
||||
std::vector<sqlDatas> rowData;
|
||||
sqlDataStruct Respone;
|
||||
rc = sqlite3_exec(db, query.c_str(), callback, &rowData, 0);
|
||||
if (rc != SQLITE_OK) {
|
||||
std::cerr << "Failed to execute query: " << sqlite3_errmsg(db) << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
Respone.SN = SN;
|
||||
Respone.dataVec.swap(rowData);
|
||||
Respone.tableName = getCurrentTableName();
|
||||
}
|
||||
return Respone;
|
||||
}
|
||||
int sqlManager::checktSn(std::string SN)
|
||||
{
|
||||
return 0;
|
||||
std::string query = "SELECT COUNT(*) FROM \'" + getCurrentTableName() + "\' WHERE sn LIKE '" + SN + "%'; ";
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
sqlite3_stmt* statement;
|
||||
int result = sqlite3_prepare_v2(db, query.c_str(), -1, &statement, nullptr);
|
||||
int resultReturn = -1;
|
||||
int num = 0;
|
||||
if (result == SQLITE_OK)
|
||||
if (sqlite3_step(statement) == SQLITE_ROW)
|
||||
num = sqlite3_column_int(statement, 0);
|
||||
if (num > 0)
|
||||
{
|
||||
query = "SELECT send FROM \'" + getCurrentTableName() + "\' WHERE sn =\'" + SN + "-" + std::to_string(num - 1) + "\' ; ";
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
std::vector<sqlDatas> rowData;
|
||||
int rc = sqlite3_exec(db, query.c_str(), callback, &rowData, 0);
|
||||
for (int i = 0; i < rowData.size(); i++)
|
||||
{
|
||||
if (!rowData[i].valueText.compare("1"))
|
||||
{
|
||||
num -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
sqlite3_finalize(statement);
|
||||
return num;
|
||||
}
|
||||
bool sqlManager::addData(sqlDataStruct data)
|
||||
{
|
||||
if (data.SN.empty())//SN码为空,将停止处理
|
||||
{
|
||||
qDebug() << "[INFO] " << " SN empty!";
|
||||
return false;
|
||||
}
|
||||
std::string query = "SELECT COUNT(*) FROM \'" + getCurrentTableName() + "\' WHERE sn = '" + data.SN + "'; ";
|
||||
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << "\n" << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
sqlite3_stmt* statement;
|
||||
|
||||
int result = sqlite3_prepare_v2(db, query.c_str(), -1, &statement, nullptr);//执行语句
|
||||
|
||||
if (result == SQLITE_OK) {
|
||||
if (sqlite3_step(statement) == SQLITE_ROW) {
|
||||
if (sqlite3_column_int(statement, 0) > 0)//查询出来的行数大于0
|
||||
{
|
||||
//拼接数据
|
||||
std::string updateQuery = "UPDATE \'" + getCurrentTableName() + "\' SET send=1,";
|
||||
for (auto d : data.dataVec)
|
||||
{
|
||||
updateQuery += d.dataName + " = ";
|
||||
if (d.valueDouble != 0)
|
||||
updateQuery += std::to_string(d.valueDouble) + ",";
|
||||
else if (d.valueInt != 0)
|
||||
updateQuery += std::to_string(d.valueInt) + ",";
|
||||
else//TEXT
|
||||
updateQuery += "\'" + d.valueText + "\',";
|
||||
}
|
||||
updateQuery.replace(updateQuery.find_last_of(","), 1, " WHERE SN = \'" + data.SN + "\';");
|
||||
int rc = sqlite3_exec(db, updateQuery.c_str(), nullptr, nullptr, nullptr);
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << updateQuery << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(updateQuery);
|
||||
}
|
||||
if (rc != SQLITE_OK) {
|
||||
std::cout << "更新操作失败: " << sqlite3_errmsg(db) << ";" << updateQuery;
|
||||
sqlite3_finalize(statement);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::string insertQuery = "INSERT INTO \'" + getCurrentTableName() + "\' (send,SN,";
|
||||
for (auto d : data.dataVec)
|
||||
insertQuery += d.dataName + ",";
|
||||
insertQuery += "updateTime,";
|
||||
insertQuery.replace(insertQuery.find_last_of(","), 1, ") VALUES (1,\'" + data.SN + "\',");
|
||||
for (auto d : data.dataVec)
|
||||
{
|
||||
if (d.valueDouble != 0)
|
||||
insertQuery += std::to_string(d.valueDouble) + ",";
|
||||
else if (d.valueInt != 0)
|
||||
insertQuery += std::to_string(d.valueInt) + ",";
|
||||
else//TEXT
|
||||
insertQuery += "\'" + d.valueText + "\',";
|
||||
}
|
||||
insertQuery += "\'" + getCurrentDateTimeHMS() + "\',";
|
||||
insertQuery.replace(insertQuery.find_last_of(","), 1, " );");
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << insertQuery << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(insertQuery);
|
||||
}
|
||||
int rc = sqlite3_exec(db, insertQuery.c_str(), nullptr, nullptr, nullptr);
|
||||
if (rc != SQLITE_OK) {
|
||||
std::cout << "插入操作失败: " << sqlite3_errmsg(db) << ";" << insertQuery;
|
||||
sqlite3_finalize(statement);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sqlite3_finalize(statement);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
#if 0
|
||||
sqlDataStruct sqlManager::selectData(std::string SN, int snCountIndex, int send)
|
||||
{
|
||||
std::string query;
|
||||
int rc;
|
||||
//send设true
|
||||
{
|
||||
query = "UPDATE \'" + getCurrentTableName() + "\' SET send = " + std::to_string(send) + " WHERE sn = \'" + SN + "-" + std::to_string(snCountIndex) + "\' ; ";
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
rc = sqlite3_exec(db, query.c_str(), nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
if (snCountIndex > 0)
|
||||
query = "SELECT * FROM \'" + getCurrentTableName() + "\' WHERE sn =\'" + SN + "-" + std::to_string(snCountIndex) + "\' ; ";
|
||||
else
|
||||
query = "SELECT * FROM \'" + getCurrentTableName() + "\' WHERE sn =\'" + SN + "-0\' ; ";
|
||||
|
||||
if (debugMode == true)
|
||||
{
|
||||
std::cout << query << endl;
|
||||
qDebug() << "sql query:" << QString::fromStdString(query);
|
||||
}
|
||||
|
||||
std::vector<sqlDatas> rowData;
|
||||
sqlDataStruct Respone;
|
||||
rc = sqlite3_exec(db, query.c_str(), callback, &rowData, 0);
|
||||
if (rc != SQLITE_OK) {
|
||||
std::cerr << "Failed to execute query: " << sqlite3_errmsg(db) << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
Respone.SN = SN;
|
||||
Respone.dataVec.swap(rowData);
|
||||
Respone.tableName = getCurrentTableName();
|
||||
}
|
||||
return Respone;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user