modify for ledgerupdate

This commit is contained in:
lnk
2025-01-17 17:10:18 +08:00
parent 040b1bd5f6
commit 760dffe884
5 changed files with 386 additions and 48 deletions

View File

@@ -187,7 +187,7 @@ QString THREE_SECS_CONFIG_FN = QString("Trigger3S.xml");//ʵʱ
QString RECALL_CONFIG_FN = QString("Recall.xml");//<2F><><EFBFBD><EFBFBD>
//lnk20241220<32><30><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD>̨<EFBFBD><CCA8>
std::string LEDGER_UPDATE_FN = "LedgerUpdate.xml";
std::string LEDGER_UPDATE_FN = "LedgerUpdate.log";
const int MAX_CPUNO = 10;
@@ -12809,7 +12809,70 @@ int parse_model_cfg_web()
return e.code;
}
}
////////////////////////////////////////////////////////////icdģ<64><C4A3><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>lnk20250116
char* parse_model_cfg_web_one(ied_t* ied)
{
std::vector<std::string> codes;//<2F><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD>
QMap<QString, icd_model*> icd_model_map;
ied_usr_t* ied_usr;
ied_usr = (ied_usr_t*)ied->usr_ext;
// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD> JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
std::string input_jstr = "[";
input_jstr += "\"" + std::string(ied_usr->dev_type) + "\"";
input_jstr += "]"; // <20><><EFBFBD><EFBFBD> JSON <20><><EFBFBD><EFBFBD>
std::cout << "input_jstr: " << input_jstr << std::endl; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
codes.push_back(input_jstr); //<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>ͺ<EFBFBD><CDBA>б<EFBFBD>-<2D><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>icd<63><64><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
parse_model_web(&icd_model_map,codes);
codes.clear();
try {
char model_id[64];
char tmnl_type[64];
//char tmnl_factory[64];
char file_name[128];
char file_path[128];
//char timestamp[64];
otl_datetime timestamp;//<2F><>ʹ<EFBFBD><CAB9>
// <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QMap<QString, icd_model*>::iterator it;
for (it = icd_model_map.begin(); it != icd_model_map.end(); ++it) {
icd_model* value = it.value();
// ȷ<><C8B7> value <20><>Ϊ<EFBFBD><CEAA>
if (value != nullptr) {
// <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ʋ<EFBFBD>ȡֵ
strncpy(model_id, value->model_id, sizeof(model_id) - 1);
strncpy(tmnl_type, value->tmnl_type, sizeof(tmnl_type) - 1);
strncpy(file_path, value->file_path, sizeof(file_path) - 1);
strncpy(file_name, value->file_name, sizeof(file_name) - 1);
//strncpy(timestamp, value->timestamp, sizeof(timestamp) - 1);
std::cout << "model_id" << model_id << std::endl;
std::cout << "tmnl_type" << tmnl_type << std::endl;
std::cout << "filepath" << file_path << std::endl;
std::cout << "filename" << file_name << std::endl;
//lnk20241125<32><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//strncpy(tmnl_type, "PS_NET", sizeof(tmnl_type) - 1);
Set_xml_databaseinfo(model_id, tmnl_type, file_path, file_name, timestamp.year, timestamp.month, timestamp.day, timestamp.hour, timestamp.minute, timestamp.second);
}
}
return model_id;
}
catch (otl_exception& e)
{
printf("\nicd model\"%s\"select error,ERROR code= %d,msg= %s \n", g_strOTLConnect.c_str(), e.code, e.msg);
return NULL;
}
}
////////////////////////////////////////////////////////////
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>нӿڣ<D3BF><DAA3>ݲ<EFBFBD><DDB2>޸ģ<DEB8><C4A3><EFBFBD><EFBFBD>ܲ<EFBFBD>ʹ<EFBFBD><CAB9>
#if 0
bool CheckPG_To_Recall_web(long long start, long long end, char* Monitorid)
@@ -14265,15 +14328,116 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
return 0;
}
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>//////////////////////////////
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>///////////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>//////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>///////////////////////////////////
//6-init_rem_dib_table//////////////////////////////
//6-init_rem_dib_table///////////////////////////////////
////////////////////////////////////////////////////////////////////////̨<>˸<EFBFBD><CBB8>¼<EFBFBD>¼<EFBFBD><C2BC>־
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><EFBFBD><E4B2A2>ʽ<EFBFBD><CABD>Ϊ "YYYY-MM-DD HH:MM:SS"
std::string get_current_time() {
std::time_t t = std::time(NULL);
struct std::tm tm = *std::localtime(&t);
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm);
return std::string(buffer);
}
// д<><D0B4><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ŀ
void write_log_entry(std::ofstream &log_file, const std::string &action, const std::string &terminal_id, const std::string &current_time) {
log_file << terminal_id << "\t" << action << "time:" << current_time << "\n";
}
// <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>־
void create_ledger_log(trigger_update_xml_t* ledger_update_xml) {
std::string log_filename = "../etc/" + std::string(LEDGER_UPDATE_FN);
std::ofstream log_file(log_filename.c_str(), std::ios::app); // <20><>׷<EFBFBD><D7B7>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
if (!log_file.is_open()) {
std::cerr << "Failed to open log file: " << log_filename << std::endl;
return;
}
std::vector<std::pair<std::string, std::string> > new_entries; // <20><><EFBFBD>ڴ洢new<65><77>terminal_id<69><64>ʱ<EFBFBD><CAB1>
std::vector<std::pair<std::string, std::string> > modify_entries; // <20><><EFBFBD>ڴ洢modify<66><79>terminal_id<69><64>ʱ<EFBFBD><CAB1>
std::vector<std::pair<std::string, std::string> > delete_entries; // <20><><EFBFBD>ڴ洢delete<74><65>terminal_id<69><64>ʱ<EFBFBD><CAB1>
std::string current_time = get_current_time(); // <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
// <20><><EFBFBD><EFBFBD> new_updates
for (int i = 0; i < ledger_update_xml->new_update_num; ++i) {
std::string terminal_id = ledger_update_xml->new_updates[i].terminal_id;
new_entries.push_back(std::make_pair(terminal_id, current_time));
}
// <20><><EFBFBD><EFBFBD> modify_updates
for (int i = 0; i < ledger_update_xml->modify_update_num; ++i) {
std::string terminal_id = ledger_update_xml->modify_updates[i].terminal_id;
modify_entries.push_back(std::make_pair(terminal_id, current_time));
}
// <20><><EFBFBD><EFBFBD> delete_updates
for (int i = 0; i < ledger_update_xml->delete_update_num; ++i) {
std::string terminal_id = ledger_update_xml->delete_updates[i].terminal_id;
delete_entries.push_back(std::make_pair(terminal_id, current_time));
}
// д<><D0B4><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
if (!new_entries.empty()) {
log_file << "<new>\n";
for (size_t i = 0; i < new_entries.size(); ++i) {
write_log_entry(log_file, "add", new_entries[i].first, new_entries[i].second);
}
log_file << "</new>\n";
}
if (!modify_entries.empty()) {
log_file << "<modify>\n";
for (size_t i = 0; i < modify_entries.size(); ++i) {
write_log_entry(log_file, "modify", modify_entries[i].first, modify_entries[i].second);
}
log_file << "</modify>\n";
}
if (!delete_entries.empty()) {
log_file << "<delete>\n";
for (size_t i = 0; i < delete_entries.size(); ++i) {
write_log_entry(log_file, "delete", delete_entries[i].first, delete_entries[i].second);
}
log_file << "</delete>\n";
}
log_file.close();
std::cout << "Ledger log has been updated." << std::endl;
}
///////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> ied_usr_t <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
void clear_ied_usr(ied_t* ied) {
if (ied && ied->usr_ext) { // <20><><EFBFBD><EFBFBD> usr_ext <20>Ƿ<EFBFBD>Ϊ NULL
ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext;
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ա
memset(ied_usr->dev_type, 0, sizeof(ied_usr->dev_type));
memset(ied_usr->dev_key, 0, sizeof(ied_usr->dev_key));
memset(ied_usr->dev_series, 0, sizeof(ied_usr->dev_series));
memset(ied_usr->terminal_id, 0, sizeof(ied_usr->terminal_id));
memset(ied_usr->org_name, 0, sizeof(ied_usr->org_name));
memset(ied_usr->maint_name, 0, sizeof(ied_usr->maint_name));
memset(ied_usr->station_name, 0, sizeof(ied_usr->station_name));
memset(ied_usr->tmnl_factory, 0, sizeof(ied_usr->tmnl_factory));
memset(ied_usr->tmnl_status, 0, sizeof(ied_usr->tmnl_status));
memset(ied_usr->terminal_code, 0, sizeof(ied_usr->terminal_code));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>͵ij<CDB5>Ա
ied_usr->dev_idx = 0;
ied_usr->dev_flag = 0;
ied_usr->cookie = NULL;
ied_usr->last_call_wavelist_time = 0;
ied_usr->time = 0;
ied_usr->update_flag = 0;
}
}
/*<2A><>װC<D7B0>ɵ<EFBFBD><C9B5>õ<EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>º<EFBFBD><C2BA><EFBFBD> */////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -19,6 +19,7 @@
#include "mms_json_inter.h" //jsonͷ<6E>ļ<EFBFBD>
#include "../mms/db_interface.h" //jsonͷ<6E>ļ<EFBFBD>
#include "../mms/rdb_client.h" //̨<>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýӿ<C3BD>
//lnk20241031<33><31><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#include "../json/cjson.h"
@@ -2895,9 +2896,9 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20241125
cout << "setxmldatabase:" << TMNL_TYPE << endl;
if (!xmlinfo_list.contains(type))
if (!xmlinfo_list.contains(type))//<2F><><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>в<EFBFBD><D0B2><EFBFBD>
{
Xmldata* config = new Xmldata();
Xmldata* config = new Xmldata(); //û<>ҵ<EFBFBD><D2B5>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ն<EFBFBD><D5B6><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>б<EFBFBD><D0B1><EFBFBD>
xmlinfo_list.insert(type, config);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20241125
@@ -2909,7 +2910,7 @@ void Set_xml_databaseinfo(char* MODEL_ID, char* TMNL_TYPE, char* FILE_PATH, char
cout << "xmlinfo_list type contain:" << type.toStdString() << endl;
QDateTime time(QDate(year, month, day), QTime(hour, minute, second));
if (xmlinfo_list[type]->xmlbase.datetime == time) {
if (xmlinfo_list[type]->xmlbase.datetime == time) { //<2F>ն<EFBFBD><D5B6>ͺŸ<CDBA><C5B8>±<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺŴ<CDBA><C5B4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>õ<EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD><E2A1A3><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ͺź<CDBA>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>ʱҪע<D2AA><D7A2>
xmlinfo_list[type]->updataflag = false;
}
else {
@@ -3571,3 +3572,20 @@ void comflag_test()
}
///////////////////////////////////////////////////lnk2024-10-21////////////////////////////////////////////////////////
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>//////////////////////////////
void Set_xml_nodeinfo_one(char* dev_type)
{
bool ret = false;
if(xmlinfo_list[QString::fromUtf8(dev_type)] != NULL){
ret = ParseXMLConfig2(&(xmlinfo_list[QString::fromUtf8(dev_type)]->xmlcfg), &(xmlinfo_list[QString::fromUtf8(dev_type)]->topicList), xmlinfo_list[QString::fromUtf8(dev_type)]->xmlbase.MODEL_ID);
if(!ret)
{
std::cout << "!!!! this ledger xml config fail!!!!" << std::endl;
}
}
else{
std::cout << "xmlinfo_list not contain this devtype" << std::endl;
}
}
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>///////////////////////////////////

View File

@@ -206,6 +206,7 @@ int parse_device_web_test_front_write();
int parse_device_cfg_web();
//int parse_line_cfg_web();
int parse_model_cfg_web();
void SOEFileWeb(char* localpath,char* cloudpath,char* wavepath);
void OTL_Select_recall_web(char* time, char* id);

View File

@@ -793,15 +793,14 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
int update_num;
ied_t *ied;
LD_info_t *LD_info;
int need_write_file;
int new_in_work_found;
ied_usr_t* ied_usr;
chnl_usr_t* chnl_usr;
int chnl_no;
chnl_usr_t *chnl_usr = NULL;
printf("!!!start update ledger!!!\n");
need_write_file = FALSE; //д<><D0B4>̨<EFBFBD>˸<EFBFBD><CBB8>¼<EFBFBD>¼<EFBFBD>ļ<EFBFBD>
update = ledger_update_xml->new_updates; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
update_num = ledger_update_xml->new_update_num;
printf("add ledger num:%d\n",update_num);
@@ -877,11 +876,33 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////
int ret = update_one_terminal_ledger(update,i,ied,g_node->n_clients);
if(ret){
printf("ledger can not be update!!!!!quit process!!!!!\n");
return 0;
}
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>//////////////////////////////
char model[64] = {0};
// <20><>ȡģ<C8A1><C4A3>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񷵻<C7B7> NULL
char* model_id = parse_model_cfg_web_one(ied);//<2F><EFBFBD><E6B4A2>/FeProject/dat/
if (model_id != NULL) {
// <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> model <20><><EFBFBD><EFBFBD>
strncpy(model, model_id, sizeof(model) - 1);
model[sizeof(model) - 1] = '\0'; // ȷ<><C8B7><EFBFBD><EFBFBD> null <20><>β
printf("ledger Model ID: %s\n", model);
} else {
printf("ledger No model ID found.\n");
}
char full_path[128];
snprintf(full_path, sizeof(full_path), "/FeProject/dat/%s.xml", model); // ƴ<><C6B4>·<EFBFBD><C2B7>
// <20><>ӡģ<D3A1><C4A3>·<EFBFBD><C2B7>
printf("ledger icd config file full path: %s\n", full_path);
//ӳ<><D3B3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
Set_xml_nodeinfo_one(ied_usr->dev_type);
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>///////////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>//////////////////////////////
@@ -893,42 +914,169 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//6-init_rem_dib_table///////////////////////////////////
}
need_write_file = TRUE;//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>д<EFBFBD><D0B4>̨<EFBFBD>˸<EFBFBD><CBB8>¼<EFBFBD>¼<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
}
//////////////////////////////////////////////////////////////////////////////
/*trigger = trigger_3s_xml->delete_triggers; //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>delete<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
trigger_num = trigger_3s_xml->delete_trigger_num;
for (i=0; i<trigger_num; i++){
for (j=0; j<trigger_3s_xml->work_trigger_num; j++){
trigger_work = &trigger_3s_xml->work_triggers[j];
if (trigger_work->dev_idx==trigger[i].dev_idx && trigger_work->line_id==trigger[i].line_id ) {
clear_rpt_counter_by_trigger(trigger_work);
trigger_work->dev_idx = INVALID_DEV_IDX;
}
}
need_write_file = TRUE;
}
//////////////////////////////////////////////////////////////////////////////
trigger = trigger_3s_xml->modify_triggers; //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>modify<66><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
trigger_num = trigger_3s_xml->modify_trigger_num;
for (i=0; i<trigger_num; i++){
for (j=0; j<trigger_3s_xml->work_trigger_num; j++){
trigger_work = &trigger_3s_xml->work_triggers[j];
if (trigger_work->dev_idx==trigger[i].dev_idx && trigger_work->line_id==trigger[i].line_id ) {
*trigger_work = trigger[i];
clear_rpt_counter_by_trigger(trigger_work);
}
}
need_write_file = TRUE;
}
///////////////////////////////////////////////////////////////////////////////
trigger = trigger_3s_xml->work_triggers; //<2F>ļ<EFBFBD><C4BC><EFBFBD>work<72><6B>
trigger_num = trigger_3s_xml->work_trigger_num;
if (need_write_file)
create_3s_xml(trigger_3s_xml); //д<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>work<EFBFBD><EFBFBD>*/
//////////////////////////////////////////////////////////////////////////////modify
update = ledger_update_xml->modify_updates; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD>
update_num = ledger_update_xml->modify_updates_num;
printf("modify ledger num:%d\n",update_num);
for (i=0; i<update_num; i++){ //<2F><EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
new_in_work_found = FALSE;
if(update[i].terminal_id != NULL){
printf(" ledger of %s\n",update[i].terminal_id);
ied = find_ied_from_terminal_id(update[i].terminal_id); //ͨ<><CDA8><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5>ն˺<D5B6><CBBA>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>
if (ied){
printf("find ied by terminal_id, terminal already exsist\n");
new_in_work_found = TRUE; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն˵<D5B6><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////////
for(chnl_no=0 ; chnl_no<ied->chncount; chnl_no++) {
chnl_usr = (chnl_usr_t*)ied->channel[chnl_no].connect;
if (chnl_usr->m_state!=CHANNEL_CONNECTED){
continue;
}
closeChannel(chnl_usr);//<2F>رո<D8B1><D5B8><EFBFBD>̨<EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/////////////////////////////////////////////////////////////////////////////////
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////
ied_usr = ied->usr_ext;
int ret = update_one_terminal_ledger(update,i,ied,ied_usr->dev_idx);
if(ret){
printf("ledger can not be update!!!!!quit process!!!!!\n");
return 0;
}
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>////////////////////////////////////////////
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>///////////////////////////////////////////
char model[64] = {0};
// <20><>ȡģ<C8A1><C4A3>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񷵻<C7B7> NULL
char* model_id = parse_model_cfg_web_one(ied);//<2F><EFBFBD><E6B4A2>/FeProject/dat/
if (model_id != NULL) {
// <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> model <20><><EFBFBD><EFBFBD>
strncpy(model, model_id, sizeof(model) - 1);
model[sizeof(model) - 1] = '\0'; // ȷ<><C8B7><EFBFBD><EFBFBD> null <20><>β
printf("ledger Model ID: %s\n", model);
} else {
printf("ledger No model ID found.\n");
}
char full_path[128];
snprintf(full_path, sizeof(full_path), "/FeProject/dat/%s.xml", model); // ƴ<><C6B4>·<EFBFBD><C2B7>
// <20><>ӡģ<D3A1><C4A3>·<EFBFBD><C2B7>
printf("ledger icd config file full path: %s\n", full_path);
//ӳ<><D3B3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
Set_xml_nodeinfo_one(ied_usr->dev_type);
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>///////////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>//////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>///////////////////////////////////
//6-init_rem_dib_table//////////////////////////////
//6-init_rem_dib_table///////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////////
}
}
if (!new_in_work_found){
printf("modify_updates can not find ied!!!!!!\n");
}
}
///////////////////////////////////////////////////////////////////////////////delete
update = ledger_update_xml->delete_updates; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
update_num = ledger_update_xml->delete_updates_num;
printf("delete ledger num:%d\n",update_num);
for (i=0; i<update_num; i++){ //<2F><EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
new_in_work_found = FALSE;
if(update[i].terminal_id != NULL){
printf(" ledger of %s\n",update[i].terminal_id);
ied = find_ied_from_terminal_id(update[i].terminal_id); //ͨ<><CDA8><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5>ն˺<D5B6><CBBA>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>
if (ied){
printf("find ied by terminal_id, terminal already exsist\n");
new_in_work_found = TRUE; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն˵<D5B6><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////////
for(chnl_no=0 ; chnl_no<ied->chncount; chnl_no++) {
chnl_usr = (chnl_usr_t*)ied->channel[chnl_no].connect;
if (chnl_usr->m_state!=CHANNEL_CONNECTED){ //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ӵ<EFBFBD>
continue;
}
closeChannel(chnl_usr);//<2F>رո<D8B1><D5B8><EFBFBD>̨<EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////////
//3-ɾ<><C9BE>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////
// <20><><EFBFBD><EFBFBD>Ҫɾ<D2AA><C9BE> g_node->clients <20>е<EFBFBD>ij<EFBFBD><C4B3> ied<65><64>index Ϊɾ<CEAA><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int index_to_remove = 0;
ied_t* ied_find = NULL;
int iedno;
ied_usr_t* ied_usr_find = NULL;
ied_usr = (ied_usr_t*)ied->usr_ext;
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied_find = g_node->clients[iedno];
ied_usr_find = (ied_usr_t*)ied_find->usr_ext;
if (ied_usr_find && strcmp(ied_usr_find->terminal_id, ied_usr->terminal_id) == 0) {
index_to_remove = iedno;
break; //<2F>ҵ<EFBFBD><D2B5>˳<EFBFBD>
}
}
clear_ied_usr(ied); //̨<><CCA8><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD> ied <20><><EFBFBD>ڴ<EFBFBD>
ied_t* ied_to_remove = g_node->clients[index_to_remove];
memset(ied_to_remove, 0, sizeof(ied_t));
// <20>ͷ<EFBFBD> ied_usr <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ڴ棨<DAB4><E6A3A8><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
if (ied_to_remove->usr_ext) {
apr_pool_clear(g_init_pool); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD>ڴ<EFBFBD><DAB4>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20>ƶ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA>
for (int i = index_to_remove; i < g_node->n_clients - 1; i++) {
g_node->clients[i] = g_node->clients[i + 1];
}
// <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>Ե<EFBFBD><D4B5><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
ied_t** new_clients = (ied_t**)apr_pcalloc(g_cfg_pool, (g_node->n_clients - 1) * sizeof(ied_t*));
memcpy(new_clients, g_node->clients, (g_node->n_clients - 1) * sizeof(ied_t*));
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_node->clients = new_clients;
g_node->n_clients--;
//3-ɾ<><C9BE>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>//////////////////////////////
//ӳ<><D3B3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
//4-<2D><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>ļ<EFBFBD>///////////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////
//5-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////
//6-init_rem_dib_table//////////////////////////////
//6-init_rem_dib_table///////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////////////////////////////////
}
}
if (!new_in_work_found) {
printf("modify_updates can not find ied!!!!!!\n");
}
}
//////////////////////////////////////////////////////////////////////////////
if (ledger_update_xml->modify_update_num || ledger_update_xml->new_update_num || ledger_update_xml->delete_update_num){
create_ledger_log(ledger_update_xml); //д<><D0B4><EFBFBD>ļ<EFBFBD>
}
}
//̨<>˸<EFBFBD><CBB8>µ<EFBFBD><C2B5>Դ<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
@@ -1021,12 +1169,15 @@ void check_ledger_update()//lnk20250113
last_check_3s_config_time = now; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>նˣ<D5B6><CBA3><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ļ<EFBFBD>
while (APR_SUCCESS==parse_ledger_update_xml(&trigger_ledger_update_xml)){ //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF>Ը<EFBFBD><D4B8>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>
if (APR_SUCCESS==parse_ledger_update_xml(&trigger_ledger_update_xml)){ //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF>Ը<EFBFBD><D4B8>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
print_trigger_update_xml(&trigger_ledger_update_xml);
//<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>¼<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>lnk20250114
pthread_mutex_lock(&mtx);
process_ledger_update(&trigger_ledger_update_xml); //̨<>˸<EFBFBD><CBB8><EFBFBD>
process_ledger_update(&trigger_ledger_update_xml); //̨<>˸<EFBFBD><CBB8><EFBFBD>
pthread_mutex_unlock(&mtx);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -468,6 +468,10 @@ extern bool isCharPtrEmpty(const char* str);
extern int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml);
extern int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_index);
extern void print_trigger_update_xml(const trigger_update_xml_t* trigger_update);
extern char* parse_model_cfg_web_one(ied_t* ied);
extern void Set_xml_nodeinfo_one(char* dev_type);
extern void create_ledger_log(trigger_update_xml_t* ledger_update_xml);
extern void clear_ied_usr(ied_t* ied);
////////////////////////////////
int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml);
int create_3s_xml(trigger_3s_xml_t* trigger_3s_xml);