Files
handleaiuinew/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.cpp
T

182 lines
5.2 KiB
C++
Raw Normal View History

2024-05-24 18:05:29 +08:00
#include <sqlManager/sqlManager.h>
#include <FrontendBackendBridge.h>
sqlManager::sqlError sqlManager::GetTables(std::vector<std::string>& input)
{
return success;
}
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;
std::string currentTableName = getCurrentDate();
sqlErr res=dbPtr->Select(currentTableName, {},"sn", SN, selectResult);
if (res != sqlOK)
{
qDebug() << "[INFO] " << "select False SN:"<<QString::fromStdString(SN);
return false;
}
if (selectResult.rowDatas.size() != 0)//未找到该SN的数据,进行新增操作
{
dbPtr->Update(currentTableName, data, "sn", SN);
return true;
}
res= dbPtr->Insert(currentTableName, SN, data);
if (res == sqlFalse)
{
for (auto keyName : data)
dbPtr->addColumn(currentTableName, keyName.key, "text");
}
return true;
}