Browse Source

Merge branch 'develop' of http://gitea.palntour.com/pav/pav-be-kac.git into develop

pull/16/head
박재우 10 months ago
parent
commit
57699c83da
  1. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java
  2. 27
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java
  3. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java
  4. 4
      pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java
  5. 41
      pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  6. 26
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  7. 35
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java
  8. 65
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  9. 57
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  10. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java
  11. 3
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  12. 435
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

3
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java

@ -15,6 +15,7 @@ public class BasFlightPlanArcrftModel {
private String groupNm; private String groupNm;
private String prdctNum; private String prdctNum;
private String arcrftTypeCd; private String arcrftTypeCd;
private String arcrftTypeNm;
private String arcrftModelNm; private String arcrftModelNm;
private String prdctCmpnNm; private String prdctCmpnNm;
@JsonSerialize(using = InstantDateStrSerializer.class) @JsonSerialize(using = InstantDateStrSerializer.class)
@ -23,6 +24,8 @@ public class BasFlightPlanArcrftModel {
private double arcrftWdth; private double arcrftWdth;
private double arcrftHght; private double arcrftHght;
private double arcrftWght; private double arcrftWght;
private String arcrftWghtCd;
private String arcrftWghtNm;
private String wghtTypeCd; private String wghtTypeCd;
private String imageUrl; private String imageUrl;
private double takeoffWght; private double takeoffWght;

27
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java

@ -1,16 +1,24 @@
package com.palnet.biz.api.bas.flight.model; package com.palnet.biz.api.bas.flight.model;
import com.palnet.biz.jpa.entity.type.FltMethod;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BasFlightPlanAreaModel { public class BasFlightPlanAreaModel {
private Integer planAreaSno; private Integer planAreaSno;
private Integer planSno; private Integer planSno;
private String areaType; private String areaType;
private String fltMethod; private String fltMethod;
private String fltMethodNm;
private String fltAreaAddr; private String fltAreaAddr;
private Integer bufferZone; private Integer bufferZone;
private String fltElev; private String fltElev;
@ -23,4 +31,23 @@ public class BasFlightPlanAreaModel {
private List<BasFlightPlanAreaCoordModel> bufferCoordList; private List<BasFlightPlanAreaCoordModel> bufferCoordList;
// kac 추가 필드 // kac 추가 필드
private String fltMothoeRm; private String fltMothoeRm;
// public BasFlightPlanAreaModel(Integer planAreaSno, Integer planSno, String areaType, FltMethod fltMethod, String fltAreaAddr, Integer bufferZone, String fltElev, String createUserId, Instant createDt, String updateUserId, Instant updateDt, String docState, List<BasFlightPlanAreaCoordModel> coordList, List<BasFlightPlanAreaCoordModel> bufferCoordList, String fltMothoeRm) {
// this.planAreaSno = planAreaSno;
// this.planSno = planSno;
// this.areaType = areaType;
// this.fltMethod = fltMethod.getCode();
// this.fltMethodNm = fltMethod.getValue();
// this.fltAreaAddr = fltAreaAddr;
// this.bufferZone = bufferZone;
// this.fltElev = fltElev;
// this.createUserId = createUserId;
// this.createDt = createDt;
// this.updateUserId = updateUserId;
// this.updateDt = updateDt;
// this.docState = docState;
// this.coordList = coordList;
// this.bufferCoordList = bufferCoordList;
// this.fltMothoeRm = fltMothoeRm;
// }
} }

3
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java

@ -21,6 +21,9 @@ public class BasFlightPlanModel {
private Instant schFltStDt; private Instant schFltStDt;
private Instant schFltEndDt; private Instant schFltEndDt;
private String fltPurpose; private String fltPurpose;
private String fltPurposeNm;
private String fltType;
private String fltTypeNm;
private String aprvlYn; private String aprvlYn;
private String delYn; private String delYn;
private String createUserId; private String createUserId;

4
pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java

@ -155,12 +155,12 @@ public class CtrCntrlController {
@GetMapping("/flight_plan/{idntfNum}") @GetMapping("/flight_plan/{idntfNum}")
@ApiOperation(value = "TODO 비행 관제 사용자 비행 계획서 정보") @ApiOperation(value = "TODO 비행 관제 사용자 비행 계획서 정보")
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") @Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API")
@ApiImplicitParam(name = "idtfNum",value = "식별번호", dataTypeClass = String.class) @ApiImplicitParam(name = "idtfNum",value = "식별번호", dataTypeClass = String.class, paramType = "query")
public ResponseEntity<? extends BasicResponse> findFlightPlan(@PathVariable("idntfNum") String idntfNum) { public ResponseEntity<? extends BasicResponse> findFlightPlan(@PathVariable("idntfNum") String idntfNum) {
List<BasFlightPlanModel> list; List<BasFlightPlanModel> list;
try { try {
list = service.getFlightPlan(idntfNum); list = service.getFlightPlanForKac(idntfNum);
} catch (Exception e) { } catch (Exception e) {
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)

41
pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java

@ -70,6 +70,7 @@ public class CtrCntrlService {
private final FltPlanAreaCoordRepository planCoordRepository; private final FltPlanAreaCoordRepository planCoordRepository;
private final AreaUtils areaUtils; private final AreaUtils areaUtils;
private final ControlGpsDataContext shareContext; private final ControlGpsDataContext shareContext;
private final FltPlanQueryRepository fltPlanQueryRepository;
@ -363,6 +364,46 @@ public class CtrCntrlService {
return rs; return rs;
} }
/**
* 식별 번호에 해당되는 비행구역 조회
* KAC에서는 기초데이터를 먼저 입력하는 것이 아닌 비행계획서만 작성하므로 생략되는 로직이 있음
* 따라서 별도로 구성함
* @param idntfNum
* @return
*/
public List<BasFlightPlanModel> getFlightPlanForKac(String idntfNum) {
List<BasFlightPlanModel> rs = fltPlanQueryRepository.getPlanByIdntfNum(idntfNum);
// Line일 경우 버퍼 생성
if(rs != null && !rs.isEmpty()){
rs.forEach(r -> {
List<BasFlightPlanAreaModel> areaList = r.getAreaList();
if(areaList != null && !areaList.isEmpty()){
areaList.forEach(a -> {
List<BasFlightPlanAreaCoordModel> coordList = a.getCoordList();
if(coordList != null && !coordList.isEmpty()){
// Buffer 영역 생성 저장
if ("LINE".equals(a.getAreaType())) {
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(coordList);
List<Coordinate> transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(transCoordList, a.getBufferZone());
List<Coordinate> transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(transBufferList);
a.setBufferCoordList(bufferCoordList);
}
}
});
}
});
}
return rs;
}
/** /**
* TODO 비행 관제 비정상 상황 판별 * TODO 비행 관제 비정상 상황 판별
* *

26
pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java

@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; import com.palnet.biz.api.main.dash.model.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -18,9 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.BasicResponse;
import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse; import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.biz.api.main.dash.model.MainDashFlightListModel;
import com.palnet.biz.api.main.dash.model.MainDashListModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.api.main.dash.service.MainDashService; import com.palnet.biz.api.main.dash.service.MainDashService;
import com.palnet.comn.code.RSErrorCode; import com.palnet.comn.code.RSErrorCode;
@ -343,8 +340,7 @@ public class MainDashController {
@ApiOperation(value = "일일 비정상상황 통계") @ApiOperation(value = "일일 비정상상황 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), @ApiImplicitParam(name = "groupId",value = "그룹아이디", dataTypeClass = String.class)
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
}) })
public ResponseEntity<? extends BasicResponse> currentFlightWarn(@RequestParam(required = false) String groupId){ public ResponseEntity<? extends BasicResponse> currentFlightWarn(@RequestParam(required = false) String groupId){
@ -365,8 +361,7 @@ public class MainDashController {
@ApiOperation(value = "일일 비행계획 통계") @ApiOperation(value = "일일 비행계획 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), @ApiImplicitParam(name = "groupId",value = "그룹아이디", dataTypeClass = String.class)
@ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class)
}) })
public ResponseEntity<? extends BasicResponse> currentFlightPlan(@RequestParam(required = false) String groupId){ public ResponseEntity<? extends BasicResponse> currentFlightPlan(@RequestParam(required = false) String groupId){
@ -384,4 +379,19 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainCurrentStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainCurrentStcsModel>>(result));
} }
@GetMapping("/stcs/dailyflight")
@ApiOperation(value = "일일 비행횟수 현황")
@Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API")
public ResponseEntity<? extends BasicResponse> getDailyFlightNumOfStcs(){
List<MainDashFlightNumStcsModel> result = null;
try {
result = service.dailyFlightNumOfStcs();
}catch (Exception e){
log.error("IGNORE : {} ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashFlightNumStcsModel>>(result));
}
} }

35
pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java

@ -0,0 +1,35 @@
package com.palnet.biz.api.main.dash.model;
import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* packageName : com.palnet.biz.api.main.dash.model
* fileName : MainDashFlightNumStcsModel
* author : hagjoon
* date : 2023-11-13
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-11-13 hagjoon 최초 생성
*/
@Data
public class MainDashFlightNumStcsModel {
@ApiParam(value = "구분",example = "전일(어제), 금일(오늘), 명일(내일)")
private String dateType = "";
@ApiParam(value = "계획",example = "전일(어제), 금일(오늘), 명일(내일) 비행계획서 목록")
private long flightPlan = 0;
@ApiParam(value = "비행 완료",example = "전일(어제), 금일(오늘), 명일(내일) 비행완료 목록")
private long completeFlight = 0;
@ApiParam(value = "미 비행",example = "전일(어제), 금일(오늘), 명일(내일) 미 비행 목록")
private long notFlight = 0;
@ApiParam(value = "비고",example = "전일(어제), 금일(오늘), 명일(내일) 비고")
private double note = 0;
}

65
pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java

@ -1,14 +1,17 @@
package com.palnet.biz.api.main.dash.service; package com.palnet.biz.api.main.dash.service;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.group.model.BasGroupModel; import com.palnet.biz.api.bas.group.model.BasGroupModel;
import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; import com.palnet.biz.api.main.dash.model.*;
import com.palnet.biz.api.main.statistics.service.MainStatisticsService; import com.palnet.biz.api.main.statistics.service.MainStatisticsService;
import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
import com.palnet.biz.jpa.repository.pty.*; import com.palnet.biz.jpa.repository.pty.*;
import com.querydsl.core.Tuple; import com.querydsl.core.Tuple;
@ -20,9 +23,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.palnet.biz.api.main.dash.model.MainDashFlightListModel;
import com.palnet.biz.api.main.dash.model.MainDashListModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.jpa.entity.CtrCntrlWarnLog; import com.palnet.biz.jpa.entity.CtrCntrlWarnLog;
import com.palnet.biz.jpa.entity.type.WarnType; import com.palnet.biz.jpa.entity.type.WarnType;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
@ -56,6 +56,9 @@ public class MainDashService {
@Autowired @Autowired
private FltPlanArcrftRepository fltPlanArcrftRepository; private FltPlanArcrftRepository fltPlanArcrftRepository;
@Autowired
private FltPlanBasRepository fltPlanBasRepository;
@Autowired @Autowired
private JwtTokenUtil token; private JwtTokenUtil token;
@ -369,4 +372,58 @@ public class MainDashService {
return result; return result;
} }
public List<MainDashFlightNumStcsModel> dailyFlightNumOfStcs(){
// 1. 전일 , 금일, 명일(내일)
Instant yesterdayStart = Instant.now().minus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Instant yesterdayEnd = Instant.now().truncatedTo(ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
Instant todayStart = Instant.now().truncatedTo(ChronoUnit.DAYS);
Instant todayEnd = Instant.now().plus(1, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
// 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일)
long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd);
long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd);
long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd);
// 3. 비행 완료 항목 : 실제 비행이 완료된 건수
long yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size();
long todayCompleteCount = query.completeFlight(todayStart,todayEnd).size();
long tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size();
// 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수
long yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size();
long todayNotFlight = query.notFlight(todayStart, todayEnd).size();
long tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size();
// 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용
// ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용
// 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용
// 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용
long yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size();
double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0;
double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0;
double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0;
List<MainDashFlightNumStcsModel> result = new ArrayList<>();
result.add(createModel("yesterday", yesterdayCount,yesterdayCompleteCount,yesterdayNotFlight,yesterdayNotePercent));
result.add(createModel("today", todayCount,todayCompleteCount,todayNotFlight,todayNotePercent));
result.add(createModel("tomorrow", tomorrowCount,tomorrowCompleteCount,tomorrowNotFlight,tomorrowNotePercent));
return result;
}
private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount, long completeCount, long notFlight, double note) {
MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel();
model.setDateType(dateType);
model.setFlightPlan(flightPlanCount);
model.setCompleteFlight(completeCount);
model.setNotFlight(notFlight);
model.setNote(note);
return model;
}
} }

57
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -9,6 +9,8 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import com.querydsl.core.Tuple;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
@ -2572,7 +2574,60 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
} }
public List<Tuple> completeFlight(Instant start, Instant end) {
// Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다.
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
ccb.statusCd,
ccb.cntrlStDt,
ccb.cntrlEndDt
)
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(
fpb.aprvlYn.eq("Y"),
fpccr.planSno.isNotNull(),
ccb.statusCd.eq("99"),
ccb.cntrlEndDt.between(start,end)
)
.fetch();
}
public List<Tuple> notFlight(Instant start, Instant end){
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
fpccr.cntrlId,
fpccr.planSno
)
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(
fpb.aprvlYn.eq("Y"),
fpccr.planSno.isNull(),
ccb.cntrlEndDt.between(start, end),
fpb.aprvlDt.between(start, end)
)
.fetch();
}
} }

