noisewidget.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. /* 设置输入数字的栏只能输入数字,并限制为整数0-60 */
  30. ui->lineEdit_detectInternal->setValidator(new QIntValidator(0, 60, this));
  31. /* 设置输入栏的弱提示符 */
  32. ui->lineEdit_detectInternal->setPlaceholderText("请输入, 限制0-60秒");
  33. /* 设置初始参数 */
  34. do_pBtn_restore_clicked();
  35. /* 获取噪音检测参数 */
  36. m_noiseDetectParam = SysConfig.getNoiseDetectParam();
  37. /* 连接信号和槽 */
  38. connect(ui->pBtn_editNoiseParam, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_editNoiseParam_clicked);
  39. connect(ui->pBtn_restore, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_restore_clicked);
  40. UIStyle.registerWidget(this);
  41. }
  42. NoiseWidget::~NoiseWidget()
  43. {
  44. UIStyle.unregisterWidget(this);
  45. delete ui;
  46. }
  47. void NoiseWidget::do_pBtn_editNoiseParam_clicked()
  48. {
  49. NoiseMonitorParamDialog dlg;
  50. /* 设置当前参数 */
  51. dlg.setInitialParams(m_noiseDetectParam);
  52. /* 执行对话框 */
  53. dlg.exec();
  54. /* 判断是否点击了OK */
  55. if(!dlg.isOK())
  56. {
  57. return;
  58. }
  59. /* 获取当前参数 */
  60. m_noiseDetectParam = dlg.getCurrentParams();
  61. }
  62. /* 恢复配置项 */
  63. void NoiseWidget::do_pBtn_restore_clicked()
  64. {
  65. const NoiseDetectBaseConfig_t &noiseConfig = SysConfig.getNoiseDetectBaseConfig();
  66. ui->lineEdit_serverAddr->setText(noiseConfig.strNoiseServerAddr);
  67. ui->lineEdit_noiseFileDir->setText(noiseConfig.strNoiseDetectDir);
  68. ui->lineEdit_serverPath->setText(noiseConfig.strServerPath);
  69. ui->lineEdit_serverPath->setText(noiseConfig.strServerPath);
  70. ui->lineEdit_detectInternal->setText(QString::number(noiseConfig.nNoiseDetectDuration));
  71. ui->checkBox_enableNoiseDetect->setChecked(noiseConfig.isEnableNoiseDetect);
  72. ui->checkBox_mainRoadEnable->setChecked(noiseConfig.isEnableMainRoadDetect);
  73. }
  74. /* 保存参数 */
  75. bool NoiseWidget::saveConfig()
  76. {
  77. bool isSuccess = true;
  78. /* 先保存基础设置 */
  79. if(!saveBaseConfig())
  80. {
  81. isSuccess = false;
  82. return false;
  83. }
  84. /* 再保存噪音检测参数 */
  85. if(!saveNoiseDetectParam())
  86. {
  87. isSuccess = false;
  88. return false;
  89. }
  90. return isSuccess;
  91. }
  92. /* 保存基础参数 */
  93. bool NoiseWidget::saveBaseConfig()
  94. {
  95. NoiseDetectBaseConfig_t noiseConfig;
  96. noiseConfig.strNoiseServerAddr = ui->lineEdit_serverAddr->text();
  97. noiseConfig.strNoiseDetectDir = ui->lineEdit_noiseFileDir->text();
  98. noiseConfig.strServerPath = ui->lineEdit_serverPath->text();
  99. noiseConfig.nNoiseDetectDuration = ui->lineEdit_detectInternal->text().toInt();
  100. noiseConfig.isEnableNoiseDetect = ui->checkBox_enableNoiseDetect->isChecked();
  101. noiseConfig.isEnableMainRoadDetect = ui->checkBox_mainRoadEnable->isChecked();
  102. /* 和历史数据进行对比 */
  103. const NoiseDetectBaseConfig_t &oldConfig = SysConfig.getNoiseDetectBaseConfig();
  104. if(noiseConfig == oldConfig)
  105. {
  106. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置没有变化,不需要更新");
  107. return true;
  108. }
  109. /* 将噪音检测基础配置转换成json */
  110. std::string strJson;
  111. if(!SysConfig.setNoiseDetectBaseConfigToJson(noiseConfig, strJson))
  112. {
  113. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测基础配置转换成JSON失败");
  114. return false;
  115. }
  116. /* 更新数据库信息 */
  117. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseBase, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseBase]))
  118. {
  119. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测基础配置失败");
  120. return false;
  121. }
  122. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置更新成功");
  123. return true;
  124. }
  125. /* 保存噪音检测参数 */
  126. bool NoiseWidget::saveNoiseDetectParam()
  127. {
  128. /* 和历史数据进行对比 */
  129. const NoiseDetectParam_t &oldParam = SysConfig.getNoiseDetectParam();
  130. if(m_noiseDetectParam == oldParam)
  131. {
  132. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数没有变化,不需要更新");
  133. return true;
  134. }
  135. /* 将噪音检测参数转换成json */
  136. std::string strJson;
  137. if(!SysConfig.setNoiseDetectParamToJson(m_noiseDetectParam, strJson))
  138. {
  139. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测参数转换成JSON失败");
  140. return false;
  141. }
  142. /* 更新数据库信息 */
  143. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseParam, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseParam]))
  144. {
  145. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测参数失败");
  146. return false;
  147. }
  148. /* 更新系统配置 */
  149. SysConfig.setNoiseDetectParam(m_noiseDetectParam);
  150. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数更新成功");
  151. return true;
  152. }