4.3 KiB
4.3 KiB
数据库设计文档
数据库: 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 | ❌ | 地址 |
| 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 自动计算