e-scooter-rental-system/server/models/Vehicle.js

75 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const mongoose = require('mongoose');
const vehicleSchema = new mongoose.Schema({
// 门店关联
storeId: { type: String, required: true, index: true },
// 车辆基本信息
frameNumber: { type: String, required: true, unique: true }, // 车架号
plateNumber: { type: String }, // 车牌号
// 品牌与车型
brand: { type: String }, // 品牌
vehicleType: { type: String }, // 车型(对应 vehicleTypes 的 name
color: { type: String }, // 颜色
// 电池信息
batteryType: { type: String }, // 电池类型
batteryCapacity: { type: Number }, // 电池容量 (Ah)
batteryStatus: { type: String, enum: ['正常', '老化', '待更换'], default: '正常' },
// 状态信息
status: {
type: String,
enum: ['空闲', '在租', '维修中', '已报废', '待回收'],
default: '空闲'
},
isRented: { type: Boolean, default: false }, // 是否在租(冗余字段,方便查询)
// 位置信息
location: {
type: { type: String, default: 'Point' },
coordinates: { type: [Number], default: [0, 0] } // [经度, 纬度]
},
lastLocationUpdate: { type: Date },
// 租赁信息
currentOrderId: { type: mongoose.Schema.Types.ObjectId, ref: 'Order' },
totalRentDays: { type: Number, default: 0 }, // 累计租赁天数
// 维护信息
lastMaintenanceDate: { type: Date },
nextMaintenanceDate: { type: Date },
maintenanceHistory: [{
date: { type: Date },
type: { type: String }, // 保养类型
description: { type: String },
cost: { type: Number }
}],
// 购买信息
purchaseDate: { type: Date },
purchasePrice: { type: Number },
purchaseSupplier: { type: String },
// 备注
notes: { type: String },
// 时间戳
createdAt: { type: Date, default: Date.now },
updatedAt: { type: Date, default: Date.now }
});
// 更新时自动更新 updatedAt
vehicleSchema.pre('save', function(next) {
this.updatedAt = new Date();
next();
});
// 创建地理位置索引
vehicleSchema.index({ location: '2dsphere' });
// 按门店索引,方便查询某门店的车辆
vehicleSchema.index({ storeId: 1 });
module.exports = mongoose.model('Vehicle', vehicleSchema);