diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f9a50c..f630592 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.31) project(deviceAccessLayer) set(CMAKE_CXX_STANDARD 20) - +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(PACKAGE_DIRS ${CMAKE_CURRENT_LIST_DIR}/lib/openssl ${CMAKE_CURRENT_LIST_DIR}/lib/HCNetSDK diff --git a/config/tian_qin.json b/config/tian_qin.json index fc788f5..0dd6642 100644 --- a/config/tian_qin.json +++ b/config/tian_qin.json @@ -62,6 +62,15 @@ "soundColumn": "1", "vidicon": "1" }, + { + "name": "进前置-2", + "sn": "33c05713-8a909b35", + "ip": "192.168.120.247", + "io": 0, + "platformScale": "2", + "soundColumn": "3", + "vidicon": "3" + }, { "name": "进", "sn": "25ec7559-74125e77", @@ -71,6 +80,15 @@ "soundColumn": "2", "vidicon": "1" }, + { + "name": "进-2", + "sn": "2f062d64-1a240f67", + "ip": "192.168.120.242", + "io": 0, + "platformScale": "2", + "soundColumn": "4", + "vidicon": "3" + }, { "name": "出前置", "sn": "351b2406-6fae5ab5", @@ -80,6 +98,15 @@ "soundColumn": "2", "vidicon": "2" }, + { + "name": "出前置-2", + "sn": "973c0ea9-256d9e08", + "ip": "192.168.120.252", + "io": 0, + "platformScale": "2", + "soundColumn": "4", + "vidicon": "4" + }, { "name": "出", "sn": "34fc9ce5-8b091060", @@ -88,18 +115,43 @@ "platformScale": "1", "soundColumn": "1", "vidicon": "2" + }, + { + "name": "出-2", + "sn": "5835526e-9537e25c", + "ip": "192.168.120.241", + "io": 0, + "platformScale": "2", + "soundColumn": "3", + "vidicon": "4" } ], "platformScales": [ { "sn": "1", "name": "地磅", + "delay": 5, "sample": 20, + "retries": 30, + "weight": 200.0, "port": "COM2", "baudRate": 1200, "byteSize": 8, "parity": 0, "stopBits": 0 + }, + { + "sn": "2", + "name": "地磅-2", + "delay": 5, + "sample": 20, + "retries": 30, + "weight": 200.0, + "port": "COM3", + "baudRate": 1200, + "byteSize": 8, + "parity": 0, + "stopBits": 0 } ], "soundColumns": [ @@ -114,12 +166,26 @@ "name": "音柱2", "server": "http://192.168.120.237:80", "path": "/v1/speech" + }, + + { + "sn": "3", + "name": "音柱3", + "server": "http://192.168.120.221:80", + "path": "/v1/speech" + }, + { + "sn": "4", + "name": "音柱4", + "server": "http://192.168.120.224:80", + "path": "/v1/speech" } ], "vidicons": [ { "sn": "1", "name": "摄像头1", + "type": 0, "ip": "192.168.120.245", "port": 8000, "username": "admin", @@ -128,10 +194,28 @@ { "sn": "2", "name": "摄像头2", + "type": 0, "ip": "192.168.120.244", "port": 8000, "username": "admin", "passwd": "gk147258" + }, + + { + "sn": "3", + "name": "摄像头3", + "ip": "192.168.120.248", + "port": 8000, + "username": "admin", + "passwd": "Ab147258" + }, + { + "sn": "4", + "name": "摄像头4", + "ip": "192.168.120.236", + "port": 8000, + "username": "admin", + "passwd": "Ab147258" } ] } \ No newline at end of file diff --git a/src/application.cpp b/src/application.cpp index ed8b500..3d9b614 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -7,7 +7,7 @@ namespace zsy { HANDLE Application::STOP_EVENT = CreateEvent(nullptr, TRUE, FALSE, nullptr); - std::shared_ptr Application::threadPool = nullptr; + // std::shared_ptr Application::threadPool = nullptr; std::shared_ptr Application::eventManager = nullptr; std::shared_ptr Application::httpSvr = nullptr; std::shared_ptr Application::mqttSvr = nullptr; @@ -38,8 +38,7 @@ namespace zsy { LOGGER_ERROR("配置文件加载失败,请检查配置文件是否有误,{}", e.what()); exit(1); - } - catch (...) + } catch (...) { LOGGER_ERROR("未知异常,配置文件加载失败"); exit(1); @@ -66,7 +65,7 @@ namespace zsy } catch (const std::exception &e) { LOGGER_ERROR("PID 文件删除失败:{}", e.what()); - }catch (...) + } catch (...) { LOGGER_ERROR("未知异常,PID 文件删除失败"); } @@ -91,7 +90,7 @@ namespace zsy { pid = {}; LOGGER_ERROR("PID 写入失败:{}", e.what()); - }catch (...) + } catch (...) { pid = {}; LOGGER_ERROR("未知异常,PID 写入失败"); @@ -113,7 +112,7 @@ namespace zsy LOGGER_INFO("等待..."); std::this_thread::sleep_for(std::chrono::milliseconds(appProperties.delay * 1000)); } - threadPool = std::make_shared("通用线程池"); + // threadPool = std::make_shared("通用线程池"); eventManager = std::make_shared(); @@ -121,7 +120,10 @@ namespace zsy oss = std::make_shared(config); - // mqttSvr = std::make_shared(); + if (appProperties.embedMqtt) + { + mqttSvr = std::make_shared(); + } mqttCliHolder = std::make_shared(config, eventManager); diff --git a/src/application.h b/src/application.h index d26ef4b..2cca9fa 100644 --- a/src/application.h +++ b/src/application.h @@ -15,6 +15,7 @@ namespace zsy bool daemon{false}; uint32_t delay{0}; std::string name; + bool embedMqtt{false}; }; inline void from_json(const nlohmann::json &j, AppProperties &o) @@ -22,6 +23,7 @@ namespace zsy PARSE_JSON(daemon, o.daemon); PARSE_JSON(delay, o.delay); PARSE_JSON(name, o.name); + PARSE_JSON(embedMqtt, o.embedMqtt); } class Application @@ -40,7 +42,7 @@ namespace zsy void writePid(); public: - static std::shared_ptr threadPool; + // static std::shared_ptr threadPool; static std::shared_ptr eventManager; diff --git a/src/barrier/barrier.h b/src/barrier/barrier.h index be4441d..51714e2 100644 --- a/src/barrier/barrier.h +++ b/src/barrier/barrier.h @@ -19,6 +19,8 @@ namespace zsy virtual std::string sn() = 0; + virtual std::string name() = 0; + virtual std::shared_ptr resolvePhoto(const std::string &imageFile) = 0; }; } // zsy diff --git a/src/barrier/generic_barrier.cpp b/src/barrier/generic_barrier.cpp index 3c62a4c..6572304 100644 --- a/src/barrier/generic_barrier.cpp +++ b/src/barrier/generic_barrier.cpp @@ -47,20 +47,27 @@ namespace zsy auto body = req.body; LOGGER_INFO("收到车牌识别结果:{}", body); - auto [succ,recognizeResult] = GenericBarrier::parseRecognizeResult(body); + auto [succ,recognizeResult,name,sn] = GenericBarrier::parseRecognizeResult(body); if (succ) { - Application::threadPool->submit([recognizeResult] + std::jthread t([recognizeResult,name,sn] { + LOGGER_INFO("正在处理车牌识别结果:{} {}", name, sn); RecognizeProcessor::process(recognizeResult); LOGGER_INFO("车牌识别结果处理完成"); }); + t.detach(); + /*Application::threadPool->submit([recognizeResult,name,sn] + { + LOGGER_INFO("正在处理车牌识别结果:{} {}", name, sn); + RecognizeProcessor::process(recognizeResult); + LOGGER_INFO("车牌识别结果处理完成"); + });*/ } } catch (std::exception &e) { LOGGER_ERROR("车牌识别结果处理失败: {}", e.what()); - } - catch (...) + } catch (...) { LOGGER_ERROR("未知异常,车牌识别结果处理失败"); } @@ -117,13 +124,18 @@ namespace zsy return config.sn; } + std::string GenericBarrier::name() + { + return config.name; + } + std::shared_ptr GenericBarrier::resolvePhoto(const std::string &imageFile) { auto content = SysUtil::base64_decode(imageFile); return std::make_shared(content, std::ios_base::in | std::ios_base::binary); } - std::tuple > GenericBarrier::parseRecognizeResult(const std::string &jsonStr) + std::tuple, std::string, std::string> GenericBarrier::parseRecognizeResult(const std::string &jsonStr) { try { @@ -134,7 +146,7 @@ namespace zsy if (!barrier) { LOGGER_ERROR("未找到对应的道闸"); - return std::make_tuple(false, nullptr); + return std::make_tuple(false, nullptr, "", ""); } auto image_file = result.alarmInfoPlate.result.plateResult.imageFile; auto license = result.alarmInfoPlate.result.plateResult.license; @@ -146,22 +158,23 @@ namespace zsy ) { LOGGER_ERROR("车牌识别结果解析失败或车牌为:“无”"); - return std::make_tuple(false, nullptr); + return std::make_tuple(false, nullptr, "", ""); } return std::make_tuple(true, std::make_shared( barrier->isFront(), sn, license, barrier->resolvePhoto(image_file) - )); + ), + barrier->name(), barrier->sn()); } catch (std::exception &e) { LOGGER_ERROR("未找到车牌识别结果:{}", e.what()); - return std::make_tuple(false, nullptr); - }catch (...) + return std::make_tuple(false, nullptr, "", ""); + } catch (...) { LOGGER_ERROR("未知异常,未找到车牌识别结果"); - return std::make_tuple(false, nullptr); + return std::make_tuple(false, nullptr, "", ""); } } diff --git a/src/barrier/generic_barrier.h b/src/barrier/generic_barrier.h index 6df3dfd..be9e26e 100644 --- a/src/barrier/generic_barrier.h +++ b/src/barrier/generic_barrier.h @@ -154,9 +154,11 @@ namespace zsy std::string sn() override; + std::string name() override; + std::shared_ptr resolvePhoto(const std::string &imageFile) override; - static std::tuple > parseRecognizeResult(const std::string &jsonStr); + static std::tuple, std::string, std::string> parseRecognizeResult(const std::string &jsonStr); }; } // zsy diff --git a/src/common/color_format.cpp b/src/common/color_format.cpp new file mode 100644 index 0000000..f96587c --- /dev/null +++ b/src/common/color_format.cpp @@ -0,0 +1,129 @@ +#include "color_format.h" + +namespace zsy +{ + ColorFormat::ColorFormat(const bool console) : console(console) + { + } + + ColorFormat::ColorFormat() : console(true) + { + } + + void ColorFormat::format(const spdlog::details::log_msg &msg, const std::tm &tm_time, spdlog::memory_buf_t &dest) + { + if (!console) + { + const auto str = txt(msg); + const auto c_str = str->c_str(); + + dest.append(c_str, c_str + str->size()); + return; + } + switch (msg.level) + { + case spdlog::level::trace: + { + const auto begin = ANSI_BLACK; + dest.append(begin, begin + 5); + } + break; + case spdlog::level::debug: + { + const auto begin = ANSI_GREEN; + dest.append(begin, begin + 5); + } + break; + case spdlog::level::info: + { + const auto begin = ANSI_BLUE; + dest.append(begin, begin + 5); + } + break; + case spdlog::level::warn: + { + const auto begin = ANSI_YELLOW; + dest.append(begin, begin + 5); + } + break; + case spdlog::level::err: + { + const auto begin = ANSI_RED; + dest.append(begin, begin + 5); + } + break; + case spdlog::level::critical: + { + const auto begin = ANSI_BRIGHT_RED; + dest.append(begin, begin + 5); + } + break; + default: ; + } + + const auto str = txt(msg); + const auto c_str = str->c_str(); + + dest.append(c_str, c_str + str->size()); + const auto begin = ANSI_NONE; + dest.append(begin, begin + 4); + } + + LogMsgFormat::LogMsgFormat(const bool console) : ColorFormat(console) + { + } + + LogMsgFormat::LogMsgFormat() : ColorFormat(true) + { + } + + std::unique_ptr LogMsgFormat::clone() const + { + return spdlog::details::make_unique < LogMsgFormat > (console); + } + + std::unique_ptr LogMsgFormat::txt(const spdlog::details::log_msg &msg) + { + std::string result; + result.reserve(msg.payload.size()); + for (const char ch: msg.payload) + { + result += ch; + } + return std::make_unique(std::move(result)); + } + + LogLevelFormat::LogLevelFormat(const bool console) : ColorFormat(console) + { + } + + LogLevelFormat::LogLevelFormat() : ColorFormat(true) + { + } + + std::unique_ptr LogLevelFormat::clone() const + { + return spdlog::details::make_unique < LogLevelFormat > (console); + } + + std::unique_ptr LogLevelFormat::txt(const spdlog::details::log_msg &msg) + { + switch (msg.level) + { + case spdlog::level::trace: + return std::make_unique("TRACE"); + case spdlog::level::debug: + return std::make_unique("DEBUG"); + case spdlog::level::info: + return std::make_unique("INFO "); + case spdlog::level::warn: + return std::make_unique("WARN "); + case spdlog::level::err: + return std::make_unique("ERROR"); + case spdlog::level::critical: + return std::make_unique("CRTCL"); + default: + return std::make_unique("DEFLT"); + } + } +} \ No newline at end of file diff --git a/src/common/color_format.h b/src/common/color_format.h new file mode 100644 index 0000000..4b4b6cf --- /dev/null +++ b/src/common/color_format.h @@ -0,0 +1,67 @@ +#ifndef DEVICE_CTRL_COLOR_FORMAT_H +#define DEVICE_CTRL_COLOR_FORMAT_H +#include + +#include "spdlog/pattern_formatter.h" + +#define ANSI_NONE "\033[0m" +#define ANSI_BLACK "\033[30m" +#define ANSI_RED "\033[31m" +#define ANSI_GREEN "\033[32m" +#define ANSI_YELLOW "\033[33m" +#define ANSI_BLUE "\033[34m" +#define ANSI_MAGENTA "\033[35m" +#define ANSI_CYAN "\033[36m" +#define ANSI_WHITE "\033[37m" +#define ANSI_BRIGHT_BLACK "\033[90m" +#define ANSI_BRIGHT_RED "\033[91m" +#define ANSI_BRIGHT_GREEN "\033[92m" +#define ANSI_BRIGHT_YELLOW "\033[93m" +#define ANSI_BRIGHT_BLUE "\033[94m" +#define ANSI_BRIGHT_MAGENTA "\033[95m" +#define ANSI_BRIGHT_CYAN "\033[96m" +#define ANSI_BRIGHT_WHITE "\033[97m" + +namespace zsy +{ + class ColorFormat : public spdlog::custom_flag_formatter + { + protected: + bool console; + + public: + explicit ColorFormat(bool console); + + ColorFormat(); + + void format(const spdlog::details::log_msg &msg, const std::tm &tm_time, spdlog::memory_buf_t &dest) override; + + virtual std::unique_ptr txt(const spdlog::details::log_msg &msg) = 0; + }; + + class LogMsgFormat final : public ColorFormat + { + public: + explicit LogMsgFormat(bool console); + + LogMsgFormat(); + + std::unique_ptr txt(const spdlog::details::log_msg &msg) override; + + std::unique_ptr clone() const override; + }; + + class LogLevelFormat final : public ColorFormat + { + public: + explicit LogLevelFormat(bool console); + + LogLevelFormat(); + + std::unique_ptr txt(const spdlog::details::log_msg &msg) override; + + std::unique_ptr clone() const override; + }; +} + +#endif //DEVICE_CTRL_COLOR_FORMAT_H \ No newline at end of file diff --git a/src/common/daily_and_size_sink.cpp b/src/common/daily_and_size_sink.cpp index b57d04b..1f3934a 100644 --- a/src/common/daily_and_size_sink.cpp +++ b/src/common/daily_and_size_sink.cpp @@ -1,8 +1,8 @@ #include "daily_and_size_sink.h" -#include -#include -#include "date_util.h" +#include +#include +#include "utils/date_util.h" namespace zsy { @@ -22,7 +22,6 @@ namespace zsy fileHelper.open(basePath + "\\" + baseFilename + baseExt, false); } - void DailyAndSizeSink::rotateFile() { auto current_date = DateUtil::format(Ymd_); @@ -71,9 +70,25 @@ namespace zsy if (std::regex_match(filename, match, file_pattern)) { std::string date_str = match[1].str(); - std::chrono::sys_days date; std::istringstream tstr(date_str); - tstr >> std::chrono::parse("%F", date); + int year, month, day; + char dash1, dash2; + + // 解析字符串(格式:YYYY-MM-DD) + std::istringstream iss(date_str); + if (!(iss >> year >> dash1 >> month >> dash2 >> day) || dash1 != '-' || dash2 != '-') + { + throw std::invalid_argument("无效的日期格式,需为 YYYY-MM-DD"); + } + + std::chrono::year_month_day ymd(std::chrono::year{year}, + std::chrono::month{(unsigned) month}, std::chrono::day{(unsigned) day}); + if (!ymd.ok()) + { + throw std::invalid_argument("无效的日期"); + } + std::chrono::sys_days date{ymd}; + if (date < cutoff_time) { std::filesystem::remove(entry.path()); @@ -87,7 +102,6 @@ namespace zsy } } - void DailyAndSizeSink::sink_it_(const spdlog::details::log_msg &msg) { spdlog::memory_buf_t formatted; @@ -104,19 +118,6 @@ namespace zsy fileHelper.flush(); } - /*std::string DailyAndSizeSink::today() - { - auto now = std::chrono::system_clock::now(); - time_t current_time = std::chrono::system_clock::to_time_t(now); - - tm local_tm{}; - localtime_s(&local_tm, ¤t_time); - char buffer[11]; - std::strftime(buffer, sizeof(buffer), "%F", &local_tm); - - return std::string(buffer); - }*/ - uint32_t DailyAndSizeSink::lastIndex() { uint32_t index = 0; @@ -152,4 +153,4 @@ namespace zsy } return size; } -} +} \ No newline at end of file diff --git a/src/common/daily_and_size_sink.h b/src/common/daily_and_size_sink.h index a600136..eabb2c3 100644 --- a/src/common/daily_and_size_sink.h +++ b/src/common/daily_and_size_sink.h @@ -28,20 +28,18 @@ namespace zsy void cleanOldFiles(); - // std::string today(); - uint32_t lastIndex(); uintmax_t lastSize(); + public: - DailyAndSizeSink( const std::string &filename, size_t maxSize, int32_t maxDays); + DailyAndSizeSink(const std::string &filename, size_t maxSize, int32_t maxDays); protected: void sink_it_(const spdlog::details::log_msg &msg) override; void flush_() override; - }; } -#endif //DAILY_AND_SIZE_SINK_H +#endif //DAILY_AND_SIZE_SINK_H \ No newline at end of file diff --git a/src/common/event_manager.cpp b/src/common/event_manager.cpp index cc5f85a..6798de4 100644 --- a/src/common/event_manager.cpp +++ b/src/common/event_manager.cpp @@ -16,7 +16,7 @@ namespace zsy } } - EventManager::EventManager(): threadPool(std::make_shared("事件线程池", 10)) + EventManager::EventManager() { } @@ -63,9 +63,5 @@ namespace zsy LOGGER_ERROR("事件处理异常:{}", name); } } - /*threadPool->submit([list, name, data] - { - - });*/ } } // zsy diff --git a/src/common/event_manager.h b/src/common/event_manager.h index 17070c5..ff4311c 100644 --- a/src/common/event_manager.h +++ b/src/common/event_manager.h @@ -1,10 +1,11 @@ #ifndef EVENT_MANAGER_H #define EVENT_MANAGER_H #include +#include #include #include -#include "thread_pool.h" +// #include "thread_pool.h" namespace zsy { @@ -32,7 +33,7 @@ namespace zsy private: std::unordered_map handlers; std::shared_mutex handlersMutex; - std::shared_ptr threadPool; + // std::shared_ptr threadPool; }; } // zsy diff --git a/src/common/logging.cpp b/src/common/logging.cpp index 21c3f79..6325c15 100644 --- a/src/common/logging.cpp +++ b/src/common/logging.cpp @@ -1,8 +1,12 @@ #include #include -// #include #include "sys_util.h" #include "daily_and_size_sink.h" +#include +#include "color_format.h" + +#define CONSOLE_PATTERN ANSI_MAGENTA"%Y-%m-%d %H:%M:%S.%e" ANSI_NONE" %l" ANSI_BLUE" %=6t %s:%#" ANSI_BLUE" [%!]" ANSI_NONE" ===> %v" +#define FILE_PATTERN "%Y-%m-%d %H:%M:%S.%e %l %=6t %s:%# [%!] ===> %v" namespace zsy { @@ -16,18 +20,26 @@ namespace zsy 50 * 1024 * 1024, 15 ); - file_sink->set_level(spdlog::level::info); - file_sink->set_pattern("%Y-%m-%d %H:%M:%S.%e %=7l %=10t %s [%! %#]: %v"); + constexpr auto level = static_cast(SPDLOG_ACTIVE_LEVEL); + auto file_formatter = std::make_unique(); + file_formatter->add_flag('l', false) + .set_pattern(FILE_PATTERN); + file_sink->set_formatter(std::move(file_formatter)); + + auto console_formatter = std::make_unique(); + console_formatter->add_flag('l') + .add_flag('v') + .set_pattern(CONSOLE_PATTERN); const auto console_sink = std::make_shared(); - console_sink->set_level(spdlog::level::info); - console_sink->set_pattern("%Y-%m-%d %H:%M:%S.%e %=7l %=10t %s [%! %#]: %v"); + console_sink->set_formatter(std::move(console_formatter)); spdlog::sinks_init_list sinks = {console_sink, file_sink}; - auto logger = std::make_shared("zsy", sinks); - logger->flush_on(spdlog::level::info); - spdlog::set_default_logger(logger); - return logger; + auto logger_ = std::make_shared("zsy", sinks); + logger_->set_level(level); + logger_->flush_on(level); + spdlog::set_default_logger(logger_); + return logger_; }(); return logger; } diff --git a/src/common/sys_util.cpp b/src/common/sys_util.cpp index 635847f..c894099 100644 --- a/src/common/sys_util.cpp +++ b/src/common/sys_util.cpp @@ -180,7 +180,7 @@ namespace zsy std::wstring wstr = str_a_w(astr); size_t size = wstr.size() + 1; - auto result = std::make_shared(size); + auto result = std::unique_ptr (new wchar_t[size], std::default_delete()); wcscpy_s(result.get(), size, wstr.c_str()); return result; } @@ -194,7 +194,7 @@ namespace zsy std::string utf8 = str_w_a(wstr); size_t size = utf8.size() + 1; - auto result = std::make_shared(size); + auto result = std::unique_ptr(new char[size], std::default_delete()); strcpy_s(result.get(), size, utf8.c_str()); return result; } diff --git a/src/mqtt/mqtt_cli.cpp b/src/mqtt/mqtt_cli.cpp index 4972ab0..b4e3635 100644 --- a/src/mqtt/mqtt_cli.cpp +++ b/src/mqtt/mqtt_cli.cpp @@ -42,8 +42,7 @@ namespace zsy } catch (const std::exception &e) { LOGGER_ERROR("MQTT:{} 连接失败:{}", config.clientId, e.what()); - } - catch (...) + } catch (...) { LOGGER_ERROR("MQTT:{} 连接失败", config.clientId); } @@ -83,8 +82,7 @@ namespace zsy std::unique_lock lock(status_mtx); status = 0; LOGGER_ERROR("MQTT 连接失败:{}", SysUtil::str_w_a(SysUtil::str_a_w(std::string(e.what()),"GBK" ))); - } - catch (...) + } catch (...) { std::unique_lock lock(status_mtx); status = 0; @@ -145,7 +143,11 @@ namespace zsy auto topic = topic_.to_string(); auto payload = payload_.to_string(); LOGGER_INFO("MQTT 收到消息,设备名称:{},ID:{},主题:{},消息内容:{}", config.name, config.clientId, topic, payload); - eventManager->publish(config.clientId + "/" + topic, payload); + std::jthread t([em = eventManager, cid = config.clientId, topic, payload] + { + em->publish(cid + "/" + topic, payload); + }); + t.detach(); return true; } @@ -156,12 +158,6 @@ namespace zsy void MqttCli::publish(std::string topic, std::string payload, uint8_t qos) { - /*std::shared_lock lock(status_mtx); - if (status == 0) - { - LOGGER_ERROR("MQTT 未连接,无法发布消息:{}", config.clientId); - return; - }*/ cli->publish(topic, payload, static_cast(qos)); } diff --git a/src/mqtt/mqtt_svr.h b/src/mqtt/mqtt_svr.h index fc43ce6..b360bb6 100644 --- a/src/mqtt/mqtt_svr.h +++ b/src/mqtt/mqtt_svr.h @@ -12,7 +12,7 @@ #include #include #include - +#include namespace zsy { diff --git a/src/recognize_processor.cpp b/src/recognize_processor.cpp index 54cdfd0..fb6d050 100644 --- a/src/recognize_processor.cpp +++ b/src/recognize_processor.cpp @@ -13,10 +13,15 @@ namespace zsy const std::string &license = data->license; try { + std::jthread t; if (data->isFront) { - Application::threadPool->submit([sn] { Application::deviceHolder->getSoundColumn(sn)->play("欢迎光临"); }); + t = std::jthread([sn] + { + Application::deviceHolder->getSoundColumn(sn)->play("欢迎光临"); + }); } + t.detach(); // 上报 1 auto reportPassResult = Application::reportSvr->reportPass(license, sn); @@ -29,8 +34,7 @@ namespace zsy } catch (std::exception &e) { LOGGER_ERROR("车牌识别结果处理失败: {}", e.what()); - } - catch (...) + } catch (...) { LOGGER_ERROR("未知异常,车牌识别结果处理失败"); } @@ -42,14 +46,19 @@ namespace zsy const std::string &license = data->license; std::shared_ptr frontImageFile = data->imageFile; // 上报结果 type 不为 0,播放语音 2 并读地磅,拍车斗并上传 - Application::threadPool->submit([sn] { Application::deviceHolder->getSoundColumn(sn)->play("正在称重,请稍后"); }); - + std::jthread t([sn] + { + Application::deviceHolder->getSoundColumn(sn)->play("正在称重,请稍后"); + }); auto weight = Application::deviceHolder->getPlatformScale(sn)->reading(); std::string date = DateUtil::format(Ymd); + auto photoId = Snowflake::genIdStr(); + auto bodyImageFile = Application::deviceHolder->getVidicon(sn)->photograph(); + auto [carFrontUrlSucc,carFrontUrl] = Application::oss->upload(date + "/" + "front_" + photoId + ".jpg", frontImageFile); auto [carBodyUrlSucc,carBodyUrl] = Application::oss->upload(date + "/" + "body_" + photoId + ".jpg", bodyImageFile); diff --git a/vcpkg.json b/vcpkg.json index 03a1ca5..4e33a8d 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,220 +1,45 @@ { - "name" : "dal", - "version-string" : "1.0.0", - "builtin-baseline" : "3421943bfdef53a1d16404e98b5b487112c59df2", - "dependencies" : [ { - "name" : "boost-algorithm", - "version>=" : "1.88.0" - }, { - "name" : "boost-align", - "version>=" : "1.88.0" - }, { - "name" : "boost-any", - "version>=" : "1.88.0" - }, { - "name" : "boost-array", - "version>=" : "1.88.0" - }, { - "name" : "boost-asio", - "version>=" : "1.88.0" - }, { - "name" : "boost-assert", - "version>=" : "1.88.0" - }, { - "name" : "boost-atomic", - "version>=" : "1.88.0" - }, { - "name" : "boost-bind", - "version>=" : "1.88.0" - }, { - "name" : "boost-chrono", - "version>=" : "1.88.0" - }, { - "name" : "boost-cmake", - "version>=" : "1.88.0" - }, { - "name" : "boost-concept-check", - "version>=" : "1.88.0" - }, { - "name" : "boost-config", - "version>=" : "1.88.0" - }, { - "name" : "boost-container-hash", - "version>=" : "1.88.0" - }, { - "name" : "boost-container", - "version>=" : "1.88.0" - }, { - "name" : "boost-context", - "version>=" : "1.88.0" - }, { - "name" : "boost-conversion", - "version>=" : "1.88.0" - }, { - "name" : "boost-core", - "version>=" : "1.88.0" - }, { - "name" : "boost-date-time", - "version>=" : "1.88.0" - }, { - "name" : "boost-describe", - "version>=" : "1.88.0" - }, { - "name" : "boost-detail", - "version>=" : "1.88.0" - }, { - "name" : "boost-exception", - "version>=" : "1.88.0" - }, { - "name" : "boost-function-types", - "version>=" : "1.88.0" - }, { - "name" : "boost-function", - "version>=" : "1.88.0" - }, { - "name" : "boost-functional", - "version>=" : "1.88.0" - }, { - "name" : "boost-fusion", - "version>=" : "1.88.0" - }, { - "name" : "boost-headers", - "version>=" : "1.88.0" - }, { - "name" : "boost-integer", - "version>=" : "1.88.0" - }, { - "name" : "boost-intrusive", - "version>=" : "1.88.0" - }, { - "name" : "boost-io", - "version>=" : "1.88.0" - }, { - "name" : "boost-iterator", - "version>=" : "1.88.0" - }, { - "name" : "boost-lexical-cast", - "version>=" : "1.88.0" - }, { - "name" : "boost-move", - "version>=" : "1.88.0" - }, { - "name" : "boost-mp11", - "version>=" : "1.88.0" - }, { - "name" : "boost-mpl", - "version>=" : "1.88.0" - }, { - "name" : "boost-multi-index", - "version>=" : "1.88.0" - }, { - "name" : "boost-numeric-conversion", - "version>=" : "1.88.0" - }, { - "name" : "boost-optional", - "version>=" : "1.88.0" - }, { - "name" : "boost-pool", - "version>=" : "1.88.0" - }, { - "name" : "boost-predef", - "version>=" : "1.88.0" - }, { - "name" : "boost-preprocessor", - "version>=" : "1.88.0" - }, { - "name" : "boost-program-options", - "version>=" : "1.88.0" - }, { - "name" : "boost-range", - "version>=" : "1.88.0" - }, { - "name" : "boost-ratio", - "version>=" : "1.88.0" - }, { - "name" : "boost-regex", - "version>=" : "1.88.0" - }, { - "name" : "boost-smart-ptr", - "version>=" : "1.88.0" - }, { - "name" : "boost-static-assert", - "version>=" : "1.88.0" - }, { - "name" : "boost-system", - "version>=" : "1.88.0" - }, { - "name" : "boost-thread", - "version>=" : "1.88.0" - }, { - "name" : "boost-throw-exception", - "version>=" : "1.88.0" - }, { - "name" : "boost-tokenizer", - "version>=" : "1.88.0" - }, { - "name" : "boost-tuple", - "version>=" : "1.88.0" - }, { - "name" : "boost-type-erasure", - "version>=" : "1.88.0" - }, { - "name" : "boost-type-index", - "version>=" : "1.88.0" - }, { - "name" : "boost-type-traits", - "version>=" : "1.88.0" - }, { - "name" : "boost-typeof", - "version>=" : "1.88.0" - }, { - "name" : "boost-uninstall", - "version>=" : "1.88.0" - }, { - "name" : "boost-unordered", - "version>=" : "1.88.0" - }, { - "name" : "boost-utility", - "version>=" : "1.88.0" - }, { - "name" : "boost-variant2", - "version>=" : "1.88.0" - }, { - "name" : "boost-vmd", - "version>=" : "1.88.0" - }, { - "name" : "boost-winapi", - "version>=" : "1.88.0" - }, { - "name" : "mqtt-cpp", - "version>=" : "13.2.1" - }, { - "name" : "vcpkg-boost", - "version>=" : "2025-03-29" - }, { - "name" : "vcpkg-cmake-config", - "version>=" : "2024-05-23" - }, { - "name" : "vcpkg-cmake", - "version>=" : "2024-04-23" - }, { - "name" : "nlohmann-json", - "version>=" : "3.12.0" - }, { - "name" : "spdlog", - "version>=" : "1.15.3" - }, { - "name" : "cpp-httplib", - "version>=" : "0.20.1" - }, { - "name" : "cppcodec", - "version>=" : "0.2#4" - }, { - "name" : "icu", - "version>=" : "74.2#5" - } ], - "overrides" : [ { - "name" : "cpp-httplib", - "version" : "0.10.3" - } ] + "name": "dal", + "version-string": "1.0.0", + "builtin-baseline": "e3ed41868d5034bc608eaaa58383cd6ecdbb5ffb", + "dependencies": [ + { + "name": "boost-asio", + "version>=": "1.88.0" + }, + { + "name": "mqtt-cpp", + "version>=": "13.2.1" + }, + { + "name" : "boost-array", + "version>=" : "1.88.0" + }, + { + "name": "nlohmann-json", + "version>=": "3.12.0" + }, + { + "name": "spdlog", + "version>=": "1.15.3" + }, + { + "name": "cpp-httplib", + "version>=": "0.20.1" + }, + { + "name": "cppcodec", + "version>=": "0.2#4" + }, + { + "name": "icu", + "version>=": "74.2#5" + } + ], + "overrides": [ + { + "name": "cpp-httplib", + "version": "0.10.3" + } + ] } \ No newline at end of file