e-scooter-rental-system/server/seed.js

137 lines
6.8 KiB
JavaScript

const mongoose = require('mongoose');
const Vehicle = require('./models/Vehicle');
const Customer = require('./models/Customer');
const Order = require('./models/Order');
const Store = require('./models/Store');
const Rider = require('./models/Rider');
const { hashPassword } = require('./utils/password');
mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/e-scooter-rental')
.then(() => console.log('✅ MongoDB 连接成功'))
.catch(err => console.error('❌ MongoDB 连接失败:', err));
async function clearData() {
console.log('🧹 清空数据...');
await Vehicle.deleteMany({});
await Customer.deleteMany({});
await Order.deleteMany({});
await Store.deleteMany({});
await Rider.deleteMany({});
console.log('✅ 数据已清空');
}
async function createVehicles() {
const vehicles = [
{ vehicleId: 'SCOOTER001', storeId: 'STORE001', frameNumber: 'FN20240001', model: '黑骑士', color: '黑色', batteryType: '锂电池', batteryCapacity: 20, batteryStatus: '正常', status: '空闲', purchaseDate: new Date('2024-01-15'), purchasePrice: 3500, purchaseSupplier: '小牛电动车' },
{ vehicleId: 'SCOOTER002', storeId: 'STORE001', frameNumber: 'FN20240002', model: '黑骑士', color: '白色', batteryType: '锂电池', batteryCapacity: 20, batteryStatus: '正常', status: '空闲', purchaseDate: new Date('2024-02-20'), purchasePrice: 3500, purchaseSupplier: '小牛电动车' },
{ vehicleId: 'SCOOTER003', storeId: 'STORE002', frameNumber: 'FN20240003', model: '电动车', color: '蓝色', batteryType: '铅酸电池', batteryCapacity: 24, batteryStatus: '正常', status: '空闲', purchaseDate: new Date('2024-03-10'), purchasePrice: 2800, purchaseSupplier: '雅迪电动车' },
{ vehicleId: 'SCOOTER004', storeId: 'STORE002', frameNumber: 'FN20240004', model: '高端豪车', color: '红色', batteryType: '锂电池', batteryCapacity: 30, batteryStatus: '正常', status: '空闲', purchaseDate: new Date('2024-04-05'), purchasePrice: 8000, purchaseSupplier: '特斯拉' },
{ vehicleId: 'SCOOTER005', storeId: 'STORE003', frameNumber: 'FN20240005', model: '普通标准套餐', color: '绿色', batteryType: '铅酸电池', batteryCapacity: 20, batteryStatus: '正常', status: '空闲', purchaseDate: new Date('2024-05-01'), purchasePrice: 2500, purchaseSupplier: '爱玛电动车' }
];
console.log('🚗 创建示例车辆...');
await Vehicle.insertMany(vehicles);
console.log(`✅ 创建了 ${vehicles.length} 辆车`);
}
async function createCustomers() {
const customers = [
{ customerId: 'CUST001', name: '张三', phone: '13800138000', idCard: '110101199001011234', address: '北京市朝阳区', email: 'zhangsan@example.com' },
{ customerId: 'CUST002', name: '李四', phone: '13800138001', idCard: '110101199002022345', address: '北京市海淀区', email: 'lisi@example.com' },
{ customerId: 'CUST003', name: '王五', phone: '13800138002', idCard: '110101199003033456', address: '北京市西城区', email: 'wangwu@example.com' },
{ customerId: 'CUST004', name: '赵六', phone: '13800138003', idCard: '110101199004044567', address: '北京市东城区', email: 'zhaoliu@example.com' },
{ customerId: 'CUST005', name: '钱七', phone: '13800138004', idCard: '110101199005055678', address: '北京市丰台区', email: 'qianqi@example.com' }
];
console.log('👥 创建示例客户...');
await Customer.insertMany(customers);
console.log(`✅ 创建了 ${customers.length} 个客户`);
}
async function createOrders() {
const vehicles = await Vehicle.find().limit(3);
const customers = await Customer.find().limit(3);
const orders = [
{ orderNumber: 'ORDER001', customer: customers[0]._id, vehicle: vehicles[0]._id, startDate: new Date('2026-02-20'), endDate: new Date('2026-03-20'), rentalFee: 50, deposit: 200, totalAmount: 300, status: '进行中' },
{ orderNumber: 'ORDER002', customer: customers[1]._id, vehicle: vehicles[1]._id, startDate: new Date('2026-02-15'), endDate: new Date('2026-03-15'), rentalFee: 50, deposit: 200, totalAmount: 300, status: '进行中' },
{ orderNumber: 'ORDER003', customer: customers[2]._id, vehicle: vehicles[2]._id, startDate: new Date('2026-01-10'), endDate: new Date('2026-02-10'), actualEndDate: new Date('2026-02-10'), rentalFee: 40, deposit: 150, totalAmount: 200, paidAmount: 200, status: '已完成' }
];
console.log('📋 创建示例订单...');
await Order.insertMany(orders);
console.log(`✅ 创建了 ${orders.length} 个订单`);
}
async function createStores() {
const stores = [
{ storeId: 'STORE001', name: '朝阳电动车门店', address: '北京市朝阳区建国路88号', phone: '010-12345678', manager: '张三', status: '营业中', approvalStatus: '已通过', images: [] },
{ storeId: 'STORE002', name: '海淀电动车门店', address: '北京市海淀区中关村大街100号', phone: '010-87654321', manager: '李四', status: '营业中', approvalStatus: '已通过', images: [] },
{ storeId: 'STORE003', name: '西城电动车门店', address: '北京市西城区西单北大街120号', phone: '010-11223344', manager: '王五', status: '营业中', approvalStatus: '已通过', images: [] }
];
console.log('🏪 创建示例门店...');
await Store.insertMany(stores);
console.log(`✅ 创建了 ${stores.length} 个门店`);
}
async function createRiders() {
// 用 bcrypt 哈希密码
const hashedPwd = await hashPassword('123456');
const riders = [
{
riderId: 'RIDER001',
name: '张骑手',
phone: '13900139000',
password: hashedPwd,
role: 'admin',
status: 'active',
rating: 4.8,
totalOrders: 120,
totalIncome: 15000
},
{
riderId: 'RIDER002',
name: '李骑手',
phone: '13900139001',
password: hashedPwd,
role: 'store',
status: 'active',
rating: 4.5,
totalOrders: 80,
totalIncome: 10000
},
{
riderId: 'RIDER003',
name: '王骑手',
phone: '13900139002',
password: hashedPwd,
role: 'customer',
status: 'inactive',
rating: 4.9,
totalOrders: 200,
totalIncome: 25000
}
];
console.log('🛵 创建示例骑手...');
await Rider.insertMany(riders);
console.log(`✅ 创建了 ${riders.length} 个骑手`);
}
async function main() {
try {
await clearData();
await createStores();
await createVehicles();
await createCustomers();
await createOrders();
await createRiders();
console.log('\n🎉 示例数据创建完成!');
console.log('车辆: 5 辆 | 客户: 5 个 | 订单: 3 个 | 门店: 3 个 | 骑手: 3 个');
console.log('骑手密码统一: 123456');
console.log('RIDER001=admin | RIDER002=store | RIDER003=customer');
} catch (error) {
console.error('❌ 创建示例数据失败:', error);
} finally {
mongoose.disconnect();
process.exit(0);
}
}
main();