firingwidget.cpp 24 KB

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