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

@@ -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);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////