modify for ledgerupdate
This commit is contained in:
@@ -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 ¤t_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> */////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
@@ -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>///////////////////////////////////
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user