databasewidget.cpp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #include "databasewidget.h"
  2. #include "ui_databasewidget.h"
  3. #include "SystemConfig.h"
  4. #include "UIStyleManager.h"
  5. #include "FromWebAPI.h"
  6. #include "smclass.h"
  7. #include "tipwidget.h"
  8. #include "GlobalInfo.h"
  9. #include <QIntValidator>
  10. DatabaseWidget::DatabaseWidget(QWidget *parent) :
  11. QWidget(parent),
  12. ui(new Ui::DatabaseWidget)
  13. {
  14. ui->setupUi(this);
  15. m_logger = spdlog::get("ACASetting");
  16. if(m_logger == nullptr)
  17. {
  18. fmt::print("DatabaseWidget: Logger ACASetting not found\n");
  19. return;
  20. }
  21. /* 限制输入栏输入格式 */
  22. ui->lineEdit_recordLogRetain->setValidator(new QIntValidator(1, 360, this));
  23. ui->lineEdit_recordLogRetain->setPlaceholderText("请输入, 限制1-360天");
  24. ui->lineEdit_alarmLogRetain->setValidator(new QIntValidator(1, 360, this));
  25. ui->lineEdit_alarmLogRetain->setPlaceholderText("请输入, 限制1-360天");
  26. ui->lineEdit_operatorLogRetain->setValidator(new QIntValidator(1, 360, this));
  27. ui->lineEdit_operatorLogRetain->setPlaceholderText("请输入, 限制1-360天");
  28. ui->lineEdit_recordFileRetain->setValidator(new QIntValidator(1, 24, this));
  29. ui->lineEdit_recordFileRetain->setPlaceholderText("请输入, 限制1-24小时");
  30. ui->lineEdit_alarmFileRetain->setValidator(new QIntValidator(1, 360, this));
  31. ui->lineEdit_alarmFileRetain->setPlaceholderText("请输入, 限制1-360天");
  32. ui->lineEdit_listenPort->setValidator(new QIntValidator(1, 65535, this));
  33. ui->lineEdit_listenPort->setPlaceholderText("请输入");
  34. ui->lineEdit_recordFilePath->setPlaceholderText("请输入,服务端录音文件存储路径");
  35. ui->lineEdit_ftpPath->setPlaceholderText("请输入,FTP文件路径");
  36. /* 设置密码行隐藏 */
  37. ui->lineEdit_ftpPasswd->setEchoMode(QLineEdit::Password);
  38. /* 获取初始配置 */
  39. do_pBtn_restore_clicked();
  40. /* 连接信号和槽 */
  41. connect(ui->pBtn_restore, &QPushButton::clicked, this, &DatabaseWidget::do_pBtn_restore_clicked);
  42. UIStyle.registerWidget(this);
  43. }
  44. DatabaseWidget::~DatabaseWidget()
  45. {
  46. UIStyle.unregisterWidget(this);
  47. delete ui;
  48. }
  49. /* 保存参数 */
  50. bool DatabaseWidget::saveParams()
  51. {
  52. /* 先检查输入框是否有空的 */
  53. if(isDataEmpty())
  54. {
  55. SPDLOG_LOGGER_WARN(m_logger, "有输入框为空");
  56. return false;
  57. }
  58. if(!isDataChanged())
  59. {
  60. return true;
  61. }
  62. /* 生成json文件 */
  63. std::string jsonStr;
  64. if(!SysConfig.setDatabaseConfigToJson(m_databaseConfig, jsonStr))
  65. {
  66. SPDLOG_LOGGER_ERROR(m_logger, "数据库配置转换成json失败");
  67. return false;
  68. }
  69. /* 写入到数据库 */
  70. if(!m_fromWebAPI->updateSystemConfig(Config_Database, jsonStr, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_Database]))
  71. {
  72. SPDLOG_LOGGER_ERROR(m_logger, "更新数据库配置失败");
  73. return false;
  74. }
  75. /* 设置数据库配置 */
  76. SysConfig.setDatabaseConfig(m_databaseConfig);
  77. SPDLOG_LOGGER_DEBUG(m_logger, "数据库配置信息保存成功");
  78. return true;
  79. }
  80. /* 获取数据是否改变了 */
  81. bool DatabaseWidget::isDataChanged()
  82. {
  83. m_databaseConfig.nRecordLogRetain = ui->lineEdit_recordLogRetain->text().toInt();
  84. m_databaseConfig.nAlarmLogRetain = ui->lineEdit_alarmLogRetain->text().toInt();
  85. m_databaseConfig.nOperatorLogRetain = ui->lineEdit_operatorLogRetain->text().toInt();
  86. m_databaseConfig.nRecordFileRetain = ui->lineEdit_recordFileRetain->text().toInt();
  87. m_databaseConfig.nAlarmFileRetain = ui->lineEdit_alarmFileRetain->text().toInt();
  88. m_databaseConfig.nListenPort = ui->lineEdit_listenPort->text().toInt();
  89. m_databaseConfig.strRecordFilePath = ui->lineEdit_recordFilePath->text();
  90. m_databaseConfig.strFtpPath = ui->lineEdit_ftpPath->text();
  91. m_databaseConfig.strFtpUser = ui->lineEdit_ftpUser->text();
  92. QString noEncryPassword = ui->lineEdit_ftpPasswd->text();
  93. /* 加密 */
  94. int ret = SMClass::Instance()->Sm4Encrypt(m_defaultKey, noEncryPassword, m_databaseConfig.strFtpPassword);
  95. if(ret <= 0)
  96. {
  97. SPDLOG_LOGGER_ERROR(m_logger, "加密FTP密码失败");
  98. return false;
  99. }
  100. SPDLOG_LOGGER_TRACE(m_logger, "加密后的FTP密码: {}", m_databaseConfig.strFtpPassword.toStdString());
  101. /* 和旧数据对比 */
  102. const DatabaseConfig_t& oldConfig = SysConfig.getDatabaseConfig();
  103. if(m_databaseConfig == oldConfig)
  104. {
  105. SPDLOG_LOGGER_DEBUG(m_logger, "数据库配置信息没有修改");
  106. return false;
  107. }
  108. return true;
  109. }
  110. /* 恢复配置项 */
  111. void DatabaseWidget::do_pBtn_restore_clicked()
  112. {
  113. m_databaseConfig = SysConfig.getDatabaseConfig();
  114. ui->lineEdit_recordLogRetain->setText(QString::number(m_databaseConfig.nRecordLogRetain));
  115. ui->lineEdit_operatorLogRetain->setText(QString::number(m_databaseConfig.nOperatorLogRetain));
  116. ui->lineEdit_recordFileRetain->setText(QString::number(m_databaseConfig.nRecordFileRetain));
  117. ui->lineEdit_alarmLogRetain->setText(QString::number(m_databaseConfig.nAlarmLogRetain));
  118. ui->lineEdit_alarmFileRetain->setText(QString::number(m_databaseConfig.nAlarmFileRetain));
  119. ui->lineEdit_listenPort->setText(QString::number(m_databaseConfig.nListenPort));
  120. ui->lineEdit_recordFilePath->setText(m_databaseConfig.strRecordFilePath);
  121. ui->lineEdit_ftpPath->setText(m_databaseConfig.strFtpPath);
  122. ui->lineEdit_ftpUser->setText(m_databaseConfig.strFtpUser);
  123. QString encryPassword = m_databaseConfig.strFtpPassword;
  124. /* 解密 */
  125. QString noEncryPassword;
  126. SMClass::Instance()->Sm4Decrypt(m_defaultKey, encryPassword, noEncryPassword);
  127. ui->lineEdit_ftpPasswd->setText(noEncryPassword);
  128. SPDLOG_LOGGER_TRACE(m_logger, "解密后的FTP密码: {}", noEncryPassword.toStdString());
  129. }
  130. /* 判断数据是否有空的 */
  131. bool DatabaseWidget::isDataEmpty()
  132. {
  133. bool isEmpty = false;
  134. if(ui->lineEdit_recordLogRetain->text().isEmpty())
  135. {
  136. isEmpty = true;
  137. TipWidget::display(TipWidget::OPERATOR_WARN, "记录日志保留天数不能为空", GInfo.getTopWindow());
  138. }
  139. if(ui->lineEdit_alarmLogRetain->text().isEmpty())
  140. {
  141. isEmpty = true;
  142. TipWidget::display(TipWidget::OPERATOR_WARN, "报警日志保留天数不能为空", GInfo.getTopWindow());
  143. }
  144. if(ui->lineEdit_operatorLogRetain->text().isEmpty())
  145. {
  146. isEmpty = true;
  147. TipWidget::display(TipWidget::OPERATOR_WARN, "操作日志保留天数不能为空", GInfo.getTopWindow());
  148. }
  149. if(ui->lineEdit_recordFileRetain->text().isEmpty())
  150. {
  151. isEmpty = true;
  152. TipWidget::display(TipWidget::OPERATOR_WARN, "录音文件保留天数不能为空", GInfo.getTopWindow());
  153. }
  154. if(ui->lineEdit_alarmFileRetain->text().isEmpty())
  155. {
  156. isEmpty = true;
  157. TipWidget::display(TipWidget::OPERATOR_WARN, "报警文件保留天数不能为空", GInfo.getTopWindow());
  158. }
  159. if(ui->lineEdit_listenPort->text().isEmpty())
  160. {
  161. isEmpty = true;
  162. TipWidget::display(TipWidget::OPERATOR_WARN, "监听端口不能为空", GInfo.getTopWindow());
  163. }
  164. if(ui->lineEdit_recordFilePath->text().isEmpty())
  165. {
  166. isEmpty = true;
  167. TipWidget::display(TipWidget::OPERATOR_WARN, "录音文件路径不能为空", GInfo.getTopWindow());
  168. }
  169. if(ui->lineEdit_ftpPath->text().isEmpty())
  170. {
  171. isEmpty = true;
  172. TipWidget::display(TipWidget::OPERATOR_WARN, "FTP路径不能为空", GInfo.getTopWindow());
  173. }
  174. if(ui->lineEdit_ftpUser->text().isEmpty())
  175. {
  176. isEmpty = true;
  177. TipWidget::display(TipWidget::OPERATOR_WARN, "FTP用户不能为空", GInfo.getTopWindow());
  178. }
  179. if(ui->lineEdit_ftpPasswd->text().isEmpty())
  180. {
  181. isEmpty = true;
  182. TipWidget::display(TipWidget::OPERATOR_WARN, "FTP密码不能为空", GInfo.getTopWindow());
  183. }
  184. return isEmpty;
  185. }