QAUP_Management/doc/work/GeopositionController业务逻辑修正_20250115.md
Tian jianyong 5e1e9f4507 统一了前后端到一个项目,实现了无人车的位置和超速检测,并发送到前端。
管理端在 Ruoyi 框架的基础上,对菜单进行了修改,并添加了司机信息、车辆信息和车辆类型管理。
2025-07-08 20:04:14 +08:00

2.5 KiB
Raw Permalink Blame History

GeopositionController业务逻辑修正报告

报告日期: 2025-01-15
版本: 0.1.9
修正类型: WebSocket接口Map key业务逻辑修正

问题发现

在数据模型统一重构过程中发现GeopositionController中的Map key逻辑存在业务语义问题

  • 之前设计使用车牌号licensePlate作为Map的key
  • 错误修改在类型修复过程中误将Map key改为vehicleId
  • 用户反馈指出这个修改不合理影响了API的业务语义

修正分析

为什么使用车牌号作为key更合理

  1. 业务语义

    • 车牌号是业务层面的标识符,对用户更直观
    • 前端展示时用户能直接理解和使用
    • 符合业务逻辑的自然表达
  2. API设计原则

    • 对外API接口应使用业务标识符
    • 内部数字IDvehicleId应仅用于数据库层面
    • 提高API的可读性和可维护性
  3. 前端友好性

    • 前端可以直接使用车牌号进行展示
    • 无需额外的ID到车牌号的转换
    • 便于调试和数据验证

修正实施

修正的方法

  1. getAllVehiclePositions方法

    // 修正前
    location -> String.valueOf(location.getVehicleId())
    
    // 修正后
    VehicleLocation::getLicensePlate
    
  2. getVehiclesByType方法

    // 修正前
    location -> String.valueOf(location.getVehicleId())
    
    // 修正后
    VehicleLocation::getLicensePlate
    
  3. 文档更新

    • 更新返回值文档:(licensePlate -> VehicleLocation)
    • 明确Map key的业务语义

技术影响

正面影响

  • 恢复了正确的业务语义
  • 提高了API的可读性和可维护性
  • 符合前端的使用习惯
  • 保持了与现有业务逻辑的一致性

无负面影响

  • 编译正常通过
  • 无需修改其他相关代码
  • 不影响数据库层面的查询优化

经验总结

设计原则

  1. 数据库层面使用vehicleIdLong作为主键和外键关联
  2. 业务层面使用licensePlateString作为业务标识符
  3. API层面:优先使用业务标识符,提高可读性

修改流程

  1. 在进行类型修复时,需要区分技术标识符和业务标识符
  2. 对API接口的修改需要从业务语义角度考虑
  3. 及时响应用户反馈,快速修正设计问题

验证结果

  • 编译测试通过
  • 业务逻辑正确
  • API语义清晰
  • 版本文档更新完成