여러 곳을 경유하는 여행 및 일정: 모험 구성
단체여행은 단순한 행사가 아니다. 그리고 일련의 단계, 며칠에 걸쳐 얽히는 여행, 예약, 활동 그리고 더 많은 목적지. ~ 안에 이벤트를 플레이하세요 여행 모듈은 다음과 같이 설계되었습니다. 자율 집계, 자체 라이프사이클, 예산 및 관리 로직을 갖추고 있습니다.
이 기사에서 찾을 수 있는 내용
- 여행 집계 및 수명주기
- 무대, 활동, 숙박 및 교통
- 행사예산과 별도의 여행예산
- 제안을 위한 외부 API와의 통합
- MapLibre GL을 사용한 대화형 지도
- 빠른 공유를 위한 QR 코드
여행 집계
Il 항해 그리고 핵심 개념. 그것은 단순한 것이 아니다. "며칠 동안 지속되는 사건": 그것은 그 자체의 정체성과 그 자체의 상태를 가지고 있습니다. 그리고 이를 구성하는 하위 엔터티 집합입니다.
public enum StatoViaggio {
DRAFT, // Bozza: in fase di pianificazione
PLANNED, // Pianificato: itinerario definito
CONFIRMED, // Confermato: partecipanti e prenotazioni ok
IN_PROGRESS, // In corso: il viaggio e iniziato
COMPLETED // Completato: viaggio terminato
}
TRANSIZIONI VALIDE:
DRAFT ──────► PLANNED ──────► CONFIRMED
│
▼
IN_PROGRESS ──► COMPLETED
Note:
- Da qualsiasi stato si può tornare a DRAFT (ripianificazione)
- COMPLETED e uno stato finale
- IN_PROGRESS si attiva automaticamente alla data di partenza
각 상태 전환은 자동 작업을 트리거할 수 있습니다. 예를 들면 다음과 같습니다. CONFIRMED로 전환하면 시스템은 i를 사용하여 참가자에게 알림을 보냅니다. 최종 여행 일정.
여행지: 여정의 핵심
여행은 하나 이상의 활동으로 구성됩니다. 여행 정류장. 모든 스테이지 고유한 날짜, 활동 및 물류가 포함된 목적지를 나타냅니다.
@Entity
public class TappaViaggio {
private Long id;
private Long viaggioId;
private String nome; // "Roma - Centro Storico"
private Integer ordine; // Posizione nell'itinerario
private Destinazione destinazione; // Coordinate + citta + paese
private LocalDate dataArrivo;
private LocalDate dataPartenza;
private String note;
// Relazioni
private List<AttivitaViaggio> attivita;
private List<AlloggioViaggio> alloggi;
private List<TrasportoViaggio> trasporti;
}
좌표가 있는 목적지
각 스테이지에는 목적지 좌표가 포함된 지리적 위치(위도 및 경도), 도시 및 국가 이름. 좌표는 대화형 지도에 마커를 배치하는 데 사용됩니다. 스테이지 간 거리와 이동 시간을 계산합니다.
활동, 숙박 및 교통
각 단계에는 모든 사람을 포괄하는 세 가지 유형의 하위 엔터티가 포함될 수 있습니다. 여행의 물류적 측면.
활동여행
단계 동안 계획된 활동: 가이드 투어, 견학, 저녁 식사, 지역 행사. 각 활동에는 시간, 예상 기간, 선택적 비용과 예약 링크.
숙박여행
숙소에 관한 정보: 건물명, 주소, 체크인 및 체크아웃 날짜, 예약 번호 및 비용. 이 시스템은 단계당 여러 편의를 지원하므로 그룹이 있을 때 유용합니다. 다양한 구조로 나누어져 있습니다.
교통여행
비행기, 기차, 버스 등 한 단계와 다른 단계 사이를 어떻게 이동합니까? 렌트카. 각 운송에는 차량 유형과 시간이 포함됩니다. 출발 및 도착 시간, 예약 번호 및 비용.
VIAGGIO: "Weekend a Roma" (3 giorni, 6 partecipanti)
TAPPA 1: Roma Centro (Giorno 1-2)
├── Destinazione: Roma, Italia (41.9028, 12.4964)
├── Alloggio: Hotel Forum ★★★★
│ ├── Check-in: 14:00
│ └── Costo: 180 EUR/notte
├── Attivita:
│ ├── Colosseo e Foro Romano (09:00 - 12:00, 16 EUR/persona)
│ ├── Pranzo a Trastevere (12:30 - 14:00)
│ └── Musei Vaticani (15:00 - 18:00, 17 EUR/persona)
└── Trasporto IN: Volo FR1234 (Bari → Roma Fiumicino, 07:00)
TAPPA 2: Roma Nord (Giorno 3)
├── Destinazione: Roma, Italia (41.9109, 12.4818)
├── Attivita:
│ ├── Villa Borghese (09:00 - 11:00, gratuito)
│ └── Shopping Via del Corso (11:30 - 14:00)
└── Trasporto OUT: Treno FR9876 (Roma Termini → Bari, 16:00)
전용 여행 예산
여행 예산 e 완전히 분리되어 있다 예산에서 관련 이벤트의. 이는 지출 역학이 다르기 때문입니다. 여행 중 비용은 며칠, 범주 및 단계에 걸쳐 분배됩니다.
예산 분리
Le 여행경비 자신만의 카테고리가 있습니다(교통, 숙박, 비자, 활동) 및 자체 세분화 방법. 에이 참가자는 여행의 한쪽 구간에만 참여할 수 있으므로 해당 특정 단계의 비용에만 기여합니다.
여행 작업: 여행자의 할 일 목록
모든 여행에는 다음 목록이 있습니다. 태스크여행: 해야 할 일 여행 전, 여행 중, 여행 후. 항공권 예약, 비자 신청, 가방을 싸고 호텔을 확인하세요.
작업은 특정 참가자에게 할당될 수 있으며 마감일, 우선순위 및 상태(해야 할 일, 진행 중, 완료됨). 시스템 마감된 작업에 대해 자동 알림을 보냅니다.
외부 API: 스마트 제안
가장 흥미로운 기능 중 하나는 외부 API와의 통합입니다. 계획하는 동안 제안을 제공합니다.
제안을 위한 통합 API
- 지명 (OpenStreetMap): 지오코딩과 역지오코딩. 도시 이름이 주어지면 좌표를 반환하며 그 반대의 경우도 마찬가지입니다.
- 위키항해: 목적지에 대한 관광 정보. 지역 사회의 가이드, 실용적인 조언 및 관심 장소.
- 정사각형: 목적지 근처의 레스토랑, 바, 명소 및 활동을 제안합니다.
- 오픈트립맵: 설명, 사진 및 평가가 포함된 관광 명소 데이터베이스.
사용자가 목적지를 선택하면 시스템이 이를 쿼리합니다. API를 병렬로 사용하여 카테고리별로 정리된 결과를 제공합니다. 무엇을 볼지, 어디서 먹을지, 어디서 자고, 무엇을 할지.
Frontend (Angular)
│
▼
Spring Boot API Gateway
│
├──► Nominatim API → Coordinate, indirizzi
├──► WikiVoyage API → Guide turistiche
├──► Foursquare API → Ristoranti, attrazioni
└──► OpenTripMap API → Punti di interesse
Risultati aggregati e cachati (TTL: 24h)
│
▼
Frontend: Card suggerimenti con "Aggiungi alla tappa"
MapLibre GL을 사용한 대화형 지도
덕분에 여행 일정이 지도에 생생하게 표시됩니다. 맵리브레 GL. 각 단계는 다른 단계와 연결된 숫자 표시로 표시됩니다. 움직임을 나타내는 선으로 단계를 표시합니다.
사용자는 지도와 상호작용할 수 있습니다. 보려면 마커를 클릭하세요. 스테이지의 세부정보를 확인하고, 마커를 드래그하여 여정을 재정렬하고, 가까운 관심 지점을 탐색하려면 확대/축소하세요.
지도 특징
- 여정의 각 정류장에 대한 번호가 표시된 마커
- 연속된 단계 사이의 연결선
- 클릭 시 스테이지 세부 정보가 포함된 팝업
- 추천 관심 장소 레이어
- 단계 간 거리 계산
- 위성 보기 및 도로 지도
공유용 QR코드
모든 여행은 고유한 QR 코드 이를 통해 다음을 수행할 수 있습니다. 여행 일정을 빠르게 공유하세요. 코드를 스캔하면 새로운 참가자는 모든 정보가 포함된 여행 페이지에 액세스합니다. 무대, 날짜, 숙박 시설, 활동 및 교통.
이는 라이브 상황에서 특히 유용합니다. 회의 중 조직, 주최자는 QR 코드를 투영하고 모든 참가자 간단한 스캔만으로 여행에 참여할 수 있습니다.
출발 및 귀국 날짜
여행에는 전체 출발 날짜와 돌아오는 날짜가 있습니다. 기간. 개별 단계의 날짜는 이 범위 내에 속해야 합니다. 시스템은 시간적 일관성을 자동으로 검증합니다. 출발 전에 시작하거나 귀국 후에 끝날 수 있습니다.
자동 시간 검증
- 단계는 시간상 겹칠 수 없습니다.
- 단계의 순서는 연대기를 존중해야 합니다.
- 전송은 연속적인 단계를 연결해야 합니다.
- 숙소 체크인은 무대 도착 시간과 일치해야 합니다.
- IN_PROGRESS 상태는 출발일에 활성화됩니다.
핵심 사항
- Journey는 라이프 사이클의 5개 상태로 구성된 자율 집합체입니다.
- 각 정류장에서 활동, 숙박 및 교통을 준비합니다.
- 정확한 재정관리를 위한 별도의 출장예산
- 지능적인 목적지 제안을 위한 4개의 외부 API
- 대화형 경로 표시를 위한 MapLibre GL
- 참가자와 즉시 공유할 수 있는 QR 코드
소스 코드는 다음에서 확인할 수 있습니다. GitHub. 실제 여행 모듈을 살펴보려면 다음을 방문하세요. www.playtheevent.com.







