5.6 KiB
5.6 KiB
任务进度 (由 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(新建实体)
解决方案: 采用分层架构模式,两个类各司其职:
-
VehicleCommand.java - API层数据传输对象(DTO)
- 用于接收HTTP请求参数
- 简单的POJO,无JPA注解
- 使用基本数据类型(double, long)
-
VehicleCommandEntity.java - 数据持久化层实体
- 用于数据库存储
- 包含JPA注解和PostGIS支持
- 包含审计字段和索引优化
-
VehicleCommandConverter.java - 转换工具类
- 负责DTO和Entity之间的数据转换
- 处理时间戳格式转换
- 处理PostGIS Point和经纬度的转换
优势:
- 清晰的职责分离
- API层和数据层解耦
- 支持不同的数据格式需求
- 便于后续扩展和维护
重要架构说明
无人车位置数据流向澄清
根据用户反馈和官方API文档分析,无人车位置数据的正确架构如下:
数据采集层面:
- 机场统一车辆位置接口 (
/openApi/getCurrentVehiclePositions) - 包含所有类型车辆数据 - 无人车厂商专用接口 (
/api/VehicleLocationInfo) - 仅包含无人车数据
数据存储层面:
- 所有车辆数据(包括无人车)统一存储在PostGIS数据库中
- 通过
MovingObjectType.UNMANNED_VEHICLE标识无人车数据 - 支持按车辆类型进行数据筛选和查询
API服务层面:
- 我们的系统对外提供
/api/VehicleLocationInfo接口 - 该接口从统一的车辆位置数据中筛选出无人车数据返回
- 不是直接转发外部接口,而是基于本地数据库查询
修正说明:
- UnmannedVehicleControlService.getVehicleLocations() 已修正为从本地数据库筛选无人车数据
- 添加了车辆类型验证,确保只返回无人车类型的位置信息
- 保持了与官方API文档的一致性
数据持久化策略重要修正
用户纠正: 除了无人车之外,其他车辆的位置数据不存数据库
正确的数据持久化策略:
- ✅ 无人车位置数据 - 存储到数据库(用于轨迹回放和日志审计)
- ✅ 无人车控制指令 - 存储到数据库(用于日志审计)
- ❌ 航空器位置数据 - 仅用于实时处理,不存储
- ❌ 特种车辆位置数据 - 仅用于实时处理,不存储
- ❌ 红绿灯状态数据 - 仅用于实时处理,不存储
架构影响和修正:
-
DataCollectorService修正:
collectAircraftData()- 移除数据库存储逻辑,仅用于实时处理collectVehicleData()- 移除数据库存储逻辑,仅用于实时处理getCollectionStats()- 更新统计信息,明确数据持久化策略
-
UnmannedVehicleControlService优化:
getVehicleLocations()- 简化查询逻辑,因为数据库中只包含无人车数据- 移除不必要的车辆类型验证,因为数据库中只存储无人车数据
-
存储优化:
- 大幅减少数据库存储空间使用
- 提高查询性能,因为数据量显著减少
- 简化数据管理和维护工作
技术优势:
- 避免不必要的数据持久化开销
- 专注于无人车数据的轨迹回放和审计需求
- 保持实时处理性能,航空器和特种车辆数据直接用于碰撞检测