#ifndef CAMDEV_MANAGER_H #define CAMDEV_MANAGER_H #include "../model/CamDev.h" #include "BaseSqliteDao.h" #include #define CamDev_TABLE_NAME "cam_dev" /** * 摄像头设备管理类 */ class CamDevSqliteDao : public BaseSqliteDao { private: /** 摄像头设备构造函数 */ CamDevSqliteDao() {} public: /** 摄像头设备单例模式 */ static CamDevSqliteDao* instance() { static CamDevSqliteDao instance; return &instance; } /** 添加摄像头设备 keyValuesToAdd 需要添加的列名和列值对map*/ Json::Value addCamDev(std::map& keyValuesToAdd) { Json::Value responseJsonValue; responseJsonValue["message"] = "添加失败!"; responseJsonValue["success"] = "false"; std::map whereKeyValues; whereKeyValues["cam_dev_id"] = keyValuesToAdd["cam_dev_id"]; if (this->findCamDevList(whereKeyValues)["data"].size() > 0) { responseJsonValue["message"] = "cam_dev_id exist!"; return responseJsonValue; } QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME); pModel.setEditStrategy(QSqlTableModel::OnManualSubmit); QSqlRecord rec = pModel.record(); for (auto keyValueToAdd : keyValuesToAdd) { rec.setValue(QString::fromUtf8(keyValueToAdd.first.c_str()), QString::fromUtf8(keyValueToAdd.second.c_str())); } rec.setGenerated("id", false); pModel.insertRecord(-1, rec);//TODO m_db->transaction();//开始事务操作 auto id1 = pModel.query().lastInsertId(); if (pModel.submitAll()) { m_db->commit();//提交 responseJsonValue["id"] = pModel.query().lastInsertId().toString().toStdString(); responseJsonValue["success"] = "true"; responseJsonValue["message"] = "添加成功!"; } else { m_db->rollback();//回滚 ERR("addCamDev err ,Database Error: " << pModel.lastError().text().toStdString()); } return responseJsonValue; } /** 删除本地国标配置 whereKey 列名;whereValue 列值 */ Json::Value deleteByColumn(string whereKey, string whereValue) { std::map whereKeyValues; whereKeyValues[whereKey] = whereValue; return deleteCamDev(whereKeyValues); } /** 删除摄像头设备 whereKey 列名;whereValue 列值 */ Json::Value deleteCamDev(std::map& whereKeyValues) { Json::Value responseJsonValue; responseJsonValue["message"] = "删除失败!"; responseJsonValue["success"] = "false"; QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME); for (auto whereKeyValue : whereKeyValues ) { pModel.setFilter(QObject::tr((string(whereKeyValue.first)+" = '%1'").c_str()).arg(QString::fromUtf8(whereKeyValue.second.c_str()))); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); int rowCount = pModel.rowCount(); if (rowCount >= 1) { for (int i = 0; i < rowCount; i++) { pModel.removeRow(i);//TODO } } else { return responseJsonValue; } m_db->transaction();//开始事务操作 if (pModel.submitAll()) { m_db->commit();//提交 responseJsonValue["success"] = "true"; responseJsonValue["message"] = "删除成功!"; } else { m_db->rollback();//回滚 ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString()); } return responseJsonValue; } /** 更新本地国标配置 keyValuesToUpdate 需要更新的列名和列值对; whereKeyValues 列名和列值条件 */ Json::Value updateCamDev(std::map& keyValuesToUpdate, std::map& whereKeyValues) { Json::Value responseJsonValue; responseJsonValue["message"] = "更新失败!"; responseJsonValue["success"] = "false"; QMutexLocker mutexLocker(m_mutexVisit);//TODO QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME); for (auto whereKeyValue : whereKeyValues) { pModel.setFilter(QObject::tr((whereKeyValue.first + " = '%1'").c_str()).arg(QString::fromStdString(whereKeyValue.second))); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); /*QSqlRecord rec = pModel.record(); rec.setValue("dst_path",QString::fromStdString(dst_path)); rec.setValue("total",total); rec.setValue("finish_flag",1); rec.setValue("update_time",QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));*/ int rowCount = pModel.rowCount(); if (rowCount > 0) { QSqlRecord rec = pModel.record(0); for (auto keyValueToUpdate : keyValuesToUpdate) { rec.setValue(keyValueToUpdate.first.c_str(), keyValueToUpdate.second.c_str()); } // rec.setValue("dst_path", QString::fromStdString(dst_path)); // rec.setValue("total", total); // rec.setValue("finish_flag", 1); rec.setValue("UpdateTime", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); pModel.setRecord(0, rec); } else { return responseJsonValue; } m_db->transaction();//开始事务操作 if (pModel.submitAll()) { m_db->commit();//提交 responseJsonValue["success"] = "true"; responseJsonValue["message"] = "更新成功!"; } else { m_db->rollback();//回滚 ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString()); } return responseJsonValue; } /** 更新摄像头设备 keyValuesToUpdate 需要更新的列名和列值对; whereKeyValues 列名和列值条件 */ Json::Value updateCamDev(std::map& keyValuesToUpdate, string whereKey, string whereValue) { std::map whereKeyValues; whereKeyValues[whereKey] = whereValue; return updateCamDev(keyValuesToUpdate, whereKeyValues); } /**查询摄像头设备列表 whereKeyValues 列名和列值对条件 */ Json::Value findCamDevList(std::map& whereKeyValues) { Json::Value responseJsonValue; responseJsonValue["message"] = "查询失败!"; responseJsonValue["success"] = "false"; responseJsonValue["data"] = Json::arrayValue; QMutexLocker mutexLocker(m_mutexVisit);//TODO std::list lst; QSqlTableModel pModel(NULL, *m_db); pModel.setTable(CamDev_TABLE_NAME);; for (auto whereKeyValue : whereKeyValues ) { pModel.setFilter(QObject::tr((string(whereKeyValue.first)+" = '%1'").c_str()).arg(QString::fromUtf8(whereKeyValue.second.c_str()))); } pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); int rowCount = pModel.rowCount(); if (rowCount > 0) { Json::Value rowDataList = Json::arrayValue; for (int i = 0; i < rowCount; ++i) { Json::Value rowData = Json::objectValue; Record_Cut_Video_info lRec; QSqlRecord rec = pModel.record(i); for (int i = 0; i < rec.count(); i++) { QSqlField field = rec.field(i); rowData[field.name().toStdString()] = field.value().toString().toStdString(); } rowDataList.append(rowData); } responseJsonValue["data"] = rowDataList; } responseJsonValue["message"] = "查询成功!"; responseJsonValue["success"] = "true"; return responseJsonValue; } /**查询所有本地国标配置列表 */ Json::Value findAllCamDevList() { std::map whereKeyValues; return findCamDevList(whereKeyValues); } }; #endif //CAMDEV_MANAGER_H