#include "ToEQMDataBase.h" #include #include #include #include ToEQMDataBase::ToEQMDataBase() { m_logger = spdlog::get("ToEQMDataBase"); if(m_logger == nullptr) { SPDLOG_ERROR("ToEQMDataBase logger is nullptr"); return; } } ToEQMDataBase::~ToEQMDataBase() { if(m_httpApi != nullptr) { delete m_httpApi; m_httpApi = nullptr; } } /* 初始化WebApi */ bool ToEQMDataBase::initWebApi(const QString& url, const QString& serverIP, const QString& serID) { if(m_httpApi == nullptr) { m_httpApi = new lhhttpapi; } int ret = 0; if(!m_httpApi->Load()) { SPDLOG_LOGGER_ERROR(m_logger,"Load WebApi failed!"); return false; } m_httpApi->DBInit(url.toStdString().c_str()); // if(ret < 0) // { // SPDLOG_LOGGER_ERROR(m_logger,"Init WebApi failed:{}, error Info:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); // return false; // } // SPDLOG_LOGGER_TRACE(m_logger,"初始化WebApi成功!"); /* 获取服务器列表 */ char serverList[8192]; ret = m_httpApi->DBGetServerList(serverList, 8192); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"Get server list failed:{}, error info:{}",ret, m_httpApi->DoGetLastError(&ret).toStdString()); return false; } SPDLOG_LOGGER_TRACE(m_logger,"Server list:{}", serverList); SPDLOG_LOGGER_DEBUG(m_logger,"WebAPI Sucess!"); /* 登录,第二个参数是限制的服务 */ ret = m_httpApi->DBLogin(serverIP, serID, "SPSS", m_userToken); if(ret < 0) { SPDLOG_LOGGER_ERROR(m_logger,"Login failed:{}, error info:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } SPDLOG_LOGGER_TRACE(m_logger,"Login sucess!"); return true; } /** * @brief 写入算法信息,写入tAction表 * * @param vecInfo 要写入的表格数据 * @param vecNowInfo 现有的表格数据,主要是为了重复利用已经删除的自增主键而传入的 * @return true * @return false */ bool ToEQMDataBase::writeAlgorithmInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } /* 取出可用的自增主键,从0开始计算 */ // std::list listPKID; // int nPKID = 0; // for(const auto& it : vecNowInfo) // { // while(it.ActionTaskID == nPKID) // { // if(it.PKID != nPKID) // { // listPKID.push_back(nPKID); // break; // } // nPKID ++; // } // } /* 循环写入数据 */ for(const auto& it : vecInfo) { QString retStr; /* 操作名称,现在一次性将设备位置和线条信息都下载下来 */ nJson json0; json0["opName"] = "SPSS_InsertToAction"; nJson json1; json1["actionID"] = it.ActionID; /* 算法ID */ json1["actionName"] = it.ActionName; /* 算法名称 */ json1["actionTaskID"] = it.ActionTaskID; /* 算法类型 */ json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, retStr); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"写入tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); } SPDLOG_LOGGER_DEBUG(m_logger,"写入一条算法 {} 到 tAction成功!", it.ActionID); } return true; } /* 删除算法信息 */ bool ToEQMDataBase::deleteAlgorithmInfo(std::vector& vecDeleteInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } for(const auto& it : vecDeleteInfo) { nJson json0; json0["opName"] = "SPSS_DeleteFromAction"; nJson json1; json1["actionID"] = it.ActionID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"删除tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); } SPDLOG_LOGGER_DEBUG(m_logger,"从tAction 删除算法 {} 成功!", it.ActionID); } return true; } /* 获取tAction数据 */ bool ToEQMDataBase::getAlgorithmInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger, "WebAPI is nullptr"); return false; } /* 清空内容 */ vecInfo.clear(); nJson json0; json0["opName"] = "SPSS_SelectFromAction"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } /* 解析获取到的JSON数据 */ // SPDLOG_LOGGER_DEBUG(m_logger,"\n{}",strRet.toStdString()); try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取tAction失败"); return false; } nJson result = json1["result"]; for(auto& it : result) { AlgorithmInfo info; info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get(); info.ActionName = it["actionName"].get(); info.ActionTaskID = it["actionTaskid"].get(); // SPDLOG_LOGGER_DEBUG(m_logger,"ActionID:{}, ActionName:{}, ActionTaskID:{}",info.ActionID,info.ActionName,info.ActionTaskID); vecInfo.push_back(info); } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析tAction数据失败:{}",e.what()); return false; } return true; } /* 插入设备信息 */ bool ToEQMDataBase::insertDeviceInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } if(vecInfo.empty()) { return false; } bool isSuccess = true; for(const auto& it : vecInfo) { nJson json0; json0["opName"] = "SPSS_InsertToCamerInfo"; nJson json1; /* 这里不知道是不是“?”运算符的等级是不是不够,不加括号会报错 */ json1["camerID"] = it.DeviceID; json1["camerName"] = it.DeviceName; json1["camerIP"] = it.DeviceIP; json1["camerPort"] = it.DevicePort; json1["camerUser"] = it.UserAccount; json1["camerPwd"] = it.UserPassword; json1["camerType"] = it.DeviceType; json1["camerSerial"] = it.DeviceSerial; json1["camerChannel"] = nullptr; json1["camerUrl"] = nullptr; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"插入ID {} 信息到 CamerInfo 成功!", it.DeviceID); } /* 插入信息到tActionCamer表 */ for(const auto& it0 : vecInfo) { for(const auto& it1 : it0.vecAlgorithmInfo) { nJson json0; json0["opName"] = "SPSS_InsertToActionCamer"; nJson json1; json1["actionID"] = it1.ActionID; json1["camerID"] = it0.DeviceID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"插入DeviceID {} 和 ActionID {} 到 ActionCamer 成功!", it0.DeviceID, it1.ActionID); } } return isSuccess; } /* 更新设备信息 */ bool ToEQMDataBase::updateDeviceInfo(std::vector& vecUpdateInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } if(vecUpdateInfo.empty()) { return false; } bool isSuccess = true; for(const auto& it : vecUpdateInfo) { nJson json0; json0["opName"] = "SPSS_UpdateToCamerInfo"; nJson json1; json1["camerID"] = it.DeviceID; json1["camerName"] = it.DeviceName; json1["camerIP"] = it.DeviceIP; json1["camerPort"] = it.DevicePort; json1["camerUser"] = it.UserAccount; json1["camerPwd"] = it.UserPassword; json1["camerType"] = it.DeviceType; json1["camerSerial"] = it.DeviceSerial; json1["camerChannel"] = nullptr; json1["camerUrl"] = nullptr; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"更新设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"更新ID {} 信息到 CamerInfo 成功!", it.DeviceID); } return isSuccess; } /* 删除设备信息 */ bool ToEQMDataBase::deleteDeviceInfo(std::vector& vecDeleteInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } if(vecDeleteInfo.empty()) { return false; } bool isSuccess = true; for(const auto& it : vecDeleteInfo) { nJson json0; json0["opName"] = "SPSS_DeleteFromCamerInfo"; nJson json1; json1["camerID"] = it.DeviceID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"删除数据 {} 到 CamerInfo 成功!", it.DeviceID); } return isSuccess; } /* 从EQM获取CamerInfo信息 */ bool ToEQMDataBase::getDeviceInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } vecInfo.clear(); nJson json0; json0["opName"] = "SPSS_SelectFromCamerInfo"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取CamerInfo失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } /* 解析信息 */ try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取CamerInfo失败"); return false; } nJson result = json1["result"]; if(result.empty()) { return false; } for(const auto& it : result) { // SPDLOG_LOGGER_DEBUG(m_logger,"camerID:{}",it["camerId"].get()); DeviceInfo info; info.DeviceID = it["camerId"].get(); info.DeviceName = it["camerName"].is_null() ? "" : it["camerName"].get(); info.DeviceIP = it["camerIp"].is_null() ? "" : it["camerIp"].get(); info.DevicePort = it["camerPort"].is_null() ? 0 : it["camerPort"].get(); info.UserAccount = it["camerUsr"].is_null() ? "" : it["camerUsr"].get(); info.UserPassword = it["camerPwd"].is_null() ? "" : it["camerPwd"].get(); info.DeviceType = it["camerType"].is_null() ? "" : it["camerType"].get(); info.DeviceSerial = it["camerSerial"].is_null() ? "" : it["camerSerial"].get(); vecInfo.push_back(info); } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析CamerInfo数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } catch (const nJson::type_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析CamerInfo数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } return true; } /* 插入设备和算法关联信息 */ bool ToEQMDataBase::insertDeviceAlgorithmInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } /* 插入信息到tActionCamer表 */ bool isSuccess = true; for(const auto& it0 : vecInfo) { for(const auto& it1 : it0.vecAlgorithmInfo) { nJson json0; json0["opName"] = "SPSS_InsertToActionCamer"; nJson json1; json1["actionID"] = it1.ActionID; json1["camerID"] = it0.DeviceID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"插入DeviceID {} 和 ActionID {} 到 ActionCamer 成功!", it0.DeviceID, it1.ActionID); } } return true; } /* 更新设备和算法关联表 */ bool ToEQMDataBase::updateDeviceAlgorithmInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } /* 更新之前先删除相关的信息 */ for(const auto& it : vecInfo) { nJson json0; json0["opName"] = "SPSS_DeleteFromActionCamer"; nJson json1; json1["camerID"] = it.DeviceID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); // return false; } SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除DeviceID {} 成功!", it.DeviceID); } /* 插入信息到tActionCamer表 */ bool isSuccess = true; for(const auto& it0 : vecInfo) { for(const auto& it1 : it0.vecAlgorithmInfo) { nJson json0; json0["opName"] = "SPSS_InsertToActionCamer"; nJson json1; json1["actionID"] = it1.ActionID; json1["camerID"] = it0.DeviceID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"插入DeviceID {} ActionID {} 到 ActionCamer 成功!", it0.DeviceID, it1.ActionID); } } return isSuccess; } /* 删除设备和算法关联表 */ bool ToEQMDataBase::deleteDeviceAlgorithmInfo(std::vector& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } bool isSuccess = true; /* 更新之前先删除相关的信息 */ for(const auto& it : vecInfo) { nJson json0; json0["opName"] = "SPSS_DeleteFromActionCamer"; nJson json1; json1["camerID"] = it.DeviceID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); // return false; isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除DeviceID {} 成功!", it.DeviceID); } return isSuccess; } /* 删除设备和算法关联表 */ bool ToEQMDataBase::deleteDeviceAlgorithmInfo(std::list& vecID) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } bool isSuccess = true; /* 更新之前先删除相关的信息 */ for(const auto& it : vecID) { nJson json0; json0["opName"] = "SPSS_DeleteFromActionCamer"; nJson json1; json1["camerID"] = it; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); // return false; isSuccess = false; } SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除DeviceID {} 成功!", it); } return isSuccess; } /* 获取设备和算法信息关联表,需要先从EQM数据库中获取到设备信息 */ bool ToEQMDataBase::getDeviceAlgorithmInfo(std::vector& vecInfo, std::list& listDevIDDelete) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } if(vecInfo.empty()) { SPDLOG_LOGGER_WARN(m_logger,"Device info is empty"); return false; } listDevIDDelete.clear(); nJson json0; json0["opName"] = "SPSS_SelectFromActionCamer"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取ActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } /* 设备和算法关联信息容器 */ std::vector vecNewInfo; /* 解析信息 */ try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取ActionCamer失败"); return false; } nJson result = json1["result"]; if(result.empty()) { return false; } /* 取出所有的设备算法信息 */ for(const auto& it : result) { DeviceAlgorithmInfo info; info.DeviceID = it["camerId"].get(); info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get(); info.ActionName = it["actionName"].is_null() ? "" : it["actionName"].get(); info.ActionTaskID = it["actionTaskid"].is_null() ? 0 : it["actionTaskid"].get(); vecNewInfo.push_back(info); } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } catch (const nJson::type_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } /* 根据缓存中的设备ID取出关联的算法 */ for(auto& it0 : vecInfo) { for(auto& it1 : vecNewInfo) { /* 对比设备ID */ if(it0.DeviceID == it1.DeviceID) { AlgorithmInfo info; info.ActionID = it1.ActionID; info.ActionName = it1.ActionName; info.ActionTaskID = it1.ActionTaskID; it0.vecAlgorithmInfo.push_back(info); } } } /* 取出关联表中已经消失的设备ID,在本轮循环中删除 */ for(const auto& it : vecNewInfo) { bool isExist = false; for(const auto& it0 : vecInfo) { if(it.DeviceID == it0.DeviceID) { isExist = true; break; } } if(!isExist) { /* 检查是否重复,一个ID只需要记录一次 */ if(std::find(listDevIDDelete.begin(), listDevIDDelete.end(), it.DeviceID) == listDevIDDelete.end()) { listDevIDDelete.push_back(it.DeviceID); } } } return true; } /* 获取设备和算法关联信息,包括频率信息,房间信息,重载版,只获取关联关系 */ bool ToEQMDataBase::getActionInfo(ListActionInfo& listInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } listInfo.clear(); nJson json0; json0["opName"] = "SPSS_SelectFromActionInfo"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取ActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } /* 解析信息 */ try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取ActionCamer失败"); return false; } nJson result = json1["result"]; if(result.empty()) { return false; } /* 取出所有的设备算法信息 */ for(const auto& it : result) { ActionInfo info; info.CameraID = it["camerId"].is_null() ? -1 : it["camerId"].get(); info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get(); info.RoomID = it["roomId"].is_null() ? -1 : it["roomId"].get(); info.ChannelID = it["chnid"].is_null() ? -1 : it["chnid"].get(); info.RoomType = it["rtype"].is_null() ? -1 : it["rtype"].get(); info.strRoomName = it["rname"].is_null() ? "" : it["rname"].get(); listInfo.insertActionInfo(&info); } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } catch (const nJson::type_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } return true; } /* 获取摄像机和房间关联信息 */ bool ToEQMDataBase::getRoomCameraInfo(std::list& vecInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } vecInfo.clear(); nJson json0; json0["opName"] = "SPSS_SelectRoomCamer"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取RoomCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取RoomCamer失败"); return false; } nJson result = json1["result"]; if(result.empty()) { return false; } for(const auto& it : result) { auto roomID = it["roomId"].get(); auto cameraID = it["camerId"].is_null() ? -1 : it["camerId"].get(); /* 先检查RoomID是否已经在列表中了 */ bool isExist = false; for(auto& it0 : vecInfo) { if(it0.RoomID == roomID) { it0.listCameraID.push_back(cameraID); isExist = true; break; } } /* 没有找到RoomID,创建一个新的 */ if(!isExist) { RoomCameraInfo info; info.RoomID = roomID; info.listCameraID.push_back(cameraID); } } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } catch (const nJson::type_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } return true; } /* 写入报警信息 */ bool ToEQMDataBase::insertAlarmInfo(const AlarmInfo& alarmInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } /* 判断是否有图片,没有图片就取消报警 */ if(alarmInfo.ImageInfo.empty()) { SPDLOG_LOGGER_WARN(m_logger, "× 取消新增报警信息,因为没有图片,频道[{}],房间[{}],摄像头[{}],{},{},有{}个区域,有{}个人脸", alarmInfo.ChannelID, alarmInfo.RoomID, alarmInfo.DeviceID, alarmInfo.ActionDes, alarmInfo.ImageInfo, alarmInfo.listBbox.size(), alarmInfo.vecPersonInfo.size()); return false; } /* 拼接Bbox */ std::string strBbox; for(const auto& it : alarmInfo.listBbox) { strBbox += it; strBbox += "|"; } /* 去掉最后一个“|” */ strBbox.pop_back(); nJson json0; json0["opName"] = "SPSS_InsertToAlarmInfo"; nJson json1; json1["AlarmID"] = alarmInfo.AlarmID; json1["StartTime"] = alarmInfo.StartTime; json1["CreateTime"] = alarmInfo.EventTime; json1["EndTime"] = alarmInfo.EndTime; json1["bBox"] = strBbox; json1["PicUrl"] = alarmInfo.PicUrl; json1["AppID"] = alarmInfo.AppID; json1["ActionID"] = alarmInfo.ActionID; json1["ActionDes"] = alarmInfo.ActionDes; json1["CamerID"] = alarmInfo.DeviceID; json1["RoomID"] = alarmInfo.RoomID; json1["chnID"] = alarmInfo.ChannelID; json1["Stat"] = alarmInfo.State; json0["FaceIDList"] = alarmInfo.FaceIDList; json0["FaceNameList"] = alarmInfo.FaceNameList; json0["OnWork"] = alarmInfo.OnWork; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_WARN(m_logger,"插入报警信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } SPDLOG_LOGGER_DEBUG(m_logger,"插入报警信息成功!"); return true; } /* 更新报警结束时间 */ bool ToEQMDataBase::updateAlarmEndTime(const AlarmInfo& alarmInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } nJson json0; json0["opName"] = "SPSS_UpdateAlarmEndTime"; nJson json1; json1["EndTime"] = alarmInfo.EndTime; json1["ChannelID"] = alarmInfo.ChannelID; json1["RoomID"] = alarmInfo.RoomID; json1["CamerID"] = alarmInfo.DeviceID; json1["ActionID"] = alarmInfo.ActionID; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_WARN(m_logger,"更新报警结束时间失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } return true; } /* 获取报警规则表 */ bool ToEQMDataBase::getPersonCountRuleInfo(std::vector& vecInfo) { nJson json0; json0["opName"] = "SPSS_GetPersonCountRule"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取AlarmRule失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取tAlarmRule失败"); return false; } nJson result = json1["result"]; if(result.empty()) { return false; } vecInfo.clear(); for(const auto& it : result) { PersonCountRuleInfo info; info.ChannelID = it["chnId"].get(); info.RuleName = it["periodName"].get(); QString strStart = QString::fromStdString(it["startTime"].get()); info.StartTime = QDateTime::fromString(strStart, "yyyy-MM-ss hh:mm:ss"); QString strEnd = QString::fromStdString(it["endTime"].get()); info.EndTime = QDateTime::fromString(strEnd, "yyyy-MM-ss hh:mm:ss"); info.week = it["week"].get(); info.RuleType = it["type"].get(); info.RuleName = it["ruleName"].get(); info.LiveMinEnable = it["liveMinEnable"].get(); info.LiveMaxEnable = it["liveMaxEnable"].get(); info.DicMinEnable = it["dicMinEnable"].get(); info.DicMaxEnable = it["dicMaxEnable"].get(); info.LiveDicMinEnable = it["liveDicMinEnable"].get(); info.LiveDicMaxEnable = it["liveDicMaxEnable"].get(); info.LiveMin = it["liveMin"].get(); info.LiveMax = it["liveMax"].get(); info.DicMin = it["dicMin"].get(); info.DicMax = it["dicMax"].get(); info.LiveDicMin = it["liveDicMin"].get(); info.LiveDicMax = it["liveDicMax"].get(); vecInfo.push_back(info); } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析AlarmRule数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } catch(const nJson::type_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析AlarmRule数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } return true; } /* 获取报警时段,也同时获取报警的应用信息 */ bool ToEQMDataBase::getAlarmAppInfo(std::list& listInfo) { nJson json0; json0["opName"] = "SPSS_SelectPeriod"; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_DEBUG(m_logger,"获取AlarmApp失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } try { nJson json1 = nJson::parse(strRet.toStdString()); int retCode = json1["code"].get(); if(retCode != 0) { SPDLOG_LOGGER_ERROR(m_logger,"获取tAlarmApp失败"); return false; } nJson result = json1["result"]; if(result.empty()) { return false; } listInfo.clear(); for(const auto& it : result) { AppAndTimeInfo info; info.ChannelID = it["chnId"].get(); info.AppType = it["appType"].get(); QString strStart = QString::fromStdString(it["startTime"].get()); QString strEnd = QString::fromStdString(it["endTime"].get()); info.StartTime = QDateTime::fromString(strStart, "yyyy-MM-ss hh:mm:ss"); info.EndTime = QDateTime::fromString(strEnd, "yyyy-MM-ss hh:mm:ss"); listInfo.push_back(info); } } catch (const nJson::parse_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析AlarmApp数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } catch(const nJson::type_error& e) { SPDLOG_LOGGER_ERROR(m_logger,"解析AlarmApp数据失败:{}, 错误ID:{}",e.what(), e.id); return false; } return true; } /* 写入在岗信息 */ bool ToEQMDataBase::insertOnWorkInfo(const RoomFaceInfo& onWorkInfo) { if(m_httpApi == nullptr) { SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr"); return false; } if(onWorkInfo.listPersonInfo.empty()) { return false; } /* 拼接人脸ID和人脸名称 */ std::string strFaceID; std::string strFaceName; for(const auto& it : onWorkInfo.listPersonInfo) { strFaceID += it.PersonID + ";"; strFaceName += it.PersonName + ";"; } /* 去掉最后的“;” */ strFaceID = strFaceID.substr(0, strFaceID.size() - 1); strFaceName = strFaceName.substr(0, strFaceName.size() - 1); nJson json0; json0["opName"] = "SPSS_InsertToOnWork"; nJson json1; json1["nChID"] = onWorkInfo.ChannelID; json1["CamerId"] = onWorkInfo.CameraID; json1["FaceIdList"] = strFaceID; json1["FaceNameList"] = strFaceName; json1["StartTime"] = onWorkInfo.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(); json1["EndTime"] = onWorkInfo.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString(); json1["MaxNumber"] = onWorkInfo.MaxNum; json1["MinNumber"] = onWorkInfo.MinNum; json0["paramList"] = json1; QString strCmd = QString::fromStdString(json0.dump()); QString strRet; auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet); if(ret < 0) { SPDLOG_LOGGER_WARN(m_logger,"插入在岗信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString()); return false; } SPDLOG_LOGGER_DEBUG(m_logger,"插入在岗信息成功!"); return true; }