@@ -33,6 +33,9 @@ extern std::string WEB_EVENT;
extern std : : string WEB_FILEDOWNLOAD ;
extern std : : string G_CONNECT_TOPIC ;
//lnk20250115添加台账锁
extern pthread_mutex_t mtx ;
bool DEBUGOPEN = 0 ;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -56,7 +59,10 @@ public:
int nDataType ; //告警SOE事件类型
QString type ; //参数等级type类型: 0-DataType 1-监测点 2-剔除标记 3-发生时刻,毫秒 4-数据链表 5-相位 6-值索引 9-实时SOE事件
QString triggerFlag ; //告警SOE事件触发指标名称
int nIndex ; //数据在每条线路LineInfo值数组中的位置
int nIndex ; //数据在每条线路LineInfo值数组中的位置
QString desc ; //soe事件描述
QString DO ; //数据对象名
QString DA ; //数据属性名
QString strFullName ; //数据对象名 $ 数据属性名
@@ -869,6 +875,7 @@ bool ParseXMLConfig2(int xml_flag, XmlConfig *cfg, list<CTopic*> *ctopiclist,QSt
{
CEventData * ed = new CEventData ( ) ; //SOE事件类指针
ed - > triggerFlag = node . toElement ( ) . attribute ( " name " ) ; //SOE名称
ed - > desc = node . toElement ( ) . attribute ( " desc " ) ; //SOE描述
ed - > DO = node . toElement ( ) . attribute ( " DO " ) ; //数据对象名
ed - > DA = node . toElement ( ) . attribute ( " DA " ) ; //数据属性名
ed - > type = node . toElement ( ) . attribute ( " type " ) ; //参数等级type类型: 0-DataType 1-监测点 2-剔除标记 3-发生时刻,毫秒 4-数据链表 5-相位 6-值索引 9-实时SOE事件
@@ -2650,8 +2657,35 @@ int transfer_json_block_data(char v_wiring_type[], json_block_data *data) //json
return 1 ;
}
static void format_time_ms ( long long ms , char * buf , size_t buf_len )
{
time_t sec = ms / 1000 ;
int milli = ms % 1000 ;
struct tm tm_time ;
localtime_r ( & sec , & tm_time ) ; // 线程安全
snprintf ( buf , buf_len ,
" %04d-%02d-%02d %02d:%02d:%02d.%03d " ,
tm_time . tm_year + 1900 ,
tm_time . tm_mon + 1 ,
tm_time . tm_mday ,
tm_time . tm_hour ,
tm_time . tm_min ,
tm_time . tm_sec ,
milli ) ;
}
void processGGIO_start_data_end ( char * mp_id , char * fullname , double v , long long time , char * devtype , int monitor_id )
{
//监测点日志的key,lnk20250526
char full_key_m_c [ 256 ] ; // 分配足够空间
char full_key_m_d [ 256 ] ; // 分配足够空间
snprintf ( full_key_m_c , sizeof ( full_key_m_c ) , " monitor.%s.COM " , mp_id ) ;
snprintf ( full_key_m_d , sizeof ( full_key_m_d ) , " monitor.%s.DATA " , mp_id ) ;
//监测点日志的key,lnk20250526
XmlConfig c_xmlcfg ;
if ( xmlinfo_list . contains ( devtype ) ) {
c_xmlcfg = xmlinfo_list [ devtype ] - > xmlcfg ;
@@ -2683,6 +2717,28 @@ void processGGIO_start_data_end(char* mp_id,char* fullname,double v,long long ti
if ( pEventData - > strFullName . indexOf ( Full_name ) ! = - 1 )
{
KafkaData . strText . append ( QString ( " \" %1 \" " ) . arg ( pEventData - > triggerFlag ) ) ;
//使用日志接口记录日志
char time_str [ 64 ] ;
format_time_ms ( time , time_str , sizeof ( time_str ) ) ;
QByteArray descBa = pEventData - > desc . toLocal8Bit ( ) ;
pthread_mutex_lock ( & mtx ) ; std : : cout < < " ggio hold lock !!!!!!!!!!! " < < std : : endl ;
const char * mp_name_raw = find_mp_name_from_mp_id ( mp_id ) ;
pthread_mutex_unlock ( & mtx ) ; std : : cout < < " ggio unlock lock !!!!!!!!!!! " < < std : : endl ;
char mp_name [ 128 ] ;
if ( mp_name_raw & & mp_name_raw [ 0 ] ! = ' \0 ' ) {
snprintf ( mp_name , sizeof ( mp_name ) , " %s " , mp_name_raw ) ;
} else {
snprintf ( mp_name , sizeof ( mp_name ) , " unknown " ) ;
}
DIY_WARNLOG_CODE ( full_key_m_d , LOG_CODE_REPORT ,
" 监测点:%s(%s),在%s发生事件:%s,事件值:%.2f " ,
mp_name , mp_id , time_str , descBa . constData ( ) , v ) ;
break ;
}
}
@@ -2695,6 +2751,7 @@ void processGGIO_start_data_end(char* mp_id,char* fullname,double v,long long ti
kafka_data_list_mutex . lock ( ) ; //加锁
kafka_data_list . append ( KafkaData ) ; //添加 kafka发送链表
kafka_data_list_mutex . unlock ( ) ; //解锁
}
//zw修改 2023-8-31 新增或更新list队列 写入xml数据库信息 模型编码 终端型号 终端厂家 oss存储路径 时间