Files
VX4-DiaphragmPump_WeiDaL/print_net.cpp
T
2026-08-25 10:37:57 +08:00

455 lines
16 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "print_net.h"
#include "QDebug"
#include <QtNetwork/QSslConfiguration>
#include <QtNetwork/QNetworkRequest>
#include "LogInfo.h"
#define QT_NO_SSL
PrintNet::PrintNet()
{
m_bShortNet = false;
// 创建网络管理器用于GET method
this->getManager = new QNetworkAccessManager(this);
connect(getManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *)));
// 创建网络管理器用于POST method
this->postManager = new QNetworkAccessManager(this);
connect(postManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(postPrintFinished(QNetworkReply *)));
m_postmanager = new QNetworkAccessManager(this);
connect(m_postmanager, SIGNAL(finished(QNetworkReply *)), this, SLOT(postGetShortUrlFinished(QNetworkReply *)));
}
PrintNet::~PrintNet()
{
delete this->getManager;
delete this->postManager;
}
// 初步实现 喷码机向服务器获取打印数据 以及 上报状态 接口
// 未处理 网络条件不具备 / 访问超时 等异常
// 递归列出JSON所有层内容
void PrintNet::traversJson(QJsonObject json_obj)
{
foreach (const QString& key, json_obj.keys())
{
QJsonValue value = json_obj.value(key);
if (!value.isObject())
{
// qDebug()<<"[traversJson]key="<<key<<" value="<<value;
if(key == "QRCodeContent"){
QString t_str;
t_str = value.toString();
// const char *std_str = t_str.toStdString().data();
// strcpy(Json_get_data.QRCodeContent,std_str);
strncpy(Json_get_data.QRCodeContent,t_str.toStdString().c_str(),sizeof(Json_get_data.QRCodeContent));
Json_get_data.QRCodeContent[sizeof(Json_get_data.QRCodeContent) -1] = '\0';
}else
if(key == "PrintingContent"){
QString t_str;
t_str = value.toString();
t_str.replace('&',"&amp;").replace('<',"&lt;").replace('>',"&gt;").replace('"',"&quot;").replace('\'',"&#39;")
.replace('¥',"&yen;").replace('®',"&reg;").replace('°',"&deg;").replace('±',"&plusmn;").replace('×',"x")
.replace('*',"&#42;").replace('÷',"&divide;").replace('²',"&sup2;").replace('³',"&sup3;").replace('Ω',"&Omega;")
.replace('Φ',"&Phi;").replace('¥',"&yen;").replace('φ',"&phi;").replace('©',"&copy;").replace('@',"&#64;")
.replace('㎡',"&#13217;").replace('℃',"&#8451;").replace('℉',"&#8457;").replace('\r',' ').replace('\n',' ') ;
// const char *std_str = t_str.toStdString().data();
// strcpy(Json_get_data.PrintingContent,std_str);
strncpy(Json_get_data.PrintingContent,t_str.toStdString().c_str(),sizeof(Json_get_data.PrintingContent));
Json_get_data.PrintingContent[sizeof(Json_get_data.PrintingContent) -1] = '\0';
}else
if(key == "ProductPlanQty"){
Json_get_data.ProductPlanQty = value.toDouble();
}else
if(key == "ProductUniqueCode"){
QString t_str;
t_str = value.toString();
// const char *std_str = t_str.toStdString().data();
// strcpy(Json_get_data.ProductUniqueCode,std_str);
strncpy(Json_get_data.ProductUniqueCode,t_str.toStdString().c_str(),sizeof(Json_get_data.ProductUniqueCode));
Json_get_data.ProductUniqueCode[sizeof(Json_get_data.ProductUniqueCode) -1] = '\0';
}else
if(key == "ProductionTask"){
Json_get_data.ProductionTask = value.toDouble();
}else
if(key == "StartMetre"){
Json_get_data.StartMetre = value.toDouble();
}else
if(key == "TasdNeedConfirm"){
Json_get_data.TasdNeedConfirm = value.toBool();
}else
if(key == "TaskSwitchingMode"){
Json_get_data.TaskSwitchingMode = value.toDouble();
}
}
else
{
traversJson(value.toObject());
}
}
}
void PrintNet::postPrintFinished(QNetworkReply *reply)
{
QNetworkReply::NetworkError error;
error = reply->error(); // 应答无错误时为QNetworkReply::NoError(0)
if (error)
{ // 非0值表示有错误发生
switch(error)
{
case QNetworkReply::ConnectionRefusedError:
save_messege = "远程主机拒绝连接";
break;
case QNetworkReply::RemoteHostClosedError:
save_messege = "远程主机关闭连接";
break;
case QNetworkReply::HostNotFoundError:
save_messege = "远程主机未找到";
break;
case QNetworkReply::TimeoutError:
save_messege = "连接到远程主机超时";
break;
case QNetworkReply::ContentAccessDenied:
save_messege = "远程主机拒绝访问";
break;
case QNetworkReply::ContentNotFoundError:
save_messege = "内容未找到";
break;
default:
save_messege = "通信失败";
}
emit json_server_error();
return;
}
//未出错时获取响应信息
QByteArray rsp_data = reply->readAll();
//以下对获取的JSON数据进行解析
QJsonDocument json = QJsonDocument::fromJson(rsp_data);
QJsonObject obj = json.object();
traversJson(obj); // 递归列出JSON所有层内容
// qDebug() << "[postPrintFinished]ResultCode: " << obj["ResultCode"];
// qDebug() << "[postPrintFinished]ResultMessage: " << obj["ResultMessage"];
// qDebug() << "[postPrintFinished]ResultData: " << obj["ResultData"];
save_messege = obj["ResultMessage"].toString();
reply->deleteLater();
}
QString PrintNet::getMessege()
{
return save_messege;
}
// 处理HTTP请求的应答
void PrintNet::replyFinished(QNetworkReply *reply)
{
QNetworkReply::NetworkError error;
error = reply->error(); // 应答无错误时为QNetworkReply::NoError(0)
if (error)
{ // 非0值表示有错误发生
switch(error)
{
case QNetworkReply::ConnectionRefusedError:
save_messege = "远程主机拒绝连接";
break;
case QNetworkReply::RemoteHostClosedError:
save_messege = "远程主机关闭连接";
break;
case QNetworkReply::HostNotFoundError:
save_messege = "远程主机未找到";
break;
case QNetworkReply::TimeoutError:
save_messege = "连接到远程主机超时";
break;
case QNetworkReply::ContentAccessDenied:
save_messege = "远程主机拒绝访问";
break;
case QNetworkReply::ContentNotFoundError:
save_messege = "内容未找到";
break;
default:
save_messege = "通信失败";
}
emit json_server_error();
return;
}
//未出错时获取响应信息
QByteArray rsp_data = reply->readAll();
//以下对获取的JSON数据进行解析
QJsonDocument json = QJsonDocument::fromJson(rsp_data);
QJsonObject obj = json.object();
traversJson(obj); // 递归列出JSON所有层内容
// qDebug() << "[replyFinished] ResultCode: " << obj["ResultCode"];
// qDebug() << "[replyFinished] ResultMessage: " << obj["ResultMessage"];
// qDebug() << "[replyFinished] ResultData: " << obj["ResultData"];
save_messege = obj["ResultMessage"].toString();
reply->deleteLater();
save_messege = "JSON获取成功!";
emit showMessege();
if(m_bShortNet)
{
FromBaiDuGetShortUrl(Json_get_data.QRCodeContent);
}
else
{
emit receiveJSONDatafinish();
}
}
// 从服务器获取打印数据
// url - 提供打印数据的服务器链接
// equip_code - 喷码机编号
void PrintNet::PrintNetGetData(QString url, const QString& equip_code)
{
EquipmentCode = equip_code;
//设计本接口实现时,考虑输入的url为问号(?)之前那部分,不同的喷码机equip_code不同
//QUrl qrl("http://47.111.170.144:8754/KLAPS/APSServer/ECode/GetProductUniqueCodeTest?EquipmentCode=1");
QUrl qrl(url);
// 在访问服务器API的链接中添加喷码机编号
//qrl.addQueryItem("EquipmentCode", QString::number(equip_code));
qrl.addQueryItem("EquipmentCode", equip_code);
//QUrlQuery query;
//query.addQueryItem("EquipmentCode", QString::number(equip_code));
//qrl.setQuery(query);
// 构造请求
QNetworkRequest request;
request.setUrl(qrl);
getManager->get(request); // HTTP GET
}
// 向服务器上报打印完成状态
// url - 上报打印完成状态的服务器链接
void PrintNet::PrintNetPostFinish(QString url)
{
QUrl qrl(url);
// 构造JSON对象数据
QJsonObject json;
json.insert("ProductUniqueCode", QString(Json_get_data.ProductUniqueCode));
json.insert("ProductionTask", QString::number(Json_get_data.ProductionTask));
json.insert("PrintingContent", QString(Json_get_data.PrintingContent));
//json.insert("EquipmentUniqueCode", QString::number(EquipmentCode) );
json.insert("EquipmentUniqueCode", EquipmentCode );
json.insert("StartingMeters", QString::number(Json_get_data.StartMetre));
json.insert("ProductNumber", QString::number(Json_get_data.ProductPlanQty));
json.insert("Coordinates", QString("北纬N31°51′15.36 东经E117°12′8.77"));
// qDebug() << json;
QJsonDocument jsonDoc(json);
// qDebug() << jsonDoc;
QByteArray jsonData = jsonDoc.toJson();
// qDebug() << jsonData;
QNetworkRequest request;
request.setUrl(qrl);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
postManager->post(request, jsonData); // HTTP POST
}
// 向服务器上报设备运行状态
// url - 上报设备运行状态的服务器链接
void PrintNet::PrintNetPostState(QString url)
{
QUrl qrl(url);
// 构造JSON对象数据
QJsonObject json;
//json.insert("EquipmentUniqueCode", QString::number(EquipmentCode));
json.insert("EquipmentUniqueCode", EquipmentCode );
json.insert("CurrentMeter", QString("13.3"));
json.insert("CurrentEcode", QString(Json_get_data.ProductUniqueCode));
json.insert("CurrentPrintingContent", QString(Json_get_data.PrintingContent));
// qDebug() << json;
QJsonDocument jsonDoc(json);
// qDebug() << jsonDoc;
QByteArray jsonData = jsonDoc.toJson();
// qDebug() << jsonData;
QNetworkRequest request;
request.setUrl(qrl);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
postManager->post(request, jsonData); // HTTP POST
}
// 向百度云获取转换的短网址
//longUrl要转换的长url
void PrintNet::FromBaiDuGetShortUrl(QString longUrl)
{
QUrl qrl(QString("https://dwz.cn/api/v3/short-urls"));
// 构造JSON对象数据
QJsonObject json;
json.insert("LongUrl", longUrl);
json.insert("TermOfValidity", QString("long-term"));
//json.insert("CurrentEcode", QString(Json_get_data.ProductUniqueCode));
//json.insert("CurrentPrintingContent", QString(Json_get_data.PrintingContent));
//qDebug() << json;
QJsonArray Arrjson;
Arrjson.append(json);
QJsonDocument jsonDoc(Arrjson);
//qDebug() << jsonDoc;
QByteArray jsonData = jsonDoc.toJson();
//qDebug() << jsonData;
//LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): setSsl before"));
QNetworkRequest request;
request.setUrl(qrl);
//LogInfo::setRunStatusText(tr("defaultConfiguration new before"));
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
//LogInfo::setRunStatusText(tr("defaultConfiguration 1"));
config.setProtocol(QSsl::TlsV1);
//LogInfo::setRunStatusText(tr("defaultConfiguration 2"));
config.setPeerVerifyMode(QSslSocket::VerifyNone);
//LogInfo::setRunStatusText(tr("defaultConfiguration 3"));
request.setSslConfiguration(config);
//LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): setSsl after"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
request.setRawHeader("Dwz-Token" ,"708e8736a533df553a8898699280bcf9");
//LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): <1>"));
//QNetworkAccessManager *post_manager = new QNetworkAccessManager(this);
//connect(post_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(postGetShortUrlFinished(QNetworkReply *)));
m_postmanager->post(request, jsonData); // HTTP POST
//LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): <2>"));
//connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onNetReplyError(QNetworkReply::NetworkError)));
//connect(reply, SIGNAL(sslErrors(QList&)), this, SLOT(onNetReplySshErrors(QList&)));
#ifndef QT_NO_SSL
connect(post_manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
#endif
}
#ifndef QT_NO_SSL
void PrintNet::sslErrors(QNetworkReply *reply,const QList<QSslError> &)
{
reply->ignoreSslErrors();
}
#endif
void PrintNet::postGetShortUrlFinished(QNetworkReply *reply)
{
//LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <3>"));
QNetworkReply::NetworkError error;
error = reply->error(); // 应答无错误时为QNetworkReply::NoError(0)
if (error)
{ // 非0值表示有错误发生
switch(error)
{
case QNetworkReply::ConnectionRefusedError:
save_messege = "远程主机拒绝连接";
break;
case QNetworkReply::RemoteHostClosedError:
save_messege = "远程主机关闭连接";
break;
case QNetworkReply::HostNotFoundError:
save_messege = "远程主机未找到";
break;
case QNetworkReply::TimeoutError:
save_messege = "连接到远程主机超时";
break;
case QNetworkReply::ContentAccessDenied:
save_messege = "远程主机拒绝访问";
break;
case QNetworkReply::ContentNotFoundError:
save_messege = "内容未找到";
break;
default:
save_messege = "通信失败";
}
//LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <4>"));
emit json_server_error();
//emit receiveJSONDatafinish();
return;
}
//未出错时获取响应信息
QByteArray rsp_data = reply->readAll();
//以下对获取的JSON数据进行解析
QJsonDocument json = QJsonDocument::fromJson(rsp_data);
//qDebug() << json;
QJsonObject obj = json.object();
// qDebug() << obj;
QString strResultCode;
save_messege = strResultCode.number(obj["Code"].toDouble());
if(save_messege != "0")
{
//LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <5>"));
//emit receiveJSONDatafinish();
save_messege = "获取短网址出错,错误码:"+ save_messege;
return;
}
QJsonArray JsonArr = obj["ShortUrls"].toArray();
QJsonValue value = JsonArr.at(0);
QJsonObject jsonObj = value.toObject();
#if 1
foreach (const QString& key, jsonObj.keys())
{
QJsonValue value = jsonObj.value(key);
if (!value.isObject())
{
// qDebug()<<"[traversJson]key="<<key<<" value="<<value;
if(key == "ShortUrl")
{
QString t_str;
t_str = value.toString();
const char *std_str = t_str.toStdString().data();
strcpy(Json_get_data.QRCodeContent,std_str);
}
}
}
#endif
save_messege = "获取短网址成功";
//LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <6>"));
reply->deleteLater();
emit receiveJSONDatafinish();
}
void PrintNet::getJson_data(JSON_DATA *json_data)
{
memcpy(json_data, &Json_get_data, sizeof(JSON_DATA));
}