|
@@ -0,0 +1,91 @@
|
|
|
|
|
+# 取票打印 + 扫码出场 — 设计文档
|
|
|
|
|
+
|
|
|
|
|
+> 日期:2026-07-30 | 优先级:P0-4
|
|
|
|
|
+
|
|
|
|
|
+## 1. 目标
|
|
|
|
|
+
|
|
|
|
|
+实现临时车取票入场、扫码出场。入场时票机按钮触发打印二维码小票,出场时扫码枪扫描小票二维码查询数字票并结算。
|
|
|
|
|
+
|
|
|
|
|
+## 2. 硬件架构
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+入场:打印机按钮 → 串口 → PC → 后端 → ESC/POS 打印
|
|
|
|
|
+出场:扫码枪(USB键盘) → PC → entryExit.vue → 后端查询 ticket
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 3. 数据模型
|
|
|
|
|
+
|
|
|
|
|
+### printer 设备配置表
|
|
|
|
|
+
|
|
|
|
|
+| 字段 | 类型 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| id | uint | 主键 |
|
|
|
|
|
+| name | string | 打印机名称 |
|
|
|
|
|
+| port_name | string | COM端口名(如 COM3) |
|
|
|
|
|
+| baud_rate | int | 波特率(默认 9600) |
|
|
|
|
|
+| status | string | online / offline |
|
|
|
|
|
+| location | string | 安装位置(入口/出口) |
|
|
|
|
|
+
|
|
|
|
|
+复用现有 `vehicle_record` + `digital_ticket`(无车牌,trigger_mode=ticket_machine)。
|
|
|
|
|
+
|
|
|
|
|
+## 4. 入场流程
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+驾驶员按票机按钮 → 串口接收 → POST /ticket-machine/button
|
|
|
|
|
+ ├─ 创建 vehicle_record(无车牌)
|
|
|
|
|
+ ├─ 创建 digital_ticket (trigger_mode=ticket_machine)
|
|
|
|
|
+ ├─ ESC/POS 打印小票
|
|
|
|
|
+ │ 内容:停车场名称 / 入场时间 / 票号 / ticket_no 二维码
|
|
|
|
|
+ └─ GateOpener 抬杆
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 5. 出场流程
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+扫码枪扫小票 → entryExit.vue 监听输入 → 自动填入 ticket_no
|
|
|
|
|
+ ├─ GET /digital-ticket/{ticketNo}
|
|
|
|
|
+ ├─ ExitPreview → 计费
|
|
|
|
|
+ ├─ 支付(现金/POS/扫码)
|
|
|
|
|
+ └─ ExitConfirm → 抬杆
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 6. 后端新增
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 说明 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `internal/dao/printer.go` | 打印机设备 DAO |
|
|
|
|
|
+| `internal/modules/printer/api.go` | 打印机管理 + 按钮事件 API |
|
|
|
|
|
+| `internal/modules/printer/service/service.go` | ESC/POS 指令封装 + 串口通信 |
|
|
|
|
|
+| `internal/modules/printer/service/escpos.go` | ESC/POS 协议常量与指令构建 |
|
|
|
|
|
+
|
|
|
|
|
+## 7. ESC/POS 小票模板
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+ ┌──────────────┐
|
|
|
|
|
+ │ 龙弛智慧停车 │ (居中)
|
|
|
|
|
+ │ LC PARKING │
|
|
|
|
|
+ │──────────────│
|
|
|
|
|
+ │ 入场时间 │
|
|
|
|
|
+ │ 2026-07-30 │
|
|
|
|
|
+ │ 10:30:00 │
|
|
|
|
|
+ │ │
|
|
|
|
|
+ │ [二维码] │
|
|
|
|
|
+ │ │
|
|
|
|
|
+ │ NO: ts_xxx │
|
|
|
|
|
+ │──────────────│
|
|
|
|
|
+ │ 请保留此小票 │
|
|
|
|
|
+ │ 出场扫码缴费 │
|
|
|
|
|
+ └──────────────┘
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 8. 文件变更
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 操作 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `internal/dao/printer.go` | 新建 |
|
|
|
|
|
+| `internal/modules/printer/api.go` | 新建 |
|
|
|
|
|
+| `internal/modules/printer/service/service.go` | 新建 |
|
|
|
|
|
+| `internal/modules/printer/service/escpos.go` | 新建 |
|
|
|
|
|
+| `internal/initialize/gorm.go` | 修改 |
|
|
|
|
|
+| `internal/initialize/router.go` | 修改 |
|
|
|
|
|
+| `frontend/src/view/parking/entryExit.vue` | 修改(出场监听扫码枪输入) |
|