#include DataQuery::DataQuery() { logger_ = std::make_unique("DataQuery"); } DataQuery::~DataQuery() {} json DataQuery::ihd_query_data(vector tags, mix_cc::time_range_t time_range, TimeDur ihd_min_time_particles) { std::vector queried_time; ///< ihdb查询后的时间缓存 Eigen::Matrix queried_data; ///< ihd查询后的数据缓存 json return_js = json::object(); int tag_num = tags.size(); try { auto queried_batch_maybe = mix_cc::ihd::make_query_batch_maybe( tags, time_range, ihd_min_time_particles); if (queried_batch_maybe.is_nothing()) { queried_time.clear(); queried_data = typename decltype(queried_batch_maybe)::type::Mat2d{}; logger_->Error() << "Tag点没有查到相应的信息" << std::endl; return return_js; } auto queried_bath = queried_batch_maybe.unsafe_get_just(); auto result_maybe = mix_cc::ihd::read_data_with_time_maybe(&queried_bath); if (result_maybe.is_nothing()) { queried_time.clear(); queried_data = typename decltype(queried_batch_maybe)::type::Mat2d{}; logger_->Error() << "Tag点没有查到相应的数据1" << std::endl; logger_->Error() << mix_cc::mix_time_t(time_range.get_left()).to_formatted_time() << " ~ " << mix_cc::mix_time_t(time_range.get_right()).to_formatted_time() << std::endl; return return_js; } std::tie(queried_time, queried_data) = result_maybe.unsafe_get_just(); if (queried_data.rows() == 0) { logger_->Error() << "Tag点没有查到相应的数据2" << std::endl; logger_->Error() << mix_cc::mix_time_t(time_range.get_left()).to_formatted_time() << " ~ " << mix_cc::mix_time_t(time_range.get_right()).to_formatted_time() << std::endl; return return_js; } } catch (const std::exception &e) { logger_->Error() << e.what() << std::endl; return return_js; } try { for (int i = 0; i < tag_num; i++) { Eigen::VectorXd selected_col = queried_data.col(i); // 提取列向量 std::vector col_vec(selected_col.data(), selected_col.data() + selected_col.size()); return_js[tags[i]] = col_vec; } std::vector time_point; for (auto item : queried_time) { time_point.push_back(mix_cc::mix_time_t(item).to_milliseconds()); } return_js["time"] = time_point; } catch (const std::exception &e) { logger_->Error() << e.what() << std::endl; return return_js; } return return_js; } json DataQuery::operator()(vector tags, mix_cc::time_range_t time_range, TimeDur ihd_min_time_particles) { return ihd_query_data(tags, time_range, ihd_min_time_particles); }