Kaynağa Gözat

V0.1
1、添加了基础的类

Apple 7 ay önce
işleme
79815f246c

+ 161 - 0
CMakeLists.txt

@@ -0,0 +1,161 @@
+cmake_minimum_required(VERSION 3.12)
+
+
+project(SecurePlayAuxiliaryServer VERSION 0.1 LANGUAGES CXX)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+
+#=========================================================
+#********************  指定Qt安装路径 ********************
+#=========================================================
+# option(QT_5.12.12 "使用Qt5.12.12" OFF)
+
+# if(QT_5.12.12)
+#     if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+#         set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.12.12/5.12.12/mingw73_64")
+#     elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+#         set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/bin")
+#     endif()
+# endif()
+
+#=========================================================
+#*************  设置可执行文件的名称和输出位置 *************
+#=========================================================
+
+#设置可执行文件名称
+set(execName1 SecurePlayAuxServer)
+set(execName2 Show1)
+
+
+#设置可执行文件和库位置,可能是qt tools的bug,选择32位依旧是64位编译器
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    message(STATUS "Using Linux System")
+    if(CMAKE_BUILD_TYPE MATCHES Debug)
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Debug)
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Debug)
+    elseif(CMAKE_BUILD_TYPE MATCHES Release)
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Release)
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Release)
+    endif()
+elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
+    message(STATUS "Using Windows System")
+    if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+        message(STATUS "Using Compiler : ${CMAKE_CXX_COMPILER_ID}")
+        #设置日志库的位置,判断32位和64位,CMAKE_CL_64已经被废弃
+        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+            message(STATUS "Using 64bit Compiler")
+            #设置可执行文件输出位置
+            set(exec_out_path ${CMAKE_SOURCE_DIR}/../../bin_GNU_64)
+            #设置库生成位置
+            set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../../bin_GNU_64)
+        elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+            message(STATUS "Using 32bit Compiler")
+            #设置可执行文件输出位置
+            set(exec_out_path ${CMAKE_SOURCE_DIR}/../../bin_GNU_32)
+            #设置库生成位置
+            set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../../bin_GNU_32)
+        endif()
+        if(CMAKE_BUILD_TYPE MATCHES Debug)
+            message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
+        else()
+            message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
+        endif()
+    elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+        #不支持MSVC
+        message(FATAL_ERROR "MSVC is not supported")
+    endif()
+endif()
+
+#设置库和可执行文件的输出位置
+set(EXECUTABLE_OUTPUT_PATH ${exec_out_path})
+set(LIBRARY_OUTPUT_PATH ${exec_out_path})
+
+#指定库的位置,方便寻找
+link_directories(${BUILD_LIB_PATH})
+
+#=======================================================
+#***************    启用一些模块和选项    ***************
+#=======================================================
+
+#设置MSVC的一些编译属性
+if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+    #设置MSVC使用UTF-8
+    add_compile_options(
+      "$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>"
+      "$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>"
+    )
+    #消除MSVC对SPDLOG的兼容性警告
+    add_compile_definitions("_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING")
+endif()
+
+#添加一些gcc的编译属性
+if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+#    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
+#    #添加编译参数,这个参数会应用到全局,C和C++都会生效
+#    add_compile_options(-Wall -O2)
+endif()
+
+
+#定义一些宏
+if(CMAKE_BUILD_TYPE MATCHES Debug)
+    add_compile_definitions(C_DEBUG)
+elseif(CMAKE_BUILD_TYPE MATCHES Release)
+    add_compile_definitions(C_RELEASE)
+endif()
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    option(ENABLE_SPDLOG_STATIC_LIB "使用SPDLOG静态库" OFF)
+elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+
+endif()
+
+#需要定义这个宏,才会使用编译好的动态库
+add_compile_definitions(SPDLOG_COMPILED_LIB)
+
+#给spdlog添加宏定义,使其支持%#等源文件相关的标志,其实就是设置日志级别
+add_compile_definitions(SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)
+
+#=========================================================
+#*******************  搜索库添加库 ***********************
+#=========================================================
+
+# find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
+# find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
+
+find_package(Qt5 COMPONENTS
+    Widgets
+    Core
+    Network
+    Sql
+    REQUIRED
+)
+
+#包含外部通用库
+include(${CMAKE_SOURCE_DIR}/External/Libraries/Libraries.cmake)
+
+
+#=========================================================
+#*****************  添加头文件和源文件 ********************
+#=========================================================
+
+#包含源文件
+file(GLOB GLOBAL_SRC
+)
+
+
+#=========================================================
+#*******************  生成可执行文件 *********************
+#=========================================================
+
+
+add_subdirectory(SecurePlayAuxServer)
+# add_subdirectory(ShowFlowChart)
+# add_subdirectory(show2)
+
+

