GrpcPrint/PrintS/Config/dao/ParamSetCfgDao.cpp
2024-03-19 17:45:12 +08:00

212 lines
6.2 KiB
C++

#include "ParamSetCfgDao.h"
#include <sstream>
ParamSetCfgDao::ParamSetCfgDao(SQLite::Database* pdb) : BaseDao(pdb)
{}
ParamSetCfgDao::~ParamSetCfgDao()
{}
void ParamSetCfgDao::CreateTable()
{
if (m_pDB->tableExists(ParamSetCfg::TABLE_NAME))return;
char buffer[2048];
memset(buffer, '\0', sizeof(buffer));
string createsql = "CREATE TABLE %s(%s INTEGER PRIMARY KEY,%s VARCHAR(20),%s VARCHAR(20),%s double,%s double,%s double)";
sprintf_s(buffer, sizeof(buffer), createsql.c_str(),
ParamSetCfg::TABLE_NAME.c_str(),
ParamSetCfg::FIELD_ID.c_str(),
ParamSetCfg::FIELD_CONFIG_NAME.c_str(),
ParamSetCfg::FIELD_SET_TYPE.c_str(),
ParamSetCfg::FIELD_DATA1.c_str(),
ParamSetCfg::FIELD_DATA2.c_str(),
ParamSetCfg::FIELD_DATA3.c_str()
);
SQLite::Transaction transaction(*m_pDB);
m_pDB->exec(buffer);
vector<string> insertsql;
ParamSetCfg::Generate(insertsql);
for (size_t i = 0; i < insertsql.size(); ++i)
{
m_pDB->exec(insertsql[i]);
}
transaction.commit();
}
void ParamSetCfgDao::Find(ParamSetCfg& cfg)
{
for (auto pps : cfg.ParamSetVec)
delete pps;
cfg.ParamSetVec.clear();
char buffer[2048];
string strsql = "SELECT DISTINCT %s FROM %s";
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
ParamSetCfg::FIELD_CONFIG_NAME.c_str(),
ParamSetCfg::TABLE_NAME.c_str());
SQLite::Statement query(*m_pDB, buffer);
while (query.executeStep()) {
ParamSetCfg::ParamSet* pps = new ParamSetCfg::ParamSet;
pps->ConfigName = query.getColumn(ParamSetCfg::FIELD_CONFIG_NAME.c_str()).getString();
cfg.ParamSetVec.push_back(pps);
}
for (auto pps : cfg.ParamSetVec)
{
string strsql = "SELECT %s,%s,%s,%s FROM %s WHERE %s='%s'";
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
ParamSetCfg::FIELD_SET_TYPE.c_str(),
ParamSetCfg::FIELD_DATA1.c_str(),
ParamSetCfg::FIELD_DATA2.c_str(),
ParamSetCfg::FIELD_DATA3.c_str(),
ParamSetCfg::TABLE_NAME.c_str(),
ParamSetCfg::FIELD_CONFIG_NAME.c_str(),
pps->ConfigName.c_str());
SQLite::Statement query(*m_pDB, buffer);
while (query.executeStep())
{
string set_type = query.getColumn(ParamSetCfg::FIELD_SET_TYPE.c_str()).getString();
if (set_type == "PowderSet")
{
ParamSetCfg::PowderSet* ps = new ParamSetCfg::PowderSet;
ps->start_layer = query.getColumn(ParamSetCfg::FIELD_DATA1.c_str()).getInt();
ps->end_layer = query.getColumn(ParamSetCfg::FIELD_DATA2.c_str()).getInt();
ps->powder = query.getColumn(ParamSetCfg::FIELD_DATA3.c_str()).getDouble();
pps->PowderSets.push_back(ps);
}
else
{
ParamSetCfg::LaserSet* pls = new ParamSetCfg::LaserSet;
pls->laser_speed = query.getColumn(ParamSetCfg::FIELD_DATA1.c_str()).getDouble();
pls->laser_diameter = query.getColumn(ParamSetCfg::FIELD_DATA2.c_str()).getDouble();
pls->laser_power = query.getColumn(ParamSetCfg::FIELD_DATA3.c_str()).getDouble();
pps->LaserSetMap[set_type] = pls;
}
}
}
}
void ParamSetCfgDao::Save(ParamSetCfg& cfg)
{
char buffer[512];
sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s", ParamSetCfg::TABLE_NAME.c_str());
m_pDB->exec(string(buffer));
string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES(";
sprintf_s(buffer, sizeof(buffer), strtemp.c_str(),
ParamSetCfg::TABLE_NAME.c_str(),
ParamSetCfg::FIELD_CONFIG_NAME.c_str(),
ParamSetCfg::FIELD_SET_TYPE.c_str(),
ParamSetCfg::FIELD_DATA1.c_str(),
ParamSetCfg::FIELD_DATA2.c_str(),
ParamSetCfg::FIELD_DATA3.c_str());
string strsql = string(buffer) + "'%s','%s',%f,%f,%f)";
for (auto pps : cfg.ParamSetVec)
{
std::map<string, ParamSetCfg::LaserSet*>::iterator it;
for (it = pps->LaserSetMap.begin(); it != pps->LaserSetMap.end(); it++)
{
if (it->second == nullptr)
continue;
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
pps->ConfigName.c_str(),
it->first.c_str(),
it->second->laser_speed,
it->second->laser_diameter,
it->second->laser_power);
m_pDB->exec(string(buffer));
}
for (unsigned int i = 0; i < pps->PowderSets.size(); i++)
{
ParamSetCfg::PowderSet* ps = pps->PowderSets[i];
if (ps == nullptr)
continue;
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
pps->ConfigName.c_str(),
"PowderSet",
(double)ps->start_layer,
(double)ps->end_layer,
(double)ps->powder);
m_pDB->exec(string(buffer));
}
}
}
void ParamSetCfgDao::Export(ParamSetCfg &cfg, stringstream &sql)
{
char buffer[512];
sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s", ParamSetCfg::TABLE_NAME.c_str());
sql<< string(buffer) << "\n";
string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES(";
sprintf_s(buffer, sizeof(buffer), strtemp.c_str(),
ParamSetCfg::TABLE_NAME.c_str(),
ParamSetCfg::FIELD_CONFIG_NAME.c_str(),
ParamSetCfg::FIELD_SET_TYPE.c_str(),
ParamSetCfg::FIELD_DATA1.c_str(),
ParamSetCfg::FIELD_DATA2.c_str(),
ParamSetCfg::FIELD_DATA3.c_str());
string strsql = string(buffer) + "'%s','%s',%f,%f,%f)";
for (auto pps : cfg.ParamSetVec)
{
std::map<string, ParamSetCfg::LaserSet*>::iterator it;
for (it = pps->LaserSetMap.begin(); it != pps->LaserSetMap.end(); it++)
{
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
pps->ConfigName.c_str(),
it->first.c_str(),
it->second->laser_speed,
it->second->laser_diameter,
it->second->laser_power);
sql << string(buffer) << "\n";
}
for (unsigned int i = 0; i < pps->PowderSets.size(); i++)
{
ParamSetCfg::PowderSet* ps = pps->PowderSets[i];
if (ps == nullptr)
continue;
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
pps->ConfigName.c_str(),
"PowderSet",
(double)ps->start_layer,
(double)ps->end_layer,
(double)ps->powder);
sql << string(buffer) << "\n";
}
}
}
void ParamSetCfgDao::Import(ParamSetCfg &cfg, string &sql)
{
std::stringstream ss(sql);
string cmd;
std::getline(ss, cmd);
if (cmd.find(ParamSetCfg::TABLE_NAME) == string::npos)
return;
do {
m_pDB->exec(cmd);
} while (std::getline(ss, cmd));
for (auto pps : cfg.ParamSetVec)
{
std::map<string, ParamSetCfg::LaserSet*>::iterator it;
for (it = pps->LaserSetMap.begin(); it != pps->LaserSetMap.end(); it++)
delete it->second;
pps->LaserSetMap.clear();
for (unsigned int i = 0; i < pps->PowderSets.size(); i++)
delete pps->PowderSets[i];
pps->PowderSets.clear();
delete pps;
}
cfg.ParamSetVec.clear();
Find(cfg);
}