From 9012b447a0bf627f05be7319ebc41c4187ba9688 Mon Sep 17 00:00:00 2001 From: lzq <2495532633@qq.com> Date: Mon, 5 Jan 2026 11:48:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8D=A0=E7=94=A8=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/recognize_processor.cpp | 30 ++++++++++++++++++++++++++++++ src/recognize_processor.h | 9 +++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/recognize_processor.cpp b/src/recognize_processor.cpp index 18a85ce..9b4c582 100644 --- a/src/recognize_processor.cpp +++ b/src/recognize_processor.cpp @@ -11,6 +11,24 @@ namespace zsy { const std::string &sn = data->sn; const std::string &license = data->license; + { + std::lock_guard lock(tasks_mutex); + if (tasks.contains(sn)) + { + if (auto oldLicense = tasks.at(sn); oldLicense == license) + { + LOGGER_INFO("重复识别:{}、{}", sn, oldLicense); + } else + { + Application::deviceHolder->getSoundColumn(sn)->play("请等待前车业务完成后重新识别"); + LOGGER_INFO("当前道闸正在处理:{}、{}", sn, oldLicense); + } + return; + } else + { + tasks[sn] = license; + } + } try { std::jthread t; @@ -31,11 +49,23 @@ namespace zsy return; } addition_process(reportPassResult.data.orderNo, data); + { + std::lock_guard lock(tasks_mutex); + tasks.erase(sn); + } } catch (std::exception &e) { + { + std::lock_guard lock(tasks_mutex); + tasks.erase(sn); + } LOGGER_ERROR("车牌识别结果处理失败: {}", e.what()); } catch (...) { + { + std::lock_guard lock(tasks_mutex); + tasks.erase(sn); + } LOGGER_ERROR("未知异常,车牌识别结果处理失败"); } } diff --git a/src/recognize_processor.h b/src/recognize_processor.h index f958273..6ab0077 100644 --- a/src/recognize_processor.h +++ b/src/recognize_processor.h @@ -1,7 +1,9 @@ #ifndef RECOGNIZE_PROCESSOR_H #define RECOGNIZE_PROCESSOR_H #include +#include #include +#include #include "barrier/barrier.h" @@ -11,9 +13,12 @@ namespace zsy class RecognizeProcessor { public: - static void process(std::shared_ptr data); + inline static std::unordered_map tasks; + inline static std::mutex tasks_mutex; - static void addition_process(const std::string &orderNo,std::shared_ptr data); + static void process(std::shared_ptr data); + + static void addition_process(const std::string &orderNo, std::shared_ptr data); }; } // zsy