فهرست منبع

V0.5.7
1、添加了自动删除一年前任务的功能

Apple 1 ماه پیش
والد
کامیت
d1fc8178fe

+ 1 - 1
SQL/SecurePlay.sql

@@ -1,4 +1,4 @@
--- Active: 1725354130110@@192.1.3.105@1433@EQM_BJ
+-- Active: 1746948908373@@192.1.3.105@1433@EQM_BJ
 
 #算子信息表
 SELECT *

+ 11 - 1
SQL/SecurePlay.sqlbook

@@ -54,6 +54,7 @@ VALUES (:actionID, :cameraID);
 DELETE FROM "tActionCamer"
 WHERE "CamerId" = :CameraID;
 -- SQLBook: Code
+-- Active: 1746948908373@@192.1.3.105@1433@EQM_BJ
 #摄像头信息表
 SELECT *
 FROM "tCamerinfo";
@@ -74,6 +75,9 @@ WHERE "CamerId" = :camerID;
 #根据CamerId删除数据
 DELETE FROM "tCamerinfo"
 WHERE "CamerId" = :camerID;
+
+#删除所有的数据
+DELETE FROM "tCamerinfo";
 -- SQLBook: Code
 #直播间摄像头关联表
 SELECT *
@@ -97,6 +101,7 @@ ON "tRoomCamer"."RoomId" = "tRoomInfo"."PKID";
 INSERT INTO "tRoomCamer" ("RoomId","CamerId")
 VALUES (:roomID, :camerID);
 -- SQLBook: Code
+-- Active: 1746948908373@@192.1.3.105@1433@EQM_BJ
 #报警信息表
 SELECT *
 FROM "tAlarmInfo";
@@ -118,7 +123,7 @@ VALUES(@alarmID, @startTime, @createTime, @endTime, @bbox, @picUrl, @appID, @act
 
 #插入报警信息示例
 INSERT INTO "tAlarmInfo" ("AlarmId","StartTime","CreateTime","EndTime","bBox","PicUrl","Appid","ActionId","ActionDes","CamerId","RoomId","chnID","State","FaceIdList","FaceNameList","OnWork")
-VALUES('0', '2024-10-08 14:00:00', '2024-10-08 14:00:00','','112,112,112,112','PicURL', '1', '2', '报警测试', '3', '4', '5', '6', 'FaceIDList','FaceNameList', '1');
+VALUES('0', '2024-5-08 14:00:00', '2024-10-08 14:00:00','','112,112,112,112','PicURL', '1', '2', '报警测试', '3', '4', '5', '6', 'FaceIDList','FaceNameList', '1');
 SELECT @@IDENTITY AS PKID;
 SELECT SCOPE_IDENTITY() AS PKID;
 
@@ -168,6 +173,11 @@ UPDATE "tAlarmInfo"
 SET "EndTime" = GetDate()
 WHERE "chnID" = @channelID AND "Appid" = @appID;
 
+
+#根据开始时间删除一年前的信息
+DELETE FROM "tAlarmInfo"
+WHERE "StartTime" < DATEADD(YEAR, -1, GETDATE());
+
 -- SQLBook: Code
 #报警规则表
 SELECT *

+ 3 - 1
SecurePlayAuxServer/Application/FuncBase.cpp

@@ -248,7 +248,9 @@ bool FuncBase::isInDetectTime(const DetectPeriodInfo& periodInfo)
         dectectTime += fmt::format("按天检测 [{} - {}]", periodInfo.listWeekTime.front().StartTime.toString("hh:mm:ss").toStdString(), 
                                     periodInfo.listWeekTime.front().EndTime.toString("hh:mm:ss").toStdString());
     }
-    SPDLOG_LOGGER_DEBUG(m_logger, "{} 不在检测时间段内, {}", m_baseLog, dectectTime);
+    // SPDLOG_LOGGER_DEBUG(m_logger, "{} 不在检测时间段内, {}", m_baseLog, dectectTime);
+    SPDLOG_LOGGER_DEBUG(m_logger, "{} 不在检测时间段内", m_baseLog);
+
 
     return false;
 }

+ 1 - 1
SecurePlayAuxServer/Application/FuncIllegalInvasion.cpp

@@ -203,7 +203,7 @@ void FuncIllegalInvasion::task()
 
     while (GThreadInfo.getRunning())
     {   
-        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS));
+        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS()));
 
         /* 更新线程信息 */
         GThreadInfo.updateFuncInfo(m_funcThreadInfo);

+ 1 - 1
SecurePlayAuxServer/Application/FuncOnAndOffWork.cpp

@@ -256,7 +256,7 @@ void FuncOnAndOffWork::task()
     while(GThreadInfo.getRunning())
     {
         /* 休眠一段时间 */
-        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS));
+        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS()));
         
         /* 判断是否需要退出 */
         if(m_funcThreadInfo.RunState == RunTimeState::RUN_STATE_STOP)

+ 1 - 1
SecurePlayAuxServer/Application/FuncOrdinary.cpp

