Browse Source

V0.1.7
1-完善了部分获取基础信息的线程

Apple 7 months ago
parent
commit
081fd28f1a

+ 5 - 2
SecurePlayAuxServer/GlobalInfo.h

@@ -16,18 +16,21 @@ using nJson = nlohmann::json;
 /* 算法相关信息 */
 struct AlgorithmInfo
 {
+    int PKID;                   /* 主键ID */
+    int ActionTaskID;           /* 算法任务ID */
     std::string ActionID;       /* 算法ID */
     std::string ActionName;     /* 算法名称 */
-    int ActionTaskID;           /* 算法任务ID */
+    
 
     AlgorithmInfo() = default;
     AlgorithmInfo(const AlgorithmInfo& other)
-        : ActionID(other.ActionID), ActionName(other.ActionName), ActionTaskID(other.ActionTaskID) {}
+        : PKID(other.PKID), ActionID(other.ActionID), ActionName(other.ActionName), ActionTaskID(other.ActionTaskID) {}
     AlgorithmInfo& operator=(const AlgorithmInfo& other) {
         if (this != &other) {
             ActionID = other.ActionID;
             ActionName = other.ActionName;
             ActionTaskID = other.ActionTaskID;
+            PKID = other.PKID;
         }
         return *this;
     }

+ 27 - 9
SecurePlayAuxServer/SPAServer.cpp

@@ -69,20 +69,26 @@ void SPAServer::fromSuperBrainThread()
             SPDLOG_LOGGER_DEBUG(m_logger, "删除算法信息");
             m_toEQMDataBase.deleteAlgorithmInfo(vecAlgDelete);
         }
+        /* 更新一次表格数据缓存 */
+        m_toEQMDataBase.getAlgorithmInfo(m_vecEqmAlgInfo);
         if(vecAlgUpdate.size() > 0)
         {
             SPDLOG_LOGGER_DEBUG(m_logger, "写入算法信息");
-            m_toEQMDataBase.writeAlgorithmInfo(vecAlgUpdate);
+            m_toEQMDataBase.writeAlgorithmInfo(vecAlgUpdate, m_vecEqmAlgInfo);
+        }
+
+        
+        /* 再读取数据库,刷新本地存储 */
+        if(vecAlgUpdate.size() > 0 || vecAlgDelete.size() > 0)
+        {
+            m_toEQMDataBase.getAlgorithmInfo(m_vecEqmAlgInfo);
         }
 
         vecAlgInfo.clear();
         vecDevInfo.clear();
         vecAlgUpdate.clear();
         vecAlgDelete.clear();
-        /* 再读取数据库,刷新本地存储 */
-        m_toEQMDataBase.getAlgorithmInfo(m_vecEqmAlgInfo);
-
-        std::this_thread::sleep_for(std::chrono::seconds(5));
+        std::this_thread::sleep_for(std::chrono::seconds(10));
     }
 }
 
@@ -94,14 +100,20 @@ void SPAServer::compareAlgorithmInfo(const std::vector<AlgorithmInfo>& vecNewInf
     {
         for(const auto& it : vecNewInfo)
         {
+            bool isExist = false;
             for(const auto& it0 : m_vecEqmAlgInfo)
             {
-                if(it.ActionID != it0.ActionID)
+                /* 如果存在就退出循环 */
+                if(it.ActionID == it0.ActionID)
                 {
-                    vecAlgUpdate.push_back(it);
+                    isExist = true;
                     break;
                 }
             }
+            if(!isExist)
+            {
+                vecAlgUpdate.push_back(it);
+            }
         }
     }else {
         vecAlgUpdate = vecNewInfo;
@@ -109,16 +121,22 @@ void SPAServer::compareAlgorithmInfo(const std::vector<AlgorithmInfo>& vecNewInf
     /* 取出要删除的,如果新的数据是0,那么全部都要删除 */
     if(vecNewInfo.size() > 0)
     {
+        bool isExist = false;
         for(const auto& it : m_vecEqmAlgInfo)
         {
+            isExist = false;
             for(const auto& it0 : vecNewInfo)
             {
-                if(it.ActionID != it0.ActionID)
+                if(it.ActionID == it0.ActionID)
                 {
-                    vecAlgDelete.push_back(it);
+                    isExist = true;
                     break;
                 }
             }
+            if(!isExist)
+            {
+                vecAlgDelete.push_back(it);
+            }
         }
     }else {
         vecAlgDelete = m_vecEqmAlgInfo;

+ 15 - 2
SecurePlayAuxServer/communication/ToEQMDataBase.cpp

@@ -63,14 +63,27 @@ bool ToEQMDataBase::initWebApi(const QString& url, const QString& serverIP, cons
 }
 
 
-/* 写入算法信息,写入tAction表 */
-bool ToEQMDataBase::writeAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo)
+/**
+ * @brief 写入算法信息,写入tAction表
+ * 
+ * @param vecInfo 要写入的表格数据
+ * @param vecNowInfo 现有的标配个数据,主要是为了重复利用已经删除的自增主键而传入的
+ * @return true 
+ * @return false 
+ */
+bool ToEQMDataBase::writeAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo, std::vector<AlgorithmInfo>& vecNowInfo)
 {
     if(m_httpApi == nullptr)
     {
         SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
         return false;
     }
+    /* 取出可用的自增主键,从0开始计算 */
+    std::list<int> listPKID;
+    for(const auto& it : vecNowInfo)
+    {
+        listPKID.push_back(it.PKID);
+    }
 
     for(const auto& it : vecInfo)
     {

+ 1 - 1
SecurePlayAuxServer/communication/ToEQMDataBase.h

@@ -14,7 +14,7 @@ public:
     /* 初始化WebAPI */
     bool initWebApi(const QString& url,const QString& serverIP,const QString& serID);
     /* 写入算法信息,写入tAction表 */
-    bool writeAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo);
+    bool writeAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo, std::vector<AlgorithmInfo>& vecNowInfo);
     /* 删除算法信息 */
     bool deleteAlgorithmInfo(std::vector<AlgorithmInfo>& vecDeleteInfo);
     /* 获取tAction数据 */