需求:config.ini [weight] 段 flagWeight=1 时,飞书消息附带重量数据
实现:
g_flag_weight,控制飞书消息是否带重量send_feishu_msg() 函数,增加 weight_kg 参数g_flag_weight=true && weight_kg >= 0 时,附加重量信息影响文件:
src/common.h: 新增 extern bool g_flag_weight;src/common.cpp: 定义 bool g_flag_weight = false;src/config.cpp: flagWeight=1 时同步设置 g_flag_weightsrc/feishu_client.h: send_feishu_msg() 新增 double weight_kg = -1.0 参数src/feishu_client.cpp: 当 g_flag_weight && weight_kg >= 0 时附加重量src/web_server.cpp: 进站/出站调用 send_feishu_msg 时传入重量参数根因:plate_recognizer.cpp 中 is_inbound/is_outbound 使用原始 cap_info 而非 effective_cap_info
影响:共享摄像头模式下进站/出站方向判断错误
修复:改为使用 effective_cap_info->dtype 判断方向
文件:src/plate_recognizer.cpp
根因:main.cpp 中 send_permanent_failure_alert 访问 cap_info_copy->dtype 前未检查 null
影响:cap_info_copy 为空时程序崩溃
修复:添加空指针前置检查
文件:src/main.cpp
根因:main.cpp 启动消息仍为 v43.2 fix19
修复:更新为 fix27 v44
文件:src/main.cpp
根因:parse_create_bill_response 每次都打印完整 API 响应到 stdout
修复:仅在 DEBUG_LOG 模式下打印
文件:src/network_client.cpp
根因:README 标注 C++23,CMakeLists.txt 实际设置 C++17
修复:README 更正为 C++17
文件:README.md
根因:脚本中直接硬编码 Token,推送到仓库会泄露凭证
修复:改为环境变量 GOGS_ACCESS_TOKEN 读取,保留默认值兼容
文件:sync_to_gogs.sh
根因:create_text_watermark() 中 putText() 起始位置固定为 cv::Point(40, 80),文字较长时右侧超出边界被截断
修复:新增 estimate_text_width() 函数估算文字宽度,计算居中位置 x = (width - text_width) / 2
影响文件:src/plate_recognizer.cpp
根因:web_server.cpp 中 upload_in_photos() 调用 db_wait_weight_by_plate() 只等 3 秒轮询数据库,但重量任务需要:读秤(~8秒)+API上传+写DB,3秒不够
修复:改用 weight_dispatch_wait_result()(promise/future 机制),超时 15 秒,直接获取重量结果
影响文件:src/web_server.cpp
#include "weight_dispatcher.h"db_wait_weight_by_plate → weight_dispatch_wait_result根因:weight_dispatch_wait_result() 在获取结果后会清理 entry(erase),导致:
upload_in_photos() 中第一次调用 → 获取结果并清理 entrymain.cpp 中第二次调用(Reporter 日志)→ entry 已被清理,返回 falseweight_dispatch_wait_result() 中的 erase 操作,entry 由 weight_dispatch_cleanup() 统一清理src/weight_dispatcher.cpp根因:v43 并行模式使用 weight_dispatcher.cpp 的 weight_worker_func,但该函数中没有 MQTT 发送逻辑。MQTT 发送只在旧版 weight_scale.cpp 的 weight_mqtt_worker_func 中实现
修复:在 weight_dispatcher.cpp 的 weight_worker_func 中添加步骤5:MQTT发布,格式与旧版一致
影响文件:src/weight_dispatcher.cpp
根因:修复 Bug #29 时移除了 weight_dispatch_wait_result() 中的 erase 操作,但 main.cpp 成功路径(正常路径 + 重试路径)未调用 weight_dispatch_cleanup(),导致 g_weight_results map 中 entry 永远不会被清理
修复:在两条成功路径的 Reporter 日志后追加 weight_dispatch_cleanup(plate_info->tb_num);
影响文件:src/main.cpp(重试路径 ~line 454、正常路径 ~line 748)
根因:send_permanent_failure_alert() 只检查了 g_suppress_emergency_alert,未检查 g_feishu_enabled。当用户设置 ENABLED=0 禁用飞书时,永久失败告警仍会通过飞书发送
修复:在函数入口处添加 if (!g_feishu_enabled) return false;
影响文件:src/feishu_client.cpp
| Bug # | 严重度 | 问题 |
|---|---|---|
| #27 | 中 | 水印文字超出右边界被截断 |
| #28 | 严重 | 飞书消息等待重量数据的时序问题(3秒不够) |
| #29 | 中 | weight_dispatch_wait_result 重复调用导致第二次返回 false |
| #30 | 严重 | v43 并行模式下 MQTT 消息未发送 |
| #31 | 严重 | 成功路径缺少 cleanup 导致 g_weight_results map 内存泄漏 |
| #32 | 中 | send_permanent_failure_alert 未检查 g_feishu_enabled,禁用飞书后告警仍发送 |
cd /opt/openAI/project/003.PlateRecAPP/
tar -xzf fix27_v44_bug28.tar.gz
make clean && make
sudo systemctl restart PlateRecApp
flagWeight=1 时,进站/出站消息应包含 重量: XXXXX kg (XX.X 吨)实现时间:2026-08-30
需求人:王海鹏
g_feishu_enabled 全局开关:
common.h / common.cpp:新增声明与定义(默认 false)config.cpp:[feishu] 段解析 ENABLED = 0|1web_server.cpp:进站/出站发送飞书消息前检查 g_feishu_enabledconfig.cpp:[MQTT] 段新增 MQTT_ENABLED = 0|1,不再依赖 MQTT_HOST 是否存在自动启用[feishu]
ENABLED = 1 # 1=启用飞书消息推送,0=禁用
[MQTT]
MQTT_ENABLED = 1 # 1=启用MQTT消息推送,0=禁用
| 文件 | 改动 |
|---|---|
src/common.h |
新增 extern bool g_feishu_enabled; |
src/common.cpp |
新增 bool g_feishu_enabled = false; |
src/config.cpp |
解析 ENABLED 和 MQTT_ENABLED;更新启动日志 |
src/web_server.cpp |
进站/出站飞书发送加 g_feishu_enabled 守卫;状态页新增飞书状态展示 |
src/feishu_client.cpp |
send_permanent_failure_alert 增加 g_feishu_enabled 检查 |
config一号门.ini |
新增 ENABLED=1、MQTT_ENABLED=1 |
config二号门.ini |
新增 ENABLED=1、MQTT_ENABLED=1 |