noisewidget.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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.nNoiseDetectInterval));
  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::isDataChanged()
  94. {
  95. if( isDataChangedBaseConfig() || isDataChangedNoiseDetectParam() )
  96. {
  97. return true;
  98. }else {
  99. return false;
  100. }
  101. }
  102. /* 判断基础数据是否修改了 */
  103. bool NoiseWidget::isDataChangedBaseConfig()
  104. {
  105. m_noiseDetectBaseConfig.strNoiseServerAddr = ui->lineEdit_serverAddr->text();
  106. m_noiseDetectBaseConfig.strNoiseDetectDir = ui->lineEdit_noiseFileDir->text();
  107. m_noiseDetectBaseConfig.strServerPath = ui->lineEdit_serverPath->text();
  108. m_noiseDetectBaseConfig.nNoiseDetectInterval = ui->lineEdit_detectInternal->text().toInt();
  109. m_noiseDetectBaseConfig.isEnableNoiseDetect = ui->checkBox_enableNoiseDetect->isChecked();
  110. m_noiseDetectBaseConfig.isEnableMainRoadDetect = ui->checkBox_mainRoadEnable->isChecked();
  111. /* 和历史数据进行对比 */
  112. const NoiseDetectBaseConfig_t &oldConfig = SysConfig.getNoiseDetectBaseConfig();
  113. if(m_noiseDetectBaseConfig == oldConfig)
  114. {
  115. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置没有变化,不需要更新");
  116. return false;
  117. }
  118. return true;
  119. }
  120. /* 判断噪音检测参数是否修改了 */
  121. bool NoiseWidget::isDataChangedNoiseDetectParam()
  122. {
  123. const NoiseDetectParam_t &oldParam = SysConfig.getNoiseDetectParam();
  124. if(m_noiseDetectParam == oldParam)
  125. {
  126. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数没有变化,不需要更新");
  127. return false;
  128. }
  129. return true;
  130. }
  131. /* 保存基础参数 */
  132. bool NoiseWidget::saveBaseConfig()
  133. {
  134. if(!isDataChangedBaseConfig())
  135. {
  136. return true;
  137. }
  138. /* 将噪音检测基础配置转换成json */
  139. std::string strJson;
  140. if(!SysConfig.setNoiseDetectBaseConfigToJson(m_noiseDetectBaseConfig, strJson))
  141. {
  142. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测基础配置转换成JSON失败");
  143. return false;
  144. }
  145. /* 更新数据库信息 */
  146. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseBase, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseBase]))
  147. {
  148. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测基础配置失败");
  149. return false;
  150. }
  151. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置更新成功");
  152. return true;
  153. }
  154. /* 保存噪音检测参数 */
  155. bool NoiseWidget::saveNoiseDetectParam()
  156. {
  157. /* 和历史数据进行对比 */
  158. if(isDataChangedNoiseDetectParam() == false)
  159. {
  160. return true;
  161. }
  162. /* 将噪音检测参数转换成json */
  163. std::string strJson;
  164. if(!SysConfig.setNoiseDetectParamToJson(m_noiseDetectParam, strJson))
  165. {
  166. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测参数转换成JSON失败");
  167. return false;
  168. }
  169. /* 更新数据库信息 */
  170. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseParam, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseParam]))
  171. {
  172. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测参数失败");
  173. return false;
  174. }
  175. /* 更新系统配置 */
  176. SysConfig.setNoiseDetectParam(m_noiseDetectParam);
  177. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数更新成功");
  178. return true;
  179. }