212 lines
6.2 KiB
C++
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);
|
||
|
}
|