+ 54 - 0
SecurePlayAuxServer/CMakeLists.txt

@@ -0,0 +1,54 @@
+cmake_minimum_required(VERSION 3.12)
+
+
+#包含源文件
+file(GLOB LOCAL_SRC
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/common/LHLog/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/communication/*.cpp
+    
+
+    ${CMAKE_SOURCE_DIR}/External/common/CurlFtp/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/Thread/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/CurlHttp/*.cpp
+    
+    ${LHQLog_SOURCE_DIRS}/*.cpp
+    ${LHHTTPAPI_SOURCE_DIRS}/*.cpp
+    ${SM_SOURCE_DIR}/*.cpp
+)
+
+#生成可执行程序
+add_executable(${execName1} ${LOCAL_SRC})
+
+
+#添加头文件
+target_include_directories(${execName1} PRIVATE
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/common/LHLog
+    ${CMAKE_CURRENT_SOURCE_DIR}/communication
+
+    ${CMAKE_SOURCE_DIR}/External/common/FmtLog
+    ${CMAKE_SOURCE_DIR}/External/common/CurlFtp
+    ${CMAKE_SOURCE_DIR}/External/common/Thread
+    ${CMAKE_SOURCE_DIR}/External/common/CurlHttp
+
+    ${LHQLog_INCLUDE_DIRS}
+    ${LHHTTPAPI_SOURCE_DIRS}
+    ${SM_INCLUDE_DIR}
+)
+#链接Qt库
+target_link_libraries(${execName1} PRIVATE
+    Qt5::Widgets
+    Qt5::Core
+    Qt5::Network
+    Qt5::Sql
+)
+#链接外部库
+target_link_libraries(${execName1} PRIVATE
+    fmt::fmt
+    spdlog::spdlog
+    CURL::libcurl
+    ${SM_LIBRARY}
+)
+
+

+ 22 - 0
SecurePlayAuxServer/SPAServer.cpp

@@ -0,0 +1,22 @@
+#include "SPAServer.h"
+
+#include "spdlog/spdlog.h"
+#include "CurlHttp.h"
+
+#include <filesystem>
+
+
+
+SPAServer::SPAServer()
+{
+    // std::filesystem::path full_path = std::filesystem::current_path();
+    // SPDLOG_INFO("current_path:{}", full_path.string());
+    m_fromSuperBrain.getToken();
+}
+
+SPAServer::~SPAServer()
+{
+
+}
+
+

+ 18 - 0
SecurePlayAuxServer/SPAServer.h

@@ -0,0 +1,18 @@
+#ifndef SPASERVER_H
+#define SPASERVER_H
+
+#include <iostream>
+#include "FromSuperBrain.h"
+
+class SPAServer
+{
+public:
+    SPAServer();
+    ~SPAServer();
+
+private:
+    FromSuperBrain m_fromSuperBrain;
+
+};
+
+#endif /* SPASERVER_H */

+ 88 - 0
SecurePlayAuxServer/common/LHLog/LHLogInit.cpp

@@ -0,0 +1,88 @@
+#include "LHLogInit.h"
+
+#include "spdlog/spdlog.h"
+#include "spdlog/sinks/stdout_color_sinks.h"
+#include "LHLog_file_sink.h"
+
+
+#include <QString>
+#include <QApplication>
+
+/* 初始化spdlog,输入的是模组名称,可以为空
+ * lhQLog是一个全局函数,在库LHQLog中定义
+ */
+void initLog(QString ModuleName, CLHQLogApi& lhQLog)
+{
+
+    try {
+        /* 创建一个控制台sink */
+        auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+        /* 创建一个文件sink,每天一个,00:00创建新的 */
+        // auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("FlowChartLog/log.txt",0,0);
+        /* 自定义的sink */
+    #if defined(Q_OS_WIN32)
+        #if C_DEBUG
+            QString libName = QApplication::applicationDirPath() + "/LHQLogd.dll";
+        #elif C_RELEASE
+            QString libName = QApplication::applicationDirPath() + "/LHQLog.dll";
+        #endif
+    #elif defined(Q_OS_LINUX)
+        QString libName = QApplication::applicationDirPath() + "/libLHQLog.so";
+    #endif
+        auto sink_custom = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&lhQLog, libName, ModuleName);
+        /* 给默认记录器用的sink */
+        auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+ 
+        /* 修改输出格式 */
+        sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%n] [%s %#] %v %$");
+        // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S] [%^%n%$] [%^%l%$] %s %#: %v");
+        sink_custom->set_pattern("%v");
+        sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%s %#] %v %$");
+
+        /* 日志输出方向,终端和文件 */
+        std::vector<spdlog::sink_ptr> sinks;
+        sinks.push_back(sink_consolse);
+        // sinks.push_back(sink_file);
+        sinks.push_back(sink_custom);
+
+        /* 设置默认日志记录器,设置成自定义的sink */
+        spdlog::default_logger()->sinks().clear();
+        spdlog::default_logger()->sinks().push_back(sink_default);
+        spdlog::default_logger()->sinks().push_back(sink_custom);
+        // auto vecSinks =  spdlog::default_logger()->sinks();
+        // for(auto& sink : vecSinks)
+        // {
+        //     SPDLOG_INFO("sink name = {}", typeid(*sink).name());
+        // }
+        /* 创建一个标准输出 */
+        auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
+        /* 创建一个WebAPI logger */
+        auto logger_WebAPI = std::make_shared<spdlog::logger>("WebAPI",begin(sinks),end(sinks));
+        /* 创建一个发射机通用 Logger */
+        auto logger_SuperBrain = std::make_shared<spdlog::logger>("SuperBrain",begin(sinks),end(sinks));
+
+        /* 注册到注册表 */
+        spdlog::register_logger(logger_main);
+        spdlog::register_logger(logger_WebAPI);
+        spdlog::register_logger(logger_SuperBrain);
+
+        /* 设置spdlog输出级别,默认的估计不输出debug这个级别
+         * 这是默认的设置,可以在外面单数设置输出方式
+         * release模式下不输出console的日志输出
+         * */
+#if  defined (C_DEBUG)
+        spdlog::set_level(spdlog::level::trace);
+        spdlog::flush_on(spdlog::level::trace);
+#elif defined(C_RELEASE)
+        spdlog::set_level(spdlog::level::info);             /* 只输出info以上的输出 */
+        spdlog::flush_on(spdlog::level::info);              /* 设置刷新等级 */
+        sink_consolse->set_level(spdlog::level::off);       /* 控制台不输出 */
+        sink_default->set_level(spdlog::level::off);        /* 默认sink也不输出 */
+#endif
+
+//    SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");
+    }
+    catch (const spdlog::spdlog_ex& ex) {
+        qDebug() << "Log initialization failed: " << ex.what() ;
+    }
+}

