249 lines
6.7 KiB
C++
249 lines
6.7 KiB
C++
#include "HxDataBase.h"
|
|
|
|
QMutex DataBase::mutex;
|
|
QSqlDatabase DataBase::database;
|
|
QString DataBase::device_id;
|
|
QString DataBase::ftp_address;
|
|
QString DataBase::ftp_username;
|
|
QString DataBase::ftp_password;
|
|
int DataBase::algorithm_type;
|
|
QString DataBase::dsm_video_input_source;
|
|
QString DataBase::adas_video_input_source;
|
|
QStringList DataBase::bsd_video_input_source;
|
|
QStringList DataBase::bsd_warn_regions;
|
|
|
|
QSqlDatabase DataBase::open(QString filepath, QString connectionName)
|
|
{
|
|
QSqlDatabase db;
|
|
if (QSqlDatabase::contains(connectionName))
|
|
db = QSqlDatabase::database(connectionName);
|
|
else
|
|
db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
|
|
|
|
db.setDatabaseName(filepath);
|
|
|
|
if (!db.open())
|
|
{
|
|
QString bk_filepath = filepath + QString(".[%1].bk").arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmss"));
|
|
|
|
QFile::copy(filepath, bk_filepath);
|
|
|
|
QFile::remove(filepath);
|
|
|
|
db.open();
|
|
}
|
|
|
|
return db;
|
|
}
|
|
|
|
/**
|
|
* @brief 关闭数据库
|
|
* @param connectionName 连接名
|
|
*/
|
|
void DataBase::close(QString connectionName) { QSqlDatabase::removeDatabase(connectionName); }
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据
|
|
* @param name name字段值
|
|
* @return 返回对应参数
|
|
*/
|
|
QVariant DataBase::read_setting(QString name)
|
|
{
|
|
QVariant value;
|
|
|
|
QMutexLocker lock(&mutex);
|
|
|
|
QSqlQuery query(database);
|
|
|
|
query.prepare("SELECT [value] FROM [Setting] WHERE [name]=:name");
|
|
query.bindValue(":name", name);
|
|
if (query.exec())
|
|
{
|
|
if (query.next())
|
|
value = query.value("value");
|
|
}
|
|
|
|
query.clear();
|
|
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据(int)
|
|
* @param name name字段值
|
|
* @param defaultValue 默认值(int)
|
|
* @return 返回对应参数(int)
|
|
*/
|
|
int DataBase::read_setting(QString name, int defaultValue)
|
|
{
|
|
auto value = read_setting(name);
|
|
|
|
return value.isNull() ? defaultValue : value.toInt();
|
|
}
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据(bool)
|
|
* @param name name字段值
|
|
* @param defaultValue 默认值(bool)
|
|
* @return 返回对应参数(bool)
|
|
*/
|
|
bool DataBase::read_setting(QString name, bool defaultValue)
|
|
{
|
|
auto value = read_setting(name);
|
|
|
|
return value.isNull() ? defaultValue : value.toBool();
|
|
}
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据(string)
|
|
* @param name name字段值
|
|
* @param defaultValue 默认值(string)
|
|
* @return 返回对应参数(string)
|
|
*/
|
|
QString DataBase::read_setting(QString name, QString defaultValue)
|
|
{
|
|
auto value = read_setting(name);
|
|
|
|
return value.isNull() ? defaultValue : value.toString();
|
|
}
|
|
|
|
/**
|
|
* @brief 写入 Setting 表数据
|
|
* @param name name字段值
|
|
* @param value 对应参数
|
|
*/
|
|
void DataBase::write_setting(QString name, QString value)
|
|
{
|
|
QMutexLocker lock(&mutex);
|
|
|
|
QSqlQuery query(database);
|
|
|
|
query.prepare("REPLACE INTO [Setting] ([name], [value]) VALUES (:name, :value);");
|
|
query.bindValue(":name", name);
|
|
query.bindValue(":value", value);
|
|
if (!query.exec())
|
|
{
|
|
qDebug("write_setting failed, name=%s, value=%s", name.toUtf8().data(), value.toUtf8().data());
|
|
}
|
|
query.clear();
|
|
}
|
|
|
|
void DataBase::initialization()
|
|
{
|
|
database = open("DataBase.db", "DataBase");
|
|
|
|
if (!database.isOpen())
|
|
{
|
|
qDebug("配置信息创建失败, 程序无法继续启动!");
|
|
return;
|
|
}
|
|
|
|
QSqlQuery query(database);
|
|
|
|
/* 创建 程序配置信息 表 */
|
|
if (!query.exec("CREATE TABLE IF NOT EXISTS [Setting] ("
|
|
" [name] TEXT NOT NULL PRIMARY KEY,"
|
|
" [value] TEXT"
|
|
");"))
|
|
{
|
|
qDebug("配置表创建失败");
|
|
return;
|
|
}
|
|
|
|
/* */
|
|
device_id = read_setting("device_id", QString("TVIS"));
|
|
|
|
/* */
|
|
ftp_address = read_setting("ftp_address", QString("192.168.10.10:7616"));
|
|
|
|
/* */
|
|
ftp_username = read_setting("ftp_username", QString("nvruser"));
|
|
|
|
/* */
|
|
ftp_password = read_setting("ftp_password", QString("Sztvis_789."));
|
|
|
|
/* 算法类型, 默认 BSD */
|
|
algorithm_type = read_setting("algorithm_type", 0x02);
|
|
|
|
/* DSM 视频输入源 (string) */
|
|
dsm_video_input_source = read_setting("dsm_video_input_source", QString(""));
|
|
|
|
/* Adas 视频输入源 (string) */
|
|
adas_video_input_source = read_setting("adas_video_input_source", QString(""));
|
|
|
|
/* BSD 视频输入源 (string) */
|
|
bsd_video_input_source = read_setting("bsd_video_input_source", QString(";;;;;;")).split(";");
|
|
|
|
bsd_warn_regions = read_setting(
|
|
"bsd_warn_regions",
|
|
QString("0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0"))
|
|
.split("*");
|
|
}
|
|
|
|
bool DataBase::save_setting()
|
|
{
|
|
database.transaction();
|
|
|
|
write_setting("device_id", device_id);
|
|
write_setting("ftp_address", ftp_address);
|
|
write_setting("ftp_username", ftp_username);
|
|
write_setting("ftp_password", ftp_password);
|
|
write_setting("algorithm_type", QString::number(algorithm_type));
|
|
write_setting("dsm_video_input_source", dsm_video_input_source);
|
|
write_setting("adas_video_input_source", adas_video_input_source);
|
|
write_setting("bsd_video_input_source", bsd_video_input_source.join(";"));
|
|
write_setting("bsd_warn_regions", bsd_warn_regions.join("*"));
|
|
|
|
return database.commit();
|
|
}
|
|
|
|
/**
|
|
* @brief 获取BSD报警区域
|
|
* @param channel 通道号
|
|
* @return 返回 BsdWarnRegion 结构体
|
|
*/
|
|
BsdWarnRegion DataBase::get_bsd_warn_region(int channel)
|
|
{
|
|
BsdWarnRegion ret;
|
|
|
|
auto data = bsd_warn_regions[channel];
|
|
if (data == "")
|
|
data = "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0";
|
|
|
|
auto array = data.split("$");
|
|
|
|
auto points = array[0].split(" ");
|
|
for (int a = 0; a < 4; a++)
|
|
{
|
|
auto p = points.at(a).split(",");
|
|
|
|
ret.tFirstRegionPoint[a].x = p[0].toInt();
|
|
ret.tFirstRegionPoint[a].y = p[1].toInt();
|
|
}
|
|
|
|
points = array[1].split(" ");
|
|
for (int a = 0; a < 4; a++)
|
|
{
|
|
auto p = points.at(a).split(",");
|
|
|
|
ret.tSecondRegionPoint[a].x = p[0].toInt();
|
|
ret.tSecondRegionPoint[a].y = p[1].toInt();
|
|
}
|
|
|
|
points = array[2].split(" ");
|
|
for (int a = 0; a < 4; a++)
|
|
{
|
|
auto p = points.at(a).split(",");
|
|
|
|
ret.tThirdRegionPoint[a].x = p[0].toInt();
|
|
ret.tThirdRegionPoint[a].y = p[1].toInt();
|
|
}
|
|
|
|
return ret;
|
|
}
|