You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

停车场车辆进出IT功能开发问题:离场价格与数据更新异常

停车场离场功能问题排查与修复

背景

已完成停车场车辆入场功能(数据库记录停车票、更新车位状态),离场功能需实现:更新车位状态、记录离场时间、计算停车费用,但目前存在两个问题:

  • 停车费用始终为0
  • 车辆离场后直接再次入场,数据库无法正确更新

测试代码

@Test
public void testParkingACar(){
    ParkingService parkingService = new ParkingService(inputReaderUtil, parkingSpotDAO, ticketDAO);
    parkingService.processIncomingVehicle();
    //TODO: check that a ticket is actually saved in DB and Parking table is updated with availability  
    Date inTime = new Date(System.currentTimeMillis() - (  45 * 60 * 1000));

    Ticket ticket = ticketDAO.getTicket("ABCDEF");
    ticket.setInTime(inTime);

    Assert.assertNotNull(ticket.getInTime());
}

@Test
public void testParkingLotExit(){
    testParkingACar();
    ParkingService parkingService = new ParkingService(inputReaderUtil, parkingSpotDAO, ticketDAO);
    parkingService.processExitingVehicle();
    // TODO: check that the fare generated and out time are populated correctly in
    // the database
    Ticket ticket = ticketDAO.getTicket("ABCDEF");


    Assert.assertNotNull(ticket.getPrice());
    Assert.assertNotNull(ticket.getOutTime());
    assertEquals(0.75*Fare.CAR_RATE_PER_HOUR, ticket.getPrice());
}

问题分析与修复建议

1. 停车费用始终为0

可能原因

  • processExitingVehicle未实现费用计算逻辑,或计算后未将结果同步到数据库
  • 测试代码中修改ticket.inTime后未更新到数据库,导致费用计算时使用的入场时间不正确
  • 费率引用错误或时长计算逻辑错误

修复步骤

  • 完善processExitingVehicle的费用计算逻辑:
    1. 从数据库获取对应ticket的真实入场时间
    2. 计算停车时长:(outTime.getTime() - inTime.getTime()) / (60*60*1000)(转换为小时数)
    3. 计算费用:时长 * Fare.CAR_RATE_PER_HOUR
    4. 将计算后的price设置到ticket对象,调用ticketDAO.update(ticket)同步到数据库
  • 修正测试代码:在testParkingACar中设置ticket.inTime后,需调用ticketDAO.update(ticket)确保数据库中的入场时间被更新

2. 离场后再次入场数据库无法正确更新

可能原因

  • 离场时未将对应车位的状态重置为可用(available=true),导致入场时无法分配到该车位
  • 离场时未标记ticket为已完成(如未设置outTime或状态字段),再次入场时复用旧ticket数据
  • 事务未正确提交,离场操作的修改未持久化到数据库
  • 测试代码中重复创建ParkingService实例,导致DAO上下文不一致

修复步骤

  • 完善processExitingVehicle的离场逻辑:
    1. 根据ticket关联的车位ID,获取车位对象并将available设为true,调用parkingSpotDAO.update(parkingSpot)更新数据库
    2. 设置ticket的outTime为当前时间,可添加status字段标记为已离场,同步更新到数据库
  • 入场功能processIncomingVehicle需过滤出available=true的车位进行分配
  • 确保离场、入场操作在事务中执行,操作完成后提交事务
  • 优化测试代码:复用同一个ParkingService和DAO实例,避免重复创建导致的数据不一致问题

内容的提问来源于stack exchange,提问作者Moutaz Abdelhadey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:50:21