X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8569ecdc2c9368dc0fe650b901cce7b37337ffec..2196a3a0cdc5384c082febb7f4aa5994cc7d80db:/projects/stargazer/plugins/store/postgresql/postgresql_store_tariffs.cpp diff --git a/projects/stargazer/plugins/store/postgresql/postgresql_store_tariffs.cpp b/projects/stargazer/plugins/store/postgresql/postgresql_store_tariffs.cpp index c9cb7ccf..085675c3 100644 --- a/projects/stargazer/plugins/store/postgresql/postgresql_store_tariffs.cpp +++ b/projects/stargazer/plugins/store/postgresql/postgresql_store_tariffs.cpp @@ -26,6 +26,11 @@ * */ +#include "postgresql_store.h" + +#include "stg/tariff_conf.h" +#include "stg/common.h" + #include #include #include @@ -33,13 +38,17 @@ #include -#include "postgresql_store.h" -#include "stg/locker.h" +namespace +{ + +const int pt_mega = 1024 * 1024; + +} //----------------------------------------------------------------------------- int POSTGRESQL_STORE::GetTariffsList(std::vector * tariffsList) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +std::lock_guard lock(m_mutex); if (PQstatus(connection) != CONNECTION_OK) { @@ -95,7 +104,7 @@ return 0; //----------------------------------------------------------------------------- int POSTGRESQL_STORE::AddTariff(const std::string & name) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +std::lock_guard lock(m_mutex); if (PQstatus(connection) != CONNECTION_OK) { @@ -158,7 +167,7 @@ return 0; //----------------------------------------------------------------------------- int POSTGRESQL_STORE::DelTariff(const std::string & name) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +std::lock_guard lock(m_mutex); if (PQstatus(connection) != CONNECTION_OK) { @@ -219,10 +228,10 @@ if (CommitTransaction()) return 0; } //----------------------------------------------------------------------------- -int POSTGRESQL_STORE::SaveTariff(const TARIFF_DATA & td, +int POSTGRESQL_STORE::SaveTariff(const STG::TariffData & td, const std::string & tariffName) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +std::lock_guard lock(m_mutex); if (PQstatus(connection) != CONNECTION_OK) { @@ -255,10 +264,6 @@ if (EscapeString(ename)) return -1; } -int32_t id, i; -double pda, pdb, pna, pnb; -int threshold; - { std::ostringstream query; query << "SELECT pk_tariff FROM tb_tariffs WHERE name = '" << ename << "'"; @@ -292,6 +297,8 @@ if (tuples != 1) return -1; } +int32_t id; + { std::stringstream tuple; tuple << PQgetvalue(result, 0, 0); @@ -310,7 +317,11 @@ if (tuples != 1) traff_type = " << td.tariffConf.traffType; if (version > 6) - query << ", period = '" << TARIFF::PeriodToString(td.tariffConf.period) << "'"; + query << ", period = '" << STG::Tariff::toString(td.tariffConf.period) << "'"; + + if (version > 7) + query << ", change_policy = '" << STG::Tariff::toString(td.tariffConf.changePolicy) << "', \ + change_policy_timeout = CAST('" << formatTime(td.tariffConf.changePolicyTimeout) << "' AS TIMESTAMP)"; query << " WHERE pk_tariff = " << id; @@ -331,11 +342,12 @@ if (PQresultStatus(result) != PGRES_COMMAND_OK) PQclear(result); -for(i = 0; i < DIR_NUM; i++) +for(int i = 0; i < DIR_NUM; i++) { - - pda = td.dirPrice[i].priceDayA * 1024 * 1024; - pdb = td.dirPrice[i].priceDayB * 1024 * 1024; + double pda = td.dirPrice[i].priceDayA * 1024 * 1024; + double pdb = td.dirPrice[i].priceDayB * 1024 * 1024; + double pna = 0; + double pnb = 0; if (td.dirPrice[i].singlePrice) { @@ -348,6 +360,7 @@ for(i = 0; i < DIR_NUM; i++) pnb = td.dirPrice[i].priceNightB * 1024 * 1024; } + int threshold = 0; if (td.dirPrice[i].noDiscount) { threshold = 0xffFFffFF; @@ -400,10 +413,10 @@ if (CommitTransaction()) return 0; } //----------------------------------------------------------------------------- -int POSTGRESQL_STORE::RestoreTariff(TARIFF_DATA * td, - const std::string & tariffName) const +int POSTGRESQL_STORE::RestoreTariff(STG::TariffData * td, + const std::string & tariffName) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +std::lock_guard lock(m_mutex); if (PQstatus(connection) != CONNECTION_OK) { @@ -448,6 +461,10 @@ query << "SELECT pk_tariff, \ if (version > 6) query << ", period"; +if (version > 7) + query << ", change_policy \ + , change_policy_timeout"; + query << " FROM tb_tariffs WHERE name = '" << ename << "'"; result = PQexec(connection, query.str().c_str()); @@ -492,11 +509,19 @@ int id; tuple >> td->tariffConf.fee; tuple >> td->tariffConf.free; tuple >> td->tariffConf.passiveCost; - tuple >> td->tariffConf.traffType; + unsigned traffType; + tuple >> traffType; + td->tariffConf.traffType = static_cast(traffType); } if (version > 6) - td->tariffConf.period = TARIFF::StringToPeriod(PQgetvalue(result, 0, 5)); + td->tariffConf.period = STG::Tariff::parsePeriod(PQgetvalue(result, 0, 5)); + +if (version > 7) + { + td->tariffConf.changePolicy = STG::Tariff::parseChangePolicy(PQgetvalue(result, 0, 6)); + td->tariffConf.changePolicyTimeout = readTime(PQgetvalue(result, 0, 7)); + } PQclear(result); @@ -568,8 +593,8 @@ for (int i = 0; i < std::min(tuples, DIR_NUM); ++i) tuple >> td->dirPrice[dir].mNight; } - if (std::fabs(td->dirPrice[dir].priceDayA - td->dirPrice[dir].priceNightA) > 1.0e-3 && - std::fabs(td->dirPrice[dir].priceDayB - td->dirPrice[dir].priceNightB) > 1.0e-3) + if (std::fabs(td->dirPrice[dir].priceDayA - td->dirPrice[dir].priceNightA) < 1.0e-3 / pt_mega && + std::fabs(td->dirPrice[dir].priceDayB - td->dirPrice[dir].priceNightB) < 1.0e-3 / pt_mega) { td->dirPrice[dir].singlePrice = true; } @@ -577,7 +602,7 @@ for (int i = 0; i < std::min(tuples, DIR_NUM); ++i) { td->dirPrice[dir].singlePrice = false; } - if (td->dirPrice[dir].threshold == (int)0xffFFffFF) + if (td->dirPrice[dir].threshold == static_cast(0xffFFffFF)) { td->dirPrice[dir].noDiscount = true; }