const mongoose = require('mongoose'); const orderSchema = new mongoose.Schema({ // 订单基本信息 orderNumber: { type: String, unique: true }, // 订单号(由 pre-save hook 自动生成) customer: { type: mongoose.Schema.Types.ObjectId, ref: 'Customer', required: true }, // 客户 vehicle: { type: mongoose.Schema.Types.ObjectId, ref: 'Vehicle', required: true }, // 车辆 // 租赁信息 startDate: { type: Date, required: true }, // 开始日期 endDate: { type: Date, required: true }, // 结束日期 actualEndDate: { type: Date }, // 实际结束日期 // 费用信息 rentalFee: { type: Number, required: true }, // 租金 deposit: { type: Number, default: 0 }, // 押金 totalAmount: { type: Number, required: true }, // 总金额 paidAmount: { type: Number, default: 0 }, // 已支付金额 // 订单状态 status: { type: String, enum: ['待支付', '进行中', '已完成', '逾期', '已取消', '已退款'], default: '待支付' }, // 逾期信息 overdueDays: { type: Number, default: 0 }, // 逾期天数 overdueFee: { type: Number, default: 0 }, // 逾期费用 // 支付信息 paymentMethod: { type: String, enum: ['微信', '支付宝', '现金', '银行卡'] }, paymentDate: { type: Date }, // 门店关联 storeId: { type: String, index: true }, // 所属门店 // 骑手关联 rider: { type: mongoose.Schema.Types.ObjectId, ref: 'Rider', index: true }, // 接单骑手 // 合同信息 contractUrl: { type: String }, // 合同文件路径 contractSigned: { type: Boolean, default: false }, // 合同是否签署 // 备注 notes: { type: String }, // 时间戳 createdAt: { type: Date, default: Date.now }, updatedAt: { type: Date, default: Date.now } }); // 更新时自动更新 updatedAt orderSchema.pre('save', function(next) { this.updatedAt = new Date(); next(); }); // 生成订单号 orderSchema.pre('save', function(next) { if (!this.orderNumber) { const date = new Date(); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0'); this.orderNumber = `ORD${year}${month}${day}${random}`; } next(); }); module.exports = mongoose.model('Order', orderSchema);