138 lines
4.3 KiB
Markdown
138 lines
4.3 KiB
Markdown
# 数据库设计文档
|
|
|
|
## 数据库: MongoDB
|
|
## 集合: vehicles, orders, customers
|
|
|
|
---
|
|
|
|
## 1. 车辆集合 (vehicles)
|
|
|
|
### 字段说明
|
|
| 字段名 | 类型 | 必填 | 说明 |
|
|
|--------|------|------|------|
|
|
| vehicleId | String | ✅ | 车架号/车辆编号 (唯一) |
|
|
| model | String | ✅ | 车型 |
|
|
| brand | String | ✅ | 品牌 |
|
|
| color | String | ❌ | 颜色 |
|
|
| batteryType | String | ❌ | 电池类型 |
|
|
| batteryCapacity | Number | ❌ | 电池容量 (Ah) |
|
|
| batteryStatus | String | ❌ | 电池状态: 正常/老化/待更换 |
|
|
| status | String | ✅ | 车辆状态: 空闲/在租/维修中/已报废/待回收 |
|
|
| location | Object | ❌ | GPS位置 {type, coordinates} |
|
|
| lastLocationUpdate | Date | ❌ | 最后位置更新时间 |
|
|
| currentOrderId | ObjectId | ❌ | 当前订单ID (关联orders) |
|
|
| totalRentDays | Number | ❌ | 累计租赁天数 |
|
|
| lastMaintenanceDate | Date | ❌ | 最后保养日期 |
|
|
| nextMaintenanceDate | Date | ❌ | 下次保养日期 |
|
|
| maintenanceHistory | Array | ❌ | 维修历史记录 |
|
|
| purchaseDate | Date | ❌ | 购买日期 |
|
|
| purchasePrice | Number | ❌ | 购买价格 |
|
|
| purchaseSupplier | String | ❌ | 供应商 |
|
|
| notes | String | ❌ | 备注 |
|
|
| createdAt | Date | ✅ | 创建时间 |
|
|
| updatedAt | Date | ✅ | 更新时间 |
|
|
|
|
### 索引
|
|
- vehicleId: 唯一索引
|
|
- location: 2dsphere 索引 (用于地理查询)
|
|
|
|
---
|
|
|
|
## 2. 订单集合 (orders)
|
|
|
|
### 字段说明
|
|
| 字段名 | 类型 | 必填 | 说明 |
|
|
|--------|------|------|------|
|
|
| orderNumber | String | ✅ | 订单号 (唯一) |
|
|
| customer | ObjectId | ✅ | 客户ID (关联customers) |
|
|
| vehicle | ObjectId | ✅ | 车辆ID (关联vehicles) |
|
|
| startDate | Date | ✅ | 开始日期 |
|
|
| endDate | Date | ✅ | 结束日期 |
|
|
| actualEndDate | Date | ❌ | 实际结束日期 |
|
|
| rentalFee | Number | ✅ | 租金 (元/天) |
|
|
| deposit | Number | ❌ | 押金 |
|
|
| totalAmount | Number | ✅ | 总金额 |
|
|
| paidAmount | Number | ❌ | 已支付金额 |
|
|
| status | String | ✅ | 订单状态: 待支付/进行中/已完成/逾期/已取消/已退款 |
|
|
| overdueDays | Number | ❌ | 逾期天数 |
|
|
| overdueFee | Number | ❌ | 逾期费用 |
|
|
| paymentMethod | String | ❌ | 支付方式: 微信/支付宝/现金/银行卡 |
|
|
| paymentDate | Date | ❌ | 支付日期 |
|
|
| contractUrl | String | ❌ | 合同文件路径 |
|
|
| contractSigned | Boolean | ❌ | 合同是否签署 |
|
|
| notes | String | ❌ | 备注 |
|
|
| createdAt | Date | ✅ | 创建时间 |
|
|
| updatedAt | Date | ✅ | 更新时间 |
|
|
|
|
### 索引
|
|
- orderNumber: 唯一索引
|
|
- customer: 普通索引
|
|
- vehicle: 普通索引
|
|
- status: 普通索引
|
|
- endDate: 普通索引 (用于查询逾期订单)
|
|
|
|
---
|
|
|
|
## 3. 客户集合 (customers)
|
|
|
|
### 字段说明
|
|
| 字段名 | 类型 | 必填 | 说明 |
|
|
|--------|------|------|------|
|
|
| customerId | String | ✅ | 客户编号 (唯一) |
|
|
| name | String | ✅ | 姓名 |
|
|
| phone | String | ✅ | 手机号 |
|
|
| idCard | String | ❌ | 身份证号 |
|
|
| address | String | ❌ | 地址 |
|
|
| email | String | ❌ | 邮箱 |
|
|
| totalRentals | Number | ❌ | 总租赁次数 |
|
|
| totalSpent | Number | ❌ | 总消费金额 |
|
|
| currentRentals | Number | ❌ | 当前租赁数量 |
|
|
| creditScore | Number | ❌ | 信用评分 (0-100) |
|
|
| creditLevel | String | ❌ | 信用等级: 优秀/良好/一般/较差 |
|
|
| accountStatus | String | ✅ | 账户状态: 正常/冻结/注销 |
|
|
| notes | String | ❌ | 备注 |
|
|
| createdAt | Date | ✅ | 创建时间 |
|
|
| updatedAt | Date | ✅ | 更新时间 |
|
|
|
|
### 索引
|
|
- customerId: 唯一索引
|
|
- phone: 唯一索引
|
|
- name: 普通索引 (用于搜索)
|
|
|
|
---
|
|
|
|
## 4. 关系说明
|
|
|
|
### 车辆 ↔ 订单
|
|
- 一辆车同一时间只能有一个进行中的订单
|
|
- 车辆状态会随订单状态变化
|
|
|
|
### 客户 ↔ 订单
|
|
- 一个客户可以有多个订单
|
|
- 客户的租赁次数和消费金额会随订单更新
|
|
|
|
### 订单 ↔ 车辆/客户
|
|
- 订单必须关联一辆车和一个客户
|
|
- 订单完成后,车辆状态变为空闲
|
|
|
|
---
|
|
|
|
## 5. 数据验证规则
|
|
|
|
### 车辆
|
|
- vehicleId 必须唯一
|
|
- status 必须在预定义枚举中
|
|
- location 必须是有效的经纬度坐标
|
|
|
|
### 订单
|
|
- orderNumber 必须唯一
|
|
- startDate 必须早于 endDate
|
|
- rentalFee 必须大于 0
|
|
- status 必须在预定义枚举中
|
|
|
|
### 客户
|
|
- customerId 必须唯一
|
|
- phone 必须唯一
|
|
- creditScore 必须在 0-100 之间
|
|
- creditLevel 由 creditScore 自动计算
|