fix recall
This commit is contained in:
@@ -4281,8 +4281,25 @@ void check_recall_event() {
|
|||||||
// 遍历所有 terminal —— 每个 terminal 只挑一条,先不判断运行状态,因为正在处理其他事务的装置也可以记录待补招信息
|
// 遍历所有 terminal —— 每个 terminal 只挑一条,先不判断运行状态,因为正在处理其他事务的装置也可以记录待补招信息
|
||||||
for (auto& dev : terminal_devlist) {
|
for (auto& dev : terminal_devlist) {
|
||||||
//如果该终端不是正在补招或者idle则直接跳过,节省运行时间
|
//如果该终端不是正在补招或者idle则直接跳过,节省运行时间
|
||||||
if(dev.busytype != static_cast<int>(DeviceState::READING_EVENTLOG) && dev.busytype != static_cast<int>(DeviceState::IDLE)){
|
bool allow_check =
|
||||||
std::cout << "[check_recall_event] skip dev=" << dev.terminal_id << std::endl;
|
dev.busytype == static_cast<int>(DeviceState::IDLE) ||
|
||||||
|
dev.busytype == static_cast<int>(DeviceState::READING_EVENTLOG);
|
||||||
|
|
||||||
|
// 如果你允许“事件抢占文件”,并且当前没有文件 RUNNING,则也允许评估事件:
|
||||||
|
if (!allow_check && dev.busytype == static_cast<int>(DeviceState::READING_STATSFILE)) {
|
||||||
|
bool has_file_running = false;
|
||||||
|
for (const auto& lm2 : dev.line) {
|
||||||
|
if (!lm2.recall_list_static.empty() &&
|
||||||
|
lm2.recall_list_static.front().recall_status == static_cast<int>(RecallStatus::RUNNING)) {
|
||||||
|
has_file_running = true; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!has_file_running) allow_check = true; // 没有文件正在跑,允许事件优先
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allow_check) {
|
||||||
|
std::cout << "[check_recall_event] skip dev=" << dev.terminal_id
|
||||||
|
<< " busytype=" << dev.busytype << std::endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 对正在补招或idle终端的所有监测点的待补招列表进行处理
|
// 对正在补招或idle终端的所有监测点的待补招列表进行处理
|
||||||
|
|||||||
@@ -762,23 +762,35 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d
|
|||||||
json_data.Righttime = item.value("Righttime", "");
|
json_data.Righttime = item.value("Righttime", "");
|
||||||
|
|
||||||
if (item.contains("monitorData") && item["monitorData"].is_array()) {
|
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"]) {
|
for (const auto& monitor_item : item["monitorData"]) {
|
||||||
if (j >= kMaxLines) break;
|
json_data.line.emplace_back(); // 追加元素
|
||||||
auto& m = json_data.line[j++];
|
auto& m = json_data.line.back(); // 引用最后一个
|
||||||
m.monitor_id = monitor_item.value("id", "");
|
|
||||||
m.monitor_name = monitor_item.value("name", "");
|
m.monitor_id = monitor_item.value("id", "");
|
||||||
m.voltage_level = monitor_item.value("voltageLevel", "");
|
m.monitor_name = monitor_item.value("name", "");
|
||||||
m.status = monitor_item.value("status", "");
|
|
||||||
m.logical_device_seq = monitor_item.value("lineNo", "");
|
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.terminal_connect = monitor_item.value("ptType", "");
|
||||||
//m.timestamp = json_data.timestamp;
|
m.terminal_id = monitor_item.value("deviceId", json_data.terminal_id);
|
||||||
m.terminal_id = monitor_item.value("deviceId", json_data.terminal_id);
|
|
||||||
m.CT1 = monitor_item.value("CT1", 0.0);
|
// 兼容大小写写法:PT1/pt1 等
|
||||||
m.CT2 = monitor_item.value("CT2", 0.0);
|
auto get_num = [&](const nlohmann::json& j, const char* up, const char* lo, double defv) {
|
||||||
m.PT1 = monitor_item.value("PT1", 0.0);
|
if (j.contains(up) && (j[up].is_number_float() || j[up].is_number_integer()))
|
||||||
m.PT2 = monitor_item.value("PT2", 0.0);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user