|
@@ -0,0 +1,98 @@
|
|
|
|
|
+# 交接班 + 收入报表 — 设计文档
|
|
|
|
|
+
|
|
|
|
|
+> 日期:2026-07-29 | 优先级:P1
|
|
|
|
|
+
|
|
|
|
|
+## 1. 目标
|
|
|
|
|
+
|
|
|
|
|
+实现操作员交接班管理和收入报表查询。交接班记录当班现金出入、自动统计收款并计算差异。收入报表按日/停车场汇总收入。
|
|
|
|
|
+
|
|
|
|
|
+## 2. 交接班
|
|
|
|
|
+
|
|
|
|
|
+### 数据模型
|
|
|
|
|
+
|
|
|
|
|
+新增 `shift_record` 表:
|
|
|
|
|
+
|
|
|
|
|
+| 字段 | 类型 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| id | uint | 主键 |
|
|
|
|
|
+| operator_id | uint | 操作员 |
|
|
|
|
|
+| start_time | datetime | 接班时间 |
|
|
|
|
|
+| end_time | datetime | 交班时间 |
|
|
|
|
|
+| starting_cash | float64 | 接班现金(手动录入) |
|
|
|
|
|
+| collected_cash | float64 | 当班收现金(自动统计) |
|
|
|
|
|
+| expected_total | float64 | start + collected |
|
|
|
|
|
+| actual_total | float64 | 实交现金(交班时录入) |
|
|
|
|
|
+| difference | float64 | actual - expected |
|
|
|
|
|
+| status | string | active / closed |
|
|
|
|
|
+| remark | string | 备注 |
|
|
|
|
|
+
|
|
|
|
|
+### 流程
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+接班 → 输入当前现金余额 → INSERT (status=active) → 显示"当班中"
|
|
|
|
|
+
|
|
|
|
|
+交班 → 系统统计当班收款 → 操作员输入实交现金 → 计算差异 → UPDATE (status=closed)
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 页面
|
|
|
|
|
+
|
|
|
|
|
+- 菜单:停车管理 → 交接班管理
|
|
|
|
|
+- 当前当班中显示:接班时间/接班现金/当班收款/应交总额/[交班]按钮
|
|
|
|
|
+- 无当班显示:[接班]按钮 + 输入框
|
|
|
|
|
+- 底部历史交接班记录列表
|
|
|
|
|
+
|
|
|
|
|
+### API
|
|
|
|
|
+
|
|
|
|
|
+| 方法 | 路径 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| POST | /shift/start | 接班 |
|
|
|
|
|
+| POST | /shift/end | 交班 |
|
|
|
|
|
+| GET | /shift/current | 当前当班状态 |
|
|
|
|
|
+| GET | /shift/list | 历史记录 |
|
|
|
|
|
+
|
|
|
|
|
+## 3. 收入报表
|
|
|
|
|
+
|
|
|
|
|
+### 数据
|
|
|
|
|
+
|
|
|
|
|
+查询 `payment_record`,按日 + 停车场 GROUP BY。
|
|
|
|
|
+
|
|
|
|
|
+### 页面
|
|
|
|
|
+
|
|
|
|
|
+- 菜单:报表查询 → 收入报表(与进出记录/异常报表并列)
|
|
|
|
|
+- 筛选:日期范围 + 停车场下拉
|
|
|
|
|
+- 表格:日期 | 停车场 | 现金 | 免密 | 总收入 | 笔数
|
|
|
|
|
+- 底部合计行
|
|
|
|
|
+
|
|
|
|
|
+### API
|
|
|
|
|
+
|
|
|
|
|
+| 方法 | 路径 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| GET | /report/revenue | 按日/停车场汇总 |
|
|
|
|
|
+
|
|
|
|
|
+参数:`start_date`, `end_date`, `parking_lot_id`
|
|
|
|
|
+
|
|
|
|
|
+返回:
|
|
|
|
|
+```json
|
|
|
|
|
+[
|
|
|
|
|
+ { "date": "2026-07-29", "parking_lot": "停车场A", "cash": 280, "free": 50, "total": 330, "count": 8 }
|
|
|
|
|
+]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 4. 文件变更
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 操作 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `internal/dao/shift_record.go` | 新建 |
|
|
|
|
|
+| `internal/modules/shift/api.go` | 新建 |
|
|
|
|
|
+| `internal/modules/shift/service/service.go` | 新建 |
|
|
|
|
|
+| `internal/modules/shift/repository/repo.go` | 新建 |
|
|
|
|
|
+| `internal/modules/report/api.go` | 新建 |
|
|
|
|
|
+| `internal/modules/report/service/service.go` | 新建 |
|
|
|
|
|
+| `internal/initialize/gorm.go` | 修改 |
|
|
|
|
|
+| `internal/initialize/router.go` | 修改 |
|
|
|
|
|
+| `internal/initialize/seed.go` | 修改 |
|
|
|
|
|
+| `frontend/src/view/parking/shiftRecord.vue` | 新建 |
|
|
|
|
|
+| `frontend/src/view/report/revenue.vue` | 新建 |
|
|
|
|
|
+| `frontend/src/api/shift.js` | 新建 |
|
|
|
|
|
+| `frontend/src/api/report.js` | 新建 |
|
|
|
|
|
+| `frontend/src/lang/zh-CN.js, en.js` | 修改 |
|