RunMaterialManualReplaceSubmit.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "RunMaterialManualReplaceSubmit.h"
  2. #include "InteractiveData.h"
  3. #include "InteractiveConf.h"
  4. #include "../user/httpclient.h"
  5. #include "../user/config.h"
  6. extern config *pconfig;
  7. RunMaterialManualReplaceSubmit::RunMaterialManualReplaceSubmit(InteractiveTask *task, QMutex *mutex)
  8. :RunAbstract(task, mutex)
  9. {
  10. }
  11. void RunMaterialManualReplaceSubmit::run()
  12. {
  13. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  14. QStringList currentRegular; // 正常的
  15. QStringList currentUnusual; // 异常的
  16. QStringList currentCabinet; // 柜中的
  17. // 获取正常物资
  18. for(auto it = pconfig->materialLoanStateList.cbegin(); it != pconfig->materialLoanStateList.cend(); ++it)
  19. {
  20. if(it.value() == SERVER_MATERIAL_LOANSTATE_IN)
  21. {
  22. currentRegular.append(it.key());
  23. }
  24. }
  25. // 获取异常物资
  26. currentUnusual = InteractiveConf::confReadElseMaterials();
  27. currentCabinet = currentRegular + currentUnusual;
  28. QJsonObject jsonObjRoot;
  29. QJsonArray jsonArrList;
  30. for (int i = 0; i < pSingletonData->m_modelMaterialManualReplace.count(); ++i)
  31. {
  32. QVariantMap info = pSingletonData->m_modelMaterialManualReplace.get(i);
  33. QJsonObject jsonObjData;
  34. int click = info.value("click").toInt();
  35. // 维修
  36. if (click == 1)
  37. {
  38. jsonObjData.insert("measure", "维修");
  39. }
  40. // 更换
  41. else if(click == 2)
  42. {
  43. jsonObjData.insert("measure", "更换");
  44. }
  45. else
  46. {
  47. continue;
  48. }
  49. QString newMaterialsRfid = info.value("materialsRfid").toString();
  50. QString oldMaterialsRfid = info.value("oldMaterialsRfid").toString();
  51. if (oldMaterialsRfid == newMaterialsRfid)
  52. {
  53. if (!currentCabinet.contains(oldMaterialsRfid))
  54. {
  55. setRespond(QString("{\"code\":-1,\"msg\":\"属于本柜的物资%1不在柜中,请放入\"}").arg(oldMaterialsRfid));
  56. return;
  57. }
  58. }
  59. else
  60. {
  61. if (currentCabinet.contains(oldMaterialsRfid))
  62. {
  63. setRespond(QString("{\"code\":-1,\"msg\":\"不属于本柜的物资%1在柜中,请取出\"}").arg(oldMaterialsRfid));
  64. return;
  65. }
  66. if (!currentCabinet.contains(newMaterialsRfid))
  67. {
  68. setRespond(QString("{\"code\":-1,\"msg\":\"属于本柜的物资%1不在柜中,请放入\"}").arg(newMaterialsRfid));
  69. return;
  70. }
  71. }
  72. if (oldMaterialsRfid != newMaterialsRfid)
  73. {
  74. currentUnusual.removeAll(newMaterialsRfid);
  75. }
  76. jsonObjData.insert("expirationDate", info.value("expirationDate").toString());
  77. jsonObjData.insert("materialsName", info.value("materialsName").toString());
  78. jsonObjData.insert("materialsRfid", info.value("materialsRfid").toString());
  79. jsonObjData.insert("oldMaterialsId", info.value("materialsId").toString());
  80. QString selectedTypeName = info.value("materialsTypeName").toString();
  81. QString selectedPropName = info.value("propertiesValue").toString();
  82. QVariantList types = info.value("types").toList();
  83. for (int i = 0; i < types.size(); ++i)
  84. {
  85. QVariantMap type = types.at(i).toMap();
  86. QString typeName = type.value("display").toString();
  87. if (typeName == selectedTypeName)
  88. {
  89. jsonObjData.insert("materialsTypeId", type.value("materialsTypeId").toString());
  90. QVariantList props = type.value("props").toList();
  91. for (int j = 0; j < props.size(); ++j)
  92. {
  93. QVariantMap prop = props.at(j).toMap();
  94. QString propName = prop.value("display").toString();
  95. if (propName == selectedPropName)
  96. {
  97. jsonObjData.insert("propertiesProperty", prop.value("propertiesProperty").toString());
  98. jsonObjData.insert("propertiesPropertyId", prop.value("propertiesPropertyId").toString());
  99. jsonObjData.insert("propertiesValue", prop.value("propertiesValue").toString());
  100. jsonObjData.insert("propertiesValueId", prop.value("propertiesValueId").toString());
  101. }
  102. }
  103. }
  104. }
  105. jsonArrList.append(jsonObjData);
  106. }
  107. jsonObjRoot.insert("list", jsonArrList);
  108. QJsonDocument jsonDoc(jsonObjRoot);
  109. QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);
  110. // 访问http服务
  111. QString strUrl = "http://" + pconfig->httpHost + pconfig->postMaterialReplace_url;
  112. QByteArray inData = jsonData;
  113. QByteArray outData;
  114. httpClient::postRequest(strUrl, pSingletonData->m_token, inData, outData);
  115. setRespond(outData);
  116. // 解析 JSON 数据
  117. if (!outData.isEmpty())
  118. {
  119. QJsonParseError parseError;
  120. QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &parseError);
  121. if (parseError.error != QJsonParseError::NoError)
  122. {
  123. qWarning() << "JSON 解析错误:" << parseError.errorString();
  124. return;
  125. }
  126. if (!jsonDoc.isObject())
  127. {
  128. qWarning() << "JSON 数据不是对象";
  129. return;
  130. }
  131. QJsonObject jsonObjRoot = jsonDoc.object();
  132. // 检查 code 字段
  133. if (jsonObjRoot["code"].toInt() == 200) {
  134. InteractiveConf::confSaveElseMaterials(currentUnusual);
  135. } else {
  136. qWarning() << "返回码不为 200,实际为:" << jsonObjRoot["code"].toInt();
  137. }
  138. }
  139. qDebug() << outData;
  140. }