noisewidget.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #include "noisewidget.h"
  2. #include "ui_noisewidget.h"
  3. #include "noisemonitorparamdialog.h"
  4. #include <QIntValidator>
  5. #include "UIStyleManager.h"
  6. #include "SystemConfig.h"
  7. #include "FromWebAPI.h"
  8. NoiseWidget::NoiseWidget(QWidget *parent) :
  9. QWidget(parent),
  10. ui(new Ui::NoiseWidget)
  11. {
  12. ui->setupUi(this);
  13. m_logger = spdlog::get("ACASetting");
  14. if(m_logger == nullptr)
  15. {
  16. fmt::print("NoiseWidget: Logger ACASetting not found\n");
  17. return;
  18. }
  19. /* 隐藏不需要的输入栏 */
  20. /* 噪音服务地址 */
  21. ui->lineEdit_serverAddr->hide();
  22. ui->label_5->hide();
  23. /* 噪音文件目录 */
  24. ui->lineEdit_noiseFileDir->hide();
  25. ui->label_2->hide();
  26. /* 服务程序路径 */
  27. ui->lineEdit_serverPath->hide();
  28. ui->label_3->hide();
  29. /* 设置输入数字的栏只能输入数字 */
  30. ui->lineEdit_detectInternal->setValidator(new QIntValidator(this));
  31. /* 设置初始参数 */
  32. do_pBtn_restore_clicked();
  33. /* 获取噪音检测参数 */
  34. m_noiseDetectParam = SysConfig.getNoiseDetectParam();
  35. /* 连接信号和槽 */
  36. connect(ui->pBtn_editNoiseParam, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_editNoiseParam_clicked);
  37. connect(ui->pBtn_restore, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_restore_clicked);
  38. UIStyle.registerWidget(this);
  39. }
  40. NoiseWidget::~NoiseWidget()
  41. {
  42. UIStyle.unregisterWidget(this);
  43. delete ui;
  44. }
  45. void NoiseWidget::do_pBtn_editNoiseParam_clicked()
  46. {
  47. NoiseMonitorParamDialog dlg;
  48. /* 设置当前参数 */
  49. dlg.setInitialParams(m_noiseDetectParam);
  50. /* 执行对话框 */
  51. dlg.exec();
  52. /* 判断是否点击了OK */
  53. if(!dlg.isOK())
  54. {
  55. return;
  56. }
  57. /* 获取当前参数 */
  58. m_noiseDetectParam = dlg.getCurrentParams();
  59. }
  60. /* 恢复配置项 */
  61. void NoiseWidget::do_pBtn_restore_clicked()
  62. {
  63. const NoiseDetectBaseConfig_t &noiseConfig = SysConfig.getNoiseDetectBaseConfig();
  64. ui->lineEdit_serverAddr->setText(noiseConfig.strNoiseServerAddr);
  65. ui->lineEdit_noiseFileDir->setText(noiseConfig.strNoiseDetectDir);
  66. ui->lineEdit_serverPath->setText(noiseConfig.strServerPath);
  67. ui->lineEdit_serverPath->setText(noiseConfig.strServerPath);
  68. ui->lineEdit_detectInternal->setText(QString::number(noiseConfig.nNoiseDetectDuration));
  69. ui->checkBox_enableNoiseDetect->setChecked(noiseConfig.isEnableNoiseDetect);
  70. ui->checkBox_mainRoadEnable->setChecked(noiseConfig.isEnableMainRoadDetect);
  71. }
  72. /* 保存参数 */
  73. bool NoiseWidget::saveConfig()
  74. {
  75. bool isSuccess = true;
  76. /* 先保存基础设置 */
  77. if(!saveBaseConfig())
  78. {
  79. isSuccess = false;
  80. return false;
  81. }
  82. /* 再保存噪音检测参数 */
  83. if(!saveNoiseDetectParam())
  84. {
  85. isSuccess = false;
  86. return false;
  87. }
  88. return isSuccess;
  89. }
  90. /* 保存基础参数 */
  91. bool NoiseWidget::saveBaseConfig()
  92. {
  93. NoiseDetectBaseConfig_t noiseConfig;
  94. noiseConfig.strNoiseServerAddr = ui->lineEdit_serverAddr->text();
  95. noiseConfig.strNoiseDetectDir = ui->lineEdit_noiseFileDir->text();
  96. noiseConfig.strServerPath = ui->lineEdit_serverPath->text();
  97. noiseConfig.nNoiseDetectDuration = ui->lineEdit_detectInternal->text().toInt();
  98. noiseConfig.isEnableNoiseDetect = ui->checkBox_enableNoiseDetect->isChecked();
  99. noiseConfig.isEnableMainRoadDetect = ui->checkBox_mainRoadEnable->isChecked();
  100. /* 和历史数据进行对比 */
  101. const NoiseDetectBaseConfig_t &oldConfig = SysConfig.getNoiseDetectBaseConfig();
  102. if(noiseConfig == oldConfig)
  103. {
  104. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置没有变化,不需要更新");
  105. return true;
  106. }
  107. /* 将噪音检测基础配置转换成json */
  108. std::string strJson;
  109. if(!SysConfig.setNoiseDetectBaseConfigToJson(noiseConfig, strJson))
  110. {
  111. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测基础配置转换成JSON失败");
  112. return false;
  113. }
  114. /* 更新数据库信息 */
  115. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseBase, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseBase]))
  116. {
  117. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测基础配置失败");
  118. return false;
  119. }
  120. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置更新成功");
  121. return true;
  122. }
  123. /* 保存噪音检测参数 */
  124. bool NoiseWidget::saveNoiseDetectParam()
  125. {
  126. /* 和历史数据进行对比 */
  127. const NoiseDetectParam_t &oldParam = SysConfig.getNoiseDetectParam();
  128. if(m_noiseDetectParam == oldParam)
  129. {
  130. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数没有变化,不需要更新");
  131. return true;
  132. }
  133. /* 将噪音检测参数转换成json */
  134. std::string strJson;
  135. if(!SysConfig.setNoiseDetectParamToJson(m_noiseDetectParam, strJson))
  136. {
  137. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测参数转换成JSON失败");
  138. return false;
  139. }
  140. /* 更新数据库信息 */
  141. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseParam, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseParam]))
  142. {
  143. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测参数失败");
  144. return false;
  145. }
  146. /* 更新系统配置 */
  147. SysConfig.setNoiseDetectParam(m_noiseDetectParam);
  148. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数更新成功");
  149. return true;
  150. }