fix recall

This commit is contained in:
lnk
2025-10-31 10:59:30 +08:00
parent 5e63adc8f9
commit c02f0cbbdd
2 changed files with 45 additions and 16 deletions

View File

@@ -762,23 +762,35 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d
json_data.Righttime = item.value("Righttime", "");
if (item.contains("monitorData") && item["monitorData"].is_array()) {
size_t j = 0;
constexpr size_t kMaxLines = std::extent<decltype(terminal_dev::line)>::value; // 如果是 C 数组
for (const auto& monitor_item : item["monitorData"]) {
if (j >= kMaxLines) break;
auto& m = json_data.line[j++];
m.monitor_id = monitor_item.value("id", "");
m.monitor_name = monitor_item.value("name", "");
m.voltage_level = monitor_item.value("voltageLevel", "");
m.status = monitor_item.value("status", "");
json_data.line.emplace_back(); // 追加元素
auto& m = json_data.line.back(); // 引用最后一个
m.monitor_id = monitor_item.value("id", "");
m.monitor_name = monitor_item.value("name", "");
m.logical_device_seq = monitor_item.value("lineNo", "");
m.voltage_level = monitor_item.value("voltageLevel", "");
// status 可能是数字,统一转成字符串存
if (monitor_item.contains("status") && monitor_item["status"].is_number_integer())
m.status = std::to_string(monitor_item["status"].get<int>());
else
m.status = monitor_item.value("status", "");
m.terminal_connect = monitor_item.value("ptType", "");
//m.timestamp = json_data.timestamp;
m.terminal_id = monitor_item.value("deviceId", json_data.terminal_id);
m.CT1 = monitor_item.value("CT1", 0.0);
m.CT2 = monitor_item.value("CT2", 0.0);
m.PT1 = monitor_item.value("PT1", 0.0);
m.PT2 = monitor_item.value("PT2", 0.0);
m.terminal_id = monitor_item.value("deviceId", json_data.terminal_id);
// 兼容大小写写法PT1/pt1 等
auto get_num = [&](const nlohmann::json& j, const char* up, const char* lo, double defv) {
if (j.contains(up) && (j[up].is_number_float() || j[up].is_number_integer()))
return j[up].get<double>();
if (j.contains(lo) && (j[lo].is_number_float() || j[lo].is_number_integer()))
return j[lo].get<double>();
return defv;
};
m.PT1 = get_num(monitor_item, "PT1", "pt1", 0.0);
m.PT2 = get_num(monitor_item, "PT2", "pt2", 0.0);
m.CT1 = get_num(monitor_item, "CT1", "ct1", 0.0);
m.CT2 = get_num(monitor_item, "CT2", "ct2", 0.0);
}
}