firingwidget.cpp 24 KB

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