CollisionAvoidanceSystem/doc/work/unmanned_vehicle_control_implementation.md

5.6 KiB
Raw Permalink Blame History

任务进度 (由 EXECUTE 模式在每步完成后追加)

  • [2024-12-19 14:30]
    • 步骤1. 创建VehicleCommandEntity实体类和相关枚举
    • 修改创建VehicleCommandEntity.java使用现有CommandType、CommandReason、SignalState枚举
    • 更改摘要实现了完整的JPA实体包含PostGIS空间字段支持
    • 原因:执行计划步骤 1
    • 阻碍:无
    • 用户确认状态:成功
  • [2024-12-19 14:35]
    • 步骤2. 创建VehicleCommandRepository接口
    • 修改创建VehicleCommandRepository.java实现丰富的查询方法
    • 更改摘要包含按车辆ID、时间范围、指令类型查询以及统计和删除方法
    • 原因:执行计划步骤 2
    • 阻碍:无
    • 用户确认状态:成功
  • [2024-12-19 14:40]
    • 步骤3. 创建数据库迁移脚本添加vehicle_commands表
    • 修改创建V003__create_vehicle_commands_table.sql
    • 更改摘要包含完整表结构、PostGIS空间索引、性能优化索引和详细注释
    • 原因:执行计划步骤 3
    • 阻碍:无
    • 用户确认状态:成功
  • [2024-12-19 14:45]
    • 步骤4. 实现UnmannedVehicleController控制器
    • 修改创建UnmannedVehicleController.java实现三个API端点
    • 更改摘要包含控制指令、位置上报、状态查询接口使用现有Response类暂时注释掉服务依赖
    • 原因:执行计划步骤 4
    • 阻碍:无
    • 状态:待确认
  • [2024-12-19 14:50]
    • 步骤5. 实现UnmannedVehicleControlService服务类
    • 修改创建UnmannedVehicleControlService.java实现核心业务逻辑
    • 更改摘要包含控制指令处理、位置查询、状态查询功能支持外部API调用和本地数据构造集成VehicleCommandConverter转换器。根据用户反馈修正了位置查询逻辑确保从本地数据库筛选无人车数据而非直接调用外部接口
    • 原因:执行计划步骤 5
    • 阻碍:无
    • 用户确认状态:成功

架构决策记录

VehicleCommand类重复问题解决方案

问题: 用户发现存在两个相似的VehicleCommand类

  • src/main/java/com/dongni/collisionavoidance/dataCollector/model/VehicleCommand.java (原有DTO)
  • src/main/java/com/dongni/collisionavoidance/dataCollector/model/entity/VehicleCommandEntity.java (新建实体)

解决方案: 采用分层架构模式,两个类各司其职:

  1. VehicleCommand.java - API层数据传输对象(DTO)

    • 用于接收HTTP请求参数
    • 简单的POJO无JPA注解
    • 使用基本数据类型(double, long)
  2. VehicleCommandEntity.java - 数据持久化层实体

    • 用于数据库存储
    • 包含JPA注解和PostGIS支持
    • 包含审计字段和索引优化
  3. VehicleCommandConverter.java - 转换工具类

    • 负责DTO和Entity之间的数据转换
    • 处理时间戳格式转换
    • 处理PostGIS Point和经纬度的转换

优势:

  • 清晰的职责分离
  • API层和数据层解耦
  • 支持不同的数据格式需求
  • 便于后续扩展和维护

重要架构说明

无人车位置数据流向澄清

根据用户反馈和官方API文档分析无人车位置数据的正确架构如下

数据采集层面:

  1. 机场统一车辆位置接口 (/openApi/getCurrentVehiclePositions) - 包含所有类型车辆数据
  2. 无人车厂商专用接口 (/api/VehicleLocationInfo) - 仅包含无人车数据

数据存储层面:

  • 所有车辆数据包括无人车统一存储在PostGIS数据库中
  • 通过MovingObjectType.UNMANNED_VEHICLE标识无人车数据
  • 支持按车辆类型进行数据筛选和查询

API服务层面

  • 我们的系统对外提供 /api/VehicleLocationInfo 接口
  • 该接口从统一的车辆位置数据中筛选出无人车数据返回
  • 不是直接转发外部接口,而是基于本地数据库查询

修正说明:

  • UnmannedVehicleControlService.getVehicleLocations() 已修正为从本地数据库筛选无人车数据
  • 添加了车辆类型验证,确保只返回无人车类型的位置信息
  • 保持了与官方API文档的一致性

数据持久化策略重要修正

用户纠正: 除了无人车之外,其他车辆的位置数据不存数据库

正确的数据持久化策略:

  • 无人车位置数据 - 存储到数据库(用于轨迹回放和日志审计)
  • 无人车控制指令 - 存储到数据库(用于日志审计)
  • 航空器位置数据 - 仅用于实时处理,不存储
  • 特种车辆位置数据 - 仅用于实时处理,不存储
  • 红绿灯状态数据 - 仅用于实时处理,不存储

架构影响和修正:

  1. DataCollectorService修正

    • collectAircraftData() - 移除数据库存储逻辑,仅用于实时处理
    • collectVehicleData() - 移除数据库存储逻辑,仅用于实时处理
    • getCollectionStats() - 更新统计信息,明确数据持久化策略
  2. UnmannedVehicleControlService优化

    • getVehicleLocations() - 简化查询逻辑,因为数据库中只包含无人车数据
    • 移除不必要的车辆类型验证,因为数据库中只存储无人车数据
  3. 存储优化:

    • 大幅减少数据库存储空间使用
    • 提高查询性能,因为数据量显著减少
    • 简化数据管理和维护工作

技术优势:

  • 避免不必要的数据持久化开销
  • 专注于无人车数据的轨迹回放和审计需求
  • 保持实时处理性能,航空器和特种车辆数据直接用于碰撞检测