InteractiveHttp.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. #include "InteractiveHttp.h"
  2. #include "InteractiveData.h"
  3. #include "InteractiveFace.h"
  4. #include "InteractiveHand.h"
  5. #include "../user/config.h"
  6. extern config *pconfig;
  7. QString InteractiveHttp::strToken;
  8. InteractiveHttp::InteractiveHttp(QObject *parent)
  9. : QObject{parent}
  10. {
  11. }
  12. bool InteractiveHttp::httpRequestGet(const QString &url, const QByteArray &inData, QByteArray &outData)
  13. {
  14. QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
  15. QString strUrl = url;
  16. if(false == inData.isNull())
  17. {
  18. strUrl = strUrl + "?" + inData;
  19. }
  20. // 设置头信息
  21. QNetworkRequest requestInfo;
  22. requestInfo.setUrl(QUrl(strUrl));
  23. requestInfo.setRawHeader("Authorization", InteractiveHttp::strToken.toUtf8());
  24. // 发送 post 请求
  25. QNetworkReply* reply = pHttpMgr->get(requestInfo);
  26. // 添加超时处理,1ms 超时
  27. QEventLoop eventLoop;
  28. connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
  29. // 比如设置 1ms 内完成请求,否则就认为是超时
  30. QTimer::singleShot(HTTP_REQUEST_TIMEOUT_TIME, &eventLoop, &QEventLoop::quit);
  31. eventLoop.exec();
  32. QByteArray array;
  33. if(reply->isFinished()){
  34. if (reply->error() == QNetworkReply::NoError) {
  35. // 正常结束,读取响应数据
  36. QByteArray result = reply->readAll();
  37. QString strResult = QString::fromUtf8(result);
  38. reply->deleteLater();
  39. outData = strResult.toUtf8();
  40. return true;
  41. }
  42. else {
  43. // 请求失败
  44. QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
  45. outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
  46. reply->deleteLater();
  47. return false;
  48. }
  49. }
  50. else {
  51. // 请求超时
  52. disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
  53. reply->abort();
  54. }
  55. reply->deleteLater();
  56. outData = "{\"code\":400,\"result\":\"failure\"}";
  57. return false;
  58. }
  59. bool InteractiveHttp::httpRequestPostJson(const QString &url, const QByteArray &inData, QByteArray &outData)
  60. {
  61. // 获取当前日期和时间
  62. QDateTime currentDateTime = QDateTime::currentDateTime();
  63. QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
  64. QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
  65. QString strUrl = url;
  66. // 设置头信息
  67. QNetworkRequest requestInfo;
  68. requestInfo.setUrl(QUrl(strUrl));
  69. requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
  70. requestInfo.setRawHeader("Module", "Android_Material");
  71. requestInfo.setRawHeader("Authorization", InteractiveHttp::strToken.toUtf8());
  72. // 发送 post 请求
  73. QNetworkReply* reply = pHttpMgr->post(requestInfo, inData);
  74. // 添加超时处理,1ms 超时
  75. QEventLoop eventLoop;
  76. connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
  77. // 比如设置 1ms 内完成请求,否则就认为是超时
  78. QTimer::singleShot(HTTP_REQUEST_TIMEOUT_TIME, &eventLoop, &QEventLoop::quit);
  79. eventLoop.exec();
  80. if(reply->isFinished()){
  81. if (reply->error() == QNetworkReply::NoError) {
  82. // 正常结束,读取响应数据
  83. QByteArray result = reply->readAll();
  84. outData = result;
  85. reply->deleteLater();
  86. return true;
  87. }
  88. else {
  89. // 请求失败
  90. QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
  91. // qDebug() << "http post failed, error code = " << statusCode.toString() << " error info: " << reply->errorString();
  92. outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
  93. reply->deleteLater();
  94. return false;
  95. }
  96. }
  97. else {
  98. // 请求超时
  99. disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
  100. reply->abort();
  101. }
  102. reply->deleteLater();
  103. outData = "{\"code\":400,\"result\":\"failure\"}";
  104. return false;
  105. }
  106. bool InteractiveHttp::httpRequestPostFormdata(const QString &url, QList<QHttpPart> &inData, QByteArray &outData)
  107. {
  108. // 获取当前日期和时间
  109. QDateTime currentDateTime = QDateTime::currentDateTime();
  110. QString timetamp_str = currentDateTime.toString("yyyy-MM-ddTHH:mm:ssZ");
  111. QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();
  112. QString strUrl = url;
  113. // 创建multipart表单
  114. QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
  115. for (int i = 0; i < inData.size(); ++i)
  116. {
  117. multiPart->append(inData.at(i));
  118. }
  119. // 设置头信息
  120. QNetworkRequest requestInfo;
  121. requestInfo.setUrl(QUrl(url));
  122. requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + multiPart->boundary());
  123. requestInfo.setRawHeader("Module", "Android_Material");
  124. requestInfo.setRawHeader("Authorization", InteractiveHttp::strToken.toUtf8());
  125. // 发送 post 请求
  126. QNetworkReply* reply = pHttpMgr->post(requestInfo, multiPart);
  127. multiPart->setParent(reply); // reply删除时会自动删除multiPart
  128. // 添加超时处理,1ms 超时
  129. QEventLoop eventLoop;
  130. connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
  131. // 比如设置 1ms 内完成请求,否则就认为是超时
  132. QTimer::singleShot(HTTP_REQUEST_TIMEOUT_TIME, &eventLoop, &QEventLoop::quit);
  133. eventLoop.exec();
  134. if(reply->isFinished()){
  135. if (reply->error() == QNetworkReply::NoError) {
  136. // 正常结束,读取响应数据
  137. QByteArray result = reply->readAll();
  138. outData = result;
  139. reply->deleteLater();
  140. return true;
  141. }
  142. else {
  143. // 请求失败
  144. QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
  145. // qDebug() << "http post failed, error code = " << statusCode.toString() << " error info: " << reply->errorString();
  146. outData = QString("{\"code\":" + statusCode.toString() + ",\"result\":\"" + reply->errorString() + "\"}").toUtf8();
  147. reply->deleteLater();
  148. return false;
  149. }
  150. }
  151. else {
  152. // 请求超时
  153. disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
  154. reply->abort();
  155. }
  156. reply->deleteLater();
  157. outData = "{\"code\":400,\"result\":\"failure\"}";
  158. return false;
  159. }
  160. // 获取异常类型字典值
  161. QByteArray InteractiveHttp::http_get_exception_type()
  162. {
  163. QString strUrl = "http://" + pconfig->httpHost + "/system/dict/data/type/material_exception";
  164. QByteArray inData;
  165. QByteArray outData;
  166. httpRequestGet(strUrl, inData, outData);
  167. return outData;
  168. }
  169. // 获取严重等级字典值
  170. QByteArray InteractiveHttp::http_get_severity_level()
  171. {
  172. QString strUrl = "http://" + pconfig->httpHost + "/system/dict/data/type/severity_level";
  173. QByteArray inData;
  174. QByteArray outData;
  175. httpRequestGet(strUrl, inData, outData);
  176. return outData;
  177. }
  178. // 获取用户信息
  179. QByteArray InteractiveHttp::http_get_getInfo()
  180. {
  181. // 访问http服务
  182. QString strUrl = "http://" + pconfig->httpHost + pconfig->getInfo_url;
  183. QByteArray inData;
  184. QByteArray outData;
  185. httpRequestGet(strUrl, inData, outData);
  186. return outData;
  187. }
  188. // 获取物资柜主界面显示信息
  189. QByteArray InteractiveHttp::http_get_getCabinetHomePage()
  190. {
  191. // 访问http服务
  192. QString strUrl = "http://" + pconfig->httpHost + "/iscs/hardware/material-api/getCabinetHomePage";
  193. QByteArray inData = QString("cabinetCode=%1").arg(pconfig->devUuid).toUtf8();
  194. QByteArray outData;
  195. httpRequestGet(strUrl, inData, outData);
  196. return outData;
  197. }
  198. QByteArray InteractiveHttp::http_get_getInstructionsList()
  199. {
  200. // 访问http服务
  201. QString strUrl = "http://" + pconfig->httpHost + "/iscs/hardware/material-api/getInstructionsList";
  202. QByteArray inData;
  203. QByteArray outData;
  204. httpRequestGet(strUrl, inData, outData);
  205. return outData;
  206. }
  207. // 获取物资信息
  208. QByteArray InteractiveHttp::http_get_getIsMaterialsPage()
  209. {
  210. // 访问http服务
  211. QString strUrl = "http://" + pconfig->httpHost + "/iscs/materials/getIsMaterialsPage";
  212. QByteArray inData = QString("current=1&size=-1&cabinetCode=%1").arg(pconfig->devUuid).toUtf8();
  213. QByteArray outData;
  214. httpRequestGet(strUrl, inData, outData);
  215. return outData;
  216. }
  217. // 开始检查
  218. // url: /iscs/hardware/material-api/startCheckPlan
  219. QByteArray InteractiveHttp::http_post_startCheckPlan()
  220. {
  221. // 访问http服务
  222. QString strUrl = "http://" + pconfig->httpHost + "/iscs/hardware/material-api/startCheckPlan";
  223. QByteArray inData;
  224. QByteArray outData;
  225. {
  226. QJsonObject jsonRoot;
  227. QDateTime currentDateTime = QDateTime::currentDateTime();
  228. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  229. jsonRoot.insert("cabinetCode", pconfig->devUuid);
  230. jsonRoot.insert("planId", pconfig->currentPlanId);
  231. QJsonDocument jsonDoc(jsonRoot);
  232. inData = jsonDoc.toJson(QJsonDocument::Compact);
  233. }
  234. httpRequestPostJson(strUrl, inData, outData);
  235. return outData;
  236. }
  237. QByteArray InteractiveHttp::http_post_insertCheckRecord(const QByteArray &json)
  238. {
  239. // 访问http服务
  240. QString strUrl = "http://" + pconfig->httpHost + "/iscs/hardware/material-api/insertCheckRecord";
  241. QByteArray inData = json;
  242. QByteArray outData;
  243. httpRequestPostJson(strUrl, inData, outData);
  244. return outData;
  245. }
  246. QByteArray InteractiveHttp::http_post_selectMaterialsByRfidList(const QStringList &rfids)
  247. {
  248. // 访问http服务
  249. QString strUrl = "http://" + pconfig->httpHost + pconfig->getMaterial_url;
  250. QByteArray inData;
  251. QByteArray outData;
  252. {
  253. QJsonObject jsonRoot;
  254. QDateTime currentDateTime = QDateTime::currentDateTime();
  255. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  256. QJsonArray jsonarray;
  257. for (const QString& str : rfids)
  258. {
  259. jsonarray.append(str);
  260. }
  261. jsonRoot.insert("list", jsonarray);
  262. QJsonDocument jsonDoc(jsonRoot);
  263. inData = jsonDoc.toJson(QJsonDocument::Compact);
  264. }
  265. httpRequestPostJson(strUrl, inData, outData);
  266. return outData;
  267. }
  268. // 获取物资柜物资错放异常
  269. QByteArray InteractiveHttp::http_get_getIsMaterialsLoanExceptionPage()
  270. {
  271. // 访问http服务
  272. QString strUrl = "http://" + pconfig->httpHost + pconfig->getIsMaterialsLoanExceptionPage_url;
  273. QByteArray inData = QString("loanFromCode=" + pconfig->devUuid).toUtf8();
  274. inData += "&current=1&size=-1&exceptionType=0&status=0";
  275. QByteArray outData;
  276. httpRequestGet(strUrl, inData, outData);
  277. // TempWriteData("C:/Users/HP/Desktop/Temp/0.txt", outData);
  278. return outData;
  279. }
  280. QByteArray InteractiveHttp::http_get_getSysUserCharacteristicPage()
  281. {
  282. // 访问http服务
  283. QString strUrl = "http://" + pconfig->httpHost + pconfig->getSysUserCharacteristicPage_url;
  284. QByteArray inData = QString("userId=" + pconfig->userId).toUtf8();
  285. QByteArray outData;
  286. httpRequestGet(strUrl, inData, outData);
  287. return outData;
  288. }
  289. QByteArray InteractiveHttp::http_get_getLastCheckPlanByCabinetCode()
  290. {
  291. // 访问http服务
  292. QString strUrl = "http://" + pconfig->httpHost + pconfig->getMaterialCheckPlan_url;
  293. QByteArray inData = QString("cabinetCode=" + pconfig->devUuid).toUtf8();
  294. QByteArray outData;
  295. httpRequestGet(strUrl, inData, outData);
  296. return outData;
  297. }
  298. QByteArray InteractiveHttp::http_get_selectExMaterialTypeById()
  299. {
  300. return QByteArray();
  301. }
  302. QByteArray InteractiveHttp::http_get_selectIsMaterialsCabinetByCode()
  303. {
  304. // 访问http服务
  305. QString strUrl = "http://" + pconfig->httpHost + "/iscs/cabinet/selectIsMaterialsCabinetByCode";
  306. QByteArray inData = QString("cabinetCode=" + pconfig->devUuid).toUtf8();
  307. QByteArray outData;
  308. httpRequestGet(strUrl, inData, outData);
  309. return outData;
  310. }
  311. QByteArray InteractiveHttp::http_post_insertSubmitPlan()
  312. {
  313. // 访问http服务
  314. QString strUrl = "http://" + pconfig->httpHost + pconfig->postSubmit_url;
  315. QByteArray inData;
  316. QByteArray outData;
  317. {
  318. QJsonObject jsonObjRoot;
  319. QString url = pconfig->postSubmit_url;
  320. jsonObjRoot.insert("cabinetCode", pconfig->devUuid);
  321. jsonObjRoot.insert("planId", pconfig->currentPlanId);
  322. QJsonDocument jsonDoc(jsonObjRoot);
  323. inData = jsonDoc.toJson(QJsonDocument::Compact);
  324. }
  325. httpRequestPostJson(strUrl, inData, outData);
  326. return outData;
  327. }
  328. // 上报异常
  329. QByteArray InteractiveHttp::http_post_insertIsException(const QString &json)
  330. {
  331. // 访问http服务
  332. QString strUrl = "http://" + pconfig->httpHost + "/iscs/exception/insertIsException";
  333. QByteArray inData = json.toUtf8();
  334. QByteArray outData;
  335. httpRequestPostJson(strUrl, inData, outData);
  336. return outData;
  337. }
  338. QByteArray InteractiveHttp::http_post_deleteSysUserCharacteristicByRecordIds(const QString &recordIds)
  339. {
  340. // 访问http服务
  341. QString strUrl = "http://" + pconfig->httpHost + "/system/user/characteristic/deleteSysUserCharacteristicByRecordIds";
  342. // if (!recordIds.isEmpty())
  343. // {
  344. // strUrl += "?recordIds=";
  345. // for (int i = 0; i < recordIds.size(); ++i)
  346. // {
  347. // strUrl += recordIds.at(i);
  348. // if (i != recordIds.size() - 1)
  349. // {
  350. // strUrl += ",";
  351. // }
  352. // }
  353. // }
  354. strUrl += recordIds;
  355. QByteArray inData;
  356. QByteArray outData;
  357. httpRequestPostJson(strUrl, inData, outData);
  358. return outData;
  359. }
  360. QByteArray InteractiveHttp::http_post_insertUserFace()
  361. {
  362. // 访问http服务
  363. QString strUrl = "http://" + pconfig->httpHost + pconfig->insertUserFace_url;
  364. QList<QHttpPart> inData;
  365. QByteArray outData;
  366. // 添加用户名
  367. QHttpPart httpPartUserName;
  368. httpPartUserName.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"userName\""));
  369. httpPartUserName.setBody(SINGLETON_CREATE(InteractiveData)()->m_userName.toUtf8());
  370. inData.append(httpPartUserName);
  371. // 添加用户图片
  372. QImage image = SINGLETON_CREATE(InteractiveFace)()->getImage();
  373. QByteArray imageData;
  374. QBuffer buffer(&imageData);
  375. buffer.open(QIODevice::WriteOnly);
  376. image.save(&buffer, "PNG");
  377. QHttpPart httpPartImage;
  378. httpPartImage.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
  379. httpPartImage.setHeader(QNetworkRequest::ContentDispositionHeader,
  380. QVariant(QString("form-data; name=\"file\"; filename=\"face.png\"")));
  381. httpPartImage.setBody(imageData);
  382. inData.append(httpPartImage);
  383. httpRequestPostFormdata(strUrl, inData, outData);
  384. // TempWriteData("C:/Users/HP/Desktop/Temp/1.txt", outData);
  385. return outData;
  386. }
  387. QByteArray InteractiveHttp::http_post_insertUserFingerprintDat(const QString &group)
  388. {
  389. // 访问http服务
  390. QString strUrl = "http://" + pconfig->httpHost + pconfig->addfinger_url;
  391. QList<QHttpPart> inData;
  392. QByteArray outData;
  393. // 添加用户名
  394. QHttpPart httpPartUserName;
  395. httpPartUserName.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"userName\""));
  396. httpPartUserName.setBody(SINGLETON_CREATE(InteractiveData)()->m_userName.toUtf8());
  397. inData.append(httpPartUserName);
  398. // 添加用户组
  399. QHttpPart httpPartUserGroup;
  400. httpPartUserGroup.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"group\""));
  401. httpPartUserGroup.setBody(group.toUtf8());
  402. inData.append(httpPartUserGroup);
  403. // 添加用户图片
  404. QImage image = SINGLETON_CREATE(InteractiveHand)()->getImage();
  405. QByteArray imageData;
  406. QBuffer buffer(&imageData);
  407. buffer.open(QIODevice::WriteOnly);
  408. image.save(&buffer, "BMP");
  409. QHttpPart httpPartImage;
  410. httpPartImage.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/bmp"));
  411. httpPartImage.setHeader(QNetworkRequest::ContentDispositionHeader,
  412. QVariant(QString("form-data; name=\"file\"; filename=\"face.bmp\"")));
  413. httpPartImage.setBody(imageData);
  414. inData.append(httpPartImage);
  415. httpRequestPostFormdata(strUrl, inData, outData);
  416. return outData;
  417. }
  418. QByteArray InteractiveHttp::http_post_loginByFace()
  419. {
  420. // 访问http服务
  421. QString strUrl = "http://" + pconfig->httpHost + pconfig->loginByFace_url;
  422. QList<QHttpPart> inData;
  423. QByteArray outData;
  424. // 添加用户图片
  425. QImage image = SINGLETON_CREATE(InteractiveFace)()->getImage();
  426. QByteArray imageData;
  427. QBuffer buffer(&imageData);
  428. buffer.open(QIODevice::WriteOnly);
  429. image.save(&buffer, "PNG");
  430. QHttpPart httpPartImage;
  431. httpPartImage.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
  432. httpPartImage.setHeader(QNetworkRequest::ContentDispositionHeader,
  433. QVariant(QString("form-data; name=\"file\"; filename=\"face.png\"")));
  434. httpPartImage.setBody(imageData);
  435. inData.append(httpPartImage);
  436. httpRequestPostFormdata(strUrl, inData, outData);
  437. return outData;
  438. }
  439. QByteArray InteractiveHttp::http_post_loginByFingerprintDat()
  440. {
  441. // 访问http服务
  442. QString strUrl = "http://" + pconfig->httpHost + pconfig->fingerLogin_url;
  443. QList<QHttpPart> inData;
  444. QByteArray outData;
  445. // 添加用户图片
  446. QImage image = SINGLETON_CREATE(InteractiveHand)()->getImage();
  447. QByteArray imageData;
  448. QBuffer buffer(&imageData);
  449. buffer.open(QIODevice::WriteOnly);
  450. image.save(&buffer, "BMP");
  451. QHttpPart httpPartImage;
  452. httpPartImage.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/bmp"));
  453. httpPartImage.setHeader(QNetworkRequest::ContentDispositionHeader,
  454. QVariant(QString("form-data; name=\"file\"; filename=\"face.bmp\"")));
  455. httpPartImage.setBody(imageData);
  456. inData.append(httpPartImage);
  457. httpRequestPostFormdata(strUrl, inData, outData);
  458. return outData;
  459. }
  460. // 用于临时存储服务器请求响应的函数
  461. // TempWriteData("C:/Users/HP/Desktop/Temp/0.txt", outData);
  462. void InteractiveHttp::TempWriteData(const QString &path, const QByteArray &data)
  463. {
  464. QFile file(path);
  465. if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
  466. file.write(data);
  467. file.close();
  468. }
  469. }