70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
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 }, // 所属门店
|
|
|
|
// 合同信息
|
|
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);
|