459 lines
16 KiB
C++
459 lines
16 KiB
C++
#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';
|
||
LogInfo::setRunStatusText(tr("获取二维码内容:"));
|
||
LogInfo::setRunStatusText(QString(t_str.toStdString().c_str()));
|
||
}else
|
||
if(key == "PrintingContent"){
|
||
QString t_str;
|
||
t_str = value.toString();
|
||
t_str.replace('&',"&").replace('<',"<").replace('>',">").replace('"',""").replace('\'',"'")
|
||
.replace('¥',"¥").replace('®',"®").replace('°',"°").replace('±',"±").replace('×',"x")
|
||
.replace('*',"*").replace('÷',"÷").replace('²',"²").replace('³',"³").replace('Ω',"Ω")
|
||
.replace('Φ',"Φ").replace('¥',"¥").replace('φ',"φ").replace('©',"©").replace('@',"@")
|
||
.replace('㎡',"㎡").replace('℃',"℃").replace('℉',"℉").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';
|
||
LogInfo::setRunStatusText(tr("获取数字码:"));
|
||
LogInfo::setRunStatusText(QString(t_str.toStdString().c_str()));
|
||
}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));
|
||
}
|