+ 11 - 0
SecurePlayAuxServer/common/LHLog/LHLogInit.h

@@ -0,0 +1,11 @@
+#ifndef LHLOGINIT_H
+#define LHLOGINIT_H
+
+class QString;
+class CLHQLogApi;
+
+void initLog(QString ModuleName, CLHQLogApi& lhQLog);
+
+
+
+#endif /* LHLOGINIT_H */

+ 30 - 0
SecurePlayAuxServer/communication/FromSuperBrain.cpp

@@ -0,0 +1,30 @@
+#include "FromSuperBrain.h"
+
+#include "spdlog/spdlog.h"
+#include "CurlHttp.h"
+
+
+FromSuperBrain::FromSuperBrain()
+{
+    m_url = "http://172.16.36.80:30000/vos";
+}
+
+FromSuperBrain::~FromSuperBrain()
+{
+
+}
+
+/* 获取token */
+bool FromSuperBrain::getToken()
+{
+    std::string response;
+    std::string httpBody = R"({"appSecret":"8zR9ug4WbKCtEgaQ08myRm5HqKIMwP83Ra24t921tO/mU0cTIFdm/t0C9Jxrd53x","appKey":"rili4l26"})";
+    std::vector<std::string> vecHeader;
+    vecHeader.push_back("User-Agent: Apifox/1.0.0 (https://apifox.com)");
+    vecHeader.push_back("Content-Type: application/json");
+    
+    CurlHttp::PostWithBody(m_url, vecHeader, httpBody, response);
+    SPDLOG_INFO("response:{}", response);
+
+    return true;
+}

