199 lines
6.8 KiB
C++
199 lines
6.8 KiB
C++
#include "PowerCompensateDao.h"
|
|
#include <sstream>
|
|
|
|
|
|
|
|
PowerCompensateDao::PowerCompensateDao(SQLite::Database* pdb) :BaseDao(pdb)
|
|
{
|
|
}
|
|
|
|
|
|
PowerCompensateDao::~PowerCompensateDao()
|
|
{
|
|
}
|
|
|
|
void PowerCompensateDao::CreateTable()
|
|
{
|
|
if (m_pDB->tableExists(PowerCompensate::TABLE_NAME))return;
|
|
char buffer[1024];
|
|
memset(buffer, '\0', sizeof(buffer));
|
|
string createsql = "CREATE TABLE %s(%s INTEGER,%s INTEGER,%s FLOAT,%s FLOAT,%s FLOAT,PRIMARY KEY(%s,%s))";
|
|
sprintf_s(buffer, sizeof(buffer), createsql.c_str(),
|
|
PowerCompensate::TABLE_NAME.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str(),
|
|
PowerCompensate::FIELD_VALUE.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MIN.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MAX.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str()
|
|
);
|
|
m_pDB->exec(buffer);
|
|
}
|
|
|
|
void PowerCompensateDao::Find(int cno,PowerCompensateCfg& cfg)
|
|
{
|
|
char buffer[1024];
|
|
string strsql = "SELECT %s,%s,%s,%s,%s FROM %s WHERE %s=%d ORDER BY %s";
|
|
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str(),
|
|
PowerCompensate::FIELD_VALUE.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MIN.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MAX.c_str(),
|
|
PowerCompensate::TABLE_NAME.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
cno,
|
|
PowerCompensate::FIELD_PERCENT.c_str());
|
|
SQLite::Statement query(*m_pDB, buffer);
|
|
while (query.executeStep()) {
|
|
PowerCompensate* ppc = new PowerCompensate();
|
|
ppc->m_cno = query.getColumn(PowerCompensate::FIELD_CNO.c_str()).getInt();
|
|
ppc->m_percent = query.getColumn(PowerCompensate::FIELD_PERCENT.c_str()).getUInt();
|
|
ppc->m_value =(float) query.getColumn(PowerCompensate::FIELD_VALUE.c_str()).getDouble();
|
|
ppc->m_value_min =(float) query.getColumn(PowerCompensate::FIELD_VALUE_MIN.c_str()).getDouble();
|
|
ppc->m_value_max =(float) query.getColumn(PowerCompensate::FIELD_VALUE_MAX.c_str()).getDouble();
|
|
cfg.m_pcs.push_back(ppc);
|
|
}
|
|
}
|
|
|
|
void PowerCompensateDao::Add(int cno, PowerCompensate* cfg)
|
|
{
|
|
char buffer[512];
|
|
string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES(";
|
|
sprintf_s(buffer, sizeof(buffer), strtemp.c_str(),
|
|
PowerCompensate::TABLE_NAME.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str(),
|
|
PowerCompensate::FIELD_VALUE.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MIN.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MAX.c_str()
|
|
);
|
|
string strsql = string(buffer) + "%d,%d,%f,%f,%f)";
|
|
sprintf_s(buffer, sizeof(buffer), strsql.c_str(), cno, cfg->m_percent, cfg->m_value, cfg->m_value_min, cfg->m_value_max);
|
|
m_pDB->exec(buffer);
|
|
}
|
|
|
|
void PowerCompensateDao::Save(int cno,PowerCompensateCfg& cfg)
|
|
{
|
|
char buffer[512];
|
|
map<unsigned short, PowerCompensate*> existMap;
|
|
sprintf_s(buffer, sizeof(buffer), "SELECT %s,%s,%s,%s,%s FROM %s WHERE %s=%d ORDER BY %s",
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str(),
|
|
PowerCompensate::FIELD_VALUE.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MIN.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MAX.c_str(),
|
|
PowerCompensate::TABLE_NAME.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
cno,
|
|
PowerCompensate::FIELD_PERCENT.c_str());
|
|
SQLite::Statement query(*m_pDB, buffer);
|
|
while (query.executeStep()) {
|
|
PowerCompensate* ppc = new PowerCompensate();
|
|
ppc->m_cno = query.getColumn(PowerCompensate::FIELD_CNO.c_str()).getInt();
|
|
ppc->m_percent = query.getColumn(PowerCompensate::FIELD_PERCENT.c_str()).getUInt();
|
|
ppc->m_value = (float)query.getColumn(PowerCompensate::FIELD_VALUE.c_str()).getDouble();
|
|
ppc->m_value_min = (float)query.getColumn(PowerCompensate::FIELD_VALUE_MIN.c_str()).getDouble();
|
|
ppc->m_value_max = (float)query.getColumn(PowerCompensate::FIELD_VALUE_MAX.c_str()).getDouble();
|
|
existMap[ppc->m_percent] = ppc;
|
|
}
|
|
|
|
vector<PowerCompensate*> ins;
|
|
vector<PowerCompensate*> dels;
|
|
vector<PowerCompensate*> ups;
|
|
|
|
for (size_t i = 0; i < cfg.m_pcs.size(); ++i) {
|
|
PowerCompensate* pc = cfg.m_pcs[i];
|
|
if (existMap.find(pc->m_percent) != existMap.end())
|
|
{
|
|
ups.push_back(pc);
|
|
}
|
|
else {
|
|
ins.push_back(pc);
|
|
}
|
|
}
|
|
|
|
for (auto pc : existMap) {
|
|
bool isFind = false;
|
|
for (size_t i = 0; i < ups.size(); ++i) {
|
|
if (pc.second->m_percent == ups[i]->m_percent) {
|
|
isFind = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!isFind) {
|
|
dels.push_back(pc.second);
|
|
}
|
|
}
|
|
|
|
if (!dels.empty()) {
|
|
for (size_t i = 0; i < dels.size(); ++i) {
|
|
PowerCompensate* pc = dels[i];
|
|
sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s WHERE %s=%d AND %s=%u", PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), cno, PowerCompensate::FIELD_PERCENT.c_str(), pc->m_percent);
|
|
m_pDB->exec(string(buffer));
|
|
}
|
|
}
|
|
|
|
if (!ups.empty())
|
|
{
|
|
for (size_t i = 0; i < ups.size(); ++i) {
|
|
PowerCompensate* pc = ups[i];
|
|
sprintf_s(buffer, sizeof(buffer), "UPDATE %s SET %s=%.3f WHERE %s=%d AND %s=%u", PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_VALUE.c_str(), pc->m_value, PowerCompensate::FIELD_CNO.c_str(), cno, PowerCompensate::FIELD_PERCENT.c_str(), pc->m_percent);
|
|
m_pDB->exec(string(buffer));
|
|
}
|
|
}
|
|
|
|
string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES(";
|
|
sprintf_s(buffer, sizeof(buffer), strtemp.c_str(),
|
|
PowerCompensate::TABLE_NAME.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str(),
|
|
PowerCompensate::FIELD_VALUE.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MIN.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MAX.c_str()
|
|
);
|
|
string strsql = string(buffer) + "%d,%d,%.3f,%.3f,%.3f)";
|
|
if (!ins.empty())
|
|
{
|
|
for (size_t i = 0; i < ins.size(); ++i) {
|
|
PowerCompensate* pc = ins[i];
|
|
sprintf_s(buffer, sizeof(buffer), strsql.c_str(), cno, pc->m_percent, pc->m_value, pc->m_value_min, pc->m_value_max);
|
|
m_pDB->exec(string(buffer));
|
|
}
|
|
}
|
|
}
|
|
|
|
void PowerCompensateDao::Export(int cno,PowerCompensateCfg& cfg, std::stringstream &sql)
|
|
{
|
|
char buffer[512];
|
|
sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s WHERE %s=%d", PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), cno);
|
|
sql << string(buffer) + "\n";
|
|
string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES(";
|
|
sprintf_s(buffer, sizeof(buffer), strtemp.c_str(),
|
|
PowerCompensate::TABLE_NAME.c_str(),
|
|
PowerCompensate::FIELD_CNO.c_str(),
|
|
PowerCompensate::FIELD_PERCENT.c_str(),
|
|
PowerCompensate::FIELD_VALUE.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MIN.c_str(),
|
|
PowerCompensate::FIELD_VALUE_MAX.c_str()
|
|
);
|
|
string strsql = string(buffer) + "%d,%d,%f,%f,%f)";
|
|
for (size_t i = 0; i < cfg.m_pcs.size(); ++i) {
|
|
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),cno, cfg.m_pcs[i]->m_percent, cfg.m_pcs[i]->m_value, cfg.m_pcs[i]->m_value_min, cfg.m_pcs[i]->m_value_max);
|
|
sql << string(buffer) + "\n";
|
|
}
|
|
}
|
|
|
|
void PowerCompensateDao::Import(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));
|
|
}
|