调用大模型例子
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.3 KiB

10 months ago
  1. package com.xs.ai.services;
  2. import com.xs.ai.data.*;
  3. import org.springframework.stereotype.Service;
  4. import com.xs.ai.services.BookingTools.BookingDetails;
  5. import java.time.LocalDate;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Random;
  9. @Service
  10. public class FlightBookingService {
  11. private final BookingData db;
  12. public FlightBookingService() {
  13. db = new BookingData();
  14. initDemoData();
  15. }
  16. private void initDemoData() {
  17. List<String> names = List.of("徐庶", "诸葛", "百里", "楼兰", "庄周");
  18. List<String> airportCodes = List.of("北京", "上海", "广州", "深圳", "杭州", "南京", "青岛", "成都", "武汉", "西安", "重庆", "大连",
  19. "天津");
  20. Random random = new Random();
  21. var customers = new ArrayList<Customer>();
  22. var bookings = new ArrayList<Booking>();
  23. for (int i = 0; i < 5; i++) {
  24. String name = names.get(i);
  25. String from = airportCodes.get(random.nextInt(airportCodes.size()));
  26. String to = airportCodes.get(random.nextInt(airportCodes.size()));
  27. BookingClass bookingClass = BookingClass.values()[random.nextInt(BookingClass.values().length)];
  28. Customer customer = new Customer();
  29. customer.setName(name);
  30. LocalDate date = LocalDate.now().plusDays(2 * (i + 1));
  31. Booking booking = new Booking("10" + (i + 1), date, customer, BookingStatus.CONFIRMED, from, to,
  32. bookingClass);
  33. customer.getBookings().add(booking);
  34. customers.add(customer);
  35. bookings.add(booking);
  36. }
  37. // Reset the database on each start
  38. db.setCustomers(customers);
  39. db.setBookings(bookings);
  40. }
  41. // 获取所有已预订航班
  42. public List<BookingDetails> getBookings() {
  43. return db.getBookings().stream().map(this::toBookingDetails).toList();
  44. }
  45. // 根据编号+姓名查询航班
  46. private Booking findBooking(String bookingNumber, String name) {
  47. return db.getBookings()
  48. .stream()
  49. .filter(b -> b.getBookingNumber().equalsIgnoreCase(bookingNumber))
  50. .filter(b -> b.getCustomer().getName().equalsIgnoreCase(name))
  51. .findFirst()
  52. .orElseThrow(() -> new IllegalArgumentException("Booking not found"));
  53. }
  54. // 查询航班详情
  55. public BookingDetails getBookingDetails(String bookingNumber, String name) {
  56. var booking = findBooking(bookingNumber, name);
  57. return toBookingDetails(booking);
  58. }
  59. // 更改预定航班
  60. public void changeBooking(String bookingNumber, String name, String newDate, String from, String to) {
  61. var booking = findBooking(bookingNumber, name);
  62. if (booking.getDate().isBefore(LocalDate.now().plusDays(1))) {
  63. throw new IllegalArgumentException("Booking cannot be changed within 24 hours of the start date.");
  64. }
  65. booking.setDate(LocalDate.parse(newDate));
  66. booking.setFrom(from);
  67. booking.setTo(to);
  68. }
  69. // 取消预定航班
  70. public void cancelBooking(String bookingNumber, String name) {
  71. var booking = findBooking(bookingNumber, name);
  72. if (booking.getDate().isBefore(LocalDate.now().plusDays(2))) {
  73. throw new IllegalArgumentException("Booking cannot be cancelled within 48 hours of the start date.");
  74. }
  75. booking.setBookingStatus(BookingStatus.CANCELLED);
  76. }
  77. private BookingDetails toBookingDetails(Booking booking) {
  78. return new BookingDetails(booking.getBookingNumber(), booking.getCustomer().getName(), booking.getDate(),
  79. booking.getBookingStatus(), booking.getFrom(), booking.getTo(), booking.getBookingClass().toString());
  80. }
  81. }