From caf3c308c141a757cb01d61d74ab1d5e6dc549e7 Mon Sep 17 00:00:00 2001 From: lnk Date: Thu, 25 Sep 2025 16:36:04 +0800 Subject: [PATCH] add ledger update --- LFtid1056/cloudfront/code/cfg_parser.cpp | 176 ++++++++++++++++++----- LFtid1056/cloudfront/code/interface.cpp | 11 +- LFtid1056/cloudfront/code/interface.h | 67 ++++++++- LFtid1056/cloudfront/code/rocketmq.cpp | 115 +++++++++++---- LFtid1056/cloudfront/code/worker.cpp | 1 + 5 files changed, 298 insertions(+), 72 deletions(-) diff --git a/LFtid1056/cloudfront/code/cfg_parser.cpp b/LFtid1056/cloudfront/code/cfg_parser.cpp index 4ac2cf4..77c6e86 100644 --- a/LFtid1056/cloudfront/code/cfg_parser.cpp +++ b/LFtid1056/cloudfront/code/cfg_parser.cpp @@ -1455,7 +1455,7 @@ std::list find_xml_belong_to_this_process() // 根据 str_tag 将 terminal 添加到对应的数组 void add_terminal_to_trigger_update(trigger_update_xml_t& trigger_update_xml, const std::string& str_tag, - const terminal_dev& work_terminal) { + const update_dev& work_terminal) { if (str_tag == "add") { std::cout << "new ledger!!!!" << std::endl; trigger_update_xml.new_updates.push_back(work_terminal); @@ -1472,7 +1472,7 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml, const std::string& str_tag, const std::string& data, const std::string& guid_value) { - terminal_dev work_terminal; + update_dev work_terminal; work_terminal.guid = guid_value; tinyxml2::XMLDocument doc; @@ -1490,31 +1490,32 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml, work_terminal.terminal_id = get_value("id"); work_terminal.terminal_name = get_value("terminalCode"); - work_terminal.org_name = get_value("orgName"); - work_terminal.maint_name = get_value("maintName"); - work_terminal.station_name = get_value("stationName"); - work_terminal.tmnl_factory = get_value("manufacturer"); + //work_terminal.org_name = get_value("orgName"); + //work_terminal.maint_name = get_value("maintName"); + //work_terminal.station_name = get_value("stationName"); + //work_terminal.tmnl_factory = get_value("manufacturer"); work_terminal.tmnl_status = get_value("status"); work_terminal.dev_type = get_value("devType"); - work_terminal.dev_key = get_value("devKey"); - work_terminal.dev_series = get_value("series"); + //work_terminal.dev_key = get_value("devKey"); + //work_terminal.dev_series = get_value("series"); work_terminal.processNo = get_value("processNo"); - work_terminal.addr_str = get_value("ip"); - work_terminal.port = get_value("port"); - work_terminal.timestamp = get_value("updateTime"); + //work_terminal.addr_str = get_value("ip"); + //work_terminal.port = get_value("port"); + //work_terminal.timestamp = get_value("updateTime"); + work_terminal.Righttime = get_value("Righttime"); work_terminal.mac = get_value("mac"); for (tinyxml2::XMLElement* monitor = root->FirstChildElement("monitorData"); monitor; monitor = monitor->NextSiblingElement("monitorData")) { - ledger_monitor mon; + update_monitor mon; mon.monitor_id = monitor->FirstChildElement("id") ? monitor->FirstChildElement("id")->GetText() : "N/A"; mon.monitor_name = monitor->FirstChildElement("name") ? monitor->FirstChildElement("name")->GetText() : "N/A"; mon.voltage_level = monitor->FirstChildElement("voltageLevel") ? monitor->FirstChildElement("voltageLevel")->GetText() : "N/A"; mon.terminal_connect = monitor->FirstChildElement("ptType") ? monitor->FirstChildElement("ptType")->GetText() : "N/A"; mon.logical_device_seq = monitor->FirstChildElement("lineNo") ? monitor->FirstChildElement("lineNo")->GetText() : "N/A"; - mon.timestamp = monitor->FirstChildElement("timestamp") ? monitor->FirstChildElement("timestamp")->GetText() : "N/A"; + //mon.timestamp = monitor->FirstChildElement("timestamp") ? monitor->FirstChildElement("timestamp")->GetText() : "N/A"; mon.terminal_id = monitor->FirstChildElement("terminal_id") ? monitor->FirstChildElement("terminal_name")->GetText() : "N/A"; mon.status = monitor->FirstChildElement("status") ? monitor->FirstChildElement("status")->GetText() : "N/A"; @@ -1543,7 +1544,7 @@ void parse_ledger_update(trigger_update_xml_t& trigger_update_xml, if (strTag == "add" || strTag == "modify") { parse_terminal_from_data(trigger_update_xml, strTag, data, guid_value); } else if (strTag == "delete") { - terminal_dev delete_terminal; + update_dev delete_terminal; tinyxml2::XMLDocument doc; if (doc.Parse(data.c_str()) != tinyxml2::XML_SUCCESS) { @@ -1673,7 +1674,7 @@ int parse_ledger_update_xml(trigger_update_xml_t& trigger_update_xml) } //更新单个台账 -int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_dev) { +int update_one_terminal_ledger(const update_dev& update,terminal_dev& target_dev) { // 更新基本信息 if (!update.terminal_id.empty()) { target_dev.terminal_id = update.terminal_id; @@ -1683,14 +1684,14 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d target_dev.terminal_name = update.terminal_name; std::cout << "terminal_name: " << target_dev.terminal_name << std::endl; } - if (!update.tmnl_factory.empty()) { + /*if (!update.tmnl_factory.empty()) { target_dev.tmnl_factory = update.tmnl_factory; std::cout << "tmnl_factory: " << target_dev.tmnl_factory << std::endl; } if (!update.tmnl_status.empty()) { target_dev.tmnl_status = update.tmnl_status; std::cout << "tmnl_status: " << target_dev.tmnl_status << std::endl; - } + }*/ if (!update.dev_type.empty()) { target_dev.dev_type = update.dev_type; std::cout << "dev_type: " << target_dev.dev_type << std::endl; @@ -1699,20 +1700,20 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d target_dev.processNo = update.processNo; std::cout << "processNo: " << target_dev.processNo << std::endl; } - if (!update.dev_series.empty()) { + /*if (!update.dev_series.empty()) { target_dev.dev_series = update.dev_series; std::cout << "dev_series: " << target_dev.dev_series << std::endl; } if (!update.dev_key.empty()) { target_dev.dev_key = update.dev_key; std::cout << "dev_key: " << target_dev.dev_key << std::endl; - } + }*/ if (!update.addr_str.empty()) { target_dev.addr_str = update.addr_str; std::cout << "addr_str: " << target_dev.addr_str << std::endl; } - if (!update.port.empty()) { + /*if (!update.port.empty()) { target_dev.port = update.port; std::cout << "port: " << target_dev.port << std::endl; } @@ -1742,7 +1743,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d std::cerr << "Error: invalid timestamp format." << std::endl; return -1; } - } + }*/ // 清空旧监测点并重新填充 target_dev.line.clear(); @@ -1758,7 +1759,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d m.terminal_connect = mon.terminal_connect; m.status = mon.status; m.terminal_id = mon.terminal_id; - m.timestamp = mon.timestamp; + //m.timestamp = mon.timestamp; m.CT1 = mon.CT1; m.CT2 = mon.CT2; @@ -1770,7 +1771,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d std::cout << "monitor_id " << m.monitor_id << " uses delta wiring." << std::endl; } - if (!m.timestamp.empty()) { + /*if (!m.timestamp.empty()) { struct tm timeinfo = {}; if (sscanf(m.timestamp.c_str(), "%4d-%2d-%2d %2d:%2d:%2d", &timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday, @@ -1784,7 +1785,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d std::cout << "monitor time (unix): " << m.timestamp << std::endl; } } - } + }*/ target_dev.line.push_back(m); } @@ -1799,7 +1800,7 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml) std::cout << "add ledger num: " << ledger_update_xml.new_updates.size() << std::endl; for (auto it = ledger_update_xml.new_updates.begin(); it != ledger_update_xml.new_updates.end(); ) { - terminal_dev& new_dev = *it; + update_dev& new_dev = *it; auto found = std::find_if(terminal_devlist.begin(), terminal_devlist.end(), [&](const terminal_dev& d) { return d.terminal_id == new_dev.terminal_id; }); @@ -1829,17 +1830,20 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml) continue; } - if (parse_model_cfg_web_one(target_dev.dev_type).empty()) { + /*if (parse_model_cfg_web_one(target_dev.dev_type).empty()) { send_reply_to_queue(new_dev.guid, "2", "终端 id: " + new_dev.terminal_id + " 台账更新失败,未找到装置型号"); ++it; continue; - } + }*/ - Set_xml_nodeinfo_one(target_dev.dev_type); + //Set_xml_nodeinfo_one(target_dev.dev_type); init_loggers_bydevid(target_dev.terminal_id); terminal_devlist.push_back(target_dev); + DeviceInfo device = make_device_from_terminal(target_dev); + ClientManager::instance().add_device(device); + send_reply_to_queue(new_dev.guid, "2", "终端 id: " + new_dev.terminal_id + " 台账添加成功"); @@ -1854,21 +1858,25 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml) [&](const terminal_dev& d) { return d.terminal_id == mod_dev.terminal_id; }); if (it != terminal_devlist.end()) { - remove_loggers_by_terminal_id(mod_dev.terminal_id); + erase_one_terminals_by_id(mod_dev.terminal_id); if (update_one_terminal_ledger(mod_dev, *it) != 0) { send_reply_to_queue(mod_dev.guid, "2", "终端 id: " + mod_dev.terminal_id + " 台账更新失败,写入失败"); continue; } - if (parse_model_cfg_web_one(it->dev_type).empty()) { + /*if (parse_model_cfg_web_one(it->dev_type).empty()) { send_reply_to_queue(mod_dev.guid, "2", "终端 id: " + mod_dev.terminal_id + " 台账更新失败,未找到装置型号"); continue; - } + }*/ - Set_xml_nodeinfo_one(it->dev_type); + //Set_xml_nodeinfo_one(it->dev_type); init_loggers_bydevid(mod_dev.terminal_id); + + DeviceInfo device = make_device_from_terminal(target_dev); + ClientManager::instance().add_device(device); + send_reply_to_queue(mod_dev.guid, "2", "终端 id: " + mod_dev.terminal_id + " 台账修改成功"); } else { @@ -1885,8 +1893,8 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml) [&](const terminal_dev& d) { return d.terminal_id == del_dev.terminal_id; }); if (it != terminal_devlist.end()) { - remove_loggers_by_terminal_id(del_dev.terminal_id); - terminal_devlist.erase(it); + erase_one_terminals_by_id(del_dev.terminal_id); + ClientManager::instance().remove_device(del_dev.terminal_id); send_reply_to_queue(del_dev.guid, "2", "终端 id: " + del_dev.terminal_id + " 台账删除成功"); } else { @@ -5233,4 +5241,104 @@ void enqueue_stat_pq(const std::string& max_base64Str, std::cout << "Successfully assembled tagPqData for line: " << cid << std::endl; +} + +/////////////////////////////////////////////////////////////////////////////////////清空一个装置运行数据 +size_t erase_one_terminals_by_id(const std::string& terminal_id) { + + // 先对所有匹配项做日志清理 + for (const auto& d : terminal_devlist) { + if (d.terminal_id == terminal_id) { + remove_loggers_by_terminal_id(terminal_id); + } + } + // 再统一擦除 + const auto old_size = terminal_devlist.size(); + terminal_devlist.erase( + std::remove_if(terminal_devlist.begin(), terminal_devlist.end(), + [&](const terminal_dev& d){ return d.terminal_id == terminal_id; }), + terminal_devlist.end()); + return old_size - terminal_devlist.size(); +} + +/////////////////////////////////////////////////////////////////////////////////////////////// +static DeviceInfo make_device_from_terminal(const terminal_dev& t) { + DeviceInfo d; + + // 基本信息 + d.device_id = t.terminal_id; + d.name = t.terminal_name; + d.model = t.dev_type; + d.mac = t.mac; + + // status:优先按数字解析,其次按 online/true/yes/on 识别;默认 0 + int status = 0; + if (!t.tmnl_status.empty()) { + bool parsed_num = false; + // 尝试解析为整数 + char* endp = nullptr; + long v = std::strtol(t.tmnl_status.c_str(), &endp, 10); + if (endp && *endp == '\0') { parsed_num = true; status = (v != 0) ? 1 : 0; } + + if (!parsed_num) { + std::string s = t.tmnl_status; + for (char& c : s) c = static_cast(std::tolower(static_cast(c))); + status = (s == "online" || s == "true" || s == "yes" || s == "on" || s == "1") ? 1 : 0; + } + } + d.status = status; + + // righttime:支持 "1/true/yes/on";默认 false + bool rt = false; + if (!t.Righttime.empty()) { + std::string s = t.Righttime; + for (char& c : s) c = static_cast(std::tolower(static_cast(c))); + rt = (s == "1" || s == "true" || s == "yes" || s == "on"); + } + d.righttime = rt; + + // points + d.points.clear(); + d.points.reserve(t.line.size()); + for (const auto& m : t.line) { + PointInfo p; + p.point_id = m.monitor_id; + p.name = m.monitor_name; + p.device_id = t.terminal_id; + + // nCpuNo:从 logical_device_seq 转 ushort,非法则置 0 + unsigned short cpu_no = 0; + if (!m.logical_device_seq.empty()) { + char* endp = nullptr; + long v = std::strtol(m.logical_device_seq.c_str(), &endp, 10); + if (endp && *endp == '\0' && v >= 0) { + if (v > 0xFFFF) v = 0xFFFF; + cpu_no = static_cast(v); + } + } + p.nCpuNo = cpu_no; + + // 变比与电压等级 + p.PT1 = m.PT1; + p.PT2 = m.PT2; + p.CT1 = m.CT1; + p.CT2 = m.CT2; + p.strScale = m.voltage_level; + + // 接线方式:0-星型 1-角型;支持 "0/1"、包含“角/三角/delta/Δ” + int pttype = 0; // 默认星型 + if (!m.terminal_connect.empty()) { + std::string s = m.terminal_connect; + for (char& c : s) c = static_cast(std::tolower(static_cast(c))); + if (s == "1" || s.find("角") != std::string::npos || s.find("三角") != std::string::npos + || s.find("delta") != std::string::npos || s.find("△") != std::string::npos || s.find("Δ") != std::string::npos) { + pttype = 1; + } + } + p.nPTType = pttype; + + d.points.push_back(std::move(p)); + } + + return d; } \ No newline at end of file diff --git a/LFtid1056/cloudfront/code/interface.cpp b/LFtid1056/cloudfront/code/interface.cpp index 87546d1..9dc9037 100644 --- a/LFtid1056/cloudfront/code/interface.cpp +++ b/LFtid1056/cloudfront/code/interface.cpp @@ -752,7 +752,7 @@ int parse_device_cfg_web() DIY_DEBUGLOG("process", "【DEBUG】前置的%d号进程调用获取到的台账的数量为:%d", g_front_seg_index, count_cfg); if (IED_COUNT < count_cfg) { - std::cout << "!!!!!!!!!!single process can not add any ledger unless reboot!!!!!!!" << std::endl; + std::cout << "!!!!!!!!!!single process has ledger count more than config!!!!!!!" << std::endl; //DIY_WARNLOG("process","【WARN】前置的%d号进程获取到的台账的数量大于配置文件中给单个进程配置的台账数量:%d,这个进程将按照获取到的台账的数量来创建台账空间,这个进程不能直接通过台账添加来新增台账,只能通过重启进程或者先删除已有台账再添加台账的方式来添加新台账", g_front_seg_index, IED_COUNT); } else { //DIY_INFOLOG("process","【NORMAL】前置的%d号进程根据配置文件中给单个进程配置的台账数量:%d来创建台账空间", g_front_seg_index, IED_COUNT); @@ -764,17 +764,22 @@ int parse_device_cfg_web() terminal_devlist.clear(); + int idx = 0; for (const auto& kv : terminal_dev_map) { terminal_dev dev = kv.second; // kv.second 是对象,不用判断指针 + //dev.dev_index = static_cast(idx++); + // ======= [新增] 对 terminal_dev 中 web 未返回/未设置字段做统一初始化,避免脏值 ======= dev.guid.clear(); // [新增] 业务 guid 初始为空 dev.busytype = 0; // [新增] 业务类型(状态机)默认 0 dev.isbusy = 0; // [新增] 未进行业务 dev.busytimecount = 0; // [新增] 业务计时清零 + dev.internal_values.clear(); // [新增] 内部定值清空,等后续业务真实填充 dev.dz_internal_info_list.clear(); // [新增] 内部定值信息清空,等后续业务真实填充 + dev.control_words.clear(); // ------------------------------------------------------------------------------------ // ======= [新增] 对每个监测点做必要的内部结构初始化 ======= @@ -786,6 +791,10 @@ int parse_device_cfg_web() // 定值列表清理,等待后续配置/采集填充 mon.set_values.clear(); // [新增] mon.dz_info_list.clear(); // [新增] + + //补招列表清理 + mon.recall_list.clear(); + mon.recall_list_static.clear(); } // ------------------------------------------------------------------------------------ diff --git a/LFtid1056/cloudfront/code/interface.h b/LFtid1056/cloudfront/code/interface.h index d0ee754..d9aaa8a 100644 --- a/LFtid1056/cloudfront/code/interface.h +++ b/LFtid1056/cloudfront/code/interface.h @@ -179,6 +179,54 @@ class qvvr_event std::vector qvvrfile; //暂态文件组列表 }; +////////////////////////////////////////////////////////////////台账更新用 + +class update_monitor +{ +public: + std::string monitor_id; //监测点id + std::string terminal_id; //监测点的终端id + std::string monitor_name; //监测点名 + std::string logical_device_seq; //监测点序号 + std::string voltage_level; //监测点电压等级 + std::string terminal_connect; //监测点接线方式 + std::string timestamp; //更新时间 + std::string status; //监测点状态 + double PT1; // 电压变比1 + double PT2; // 电压变比2 + double CT1; // 电流变比1 + double CT2; // 电流变比2 + +}; + +//终端台账 +class update_dev +{ +public: + + std::string terminal_id; + std::string terminal_name; + std::string org_name; + std::string maint_name; + std::string station_name; + std::string tmnl_factory; + std::string tmnl_status; + std::string dev_type; + std::string dev_key; + std::string dev_series; + std::string addr_str; //装置ip + std::string port; //装置端口 + std::string timestamp; //更新时间 + std::string Righttime; //对时 + std::string processNo; + std::string maxProcessNum; + std::string mac; // 装置MAC地址,接口中从addr_str获取,因为ip和mac放同一位置 + + std::vector line; +}; + +////////////////////////////////////////////////////////////////////台账更新用 + //监测点台账 class ledger_monitor { @@ -213,6 +261,8 @@ public: class terminal_dev { public: + //int dev_index; + std::string guid; //正在进行的guid int busytype; //业务类型,使用状态机 int isbusy; //业务进行标志 @@ -239,7 +289,6 @@ public: std::string Righttime; //对时 std::string processNo; std::string maxProcessNum; - std::string mac; // 装置MAC地址,接口中从addr_str获取,因为ip和mac放同一位置 std::vector line; @@ -400,10 +449,10 @@ public: #define MAX_UPDATEA_NUM 10 typedef struct trigger_update_xml_t trigger_update_xml_t; struct trigger_update_xml_t { - std::vector new_updates; - std::vector modify_updates; - std::vector delete_updates; - std::vector work_updates; + std::vector new_updates; + std::vector modify_updates; + std::vector delete_updates; + std::vector work_updates; trigger_update_xml_t() = default; }; @@ -673,6 +722,11 @@ void filemenu_cache_put(const std::string& dev_id, //提取目录信息 bool filemenu_cache_take(const std::string& dev_id, std::vector& out); +//清空装置台账 +size_t erase_one_terminals_by_id(const std::string& terminal_id); + +//转换结构 +DeviceInfo make_device_from_terminal(const terminal_dev& t); //小工具 inline std::string trim_cstr(const char* s, size_t n) { @@ -750,10 +804,9 @@ void enqueue_stat_pq(const std::string& max_base64Str, extern int g_front_seg_index; extern std::string FRONT_INST; extern std::string FRONT_PATH; - extern std::string WEB_FILEUPLOAD; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// 响应码枚举 +// 云平台响应码枚举 enum class ResponseCode : int { OK = 200, // 请求成功 ACCEPTED = 201, // 请求被接受,开始处理 diff --git a/LFtid1056/cloudfront/code/rocketmq.cpp b/LFtid1056/cloudfront/code/rocketmq.cpp index 3a0833a..721c368 100644 --- a/LFtid1056/cloudfront/code/rocketmq.cpp +++ b/LFtid1056/cloudfront/code/rocketmq.cpp @@ -676,7 +676,7 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d send_reply_to_queue(guid, "1", "收到台账更新指令"); if (code_str == "add_terminal" || code_str == "ledger_modify") { - std::cout << "add or update ledger" << std::endl; + std::cout << "add or modify ledger" << std::endl; if (messageBody.contains("data") && messageBody["data"].is_array()) { for (const auto& item : messageBody["data"]) { @@ -696,6 +696,9 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d int procNo = item.value("processNo", -1); json_data.processNo = std::to_string(procNo); + //int procNum = item.value("maxProcessNum", -1); + //json_data.maxProcessNum = std::to_string(procNum); + //json_data.addr_str = item.value("ip", ""); //json_data.port = item.value("port", ""); //json_data.timestamp = item.value("updateTime", ""); @@ -713,19 +716,53 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d m.logical_device_seq = monitor_item.value("lineNo", ""); m.terminal_connect = monitor_item.value("ptType", ""); //m.timestamp = json_data.timestamp; - m.terminal_id = json_data.terminal_id; + m.terminal_id = monitor_item.value("deviceId", json_data.terminal_id); + m.CT1 = monitor_item.value("CT1", ""); + m.CT2 = monitor_item.value("CT2", ""); + m.PT1 = monitor_item.value("PT1", ""); + m.PT2 = monitor_item.value("PT2", ""); } } print_terminal(json_data); - std::string xmlContent = prepare_update(code_str, json_data, guid); + /*std::string xmlContent = prepare_update(code_str, json_data, guid); if (!xmlContent.empty()) { char nodeid[20]; std::sprintf(nodeid, "%u", g_node_id); std::string file_name = output_dir + "/" + nodeid + "_" + std::to_string(g_front_seg_index) + "_" + json_data.terminal_id + "_" + code_str + ".xml"; writeToFile(file_name, xmlContent); - } + }*/ + if(code_str == "add_terminal"){ + init_loggers_bydevid(target_dev.terminal_id); + terminal_devlist.push_back(json_data); + + //调用接口添加到通讯列表 + DeviceInfo device = make_device_from_terminal(json_data); + ClientManager::instance().add_device(device); + + send_reply_to_queue(new_dev.guid, "2", + "终端 id: " + new_dev.terminal_id + " 台账添加成功"); + } + else if(code_str == "ledger_modify"){ + + if(erase_one_terminals_by_id(json_data.terminal_id) == 1){ + init_loggers_bydevid(target_dev.terminal_id); + terminal_devlist.push_back(json_data); + + //调用接口添加到通讯列表 + DeviceInfo device = make_device_from_terminal(json_data); + ClientManager::instance().add_device(device); + + send_reply_to_queue(del_dev.guid, "2", + "终端 id: " + del_dev.terminal_id + " 台账修改成功"); + } + else{ + send_reply_to_queue(del_dev.guid, "2", + "终端 id: " + del_dev.terminal_id + " 台账修改失败"); + } + } + } } } else if (code_str == "delete_terminal") { @@ -736,13 +773,25 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d auto id = item.value("id", ""); json_data.terminal_id = id; - std::string xmlContent = prepare_update(code_str, json_data, guid); + /*std::string xmlContent = prepare_update(code_str, json_data, guid); if (!xmlContent.empty()) { char nodeid[20]; std::sprintf(nodeid, "%u", g_node_id); std::string file_name = output_dir + "/" + nodeid + "_" + std::to_string(g_front_seg_index) + "_" + json_data.terminal_id + "_delete_terminal.xml"; writeToFile(file_name, xmlContent); - } + }*/ + + //直接加锁删除 + std::lock_guard lock(ledgermtx); + if(erase_one_terminals_by_id(json_data.terminal_id) == 1){ + lientManager::instance().remove_device(json_data.terminal_id); + send_reply_to_queue(del_dev.guid, "2", + "终端 id: " + del_dev.terminal_id + " 台账删除成功"); + } + else{ + send_reply_to_queue(del_dev.guid, "2", + "终端 id: " + del_dev.terminal_id + " 台账删除失败"); + } } } } else { @@ -1081,48 +1130,51 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json add_indent(xmlStream, indentLevel); xmlStream << "" << json_data.terminal_id << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.addr_str << "" << std::endl; // Assuming `addr_str` for IP + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.addr_str << "" << std::endl; add_indent(xmlStream, indentLevel); xmlStream << "" << json_data.dev_type << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.maint_name << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.maint_name << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.org_name << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.org_name << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.port << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.port << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.station_name << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.station_name << "" << std::endl; add_indent(xmlStream, indentLevel); xmlStream << "" << json_data.terminal_name << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.timestamp << "" << std::endl; // Assuming `timestamp` + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.timestamp << "" << std::endl; // Assuming `timestamp` - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.tmnl_factory << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.tmnl_factory << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.tmnl_status << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.tmnl_status << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.dev_series << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.dev_series << "" << std::endl; //lnk20250210 add_indent(xmlStream, indentLevel); xmlStream << "" << json_data.processNo << "" << std::endl; add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.dev_key << "" << std::endl; + xmlStream << "" << json_data.Righttime << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.mac << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.dev_key << "" << std::endl; + + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << json_data.mac << "" << std::endl; // monitorData 部分 for (int i = 0; json_data.line[i].monitor_id[0] != '\0'; i++) { @@ -1147,8 +1199,8 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json add_indent(xmlStream, indentLevel); xmlStream << "" << monitor.terminal_connect << "" << std::endl; - add_indent(xmlStream, indentLevel); - xmlStream << "" << monitor.timestamp << "" << std::endl; + //add_indent(xmlStream, indentLevel); + //xmlStream << "" << monitor.timestamp << "" << std::endl; add_indent(xmlStream, indentLevel); xmlStream << "" << monitor.terminal_id << "" << std::endl; @@ -2016,4 +2068,7 @@ void connect_status_update(const std::string& id, int status) // 调试打印 std::cout << "[connect_status_update] queued JSON:\n" << j.dump(4) << std::endl; -} \ No newline at end of file +} + + + diff --git a/LFtid1056/cloudfront/code/worker.cpp b/LFtid1056/cloudfront/code/worker.cpp index 00c162f..2ff8b8b 100644 --- a/LFtid1056/cloudfront/code/worker.cpp +++ b/LFtid1056/cloudfront/code/worker.cpp @@ -414,6 +414,7 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) { std::ostringstream os; os << "\r\x1B[K------------------------------------\n"; + //os << "\r\x1B[K|-- dev_index : " << dev.dev_index << "\n"; os << "\r\x1B[K|-- terminal_id : " << dev.terminal_id << "\n"; os << "\r\x1B[K|-- terminal_name : " << dev.terminal_name << "\n"; os << "\r\x1B[K|-- dev_ip : " << dev.addr_str << "\n";