seed.ts 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. import { AppDataSource } from '../src/server/data-source.js';
  2. import { ActivityEntity, ActivityType } from '../src/server/modules/activities/activity.entity.js';
  3. import { RouteEntity } from '../src/server/modules/routes/route.entity.js';
  4. import { VehicleType } from '../src/server/modules/routes/route.schema.js';
  5. async function seed() {
  6. console.log('开始创建种子数据...');
  7. try {
  8. // 初始化数据库连接
  9. await AppDataSource.initialize();
  10. console.log('数据库连接已建立');
  11. // 获取Repository
  12. const activityRepository = AppDataSource.getRepository(ActivityEntity);
  13. const routeRepository = AppDataSource.getRepository(RouteEntity);
  14. // 清空现有数据
  15. await routeRepository.createQueryBuilder().delete().execute();
  16. await activityRepository.createQueryBuilder().delete().execute();
  17. console.log('已清空现有数据');
  18. // 创建示例活动数据 - 赛事和演唱会相关
  19. const activities = [
  20. {
  21. name: '中超联赛北京国安主场赛事',
  22. description: '北京国安主场对阵上海申花的中超联赛',
  23. type: ActivityType.DEPARTURE,
  24. startDate: new Date('2025-10-15T00:00:00Z'),
  25. endDate: new Date('2025-10-15T23:59:59Z'),
  26. },
  27. {
  28. name: '中超联赛北京国安主场赛事返程',
  29. description: '北京国安主场赛事结束后的返程服务',
  30. type: ActivityType.RETURN,
  31. startDate: new Date('2025-10-15T21:00:00Z'),
  32. endDate: new Date('2025-10-16T02:00:00Z'),
  33. },
  34. {
  35. name: '周杰伦北京演唱会',
  36. description: '周杰伦北京演唱会专场',
  37. type: ActivityType.DEPARTURE,
  38. startDate: new Date('2025-11-01T00:00:00Z'),
  39. endDate: new Date('2025-11-01T23:59:59Z'),
  40. },
  41. {
  42. name: '周杰伦北京演唱会返程',
  43. description: '周杰伦演唱会结束后的返程服务',
  44. type: ActivityType.RETURN,
  45. startDate: new Date('2025-11-01T22:30:00Z'),
  46. endDate: new Date('2025-11-02T01:00:00Z'),
  47. },
  48. {
  49. name: 'CBA北京首钢主场赛事',
  50. description: '北京首钢主场对阵广东宏远的CBA联赛',
  51. type: ActivityType.DEPARTURE,
  52. startDate: new Date('2025-10-20T00:00:00Z'),
  53. endDate: new Date('2025-10-20T23:59:59Z'),
  54. },
  55. {
  56. name: 'CBA北京首钢主场赛事返程',
  57. description: '北京首钢主场赛事结束后的返程服务',
  58. type: ActivityType.RETURN,
  59. startDate: new Date('2025-10-20T21:30:00Z'),
  60. endDate: new Date('2025-10-21T00:30:00Z'),
  61. },
  62. ];
  63. // 保存活动数据
  64. const savedActivities = await activityRepository.save(activities);
  65. console.log(`已创建 ${savedActivities.length} 个活动`);
  66. // 创建示例路线数据 - 赛事和演唱会相关
  67. const routes = [
  68. // 中超联赛去程路线
  69. {
  70. name: '中关村-工人体育场专线',
  71. description: '中关村到工人体育场的中超联赛专线',
  72. startPoint: '中关村',
  73. endPoint: '工人体育场',
  74. pickupPoint: '中关村地铁站A口',
  75. dropoffPoint: '工人体育场北门',
  76. departureTime: new Date('2025-10-15T17:30:00Z'),
  77. vehicleType: VehicleType.BUS,
  78. price: 25,
  79. seatCount: 50,
  80. availableSeats: 45,
  81. activityId: savedActivities[0].id,
  82. },
  83. {
  84. name: '国贸-工人体育场专线',
  85. description: '国贸到工人体育场的中超联赛专线',
  86. startPoint: '国贸',
  87. endPoint: '工人体育场',
  88. pickupPoint: '国贸地铁站C口',
  89. dropoffPoint: '工人体育场东门',
  90. departureTime: new Date('2025-10-15T17:45:00Z'),
  91. vehicleType: VehicleType.MINIBUS,
  92. price: 20,
  93. seatCount: 30,
  94. availableSeats: 28,
  95. activityId: savedActivities[0].id,
  96. },
  97. {
  98. name: '望京-工人体育场专线',
  99. description: '望京到工人体育场的中超联赛专线',
  100. startPoint: '望京',
  101. endPoint: '工人体育场',
  102. pickupPoint: '望京地铁站S口',
  103. dropoffPoint: '工人体育场南门',
  104. departureTime: new Date('2025-10-15T18:00:00Z'),
  105. vehicleType: VehicleType.CAR,
  106. price: 35,
  107. seatCount: 15,
  108. availableSeats: 12,
  109. activityId: savedActivities[0].id,
  110. },
  111. // 中超联赛返程路线
  112. {
  113. name: '工人体育场-中关村返程专线',
  114. description: '工人体育场到中关村的中超联赛返程专线',
  115. startPoint: '工人体育场',
  116. endPoint: '中关村',
  117. pickupPoint: '工人体育场北门',
  118. dropoffPoint: '中关村地铁站A口',
  119. departureTime: new Date('2025-10-15T22:00:00Z'),
  120. vehicleType: VehicleType.BUS,
  121. price: 25,
  122. seatCount: 50,
  123. availableSeats: 40,
  124. activityId: savedActivities[1].id,
  125. },
  126. {
  127. name: '工人体育场-国贸返程专线',
  128. description: '工人体育场到国贸的中超联赛返程专线',
  129. startPoint: '工人体育场',
  130. endPoint: '国贸',
  131. pickupPoint: '工人体育场东门',
  132. dropoffPoint: '国贸地铁站C口',
  133. departureTime: new Date('2025-10-15T22:15:00Z'),
  134. vehicleType: VehicleType.MINIBUS,
  135. price: 20,
  136. seatCount: 30,
  137. availableSeats: 25,
  138. activityId: savedActivities[1].id,
  139. },
  140. // 周杰伦演唱会去程路线
  141. {
  142. name: '五道口-鸟巢演唱会专线',
  143. description: '五道口到鸟巢的周杰伦演唱会专线',
  144. startPoint: '五道口',
  145. endPoint: '鸟巢',
  146. pickupPoint: '五道口地铁站A口',
  147. dropoffPoint: '鸟巢东门',
  148. departureTime: new Date('2025-11-01T18:00:00Z'),
  149. vehicleType: VehicleType.BUS,
  150. price: 30,
  151. seatCount: 50,
  152. availableSeats: 48,
  153. activityId: savedActivities[2].id,
  154. },
  155. {
  156. name: '西直门-鸟巢演唱会专线',
  157. description: '西直门到鸟巢的周杰伦演唱会专线',
  158. startPoint: '西直门',
  159. endPoint: '鸟巢',
  160. pickupPoint: '西直门地铁站C口',
  161. dropoffPoint: '鸟巢西门',
  162. departureTime: new Date('2025-11-01T18:15:00Z'),
  163. vehicleType: VehicleType.MINIBUS,
  164. price: 25,
  165. seatCount: 30,
  166. availableSeats: 28,
  167. activityId: savedActivities[2].id,
  168. },
  169. // 周杰伦演唱会返程路线
  170. {
  171. name: '鸟巢-五道口返程专线',
  172. description: '鸟巢到五道口的周杰伦演唱会返程专线',
  173. startPoint: '鸟巢',
  174. endPoint: '五道口',
  175. pickupPoint: '鸟巢东门',
  176. dropoffPoint: '五道口地铁站A口',
  177. departureTime: new Date('2025-11-01T23:30:00Z'),
  178. vehicleType: VehicleType.BUS,
  179. price: 30,
  180. seatCount: 50,
  181. availableSeats: 45,
  182. activityId: savedActivities[3].id,
  183. },
  184. {
  185. name: '鸟巢-西直门返程专线',
  186. description: '鸟巢到西直门的周杰伦演唱会返程专线',
  187. startPoint: '鸟巢',
  188. endPoint: '西直门',
  189. pickupPoint: '鸟巢西门',
  190. dropoffPoint: '西直门地铁站C口',
  191. departureTime: new Date('2025-11-01T23:45:00Z'),
  192. vehicleType: VehicleType.MINIBUS,
  193. price: 25,
  194. seatCount: 30,
  195. availableSeats: 26,
  196. activityId: savedActivities[3].id,
  197. },
  198. // CBA赛事去程路线
  199. {
  200. name: '朝阳门-五棵松体育馆专线',
  201. description: '朝阳门到五棵松体育馆的CBA赛事专线',
  202. startPoint: '朝阳门',
  203. endPoint: '五棵松体育馆',
  204. pickupPoint: '朝阳门地铁站B口',
  205. dropoffPoint: '五棵松体育馆北门',
  206. departureTime: new Date('2025-10-20T18:30:00Z'),
  207. vehicleType: VehicleType.BUS,
  208. price: 20,
  209. seatCount: 50,
  210. availableSeats: 46,
  211. activityId: savedActivities[4].id,
  212. },
  213. // CBA赛事返程路线
  214. {
  215. name: '五棵松体育馆-朝阳门返程专线',
  216. description: '五棵松体育馆到朝阳门的CBA赛事返程专线',
  217. startPoint: '五棵松体育馆',
  218. endPoint: '朝阳门',
  219. pickupPoint: '五棵松体育馆北门',
  220. dropoffPoint: '朝阳门地铁站B口',
  221. departureTime: new Date('2025-10-20T22:00:00Z'),
  222. vehicleType: VehicleType.BUS,
  223. price: 20,
  224. seatCount: 50,
  225. availableSeats: 42,
  226. activityId: savedActivities[5].id,
  227. },
  228. ];
  229. // 保存路线数据
  230. const savedRoutes = await routeRepository.save(routes);
  231. console.log(`已创建 ${savedRoutes.length} 条路线`);
  232. console.log('种子数据创建完成!');
  233. console.log(`总计: ${savedActivities.length} 个活动, ${savedRoutes.length} 条路线`);
  234. } catch (error) {
  235. console.error('创建种子数据时出错:', error);
  236. throw error;
  237. } finally {
  238. // 关闭数据库连接
  239. await AppDataSource.destroy();
  240. console.log('数据库连接已关闭');
  241. }
  242. }
  243. // 运行种子脚本
  244. seed().catch(console.error);