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

84 lines
3.0 KiB
C++

#include "PrepareJobCfgDao.h"
PrepareJobCfgDao::PrepareJobCfgDao(SQLite::Database* pdb) : BaseDao(pdb)
{
}
PrepareJobCfgDao::~PrepareJobCfgDao()
{
}
void PrepareJobCfgDao::CreateTable()
{
if (m_pDB->tableExists(PrepareJobCfg::TABLE_NAME))return;
char buffer[512];
string createsql = "CREATE TABLE %s(%s INTEGER,%s INTEGER,%s INTEGER,UNIQUE(%s,%s))";
sprintf_s(buffer, sizeof(buffer), createsql.c_str(),
PrepareJobCfg::TABLE_NAME.c_str(),
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),
PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),
PrepareJobCfg::FIELD_LAYER_INDEX.c_str()
);
m_pDB->exec(buffer);
}
void PrepareJobCfgDao::Find(int mt,map<int, bool>& cfgs)
{
char buffer[1024];
string strsql = "SELECT %s,%s FROM %s WHERE %s=%d";
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),
PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),
PrepareJobCfg::TABLE_NAME.c_str(),
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),mt);
SQLite::Statement query(*m_pDB, buffer);
while (query.executeStep()) {
cfgs[query.getColumn(PrepareJobCfg::FIELD_LAYER_INDEX.c_str()).getInt()] = (query.getColumn(PrepareJobCfg::FIELD_IS_PRINTABLE.c_str()).getInt() > 0 ? true : false);
}
}
void PrepareJobCfgDao::Save(int mt, map<int, bool>& cfgs)
{
char buffer[1024];
string strsql = "SELECT %s,%s FROM %s WHERE %s=%d";
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),
PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),
PrepareJobCfg::TABLE_NAME.c_str(),
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(), mt);
SQLite::Statement query(*m_pDB, buffer);
map<int, bool> dbMap;
map<int, bool> insertMap;
map<int, bool> updateMap;
while (query.executeStep()) {
dbMap[query.getColumn(PrepareJobCfg::FIELD_LAYER_INDEX.c_str()).getInt()] = (query.getColumn(PrepareJobCfg::FIELD_IS_PRINTABLE.c_str()).getInt() > 0 ? true : false);
}
for (map<int, bool>::iterator it = cfgs.begin(); it != cfgs.end();it++) {
if (dbMap.find(it->first) == dbMap.end()) {
insertMap[it->first] = it->second;
}
else {
updateMap[it->first] = it->second;
}
}
string updateSql = "UPDATE %s SET %s=%d WHERE %s=%d AND %s=%d";
for (map<int, bool>::iterator it = updateMap.begin(); it != updateMap.end();it++) {
sprintf_s(buffer, sizeof(buffer), updateSql.c_str(), PrepareJobCfg::TABLE_NAME.c_str(), PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),it->second?1:0,
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),mt,PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),it->first);
m_pDB->exec(buffer);
}
string insertSql = "INSERT INTO %s(%s,%s,%s) VALUES(%d,%d,%d)";
for (map<int, bool>::iterator it = insertMap.begin(); it != insertMap.end(); it++) {
sprintf_s(buffer, sizeof(buffer),insertSql.c_str(),PrepareJobCfg::TABLE_NAME.c_str(),PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),mt,it->first,it->second?1:0);
m_pDB->exec(buffer);
}
}