2
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java

@ -317,7 +317,7 @@ public class CtrCntrlWarnLogQueryRepository {
private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){ private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals("")))builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
String dateFormat = "%Y-%m-%d"; String dateFormat = "%Y-%m-%d";

3
pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java

@ -53,5 +53,8 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
"and f.aprvlYn = 'Y' ") "and f.aprvlYn = 'Y' ")
List<FltPlanBas> findBasList(@Param("planSno") int planSno); List<FltPlanBas> findBasList(@Param("planSno") int planSno);
@Query("SELECT f FROM FltPlanBas f WHERE f.aprvlYn = 'Y' AND f.aprvlDt IS NOT NULL AND f.aprvlDt >= :startDate AND f.aprvlDt < :endDate")
List<FltPlanBas> findApprovedFlightPlansByApprovalDate(Instant startDate, Instant endDate);
long countByAprvlYnAndAprvlDtBetween(String aprvlYn, Instant startDate, Instant endDate);
} }

435
pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

@ -1,58 +1,13 @@
package com.palnet.biz.jpa.repository.flt; package com.palnet.biz.jpa.repository.flt;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel;
import com.querydsl.core.types.dsl.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; import com.palnet.biz.api.bas.flight.model.*;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel;
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs;
import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; import com.palnet.biz.api.main.dash.model.MainDashFlightListModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel;
import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.entity.QComArcrftBas; import com.palnet.biz.jpa.entity.type.*;
import com.palnet.biz.jpa.entity.QComFileBas; import com.palnet.biz.jpa.model.*;
import com.palnet.biz.jpa.entity.QComIdntfBas;
import com.palnet.biz.jpa.entity.QCtrCntrlBas;
import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.QFltPlanArcrft;
import com.palnet.biz.jpa.entity.QFltPlanArea;
import com.palnet.biz.jpa.entity.QFltPlanAreaCoord;
import com.palnet.biz.jpa.entity.QFltPlanBas;
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel;
import com.palnet.biz.jpa.entity.QFltPlanPilot;
import com.palnet.biz.jpa.entity.QPtyCstmrDtl;
import com.palnet.biz.jpa.entity.QPtyCstmrGroup;
import com.palnet.biz.jpa.entity.QPtyGroupBas;
import com.palnet.biz.jpa.model.LaancAprvSearchDto;
import com.palnet.biz.jpa.model.LaancPlanArcrftDto;
import com.palnet.biz.jpa.model.LaancPlanAreaDto;
import com.palnet.biz.jpa.model.LaancPlanDto;
import com.palnet.biz.jpa.model.LaancPlanPilotDto;
import com.palnet.biz.jpa.model.LaancPlanareaCoordDto;
import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.InstantUtils; import com.palnet.comn.utils.InstantUtils;
import com.querydsl.core.BooleanBuilder; import com.querydsl.core.BooleanBuilder;
@ -62,17 +17,23 @@ import com.querydsl.core.types.ConstantImpl;
import com.querydsl.core.types.Expression; import com.querydsl.core.types.Expression;
import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.ExpressionUtils;
import com.querydsl.core.types.Projections; import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.*;
import com.querydsl.core.types.dsl.ComparableExpressionBase;
import com.querydsl.core.types.dsl.DateTemplate;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.StringTemplate;
import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.time.*;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Repository @Repository
@ -81,7 +42,7 @@ public class FltPlanQueryRepository {
private final JPAQueryFactory query; private final JPAQueryFactory query;
private final JwtTokenUtil jwtTokenUtil; private final JwtTokenUtil jwtTokenUtil;
@ -115,6 +76,7 @@ public class FltPlanQueryRepository {
} }
builder.and(bas.delYn.ne("Y")); builder.and(bas.delYn.ne("Y"));
List<BasFlightPlanModel> r = query List<BasFlightPlanModel> r = query
.from(bas) .from(bas)
.leftJoin(area) .leftJoin(area)
@ -1207,10 +1169,10 @@ public class FltPlanQueryRepository {
List<FlightStcsValueModel> queryResult = query List<FlightStcsValueModel> queryResult = query
.select( .select(
Projections.bean(FlightStcsValueModel.class, Projections.bean(FlightStcsValueModel.class,
qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정
) )
) )
.from(qFltPlanCtrCntrlRel) .from(qFltPlanCtrCntrlRel)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno))
.where(builder) .where(builder)
@ -1218,7 +1180,7 @@ public class FltPlanQueryRepository {
.orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) .orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc())
.limit(1) .limit(1)
.fetch(); .fetch();
if(queryResult.size() > 0){ if(queryResult.size() > 0){
result = queryResult.get(0); result = queryResult.get(0);
if(result.getName().equals("")) result.setName(" "); if(result.getName().equals("")) result.setName(" ");
@ -1249,7 +1211,7 @@ public class FltPlanQueryRepository {
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanCtrCntrlRel.idntfNum.eq(idntfNum)); builder.and(qFltPlanCtrCntrlRel.idntfNum.eq(idntfNum));
builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull());
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
@ -1311,7 +1273,7 @@ public class FltPlanQueryRepository {
.where(builder) .where(builder)
.fetchOne(); .fetchOne();
} }
/** /**
* 비행계획에 많이 기용된 기체 데이터, top 1 * 비행계획에 많이 기용된 기체 데이터, top 1
@ -1319,11 +1281,11 @@ public class FltPlanQueryRepository {
*/ */
public FlightStcsValueModel getFltPlanStaticStcs(boolean authCheck, String groupId){ public FlightStcsValueModel getFltPlanStaticStcs(boolean authCheck, String groupId){
FlightStcsValueModel result = new FlightStcsValueModel(); FlightStcsValueModel result = new FlightStcsValueModel();
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1340,7 +1302,7 @@ public class FltPlanQueryRepository {
.orderBy(qFltPlanArcrft.planSno.count().desc()) .orderBy(qFltPlanArcrft.planSno.count().desc())
.limit(1) .limit(1)
.fetch(); .fetch();
log.warn("que => {}", queryResult); log.warn("que => {}", queryResult);
if(queryResult.size() > 0){ if(queryResult.size() > 0){
@ -1367,11 +1329,11 @@ public class FltPlanQueryRepository {
} }
private Long getFltPlanDay(String idntfNum, boolean authCheck, String groupId){ private Long getFltPlanDay(String idntfNum, boolean authCheck, String groupId){
QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.idntfNum.eq(idntfNum.trim())); builder.and(bas.idntfNum.eq(idntfNum.trim()));
builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1380,7 +1342,7 @@ public class FltPlanQueryRepository {
.select( .select(
bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
) )
.from(bas) .from(bas)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanBas.planSno.eq(bas.planSno)) .on(qFltPlanBas.planSno.eq(bas.planSno))
.where(builder) .where(builder)
@ -1388,11 +1350,11 @@ public class FltPlanQueryRepository {
} }
private Long getFltPlanMonth(String idntfNum, boolean authCheck, String groupId){ private Long getFltPlanMonth(String idntfNum, boolean authCheck, String groupId){
QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.idntfNum.eq(idntfNum.trim())); builder.and(bas.idntfNum.eq(idntfNum.trim()));
builder.and(bas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
@ -1402,9 +1364,9 @@ public class FltPlanQueryRepository {
.select( .select(
bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
) )
.from(bas) .from(bas)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanBas.planSno.eq(bas.planSno)) .on(qFltPlanBas.planSno.eq(bas.planSno))
.where(builder) .where(builder)
.fetchOne(); .fetchOne();
} }
@ -1414,7 +1376,7 @@ public class FltPlanQueryRepository {
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.idntfNum.eq(idntfNum.trim())); builder.and(bas.idntfNum.eq(idntfNum.trim()));
builder.and(bas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
@ -1430,9 +1392,9 @@ public class FltPlanQueryRepository {
.where(builder) .where(builder)
.fetchOne(); .fetchOne();
} }
/** /**
* 비행승인 많은 기체 데이터, top 1 * 비행승인 많은 기체 데이터, top 1
@ -1441,14 +1403,14 @@ public class FltPlanQueryRepository {
public FlightStcsValueModel getFltPlanAprvnStaticStcs(boolean authCheck, String groupId){ public FlightStcsValueModel getFltPlanAprvnStaticStcs(boolean authCheck, String groupId){
FlightStcsValueModel result = new FlightStcsValueModel(); FlightStcsValueModel result = new FlightStcsValueModel();
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.aprvlYn.eq("Y"));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
List<FlightStcsValueModel> queryResult = query List<FlightStcsValueModel> queryResult = query
.select( .select(
@ -1456,7 +1418,7 @@ public class FltPlanQueryRepository {
qFltPlanArcrft.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 qFltPlanArcrft.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정
) )
) )
.from(qFltPlanArcrft) .from(qFltPlanArcrft)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno))
.where(builder) .where(builder)
@ -1464,7 +1426,7 @@ public class FltPlanQueryRepository {
.orderBy(qFltPlanArcrft.planSno.count().desc()) .orderBy(qFltPlanArcrft.planSno.count().desc())
.limit(1) .limit(1)
.fetch(); .fetch();
if(queryResult.size() > 0){ if(queryResult.size() > 0){
result = queryResult.get(0); result = queryResult.get(0);
if(result.getName().equals("")) result.setName(" "); if(result.getName().equals("")) result.setName(" ");
@ -1488,13 +1450,13 @@ public class FltPlanQueryRepository {
} }
private Long getFltPlanAprvnDay(String idntfNum, boolean authCheck, String groupId){ private Long getFltPlanAprvnDay(String idntfNum, boolean authCheck, String groupId){
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum));
builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.aprvlYn.eq("Y"));
builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1502,7 +1464,7 @@ public class FltPlanQueryRepository {
.select( .select(
qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
) )
.from(qFltPlanArcrft) .from(qFltPlanArcrft)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno))
.where(builder) .where(builder)
@ -1510,23 +1472,23 @@ public class FltPlanQueryRepository {
} }
private Long getFltPlanAprvnMonth(String idntfNum, boolean authCheck, String groupId){ private Long getFltPlanAprvnMonth(String idntfNum, boolean authCheck, String groupId){
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum));
builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.aprvlYn.eq("Y"));
builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
return query return query
.select( .select(
qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
) )
.from(qFltPlanArcrft) .from(qFltPlanArcrft)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno))
.where(builder) .where(builder)
@ -1534,28 +1496,28 @@ public class FltPlanQueryRepository {
} }
private Long getFltPlanAprvnYear(String idntfNum, boolean authCheck, String groupId){ private Long getFltPlanAprvnYear(String idntfNum, boolean authCheck, String groupId){
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum));
builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.aprvlYn.eq("Y"));
builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
return query return query
.select( .select(
qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
) )
.from(qFltPlanArcrft) .from(qFltPlanArcrft)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno))
.where(builder) .where(builder)
.fetchOne(); .fetchOne();
} }
/** /**
* 비행실적 통계 카테고리 비행실적 * 비행실적 통계 카테고리 비행실적
* @param date * @param date
@ -1564,21 +1526,21 @@ public class FltPlanQueryRepository {
*/ */
public List<FlightStcsValueModel> fltResultStcs(String date, String groupId, boolean authCheck, String[] formatParam){ public List<FlightStcsValueModel> fltResultStcs(String date, String groupId, boolean authCheck, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
StringTemplate formattedDate = Expressions.stringTemplate( StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[0])); , ConstantImpl.create(formatParam[0]));
StringTemplate formattedDate2 = Expressions.stringTemplate( StringTemplate formattedDate2 = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[1])); , ConstantImpl.create(formatParam[1]));
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1586,7 +1548,7 @@ public class FltPlanQueryRepository {
List<FlightStcsValueModel> result = query List<FlightStcsValueModel> result = query
.select( .select(
Projections.bean( Projections.bean(
FlightStcsValueModel.class , FlightStcsValueModel.class ,
formattedDate2.as("name"), formattedDate2.as("name"),
qFltPlanCtrCntrlRel.planSno.countDistinct().as("value") qFltPlanCtrCntrlRel.planSno.countDistinct().as("value")
) )
@ -1595,8 +1557,8 @@ public class FltPlanQueryRepository {
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno)) .on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno))
.where(builder) .where(builder)
.groupBy(formattedDate2) .groupBy(formattedDate2)
.fetch(); .fetch();
if(result.size() <= 0){ if(result.size() <= 0){
FlightStcsValueModel node = new FlightStcsValueModel(); FlightStcsValueModel node = new FlightStcsValueModel();
@ -1608,7 +1570,7 @@ public class FltPlanQueryRepository {
} }
return result; return result;
} }
/** /**
* 비행계획서 통계 카테고리 비행계획서 * 비행계획서 통계 카테고리 비행계획서
@ -1616,20 +1578,20 @@ public class FltPlanQueryRepository {
* @param formatParam * @param formatParam
* @return * @return
*/ */
public List<FlightStcsValueModel> fltPlanStcs(String date, String groupId, boolean authCheck, String[] formatParam){ public List<FlightStcsValueModel> fltPlanStcs(String date, String groupId, boolean authCheck, String[] formatParam){
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
StringTemplate formattedDate = Expressions.stringTemplate( StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[0])); , ConstantImpl.create(formatParam[0]));
StringTemplate formattedDate2 = Expressions.stringTemplate( StringTemplate formattedDate2 = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[1])); , ConstantImpl.create(formatParam[1]));
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1637,15 +1599,15 @@ public class FltPlanQueryRepository {
List<FlightStcsValueModel> result = query List<FlightStcsValueModel> result = query
.select( .select(
Projections.bean( Projections.bean(
FlightStcsValueModel.class , FlightStcsValueModel.class ,
formattedDate2.as("name"), formattedDate2.as("name"),
qFltPlanBas.planSno.count().as("value") qFltPlanBas.planSno.count().as("value")
) )
) )
.from(qFltPlanBas) .from(qFltPlanBas)
.where(builder) .where(builder)
.groupBy(formattedDate2) .groupBy(formattedDate2)
.fetch(); .fetch();
if(result.size() <= 0){ if(result.size() <= 0){
FlightStcsValueModel node = new FlightStcsValueModel(); FlightStcsValueModel node = new FlightStcsValueModel();
@ -1657,7 +1619,7 @@ public class FltPlanQueryRepository {
} }
return result; return result;
} }
/** /**
* 비행승인 통계 카테고리 비행승인 * 비행승인 통계 카테고리 비행승인
@ -1667,14 +1629,14 @@ public class FltPlanQueryRepository {
*/ */
public List<FlightStcsValueModel> fltPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){ public List<FlightStcsValueModel> fltPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
StringTemplate formattedDate = Expressions.stringTemplate( StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[0])); , ConstantImpl.create(formatParam[0]));
StringTemplate formattedDate2 = Expressions.stringTemplate( StringTemplate formattedDate2 = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
@ -1689,15 +1651,15 @@ public class FltPlanQueryRepository {
List<FlightStcsValueModel> result = query List<FlightStcsValueModel> result = query
.select( .select(
Projections.bean( Projections.bean(
FlightStcsValueModel.class , FlightStcsValueModel.class ,
formattedDate2.as("name"), formattedDate2.as("name"),
qFltPlanBas.planSno.count().as("value") qFltPlanBas.planSno.count().as("value")
) )
) )
.from(qFltPlanBas) .from(qFltPlanBas)
.where(builder) .where(builder)
.groupBy(formattedDate2) .groupBy(formattedDate2)
.fetch(); .fetch();
if(result.size() <= 0){ if(result.size() <= 0){
FlightStcsValueModel node = new FlightStcsValueModel(); FlightStcsValueModel node = new FlightStcsValueModel();
@ -1709,7 +1671,7 @@ public class FltPlanQueryRepository {
} }
return result; return result;
} }
/** /**
@ -1727,7 +1689,7 @@ public class FltPlanQueryRepository {
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[0])); , ConstantImpl.create(formatParam[0]));
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1735,7 +1697,7 @@ public class FltPlanQueryRepository {
List<FlightStcsValueModel> result = query List<FlightStcsValueModel> result = query
.select( .select(
Projections.bean(FlightStcsValueModel.class, Projections.bean(FlightStcsValueModel.class,
qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정
) )
) )
.from(qFltPlanCtrCntrlRel) .from(qFltPlanCtrCntrlRel)
@ -1746,7 +1708,7 @@ public class FltPlanQueryRepository {
.orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) .orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc())
.limit(5) .limit(5)
.fetch(); .fetch();
if(result.size() <= 0){ if(result.size() <= 0){
FlightStcsValueModel node = new FlightStcsValueModel(); FlightStcsValueModel node = new FlightStcsValueModel();
@ -1775,7 +1737,7 @@ public class FltPlanQueryRepository {
, qFltPlanArcrft.createDt , qFltPlanArcrft.createDt
, ConstantImpl.create(formatParam[0])); , ConstantImpl.create(formatParam[0]));
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1787,15 +1749,15 @@ public class FltPlanQueryRepository {
qFltPlanArcrft.planSno.countDistinct().as("value") qFltPlanArcrft.planSno.countDistinct().as("value")
) )
) )
.from(qFltPlanArcrft) .from(qFltPlanArcrft)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanBas.planSno.eq(qFltPlanArcrft.planSno)) .on(qFltPlanBas.planSno.eq(qFltPlanArcrft.planSno))
.where(builder) .where(builder)
.groupBy(qFltPlanArcrft.idntfNum) .groupBy(qFltPlanArcrft.idntfNum)
.orderBy(qFltPlanArcrft.planSno.countDistinct().desc()) .orderBy(qFltPlanArcrft.planSno.countDistinct().desc())
.limit(5) .limit(5)
.fetch(); .fetch();
if(result.size() <= 0){ if(result.size() <= 0){
FlightStcsValueModel node = new FlightStcsValueModel(); FlightStcsValueModel node = new FlightStcsValueModel();
@ -1816,15 +1778,15 @@ public class FltPlanQueryRepository {
*/ */
public List<FlightStcsValueModel> fltTopPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){ public List<FlightStcsValueModel> fltTopPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
StringTemplate formattedDate = Expressions.stringTemplate( StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})" "DATE_FORMAT({0}, {1})"
, qFltPlanBas.createDt , qFltPlanBas.createDt
, ConstantImpl.create(formatParam[0])); , ConstantImpl.create(formatParam[0]));
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.aprvlYn.eq("Y"));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
@ -1837,15 +1799,15 @@ public class FltPlanQueryRepository {
qFltPlanArcrft.planSno.countDistinct().as("value") qFltPlanArcrft.planSno.countDistinct().as("value")
) )
) )
.from(qFltPlanArcrft) .from(qFltPlanArcrft)
.leftJoin(qFltPlanBas) .leftJoin(qFltPlanBas)
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno))
.where(builder) .where(builder)
.groupBy(qFltPlanArcrft.idntfNum) .groupBy(qFltPlanArcrft.idntfNum)
.orderBy(qFltPlanArcrft.planSno.countDistinct().desc()) .orderBy(qFltPlanArcrft.planSno.countDistinct().desc())
.limit(5) .limit(5)
.fetch(); .fetch();
if(result.size() <= 0){ if(result.size() <= 0){
FlightStcsValueModel node = new FlightStcsValueModel(); FlightStcsValueModel node = new FlightStcsValueModel();
@ -1888,9 +1850,9 @@ public class FltPlanQueryRepository {
private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas){ private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas){
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltPlanBas.groupId.eq(groupId)); if(groupId != null && !(groupId.equals("")))builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
BooleanExpression dateExpression = null; BooleanExpression dateExpression = null;
switch (cate){ switch (cate){
case "-2" : case "-2" :
@ -1929,9 +1891,9 @@ public class FltPlanQueryRepository {
} }
public List<MainDashFlightListModel> getFlightDronList(String cptAuth, String serviceType){ public List<MainDashFlightListModel> getFlightDronList(String cptAuth, String serviceType){
QComIdntfBas cib = QComIdntfBas.comIdntfBas; QComIdntfBas cib = QComIdntfBas.comIdntfBas;
QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas; QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
@ -1942,9 +1904,9 @@ public class FltPlanQueryRepository {
Expression<Integer> groupOrder = new CaseBuilder() Expression<Integer> groupOrder = new CaseBuilder()
.when(pgb.groupNm.eq(cptAuth)).then(0) .when(pgb.groupNm.eq(cptAuth)).then(0)
.otherwise(1); .otherwise(1);
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(!serviceType.equals("all")) { if(!serviceType.equals("all")) {
builder.and(fpb.serviceType.contains(serviceType)); builder.and(fpb.serviceType.contains(serviceType));
} }
@ -1953,7 +1915,7 @@ public class FltPlanQueryRepository {
builder.and(pgb.groupNm.eq("cptAuth")); builder.and(pgb.groupNm.eq("cptAuth"));
} }
Instant now = Instant.now(); Instant now = Instant.now();
Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC); Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC);
Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC); Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC);
@ -1998,9 +1960,9 @@ public class FltPlanQueryRepository {
return result; return result;
} }
public Map<String, String> getFlightDronStcs(String cptAuth){ public Map<String, String> getFlightDronStcs(String cptAuth){
QComIdntfBas cib = QComIdntfBas.comIdntfBas; QComIdntfBas cib = QComIdntfBas.comIdntfBas;
QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft; QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas; QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
@ -2008,13 +1970,13 @@ public class FltPlanQueryRepository {
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if(!cptAuth.equals("KAC")) { if(!cptAuth.equals("KAC")) {
builder.and(pgb.groupNm.eq("cptAuth")); builder.and(pgb.groupNm.eq("cptAuth"));
} }
Instant now = Instant.now(); Instant now = Instant.now();
Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC); Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC);
Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC); Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC);
@ -2057,7 +2019,178 @@ public class FltPlanQueryRepository {
result.put(status, count); result.put(status, count);
} }
return result; return result;
} }
// 기체번호로 비행계획서 조회
public List<BasFlightPlanModel> getPlanByIdntfNum(String idntfNum) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanArea area = QFltPlanArea.fltPlanArea;
QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord;
Instant fltNowDt = Instant.now();
List<BasFlightPlanModel> rs = query.from(bas)
.leftJoin(arcrft)
.on(bas.planSno.eq(arcrft.planSno))
.leftJoin(area)
.on(area.planSno.eq(area.planSno))
.where(
arcrft.idntfNum.eq(idntfNum)
.and(bas.aprvlYn.eq("Y"))
.and(bas.schFltStDt.before(fltNowDt))
.and(bas.schFltEndDt.after(fltNowDt))
)
.orderBy(bas.createDt.desc())
.transform(
GroupBy.groupBy(bas.planSno)
.list(Projections.bean(
BasFlightPlanModel.class,
bas.planSno,
bas.groupId,
bas.cstmrSno,
bas.memberName,
bas.fltType.stringValue().as("fltType"),
bas.email,
bas.hpno,
bas.clncd,
bas.addr,
bas.addrDtlCn,
bas.zip,
bas.schFltStDt,
bas.schFltEndDt,
bas.fltPurpose.stringValue().as("fltPurpose"),
bas.aprvlYn,
bas.delYn,
bas.fileGroupNo,
bas.createUserId,
bas.createDt,
bas.updateUserId,
bas.updateDt,
bas.corpRegYn,
bas.serviceType,
GroupBy.list(Projections.bean(
BasFlightPlanAreaModel.class,
area.planAreaSno,
area.planSno,
area.areaType,
area.fltMethod.stringValue().as("fltMethod"),
area.bufferZone,
area.fltElev,
area.createUserId,
area.createDt,
area.updateUserId,
area.updateDt,
area.fltMothoeRm
).skipNulls()).as("areaList"),
GroupBy.list(Projections.bean(
BasFlightPlanArcrftModel.class,
arcrft.planArcrftSno,
arcrft.planSno,
arcrft.arcrftSno,
arcrft.idntfNum,
arcrft.groupNm,
arcrft.prdctNum,
arcrft.arcrftTypeCd.stringValue().as("arcrftTypeCd"),
arcrft.arcrftModelNm,
arcrft.prdctCmpnNm,
arcrft.prdctDate,
arcrft.arcrftLngth,
arcrft.arcrftWdth,
arcrft.arcrftHght,
arcrft.arcrftWght,
arcrft.arcrftWghtCd.stringValue().as("arcrftWghtCd"),
arcrft.wghtTypeCd,
arcrft.imageUrl,
arcrft.takeoffWght,
arcrft.useYn,
arcrft.cameraYn,
arcrft.insrncYn,
arcrft.ownerNm,
arcrft.createUserId,
arcrft.createDt,
arcrft.updateUserId,
arcrft.updateDt,
arcrft.acrftInsuranceYn,
arcrft.insuranceExperiod,
arcrft.corporationNm
).skipNulls()).as("arcrftList")
).skipNulls())
);
if (rs != null && !rs.isEmpty()) {
// enum cd -> nm
for (BasFlightPlanModel p : rs) {
if (p == null) continue;
FltType fltType = FltType.fromCode(p.getFltType());
if (fltType != null) p.setFltTypeNm(fltType.getValue());
FltPurpose fltPurpose = FltPurpose.fromCode(p.getFltPurpose());
if (fltPurpose != null) p.setFltPurposeNm(fltPurpose.getValue());
if (p.getAreaList() != null && !p.getAreaList().isEmpty()) {
for (BasFlightPlanAreaModel a : p.getAreaList()) {
if (a == null) continue;
FltMethod fltMethod = FltMethod.fromCode(a.getFltMethod());
if (fltMethod != null) a.setFltMethodNm(fltMethod.getValue());
}
}
if (p.getArcrftList() != null && !p.getArcrftList().isEmpty()) {
for (BasFlightPlanArcrftModel c : p.getArcrftList()) {
if (c == null) continue;
ArcrftTypeCd arcrftTypeCd = ArcrftTypeCd.fromCode(c.getArcrftTypeCd());
if (arcrftTypeCd != null) c.setArcrftTypeNm(arcrftTypeCd.getValue());
ArcrftWghtCd arcrftWghtCd = ArcrftWghtCd.fromCode(c.getArcrftWghtCd());
if (arcrftWghtCd != null) c.setArcrftWghtNm(arcrftWghtCd.getValue());
}
}
}
List<Integer> areaSnoList = rs.stream()
.filter(p -> p != null && p.getAreaList() != null && !p.getAreaList().isEmpty())
.map(p -> {
List<BasFlightPlanAreaModel> areaList = p.getAreaList();
return areaList.stream().map(BasFlightPlanAreaModel::getPlanAreaSno).collect(Collectors.toList());
}).flatMap(Collection::stream).collect(Collectors.toList());
List<BasFlightPlanAreaCoordModel> coordEntities = query.select(
Projections.bean(
BasFlightPlanAreaCoordModel.class,
coord.planAreaCoordSno,
coord.planAreaSno,
coord.lat,
coord.lon,
coord.createUserId,
coord.createDt
)
)
.from(coord)
.where(coord.planAreaSno.in(areaSnoList))
.orderBy(coord.planAreaSno.asc(), coord.planAreaCoordSno.asc())
.fetch();
Map<Integer, List<BasFlightPlanAreaCoordModel>> coordMap = coordEntities.stream().collect(Collectors.groupingBy(BasFlightPlanAreaCoordModel::getPlanAreaSno));
if (!areaSnoList.isEmpty()) {
rs.forEach(r -> {
List<BasFlightPlanAreaModel> areaList = r.getAreaList();
areaList.forEach(a -> {
List<BasFlightPlanAreaCoordModel> coordList = coordMap.get(a.getPlanAreaSno());
if (coordList != null && !coordList.isEmpty()) {
a.setCoordList(coordList);
}
});
});
}
}
return rs;
}
} }
Loading…
Cancel
Save