#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 , pcfg->m_ScanCfgWrapper); m_PowerCompensateDao->Save(pcfg->m_SeqNo , pcfg->m_ScanCfgWrapper.m_PowerCompensateCfg); m_TimePowerCompensateDao->Save(pcfg->m_SeqNo , pcfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg); m_FixPointDao->Save(pcfg->m_SeqNo , 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 , cfg->m_ScanCfgWrapper); m_PowerCompensateDao->Find(cfg->m_SeqNo , 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 ; 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 , pc); } } m_TimePowerCompensateDao->Find(cfg->m_SeqNo , cfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg); m_FixPointDao->Find(cfg->m_SeqNo , 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=query.getColumn(ScannerControlCfg::FIELD_SEQ_NO.c_str()).getInt(); cfg->m_ControlNo =query.getColumn(ScannerControlCfg::FIELD_CONTROL_NO.c_str()).getInt(); cfg->m_SerialNo =query.getColumn(ScannerControlCfg::FIELD_SERIAL_NO.c_str()).getInt(); cfg->m_ControlType =query.getColumn(ScannerControlCfg::FIELD_CONTROL_TYPE.c_str()).getInt(); cfg->m_CardName =query.getColumn(ScannerControlCfg::FIELD_CARD_NAME.c_str()).getString(); cfg->m_CardIP =query.getColumn(ScannerControlCfg::FIELD_CARD_IP.c_str()).getString(); cfg->m_IsEnable =query.getColumn(ScannerControlCfg::FIELD_IS_ENABLE.c_str()).getInt() > 0 ? true : false; m_ScannerControlCfgs.push_back(cfg); m_ScannerControlCfgMap[cfg->m_SeqNo ] = 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 , pcfg->m_ScanCfgWrapper, ss); m_PowerCompensateDao->Export(pcfg->m_SeqNo , pcfg->m_ScanCfgWrapper.m_PowerCompensateCfg, ss); m_TimePowerCompensateDao->Export(pcfg->m_SeqNo , 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 , 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 , 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 , cfg->m_ControlNo , cfg->m_SerialNo , cfg->m_ControlType , cfg->m_CardName.c_str(), "", cfg->m_IsEnable ? 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::iterator it = m_ScannerControlCfgs.begin(); it != m_ScannerControlCfgs.end();) { if ((*it)->m_SeqNo == seq) { it = m_ScannerControlCfgs.erase(it); break; } else { it++; } } for (vector::iterator it = m_MatchCfg.begin(); it != m_MatchCfg.end();) { if ((*it)->m_SeqNo == seq) { it = m_MatchCfg.erase(it); break; } else { it++; } } for (std::map::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 , cfg->m_ScanCfgWrapper); m_PowerCompensateDao->Find(cfg->m_SeqNo , 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 ; 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 , pc); } } m_TimePowerCompensateDao->Find(cfg->m_SeqNo , cfg->m_ScanCfgWrapper.m_TimePowerCompensateCfg); m_FixPointDao->Find(cfg->m_SeqNo , cfg->m_FixPointWrapper); }