|
@@ -50,19 +50,40 @@ void SPAServer::fromSuperBrainThread()
|
|
|
std::vector<AlgorithmInfo> vecAlgNewInfo;
|
|
|
std::vector<DeviceInfo> vecDevNewInfo;
|
|
|
|
|
|
- /* 从EQM数据库中读取到数据信息到内存中,后续对比需要 */
|
|
|
- m_toEQMDataBase.getAlgorithmInfo(m_vecEqmAlgInfo);
|
|
|
- m_toEQMDataBase.getDeviceInfo(m_vecEqmDevInfo);
|
|
|
- m_toEQMDataBase.getDeviceAlgorithmInfo(m_vecEqmDevInfo);
|
|
|
+ /* 测试读取Redis信息 */
|
|
|
+ m_fromRedis.setRedisIPAndPort("172.16.36.80", 32222);
|
|
|
+ m_fromRedis.setRedisPassword("Ff1z@TOFr^iwd%Ra");
|
|
|
+ if(m_fromRedis.connectRedis())
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "连接Redis成功");
|
|
|
+ }else {
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "连接Redis失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ std::string strKey = "117:OD210_026_005246_001-IZRTKyEx";
|
|
|
+ std::string strRetValue;
|
|
|
+ while (m_threadRunning)
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "读取Redis信息");
|
|
|
+ m_fromRedis.getRedisString(strKey, strRetValue);
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "Redis Value:\n{}", strRetValue);
|
|
|
+
|
|
|
+ std::this_thread::sleep_for(std::chrono::seconds(1));
|
|
|
+ }
|
|
|
+
|
|
|
+ return;
|
|
|
+
|
|
|
/* 获取一次token,后续失效了再获取 */
|
|
|
m_fromSuperBrain.getToken();
|
|
|
while (m_threadRunning)
|
|
|
{
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "刷新算法和设备信息");
|
|
|
- /* 先更新数据库的信息,防止从其他地方并更改了数据库,这里没有刷新本地缓存 */
|
|
|
+ /* 先更新数据库的信息,防止从其他地方更改了数据库,这里没有刷新本地缓存 */
|
|
|
m_toEQMDataBase.getAlgorithmInfo(m_vecEqmAlgInfo);
|
|
|
m_toEQMDataBase.getDeviceInfo(m_vecEqmDevInfo);
|
|
|
- /* 获取基础信息 */
|
|
|
+ m_toEQMDataBase.getDeviceAlgorithmInfo(m_vecEqmDevInfo, m_listDevIDDelete);
|
|
|
+ /* 从超脑获取基础信息 */
|
|
|
m_fromSuperBrain.getTaskTypeList(vecAlgNewInfo);
|
|
|
m_fromSuperBrain.getDeviceList(vecDevNewInfo);
|
|
|
|
|
@@ -118,8 +139,9 @@ bool SPAServer::processDeviceInfo(std::vector<DeviceInfo> vecNewDevInfo)
|
|
|
std::vector<DeviceInfo> vecDevUpdate;
|
|
|
std::vector<DeviceInfo> vecDevDelete;
|
|
|
|
|
|
- /**************************************************************************/
|
|
|
- /* 这里只对比设备信息,不对比设备的算法信息,算法信息在下面单独对比 */
|
|
|
+ /*-------------------------------------------------------------------------
|
|
|
+ ****** 这里只对比设备信息,不对比设备的算法信息,算法信息在下面单独对比 *******
|
|
|
+ *------------------------------------------------------------------------*/
|
|
|
|
|
|
/* 如果本地缓存没有数据,那么就全部插入 */
|
|
|
if(m_vecEqmDevInfo.size() > 0)
|
|
@@ -198,8 +220,9 @@ bool SPAServer::processDeviceInfo(std::vector<DeviceInfo> vecNewDevInfo)
|
|
|
isUpdate = true;
|
|
|
}
|
|
|
|
|
|
- /**************************************************************************/
|
|
|
- /* 处理设备和算子关联的表格,单独对比设备的算法信息 */
|
|
|
+ /*-------------------------------------------------------------------------
|
|
|
+ ************* 处理设备和算子关联的表格,单独对比设备的算法信息 *************
|
|
|
+ *------------------------------------------------------------------------*/
|
|
|
|
|
|
/* 插入新的设备信息 */
|
|
|
if(vecDevInsert.size() > 0)
|
|
@@ -208,31 +231,24 @@ bool SPAServer::processDeviceInfo(std::vector<DeviceInfo> vecNewDevInfo)
|
|
|
m_toEQMDataBase.insertDeviceAlgorithmInfo(vecDevInsert);
|
|
|
isUpdate = true;
|
|
|
}
|
|
|
- /* 删除消失的设备信息 */
|
|
|
- if(vecDevDelete.size() > 0)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_DEBUG(m_logger, "删除设备和算法关联表");
|
|
|
- m_toEQMDataBase.deleteDeviceAlgorithmInfo(vecDevDelete);
|
|
|
- isUpdate = true;
|
|
|
- }
|
|
|
|
|
|
vecDevUpdate.clear();
|
|
|
- /* 取出需要更新的设备 */
|
|
|
- for(const auto& it0 : vecNewDevInfo)
|
|
|
+ /* 对比现有的设备是否需要更新算法 */
|
|
|
+ compareDeviceAlgorithmInfo(vecNewDevInfo, vecDevUpdate);
|
|
|
+ if(vecDevUpdate.size() > 0)
|
|
|
{
|
|
|
- /* 取出ID相等的设备 */
|
|
|
- for(const auto& it1 : m_vecEqmDevInfo)
|
|
|
- {
|
|
|
- if(!it0.isEqualAlgorithmInfo(it1))
|
|
|
- {
|
|
|
- vecDevUpdate.push_back(it0);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "更新设备和算法关联表, 更新设备数目:{}", vecDevUpdate.size());
|
|
|
+ m_toEQMDataBase.updateDeviceAlgorithmInfo(vecDevUpdate);
|
|
|
}
|
|
|
- SPDLOG_LOGGER_DEBUG(m_logger, "更新设备和算法关联表, 更新设备数目:{}", vecDevUpdate.size());
|
|
|
|
|
|
+
|
|
|
+ /* 删除tActionCamer表中消失的设备信息 */
|
|
|
+ if(m_listDevIDDelete.size() > 0)
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "删除消失的设备关联的算法");
|
|
|
+ m_toEQMDataBase.deleteDeviceAlgorithmInfo(m_listDevIDDelete);
|
|
|
+ isUpdate = true;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
return isUpdate;
|
|
@@ -290,5 +306,62 @@ void SPAServer::compareAlgorithmInfo(const std::vector<AlgorithmInfo>& vecNewInf
|
|
|
}
|
|
|
|
|
|
|
|
|
+/**
|
|
|
+ * @brief 对比设备和算法关联表是否需要更新
|
|
|
+ * 对比规则:
|
|
|
+ * 1、这里只对比已有的设备ID,需要删除的ID在获取到tActionCamer表是就已经取出来了
|
|
|
+ * 2、如果设备ID相等,那么进一步对比算法信息是否相等
|
|
|
+ * 3、如果设备ID相等,但是算法信息数目不相等,那么直接加入更新列表
|
|
|
+ * 4、如果设备ID相等,算法信息数目相等,进一步对比算法信息
|
|
|
+ *
|
|
|
+ * @param vecNewInfo
|
|
|
+ * @param vecDevUpdate
|
|
|
+ */
|
|
|
+void SPAServer::compareDeviceAlgorithmInfo(const std::vector<DeviceInfo>& vecNewInfo, std::vector<DeviceInfo>& vecDevUpdate)
|
|
|
+{
|
|
|
+ vecDevUpdate.clear();
|
|
|
+ for(const auto& it0 : vecNewInfo)
|
|
|
+ {
|
|
|
+ for(const auto& it1 : m_vecEqmDevInfo)
|
|
|
+ {
|
|
|
+ if(it0.DeviceID == it1.DeviceID)
|
|
|
+ {
|
|
|
+ /* 设备的算法信息数目不相等,直接加入更新列表 */
|
|
|
+ if(it0.vecAlgorithmInfo.size() != it1.vecAlgorithmInfo.size())
|
|
|
+ {
|
|
|
+ vecDevUpdate.push_back(it0);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /* 设备的算法信息数目相等,进一步对比算法信息 */
|
|
|
+ bool isEquality = true;
|
|
|
+ for(const auto& it2 : it0.vecAlgorithmInfo)
|
|
|
+ {
|
|
|
+ bool isEq2 = false;
|
|
|
+ for(const auto& it3 : it1.vecAlgorithmInfo)
|
|
|
+ {
|
|
|
+ /* 这里只对比算法ID */
|
|
|
+ if(it2.ActionID != it3.ActionID)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }else {
|
|
|
+ isEq2 = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!isEq2)
|
|
|
+ {
|
|
|
+ isEquality = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!isEquality)
|
|
|
+ {
|
|
|
+ vecDevUpdate.push_back(it0);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
|