进出场流程详解.md 5.5 KB

智慧停车进出场流程详解

更新日期:2026-08-07 本文档描述当前已实现的统一进出场主路径。

1. 核心原则

  1. 所有触发方式先定位设备和通道,再进入统一通行服务。
  2. 一辆车一次在场过程只能有一个未关闭的停车会话。
  3. 入场原子创建停车会话和数字票;支付、出场均定位同一会话。
  4. 支付事实写入支付流水,通道和设备事实写入停车会话快照。
  5. 开闸是业务成功后的设备动作;闸机失败必须向操作员返回“业务已完成、设备动作失败”的明确状态。

2. 触发入口

来源 车辆标识 当前状态 进入方式
UHF RFID RFID,可带车牌 已实现 设备事件调用 PassageService.HandlePassage
工作台人工操作 车牌或 RFID 已实现 entryExit.vue 调用 /vehicle/passage
票机按钮 票机输入/临时车 已实现,待现场验收 创建入场会话、数字票并打印小票
摄像头识别 车牌 未实现 规划接入同一 PassageService

3. 进场流程

识别车辆
  -> 通过 device_code 查询 UHF 设备和绑定通道
  -> 校验设备启用、通道方向、停车场归属、黑名单、临停规则
  -> 按车牌/RFID 定位是否存在未关闭停车会话
  -> 不存在:创建会话 + 数字票
  -> 保存入口通道和设备快照
  -> 更新车辆最近入场时间
  -> 请求开闸

3.1 入场数据写入

对象 入场写入内容
停车会话 vehicle_record 车牌、RFID、入场时间、停车场、停车位、入口图片、入口通道/设备 ID、编码、名称
数字票 digital_ticket 票号、入场来源、会话 ID、pending_payment 状态、事件日志
车辆 vehicle 最近入场时间

同一车牌或 RFID 已存在未关闭会话时,入场会被拒绝,不会重复建票。

4. 出场与结算流程

识别车辆
  -> 定位未关闭停车会话和数字票
  -> 计算当前费用,返回出场预览
  -> 判断数字票是否已支付
     -> 已支付:直接进入出场确认
     -> 未支付且应收为零:免费放行确认
     -> 未支付且应收大于零:选择支付入口和支付方式完成结算
  -> 写支付流水、更新会话支付摘要、数字票 -> paid
  -> 保存出口通道和设备快照,关闭会话,数字票 -> exited
  -> 更新车辆最近出场时间、累计停车时长和费用
  -> 请求开闸

4.1 支付判断

场景 处理
已支付数字票 不再次收费,直接消费原支付记录并确认出场
零费用、白名单或免费放行 生成零金额结算记录后出场
人工现金 校验实收不低于应收,记录找零
POS/扫码 由已配置支付入口和方式决定;真实设备或网关回调待接入时不得伪造成功
重复请求 已支付或已关闭会话会被拒绝,避免重复收费和重复出场

5. 通道与设备快照

停车会话保存下列字段:

阶段 字段
入场 entry_channel_identry_channel_codeentry_channel_nameentry_device_codeentry_device_name
出场 exit_channel_idexit_channel_codeexit_channel_nameexit_device_codeexit_device_name

进出记录详情优先显示名称;编码为名称缺失或配置已删除时的回退值。ID 仅用于关联和查询,不直接作为运营页面的主要显示内容。

6. 状态关系

停车会话 数字票 含义
exit_time IS NULL + payment_status=unpaid pending_payment 在场待支付
exit_time IS NULL + payment_status=paid paid 已支付待离场
exit_time IS NOT NULL exited 已离场

payment_record 不承担状态机角色,它记录每次实际结算的金额和操作员,是财务对账依据。

7. 闸机处理

开闸和关闸由统一闸机控制服务封装。进出场业务先完成数据库事务,再下发开闸指令:

  • 开闸成功:返回通行成功和闸机已开启。
  • 开闸失败:返回业务已完成、闸机失败,避免操作员误以为可以重复收费或重新出场。
  • 无真实设备时:可使用已启用的模拟设备完成工作台流程验证。

8. 异常与人工兜底

异常 当前处理 后续完善
黑名单车辆 拦截通行 增加异常处置记录和审批
无未关闭会话的出场 拒绝出场 增加无票/丢票人工处理工作流
闸机失败 业务状态保留,返回设备失败 增加重试、告警和人工确认
设备离线 禁止使用该设备通行 增加离线事件和仪表盘告警
摄像头未识别 当前未接入 接入 OCR 后进入同一通行入口

9. 关键代码入口

节点 文件 关键方法
统一通行 internal/service/parking/passage.go HandlePassage
停车会话 internal/modules/parking-session/service/service.go OpenSessionTxResolveActiveSessionTxCloseSessionTx
车辆进出场 internal/service/vehicle/vehicle.go VehicleEntryExitPreviewExitConfirm
支付 internal/modules/payment/service/service.go ProcessPaymentTxAtEntry
数字票 internal/modules/digital-ticket/service/service.go CreateTxMarkPaidAndExitedTx
闸机 internal/service/parking/gate.go 开闸、关闸、设备状态