You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
7.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#define CPPHTTPLIB_OPENSSL_SUPPORT
#include <QString>
#include <codecvt>
#include <string>
#include <iostream>
#include <httplib.h>
#include <json.hpp>
#include "client.h"
#include <QDebug>
#include <QTextCodec>
using json = nlohmann::json;
using namespace std;
HTTPClient httpClient;
FanManage fans;
void delNameFromList(QString element){
fans.interruptedFans.erase(std::remove(fans.interruptedFans.begin(), fans.interruptedFans.end(), element), fans.interruptedFans.end());
fans.standbyFans.erase(std::remove(fans.standbyFans.begin(), fans.standbyFans.end(), element), fans.standbyFans.end());
fans.normalFans.erase(std::remove(fans.normalFans.begin(), fans.normalFans.end(), element), fans.normalFans.end());
fans.failureFans.erase(std::remove(fans.failureFans.begin(), fans.failureFans.end(), element), fans.failureFans.end());
fans.hutdownFans.erase(std::remove(fans.hutdownFans.begin(), fans.hutdownFans.end(), element), fans.hutdownFans.end());
fans.runFans.erase(std::remove(fans.runFans.begin(), fans.runFans.end(), element), fans.runFans.end());
}
bool isInLists(QString element) {
// 使用 std::find_first_of 函数查找元素是否在列表中
auto it1 = std::find_first_of(fans.standbyFans.begin(), fans.standbyFans.end(), &element, &element + 1);
auto it2 = std::find_first_of(fans.hutdownFans.begin(), fans.hutdownFans.end(), &element, &element + 1);
auto it3 = std::find_first_of(fans.runFans.begin(), fans.runFans.end(), &element, &element + 1);
// 如果元素在任意一个列表中,则返回 true否则返回 false
return it1 != fans.standbyFans.end() || it2 != fans.hutdownFans.end() || it3 != fans.runFans.end();
}
HTTPClient::HTTPClient() : client("https://121.36.33.250:9000") {
header = {{"GroupId", "dam"}};
loginIndex = "/services/application/api/fan_app/login";
fanListIndex = "/services/application/api/fan_app/fanList";
flangeIndex = "/services/application/api/fan_app/flangeList";
headroomDetailIndex = "/services/application/api/fan_app/headroomDetail";
gyroDetailIndex = "/services/application/api/fan_app/gyroDetail";
featureHistoryIndex = "/services/application/api/fan_app/featureHistory";
client.enable_server_certificate_verification(false); // 取消SSL验证
}
void HTTPClient::getFanList(){
if (auto res = client.Post(fanListIndex, header)) {
json resJson = json::parse(res->body);
for (const auto& data : resJson["data"]) {
FanClass fan;
//cout << data["fanId"];
fan.fanCode = QString::fromStdString(data["fanCode"]);
fan.fanId = data["fanId"];
if (data["functions"]["gyro"]["features"][0]["featureValue"].is_number()) {
fan.angle = data["functions"]["gyro"]["features"][0]["featureValue"].get<double>();
}
if (data["functions"]["headRoom"]["features"][0]["featureValue"].is_number()){
fan.distance = data["functions"]["headRoom"]["features"][0]["featureValue"].get<double>();
}
fan.gyroState = QString::fromStdString(data["functions"]["flange"]["state"]);
fan.flangeState = QString::fromStdString(data["functions"]["gyro"]["state"]);
fan.headroomState = QString::fromStdString(data["functions"]["headRoom"]["state"]);
fans.allFans[fan.fanCode] = fan;
fans.idMaps[fan.fanId] = fan;
if (isInLists(fan.fanCode)){
return;
}
delNameFromList(fan.fanCode);
if (fan.gyroState == QString("正常") && fan.flangeState == QString("正常") && fan.headroomState == QString("正常")){
fans.normalFans.push_back(fan.fanCode);
fans.states[fan.fanCode] = QString("正常运行");
}
if (fan.gyroState == QString("故障") || fan.flangeState == QString("故障") || fan.headroomState == QString("故障")){
fans.failureFans.push_back(fan.fanCode);
fans.states[fan.fanCode] = QString("故障停机");
}
if (fan.gyroState == QString("通讯中断") || fan.flangeState == QString("通讯中断") || fan.headroomState == QString("通讯中断")){
fans.interruptedFans.push_back(fan.fanCode);
fans.states[fan.fanCode] = QString("通讯中断");
}
// std::cout << fan.distance << std::endl;
}
}
// qDebug() << fans.states;
}
void HTTPClient::getFlangeList(int fanId) {
json bodyJson = {{"fanId",fanId}};
std::string body = bodyJson.dump();
fans.idMaps[fanId].flanges.clear();
if (auto res = client.Post(flangeIndex, header, body, "application/json")) {
json resJson = json::parse(res->body);
QString body = QString::fromStdString(res->body);
// qDebug() << body;
for (const auto& data : resJson["data"]) {
FlangeClass flange;
flange.flangeId = QString::fromStdString(data["flangeId"].dump());
flange.flangeState = QString::fromStdString(data["flangeState"]);
for (const auto& feature : data["features"]){
flange.features[QString::fromStdString(feature["featureName"].dump())] = QString::fromStdString(feature["featureValue"].dump());
}
fans.idMaps[fanId].flanges[flange.flangeId] = flange;
}
}
}
void HTTPClient::getHeadroomList(int fanId) {
json bodyJson = { {"fanId",fanId} };
std::string body = bodyJson.dump();
if (auto res = client.Post(headroomDetailIndex, header, body, "application/json")) {
QString body = QString::fromStdString(res->body);
json resJson = json::parse(res->body);
fans.idMaps[fanId].headrooms.clear();
for (const auto& data : resJson["data"][0]["features"]) {
HeadroomClass headroom;
headroom.featureName = QString::fromStdString(data["featureName"]);
if (data["featureValue"].is_number()){
headroom.featureValue = data["featureValue"].get<double>();
}
fans.idMaps[fanId].headrooms.push_back(headroom);
}
}
}
void HTTPClient::getGyroList(int fanId) {
json bodyJson = { {"fanId",fanId} };
std::string body = bodyJson.dump();
if (auto res = client.Post(gyroDetailIndex, header, body, "application/json")) {
json resJson = json::parse(res->body);
fans.idMaps[fanId].gyros.clear();
for (const auto& data : resJson["data"][0]["features"]) {
GyroClass gyro;
gyro.featureName = QString::fromStdString(data["featureName"]);
gyro.featureValue = data["featureValue"].get<double>();
fans.idMaps[fanId].gyros.push_back(gyro);
}
}
}
QString HTTPClient::getHistoryList(int fanId) {
if (auto res = client.Post(gyroDetailIndex, header)) {
QString body = QString::fromStdString(res->body);
return body;
}
else {
return QString("error");
}
}
//int main(){
// httpClient.getFanList();
// httpClient.getFlangeList(1055);
// return 0;
//}