123 lines
5.6 KiB
Markdown
123 lines
5.6 KiB
Markdown
# 任务进度 (由 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. **存储优化:**
|
||
- 大幅减少数据库存储空间使用
|
||
- 提高查询性能,因为数据量显著减少
|
||
- 简化数据管理和维护工作
|
||
|
||
**技术优势:**
|
||
- 避免不必要的数据持久化开销
|
||
- 专注于无人车数据的轨迹回放和审计需求
|
||
- 保持实时处理性能,航空器和特种车辆数据直接用于碰撞检测 |