Browse Source

feat: FLT모듈 - 운항스케줄 추가

pull/9/head
lkd9125(이경도) 7 months ago
parent
commit
58b9f99f7d
  1. 14
      data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/CtrCntrlBas.java
  2. 20
      data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/join/CntrlJoinHstryAreaModel.java
  3. 83
      data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasQueryRepository.java
  4. 27
      data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java
  5. 8
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/join/FltPlanBasJoinAreaModel.java
  6. 14
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java
  7. 2
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java
  8. 2
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java
  9. 10
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/schedule/SearchPlanScheduleRS.java
  10. 30
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java

14
data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/CtrCntrlBas.java

@ -3,7 +3,7 @@ package kr.co.palnet.kac.data.ctr.model;
import jakarta.persistence.*;
import lombok.*;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.List;
@ -39,19 +39,19 @@ public class CtrCntrlBas {
// 비행시작일시
@Column(name = "FLGHT_ST_DT", columnDefinition = "datetime(6)")
private Instant flghtStDt;
private LocalDateTime flghtStDt;
// 비행종료일시
@Column(name = "FLGHT_END_DT", columnDefinition = "datetime(6)")
private Instant flghtEndDt;
private LocalDateTime flghtEndDt;
// 관제시작일시
@Column(name = "CNTRL_ST_DT", columnDefinition = "datetime(6)", nullable = false)
private Instant cntrlStDt;
private LocalDateTime cntrlStDt;
// 관제종료일시
@Column(name = "CNTRL_END_DT", columnDefinition = "datetime(6)")
private Instant cntrlEndDt;
private LocalDateTime cntrlEndDt;
// 총비행시간
@Column(name = "TTL_TIME", columnDefinition = "double default 0.0")
@ -87,11 +87,11 @@ public class CtrCntrlBas {
// 생성일시
@Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false)
private Instant createDt;
private LocalDateTime createDt;
// 수정일시
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt;
private LocalDateTime updateDt;
@OneToMany(mappedBy = "ctrCntrlBas", fetch = FetchType.LAZY)
private List<CtrCntrlHstry> ctrCntrlHstryList;

20
data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/join/CntrlJoinHstryAreaModel.java

@ -0,0 +1,20 @@
package kr.co.palnet.kac.data.ctr.model.join;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class CntrlJoinHstryAreaModel {
private String startAddress;
private String endAddress;
private String cntrlId;
private LocalDateTime cntrlStDt;
private LocalDateTime cntrlEndDt;
private String statusCd;
}

83
data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasQueryRepository.java

@ -0,0 +1,83 @@
package kr.co.palnet.kac.data.ctr.repository;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.ExpressionUtils;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import kr.co.palnet.kac.data.ctr.model.QCtrCntrlBas;
import kr.co.palnet.kac.data.ctr.model.QCtrCntrlHstryArea;
import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Repository
@Slf4j
@RequiredArgsConstructor
public class CtrCntrlBasQueryRepository {
private final JPAQueryFactory query;
public Optional<List<CntrlJoinHstryAreaModel>> findByIdntfNumAndSearchDate(String idntfNum, LocalDateTime schFltStDt, LocalDateTime schFltEndDt){
QCtrCntrlBas cntrlBas = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlHstryArea cntrlHstryArea = QCtrCntrlHstryArea.ctrCntrlHstryArea;
BooleanBuilder builder = new BooleanBuilder();
builder.and(cntrlBas.cntrlStDt.loe(schFltEndDt))
.and(cntrlBas.cntrlStDt.goe(schFltStDt))
.and(cntrlBas.idntfNum.eq(idntfNum));
return Optional.ofNullable(query.select(Projections.bean(
CntrlJoinHstryAreaModel.class,
ExpressionUtils.as(
JPAExpressions.select(
cntrlHstryArea.area1.concat(" ")
.concat(cntrlHstryArea.area2).concat(" ")
.concat(cntrlHstryArea.area3).concat(" ")
.concat(cntrlHstryArea.landNm).concat(" ")
.concat(cntrlHstryArea.landNum)
)
.from(cntrlHstryArea)
.where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId)
.and(cntrlHstryArea.actnType.eq("01"))),
"startAddress"
),
ExpressionUtils.as(
JPAExpressions.select(
cntrlHstryArea.area1.concat(" ")
.concat(cntrlHstryArea.area2).concat(" ")
.concat(cntrlHstryArea.area3).concat(" ")
.concat(cntrlHstryArea.landNm).concat(" ")
.concat(cntrlHstryArea.landNum)
)
.from(cntrlHstryArea)
.where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId)
.and(cntrlHstryArea.actnType.eq("99"))),
"endAddress"
),
cntrlBas.cntrlId,
cntrlBas.cntrlStDt,
cntrlBas.cntrlEndDt,
new CaseBuilder()
.when(cntrlBas.statusCd.eq("01")).then("F")
.when(cntrlBas.statusCd.eq("99")).then("S")
.otherwise("B").as("statusCd")
))
.from(cntrlBas)
.where(builder)
.orderBy(cntrlBas.cntrlStDt.asc())
.fetch());
}
}