@@ -36,7 +36,7 @@ void FuncOrdinary::task()
     while (GThreadInfo.getRunning())
     {
         /* 休眠设置的时间 */
-        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS));
+        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS()));
 
         /* 从全局的信息块中更新功能信息,如是否需要退出线程,主要是更新摄像机关联的算法信息 */
         GThreadInfo.updateFuncInfo(m_funcThreadInfo);

+ 1 - 1
SecurePlayAuxServer/Application/FuncPersonOnWork.cpp

@@ -38,7 +38,7 @@ void FuncPersonOnWork::task()
     
     while (GThreadInfo.getRunning())
     {   
-        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS));
+        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS()));
         
         /* 更新线程信息 */
         GThreadInfo.updateFuncInfo(m_funcThreadInfo);

+ 1 - 1
SecurePlayAuxServer/Application/FuncRegionalPerson.cpp

@@ -184,7 +184,7 @@ void FuncRegionalPersonCount::task()
     }
     while (m_bRunning)
     {
-        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS));
+        std::this_thread::sleep_for(std::chrono::milliseconds(GVariable.ThreadSleepMS()));
         /* 更新线程信息,并判断是否需要退出 */
         GThreadInfo.updateFuncInfo(m_funcThreadInfo);
         if( (m_funcThreadInfo.appFunction == AppFunction::APP_NONE) ||

+ 14 - 10
SecurePlayAuxServer/GlobalInfo/GlobalConfig.cpp

@@ -9,7 +9,7 @@
 
 GlobalVariable::GlobalVariable()
 {
-    ThreadSleepMS = 1000;
+    m_threadSleepMS = 1000;
 
     m_actFaceIdentify.clear();
     m_actPersonCount.clear();
@@ -226,19 +226,21 @@ bool GlobalConfig::readAppConfig(const QString& strConfigFile)
 
     settings.beginGroup("System");
 
-    GVariable.AppUpdateOnWorkTimeInterval_Time = settings.value("WorkOnInfoSecond", 600).toInt();  /* 更新在岗信息的时间间隔 */
-    GVariable.AppPeopleOnWork_Time = settings.value("APPPEPOLEONWORK", 300).toInt();         /* 离岗时间 */
-    GVariable.AppContraband_Time = settings.value("APPBADTHING", 50).toInt();                 /* 违禁物品出现的时间 */
-    GVariable.AppBadMan_Time = settings.value("APPBADMAN", 50).toInt();                     /* 非法入侵 */
-    GVariable.AppTired_Time = settings.value("APPTIRED", 50).toInt();                       /* 疲劳检测时间 */
-    GVariable.AppPeopleCount_LessTime = settings.value("APPPEPOLECONT", 50).toInt();    /* 人员聚集时间 */
-    GVariable.AppPlayPhone = settings.value("APPPLAYPHONE", 50).toInt();               /* 玩手机识别 */
-    GVariable.AppMouse = settings.value("APPMOUSE", 50).toInt();                       /* 手势识别 */
-    GVariable.AppMask = settings.value("APPMASK", 5).toInt();                         /* 戴口罩识别 */
+    GVariable.AppUpdateOnWorkTimeInterval_Time = settings.value("WorkOnInfoSecond", 600).toInt();   /* 更新在岗信息的时间间隔 */
+    GVariable.AppPeopleOnWork_Time = settings.value("APPPEPOLEONWORK", 300).toInt();                /* 离岗时间 */
+    GVariable.AppContraband_Time = settings.value("APPBADTHING", 50).toInt();                       /* 违禁物品出现的时间 */
+    GVariable.AppBadMan_Time = settings.value("APPBADMAN", 50).toInt();                             /* 非法入侵 */
+    GVariable.AppTired_Time = settings.value("APPTIRED", 50).toInt();                               /* 疲劳检测时间 */
+    GVariable.AppPeopleCount_LessTime = settings.value("APPPEPOLECONT", 50).toInt();                /* 人员聚集时间 */
+    GVariable.AppPlayPhone = settings.value("APPPLAYPHONE", 50).toInt();                            /* 玩手机识别 */
+    GVariable.AppMouse = settings.value("APPMOUSE", 50).toInt();                                    /* 手势识别 */
+    GVariable.AppMask = settings.value("APPMASK", 5).toInt();                                       /* 戴口罩识别 */
 
     GVariable.CheckSet = settings.value("CHECKSET", 300).toInt();                       /* 服务端多久检测一次配置 */
     GVariable.EventTimeValid = settings.value("EventTimeValid", 300).toInt();           /* 事件时间有效期 */
 
+    GVariable.m_threadSleepMS = settings.value("FuncThreadSleep", 1000).toInt();        /* 任务线程休眠时间,单位是ms */
+
     settings.endGroup();
 
     return true;
@@ -259,6 +261,8 @@ void GlobalConfig::printAppConfig()
     SPDLOG_INFO("APPMASK:           {}", GVariable.AppMask);
     SPDLOG_INFO("CHECKSET:          {}", GVariable.CheckSet);
     SPDLOG_INFO("EventTimeValid:    {}", GVariable.EventTimeValid);
+    SPDLOG_INFO("---------------------------------------------------------");
+    SPDLOG_INFO("FuncThreadSleep:   {}", GVariable.ThreadSleepMS());
 }
 
 /* 添加通道信息 */

+ 7 - 1
SecurePlayAuxServer/GlobalInfo/GlobalConfig.h

@@ -42,13 +42,16 @@ public:
     int CheckSet;                           /* 服务端多久检测一次配置 */
     int EventTimeValid;                     /* 事件时间有效期 */
 
-    int ThreadSleepMS;                      /* 任务线程休眠时间,单位是ms */
+    
     const int CheckDeviceTime = 20;         /* 从超脑平台检测设备的时间间隔,单位是秒 */
 
     
 
     QReadWriteLock mutexRW;               /* 读写锁 */
 
+    /* 任务线程休眠时间,单位是ms */
+    int ThreadSleepMS() { return m_threadSleepMS; }
+
     /* 人脸识别算法ID */
     std::string ActFaceIdentify() { return m_actFaceIdentify; }
     /* 人员统计算法ID */
@@ -82,6 +85,9 @@ public:
     const QDateTime nullTime = QDateTime::fromString("2000-01-01 00:00:00", "yyyy-MM-dd hh:mm:ss");
 
 private:
+
+    int m_threadSleepMS = 1000;             /* 线程休眠时间,单位是ms */
+
     /* 算法ID,通过这个识别从超脑平台获取到的算法,这个算法ID是全的,带有后缀的 */
     /* 人脸识别算法ID */
     std::string m_actFaceIdentify;

+ 17 - 13
SecurePlayAuxServer/SPAServer.cpp

@@ -196,19 +196,20 @@ bool SPAServer::processDeviceInfo(std::vector<DeviceInfo>& vecNewDevInfo)
      *------------------------------------------------------------------------*/
 
     /* 先自身查重 */
-    for(auto it = m_vecEqmDevInfo.begin(); it != m_vecEqmDevInfo.end(); it++)
-    {
-        for(auto it0 = it + 1; it0 != m_vecEqmDevInfo.end();)
-        {
-            if(it->DeviceID == it0->DeviceID)
-            {
-                SPDLOG_LOGGER_DEBUG(m_logger, "设备ID: {} 重复", it->DeviceID);
-                it0 = m_vecEqmDevInfo.erase(it0);
-            }else {
-                ++it0;
-            }
-        }
-    }
+    // for(auto it = m_vecEqmDevInfo.begin(); it != m_vecEqmDevInfo.end(); it++)
+    // {
+    //     for(auto it0 = it + 1; it0 != m_vecEqmDevInfo.end();)
+    //     {
+    //         if(it->DeviceID == it0->DeviceID)
+    //         {
+    //             SPDLOG_LOGGER_DEBUG(m_logger, "设备ID: {} 重复", it->DeviceID);
+    //             it0 = m_vecEqmDevInfo.erase(it0);
+    //             vecDevDelete.push_back(*it0);
+    //         }else {
+    //             ++it0;
+    //         }
+    //     }
+    // }
 
     /* 如果本地缓存没有数据,那么就全部插入 */
     if(m_vecEqmDevInfo.size() > 0)
@@ -555,6 +556,9 @@ void SPAServer::threadDistribution()
         
         GThreadInfo.unlockRunFAI();
 
+        /* 定期删除一年前的报警数据 */
+        pFromWebAPI->deleteOverOneYearAlarm();
+
         /* 休眠n秒,默认应该是300秒 */
         std::this_thread::sleep_for(std::chrono::seconds(GVariable.CheckSet));
         // std::this_thread::sleep_for(std::chrono::seconds(3));

+ 23 - 0
SecurePlayAuxServer/communication/FromWebAPI.cpp

@@ -1652,6 +1652,29 @@ bool FromWebAPI::clearOnWorkAlarmInfo(const int PKID, const bool onWork, const s
     return true;
 }
 
+/* 删除超过一年的数据 */
+bool FromWebAPI::deleteOverOneYearAlarm()
+{
+    if(m_httpApi == nullptr)
+    {
+        SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
+        return false;
+    }
+    
+    nJson json0;
+    json0["opName"] = "SPSS_DeleteOverOneYearAlarm";
+    QString strCmd = QString::fromStdString(json0.dump());
+    QString strRet;
+    auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
+    if(ret != 0)
+    {
+        SPDLOG_LOGGER_DEBUG(m_logger,"删除超过一年的数据失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
+        return false;
+    }
+
+    return true;
+}
+
 
 
 /* 获取报警规则表 */

+ 2 - 0
SecurePlayAuxServer/communication/FromWebAPI.h

@@ -78,6 +78,8 @@ public:
     bool getMaxAlarmPKID(const int ChannelID, const AppFunction AppID, int& PKID);
     /* 清空在岗离岗报警的在岗人员信息 */
     bool clearOnWorkAlarmInfo(const int PKID, const bool onWork, const std::string actionDes);
+    /* 删除超过一年的数据 */
+    bool deleteOverOneYearAlarm();
 
 
     /* 获取人员计数规则 */