passenger.service.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { AppDataSource } from '../data-source';
  2. import { Passenger } from './passenger.entity';
  3. import { PassengerListParams, PassengerCreateInput, PassengerUpdateInput } from './passenger.schema';
  4. export class PassengerService {
  5. private passengerRepository = AppDataSource.getRepository(Passenger);
  6. /**
  7. * 获取乘客列表
  8. */
  9. async getPassengers(params: PassengerListParams) {
  10. const { page = 1, pageSize = 20, keyword, userId } = params;
  11. const skip = (page - 1) * pageSize;
  12. const queryBuilder = this.passengerRepository
  13. .createQueryBuilder('passenger')
  14. .leftJoinAndSelect('passenger.user', 'user')
  15. .skip(skip)
  16. .take(pageSize);
  17. // 按用户筛选
  18. if (userId) {
  19. queryBuilder.andWhere('passenger.userId = :userId', { userId });
  20. }
  21. // 关键词搜索
  22. if (keyword) {
  23. queryBuilder.andWhere(
  24. '(passenger.name LIKE :keyword OR passenger.phone LIKE :keyword OR passenger.idNumber LIKE :keyword)',
  25. { keyword: `%${keyword}%` }
  26. );
  27. }
  28. // 按创建时间倒序排列
  29. queryBuilder.orderBy('passenger.createdAt', 'DESC');
  30. const [data, total] = await queryBuilder.getManyAndCount();
  31. return {
  32. data,
  33. total,
  34. page,
  35. pageSize
  36. };
  37. }
  38. /**
  39. * 获取乘客详情
  40. */
  41. async getPassengerById(id: number) {
  42. return await this.passengerRepository.findOne({
  43. where: { id },
  44. relations: ['user']
  45. });
  46. }
  47. /**
  48. * 创建乘客
  49. */
  50. async createPassenger(input: PassengerCreateInput) {
  51. const passenger = this.passengerRepository.create(input);
  52. return await this.passengerRepository.save(passenger);
  53. }
  54. /**
  55. * 更新乘客
  56. */
  57. async updatePassenger(id: number, input: PassengerUpdateInput) {
  58. const result = await this.passengerRepository.update(id, input);
  59. if (result.affected === 0) {
  60. throw new Error('乘客不存在');
  61. }
  62. return await this.getPassengerById(id);
  63. }
  64. /**
  65. * 删除乘客
  66. */
  67. async deletePassenger(id: number) {
  68. const result = await this.passengerRepository.delete(id);
  69. if (result.affected === 0) {
  70. throw new Error('乘客不存在');
  71. }
  72. return { success: true };
  73. }
  74. /**
  75. * 获取用户的乘客列表
  76. */
  77. async getPassengersByUserId(userId: number) {
  78. return await this.passengerRepository.find({
  79. where: { userId },
  80. order: { isDefault: 'DESC', createdAt: 'DESC' }
  81. });
  82. }
  83. /**
  84. * 设置默认乘客
  85. */
  86. async setDefaultPassenger(userId: number, passengerId: number) {
  87. // 先取消所有乘客的默认状态
  88. await this.passengerRepository.update(
  89. { userId },
  90. { isDefault: false }
  91. );
  92. // 设置指定乘客为默认
  93. await this.passengerRepository.update(
  94. { id: passengerId, userId },
  95. { isDefault: true }
  96. );
  97. return await this.getPassengerById(passengerId);
  98. }
  99. }