pro.cpp 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630
  1. #include "pro.h"
  2. #include "config.h"
  3. #include "httpclient.h"
  4. #include <QAbstractSocket>
  5. #include <QHostInfo>
  6. #include <QNetworkInterface>
  7. #include <QJsonArray>
  8. #include <QJsonObject>
  9. #include <QJsonDocument>
  10. #include <QTimeZone>
  11. #include <QtCore>
  12. #include <QNetworkAccessManager>
  13. #include <QNetworkReply>
  14. #include <QDir>
  15. #include "Interactive/InteractiveData.h"
  16. #include "Interactive/InteractiveConf.h"
  17. extern config *pconfig;
  18. pro::pro(QObject *parent) : QThread(parent)
  19. {
  20. qApp->installEventFilter(this);
  21. m_pManager = new QNetworkAccessManager(this);
  22. timer = new QTimer(this);
  23. connect(timer, &QTimer::timeout, this, &pro::updateTime);
  24. }
  25. void pro::slot_feature_login()
  26. {
  27. token = InteractiveHttp::strToken;
  28. SINGLETON_CREATE(InteractiveData)()->m_token = InteractiveHttp::strToken;
  29. workstat = proWorkStat::userMaterial;
  30. }
  31. void pro::slot_set_thread_stop(void)
  32. {
  33. this->threadstatus = false;
  34. }
  35. void pro::slot_saveConfig(void)
  36. {
  37. pconfig->configWrite();
  38. }
  39. void pro::slot_addfinger(bool stat)
  40. {
  41. addfingerStat = stat;
  42. emit signal_fingerWork(stat);
  43. }
  44. void pro::slot_fingerWork(bool stat)
  45. {
  46. addfingerStat = false;
  47. emit signal_fingerWork(stat);
  48. }
  49. void pro::slot_fingerStat(bool stat, QByteArray img, int size)
  50. {
  51. if(stat == true)
  52. {
  53. fingerimgbuff = img;
  54. if(addfingerStat == true)
  55. {
  56. workstat = proWorkStat::insertfacelogin;
  57. emit signal_fingerWork(false);
  58. }
  59. else{
  60. workstat = proWorkStat::fingerLogin;
  61. }
  62. }
  63. }
  64. void pro::slot_instructionsGet()
  65. {
  66. workstat = proWorkStat::materialTypeGet;
  67. }
  68. void pro::slot_getMaterialCheckPlan()
  69. {
  70. workstat = proWorkStat::getMaterialCheckPlan;
  71. }
  72. void pro::slot_getMaterialCheckForm(int planId)
  73. {
  74. pconfig->currentPlanId = planId;
  75. workstat = proWorkStat::getMaterialCheckForm;
  76. }
  77. void pro::slot_postSaveForm(QString data)
  78. {
  79. m_strPostSaveForm = data;
  80. workstat = proWorkStat::postSaveForm;
  81. }
  82. void pro::slot_postCheckSign(int planId, QString path)
  83. {
  84. QJsonObject jsonRoot;
  85. QString url = pconfig->usernameLogin_url;
  86. jsonRoot.insert("cabinetCode", pconfig->devUuid);
  87. jsonRoot.insert("planId", planId);
  88. jsonRoot.insert("signatureImg", QString(path));
  89. QJsonDocument jsonDoc(jsonRoot);
  90. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  91. m_strPostCheckSign = QString::fromUtf8(jsonData);
  92. workstat = proWorkStat::postCheckSign;
  93. }
  94. void pro::slot_postSubmit()
  95. {
  96. workstat = proWorkStat::postSubmit;
  97. }
  98. void pro::slot_getMaterialInfoList()
  99. {
  100. workstat = proWorkStat::getMaterialInfoList;
  101. }
  102. void pro::slot_pdf_click(QByteArray urlPath)
  103. {
  104. QUrl url(urlPath);
  105. QString strPath = url.path();
  106. QString strFileName = strPath.mid(strPath.lastIndexOf('/') + 1);
  107. QString strFilePath = strPath.mid(0, strPath.lastIndexOf('/') + 1);
  108. strFilePath = qApp->applicationDirPath() + "/pdf/" + strFilePath;
  109. QString strFilePathName = strFilePath + strFileName;
  110. if (!QFile::exists(strFilePathName))
  111. {
  112. if(!QDir().mkpath(strFilePath))
  113. {
  114. return;
  115. }
  116. QString requestUrl = urlPath;
  117. QNetworkRequest request(requestUrl);
  118. request.setAttribute(QNetworkRequest::RedirectPolicyAttribute,
  119. QNetworkRequest::NoLessSafeRedirectPolicy);
  120. QNetworkReply *pReply = m_pManager->get(request);
  121. // 添加超时处理,1ms 超时
  122. QEventLoop eventLoop;
  123. connect(pReply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
  124. QTimer::singleShot(1000, &eventLoop, &QEventLoop::quit);
  125. eventLoop.exec();
  126. QByteArray array;
  127. if(pReply->isFinished()){
  128. if (pReply->error() == QNetworkReply::NoError) {
  129. // 正常结束,读取响应数据
  130. QByteArray result = pReply->readAll();
  131. QFile file(strFilePathName);
  132. if (file.open(QIODevice::WriteOnly | QIODevice::Truncate))
  133. {
  134. file.write(result);
  135. file.close();
  136. }
  137. pReply->deleteLater();
  138. }
  139. }
  140. pReply->deleteLater();
  141. }
  142. emit signal_pdf_relay(strFilePathName);
  143. }
  144. void pro::http_response_usernamelogin(QByteArray data)
  145. {
  146. QJsonParseError error;
  147. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  148. if (error.error == QJsonParseError::NoError)
  149. {
  150. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  151. {
  152. QJsonObject rootObj = jsonDoc.object();
  153. if(rootObj.contains("code"))
  154. {
  155. if(rootObj.value("code").toInt() == 200)
  156. {
  157. if(rootObj.contains("token"))
  158. {
  159. QJsonValue value = rootObj.value("token");
  160. if(value.type() == QJsonValue::String)
  161. {
  162. SINGLETON_CREATE(InteractiveData)()->m_token = value.toString();
  163. InteractiveHttp::strToken = value.toString();
  164. token = value.toString();
  165. QString username = "未知用户";
  166. if(rootObj.contains("nickName"))
  167. {
  168. QJsonValue name = rootObj.value("nickName");
  169. if(name.type() == QJsonValue::String)
  170. {
  171. username = name.toString();
  172. }
  173. }
  174. pconfig->username = username;
  175. emit signal_login_return_stat(0, "登录成功");
  176. emit signal_login_return_param(username, 0);
  177. workstat = proWorkStat::userMaterial;
  178. }
  179. else{
  180. emit signal_login_return_stat(-3, "登录失败");
  181. }
  182. }
  183. }
  184. else{
  185. emit signal_login_return_stat(-1, "用户名或者密码错误");
  186. }
  187. }
  188. }
  189. }
  190. else{
  191. emit signal_login_return_stat(-3, "登录失败");
  192. }
  193. }
  194. void pro::http_response_cardlogin(QByteArray data)
  195. {
  196. QJsonParseError error;
  197. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  198. if (error.error == QJsonParseError::NoError)
  199. {
  200. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  201. {
  202. QJsonObject rootObj = jsonDoc.object();
  203. if(rootObj.contains("code"))
  204. {
  205. if(rootObj.value("code").toInt() == 200)
  206. {
  207. if(rootObj.contains("token"))
  208. {
  209. QJsonValue value = rootObj.value("token");
  210. if(value.type() == QJsonValue::String)
  211. {
  212. SINGLETON_CREATE(InteractiveData)()->m_token = value.toString();
  213. InteractiveHttp::strToken = value.toString();
  214. token = value.toString();
  215. QString username = "未知用户";
  216. if(rootObj.contains("nickName"))
  217. {
  218. QJsonValue name = rootObj.value("nickName");
  219. if(name.type() == QJsonValue::String)
  220. {
  221. username = name.toString();
  222. }
  223. }
  224. if(rootObj.contains("userName"))
  225. {
  226. QJsonValue username = rootObj.value("userName");
  227. if(username.type() == QJsonValue::String)
  228. {
  229. pconfig->username = username.toString();
  230. }
  231. }
  232. if(rootObj.contains("userId"))
  233. {
  234. QJsonValue userId = rootObj.value("userId");
  235. if(userId.type() == QJsonValue::String)
  236. {
  237. pconfig->userId = userId.toString();
  238. }
  239. }
  240. pconfig->username = username;
  241. emit signal_login_return_stat(0, "登录成功");
  242. emit signal_login_return_param(username, 0);
  243. workstat = proWorkStat::userMaterial;
  244. }
  245. else{
  246. emit signal_login_return_stat(-3, "登录失败");
  247. }
  248. }
  249. }
  250. else{
  251. emit signal_login_return_stat(-2, "用户不存在");
  252. }
  253. }
  254. }
  255. }
  256. else{
  257. emit signal_login_return_stat(-3, "登录失败");
  258. }
  259. }
  260. void pro::http_response_fingerLogin(QByteArray data)
  261. {
  262. QJsonParseError error;
  263. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  264. if (error.error == QJsonParseError::NoError)
  265. {
  266. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  267. {
  268. QJsonObject rootObj = jsonDoc.object();
  269. if(rootObj.contains("code"))
  270. {
  271. if(rootObj.value("code").toInt() == 200)
  272. {
  273. if(rootObj.contains("token"))
  274. {
  275. QJsonValue value = rootObj.value("token");
  276. if(value.type() == QJsonValue::String)
  277. {
  278. SINGLETON_CREATE(InteractiveData)()->m_token = value.toString();
  279. InteractiveHttp::strToken = value.toString();
  280. token = value.toString();
  281. QString username = "未知用户";
  282. if(rootObj.contains("nickName"))
  283. {
  284. QJsonValue name = rootObj.value("nickName");
  285. if(name.type() == QJsonValue::String)
  286. {
  287. username = name.toString();
  288. }
  289. }
  290. pconfig->username = username;
  291. emit signal_login_return_stat(0, "登录成功");
  292. emit signal_login_return_param(username, 0);
  293. workstat = proWorkStat::userMaterial;
  294. }
  295. else{
  296. emit signal_login_return_stat(-3, "登录失败");
  297. }
  298. }
  299. }
  300. else{
  301. emit signal_login_return_stat(-2, "用户不存在");
  302. }
  303. }
  304. }
  305. }
  306. else{
  307. emit signal_login_return_stat(-3, "登录失败");
  308. }
  309. }
  310. void pro::http_response_logout(QByteArray data)
  311. {
  312. QJsonParseError error;
  313. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  314. if (error.error == QJsonParseError::NoError)
  315. {
  316. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  317. {
  318. QJsonObject rootObj = jsonDoc.object();
  319. if(rootObj.contains("code"))
  320. {
  321. if(rootObj.value("code").toInt() == 200)
  322. {
  323. qDebug() << "用户退出成功";
  324. }
  325. }
  326. }
  327. }
  328. }
  329. void pro::http_response_getMaterial(QByteArray data)
  330. {
  331. QJsonParseError error;
  332. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  333. if (error.error == QJsonParseError::NoError)
  334. {
  335. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  336. {
  337. QJsonObject rootObj = jsonDoc.object();
  338. if(rootObj.contains("code"))
  339. {
  340. if(rootObj.value("code").toInt() == 200)
  341. {
  342. if(rootObj.contains("data"))
  343. {
  344. QJsonValue data = rootObj.value("data");
  345. if(data.type() == QJsonValue::Array)
  346. {
  347. QJsonArray rfidArray = data.toArray();
  348. for(int i = 0; i < rfidArray.size(); i++)
  349. {
  350. QString rfid = "";
  351. QString name = "";
  352. int materialsTypeId = 0;
  353. QString materialsTypePicture;
  354. bool take;
  355. if(rfidArray.at(i).toObject().value("materialsRfid").type() == QJsonValue::String)
  356. {
  357. rfid = rfidArray.at(i).toObject().value("materialsRfid").toString();
  358. }
  359. else{
  360. continue;
  361. }
  362. if(rfidArray.at(i).toObject().value("materialsName").type() == QJsonValue::String)
  363. {
  364. name = rfidArray.at(i).toObject().value("materialsName").toString();
  365. }
  366. if(rfidArray.at(i).toObject().value("materialsTypeId").type() == QJsonValue::String)
  367. {
  368. materialsTypeId = rfidArray.at(i).toObject().value("materialsTypeId").toString().toInt();
  369. }
  370. else if(rfidArray.at(i).toObject().value("materialsTypeId").type() == QJsonValue::Double)
  371. {
  372. materialsTypeId = rfidArray.at(i).toObject().value("materialsTypeId").toInt();
  373. }
  374. if(rfidArray.at(i).toObject().value("materialsTypePicture").type() == QJsonValue::String)
  375. {
  376. materialsTypePicture = rfidArray.at(i).toObject().value("materialsTypePicture").toString();
  377. }
  378. }
  379. }
  380. }
  381. }
  382. }
  383. }
  384. }
  385. }
  386. void pro::http_response_userMaterial(QByteArray data)
  387. {
  388. QJsonParseError error;
  389. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  390. if (error.error == QJsonParseError::NoError)
  391. {
  392. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  393. {
  394. QJsonObject rootObj = jsonDoc.object();
  395. if(rootObj.contains("code"))
  396. {
  397. if(rootObj.value("code").toInt() == 200)
  398. {
  399. if(rootObj.contains("data"))
  400. {
  401. QJsonValue data = rootObj.value("data");
  402. if(data.type() == QJsonValue::Array)
  403. {
  404. pconfig->materialTypePngList.clear();
  405. pconfig->materialTypeCountList.clear();
  406. pconfig->materialNameList.clear();
  407. pconfig->materialTypeList.clear();
  408. pconfig->materialPictureList.clear();
  409. pconfig->materialLoanUserList.clear();
  410. pconfig->materialLoanStateList.clear();
  411. QJsonArray dataArray = data.toArray();
  412. for(int i = 0; i < dataArray.size(); i++)
  413. {
  414. if(dataArray.at(i).toObject().value("materials").type() == QJsonValue::Array)
  415. {
  416. QJsonArray materialArray = dataArray.at(i).toObject().value("materials").toArray();
  417. for(int j = 0; j < materialArray.size(); j++)
  418. {
  419. QString rfid = "";
  420. if(materialArray.at(j).toObject().value("materialsRfid").type() == QJsonValue::String)
  421. {
  422. rfid = materialArray.at(j).toObject().value("materialsRfid").toString();
  423. }
  424. else{
  425. continue;
  426. }
  427. if (materialArray.at(j).toObject().value("materialsName").type() == QJsonValue::String)
  428. {
  429. QString name = materialArray.at(j).toObject().value("materialsName").toString();
  430. pconfig->materialNameList.insert(rfid, name);
  431. }
  432. else{
  433. pconfig->materialNameList.insert(rfid, "未知物资");
  434. }
  435. if (materialArray.at(j).toObject().value("status").type() == QJsonValue::String)
  436. {
  437. QString status = materialArray.at(j).toObject().value("status").toString();
  438. pconfig->materialStatusList.insert(rfid, status);
  439. }
  440. else
  441. {
  442. pconfig->materialStatusList.insert(rfid, "0");
  443. }
  444. if(materialArray.at(j).toObject().value("materialsTypePicture").type() == QJsonValue::String)
  445. {
  446. QString materialsTypePicture = materialArray.at(j).toObject().value("materialsTypePicture").toString();
  447. pconfig->materialPictureList.insert(rfid, materialsTypePicture);
  448. }
  449. else{
  450. pconfig->materialPictureList.insert(rfid, "");
  451. }
  452. if(materialArray.at(j).toObject().value("loanState").type() == QJsonValue::String)
  453. {
  454. int loanState = materialArray.at(j).toObject().value("loanState").toString().toInt();
  455. pconfig->materialLoanStateList.insert(rfid, loanState);
  456. }
  457. else if(materialArray.at(j).toObject().value("loanState").type() == QJsonValue::Double)
  458. {
  459. int loanState = materialArray.at(j).toObject().value("loanState").toInt();
  460. pconfig->materialLoanStateList.insert(rfid, loanState);
  461. }
  462. else{
  463. pconfig->materialLoanStateList.insert(rfid, -1);
  464. }
  465. if (materialArray.at(j).toObject().value("loanUserId").type() == QJsonValue::String)
  466. {
  467. QString loanUserId = materialArray.at(j).toObject().value("loanUserId").toString();;
  468. pconfig->materialLoanUserList.insert(rfid, loanUserId);
  469. }
  470. int materialtype = 0;
  471. QString materialtypename = "";
  472. QString pngfile = "";
  473. if(materialArray.at(j).toObject().value("materialsTypeId").type() == QJsonValue::String)
  474. {
  475. materialtype = materialArray.at(j).toObject().value("materialsTypeId").toString().toInt();
  476. }
  477. else if(materialArray.at(j).toObject().value("materialsTypeId").type() == QJsonValue::Double)
  478. {
  479. materialtype = materialArray.at(j).toObject().value("materialsTypeId").toInt();
  480. }
  481. if(materialArray.at(j).toObject().value("materialsTypeName").type() == QJsonValue::String)
  482. {
  483. materialtypename = materialArray.at(j).toObject().value("materialsTypeName").toString();
  484. }
  485. else{
  486. materialtypename = "未知类型" +QString::number(materialtype);
  487. }
  488. pconfig->materialTypeList.insert(rfid, materialtypename);
  489. if(materialArray.at(j).toObject().value("materialsTypeIcon").type() == QJsonValue::String)
  490. {
  491. pngfile = materialArray.at(j).toObject().value("materialsTypeIcon").toString();
  492. }
  493. pconfig->materialTypePngList.insert(materialtypename, pngfile);
  494. // if(pconfig->materialTypeCountList.contains(materialtypename))
  495. // {
  496. // pconfig->materialTypeCountList[materialtypename]++;
  497. // }
  498. // else{
  499. // pconfig->materialTypeCountList.insert(materialtypename, 0);
  500. // }
  501. }
  502. QString materialsTypeName = dataArray.at(i).toObject().value("materialsTypeName").toString();
  503. int number = dataArray.at(i).toObject().value("number").toInt();
  504. int borrowableNumber = dataArray.at(i).toObject().value("borrowableNumber").toInt();
  505. if(materialsTypeName != "全部")
  506. {
  507. pconfig->materialTypeCountList[materialsTypeName] = number;
  508. pconfig->materialTypeBorrowableNumberList[materialsTypeName] = borrowableNumber;
  509. }
  510. }
  511. }
  512. emit signal_updateMaterial();
  513. emit signal_updateMaterialHand();
  514. emit signal_updateMaterialAuto();
  515. }
  516. }
  517. }
  518. }
  519. }
  520. }
  521. }
  522. void pro::http_response_updateMaterial(QByteArray data)
  523. {
  524. QJsonParseError error;
  525. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  526. if (error.error == QJsonParseError::NoError)
  527. {
  528. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  529. {
  530. QJsonObject rootObj = jsonDoc.object();
  531. if(rootObj.contains("code"))
  532. {
  533. if(rootObj.value("code").toInt() == 200)
  534. {
  535. workstat = proWorkStat::userMaterial;
  536. }
  537. }
  538. }
  539. }
  540. }
  541. void pro::http_response_postMaterialReplaceAuto(QByteArray data)
  542. {
  543. QJsonParseError error;
  544. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  545. if (error.error == QJsonParseError::NoError)
  546. {
  547. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  548. {
  549. QJsonObject rootObj = jsonDoc.object();
  550. if(rootObj.contains("code"))
  551. {
  552. if(rootObj.value("code").toInt() == 200)
  553. {
  554. workstat = proWorkStat::userMaterial;
  555. }
  556. }
  557. }
  558. }
  559. }
  560. void pro::http_response_insertfingerLogin(QByteArray data)
  561. {
  562. QJsonParseError error;
  563. QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
  564. if (error.error == QJsonParseError::NoError)
  565. {
  566. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  567. {
  568. QJsonObject rootObj = jsonDoc.object();
  569. if(rootObj.contains("code"))
  570. {
  571. if(rootObj.value("code").toInt() == 200)
  572. {
  573. qDebug() << "录入指纹成功";
  574. emit signal_addFinger_act(true);
  575. }
  576. else{
  577. qDebug() << "录入指纹失败";
  578. emit signal_addFinger_act(false);
  579. }
  580. }
  581. }
  582. }
  583. }
  584. void pro::http_response_materialTypeGet(QByteArray data)
  585. {
  586. emit signal_materialTypeGet(data);
  587. }
  588. void pro::http_response_instructionsGet(QByteArray data)
  589. {
  590. emit signal_instructionsGet(data);
  591. }
  592. void pro::http_response_getMaterialCheckPlan(QByteArray data)
  593. {
  594. emit signal_getMaterialCheckPlan(data);
  595. }
  596. void pro::http_response_getMaterialCheckForm(QByteArray data)
  597. {
  598. emit signal_getMaterialCheckForm(data);
  599. }
  600. void pro::http_response_postSaveForm(QByteArray data)
  601. {
  602. emit signal_postSaveForm(data);
  603. }
  604. void pro::http_response_postCheckSign(QByteArray data)
  605. {
  606. emit signal_postCheckSign(data);
  607. }
  608. void pro::http_response_postSubmit(QByteArray data)
  609. {
  610. emit signal_postSubmit(data);
  611. }
  612. void pro::http_response_getMaterialInfoList(QByteArray data)
  613. {
  614. emit signal_getMaterialInfoList(data);
  615. }
  616. void pro::slot_response_data(quint64 idx, QString url, QByteArray data)
  617. {
  618. qDebug() << "url:" << url << "\nresponse=" << QString::fromUtf8(data);
  619. if(url == pconfig->usernameLogin_url)
  620. {
  621. http_response_usernamelogin(data);
  622. }
  623. else if(url == pconfig->cardLogin_url)
  624. {
  625. http_response_cardlogin(data);
  626. }
  627. else if(url == pconfig->logout_url)
  628. {
  629. http_response_logout(data);
  630. }
  631. else if(url == pconfig->getMaterial_url)
  632. {
  633. http_response_getMaterial(data);
  634. }
  635. else if(url == pconfig->userMaterial_url)
  636. {
  637. http_response_userMaterial(data);
  638. }
  639. // 物资取还
  640. else if(url == pconfig->updateMaterial_url)
  641. {
  642. http_response_updateMaterial(data);
  643. }
  644. // 物资更换
  645. else if(url == pconfig->postMaterialReplaceAuto_url)
  646. {
  647. http_response_postMaterialReplaceAuto(data);
  648. }
  649. else if(url == pconfig->fingerLogin_url)
  650. {
  651. http_response_fingerLogin(data);
  652. }
  653. else if(url == pconfig->addfinger_url)
  654. {
  655. http_response_insertfingerLogin(data);
  656. }
  657. else if (url == pconfig->getMaterialTypeList_url)
  658. {
  659. http_response_materialTypeGet(data);
  660. }
  661. else if (url == pconfig->instructionsGet_url)
  662. {
  663. http_response_instructionsGet(data);
  664. }
  665. else if (url == pconfig->getMaterialCheckPlan_url)
  666. {
  667. http_response_getMaterialCheckPlan(data);
  668. }
  669. else if (url == pconfig->getMaterialCheckForm_url)
  670. {
  671. http_response_getMaterialCheckForm(data);
  672. }
  673. else if (url == pconfig->postSaveForm_url)
  674. {
  675. http_response_postSaveForm(data);
  676. }
  677. else if (url == pconfig->postCheckSign_url)
  678. {
  679. http_response_postCheckSign(data);
  680. }
  681. else if (url == pconfig->postSubmit_url)
  682. {
  683. http_response_postSubmit(data);
  684. }
  685. else if (url == pconfig->getMaterialInfoList_url)
  686. {
  687. http_response_getMaterialInfoList(data);
  688. }
  689. }
  690. void pro::slot_login(int type, QString username, QString password)
  691. {
  692. if(type == 0)
  693. {
  694. login.username = username;
  695. login.password = password;
  696. login.type = LOGIN_USERNAME;
  697. workstat = proWorkStat::usernameLogin;
  698. }
  699. else if(type == 1)
  700. {
  701. login.cardNo = username;
  702. login.type = LOGIN_CARD;
  703. workstat = proWorkStat::cardLogin;
  704. }
  705. else if(type == 2)
  706. {
  707. emit signal_fingerWork(true);
  708. }
  709. }
  710. void pro::slot_logout(void)
  711. {
  712. workstat = proWorkStat::userLogout;
  713. }
  714. void pro::http_request_usernamelogin(void)
  715. {
  716. QJsonObject jsonRoot;
  717. QDateTime currentDateTime = QDateTime::currentDateTime();
  718. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  719. QString url = pconfig->usernameLogin_url;
  720. jsonRoot.insert("username", login.username);
  721. jsonRoot.insert("password", login.password);
  722. QJsonDocument jsonDoc(jsonRoot);
  723. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  724. qDebug() << "json=" << QString::fromUtf8(jsonData);
  725. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  726. workstat = proWorkStat::sleep;
  727. }
  728. void pro::http_request_cardlogin(void)
  729. {
  730. QJsonObject jsonRoot;
  731. QDateTime currentDateTime = QDateTime::currentDateTime();
  732. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  733. QString url = pconfig->cardLogin_url;
  734. jsonRoot.insert("cardNfc", login.cardNo);
  735. QJsonDocument jsonDoc(jsonRoot);
  736. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  737. qDebug() << "json=" << QString::fromUtf8(jsonData);
  738. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  739. workstat = proWorkStat::sleep;
  740. }
  741. void pro::http_request_userlogout(void)
  742. {
  743. QJsonObject jsonRoot;
  744. QDateTime currentDateTime = QDateTime::currentDateTime();
  745. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  746. QString url = pconfig->logout_url;
  747. QJsonDocument jsonDoc(jsonRoot);
  748. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  749. qDebug() << "json=" << QString::fromUtf8(jsonData);
  750. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  751. workstat = proWorkStat::sleep;
  752. }
  753. void pro::http_request_fingerLogin(void)
  754. {
  755. QJsonObject jsonRoot;
  756. QDateTime currentDateTime = QDateTime::currentDateTime();
  757. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  758. QString url = pconfig->fingerLogin_url;
  759. emit signal_post_request_data(timestampSeconds, url, NULL, fingerimgbuff, token);
  760. workstat = proWorkStat::sleep;
  761. }
  762. void pro::http_request_insertfingerLogin(void)
  763. {
  764. QDateTime currentDateTime = QDateTime::currentDateTime();
  765. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  766. QString url = pconfig->addfinger_url;
  767. QByteArray data = pconfig->username.toUtf8();
  768. qDebug() << "data=" << QString::fromUtf8(data);
  769. emit signal_post_request_data(timestampSeconds, url, data, fingerimgbuff, token);
  770. workstat = proWorkStat::sleep;
  771. }
  772. void pro::http_request_getMaterial(void)
  773. {
  774. QJsonObject jsonRoot;
  775. QDateTime currentDateTime = QDateTime::currentDateTime();
  776. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  777. QString url = pconfig->getMaterial_url;
  778. QJsonArray jsonarray;
  779. for (const QString& str : tidArray) {
  780. jsonarray.append(str);
  781. }
  782. jsonRoot.insert("list", jsonarray);
  783. QJsonDocument jsonDoc(jsonRoot);
  784. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  785. qDebug() << "json=" << QString::fromUtf8(jsonData);
  786. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  787. workstat = proWorkStat::sleep;
  788. }
  789. void pro::http_request_userMaterial(void)
  790. {
  791. QDateTime currentDateTime = QDateTime::currentDateTime();
  792. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  793. QString url = pconfig->userMaterial_url;
  794. QString getData = "cabinetCode=" + pconfig->devUuid;
  795. QByteArray jsonData = getData.toUtf8();
  796. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  797. workstat = proWorkStat::sleep;
  798. }
  799. void pro::http_request_userMaterial_copy(void)
  800. {
  801. QDateTime currentDateTime = QDateTime::currentDateTime();
  802. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  803. QString url = pconfig->userMaterial_url;
  804. QString getData = "cabinetCode=" + pconfig->devUuid;
  805. QByteArray jsonData = getData.toUtf8();
  806. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  807. workstat = proWorkStat::upgradeMaterial;
  808. }
  809. void pro::http_request_openCabinet(void)
  810. {
  811. QJsonObject jsonRoot;
  812. QDateTime currentDateTime = QDateTime::currentDateTime();
  813. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  814. QString url = pconfig->openCabinet_url;
  815. jsonRoot.insert("cabinetCode", pconfig->devUuid);
  816. jsonRoot.insert("openType", "0");
  817. QJsonDocument jsonDoc(jsonRoot);
  818. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  819. qDebug() << "json=" << QString::fromUtf8(jsonData);
  820. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  821. workstat = proWorkStat::sleep;
  822. }
  823. void pro::http_request_closeCabinet(void)
  824. {
  825. QJsonObject jsonRoot;
  826. QDateTime currentDateTime = QDateTime::currentDateTime();
  827. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  828. QString url = pconfig->closeCabinet_url;
  829. jsonRoot.insert("cabinetCode", pconfig->devUuid);
  830. QJsonDocument jsonDoc(jsonRoot);
  831. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  832. qDebug() << "json=" << QString::fromUtf8(jsonData);
  833. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  834. workstat = proWorkStat::sleep;
  835. }
  836. void pro::http_request_updateMaterial(void)
  837. {
  838. QJsonObject jsonRoot;
  839. QDateTime currentDateTime = QDateTime::currentDateTime();
  840. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  841. QString url = pconfig->updateMaterial_url;
  842. QJsonArray jsonarray;
  843. // 其他柜子
  844. for (const QString& str : pconfig->backElseMaterialList)
  845. {
  846. QJsonObject back;
  847. back.insert("loanState", "1");
  848. back.insert("materialsRfid", str);
  849. back.insert("restitutionToCabinetCode", pconfig->devUuid);
  850. jsonarray.append(back);
  851. }
  852. // 新绑定的
  853. for (const QString& str : pconfig->bindedMaterialList)
  854. {
  855. QJsonObject back;
  856. back.insert("loanState", "1");
  857. back.insert("materialsRfid", str);
  858. back.insert("restitutionToCabinetCode", pconfig->devUuid);
  859. jsonarray.append(back);
  860. }
  861. for (const QString& str : pconfig->backMaterialList)
  862. {
  863. QJsonObject back;
  864. back.insert("loanState", "1");
  865. back.insert("materialsRfid", str);
  866. back.insert("restitutionToCabinetCode", pconfig->devUuid);
  867. jsonarray.append(back);
  868. }
  869. // 其他柜子
  870. for (const QString& str : pconfig->takeElseMaterialList)
  871. {
  872. QJsonObject take;
  873. take.insert("loanState", "0");
  874. take.insert("materialsRfid", str);
  875. take.insert("restitutionToCabinetCode", pconfig->devUuid);
  876. jsonarray.append(take);
  877. }
  878. for (const QString& str : pconfig->takeMaterialList)
  879. {
  880. QJsonObject take;
  881. take.insert("loanState", "0");
  882. take.insert("materialsRfid", str);
  883. take.insert("restitutionToCabinetCode", pconfig->devUuid);
  884. jsonarray.append(take);
  885. }
  886. jsonRoot.insert("list", jsonarray);
  887. QJsonDocument jsonDoc(jsonRoot);
  888. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  889. qDebug() << "json=" << QString::fromUtf8(jsonData);
  890. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  891. workstat = proWorkStat::sleep;
  892. }
  893. void pro::http_request_replaceMaterial(void)
  894. {
  895. QJsonObject jsonRoot;
  896. QDateTime currentDateTime = QDateTime::currentDateTime();
  897. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  898. QString url = pconfig->postMaterialReplaceAuto_url;
  899. // 绑定
  900. QJsonArray jsonArrAppend;
  901. for (const QString& str : pconfig->bindedMaterialList)
  902. {
  903. jsonArrAppend.append(str);
  904. }
  905. // 解绑
  906. QJsonArray jsonArrRemove;
  907. for (const QString& str : pconfig->unbindMaterialList)
  908. {
  909. jsonArrRemove.append(str);
  910. }
  911. jsonRoot.insert("cabinetCode", pconfig->devUuid);
  912. jsonRoot.insert("bindingMaterialRfidList", jsonArrAppend);
  913. jsonRoot.insert("unbindMaterialRfidList", jsonArrRemove);
  914. QJsonDocument jsonDoc(jsonRoot);
  915. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  916. qDebug() << "json=" << QString::fromUtf8(jsonData);
  917. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  918. workstat = proWorkStat::userMaterial_copy;
  919. }
  920. void pro::http_request_exceptionHandle()
  921. {
  922. }
  923. void pro::http_request_materialTypeGet()
  924. {
  925. QDateTime currentDateTime = QDateTime::currentDateTime();
  926. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  927. QString url = pconfig->getMaterialTypeList_url;
  928. QString getData = "cabinetCode=" + pconfig->devUuid;
  929. QByteArray jsonData = getData.toUtf8();
  930. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  931. workstat = proWorkStat::instructionsGet;
  932. }
  933. void pro::http_request_instructionsGet()
  934. {
  935. QDateTime currentDateTime = QDateTime::currentDateTime();
  936. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  937. QString url = pconfig->instructionsGet_url;
  938. QString getData = "cabinetCode=" + pconfig->devUuid;
  939. QByteArray jsonData = getData.toUtf8();
  940. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  941. workstat = proWorkStat::sleep;
  942. }
  943. void pro::http_request_getMaterialCheckPlan()
  944. {
  945. QDateTime currentDateTime = QDateTime::currentDateTime();
  946. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  947. QString url = pconfig->getMaterialCheckPlan_url;
  948. QString getData = "cabinetCode=" + pconfig->devUuid;
  949. QByteArray jsonData = getData.toUtf8();
  950. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  951. workstat = proWorkStat::sleep;
  952. }
  953. void pro::http_request_getMaterialCheckForm()
  954. {
  955. QDateTime currentDateTime = QDateTime::currentDateTime();
  956. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  957. QString url = pconfig->getMaterialCheckForm_url;
  958. QString getData = "cabinetCode=" + pconfig->devUuid;
  959. getData += "&";
  960. getData += "planId=" + QString::number(pconfig->currentPlanId);
  961. QByteArray jsonData = getData.toUtf8();
  962. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  963. workstat = proWorkStat::sleep;
  964. }
  965. void pro::http_request_postSaveForm()
  966. {
  967. QDateTime currentDateTime = QDateTime::currentDateTime();
  968. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  969. QString url = pconfig->postSaveForm_url;
  970. emit signal_post_request_data(timestampSeconds, url, m_strPostSaveForm.toUtf8(), NULL, token);
  971. workstat = proWorkStat::sleep;
  972. }
  973. void pro::http_request_postCheckSign()
  974. {
  975. QDateTime currentDateTime = QDateTime::currentDateTime();
  976. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  977. QString url = pconfig->postCheckSign_url;
  978. emit signal_post_request_data(timestampSeconds, url, m_strPostCheckSign.toUtf8(), NULL, token);
  979. workstat = proWorkStat::sleep;
  980. }
  981. void pro::http_request_postSubmit()
  982. {
  983. QJsonObject jsonRoot;
  984. QDateTime currentDateTime = QDateTime::currentDateTime();
  985. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  986. QString url = pconfig->postSubmit_url;
  987. jsonRoot.insert("cabinetCode", pconfig->devUuid);
  988. jsonRoot.insert("planId", pconfig->currentPlanId);
  989. QJsonDocument jsonDoc(jsonRoot);
  990. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  991. qDebug() << "json=" << QString::fromUtf8(jsonData);
  992. emit signal_post_request_data(timestampSeconds, url, jsonData, NULL, token);
  993. workstat = proWorkStat::sleep;
  994. }
  995. void pro::http_request_getMaterialInfoList()
  996. {
  997. QDateTime currentDateTime = QDateTime::currentDateTime();
  998. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  999. QString url = pconfig->getMaterialInfoList_url;
  1000. QString getData = "cabinetCode=" + pconfig->devUuid;
  1001. QByteArray jsonData = getData.toUtf8();
  1002. emit signal_get_request_data(timestampSeconds, url, jsonData, token);
  1003. workstat = proWorkStat::sleep;
  1004. }
  1005. void pro::getMaterialElseInfos()
  1006. {
  1007. // 访问http服务
  1008. QString strUrl = "http://" + pconfig->httpHost + pconfig->getMaterial_url;
  1009. QByteArray inData;
  1010. QByteArray outData;
  1011. {
  1012. QJsonObject jsonRoot;
  1013. QDateTime currentDateTime = QDateTime::currentDateTime();
  1014. qint64 timestampSeconds = currentDateTime.toMSecsSinceEpoch();
  1015. QJsonArray jsonarray;
  1016. for (const QString& str : pconfig->elseMaterialList) {
  1017. jsonarray.append(str);
  1018. }
  1019. jsonRoot.insert("list", jsonarray);
  1020. QJsonDocument jsonDoc(jsonRoot);
  1021. inData = jsonDoc.toJson(QJsonDocument::Compact);
  1022. }
  1023. httpClient::postRequest(strUrl, httpClient::sToken, inData, outData);
  1024. pconfig->materialNameListElse.clear();
  1025. pconfig->materialPictureListElse.clear();
  1026. QJsonParseError error;
  1027. QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  1028. if (error.error == QJsonParseError::NoError)
  1029. {
  1030. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  1031. {
  1032. QJsonObject rootObj = jsonDoc.object();
  1033. if(rootObj.contains("code"))
  1034. {
  1035. if(rootObj.value("code").toInt() == 200)
  1036. {
  1037. if(rootObj.contains("data"))
  1038. {
  1039. QJsonValue data = rootObj.value("data");
  1040. if(data.type() == QJsonValue::Array)
  1041. {
  1042. QJsonArray rfidArray = data.toArray();
  1043. for(int i = 0; i < rfidArray.size(); i++)
  1044. {
  1045. QString rfid = "";
  1046. QString name = "";
  1047. int materialsTypeId = 0;
  1048. QString materialsTypePicture;
  1049. bool take;
  1050. if(rfidArray.at(i).toObject().value("materialsRfid").type() == QJsonValue::String)
  1051. {
  1052. rfid = rfidArray.at(i).toObject().value("materialsRfid").toString();
  1053. }
  1054. else{
  1055. continue;
  1056. }
  1057. if(rfidArray.at(i).toObject().value("materialsName").type() == QJsonValue::String)
  1058. {
  1059. name = rfidArray.at(i).toObject().value("materialsName").toString();
  1060. pconfig->materialNameListElse.insert(rfid, name);
  1061. }
  1062. else{
  1063. pconfig->materialNameListElse.insert(rfid, "未知物资");
  1064. }
  1065. if(rfidArray.at(i).toObject().value("materialsTypePicture").type() == QJsonValue::String)
  1066. {
  1067. QString materialsTypePicture = rfidArray.at(i).toObject().value("materialsTypePicture").toString();
  1068. pconfig->materialPictureListElse.insert(rfid, materialsTypePicture);
  1069. }
  1070. else{
  1071. pconfig->materialPictureListElse.insert(rfid, "");
  1072. }
  1073. }
  1074. }
  1075. }
  1076. }
  1077. }
  1078. }
  1079. }
  1080. }
  1081. void pro::slot_tid_update(quint16 count, QList<QString> tidList)
  1082. {
  1083. // 调用开始读rfid,进入此函数
  1084. tidArray = tidList;
  1085. if(pconfig->materworkstat == 0 || pconfig->materworkstat == 1 || pconfig->materworkstat == 3 || pconfig->materworkstat == 4)
  1086. {
  1087. // 业务逻辑
  1088. if(pconfig->materialStock == false)
  1089. {
  1090. if(tidArray.length() > 0)
  1091. {
  1092. workstat = proWorkStat::getMaterial;
  1093. }
  1094. }
  1095. else{
  1096. pconfig->materialStock = true;
  1097. pconfig->backElseMaterialList.clear();
  1098. pconfig->takeElseMaterialList.clear();
  1099. pconfig->takeMaterialList.clear();
  1100. pconfig->backMaterialList.clear();
  1101. pconfig->bindedMaterialList.clear();
  1102. pconfig->unbindMaterialList.clear();
  1103. // 如果属于本柜子
  1104. for(auto it = pconfig->materialLoanStateList.cbegin(); it != pconfig->materialLoanStateList.cend(); ++it)
  1105. {
  1106. if(tidArray.contains(it.key()))
  1107. {
  1108. if(it.value() == SERVER_MATERIAL_LOANSTATE_OUT)
  1109. {
  1110. pconfig->backMaterialList.append(it.key());
  1111. }
  1112. }
  1113. else{
  1114. if(it.value() == SERVER_MATERIAL_LOANSTATE_IN)
  1115. {
  1116. pconfig->takeMaterialList.append(it.key());
  1117. }
  1118. }
  1119. }
  1120. // 如果不属于本柜子
  1121. QStringList tids = tidArray;
  1122. QStringList keys = pconfig->materialLoanStateList.keys();
  1123. QSet<QString> tidSet(tids.begin(), tids.end());
  1124. QSet<QString> keySet(keys.begin(), keys.end());
  1125. QSet<QString> thisSet = tidSet - keySet;
  1126. // 获取这次不属于本柜子物资列表
  1127. QStringList thisMaterialList(thisSet.begin(), thisSet.end());
  1128. // 获取上次不属于本柜子物资列表
  1129. QStringList lastMaterialList = InteractiveConf::confReadElseMaterials();
  1130. // 这次不属于本柜子物资列表写入
  1131. InteractiveConf::confSaveElseMaterials(thisMaterialList);
  1132. QSet<QString> thisMaterialSet(thisMaterialList.begin(), thisMaterialList.end());
  1133. QSet<QString> laseMaterialSet(lastMaterialList.begin(), lastMaterialList.end());
  1134. QSet<QString> backMaterialSet = thisMaterialSet - laseMaterialSet; // 入柜
  1135. QSet<QString> takeMaterialSet = laseMaterialSet - thisMaterialSet; // 出柜
  1136. pconfig->backElseMaterialList = QStringList(backMaterialSet.begin(), backMaterialSet.end());
  1137. pconfig->takeElseMaterialList = QStringList(takeMaterialSet.begin(), takeMaterialSet.end());
  1138. pconfig->elseMaterialList = pconfig->backElseMaterialList + pconfig->takeElseMaterialList;
  1139. if (!pconfig->elseMaterialList.isEmpty())
  1140. {
  1141. getMaterialElseInfos();
  1142. }
  1143. if (!pconfig->backElseMaterialList.isEmpty())
  1144. {
  1145. // emit signal_backRefresh();
  1146. }
  1147. if (!pconfig->takeElseMaterialList.isEmpty())
  1148. {
  1149. // emit signal_takeRefresh();
  1150. }
  1151. // 调用对应的信号
  1152. // 如果是取还操作
  1153. if (pconfig->materworkstat == 0)
  1154. {
  1155. emit signal_updatetakebackMaterial();
  1156. }
  1157. // 如果是手动更换
  1158. else if (pconfig->materworkstat == 1)
  1159. {
  1160. emit signal_updatetakebackMaterialHand();
  1161. }
  1162. // 如果是异常处理
  1163. else if (pconfig->materworkstat == 3)
  1164. {
  1165. emit signal_updateExceptionHandle();
  1166. }
  1167. else if (pconfig->materworkstat == 4)
  1168. {
  1169. emit signal_updatematerialCheckPlan();
  1170. }
  1171. workstat = proWorkStat::upgradeMaterial;
  1172. }
  1173. }
  1174. // 如果是自动更换
  1175. else if (pconfig->materworkstat == 2)
  1176. {
  1177. if(pconfig->materialStock == false)
  1178. {
  1179. if(tidArray.length() > 0)
  1180. {
  1181. workstat = proWorkStat::getMaterial;
  1182. }
  1183. }
  1184. else{
  1185. pconfig->materialStock = true;
  1186. pconfig->takeMaterialList.clear();
  1187. pconfig->backMaterialList.clear();
  1188. pconfig->backElseMaterialList.clear();
  1189. pconfig->takeElseMaterialList.clear();
  1190. pconfig->bindedMaterialList.clear();
  1191. pconfig->unbindMaterialList.clear();
  1192. // 如果属于本柜子
  1193. for(auto it = pconfig->materialLoanStateList.cbegin(); it != pconfig->materialLoanStateList.cend(); ++it)
  1194. {
  1195. if(tidArray.contains(it.key()))
  1196. {
  1197. // 放入当做归还
  1198. if(it.value() == SERVER_MATERIAL_LOANSTATE_OUT)
  1199. {
  1200. pconfig->backMaterialList.append(it.key());
  1201. }
  1202. }
  1203. else{
  1204. // 拿出当做解绑
  1205. if(it.value() == SERVER_MATERIAL_LOANSTATE_IN)
  1206. {
  1207. // pconfig->takeMaterialList.append(it.key());
  1208. pconfig->unbindMaterialList.append(it.key());
  1209. }
  1210. }
  1211. }
  1212. // 如果不属于本柜子
  1213. QStringList tids = tidArray;
  1214. QStringList keys = pconfig->materialLoanStateList.keys();
  1215. QSet<QString> tidSet(tids.begin(), tids.end());
  1216. QSet<QString> keySet(keys.begin(), keys.end());
  1217. QSet<QString> thisSet = tidSet - keySet;
  1218. // 获取这次不属于本柜子物资列表
  1219. QStringList thisMaterialList(thisSet.begin(), thisSet.end());
  1220. // 获取上次不属于本柜子物资列表
  1221. QStringList lastMaterialList = InteractiveConf::confReadElseMaterials();
  1222. // 这次不属于本柜子物资列表写入
  1223. // InteractiveConf::confSaveElseMaterials(thisMaterialList);
  1224. QSet<QString> thisMaterialSet(thisMaterialList.begin(), thisMaterialList.end());
  1225. QSet<QString> laseMaterialSet(lastMaterialList.begin(), lastMaterialList.end());
  1226. QSet<QString> backMaterialSet = thisMaterialSet - laseMaterialSet; // 入柜 绑定 且归还
  1227. QSet<QString> takeMaterialSet = laseMaterialSet - thisMaterialSet; // 出柜 解除异常
  1228. // 本次要写入配置里的物资
  1229. QSet<QString> writhSet = laseMaterialSet - takeMaterialSet;
  1230. QList<QString> writhList(writhSet.begin(), writhSet.end());
  1231. InteractiveConf::confSaveElseMaterials(writhList);
  1232. pconfig->bindedMaterialList = QStringList(backMaterialSet.begin(), backMaterialSet.end());
  1233. pconfig->takeElseMaterialList = QStringList(takeMaterialSet.begin(), takeMaterialSet.end());
  1234. pconfig->elseMaterialList = pconfig->backElseMaterialList + pconfig->takeElseMaterialList
  1235. + pconfig->bindedMaterialList + pconfig->unbindMaterialList;
  1236. if (!pconfig->elseMaterialList.isEmpty())
  1237. {
  1238. getMaterialElseInfos();
  1239. }
  1240. emit signal_updatetakebackMaterialAuto();
  1241. workstat = proWorkStat::replaceMaterial;
  1242. }
  1243. }
  1244. }
  1245. void pro::slot_lockStat(bool leftStat, bool rightStat)
  1246. {
  1247. if(leftStat == false || rightStat == false)
  1248. {
  1249. pconfig->openDoor = true;
  1250. // 开锁时刷新时间戳
  1251. pconfig->lastLockTimeEpoch = QDateTime::currentSecsSinceEpoch();
  1252. }
  1253. else if(leftStat == true && rightStat == true)
  1254. {
  1255. pconfig->openDoor = false;
  1256. // 关锁时时间戳置为0
  1257. pconfig->lastLockTimeEpoch = 0;
  1258. }
  1259. if (pconfig->materworkstat == 0)
  1260. {
  1261. emit signal_lockStatTakeBack(leftStat, rightStat);
  1262. }
  1263. // 手动更换
  1264. else if (pconfig->materworkstat == 1)
  1265. {
  1266. emit signal_lockStatReplaceHand(leftStat, rightStat);
  1267. }
  1268. // 自动更换
  1269. else if (pconfig->materworkstat == 2)
  1270. {
  1271. emit signal_lockStatReplaceAuto(leftStat, rightStat);
  1272. }
  1273. else if (pconfig->materworkstat == 3)
  1274. {
  1275. emit signal_lockStatException(leftStat, rightStat);
  1276. }
  1277. else if (pconfig->materworkstat == 4)
  1278. {
  1279. emit signal_lockStatCheckPlan(leftStat, rightStat);
  1280. }
  1281. }
  1282. void pro::slot_getMaterial(void)
  1283. {
  1284. workstat = proWorkStat::userMaterial;
  1285. }
  1286. void pro::slot_takebackstat(bool stat)
  1287. {
  1288. if(stat == true)
  1289. {
  1290. workstat = proWorkStat::openCabinet;
  1291. }
  1292. else{
  1293. workstat = proWorkStat::closeCabinet;
  1294. }
  1295. }
  1296. void pro::updateTime(void)
  1297. {
  1298. timer->stop();
  1299. }
  1300. void pro::moveCursorTo(int x, int y)
  1301. {
  1302. QCursor::setPos(x, y);
  1303. }
  1304. void pro::getSelModelNumber(QJSValue callback)
  1305. {
  1306. int loanNumber = 0;
  1307. int exceNumber = 0;
  1308. for (auto it = pconfig->materialLoanStateList.begin(); it != pconfig->materialLoanStateList.end(); ++it)
  1309. {
  1310. if (it.value() == 0 && pconfig->materialLoanUserList.contains(it.key()))
  1311. {
  1312. if (pconfig->materialLoanUserList[it.key()] == pconfig->userId)
  1313. {
  1314. loanNumber++;
  1315. }
  1316. }
  1317. }
  1318. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  1319. // 进行数据读操作
  1320. QReadLocker locker(&pSingletonData->m_dataCacheLock);
  1321. exceNumber = pSingletonData->m_dataCacheExMaterialInfoId.size();
  1322. int chackPlanStatus = pSingletonData->m_checkPlanStatus;
  1323. int chackNumber = (chackPlanStatus == 0 || chackPlanStatus == 1) ? 1 : 0;
  1324. QString strJson = QString("{\"loanNumber\":%1,\"exceNumber\":%2, \"chackNumber\":%3}").arg(loanNumber).arg(exceNumber).arg(chackNumber);
  1325. if (callback.isCallable())
  1326. {
  1327. QJSValueList args;
  1328. args << strJson;
  1329. callback.call(args);
  1330. }
  1331. }
  1332. void pro::getError(QJSValue callback)
  1333. {
  1334. QStringList rfids = InteractiveConf::confReadElseMaterials();
  1335. if (callback.isCallable())
  1336. {
  1337. QJSValueList args;
  1338. args << !rfids.isEmpty();
  1339. // args << true;
  1340. callback.call(args);
  1341. }
  1342. }
  1343. QString pro::getUuid()
  1344. {
  1345. QUuid uuid = QUuid::createUuid();
  1346. return uuid.toString(QUuid::WithoutBraces);
  1347. }
  1348. bool pro::eventFilter(QObject *obj, QEvent *event)
  1349. {
  1350. if (event->type() == QEvent::MouseButtonPress) {
  1351. QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
  1352. // qDebug() << "Global mouse click at:" << mouseEvent->globalPos();
  1353. // 在这里处理全局鼠标点击
  1354. emit signal_global_mouse_clicked();
  1355. }
  1356. return QObject::eventFilter(obj, event);;
  1357. }
  1358. void pro::run()
  1359. {
  1360. while(this->threadstatus)
  1361. {
  1362. switch(workstat)
  1363. {
  1364. case proWorkStat::usernameLogin:http_request_usernamelogin();break;
  1365. case proWorkStat::cardLogin:http_request_cardlogin();break;
  1366. case proWorkStat::fingerLogin:http_request_fingerLogin();break;
  1367. case proWorkStat::insertfacelogin:http_request_insertfingerLogin();break;
  1368. case proWorkStat::userLogout:http_request_userlogout();break;
  1369. case proWorkStat::getMaterial:http_request_getMaterial();break;
  1370. case proWorkStat::userMaterial:http_request_userMaterial();break;
  1371. case proWorkStat::userMaterial_copy: http_request_userMaterial_copy(); break;
  1372. case proWorkStat::openCabinet:http_request_openCabinet();break;
  1373. case proWorkStat::closeCabinet:http_request_closeCabinet();break;
  1374. case proWorkStat::upgradeMaterial:http_request_updateMaterial();break;
  1375. case proWorkStat::replaceMaterial:http_request_replaceMaterial();break;
  1376. // case proWorkStat::exceptionHandle:http_request_exceptionHandle();break; // 异常处理
  1377. case proWorkStat::materialTypeGet:http_request_materialTypeGet();break;
  1378. case proWorkStat::instructionsGet:http_request_instructionsGet();break;
  1379. case proWorkStat::getMaterialCheckPlan:http_request_getMaterialCheckPlan();break;
  1380. case proWorkStat::getMaterialCheckForm:http_request_getMaterialCheckForm();break;
  1381. case proWorkStat::postSaveForm:http_request_postSaveForm(); break;
  1382. case proWorkStat::postCheckSign:http_request_postCheckSign(); break;
  1383. case proWorkStat::postSubmit:http_request_postSubmit(); break;
  1384. case proWorkStat::getMaterialInfoList:http_request_getMaterialInfoList();
  1385. }
  1386. msleep(20);
  1387. }
  1388. qDebug() << "pro thread exit!";
  1389. }