增加业务数据解析的控制

main
BlueMatthew 2 years ago
parent 1113098dd9
commit 1d82a73560

@ -51,3 +51,7 @@ thread_respone_num = 2
[HT_LOGGER] [HT_LOGGER]
logger = console,debug,error,warning,package logger = console,debug,error,warning,package
#logger = error,warning #logger = error,warning
[HT_BUSINESS]
parse_busi_data = 1

@ -122,6 +122,9 @@ public:
char isLogConsole(void); char isLogConsole(void);
char isLogMessage(void); char isLogMessage(void);
void setParseBusiData(unsigned char flag);
unsigned char shouldParseBusiData (void);
// version infomation functios // version infomation functios
void setServerVersion(char *pver) ; void setServerVersion(char *pver) ;
char *getServerVersion(); char *getServerVersion();
@ -172,6 +175,9 @@ private:
char m_logpack; // package print logger char m_logpack; // package print logger
char m_logconsole; // console print char m_logconsole; // console print
char m_logmessage; // message print char m_logmessage; // message print
// Business Data
unsigned char m_parseBusiData;
}; };
#endif #endif

@ -46,6 +46,13 @@ typedef struct tagIEC_DEVICE
unsigned char one_dtime; unsigned char one_dtime;
}IEC_DEVICE; }IEC_DEVICE;
typedef struct tagIEC_FIELD
{
std::string name;
float value;
time_t ts;
} IEC_FIELD;
typedef struct tagIEC_POINT typedef struct tagIEC_POINT
{ {
unsigned int sadr; // 信息体地址map.key unsigned int sadr; // 信息体地址map.key

@ -44,6 +44,8 @@ TConfig::TConfig()
m_opration_num = 1; m_opration_num = 1;
m_respone_num = 1 ; m_respone_num = 1 ;
m_parseBusiData = 1;
} }
TConfig::~TConfig() TConfig::~TConfig()
@ -367,6 +369,16 @@ unsigned int TConfig::getResponeThreadNumber()
{ {
return m_respone_num ; return m_respone_num ;
} }
void TConfig::setParseBusiData(unsigned char flag)
{
m_parseBusiData = flag;
}
unsigned char TConfig::shouldParseBusiData(void)
{
return m_parseBusiData;
}
/************************************************************************* /*************************************************************************
Function iniGetString Function iniGetString
Rectives a character string from the specified section in the Rectives a character string from the specified section in the
@ -671,6 +683,13 @@ bool TConfig::getIniConfig()
} }
setResponeThreadNumber((unsigned int)atoi(szTmp)); setResponeThreadNumber((unsigned int)atoi(szTmp));
memset(szTmp, 0x00, sizeof(szTmp));
if ((iRet = iniGetString("HT_BUSINESS", "parse_busi_data", szTmp, sizeof(szTmp))) < 0) {
vPrtLogMsg(LOG_ERROR, iRet, "get db_max_conn parameter failed");
return false;
}
setParseBusiData((unsigned char)atoi(szTmp));
return true; return true;
} }

@ -1418,6 +1418,7 @@ bool bSetPointTableValueYC(float v, unsigned int adr)
return true; return true;
} }
bool bSetPointTableValueYC(const std::vector<IEC_OBJVAL_NEW>& values) bool bSetPointTableValueYC(const std::vector<IEC_OBJVAL_NEW>& values)
{ {
// Save the origin data into database first // Save the origin data into database first
@ -1426,92 +1427,94 @@ bool bSetPointTableValueYC(const std::vector<IEC_OBJVAL_NEW>& values)
addOriginDataListNew(*it); addOriginDataListNew(*it);
} }
std::string tableName; if (g_TConfig.shouldParseBusiData() != 0)
std::string dtimeFildName; {
std::string devidFildName;
unsigned int devId = 0;
bool one_dtime = true;
time_t ts = 0; time_t ts = 0;
std::map<unsigned int, IEC_POINT>::const_iterator itPoint; std::map<unsigned int, IEC_POINT>::const_iterator itPoint;
std::map<unsigned int, IEC_DEVICE>::const_iterator itDev; std::map<unsigned int, IEC_DEVICE>::const_iterator itDev;
std::string fields, fieldValues; std::string fields, fieldValues;
std::map<unsigned int, std::vector<IEC_FIELD> > records;
std::map<unsigned int, std::vector<IEC_FIELD> >::iterator itRecord;
std::vector<IEC_FIELD>::iterator itField;
char dataBuf[32] = { 0 }; char dataBuf[32] = { 0 };
IEC_FIELD field;
mutex_lock(g_map_iec_mutex_new); mutex_lock(g_map_iec_mutex_new);
for (std::vector<IEC_OBJVAL_NEW>::const_iterator it = values.begin(); it != values.end(); ++it) for (std::vector<IEC_OBJVAL_NEW>::const_iterator it = values.begin(); it != values.end(); ++it)
{ {
itPoint = g_map_iec_new.find(it->sadr); itPoint = g_map_iec_new.find(it->sadr);
if (itPoint != g_map_iec_new.end()) if (itPoint == g_map_iec_new.end() || strlen((const char*)itPoint->second.fieldName) == 0)
{ {
continue; continue;
} }
itDev = g_map_devices.find(itPoint->second.sensor_id); itRecord = records.find(itPoint->second.sensor_id);
if (itDev != g_map_devices.end()) if (itRecord == records.end())
{ {
continue; itRecord = records.insert(records.end(), std::make_pair<>(itPoint->second.sensor_id, std::vector<IEC_FIELD>()));
} }
if (!tableName.empty()) field.name = (const char*)itPoint->second.fieldName;
{ field.ts = it->dtime;
tableName = (const char *)itDev->second.tableName; field.value = it->fval;
dtimeFildName = (const char *)itDev->second.dtimeFieldName;
devidFildName = (const char *)itDev->second.devidFieldName; itRecord->second.push_back(field);
devId = itDev->second.sensor_id;
one_dtime = (itDev->second.one_dtime != 0);
ts = it->dtime;
vPrtLogMsg(LOG_DEBUG, RET_OK, "Table: %s oneTime=%u", tableName.c_str(), (unsigned int)itDev->second.one_dtime);
if (tableName.empty())
{
break;
}
} }
else
std::string sql;
for (itRecord = records.begin(); itRecord != records.end(); ++itRecord)
{ {
if (tableName.compare((const char *)itDev->second.tableName) != 0) itDev = g_map_devices.find(itRecord->first);
if (itDev == g_map_devices.end() || strlen((const char*)itDev->second.tableName) == 0)
{ {
continue; continue;
} }
}
fields.append((const char *)itPoint->second.fieldName); fields.clear();
fieldValues.clear();
sql.clear();
for (itField = itRecord->second.begin(); itField != itRecord->second.end(); ++itField)
{
ts = itField->ts;
fields.append(itField->name);
fields.append(","); fields.append(",");
fieldValues.append("'"); fieldValues.append("'");
snprintf(dataBuf, sizeof(dataBuf), "%0.4f", it->fval); snprintf(dataBuf, sizeof(dataBuf), "%0.4f", itField->value);
fieldValues.append(dataBuf); fieldValues.append(dataBuf);
fieldValues.append("',"); fieldValues.append("',");
if (!one_dtime) if ((itDev->second.one_dtime == 0))
{ {
fields.append((const char *)itPoint->second.fieldName); fields.append((const char *)itPoint->second.fieldName);
fields.append("_time,"); fields.append("_time,");
fieldValues.append("FROM_UNIXTIME("); fieldValues.append("FROM_UNIXTIME(");
snprintf(dataBuf, sizeof(dataBuf), "%lld", (long long)it->dtime); snprintf(dataBuf, sizeof(dataBuf), "%lld", (long long)ts);
fieldValues.append(dataBuf); fieldValues.append(dataBuf);
fieldValues.append("),"); fieldValues.append("),");
} }
} }
mutex_unlock(g_map_iec_mutex_new);
if (!tableName.empty()) sql = "INSERT INTO ";
{ sql.append((const char *)itDev->second.tableName);
// Assume they belongs the same object
std::string sql = "INSERT INTO ";
sql.append(tableName);
sql.append("("); sql.append("(");
sql.append(devidFildName); sql.append((const char *)itDev->second.devidFieldName);
sql.append(","); sql.append(",");
if (itDev->second.one_dtime != 0)
{
sql.append((const char *)itDev->second.dtimeFieldName);
sql.append(",");
}
sql.append(fields, 0, fields.size() - 1); sql.append(fields, 0, fields.size() - 1);
sql.append(" VALUES(");
snprintf(dataBuf, sizeof(dataBuf), "%u", devId); sql.append(") VALUES(");
snprintf(dataBuf, sizeof(dataBuf), "%u", itDev->second.sensor_id);
sql.append(dataBuf); sql.append(dataBuf);
sql.append(","); sql.append(",");
if (itDev->second.one_dtime != 0)
if (one_dtime)
{ {
sql.append("FROM_UNIXTIME("); sql.append("FROM_UNIXTIME(");
snprintf(dataBuf, sizeof(dataBuf), "%lld", (long long)ts); snprintf(dataBuf, sizeof(dataBuf), "%lld", (long long)ts);
@ -1522,6 +1525,8 @@ bool bSetPointTableValueYC(const std::vector<IEC_OBJVAL_NEW>& values)
sql.append(fieldValues, 0, fieldValues.size() - 1); sql.append(fieldValues, 0, fieldValues.size() - 1);
sql.append(")"); sql.append(")");
vPrtLogMsg(LOG_DEBUG, RET_OK, "Insert busi data %s", sql.c_str());
std::list<std::string>::iterator it; std::list<std::string>::iterator it;
mutex_lock(g_list_busi_data_mutex); mutex_lock(g_list_busi_data_mutex);
it = g_list_busi_data.insert(g_list_busi_data.end(), std::string()); it = g_list_busi_data.insert(g_list_busi_data.end(), std::string());
@ -1529,6 +1534,9 @@ bool bSetPointTableValueYC(const std::vector<IEC_OBJVAL_NEW>& values)
mutex_unlock(g_list_busi_data_mutex); mutex_unlock(g_list_busi_data_mutex);
} }
mutex_unlock(g_map_iec_mutex_new);
}
/* /*
IEC_OBJVAL_NEW objVal = { 0 }; IEC_OBJVAL_NEW objVal = { 0 };
objVal.stype = 2; objVal.stype = 2;

Loading…
Cancel
Save