GrpcPrint/PrintS/Config/dao/ScannerControlCfgDao.cpp

223 lines
8.2 KiB
C++

#include "ScannerControlCfgDao.h"
#include "../ConfigManager.h"
ScannerControlCfgDao::ScannerControlCfgDao(SQLite::Database* pdb) :BaseDao(pdb)
{
m_ScanCfgDao = new ScanCfgDao(pdb);
m_PowerCompensateDao = new PowerCompensateDao(pdb);
m_TimePowerCompensateDao = new TimePowerCompensateDao(pdb);
m_FixPointDao = new FixPointDao(pdb);
}
ScannerControlCfgDao::~ScannerControlCfgDao()
{
if (m_ScanCfgDao)delete m_ScanCfgDao;
if (m_PowerCompensateDao)delete m_PowerCompensateDao;
if (m_TimePowerCompensateDao)delete m_TimePowerCompensateDao;
if (m_FixPointDao)delete m_FixPointDao;
}
void ScannerControlCfgDao::CreateTable()
{
if (!m_pDB->tableExists(ScannerControlCfg::TABLE_NAME))
{
char buffer[1024];
string str = "CREATE TABLE %s(%s INTEGER PRIMARY KEY,%s INTEGER,%s INTEGER,%s INTEGER, %s VARCHAR(50),%s VARCHAR(50),%s INTEGER)";
sprintf_s(buffer, sizeof(buffer), str.c_str(),
ScannerControlCfg::TABLE_NAME.c_str(), ScannerControlCfg::FIELD_SEQ_NO.c_str(),
ScannerControlCfg::FIELD_CONTROL_NO.c_str(),ScannerControlCfg::FIELD_SERIAL_NO.c_str(),
ScannerControlCfg::FIELD_CONTROL_TYPE.c_str(),ScannerControlCfg::FIELD_CARD_NAME.c_str(),
ScannerControlCfg::FIELD_CARD_IP.c_str(),ScannerControlCfg::FIELD_IS_ENABLE.c_str());
m_pDB->exec(buffer);
}
if (!m_pDB->tableExists(ScanCfg::TABLE_NAME)) {
m_ScanCfgDao->CreateTable();
}
if (!m_pDB->tableExists(PowerCompensate::TABLE_NAME)) {
m_PowerCompensateDao->CreateTable();
}
if (!m_pDB->tableExists(TimePowerCompensate::TABLE_NAME)) {
m_TimePowerCompensateDao->CreateTable();
}
if (!m_pDB->tableExists(FixPointCfg::TABLE_NAME)) {
m_FixPointDao->CreateTable();
}
}
void ScannerControlCfgDao::Save()
{
for (size_t i = 0; i < m_MatchCfg.size(); ++i) {
ScannerControlCfg* pcfg = m_MatchCfg[i];
if (pcfg == NULL)continue;
m_pDB->exec(pcfg->GetUpdateSql());
m_ScanCfgDao->Save(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper);
m_PowerCompensateDao->Save(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper.m_PowerCompensateCfg);
m_TimePowerCompensateDao->Save(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg);
m_FixPointDao->Save(pcfg->m_SeqNo->GetValue(), pcfg->m_FixPointWrapper);
}
}
void ScannerControlCfgDao::FindCfg() {
FindMain();
Machine* machine = ConfigManager::GetInstance()->GetMachine();
for (size_t i = 0; i < m_ScannerControlCfgs.size(); ++i)
{
ScannerControlCfg* cfg = m_ScannerControlCfgs[i];
//machine->InitScanParamBeforeFind(&cfg->m_ScanCfgWrapper);
m_ScanCfgDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_ScanCfgWrapper);
m_PowerCompensateDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_ScanCfgWrapper.m_PowerCompensateCfg);
if (cfg->m_ScanCfgWrapper.m_PowerCompensateCfg.m_pcs.empty()) {
for (int pcIndex = 5; pcIndex <= 100; pcIndex += 5) {
PowerCompensate* pc = new PowerCompensate();
pc->m_cno = cfg->m_SeqNo->GetValue();
pc->m_percent = pcIndex;
pc->m_value = 1.0f;
pc->m_value_min = 0.0f;
pc->m_value_max = 3.0f;
cfg->m_ScanCfgWrapper.m_PowerCompensateCfg.m_pcs.push_back(pc);
m_PowerCompensateDao->Add(cfg->m_SeqNo->GetValue(), pc);
}
}
m_TimePowerCompensateDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg);
m_FixPointDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_FixPointWrapper);
}
}
void ScannerControlCfgDao::FindMain()
{
char buffer[1024];
string str = "SELECT * FROM %s";
sprintf_s(buffer, sizeof(buffer), str.c_str(),ScannerControlCfg::TABLE_NAME.c_str());
SQLite::Statement query(*m_pDB, buffer);
while (query.executeStep()) {
ScannerControlCfg* cfg = new ScannerControlCfg();
cfg->m_SeqNo ->SetValue(query.getColumn(ScannerControlCfg::FIELD_SEQ_NO.c_str()).getInt());
cfg->m_ControlNo->SetValue(query.getColumn(ScannerControlCfg::FIELD_CONTROL_NO.c_str()).getInt());
cfg->m_SerialNo->SetValue(query.getColumn(ScannerControlCfg::FIELD_SERIAL_NO.c_str()).getInt());
cfg->m_ControlType->SetValue(query.getColumn(ScannerControlCfg::FIELD_CONTROL_TYPE.c_str()).getInt());
cfg->m_CardName->SetValue(query.getColumn(ScannerControlCfg::FIELD_CARD_NAME.c_str()).getString());
cfg->m_CardIP->SetValue(query.getColumn(ScannerControlCfg::FIELD_CARD_IP.c_str()).getString());
cfg->m_IsEnable->SetValue(query.getColumn(ScannerControlCfg::FIELD_IS_ENABLE.c_str()).getInt() > 0 ? true : false);
m_ScannerControlCfgs.push_back(cfg);
m_ScannerControlCfgMap[cfg->m_SeqNo->GetValue()] = cfg;
}
}
void ScannerControlCfgDao::Export(stringstream& ss)
{
for (size_t i = 0; i < m_MatchCfg.size(); ++i) {
ScannerControlCfg* pcfg = m_MatchCfg[i];
if (pcfg == NULL)continue;
ss << pcfg->GetUpdateSql() << "\n";
m_ScanCfgDao->Export(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper, ss);
m_PowerCompensateDao->Export(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper.m_PowerCompensateCfg, ss);
m_TimePowerCompensateDao->Export(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg, ss);
}
}
void ScannerControlCfgDao::ExportAllPC(stringstream& ss)
{
for (size_t i = 0; i < m_MatchCfg.size(); ++i) {
ScannerControlCfg* pcfg = m_MatchCfg[i];
m_PowerCompensateDao->Export(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper.m_PowerCompensateCfg, ss);
}
}
void ScannerControlCfgDao::ImportAllPc(std::string &sql)
{
std::stringstream ss(sql);
string cmd;
getline(ss, cmd);
if (cmd.find(PowerCompensate::TABLE_NAME) == string::npos)
return;
do {
m_pDB->exec(cmd);
} while (getline(ss, cmd));
for (size_t i = 0; i < m_ScannerControlCfgs.size(); ++i) {
ScannerControlCfg* pcfg = m_ScannerControlCfgMap[i];
m_PowerCompensateDao->Find(pcfg->m_SeqNo->GetValue(), pcfg->m_ScanCfgWrapper.m_PowerCompensateCfg);
}
}
void ScannerControlCfgDao::Add(ScannerControlCfg* cfg)
{
char buffer[1024];
string str = "INSERT INTO %s(%s,%s,%s,%s) VALUES()";
sprintf_s(buffer, sizeof(buffer), "INSERT INTO %s(%s,%s,%s,%s,%s,%s,%s) VALUES(%d,%d,%d,%d,'%s','%s',%d)",
ScannerControlCfg::TABLE_NAME.c_str(),
ScannerControlCfg::FIELD_SEQ_NO.c_str(),
ScannerControlCfg::FIELD_CONTROL_NO.c_str(),
ScannerControlCfg::FIELD_SERIAL_NO.c_str(),
ScannerControlCfg::FIELD_CONTROL_TYPE.c_str(),
ScannerControlCfg::FIELD_CARD_NAME.c_str(),
ScannerControlCfg::FIELD_CARD_IP.c_str(),
ScannerControlCfg::FIELD_IS_ENABLE.c_str(),
cfg->m_SeqNo->GetValue(), cfg->m_ControlNo->GetValue(), cfg->m_SerialNo->GetValue(), cfg->m_ControlType->GetValue(), cfg->m_CardName->GetValueStr().c_str(), "", cfg->m_IsEnable->GetValue() ? 1 : 0);
m_pDB->exec(buffer);
}
void ScannerControlCfgDao::Delete(int seq)
{
char buffer[1024];
sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s WHERE %s=%d", ScannerControlCfg::TABLE_NAME.c_str(), ScannerControlCfg::FIELD_SEQ_NO.c_str(), seq);
m_pDB->exec(buffer);
for (vector<ScannerControlCfg*>::iterator it = m_ScannerControlCfgs.begin(); it != m_ScannerControlCfgs.end();) {
if ((*it)->m_SeqNo->GetValue() == seq)
{
it = m_ScannerControlCfgs.erase(it);
break;
}
else {
it++;
}
}
for (vector<ScannerControlCfg*>::iterator it = m_MatchCfg.begin(); it != m_MatchCfg.end();) {
if ((*it)->m_SeqNo->GetValue() == seq)
{
it = m_MatchCfg.erase(it);
break;
}
else {
it++;
}
}
for (std::map<int, ScannerControlCfg*>::iterator it = m_ScannerControlCfgMap.begin(); it != m_ScannerControlCfgMap.end();) {
if (it->first == seq) {
ScannerControlCfg* cfg = it->second;
delete cfg;
cfg = NULL;
it = m_ScannerControlCfgMap.erase(it);
}
else {
it++;
}
}
}
void ScannerControlCfgDao::Maintain(ScannerControlCfg* cfg)
{
m_ScanCfgDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_ScanCfgWrapper);
m_PowerCompensateDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_ScanCfgWrapper.m_PowerCompensateCfg);
if (cfg->m_ScanCfgWrapper.m_PowerCompensateCfg.m_pcs.empty()) {
for (int pcIndex = 5; pcIndex <= 100; pcIndex += 5) {
PowerCompensate* pc = new PowerCompensate();
pc->m_cno = cfg->m_SeqNo->GetValue();
pc->m_percent = pcIndex;
pc->m_value = 1.0f;
pc->m_value_min = 0.0f;
pc->m_value_max = 3.0f;
cfg->m_ScanCfgWrapper.m_PowerCompensateCfg.m_pcs.push_back(pc);
m_PowerCompensateDao->Add(cfg->m_SeqNo->GetValue(), pc);
}
}
m_TimePowerCompensateDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg);
m_FixPointDao->Find(cfg->m_SeqNo->GetValue(), cfg->m_FixPointWrapper);
}