SPAServer.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef SPASERVER_H
  2. #define SPASERVER_H
  3. #include "FromSuperBrain.h"
  4. #include "FromRedis.h"
  5. #include "ToEQMDataBase.h"
  6. /**
  7. * 安播辅助提示系统服务类
  8. * 写入EQM数据库的报警逻辑
  9. *
  10. */
  11. class SPAServer
  12. {
  13. public:
  14. SPAServer();
  15. ~SPAServer();
  16. /* 启动服务 */
  17. void startServer();
  18. private:
  19. /* 从基础平台获取算法信息和设备信息的线程函数 */
  20. void threadFromSuperBrain();
  21. /* 处理算法信息,返回值为true,说明有改变,需要重新读取 */
  22. bool processAlgorithmInfo(std::vector<AlgorithmInfo> vecNewAlgInfo);
  23. /* 处理设备信息,传入新获取到的值,返回true需要更新本地数据缓存 */
  24. bool processDeviceInfo(std::vector<DeviceInfo> vecNewDevInfo);
  25. /* 对比算法信息现有的数据和新获取到的数据,取出要删除和添加的数据 */
  26. void compareAlgorithmInfo(const std::vector<AlgorithmInfo>& vecNewInfo, std::vector<AlgorithmInfo>& vecAlgUpdate, std::vector<AlgorithmInfo>& vecAlgDelete);
  27. /* 对比设备和算法关联表是否需要更新 */
  28. void compareDeviceAlgorithmInfo(const std::vector<DeviceInfo>& vecNewInfo, std::vector<DeviceInfo>& vecDevUpdate);
  29. /* 从Redis获取数据线程函数,这个是摄像机线程(注意,这个函数未被使用,不从这里获取Redis数据) */
  30. void threadFromRedis(const CameraThreadInfo& info);
  31. /* 解析Redis基础数据 */
  32. // void parseRedisData(const std::string& strData, AlarmInfo& alarmInfo);
  33. /* 解析Redis的基础通用数据,不包含bBoxes数组数据 */
  34. void parseRedisBaseData(const std::string& strData, AlarmInfo& alarmInfo);
  35. /* 解析Redis的bBoxes数据, */
  36. void parseRedisBBoxesData(const std::string& strData, AlarmInfo& alarmInfo);
  37. /* 判断时间是否长时间没有更新 */
  38. bool isEventTimeVaild(const std::string& strTime);
  39. /* 分派任务的线程 */
  40. void threadRoomCamera();
  41. /* 人员在岗识别线程,应该是人脸识别线程,这个需要房间内多个摄像机共同识别 */
  42. void threadActPersonWork(FuncActionInfo* RFAInfo);
  43. /* 非法入侵检测 */
  44. void threadActIllegalInvasion(FuncActionInfo* RFAInfo);
  45. /* 区域人员检测(人员计数),检测这个区域内的人数,不能少于多少人,不能多余多少人 */
  46. void threadActRegionalPersonnelDetection(FuncActionInfo* RFAInfo);
  47. /* 普通任务线程,一个算法值对应一个摄像机 */
  48. void threadActNormal(FuncActionInfo* info);
  49. /* 将该算法对应的摄像机放入摄像机列表 */
  50. bool insertCameraToAction(RoomActionInfo* pRAInfo, std::list<RoomCameraInfo>& listRC, std::multimap<int, std::string>& mapCameraActionID);
  51. /* 更新算法的摄像机ID */
  52. bool updateFuncInfo(std::shared_ptr<FuncActionInfo> pInfo);
  53. /* 设置线程状态 */
  54. void setThreadState(std::shared_ptr<FuncActionInfo> pInfo, RunTimeState state);
  55. /* 计算与当前时间的时间差,返回秒 */
  56. int timeDiffWithNow(const std::string& strTime);
  57. /* 字符串时间转换成std::chrono时间点 */
  58. std::chrono::system_clock::time_point strTimeToChrono(const std::string& strTime);
  59. /* 时间点转换成字符串 */
  60. std::string chronoToStrTime(const std::chrono::system_clock::time_point& timePoint);
  61. private:
  62. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  63. bool m_threadRunning = true; /* 线程正在运行 */
  64. FromSuperBrain m_fromSuperBrain;
  65. ToEQMDataBase m_toEQMDataBase;
  66. // std::mutex m_mutexActionID; /* 算法ID的互斥锁 */
  67. // std::string ActPersonWork; /* 人员在岗识别 */
  68. // std::string ActPersonNumber; /* 区域人员检测(区域人员计数) */
  69. // std::string ActIllegalInvasion; /* 非法入侵检测 */
  70. // std::string ActContraband; /* 违禁品检测 */
  71. // std::string ActFatigueDetection; /* 疲劳检测 */
  72. /* 算法信息,这个就是tAction在内存中的数据,方便后续对比,程序启动的时候会先获取一份 */
  73. std::vector<AlgorithmInfo> m_vecEqmAlgInfo;
  74. /* 设备信息,这个是tActionCamer的信息 */
  75. std::vector<DeviceInfo> m_vecEqmDevInfo;
  76. /* 算法信息列表,每个算法所在的频率、房间、摄像机 */
  77. std::mutex m_mutexActionInfo;
  78. ListActionInfo m_listActionInfo;
  79. /* 设备和算法关联信息,这里存储着已经删除的设备对应的算法信息,将在这一轮循环中删除 */
  80. std::list<int> m_listDevIDDelete;
  81. // /* 房间和算法关联的信息,包含所需要的摄像机ID */
  82. // std::mutex m_mutexRunRAI;
  83. // ListRoomActionInfo m_runListRoomActionInfo;
  84. // /* 运行时的算法信息列表,这个容器存储的是不需要摄像机融合的算法 */
  85. // std::mutex m_mutexRunAI;
  86. // ListActionInfo m_runListActionInfo;
  87. /* 运行时应用线程功能相关信息 */
  88. std::mutex m_mutexRunFAI;
  89. ListFuncActInfo m_runListFuncActInfo;
  90. };
  91. #endif /* SPASERVER_H */