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

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));
}