From e2ee8546c7f5c14a78ec68964c105ac489146fb3 Mon Sep 17 00:00:00 2001 From: lnk Date: Wed, 20 Aug 2025 20:32:17 +0800 Subject: [PATCH] fix ledger update --- cfg_parse/cfg_parser.cpp | 6 ++++-- cfg_parse/log4.cpp | 10 +++++----- json/create_json.cpp | 9 +++++---- mms/main.c | 2 +- mms/mms_process.c | 30 ++++++++++++++++++++++++++---- 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/cfg_parse/cfg_parser.cpp b/cfg_parse/cfg_parser.cpp index 5687bc4..8d4f820 100644 --- a/cfg_parse/cfg_parser.cpp +++ b/cfg_parse/cfg_parser.cpp @@ -5427,10 +5427,12 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i if (update[i].addr_str != NULL) { ied->channel[0].addr = ntohl(inet_addr(update[i].addr_str)); // DEV_IP strncpy(ied->channel[0].addr_str, update[i].addr_str, LONGNAME - 1); // DEV_IP + ied->channel[0].addr_str[LONGNAME-1] = '\0'; printf("ied_usr->addr_str: %s\n", ied->channel[0].addr_str); } else { ied->channel[0].addr = ntohl(inet_addr("0.0.0.0")); // DEV_IP - strncpy(ied->channel[0].addr_str, update[i].addr_str, LONGNAME - 1); // DEV_IP + strncpy(ied->channel[0].addr_str, "0.0.0.0", LONGNAME - 1); // DEV_IP + ied->channel[0].addr_str[LONGNAME-1] = '\0'; printf("ied_usr->addr_str: %s\n", ied->channel[0].addr_str); } if (update[i].port != NULL) { @@ -6194,7 +6196,7 @@ void clear_channel_and_cpuinfo(byte_t chncount, channel_t *channel, byte_t cpuco memset(channel[i].addr_str, 0, LONGNAME); channel[i].addr = 0; channel[i].port = 0; - channel[i].status = 0; + channel[i].status = CHANNEL_DISCONNECTED; channel[i].last_ticks = 0; channel[i].last_send_ticks = 0; channel[i].ied_id = 0; diff --git a/cfg_parse/log4.cpp b/cfg_parse/log4.cpp index 1743c38..7b70bc8 100644 --- a/cfg_parse/log4.cpp +++ b/cfg_parse/log4.cpp @@ -159,7 +159,7 @@ protected: << "\",\"logtype\":\"" << (logtype == LOGTYPE_COM ? "com" : "data") << "\",\"frontType\":\"" << get_front_type_from_subdir() // ★新增:输出 code 字段(整型) - << "\",\"code\":" << code + << "\",\"code\":\"" << code << "\",\"log\":\"" << escape_json(msg) << "\"}"; std::string jsonString = oss.str(); @@ -340,7 +340,7 @@ void init_loggers_bydevid(const char* dev_id) logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM); logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA); - DIY_INFOLOG(device_key_d.c_str(),"【WARN】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); + DIY_INFOLOG(device_key_d.c_str(),"【NORMAL】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); } // 初始化监测点 @@ -369,7 +369,7 @@ void init_loggers_bydevid(const char* dev_id) logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM); logger_map[mon_key_d.str()] = TypedLogger(mon_logger_d, LOGTYPE_DATA); - DIY_INFOLOG(mon_key_d.str().c_str(),"【WARN】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); + DIY_INFOLOG(mon_key_d.str().c_str(),"【NORMAL】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); } } @@ -418,7 +418,7 @@ void init_loggers() { logger_map[device_key_c] = TypedLogger(device_logger_c, LOGTYPE_COM); logger_map[device_key_d] = TypedLogger(device_logger_d, LOGTYPE_DATA); - DIY_INFOLOG(device_key_d.c_str(),"【WARN】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); + DIY_INFOLOG(device_key_d.c_str(),"【NORMAL】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id); // 初始化监测点 // 监测点 logger 名称格式:monitor..COM / .DATA @@ -443,7 +443,7 @@ void init_loggers() { logger_map[mon_key_c.str()] = TypedLogger(mon_logger_c, LOGTYPE_COM); logger_map[mon_key_d.str()] = TypedLogger(mon_logger_d, LOGTYPE_DATA); - DIY_INFOLOG(mon_key_d.str().c_str(),"【WARN】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); + DIY_INFOLOG(mon_key_d.str().c_str(),"【NORMAL】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id); } diff --git a/json/create_json.cpp b/json/create_json.cpp index 2370d53..b0c2416 100644 --- a/json/create_json.cpp +++ b/json/create_json.cpp @@ -2612,6 +2612,7 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char Xmldata* config = new Xmldata(); //没找到就插个新的终端类型到列表中 xmlinfo_list.insert(type, config); + xmlinfo_list[type]->updataflag = true;//lnk20250820 //调试用lnk20241125 cout << "xmlinfo_list insert type:" << type.toStdString() << endl; } @@ -3421,7 +3422,7 @@ void Set_xml_nodeinfo_one(char* dev_type) bool ret = false; if(xmlinfo_list[QString::fromUtf8(dev_type)] != NULL){ //原来已存在这个类型的节点 - if(xmlinfo_list[QString::fromUtf8(dev_type)]->updataflag == true){ //需要更新 + //if(xmlinfo_list[QString::fromUtf8(dev_type)]->updataflag == true){ //需要更新 //将这个点的xmlcfg和topicList删除 clearXmlConfigAndTopicList(xmlinfo_list[QString::fromUtf8(dev_type)]); @@ -3431,7 +3432,7 @@ void Set_xml_nodeinfo_one(char* dev_type) { std::cout << "!!!! this ledger xml config fail!!!!" << std::endl; } - } + //} } else{ @@ -3440,7 +3441,7 @@ void Set_xml_nodeinfo_one(char* dev_type) //添加角形 if(isdelta_flag){ if(xmlinfo_list2[QString::fromUtf8(dev_type)] != NULL){ //原来已存在这个类型的节点 - if(xmlinfo_list2[QString::fromUtf8(dev_type)]->updataflag == true){ //需要更新 + //if(xmlinfo_list2[QString::fromUtf8(dev_type)]->updataflag == true){ //需要更新 //将这个点的xmlcfg和topicList删除 clearXmlConfigAndTopicList(xmlinfo_list2[QString::fromUtf8(dev_type)]); @@ -3450,7 +3451,7 @@ void Set_xml_nodeinfo_one(char* dev_type) { std::cout << "!!!! this ledger xml config fail!!!!" << std::endl; } - } + //} } else{ diff --git a/mms/main.c b/mms/main.c index cd81896..9c1031a 100644 --- a/mms/main.c +++ b/mms/main.c @@ -232,7 +232,7 @@ int main(int argc, const char **argv) //char buf[256]; //format_log_msg(buf,sizeof(buf),"前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index); //log_debug("process", buf); - DIY_INFOLOG("process","【WARN】前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index); + DIY_INFOLOG("process","【NORMAL】前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index); #ifdef _OS_UNIX_ #ifdef QT_NO_DEBUG diff --git a/mms/mms_process.c b/mms/mms_process.c index fe981b8..a4317dd 100644 --- a/mms/mms_process.c +++ b/mms/mms_process.c @@ -321,13 +321,13 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) LD_info->registcount++; if (LD_info->registcount <= 5) { - DIY_ERRORLOG_CODE(full_key_m_c,LOG_CODE_REPORT,"【ERROR】监测点:%s - id:%s补招数据失败,监测点缺少报告控制块,请检查装置对应的装置类型是否有配对的icd模型", LD_info->name,LD_info->mp_id); + DIY_ERRORLOG_CODE(full_key_m_c,LOG_CODE_REPORT,"【ERROR】监测点:%s - id:%s报告触发失败,监测点逻辑标识号为0,请检查装置对应的台账信息是否正确", LD_info->name,LD_info->mp_id); } // 到5次就不再打印,并标记 if (LD_info->registcount > 5) { LD_info->has_logged_regist = true; - DIY_WARNLOG_CODE(full_key_m_c,LOG_CODE_REPORT,"【WARN】监测点:%s - id:%s缺少报告控制块日志已达本次记录上限,不再输出,请检查装置对应的装置类型是否有配对的icd模型", + DIY_WARNLOG_CODE(full_key_m_c,LOG_CODE_REPORT,"【WARN】监测点:%s - id:%s监测点逻辑标识号错误日志已达本次记录上限,不再输出,请检查装置对应的台账信息是否正确", LD_info->name, LD_info->mp_id); } } @@ -1638,7 +1638,15 @@ void CheckNextNotConnectedChannel() chnl_usr->m_reqCtrl = NULL; chnl_usr->net_info->rem_vmd = NULL; chnl_usr->m_state = CHANNEL_DISCONNECTED; - chnl_usr->m_ClosedMsTime = sGetMsTime(); + chnl_usr->m_ClosedMsTime = sGetMsTime(); + + //断联成功 + + apr_time_t t_now = apr_time_now(); + connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0); + //更新状态 + chnl_usr->chnl->ied->status = STATUS_OVERTIME; + chnl_usr->chnl->status = STATUS_OVERTIME; } } else @@ -1673,6 +1681,14 @@ void CheckNextNotConnectedChannel() chnl_usr->m_state = CHANNEL_DISCONNECTED; chnl_usr->m_ClosedMsTime = sGetMsTime(); + //断联 + + apr_time_t t_now = apr_time_now(); + connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0); + //更新状态 + chnl_usr->chnl->ied->status = STATUS_OVERTIME; + chnl_usr->chnl->status = STATUS_OVERTIME; + } } } @@ -1740,6 +1756,9 @@ void CheckNextNotConnectedChannel() ied_usr_t* ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext; apr_time_t t_now = apr_time_now(); connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0); + //更新状态 + chnl_usr->chnl->ied->status = STATUS_BREAKOFF; + chnl_usr->chnl->status = STATUS_BREAKOFF; //mq日志 DIY_WARNLOG_CODE(full_key_t_c,LOG_CODE_COMM,"【WARN】终端%s - ip端口:%s:%d 断连完成,关闭连接通道", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); @@ -1767,6 +1786,9 @@ void CheckNextNotConnectedChannel() ied_usr_t* ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext; apr_time_t t_now = apr_time_now(); connectlog_pgsql(ied_usr->terminal_id,convertMsToDateTimeString(t_now),0); + //更新状态 + chnl_usr->chnl->ied->status = STATUS_BREAKOFF; + chnl_usr->chnl->status = STATUS_BREAKOFF; //mq日志 DIY_WARNLOG_CODE(full_key_t_c,LOG_CODE_COMM,"【WARN】终端%s - ip端口:%s:%d 断连未完成,但是已经超时180秒,关闭连接通道", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port); @@ -1969,7 +1991,7 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info ) //WW 2023-11-01 end if (ret2 !=APR_SUCCESS){ //mq日志 - DIY_WARNLOG_CODE(full_key_m_c,LOG_CODE_COMTRADE_FILE,"【WARN】监测点:%s - id:%s前置记录的录波事件上传的录波号段%d与从装置获取的录波文件列表匹配失败,装置没有对应的号段的录波文件,前置清除这个录波号段", LD_info->name,LD_info->mp_id,LD_info->FltNum[i]); + DIY_WARNLOG_CODE(full_key_m_c,LOG_CODE_COMTRADE_FILE,"【WARN】监测点:%s - id:%s前置记录的录波事件上传的录波号段%d与从装置获取的录波文件列表匹配失败,装置没有对应的号段的录波文件,清除该记录", LD_info->name,LD_info->mp_id,LD_info->FltNum[i]); //lnk20250819装置没有对应的文件时清除录波号段 LD_info->FltNum[i] = -1; return ret2;