modify ledger update and rtdata

This commit is contained in:
lnk
2025-09-30 16:17:04 +08:00
parent caf3c308c1
commit 35231baae7
6 changed files with 233 additions and 159 deletions

View File

@@ -8,6 +8,7 @@
#include <map>
#include <mutex>
#include <sstream>
#include <iostream>
///////////////////////////////////////////////////////////////////////////////////////////
@@ -203,6 +204,7 @@ public:
class update_dev
{
public:
std::string guid; // ★新增:供发送回复使用
std::string terminal_id;
std::string terminal_name;
@@ -222,7 +224,7 @@ public:
std::string maxProcessNum;
std::string mac; // 装置MAC地址接口中从addr_str获取因为ip和mac放同一位置
std::vector<ledger_monitor> line;
std::vector<update_monitor> line;
};
////////////////////////////////////////////////////////////////////台账更新用
@@ -529,7 +531,6 @@ std::string get_current_time();
bool is_blank(const std::string& str);
void print_terminal(const terminal_dev& tmnl);
void printTerminalDevMap(const std::map<std::string, terminal_dev>& terminal_dev_map);
void upload_data_test();
@@ -728,7 +729,72 @@ size_t erase_one_terminals_by_id(const std::string& terminal_id);
//转换结构
DeviceInfo make_device_from_terminal(const terminal_dev& t);
//小工具
////////////////////////////////////////////////////////////////////////////////////////////////////////////////模板打印
// ===== 通用打印实现(模板) =====
template <typename Mon>
inline void print_monitor_common(const Mon& mon) {
auto safe = [](const std::string& s) -> const std::string& {
static const std::string NA = "N/A";
return s.empty() ? NA : s;
};
std::cout << "Monitor ID: " << safe(mon.monitor_id) << "\n";
std::cout << "Terminal ID: " << safe(mon.terminal_id) << "\n";
std::cout << "Monitor Name: " << safe(mon.monitor_name) << "\n";
std::cout << "Logical Device Sequence: " << safe(mon.logical_device_seq) << "\n";
std::cout << "Voltage Level: " << safe(mon.voltage_level) << "\n";
std::cout << "Terminal Connect: " << safe(mon.terminal_connect) << "\n";
std::cout << "Timestamp: " << safe(mon.timestamp) << "\n";
std::cout << "Status: " << safe(mon.status) << "\n";
std::cout << "CT1: " << mon.CT1 << "\n";
std::cout << "CT2: " << mon.CT2 << "\n";
std::cout << "PT1: " << mon.PT1 << "\n";
std::cout << "PT2: " << mon.PT2 << "\n";
}
template <typename Dev>
inline void print_terminal_common(const Dev& tmnl) {
auto safe = [](const std::string& s) -> const std::string& {
static const std::string NA = "N/A";
return s.empty() ? NA : s;
};
std::cout << "GUID: " << safe(tmnl.guid) << "\n";
std::cout << "Terminal ID: " << safe(tmnl.terminal_id) << "\n";
std::cout << "Terminal Code: " << safe(tmnl.terminal_name) << "\n";
std::cout << "Organization Name: "<< safe(tmnl.org_name) << "\n";
std::cout << "Maintenance Name: " << safe(tmnl.maint_name) << "\n";
std::cout << "Station Name: " << safe(tmnl.station_name) << "\n";
std::cout << "Factory Name: " << safe(tmnl.tmnl_factory) << "\n";
std::cout << "Terminal Status: " << safe(tmnl.tmnl_status) << "\n";
std::cout << "Device Type: " << safe(tmnl.dev_type) << "\n";
std::cout << "Device Key: " << safe(tmnl.dev_key) << "\n";
std::cout << "Device Series: " << safe(tmnl.dev_series) << "\n";
std::cout << "Address: " << safe(tmnl.addr_str) << "\n";
std::cout << "Port: " << safe(tmnl.port) << "\n";
std::cout << "Timestamp: " << safe(tmnl.timestamp) << "\n";
std::cout << "Righttime: " << safe(tmnl.Righttime) << "\n";
std::cout << "mac: " << safe(tmnl.mac) << "\n";
// 安全遍历最多前 10 个测点(不越界),且跳过空 monitor_id 的项
const size_t n = std::min<size_t>(tmnl.line.size(), 10);
for (size_t i = 0; i < n; ++i) {
if (tmnl.line[i].monitor_id.empty()) continue;
std::cout << " Monitor " << (i + 1) << ":\n";
print_monitor_common(tmnl.line[i]); // 模板会自动匹配 update/ledger 的 monitor
}
}
// ===== 薄包装重载(保持原有函数名不变)=====
inline void print_monitor(const update_monitor& mon) { print_monitor_common(mon); }
inline void print_monitor(const ledger_monitor& mon) { print_monitor_common(mon); }
inline void print_terminal(const update_dev& tmnl) { print_terminal_common(tmnl); }
inline void print_terminal(const terminal_dev& tmnl) { print_terminal_common(tmnl); }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////小工具
inline std::string trim_cstr(const char* s, size_t n) {
if (!s) return {};
size_t end = 0;