firingwidget.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. #include "firingwidget.h"
  2. #include "ui_firingwidget.h"
  3. #include "../countdownwidget.h"
  4. #include <QNetworkAccessManager>
  5. #include <QNetworkRequest>
  6. #include <QNetworkReply>
  7. #include <QUrl>
  8. #include <QUrlQuery>
  9. #include <QJsonDocument>
  10. #include <QJsonObject>
  11. #include <QJsonArray>
  12. #include <QDebug>
  13. #include <QSqlQuery>
  14. #include "../global.h"
  15. #define ANSI_COLOR_GREEN "\x1B[32m"
  16. #define ANSI_COLOR_RESET "\x1B[0m"
  17. firingWidget::firingWidget(const int& row,const bool& select,const QString& uuid,QWidget *parent) :
  18. QWidget(parent),
  19. ui(new Ui::firingWidget),
  20. m_uuid(uuid),
  21. m_row(row),
  22. m_select(select),
  23. dao(DatabaseManager::getInstance().getDatabase()),
  24. daoDet(DatabaseManager::getInstance().getDatabase()),
  25. daoReg(DatabaseManager::getInstance().getDatabase())
  26. {
  27. ui->setupUi(this);
  28. ui->pushButton_2->setText("立即测试");
  29. ui->textEdit->setStyleSheet("border: none;background: transparent;");
  30. ui->frame_2->setStyleSheet("border: none;background: transparent;");
  31. QFrame *frame = ui->frame_2; // 使用你为 QFrame 设置的对象名称
  32. navProgress = new NavProgress(frame);
  33. ui->verticalLayout->setContentsMargins(0, 30, 0, 0);
  34. ui->scrollArea->setStyleSheet("background: rgba(0, 0, 0, 22); border-radius: 20px;");
  35. ui->verticalLayout->addWidget(navProgress);
  36. mqttThread = new MqttThread(this);
  37. QStringList topics = {"hxgc/"+uuid+"/B"};
  38. mqttThread->setConnectionInfo("114.55.233.194", 1883, "hxgc", "hxgc123456", "P"+uuid, topics);
  39. connect(mqttThread, &MqttThread::mqttConnected, this, &firingWidget::onMqttConnected);
  40. mqttThread->start();
  41. connect(mqttThread, &MqttThread::messageAndTopicReceived, this, &firingWidget::handleMessageAndTopic);
  42. connect(this, &firingWidget::lastStageChanged, this, &firingWidget::onLastStageChanged);
  43. startBlasting();
  44. }
  45. firingWidget::~firingWidget()
  46. {
  47. delete ui;
  48. }
  49. void firingWidget::sendMqttMessage(const QString& topic, const QByteArray& message)
  50. {
  51. if (mqttThread && m_isMqttConnected) {
  52. emit mqttThread->sendMessageRequested(topic, message);
  53. } else {
  54. qDebug() << "MQTT 未连接,无法发送消息";
  55. }
  56. }
  57. void firingWidget::startBlasting()
  58. {
  59. QTimer::singleShot(1000, this, [this]() {
  60. lastStage=0;
  61. emit lastStageChanged(0);
  62. });
  63. }
  64. void firingWidget::on_pushButton_2_clicked(){
  65. emit countdown(m_uuid,topic,"message");
  66. }
  67. bool firingWidget::danUpload(const QJsonObject& jsonObj){
  68. QString htid = jsonObj["project_htid"].toString();
  69. QString htm = ""; //
  70. QString xmbh = jsonObj["project_xmbh"].toString();
  71. QString sbbh = jsonObj["equipment_sn"].toString();
  72. QString bprysfz = jsonObj["operator_identity"].toString();
  73. QString dwdm = jsonObj["company_code"].toString();
  74. QString xtm = ""; //
  75. QString jd = jsonObj["blast_longitude"].toString();
  76. QString bpsj = jsonObj["blast_time"].toString();
  77. QString wd = jsonObj["blast_latitude"].toString();
  78. QStringList uidList;
  79. QJsonArray regs = jsonObj["regs"].toArray();
  80. for (const auto& reg : regs) {
  81. QJsonObject regObj = reg.toObject();
  82. QJsonArray dets = regObj["dets"].toArray();
  83. for (const auto& det : dets) {
  84. QJsonObject detObj = det.toObject();
  85. uidList.append(detObj["uid"].toString());
  86. }
  87. }
  88. QString uid = uidList.join(",");
  89. QString plainText = QString("{\"htid\":\"%1\",\"htm\":\"%2\",\"xmbh\":\"%3\",\"sbbh\":\"%4\","
  90. "\"bprysfz\":\"%5\",\"dwdm\":\"%6\",\"xtm\":\"%7\",\"jd\":\"%8\","
  91. "\"bpsj\":\"%9\",\"wd\":\"%10\",\"uid\":\"%11\"}")
  92. .arg(htid)
  93. .arg(htm)
  94. .arg(xmbh)
  95. .arg(sbbh)
  96. .arg(bprysfz)
  97. .arg(dwdm)
  98. .arg(xtm)
  99. .arg(jd)
  100. .arg(bpsj)
  101. .arg(wd)
  102. .arg(uid);
  103. Des3Encryption des3;
  104. QByteArray key = "jadl12345678912345678912";
  105. QByteArray encryptedData = des3.des3Encrypt(plainText.toUtf8(), key);
  106. QByteArray base64Encoded = encryptedData.toBase64();
  107. QString encodedJson = QUrl::toPercentEncoding(base64Encoded);
  108. QString baseUrl = "http://test.mbdzlg.com/mbdzlgtxzx/servlet/DzlgSysbJsonServlert";
  109. QUrl url(baseUrl);
  110. QUrlQuery query;
  111. query.addQueryItem("param", encodedJson);
  112. url.setQuery(query);
  113. QNetworkAccessManager manager;
  114. QNetworkRequest request(url);
  115. request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
  116. QByteArray postData;
  117. QNetworkReply *reply = manager.post(request,postData);
  118. QEventLoop loop;
  119. QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
  120. loop.exec();
  121. if (reply->error() == QNetworkReply::NoError) {
  122. QByteArray responseData = reply->readAll();
  123. qDebug() << "Response:" << QString(responseData);
  124. } else {
  125. qDebug() << "Error:" << reply->errorString();
  126. }
  127. reply->deleteLater();
  128. return true;
  129. }
  130. bool firingWidget::addRegData(const QJsonObject& jsonObj) {
  131. QJsonArray regsArray = jsonObj["regs"].toArray();
  132. for (const auto& regValue : regsArray) {
  133. QJsonObject regObj = regValue.toObject();
  134. HBlastRegRecord recordReg;
  135. reg_uuid = QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
  136. recordReg.setUuid(reg_uuid);
  137. recordReg.setEquipSn(regObj["equipment_sn"].toString());
  138. recordReg.setEquipVersion(regObj["equipment_version"].toString());
  139. recordReg.setRegDetoCount(regObj["reg_deto_count"].toInt());
  140. recordReg.setErrorDetoCount(regObj["error_deto_count"].toInt());
  141. recordReg.setAfterTestBusV(regObj["after_test_bus_v"].toString());
  142. recordReg.setAfterTestBusI(regObj["after_test_bus_i"].toString());
  143. recordReg.setBusLeakageCurrentI(regObj["bus_leakage_current_i"].toString());
  144. recordReg.setNetChargedV(regObj["net_charged_v"].toString());
  145. recordReg.setNetChargedI(regObj["net_charged_i"].toString());
  146. recordReg.setBeforeBlastingV(regObj["before_blasting_v"].toString());
  147. recordReg.setBeforeBlastingI(regObj["before_blasting_i"].toString());
  148. recordReg.setRecordUuid(blast_uuid);
  149. recordReg.setCreatedAt(QDateTime::currentDateTime());
  150. // 插入数据到数据库
  151. if (!daoReg.addHBlastRegRecord(recordReg)) {
  152. return false;
  153. } else {
  154. }
  155. }
  156. return true;
  157. }
  158. bool firingWidget::addDetData(const QJsonObject& jsonObj) {
  159. QJsonArray regsArray = jsonObj["regs"].toArray();
  160. for (const auto& regValue : regsArray) {
  161. QJsonObject regObj = regValue.toObject();
  162. QJsonArray detsArray = regObj["dets"].toArray();
  163. for (const auto& detValue : detsArray) {
  164. QJsonObject detObj = detValue.toObject();
  165. HBlastRecordDet recordDet;
  166. recordDet.setId(0);
  167. recordDet.setUuid(QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-")));
  168. recordDet.setOutCode(detObj["out_code"].toString());
  169. recordDet.setInnerCode(detObj["in_code"].toString());
  170. recordDet.setUid(detObj["uid"].toString());
  171. recordDet.setStatus(detObj["status"].toString());
  172. recordDet.setFreq(detObj["freq"].toString());
  173. recordDet.setDelayTime(detObj["delay_time"].toString());
  174. recordDet.setTag(detObj["tag"].toString());
  175. recordDet.setCreatedAt(QDateTime::currentDateTime());
  176. recordDet.setBlastRecordId(blast_uuid);
  177. recordDet.setRegId(reg_uuid);
  178. recordDet.setCreatedAt(QDateTime::currentDateTime());
  179. if (!daoDet.addHBlastRecordDet(recordDet)) {
  180. return false;
  181. }
  182. }
  183. }
  184. return true;
  185. }
  186. void firingWidget::handleMessageAndTopic(const QByteArray &message, const QMqttTopicName &topic)
  187. {
  188. QString msgText = QString("Topic: %1, Message: %2").arg(topic.name(), QString(message));
  189. QTextEdit *textEdit = ui->scrollAreaWidgetContents->findChild<QTextEdit*>("textEdit");
  190. if (textEdit) {
  191. textEdit->append(msgText);
  192. }
  193. int stage = 0;
  194. QJsonDocument jsonDoc = QJsonDocument::fromJson(message);
  195. if (!jsonDoc.isNull() && jsonDoc.isObject()) {
  196. QJsonObject jsonObj = jsonDoc.object();
  197. if (jsonObj.contains("type") && jsonObj["type"].toInt() == 1) {
  198. if (jsonObj.contains("data") && jsonObj["data"].isObject()) {
  199. QJsonObject dataObject = jsonObj["data"].toObject();
  200. stage = dataObject["stage"].toInt();
  201. if (stage != lastStage) {
  202. lastStage = stage;
  203. emit lastStageChanged(lastStage);
  204. switch (stage) {
  205. case 0:
  206. navProgress->setState(0);
  207. ui->pushButton_2->setText("立即测试");
  208. ui->pushButton_2->setEnabled(false);
  209. break;
  210. case 1:
  211. navProgress->setState(1);
  212. emit progressChanged(1,m_row);
  213. emit updateBlastStatus(1,m_row);
  214. ui->pushButton_2->setText("立即测试");
  215. ui->pushButton_2->setEnabled(false);
  216. break;
  217. case 2:
  218. ui->pushButton_2->setEnabled(true);
  219. emit progressChanged(2,m_row);
  220. emit updateBlastStatus(2,m_row);
  221. qDebug() << "stage:" << stage;
  222. ui->pushButton_2->setText("充电");
  223. navProgress->setState(2);
  224. break;
  225. case 3:
  226. ui->pushButton_2->setEnabled(false);
  227. emit progressChanged(3,m_row);
  228. emit updateBlastStatus(3,m_row);
  229. ui->pushButton_2->setText("充电");
  230. navProgress->setState(3);
  231. break;
  232. case 4:
  233. ui->pushButton_2->setEnabled(true);
  234. emit progressChanged(4,m_row);
  235. emit updateBlastStatus(4,m_row);
  236. if(serialTool){
  237. emit updateBlastStatus(10,m_row);
  238. };
  239. ui->pushButton_2->setText("起爆");
  240. navProgress->setState(4);
  241. break;
  242. case 5:
  243. ui->pushButton_2->setEnabled(false);
  244. emit progressChanged(5,m_row);
  245. emit updateBlastStatus(5,m_row);
  246. emit updateButton(5,m_row);
  247. ui->pushButton_2->setText("起爆");
  248. navProgress->setState(5);
  249. break;
  250. case 6:
  251. ui->pushButton_2->setEnabled(false);
  252. emit progressChanged(6,m_row);
  253. emit updateBlastStatus(6,m_row);
  254. emit updateProjectStatus(m_uuid);
  255. ui->pushButton_2->setText("已完成起爆");
  256. navProgress->setState(6);
  257. break;
  258. case 7:
  259. qDebug() << "status:" << stage;
  260. ui->pushButton_2->setEnabled(false);
  261. emit progressChanged(0,m_row); // 发送进度值
  262. emit updateBlastStatus(0,m_row);//正在测试
  263. ui->pushButton_2->setText("已完成起爆");
  264. navProgress->setState(6);
  265. break;
  266. default:
  267. break;
  268. }
  269. }
  270. }
  271. }
  272. if (jsonObj.contains("type") && jsonObj["type"].toInt() == 2){
  273. if (jsonObj.contains("data") && jsonObj["data"].isObject()) {
  274. QJsonObject dataObject = jsonObj["data"].toObject();
  275. emit updateData(dataObject);
  276. emit closeFiring(m_uuid);
  277. }
  278. }
  279. }
  280. }
  281. void firingWidget::onCountdownFinished(const QString &topic,const QString &message){
  282. sendMqttMessage(topic, message.toUtf8());
  283. }
  284. void firingWidget::onMqttConnected()
  285. {
  286. m_isMqttConnected = true;
  287. }
  288. void firingWidget::onButtonPressedReceived(const QString &topic,const QString &message)
  289. {
  290. QByteArray data = "\r\nDISABLE_BUTTON\r\n";
  291. // 调用发送数据的方法
  292. bool success = serialTool->sendData(data);
  293. if (success) {
  294. qDebug() << "Data sent successfully";
  295. } else {
  296. qDebug() << "Failed to send data";
  297. }
  298. emit countdown(m_uuid,topic,message);
  299. }
  300. // 状态改变
  301. void firingWidget::onLastStageChanged(int newStage)
  302. {
  303. QString topic = "hxgc/"+m_uuid+"/P";
  304. QString message;
  305. QString buttonText;
  306. switch (lastStage) {
  307. case 0:
  308. message = "起爆测试";
  309. buttonText = "立即测试";
  310. sendMqttMessage(topic, message.toUtf8());
  311. break;
  312. case 2:
  313. message = "开始充电";
  314. buttonText = "充电";
  315. sendMqttMessage(topic, message.toUtf8());
  316. break;
  317. case 4:
  318. message = "起爆";
  319. buttonText = "起爆";
  320. break;
  321. case 5:
  322. if (connection) {
  323. disconnect(connection);
  324. }
  325. if (connectionPress) {
  326. disconnect(connectionPress);
  327. }
  328. serialTool->releaseInstance();
  329. qDebug() << ANSI_COLOR_GREEN << "释放按键" << ANSI_COLOR_RESET;
  330. break;
  331. default:
  332. return;
  333. }
  334. if (!message.isEmpty()) {
  335. if(lastStage == 4 && !m_select){
  336. bool success2;
  337. serialTool = SerialTool::getInstance(nullptr, &success2);
  338. if(serialTool){
  339. QByteArray data = "\r\nENABLE_BUTTON\r\n";
  340. bool success = serialTool->sendData(data);
  341. if (success) {
  342. qDebug() << "Data sent successfully";
  343. } else {
  344. qDebug() << "Failed to send data";
  345. }
  346. connection =connect(serialTool, &SerialTool::enableButtonReceived, [this]() {
  347. emit updateBlastStatus(10,m_row);
  348. });
  349. connectionPress = connect(serialTool, &SerialTool::buttonPressedReceived,[this, topic, message]() {
  350. this->onButtonPressedReceived(topic, message);
  351. });
  352. }else if(lastStage == 4&&!m_select){
  353. qDebug() << "多台起爆:待起爆状态";
  354. }else {
  355. qDebug() << "serialTool Not fond.";
  356. //在准备起爆状态下 但是没有获取串口
  357. lastStage = 10;
  358. qDebug() << lastStage;
  359. }
  360. }else{//????
  361. qDebug() << "Stage 值变为: " << newStage<<"发送消息"<<message.toUtf8();
  362. }
  363. }
  364. }
  365. void firingWidget::cancelBlasting()
  366. {
  367. QString message = "取消流程";
  368. if (!message.isEmpty()) {
  369. sendMqttMessage(topic, message.toUtf8());
  370. }
  371. }
  372. void firingWidget::on_sendTest_4_clicked()
  373. {
  374. // qDebug() << "navProgress 取消流程";
  375. // QString message = "取消流程";
  376. // if (!message.isEmpty()) {
  377. // sendMqttMessage(topic, message.toUtf8());
  378. // }
  379. lat = labLat;
  380. lon = labLon;
  381. QSqlDatabase db = DatabaseManager::getInstance().getDatabase();
  382. if (!db.transaction()) {
  383. qDebug() << "Failed to start transaction:" << db.lastError().text();
  384. // return false;
  385. }
  386. // 假设的 JSON 数据
  387. QString jsonData = R"(
  388. {
  389. "blast_latitude": "30.2039",
  390. "project_xmbh": "",
  391. "app_version": "1.52",
  392. "operator_identity": "330781198509079292",
  393. "blast_time": "2017-07-12 15:00:15",
  394. "regs": [
  395. {
  396. "net_charged_v": "13499",
  397. "after_test_bus_i": "0",
  398. "after_test_bus_v": "7006",
  399. "equipment_version": "AK01_V3.2_240726",
  400. "bus_leakage_current_i": "0",
  401. "reg_deto_count": "2",
  402. "before_blasting_i": "1",
  403. "error_deto_count": "2",
  404. "net_charged_i": "0",
  405. "before_blasting_v": "13484",
  406. "dets": [
  407. {
  408. "uid": "24211104F18004",
  409. "freq": "80000",
  410. "out_code": "2411104F18000",
  411. "tag": "1-1-1",
  412. "in_code": "045AC8360A4C0061",
  413. "status": "0x03",
  414. "delay_time": "0.0"
  415. },
  416. {
  417. "uid": "24211104F18005",
  418. "freq": "80000",
  419. "out_code": "2411104F18001",
  420. "tag": "1-2-1",
  421. "in_code": "055AC8360A4C0088",
  422. "status": "0x03",
  423. "delay_time": "20.0"
  424. }
  425. ],
  426. "equipment_sn": "F34A0000001"
  427. }
  428. ],
  429. "reg_deto_count": "2",
  430. "project_name": "sidf",
  431. "operator_name": "樊工",
  432. "phone": "18611112222",
  433. "project_htid": "",
  434. "company_code": "3701234300003",
  435. "blast_longitude": "120.196",
  436. "error_deto_count": "2",
  437. "equipment_sn": "F34A0000001"
  438. }
  439. )";
  440. QJsonDocument doc = QJsonDocument::fromJson(jsonData.toUtf8());
  441. QJsonObject jsonObj = doc.object();
  442. // 创建 HBlastRecord 对象
  443. HBlastRecord record;
  444. record.setProjectName(jsonObj["project_name"].toString());
  445. record.setProjectHtid(jsonObj["project_htid"].toString());
  446. record.setProjectXmbh(jsonObj["project_xmbh"].toString());
  447. record.setOperatorName(jsonObj["operator_name"].toString());
  448. record.setPhone(jsonObj["phone"].toString());
  449. record.setOperatorIdentity(jsonObj["operator_identity"].toString());
  450. record.setEquipmentSn(jsonObj["equipment_sn"].toString());
  451. record.setCompanyCode(jsonObj["company_code"].toString());
  452. record.setAppVersion(jsonObj["app_version"].toString());
  453. // record.setLongitude(jsonObj["blast_longitude"].toString());
  454. // record.setLatitude(jsonObj["blast_latitude"].toString());
  455. record.setLongitude(lat);
  456. record.setLatitude(lon);
  457. record.setRegDetCount(jsonObj["reg_deto_count"].toInt());
  458. record.setErrorDetCount(jsonObj["error_deto_count"].toInt());
  459. record.setBlastAt(QDateTime::fromString(jsonObj["blast_time"].toString(), "yyyy-MM-dd hh:mm:ss"));
  460. record.setCreatedAt(QDateTime::currentDateTime());
  461. qDebug() << "currentDateTime."<<QDateTime::currentDateTime();
  462. record.setUuid(QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-")));
  463. // if (dao.addHBlastRecord(record)) {
  464. // qDebug() << "Record inserted successfully.";
  465. // }else{
  466. // qDebug() << "Failed to insert record.";
  467. // }
  468. // if (!addDetData(jsonObj)) {
  469. // qDebug() << "Insert failed for UID:"; // 假设 record 有 uid 成员
  470. // if (db.rollback()) {
  471. // qDebug() << "Transaction rolled back successfully.";
  472. // } else {
  473. // qDebug() << "Failed to roll back transaction:" << db.lastError().text();
  474. // }
  475. // }
  476. // if (!addRegData(jsonObj)) {
  477. // if (db.rollback()) {
  478. // qDebug() << "Transaction rolled back successfully.";
  479. // } else {
  480. // qDebug() << "Failed to roll back transaction:" << db.lastError().text();
  481. // }
  482. // }
  483. // db.commit();
  484. if(lat=="定位失败"&&lat=="未知"&&lon=="定位失败"&&lon=="未知"){
  485. // 数据出本地 不传丹灵
  486. if (dao.addHBlastRecord(record)) {
  487. qDebug() << "Record inserted successfully.";
  488. }else{
  489. qDebug() << "Failed to insert record.";
  490. }
  491. if (!addDetData(jsonObj)) {
  492. qDebug() << "Insert failed for UID:"; // 假设 record 有 uid 成员
  493. if (db.rollback()) {
  494. qDebug() << "Transaction rolled back successfully.";
  495. } else {
  496. qDebug() << "Failed to roll back transaction:" << db.lastError().text();
  497. }
  498. }
  499. if (!addRegData(jsonObj)) {
  500. if (db.rollback()) {
  501. qDebug() << "Transaction rolled back successfully.";
  502. } else {
  503. qDebug() << "Failed to roll back transaction:" << db.lastError().text();
  504. }
  505. }
  506. db.commit();
  507. }
  508. // danUpload(jsonObj);
  509. // if (db.commit()) {
  510. // qDebug() << "Transaction committed successfully.";
  511. // } else {
  512. // qDebug() << "Failed to commit transaction:" << db.lastError().text();
  513. // }
  514. }
  515. void firingWidget::updateWebData(const QJsonObject& jsonObj){
  516. blast_uuid =QUuid::createUuid().toString(QUuid::WithoutBraces).remove(QRegularExpression("-"));
  517. lat = labLat;
  518. lon = labLon;
  519. QSqlDatabase db = DatabaseManager::getInstance().getDatabase();
  520. if (!db.transaction()) {
  521. qDebug() << "Failed to start transaction:" << db.lastError().text();
  522. }
  523. HBlastRecord record;
  524. record.setProjectName(jsonObj["project_name"].toString());
  525. record.setProjectHtid(jsonObj["project_htid"].toString());
  526. record.setProjectXmbh(jsonObj["project_xmbh"].toString());
  527. record.setOperatorName(jsonObj["operator_name"].toString());
  528. record.setPhone(jsonObj["phone"].toString());
  529. record.setOperatorIdentity(jsonObj["operator_identity"].toString());
  530. record.setEquipmentSn(jsonObj["equipment_sn"].toString());
  531. record.setCompanyCode(jsonObj["company_code"].toString());
  532. record.setAppVersion(jsonObj["app_version"].toString());
  533. // record.setLongitude(jsonObj["blast_longitude"].toString());
  534. // record.setLatitude(jsonObj["blast_latitude"].toString());
  535. record.setLongitude(lat);
  536. record.setLatitude(lon);
  537. record.setRegDetCount(jsonObj["reg_deto_count"].toInt());
  538. record.setErrorDetCount(jsonObj["error_deto_count"].toInt());
  539. record.setBlastAt(QDateTime::fromString(jsonObj["blast_time"].toString(), "yyyy-MM-dd hh:mm:ss"));
  540. record.setCreatedAt(QDateTime::currentDateTime());
  541. qDebug() << "currentDateTime."<<QDateTime::currentDateTime();
  542. record.setUuid(blast_uuid);
  543. if (dao.addHBlastRecord(record)) {
  544. qDebug() << "Record inserted successfully.";
  545. }else{
  546. qDebug() << "Failed to insert record.";
  547. }
  548. if (!addRegData(jsonObj)) {
  549. if (db.rollback()) {
  550. qDebug() << "Transaction rolled back successfully.";
  551. } else {
  552. qDebug() << "Failed to roll back transaction:" << db.lastError().text();
  553. }
  554. }
  555. if (!addDetData(jsonObj)) {
  556. qDebug() << "Insert failed for UID:"; // 假设 record 有 uid 成员
  557. if (db.rollback()) {
  558. qDebug() << "Transaction rolled back successfully.";
  559. } else {
  560. qDebug() << "Failed to roll back transaction:" << db.lastError().text();
  561. }
  562. }
  563. db.commit();
  564. if(lat=="定位失败"&&lat=="未知"&&lon=="定位失败"&&lon=="未知"){
  565. // 数据出本地 不传丹灵
  566. }
  567. // danUpload(jsonObj);
  568. // if (db.commit()) {
  569. // qDebug() << "Transaction committed successfully.";
  570. // } else {
  571. // qDebug() << "Failed to commit transaction:" << db.lastError().text();
  572. // }
  573. }