import { AppDataSource } from '../src/server/data-source.js'; import { ActivityEntity, ActivityType } from '../src/server/modules/activities/activity.entity.js'; import { RouteEntity } from '../src/server/modules/routes/route.entity.js'; import { VehicleType } from '../src/server/modules/routes/route.schema.js'; async function seed() { console.log('开始创建种子数据...'); try { // 初始化数据库连接 await AppDataSource.initialize(); console.log('数据库连接已建立'); // 获取Repository const activityRepository = AppDataSource.getRepository(ActivityEntity); const routeRepository = AppDataSource.getRepository(RouteEntity); // 清空现有数据 await routeRepository.createQueryBuilder().delete().execute(); await activityRepository.createQueryBuilder().delete().execute(); console.log('已清空现有数据'); // 创建示例活动数据 - 赛事和演唱会相关 const activities = [ { name: '中超联赛北京国安主场赛事', description: '北京国安主场对阵上海申花的中超联赛', type: ActivityType.DEPARTURE, startDate: new Date('2025-10-15T00:00:00Z'), endDate: new Date('2025-10-15T23:59:59Z'), }, { name: '中超联赛北京国安主场赛事返程', description: '北京国安主场赛事结束后的返程服务', type: ActivityType.RETURN, startDate: new Date('2025-10-15T21:00:00Z'), endDate: new Date('2025-10-16T02:00:00Z'), }, { name: '周杰伦北京演唱会', description: '周杰伦北京演唱会专场', type: ActivityType.DEPARTURE, startDate: new Date('2025-11-01T00:00:00Z'), endDate: new Date('2025-11-01T23:59:59Z'), }, { name: '周杰伦北京演唱会返程', description: '周杰伦演唱会结束后的返程服务', type: ActivityType.RETURN, startDate: new Date('2025-11-01T22:30:00Z'), endDate: new Date('2025-11-02T01:00:00Z'), }, { name: 'CBA北京首钢主场赛事', description: '北京首钢主场对阵广东宏远的CBA联赛', type: ActivityType.DEPARTURE, startDate: new Date('2025-10-20T00:00:00Z'), endDate: new Date('2025-10-20T23:59:59Z'), }, { name: 'CBA北京首钢主场赛事返程', description: '北京首钢主场赛事结束后的返程服务', type: ActivityType.RETURN, startDate: new Date('2025-10-20T21:30:00Z'), endDate: new Date('2025-10-21T00:30:00Z'), }, ]; // 保存活动数据 const savedActivities = await activityRepository.save(activities); console.log(`已创建 ${savedActivities.length} 个活动`); // 创建示例路线数据 - 赛事和演唱会相关 const routes = [ // 中超联赛去程路线 { name: '中关村-工人体育场专线', description: '中关村到工人体育场的中超联赛专线', startPoint: '中关村', endPoint: '工人体育场', pickupPoint: '中关村地铁站A口', dropoffPoint: '工人体育场北门', departureTime: new Date('2025-10-15T17:30:00Z'), vehicleType: VehicleType.BUS, price: 25, seatCount: 50, availableSeats: 45, activityId: savedActivities[0].id, }, { name: '国贸-工人体育场专线', description: '国贸到工人体育场的中超联赛专线', startPoint: '国贸', endPoint: '工人体育场', pickupPoint: '国贸地铁站C口', dropoffPoint: '工人体育场东门', departureTime: new Date('2025-10-15T17:45:00Z'), vehicleType: VehicleType.MINIBUS, price: 20, seatCount: 30, availableSeats: 28, activityId: savedActivities[0].id, }, { name: '望京-工人体育场专线', description: '望京到工人体育场的中超联赛专线', startPoint: '望京', endPoint: '工人体育场', pickupPoint: '望京地铁站S口', dropoffPoint: '工人体育场南门', departureTime: new Date('2025-10-15T18:00:00Z'), vehicleType: VehicleType.CAR, price: 35, seatCount: 15, availableSeats: 12, activityId: savedActivities[0].id, }, // 中超联赛返程路线 { name: '工人体育场-中关村返程专线', description: '工人体育场到中关村的中超联赛返程专线', startPoint: '工人体育场', endPoint: '中关村', pickupPoint: '工人体育场北门', dropoffPoint: '中关村地铁站A口', departureTime: new Date('2025-10-15T22:00:00Z'), vehicleType: VehicleType.BUS, price: 25, seatCount: 50, availableSeats: 40, activityId: savedActivities[1].id, }, { name: '工人体育场-国贸返程专线', description: '工人体育场到国贸的中超联赛返程专线', startPoint: '工人体育场', endPoint: '国贸', pickupPoint: '工人体育场东门', dropoffPoint: '国贸地铁站C口', departureTime: new Date('2025-10-15T22:15:00Z'), vehicleType: VehicleType.MINIBUS, price: 20, seatCount: 30, availableSeats: 25, activityId: savedActivities[1].id, }, // 周杰伦演唱会去程路线 { name: '五道口-鸟巢演唱会专线', description: '五道口到鸟巢的周杰伦演唱会专线', startPoint: '五道口', endPoint: '鸟巢', pickupPoint: '五道口地铁站A口', dropoffPoint: '鸟巢东门', departureTime: new Date('2025-11-01T18:00:00Z'), vehicleType: VehicleType.BUS, price: 30, seatCount: 50, availableSeats: 48, activityId: savedActivities[2].id, }, { name: '西直门-鸟巢演唱会专线', description: '西直门到鸟巢的周杰伦演唱会专线', startPoint: '西直门', endPoint: '鸟巢', pickupPoint: '西直门地铁站C口', dropoffPoint: '鸟巢西门', departureTime: new Date('2025-11-01T18:15:00Z'), vehicleType: VehicleType.MINIBUS, price: 25, seatCount: 30, availableSeats: 28, activityId: savedActivities[2].id, }, // 周杰伦演唱会返程路线 { name: '鸟巢-五道口返程专线', description: '鸟巢到五道口的周杰伦演唱会返程专线', startPoint: '鸟巢', endPoint: '五道口', pickupPoint: '鸟巢东门', dropoffPoint: '五道口地铁站A口', departureTime: new Date('2025-11-01T23:30:00Z'), vehicleType: VehicleType.BUS, price: 30, seatCount: 50, availableSeats: 45, activityId: savedActivities[3].id, }, { name: '鸟巢-西直门返程专线', description: '鸟巢到西直门的周杰伦演唱会返程专线', startPoint: '鸟巢', endPoint: '西直门', pickupPoint: '鸟巢西门', dropoffPoint: '西直门地铁站C口', departureTime: new Date('2025-11-01T23:45:00Z'), vehicleType: VehicleType.MINIBUS, price: 25, seatCount: 30, availableSeats: 26, activityId: savedActivities[3].id, }, // CBA赛事去程路线 { name: '朝阳门-五棵松体育馆专线', description: '朝阳门到五棵松体育馆的CBA赛事专线', startPoint: '朝阳门', endPoint: '五棵松体育馆', pickupPoint: '朝阳门地铁站B口', dropoffPoint: '五棵松体育馆北门', departureTime: new Date('2025-10-20T18:30:00Z'), vehicleType: VehicleType.BUS, price: 20, seatCount: 50, availableSeats: 46, activityId: savedActivities[4].id, }, // CBA赛事返程路线 { name: '五棵松体育馆-朝阳门返程专线', description: '五棵松体育馆到朝阳门的CBA赛事返程专线', startPoint: '五棵松体育馆', endPoint: '朝阳门', pickupPoint: '五棵松体育馆北门', dropoffPoint: '朝阳门地铁站B口', departureTime: new Date('2025-10-20T22:00:00Z'), vehicleType: VehicleType.BUS, price: 20, seatCount: 50, availableSeats: 42, activityId: savedActivities[5].id, }, ]; // 保存路线数据 const savedRoutes = await routeRepository.save(routes); console.log(`已创建 ${savedRoutes.length} 条路线`); console.log('种子数据创建完成!'); console.log(`总计: ${savedActivities.length} 个活动, ${savedRoutes.length} 条路线`); } catch (error) { console.error('创建种子数据时出错:', error); throw error; } finally { // 关闭数据库连接 await AppDataSource.destroy(); console.log('数据库连接已关闭'); } } // 运行种子脚本 seed().catch(console.error);