QDAirPortBackend0122/AGENTS.md

5.5 KiB
Raw Permalink Blame History

注意事项

一定要注意文件编码问题,有可能会引起字符错乱 这是后端项目,前端系统不在这个项目里

项目运行环境

这是开发环境运行环境在centos7的容器里分别为 qaup-app qaup-redis qaup-postgis

Docker/日志/数据库定位

  • 后端应用容器:qaup-app
  • Redis 容器:qaup-redis
  • PostGIS/PostgreSQL 容器:qaup-postgis
  • 后端主日志优先看宿主机路径:/home/project_20250804/offline-deploy/logs/app/sys-info.log,历史滚动日志类似 sys-info.2026-04-28.2.log
  • 容器 overlay 中也可能有同一份日志:/var/lib/docker/overlay2/.../merged/logs/sys-info*.log
  • 碰撞测试独立日志在 qaup-app 容器内:/logs/collision-tests/。启动时主日志会打印:Collision test session file log initialized: enabled=true, directory=/logs/collision-tests
  • 按车牌或航班查测试日志:docker exec qaup-app sh -c 'grep -R -l "TEST003" /logs/collision-tests 2>/dev/null'
  • /home/project_20250804/qaup/logs 下看到的 mock_traffic_light.logmock_unmanned_vehicle.log 是模拟器日志,不是 qaup-app 主应用日志。
  • qaup-app 容器内通常没有 psql,查库优先用:docker exec qaup-postgis psql -U postgres -d qaup -c "SQL"
  • 已确认数据库环境变量示例:DB_HOST=172.17.0.4DB_PORT=5432DB_USERNAME=postgresDB_PASSWORD=123456DB_NAME=qaup

碰撞测试流程排查要点

  • /api/VehicleRegistry 是全量覆盖注册,不是增量追加。
  • 测试会话日志关键字:collision test session startedcollision test session replacedcollision-diagnostic
  • 诊断日志中重点看:collisionManagedObjectspairsSupportedmissingRouterouteDeviationspeedTooLowthresholdNotReachedeventsPublished
  • 如果 pairsTotal=0,说明参与碰撞检测的对象不足两个,先查注册对象和实时位置对象是否匹配。
  • 如果 routeDeviation>0,说明实时位置距离后端绑定路线过远,优先查本轮路线绑定是否正确。
  • 路径绑定表是 object_route_assignments,真实字段为:idobject_typeobject_nameassigned_route_idassigned_at。不要使用 object_idroute_idroute_name 这些不存在的字段。
  • 查对象路线绑定示例:docker exec qaup-postgis psql -U postgres -d qaup -c "select object_type, object_name, assigned_route_id, assigned_at from object_route_assignments where object_name in ('MU2465','TEST003') order by assigned_at desc;"
  • 如需看路线名称,连接 transport_routesdocker exec qaup-postgis psql -U postgres -d qaup -c "select a.object_type, a.object_name, a.assigned_route_id, r.name, a.assigned_at from object_route_assignments a left join transport_routes r on r.id = a.assigned_route_id where a.object_name in ('MU2465','TEST003') order by a.assigned_at desc;"
  • 历史上曾出现同一对象编号跨类型或旧路线残留导致误判,注册覆盖时需要同步清理旧路径绑定。

碰撞现场测试快速流程

  • 测试开始后先定位本次独立测试日志:docker exec qaup-app sh -c 'ls -lt /logs/collision-tests | head -20'
  • 已知车牌或航班号时,直接按对象编号找日志文件:docker exec qaup-app sh -c 'grep -R -l "TEST003" /logs/collision-tests 2>/dev/null'
  • 找到日志后优先看方向锁定和碰撞计算链路:docker exec qaup-app sh -c 'grep -E "DIRECTION_LOCK|DIRECTION_LOCK_FAILED|PAIR_RESULT|PATH_CONFLICT_POINT_SENT|EVENT_PUBLISHED|CYCLE" /logs/collision-tests/具体文件名.log'
  • 不知道具体日志名但知道对象编号时,可一条命令定位并查看:docker exec qaup-app sh -c 'f=$(grep -R -l "TEST003" /logs/collision-tests 2>/dev/null | tail -1); echo $f; grep -E "DIRECTION_LOCK|DIRECTION_LOCK_FAILED|PAIR_RESULT|PATH_CONFLICT_POINT_SENT|EVENT_PUBLISHED|CYCLE" "$f"'
  • 方向锁定判断:正常应看到 DIRECTION_LOCK;如果看到 DIRECTION_LOCK_FAILED,先看原因是否为 initial_position_too_close_to_conflict_pointconflict_points_on_both_sides
  • 本项目碰撞测试要求:车和飞机不必停在路线起点,但应能投影到绑定路线,并且测试开始时不要贴近冲突点,建议距离冲突点至少 10-20米,避免定位抖动触发方向无法锁定。
  • 前端 WebSocket 调试消息看 type=path_conflict_status,重点看 payload.calculationStatuspayload.directionLockStatuspayload.directionLockReasonpayload.vehicleDistanceToConflictMeterspayload.aircraftDistanceToConflictMeterspayload.object1ForwardDistanceMeterspayload.object2ForwardDistanceMeters
  • 正常测试现象:directionLockStatus=DIRECTION_LOCKED,车和飞机到冲突点的距离逐步变小;达到预警/告警阈值后后端发预警/告警,车辆停车;飞机越过冲突点并超过解除距离后车辆恢复通行。
  • 如果前端看到距离不变大/不变小,先对照测试日志中的 forwardDistancePAIR_RESULT 和路线绑定表,判断是定位数据问题、路线绑定问题,还是方向未锁定问题。

红绿灯接入说明

  • 正式环境中qaup-app 的红绿灯接入方式为 MQTT不是 HTTP。
  • 正式环境配置中 traffic.light.tcp.enabled=falsetraffic.light.mqtt.enabled=true
  • MQTT Broker 地址示例:tcp://10.64.58.228:8082,订阅 Topic 示例:cusc/v2/SF053/QingDrsu001/data
  • 注意区分 MQTT Broker 的 TCP 连接地址与业务 TCP 直连服务,前者不是“红绿灯走 TCP 直连”的意思。