日期:2026-07-17 | 优先级:P0-3
在出场环节增加收费结算流程。临时车人工收费(现金),月租/VIP 车自动免密放行。架构上预留 POS 机、扫码支付的扩展入口。
输入车牌 → 查询车辆
├─ 月租/VIP(is_system=false)→ 点"确认出场" → 免密 → 自动放行
└─ 临时车(is_system=true)→ 显示费用
├─ 应付金额
├─ 支付方式:[现金] [扫码(预留)] [POS(预留)]
└─ 现金模式:
├─ 收费员输入实收金额
├─ 系统自动计算找零
└─ "确认收款" → 创建支付记录 → 出场+开闸
PaymentMethod 常量(cash / free / pos / wechat / alipay)payment_methodpaymentMethodList 渲染,新增只需加数组项payment_record| 字段 | 类型 | 说明 |
|---|---|---|
| id | uint | 主键 |
| record_id | uint | 关联 vehicle_record.id |
| payment_method | string | cash / free / pos / wechat / alipay |
| amount | float64 | 应收金额 |
| paid_amount | float64 | 实收金额(现金时由收费员输入) |
| change_amount | float64 | 找零 |
| operator_id | uint | 收费员用户ID |
| paid_at | datetime | 支付时间 |
| remark | string | 备注 |
| 字段 | 类型 | 说明 |
|---|---|---|
| payment_method | string | 支付方式 |
POST /vehicle/exit/preview
Request: { plate_number, rfid_tag }
Response: { plate_number, entry_time, stay_time, fee, vehicle_type, is_temp }
不修改数据库,仅查询进场记录 + 计算费用。
POST /vehicle/exit/confirm
Request: { plate_number, rfid_tag, payment_method, paid_amount }
Response: { plate_number, entry_time, exit_time, stay_time, fee, change_amount, payment_method }
payment_method=free 时:paid_amount=0,直接放行。
查询到车辆后,根据 is_temp 分两路:
直接显示"确认出场"按钮 → 调 /vehicle/exit/confirm(payment_method=free)
显示费用信息 + 支付方式选择 + 现金输入(选现金时) + "确认收款"按钮
┌───────────────────────────────────┐
│ 出场信息 │
│ 车牌: 粤A12345 进场: 10:30 │
│ 停留: 2小时15分 应收: ¥15.00 │
│ │
│ 支付方式: [现金] [扫码] [POS] │
│ │
│ 实收金额: [______] 元 │
│ 找零: ¥5.00 │
│ │
│ [确认收款并放行] │
└───────────────────────────────────┘
| 文件 | 操作 | 说明 |
|---|---|---|
internal/dao/payment_record.go |
新增 | 支付记录 DAO |
internal/dao/vehicle_record.go |
修改 | 加 payment_method 字段 |
internal/model/vehicle/request/vehicle.go |
修改 | 新增 ExitPreview / ExitConfirm 请求 |
internal/service/vehicle/vehicle.go |
修改 | 拆出 Preview / Confirm 方法 |
internal/api/v1/vehicle/vehicle.go |
修改 | 新增路由 handler |
internal/router/vehicle/vehicle.go |
修改 | 注册新路由 |
frontend/src/view/parking/entryExit.vue |
修改 | 出场 Tab 增加收费 UI |
frontend/src/api/vehicle.js |
修改 | 新增 preview / confirm API |
| 场景 | 处理 |
|---|---|
| 现金收不够 | 前端校验:实收 < 应收,提示"金额不足" |
| 金额输入非数字 | 前端过滤,仅允许数字和点 |
| 已出场的车再次点出场 | 后端 preview 返回错误 |
| 免密车类型不对 | confirm 时二次校验 is_system |