QAUP_Management/.kiro/specs/traffic-light-ip-address-enhancement/tasks.md

3.3 KiB
Raw Blame History

实现计划

  • 1. 修改数据库表结构

    • 创建数据库迁移脚本为traffic_lights表添加ip_address和port字段
    • 修改device_id字段为可选允许NULL
    • 添加IP地址和端口组合的唯一约束索引
    • 为现有记录设置默认IP地址和端口值
    • 需求: 2.1, 2.2, 2.3, 2.5
  • 2. 更新TrafficLight实体类

    • 在TrafficLight实体类中添加ipAddress和port字段
    • 修改deviceId字段的JPA注解移除nullable=false约束
    • 添加IP地址和端口字段的验证注解
    • 更新构造函数和getter/setter方法
    • 需求: 2.1, 2.2, 2.3
  • 3. 增强TrafficLightRepository接口

    • 添加findByIpAddressAndPort方法支持基于IP和端口查询设备
    • 添加findByIpAddress方法支持基于IP地址查询设备列表
    • 添加existsByIpAddressAndPort方法检查IP端口组合是否存在
    • 保持现有的findByDeviceId方法以维持兼容性
    • 需求: 2.4, 2.5
  • 4. 修改TrafficLightSignalParser解析器

    • 实现parseSignalWithAddress方法解析包含IP和端口信息的消息格式
    • 添加extractIpAddress方法使用正则表达式提取IP地址
    • 添加extractPort方法提取端口号并转换为整数
    • 添加extractDiData方法提取DI信号JSON数据部分
    • 更新isValidSignal方法验证新的消息格式
    • 需求: 1.1, 1.2, 1.3, 1.4, 1.6
  • 5. 更新TrafficLightStatus数据模型

    • 在TrafficLightStatus类中添加ipAddress和port字段
    • 添加generateDeviceIdentifier方法当deviceId为空时生成IP:端口标识符
    • 更新构造函数和相关方法
    • 确保与现有代码的兼容性
    • 需求: 1.3, 1.5
  • 6. 增强TrafficLightService服务类

    • 实现getOrCreateDeviceByAddress方法根据IP和端口获取或创建设备
    • 实现findDeviceByAddress方法根据IP和端口查找设备
    • 实现updateDeviceHeartbeatByAddress方法基于IP和端口更新心跳
    • 添加generateDefaultDeviceName方法生成默认设备名称
    • 需求: 2.4, 2.5
  • 7. 修改DataProcessingService处理逻辑

    • 更新processTrafficLightSignal方法使用增强的解析器处理消息
    • 修改设备查找逻辑优先使用IP地址和端口进行设备匹配
    • 更新设备心跳更新逻辑基于IP地址和端口进行更新
    • 添加异常处理,确保解析失败时不影响系统稳定性
    • 需求: 1.3, 1.5, 1.6
  • 8. 编写单元测试

    • 为TrafficLightSignalParser编写消息解析测试覆盖各种消息格式
    • 为TrafficLightService编写设备管理测试测试基于IP地址的操作
    • 为TrafficLightRepository编写数据访问测试
    • 测试异常情况处理如格式错误、IP地址无效等
    • 需求: 1.4, 1.6, 2.5
  • 9. 执行数据库迁移和测试

    • 在开发环境执行数据库迁移脚本
    • 验证现有数据的兼容性和完整性
    • 测试新的唯一约束是否正确工作
    • 验证索引创建和查询性能
    • 需求: 2.1, 2.2, 2.3, 2.5
  • 10. 集成测试和验证

    • 使用实际的红绿灯消息格式进行端到端测试
    • 验证IP地址和端口信息的正确提取和存储
    • 测试设备自动创建和更新功能
    • 验证WebSocket消息中包含正确的IP地址和端口信息
    • 需求: 1.1, 1.2, 1.3, 1.4, 1.5, 2.4