+ 27 - 0
SecurePlayAuxServer/communication/FromSuperBrain.h

@@ -0,0 +1,27 @@
+#ifndef FROMSUPERBRAIN_H
+#define FROMSUPERBRAIN_H
+
+#include <string>
+
+
+class FromSuperBrain
+{
+public:
+    FromSuperBrain();
+    ~FromSuperBrain();
+    /* 获取token */
+    bool getToken();
+
+private:
+    std::string m_url;
+    std::string m_username;
+    std::string m_password;
+
+
+    std::string m_token;
+    const std::string m_tokenKey = "/external/broadcastToken";              /* 获取token数据 */
+    const std::string m_taskTypeListKey = "/external/getTaskTypeList";      /* 获取任务类型数据 */
+};
+
+
+#endif /* FROMSUPERBRAIN_H */

+ 27 - 0
SecurePlayAuxServer/main.cpp

@@ -0,0 +1,27 @@
+
+#include <iostream>
+
+#include "spdlog/spdlog.h"
+#include "SPAServer.h"
+#include "LHLogInit.h"
+#include "LHQLogAPI.h"
+
+#include <QCoreApplication>
+
+int main(int argc, char* argv[])
+{
+    /* 初始化日志库 */
+    initLog("SecurePlayAuxServer", g_apiLhQLog);
+    auto logger = spdlog::get("main");
+    if(logger == nullptr)
+    {
+        SPDLOG_ERROR("main logger is nullptr");
+        return -1;
+    }
+    SPDLOG_LOGGER_INFO(logger, "★  ★  ★  ★  ★  ☆  SecurePlayAuxServer  ☆  ★  ★  ★  ★  ★");
+
+    SPAServer server;
+
+    return 0;
+}
+

+ 33 - 0
安播辅助服务程序说明.md

@@ -0,0 +1,33 @@
+# 安播辅助服务程序说明
+
+## 程序运行流程
+1. 从~~超脑WebAPI~~ Redis取出基础信息,基础信息包括
+    - 算法信息
+    - 平台信息(摄像机信息)
+2. 从总控WebAPI获取到相关的`处理规则`
+3. 从超脑(也是Redis)获取到监测信息,信息包括
+    - 是否带口罩
+    - 人员计数等
+4. 根据`处理规则`处理获取到的监测信息
+5. 将处理过的信息写入到数据库中
+
+## 使用到的地址
+1. 超脑基础信息地址 [apifox](https://apifox.com/apidoc/shared-1f40509b-3aca-4c2c-9d8e-381b986b085a/api-183796683)
+2. Redis地址
+    - IP:http://172.16.36.80:30000/vos/
+    - 端口:32222
+    - 密码:Ff1z@TOFr^iwd%Ra
+3. 总控数据库
+    - SQL Server
+        - 数据表:EQM_BJ
+        - IP:192.1.3.105
+        - 用户名:sa
+        - 密码:Qwer1234
+    - 达梦数据库
+        - 数据表:EQM
+        - IP:192.1.2.44
+        - 密码:QWERT12345
+        - 数据库:EQM_BJ
+    - WebApi
+        - 地址:http://192.1.3.133:31000/LocalSetup
+        - 密码:HZlh