27
data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java

@ -0,0 +1,27 @@
package kr.co.palnet.kac.data.ctr.service;
import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel;
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasQueryRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@Service
@Slf4j
@RequiredArgsConstructor
public class CtrCntrlDomainService {
private final CtrCntrlBasQueryRepository ctrCntrlBasQueryRepository;
public Optional<List<CntrlJoinHstryAreaModel>> findCntrlJoinHstryAreaByIdntfNumAndSearchDate(String idntfNum, LocalDateTime schFltStDt, LocalDateTime schFltEndDt){
return ctrCntrlBasQueryRepository.findByIdntfNumAndSearchDate(idntfNum, schFltStDt, schFltEndDt);
}
}

8
data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/query/FltPlanBasJoinAreaModel.java → data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/join/FltPlanBasJoinAreaModel.java

@ -1,7 +1,9 @@
package kr.co.palnet.kac.data.flt.model.query;
package kr.co.palnet.kac.data.flt.model.join;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FltPlanBasJoinAreaModel {
@ -9,6 +11,10 @@ public class FltPlanBasJoinAreaModel {
private String groupId;
private LocalDateTime schFltStDt;
private LocalDateTime schFltEndDt;
private String ownerNm;
private String idntfNum;

14
data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java

@ -2,23 +2,18 @@ package kr.co.palnet.kac.data.flt.repository;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import kr.co.palnet.kac.data.flt.model.FltPlanBas;
import kr.co.palnet.kac.data.flt.model.QFltPlanArcrft;
import kr.co.palnet.kac.data.flt.model.QFltPlanArea;
import kr.co.palnet.kac.data.flt.model.QFltPlanBas;
import kr.co.palnet.kac.data.flt.model.query.FltPlanBasJoinAreaModel;
import kr.co.palnet.kac.data.flt.model.join.FltPlanBasJoinAreaModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@ -53,12 +48,12 @@ public class FltPlanQueryRepository {
.fetch());
}
public Optional<List<FltPlanBasJoinAreaModel>> findAllBySearch(String serachDate){
public Optional<List<FltPlanBasJoinAreaModel>> findAllBySearch(String searchDate){
QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas;
QFltPlanArcrft fltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
LocalDateTime searchDateParam = LocalDate.parse(serachDate).atStartOfDay();
LocalDateTime searchDateParam = LocalDate.parse(searchDate).atStartOfDay();
BooleanBuilder builder = new BooleanBuilder();
builder.and(fltPlanBas.schFltStDt.loe(searchDateParam))
@ -70,6 +65,8 @@ public class FltPlanQueryRepository {
FltPlanBasJoinAreaModel.class,
fltPlanBas.planSno,
fltPlanBas.groupId,
fltPlanBas.schFltStDt,
fltPlanBas.schFltEndDt,
fltPlanArcrft.ownerNm,
fltPlanArcrft.idntfNum
))
@ -77,6 +74,7 @@ public class FltPlanQueryRepository {
.leftJoin(fltPlanArcrft)
.on(fltPlanBas.planSno.eq(fltPlanArcrft.planSno))
.where(builder)
.orderBy(fltPlanBas.schFltStDt.asc())
.fetch());
}

2
data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java

@ -1,7 +1,7 @@
package kr.co.palnet.kac.data.flt.service;
import kr.co.palnet.kac.data.flt.model.*;
import kr.co.palnet.kac.data.flt.model.query.FltPlanBasJoinAreaModel;
import kr.co.palnet.kac.data.flt.model.join.FltPlanBasJoinAreaModel;
import kr.co.palnet.kac.data.flt.repository.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

2
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java

@ -32,7 +32,7 @@ public class FlightPlanController {
@GetMapping("/schedule")
@Operation(summary = "비행 운항 스케줄 조회", description = "비행 현황 스케줄 정보를 조회하는 API 입니다.")
public ResponseEntity<Object> getPlanSchedule(@Parameter(name="searchDate", description = "검색 날짜", in = ParameterIn.QUERY, example = "2023-11-15") @RequestParam("searchDate") String searchDate){
public ResponseEntity<List<SearchPlanScheduleRS>> getPlanSchedule(@Parameter(name="searchDate", description = "검색 날짜", in = ParameterIn.QUERY, example = "2023-11-15") @RequestParam("searchDate") String searchDate){
List<SearchPlanScheduleRS> result = flightPlanService.getPlanSchedule(searchDate);

10
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/schedule/SearchPlanScheduleRS.java

@ -2,7 +2,7 @@ package kr.co.palnet.kac.api.v1.flight.plan.model.schedule;
import lombok.Data;
import java.time.Instant;
import java.time.LocalDateTime;
@Data
public class SearchPlanScheduleRS {
@ -12,11 +12,11 @@ public class SearchPlanScheduleRS {
private String idntfNum;
private String startAddress;
private String endAddress;
private Instant schFltStDt;
private Instant schFltEndDt;
private LocalDateTime schFltStDt;
private LocalDateTime schFltEndDt;
private String cntrlId;
private Instant cntrlStDt;
private Instant cntrlEndDt;
private LocalDateTime cntrlStDt;
private LocalDateTime cntrlEndDt;
// BEFORE (B) : 비행 전, FLYING (F) : 비행 중, SUCCESS (S) : 비행 완료
private String statusCd;

30
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java

@ -2,13 +2,14 @@ package kr.co.palnet.kac.api.v1.flight.plan.service;
import kr.co.palnet.kac.api.util.AreaUtils;
import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.BufferAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.schedule.SearchPlanScheduleRS;
import kr.co.palnet.kac.data.flt.model.FltPlanBas;
import kr.co.palnet.kac.data.flt.model.query.FltPlanBasJoinAreaModel;
import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel;
import kr.co.palnet.kac.data.ctr.service.CtrCntrlDomainService;
import kr.co.palnet.kac.data.flt.model.join.FltPlanBasJoinAreaModel;
import kr.co.palnet.kac.data.flt.service.FltPlanDomainService;
import kr.co.palnet.kac.data.pty.model.PtyGroupBas;
import kr.co.palnet.kac.data.pty.service.PtyGroupDomainService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -28,6 +29,8 @@ public class FlightPlanService {
private final PtyGroupDomainService ptyGroupDomainService;
private final CtrCntrlDomainService ctrCntrlDomainService;
private final AreaUtils areaUtils;
@ -63,19 +66,34 @@ public class FlightPlanService {
List<FltPlanBasJoinAreaModel> planJoinArea = fltPlanBasJoinAreaData.get();
for(FltPlanBasJoinAreaModel model : planJoinArea){
Optional<List<CntrlJoinHstryAreaModel>> ctrJoinHstryAreaData = ctrCntrlDomainService.findCntrlJoinHstryAreaByIdntfNumAndSearchDate(model.getIdntfNum(), model.getSchFltStDt(), model.getSchFltEndDt());
SearchPlanScheduleRS node = new SearchPlanScheduleRS();
ptyGroupDomainService.
if(ctrJoinHstryAreaData.isPresent() && !ctrJoinHstryAreaData.get().isEmpty()){
CntrlJoinHstryAreaModel cntrlJoinHstryAreaModel = ctrJoinHstryAreaData.get().get(0);
node.setCntrlId(cntrlJoinHstryAreaModel.getCntrlId());
node.setStartAddress(cntrlJoinHstryAreaModel.getStartAddress());
node.setEndAddress(cntrlJoinHstryAreaModel.getEndAddress());
node.setCntrlStDt(cntrlJoinHstryAreaModel.getCntrlStDt());
node.setCntrlEndDt(cntrlJoinHstryAreaModel.getCntrlEndDt());
node.setStatusCd(cntrlJoinHstryAreaModel.getStatusCd());
} else {
continue;
}
PtyGroupBas ptyGroupBas = ptyGroupDomainService.findPtyGroupBasById(model.getGroupId());
node.setOwnerNm(model.getOwnerNm());
node.setIdntfNum(model.getIdntfNum());
node.setGroupId(model.getGroupId());
node.setGroupNm(ptyGroupBas.getGroupNm());
result.add(node);
}
}
return result;
}
}

Loading…
Cancel
Save