From d1ed49412cf41f23f9126f22f6fb9d6ca208eaab Mon Sep 17 00:00:00 2001 From: lnk Date: Mon, 9 Mar 2026 19:55:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E5=8F=AF=E4=BB=A5=E5=8F=AA?= =?UTF-8?q?=E5=BC=80=E6=97=A5=E5=BF=97=E5=B9=B6=E4=BF=9D=E7=95=99=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E6=9B=B4=E6=96=B0=E5=92=8C=E8=BF=9B=E7=A8=8B=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cfg_parse/cfg_parser.cpp | 13 ++++++--- mms/mms_process.c | 14 ++++++---- mms/mmsclient.c | 23 ++++++++++++++++ mms/rdb_client.c | 58 +++++++++++++++++++++------------------- 4 files changed, 73 insertions(+), 35 deletions(-) diff --git a/cfg_parse/cfg_parser.cpp b/cfg_parse/cfg_parser.cpp index e26dcb5..6775201 100644 --- a/cfg_parse/cfg_parser.cpp +++ b/cfg_parse/cfg_parser.cpp @@ -248,6 +248,9 @@ std::string FRONT_INST;//lnk20250512改为string char* FRONT_IP; int CITY_FLAG; +//lnk20260309添加一个全局变量,标志是否只运行补招程序 +int RECALL_ONLY_FLAG; + int recall_len; int recall_sta; int recall_daily; @@ -449,6 +452,10 @@ void init_config() { CITY_FLAG = settings.value("Flag/CityFlag", 0).toInt(); qDebug() << "Read CITY_FLAG:" << CITY_FLAG << endl; + //lnk20260309添加一个全局变量,标志是否只运行补招程序 + RECALL_ONLY_FLAG = settings.value("Flag/RecallOnlyFlag", 0).toInt(); + qDebug() << "Read RECALL_ONLY_FLAG:" << RECALL_ONLY_FLAG << endl; + //台账配置lnk20241031////////////////////////////////////////////////////////////// TERMINAL_STATUS = settings.value("Ledger/TerminalStatus", 0).toString().toStdString(); std::cout << "Read TERMINAL_STATUS:" << TERMINAL_STATUS << std::endl; @@ -5242,7 +5249,7 @@ void handleUploadResponse(const std::string& response, char* wavepath) { cJSON* json_data = cJSON_Parse(response.c_str()); if (json_data == nullptr) { std::cerr << "Error parsing response: " << cJSON_GetErrorPtr() << std::endl; - DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传暂态录波文件失败,web返回的消息错误,无法解析"); + DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传文件失败,web返回的消息错误,无法解析"); return; } @@ -5288,11 +5295,11 @@ void handleUploadResponse(const std::string& response, char* wavepath) { std::cout << "wavepath: " << wavepath << std::endl; - DIY_INFOLOG("process","【NORMAL】前置上传暂态录波文件成功,远端文件名:%s",wavepath); + DIY_INFOLOG("process","【NORMAL】前置上传文件成功,远端文件名:%s",wavepath); } } else { std::cerr << "Error: Missing expected fields in JSON response." << std::endl; - DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传暂态录波文件失败,web返回的消息没有远端文件名"); + DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传文件失败,web返回的消息没有远端文件名"); } // 释放 JSON 对象 diff --git a/mms/mms_process.c b/mms/mms_process.c index eaa559f..19a42f8 100644 --- a/mms/mms_process.c +++ b/mms/mms_process.c @@ -34,6 +34,7 @@ extern apr_pool_t* g_init_pool; extern int g_DevFlag; //日志配置中读取的参数,暂无特定使用lnk20250121 extern int IED_COUNT; +extern int RECALL_ONLY_FLAG; //lnk20260309添加一个全局变量,标志是否只运行补招程序 //lnk20250115end @@ -1418,11 +1419,14 @@ void check_ledger_update()//lnk20250113 //调试用 print_trigger_update_xml(trigger_ledger_update_xml); - //处理台账更新加台账锁lnk20250114 - //pthread_mutex_lock(&mtx); printf("ledgerupdate hold lock !!!!!!!!!!!"); - process_ledger_update(trigger_ledger_update_xml); //台账更新 - //pthread_mutex_unlock(&mtx); printf("ledgerupdate free lock !!!!!!!!!!!"); - + //处理台账更新添加控制标志 + if (RECALL_ONLY_FLAG != 1 || (g_node_id != STAT_DATA_BASE_NODE_ID)) { + process_ledger_update(trigger_ledger_update_xml); //台账更新 + } + else{ + printf("only process recall config, skip ledger update\n"); + DIY_WARNLOG_CODE("process",LOG_CODE_SPACE_ALARM,"【WARN】当前配置为仅日志模式,统计数据进程跳过台账更新"); + } } // 使用完后释放动态分配的内存 diff --git a/mms/mmsclient.c b/mms/mmsclient.c index 2a7c569..b849336 100644 --- a/mms/mmsclient.c +++ b/mms/mmsclient.c @@ -1457,6 +1457,29 @@ ST_VOID u_mvl_ident_ind (MVL_IND_PEND *indCtrl) /************************************************************************/ /* getFile */ +/* +先向远端发 fopen,打开远程文件 + +拿到这个远程文件会话句柄 frsmid + +循环发 fread,一块一块把远程文件内容读回来并写入本地文件 + +最后发 fclose,关闭远程文件 + +clientNetInfo:客户端和 MMS 服务器之间的网络连接信息 + +loc_file:本地保存的文件路径 + +rem_file:远端设备上的文件路径 + +iTimeout:每次请求等待响应的超时时间 + +返回值: + +SD_SUCCESS:下载成功 + +其他:失败错误码 + */ /************************************************************************/ ST_RET mms_getFile (MVL_NET_INFO *clientNetInfo, ST_CHAR *loc_file, ST_CHAR *rem_file, ST_INT iTimeout) diff --git a/mms/rdb_client.c b/mms/rdb_client.c index 8f7aa47..4fecca4 100644 --- a/mms/rdb_client.c +++ b/mms/rdb_client.c @@ -24,6 +24,7 @@ extern int SOCKET_PORT; extern int G_TEST_FLAG; extern int g_front_seg_index; extern int g_front_seg_num; +extern int RECALL_ONLY_FLAG; //lnk20260309添加一个全局变量,标志是否只运行补招程序 #include "../rocketmq/SimpleProducer.h" #include "../cfg_parse/custom_printf.h"//lnk20250225 @@ -187,42 +188,45 @@ apr_status_t init_rdb() init_config(); GetServerIndexFromDB(); - rv = parse_device_cfg_web(); - if (rv != APR_SUCCESS) { - echo_errg("Parsed device config xml file with error,try to run! \n"); + //只有补招运行时,统计不读取台账和模型 + if (RECALL_ONLY_FLAG != 1 || (g_node_id != STAT_DATA_BASE_NODE_ID)) { + rv = parse_device_cfg_web(); + if (rv != APR_SUCCESS) { + echo_errg("Parsed device config xml file with error,try to run! \n"); - //char buf[256]; - //format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index); - //log_error("process", buf); - DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index); + //char buf[256]; + //format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index); + //log_error("process", buf); + DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置的%s%d号进程调用web台账接口失败", get_front_msg_from_subdir(), g_front_seg_index); - return rv; - } + return rv; + } - //台账读取过后初始化各级的日志 - init_loggers(); - - rv = parse_model_cfg_web(); - if (rv != APR_SUCCESS) {//不可能 - echo_errg("Parsed model with error,try to run! \n"); + //台账读取过后初始化各级的日志 + init_loggers(); - //char buf[256]; - //format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index); - //log_error("process", buf); - DIY_ERRORLOG_CODE("process",LOG_CODE_ICD_AND_DOWNLOAD,"【ERROR】前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index); + rv = parse_model_cfg_web(); + if (rv != APR_SUCCESS) {//不可能 + echo_errg("Parsed model with error,try to run! \n"); - return rv; - } + //char buf[256]; + //format_log_msg(buf,sizeof(buf),"前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index); + //log_error("process", buf); + DIY_ERRORLOG_CODE("process",LOG_CODE_ICD_AND_DOWNLOAD,"【ERROR】前置的%s%d号进程调用web模型接口失败", get_front_msg_from_subdir(), g_front_seg_index); - Set_xml_nodeinfo();//解析xml模型 + return rv; + } - rv = parse_rpt_log_ini();//报告块初始化 - if (rv != APR_SUCCESS) { - echo_errg("Failed to parse report log define ini file! \n"); + Set_xml_nodeinfo();//解析xml模型 - DIY_ERRORLOG_CODE("process",LOG_CODE_RPTINIT,"【ERROR】前置的%s%d号进程报告初始化失败", get_front_msg_from_subdir(), g_front_seg_index); + rv = parse_rpt_log_ini();//报告块初始化 + if (rv != APR_SUCCESS) { + echo_errg("Failed to parse report log define ini file! \n"); - return rv; + DIY_ERRORLOG_CODE("process",LOG_CODE_RPTINIT,"【ERROR】前置的%s%d号进程报告初始化失败", get_front_msg_from_subdir(), g_front_seg_index); + + return rv; + } } if (app_get_private_config(g_my_conf_fname) != APR_SUCCESS) {