Browse Source

main/dash 패키지 주석추가

pull/18/head
lkd9125(이경도) 9 months ago
parent
commit
10f236bcec
  1. 240
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  2. 91
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  3. 148
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  4. 29
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java
  5. 120
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  6. 32
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyDronQueryRepository.java
  7. 25
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java

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

@ -39,7 +39,8 @@ public class MainDashController {
private final MainDashService service; private final MainDashService service;
/** /**
* @param rq * 비행횟수 통계를 조회하는 기능.
* @param yyyymm
* @return * @return
*/ */
@GetMapping(value = "/stcs/day") @GetMapping(value = "/stcs/day")
@ -51,17 +52,25 @@ public class MainDashController {
// log.debug(yyyymm); // log.debug(yyyymm);
//입력값 검증 // yyyymm 값이 있는지, 글자 갯수가 7개인지 입력값 검증
if(yyyymm == null || !(yyyymm.length() == 7) ) { if(yyyymm == null || !(yyyymm.length() == 7) ) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); .body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
try { try {
result = service.mainDashStcsDay(yyyymm); result = service.mainDashStcsDay(yyyymm); // 일별 비행건수 통계하는 기능
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -73,7 +82,9 @@ public class MainDashController {
/** /**
* @param rq * TOP5 지역 비행횟수 통계를 조회하는 기능
* 일자[yyyymm] 검색
* @param yyyymm
* @return * @return
*/ */
@GetMapping(value = "/stcs/area") @GetMapping(value = "/stcs/area")
@ -83,16 +94,25 @@ public class MainDashController {
public ResponseEntity<? extends BasicResponse> stcsArea(String yyyymm) { public ResponseEntity<? extends BasicResponse> stcsArea(String yyyymm) {
List<MainDashStcsModel> result = null; List<MainDashStcsModel> result = null;
// yyyymm 값이 있는지, 글자 갯수가 7개인지 입력값 검증
if(yyyymm == null || !(yyyymm.length() == 7) ) { if(yyyymm == null || !(yyyymm.length() == 7) ) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); .body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
try { try {
result = service.mainDashStcsArea(yyyymm); result = service.mainDashStcsArea(yyyymm); // Top5 지역별 비행횟수 통계기능
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -103,7 +123,8 @@ public class MainDashController {
} }
/** /**
* @param rq * 본인이 생성한 그룹 정보죄하는 기능.
* @param cstmrSno
* @return * @return
*/ */
@GetMapping(value = "/group/list") @GetMapping(value = "/group/list")
@ -113,16 +134,24 @@ public class MainDashController {
public ResponseEntity<? extends BasicResponse> groupList(Integer cstmrSno) { public ResponseEntity<? extends BasicResponse> groupList(Integer cstmrSno) {
List<Map> result = null; List<Map> result = null;
//입력값 검증 // 회원고유번호[cstmrSno] 입력값 검증처리
if(cstmrSno == null) { if(cstmrSno == null) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); .body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
try { try {
result = service.mainDashGroupList(cstmrSno); result = service.mainDashGroupList(cstmrSno); // TOP3 가입 그룹 리스트 조회하는 기능
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -132,7 +161,12 @@ public class MainDashController {
} }
/**
* 기체 정보 리스트 조회하는 기능,
* 회원 고유번호[cstmrSno] 조회함.
* @param cstmrSno
* @return
*/
@GetMapping(value = "/arcrft/list") @GetMapping(value = "/arcrft/list")
@ApiOperation(value = "기체 정보 리스트") @ApiOperation(value = "기체 정보 리스트")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -140,16 +174,24 @@ public class MainDashController {
public ResponseEntity<? extends BasicResponse> arcrftList(Integer cstmrSno) { public ResponseEntity<? extends BasicResponse> arcrftList(Integer cstmrSno) {
List<MainDashListModel> result = null; List<MainDashListModel> result = null;
//입력값 검증 // 회원고유번호[cstmrSno] 입력값 검증처리
if(cstmrSno == null) { if(cstmrSno == null) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); .body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
try { try {
result = service.mainDashDronList(cstmrSno); result = service.mainDashDronList(cstmrSno); // Top3 기체 정보 리스트 조회하는 기능
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -159,7 +201,13 @@ public class MainDashController {
} }
/**
* 비행실적 통계하는 기능.
* @param date
* @param type
* @Deprecated 현재 사용하지 않음
* @return
*/
@GetMapping(value = "/stcs/flight/date/{type}") @GetMapping(value = "/stcs/flight/date/{type}")
@ApiOperation(value = "김포공항, 비행실적 통계") @ApiOperation(value = "김포공항, 비행실적 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -174,18 +222,25 @@ public class MainDashController {
try { try {
if(date == null) date = ""; if(date == null) date = "";
formatParam = service.paramCheck(date, type); formatParam = service.paramCheck(date, type); // 파라미터 체크
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
List<MainDashStcsModel> result = null; List<MainDashStcsModel> result = null;
try { try {
result = service.mainKacDashStcsDay(date,formatParam); result = service.mainKacDashStcsDay(date,formatParam); // 날짜별 비행실적 통계기능
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -194,6 +249,13 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
} }
/**
* 김포공항, 비행승인 통계
* @param date
* @param type
* @Deprecated 현재 사용하지 않음
* @return
*/
@GetMapping("/stcs/plan-allow/date/{type}") @GetMapping("/stcs/plan-allow/date/{type}")
@ApiOperation(value = "김포공항, 비행승인 통계") @ApiOperation(value = "김포공항, 비행승인 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -208,18 +270,25 @@ public class MainDashController {
try { try {
if(date == null) date = ""; if(date == null) date = "";
formatParam = service.paramCheck(date,type); formatParam = service.paramCheck(date, type); // 파라미터 체크
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
List<MainDashStcsModel> result = null; List<MainDashStcsModel> result = null;
try { try {
result = service.mainStcsPlanAllow(date,formatParam); result = service.mainStcsPlanAllow(date,formatParam); // 김포공항, 비행승인 통계 기능
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -228,6 +297,14 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
} }
/**
* 드론별 비행 통계조회하는 기능.
* @param date
* @param idntfNum
* @param type
* @Deprecated 현재 사용하지 않음
* @return
*/
@GetMapping("/stcs/drone-flight/date/{type}") @GetMapping("/stcs/drone-flight/date/{type}")
@ApiOperation(value = "김포공항, 드론별 비행 통계") @ApiOperation(value = "김포공항, 드론별 비행 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -237,25 +314,31 @@ public class MainDashController {
@ApiImplicitParam(name = "idntfNum",value = "드론식별번호", dataTypeClass = String.class), @ApiImplicitParam(name = "idntfNum",value = "드론식별번호", dataTypeClass = String.class),
}) })
@Deprecated @Deprecated
public ResponseEntity<? extends BasicResponse> droneFlightStatistics(String date, @RequestParam(required = true) String idntfNum, @PathVariable String type){ public ResponseEntity<? extends BasicResponse> droneFlightStatistics(String date, @RequestParam(required = true) String idntfNum, @PathVariable String type){
log.info("idntfNum -> {}", idntfNum);
String[] formatParam = null; String[] formatParam = null;
try { try {
if(date == null) date = ""; if(date == null) date = "";
formatParam = service.paramCheck(date,type); formatParam = service.paramCheck(date, type); // 파라미터 체크
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
List<MainDashStcsModel> result = null; List<MainDashStcsModel> result = null;
try { try {
result = service.mainStcsDroneFlight(date,idntfNum,formatParam); result = service.mainStcsDroneFlight(date,idntfNum,formatParam); // 드론별 비행실적 통계 기능.
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -264,6 +347,13 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
} }
/**
* 비정상상황 비행 통계조회하는 기능.
* @param date
* @param type
* @Deprecated 현재 사용하지 않음
* @return
*/
@GetMapping("/stcs/warning-flight/date/{type}") @GetMapping("/stcs/warning-flight/date/{type}")
@ApiOperation(value = "김포공항, 비정상상황 비행 통계") @ApiOperation(value = "김포공항, 비정상상황 비행 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -278,18 +368,25 @@ public class MainDashController {
try { try {
if(date == null) date = ""; if(date == null) date = "";
formatParam = service.paramCheck(date,type); formatParam = service.paramCheck(date, type); // 파라미터 체크
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return ResponseEntity.status(HttpStatus.OK) // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
} }
List<MainDashStcsModel> result = null; List<MainDashStcsModel> result = null;
try { try {
result = service.mainStcsWarningFlight(date,formatParam); result = service.mainStcsWarningFlight(date,formatParam); // 비정상상황 통계구하는 기능.
} catch (Exception e) { } catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -298,6 +395,10 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
} }
/**
* 드론 비행 현황 통계 기능.
* @return
*/
@GetMapping(value = "/stcs/dron-flight") @GetMapping(value = "/stcs/dron-flight")
@ApiOperation(value = "드론 비행 현황") @ApiOperation(value = "드론 비행 현황")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -306,8 +407,15 @@ public class MainDashController {
Map<String, String> result = null; Map<String, String> result = null;
try { try {
result = service.mainDashDronFlightStcs(); result = service.mainDashDronFlightStcs(); // 드론 비행 현황기능
}catch (Exception e) { }catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -316,6 +424,11 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse< Map<String, String>>(result)); return ResponseEntity.ok().body(new SuccessResponse< Map<String, String>>(result));
} }
/**
* 드론 비행운항 목록 조회하는 기능.
* @param serviceType
* @return
*/
@GetMapping(value = "/dron-flight/list") @GetMapping(value = "/dron-flight/list")
@ApiOperation(value = "드론 별 비행운항 목록") @ApiOperation(value = "드론 별 비행운항 목록")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -324,8 +437,15 @@ public class MainDashController {
List<MainDashFlightListModel> result = null; List<MainDashFlightListModel> result = null;
try { try {
result = service.mainDashDronFlightList(serviceType); result = service.mainDashDronFlightList(serviceType); // 드론 별 비행운항 목록 조회하는 기능
}catch (Exception e) { }catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -334,6 +454,11 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashFlightListModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashFlightListModel>>(result));
} }
/**
* 일일 비정상상황에 대한 통계 기능.
* @param serviceType
* @return
*/
@GetMapping("/current/flight-warn") @GetMapping("/current/flight-warn")
@ApiOperation(value = "일일 비정상상황 통계") @ApiOperation(value = "일일 비정상상황 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -345,8 +470,15 @@ public class MainDashController {
List<MainDashWarnNumStcsModel> result = new ArrayList<>(); List<MainDashWarnNumStcsModel> result = new ArrayList<>();
try { try {
result = service.currentFlightWarn(serviceType); result = service.currentFlightWarn(serviceType); // 일일비정상상황에 대한 통계 기능을 조회하는 기능
}catch (Exception e) { }catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -355,6 +487,11 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashWarnNumStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashWarnNumStcsModel>>(result));
} }
/**
* 일일 비행계획에 대한 통계 기능.
* @param serviceType
* @return
*/
@GetMapping("/current/flight-plan") @GetMapping("/current/flight-plan")
@ApiOperation(value = "일일 비행계획 통계") @ApiOperation(value = "일일 비행계획 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -367,6 +504,13 @@ public class MainDashController {
try { try {
result = service.currentFlightPlan(serviceType); result = service.currentFlightPlan(serviceType);
} catch (Exception e){ } catch (Exception e){
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
@ -377,15 +521,25 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashPlanNumStcsModel>>(result)); return ResponseEntity.ok().body(new SuccessResponse<List<MainDashPlanNumStcsModel>>(result));
} }
/**
* 일일 비행건수 현황 통계기능.
* @return
*/
@GetMapping("/stcs/dailyflight") @GetMapping("/stcs/dailyflight")
@ApiOperation(value = "일일 비행건수 현황") @ApiOperation(value = "일일 비행건수 현황")
@Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API") @Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API")
public ResponseEntity<? extends BasicResponse> getDailyFlightNumOfStcs(){ public ResponseEntity<? extends BasicResponse> getDailyFlightNumOfStcs(){
List<MainDashFlightNumStcsModel> result = null; List<MainDashFlightNumStcsModel> result = null;
try { try {
result = service.dailyFlightNumOfStcs(); result = service.dailyFlightNumOfStcs(); // 일일 비행건수 현황 통계기능
}catch (Exception e){ }catch (Exception e){
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {} ", e); log.error("IGNORE : {} ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1")); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1"));
} }

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

@ -49,7 +49,7 @@ public class MainDashService {
private final JwtTokenUtil token; private final JwtTokenUtil token;
/** /**
* 일별 비행건수 통계 * 일별 비행건수 통계하는 기능.
* @param rq * @param rq
* @return * @return
*/ */
@ -69,7 +69,7 @@ public class MainDashService {
} }
/** /**
* Top5 지역별 비행횟수 통계 * Top5 지역별 비행횟수 통계기능.
* @param rq * @param rq
* @return * @return
*/ */
@ -89,7 +89,9 @@ public class MainDashService {
} }
/** /**
* TOP3 가입 그룹 리스트 표출 * TOP3 가입 그룹 리스트 조회하는 기능.
* @param cstmrSno
* @return
*/ */
public List<Map> mainDashGroupList(int cstmrSno){ public List<Map> mainDashGroupList(int cstmrSno){
@ -113,7 +115,7 @@ public class MainDashService {
/** /**
* Top3 기체 정보 리스트 표출 * Top3 기체 정보 리스트 조회하는 기능.
*/ */
public List<MainDashListModel> mainDashDronList(int cstmrSno){ public List<MainDashListModel> mainDashDronList(int cstmrSno){
List<MainDashListModel> resultList = ptyDronQueryRepository.dronTop3(cstmrSno); List<MainDashListModel> resultList = ptyDronQueryRepository.dronTop3(cstmrSno);
@ -122,8 +124,9 @@ public class MainDashService {
/** /**
* 김포공항, 날짜별 통계 * 김포공함, 날짜별 비행실적 통계
* @param yyyymm * @param date
* @param formatParam
* @return * @return
*/ */
public List<MainDashStcsModel> mainKacDashStcsDay(String date, String[] formatParam){ public List<MainDashStcsModel> mainKacDashStcsDay(String date, String[] formatParam){
@ -133,27 +136,38 @@ public class MainDashService {
return resultList; return resultList;
} }
public List<MainDashFlightListModel> mainDashDronFlightList(String serviceType) throws Exception{ /**
* 드론 비행운항 목록 조회하는 기능.
String cptAuth = token.getCptAuthCodeByToken(); * @param serviceType
* @return
List<MainDashFlightListModel> resultList = new ArrayList<MainDashFlightListModel>(); * @throws Exception
*/
cptAuth = "KAC"; // 임시 테스트용으로 KAC 권한 부여 public List<MainDashFlightListModel> mainDashDronFlightList(String serviceType) throws Exception{
if(cptAuth != null) { String cptAuth = token.getCptAuthCodeByToken();
resultList = fltPlanQueryRepository.getFlightDronList(cptAuth, serviceType); List<MainDashFlightListModel> resultList = new ArrayList<MainDashFlightListModel>();
}else { cptAuth = "KAC"; // 임시 테스트용으로 KAC 권한 부여
log.error("cptAuth가 부여되지 않은 계정입니다"); if(cptAuth != null) {
throw new Exception();
} resultList = fltPlanQueryRepository.getFlightDronList(cptAuth, serviceType);
return resultList; }else {
}
log.error("cptAuth가 부여되지 않은 계정입니다");
throw new Exception();
}
return resultList;
}
/**
* 드론 비행 현황기능.
* @return
* @throws Exception
*/
public Map<String, String> mainDashDronFlightStcs() throws Exception{ public Map<String, String> mainDashDronFlightStcs() throws Exception{
String cptAuth = ""; String cptAuth = "";
@ -182,7 +196,7 @@ public class MainDashService {
return resultList; return resultList;
} }
/** /**
* 김포공항, 비행승인 통계 * 김포공항, 비행승인 통계 기능.
* @param yyyymm * @param yyyymm
* @return * @return
*/ */
@ -288,8 +302,11 @@ public class MainDashService {
return result; return result;
} }
/**
* 일일 비행계획에 관련된 내용 통계조회하는 기능.
* @param serviceType
* @return
*/
public List<MainDashPlanNumStcsModel> currentFlightPlan(String serviceType){ public List<MainDashPlanNumStcsModel> currentFlightPlan(String serviceType){
// boolean authCheck = mainStatisticsService.authCheck(groupId); // boolean authCheck = mainStatisticsService.authCheck(groupId);
@ -320,6 +337,7 @@ public class MainDashService {
result.add(node); result.add(node);
} }
// 전날과 오늘 합계에 대한 감가율을 구함
for(int i = 0; i < result.size(); i++){ for(int i = 0; i < result.size(); i++){
if(i == 0) continue;; if(i == 0) continue;;
@ -341,9 +359,11 @@ public class MainDashService {
return result; return result;
} }
/**
* 일일비정상상황에 대한 통계 기능을 조회하는 기능.
* @param serviceType
* @return
*/
public List<MainDashWarnNumStcsModel> currentFlightWarn(String serviceType){ public List<MainDashWarnNumStcsModel> currentFlightWarn(String serviceType){
// boolean authCheck = mainStatisticsService.authCheck(groupId); // boolean authCheck = mainStatisticsService.authCheck(groupId);
@ -361,7 +381,7 @@ public class MainDashService {
for(String cate : dateCate){ for(String cate : dateCate){
List<CtrCntrlWarnLog> cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(serviceType, cate); List<CtrCntrlWarnLog> cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(serviceType, cate);
int count = cntrlWarnLogs.size(); // int count = cntrlWarnLogs.size(); // 총 갯수
int plan = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.PLAN.getValue())).count(); int plan = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.PLAN.getValue())).count();
int altitude = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.ALTITUDE.getValue())).count(); int altitude = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.ALTITUDE.getValue())).count();
@ -377,6 +397,7 @@ public class MainDashService {
result.add(node); result.add(node);
} }
// 전날과 오늘 합계에 대한 감가율을 구함
for(int i = 0; i < result.size(); i++){ for(int i = 0; i < result.size(); i++){
if(i == 0) continue;; if(i == 0) continue;;
@ -398,6 +419,10 @@ public class MainDashService {
return result; return result;
} }
/**
* 일일 비행건수 현황 통계기능.
* @return
*/
public List<MainDashFlightNumStcsModel> dailyFlightNumOfStcs() { public List<MainDashFlightNumStcsModel> dailyFlightNumOfStcs() {
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다. // SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.

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

@ -1858,10 +1858,12 @@ public class CtrCntrlQueryRepository{
return result; return result;
} }
/*** /**
* 대시보드 통계(지역별) * Top5 지역별 비행횟수 통계하는 SQL 기능.
* @param yyyymm
* @param serviceType
* @return
*/ */
public List<MainDashStcsModel> mainDashStcsArea(String yyyymm, String serviceType){ public List<MainDashStcsModel> mainDashStcsArea(String yyyymm, String serviceType){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
@ -1879,6 +1881,26 @@ public class CtrCntrlQueryRepository{
builder.and(formattedDate.eq(yyyymm)); builder.and(formattedDate.eq(yyyymm));
if(!serviceType.isEmpty()) builder.and(fBas.serviceType.eq(serviceType)); if(!serviceType.isEmpty()) builder.and(fBas.serviceType.eq(serviceType));
/**
* 일자[cntrlStDt] 조건,
* 항별[serviceType] 조건,
* 지역1[area1] 비워져 있으면 안되는 조건으로 조회하는 SQL 입니다.
*
* SELECT
* CCHA.ARE1 AS 'typeCd',
* COUNT(CCHA.*) AS 'count'
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN CTR_CNTRL_HSTRY_AREA CCHA
* ON CCB.CNTRL_ID = CCHA.CNTRL_ID
* AND CCHA.ACTN_TYPE = '99'
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON CCB.CNTRL_ID = FPCCR.CNTRL_ID
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* WHERE CCHA.AREA1 IS NOT NULL
* AND DATE_FORMAT(CCB.CNTRL_ST_DT , '%Y-%m') = #{yyyymm}
* AND FPB.SERVICE_TYPE = #{serviceType}
*/
List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class, List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class,
area.area1.as("typeCd"), area.area1.as("typeCd"),
area.count().as("count") area.count().as("count")
@ -1899,10 +1921,12 @@ public class CtrCntrlQueryRepository{
} }
/*** /**
* 대시보드 통계(일자별) * 대시보드 통계(일자별)하는 SQL 기능
* @param yyyymm
* @param serviceType
* @return
*/ */
public List<MainDashStcsModel> mainDashStcsDay(String yyyymm, String serviceType){ public List<MainDashStcsModel> mainDashStcsDay(String yyyymm, String serviceType){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas fBas = QFltPlanBas.fltPlanBas; QFltPlanBas fBas = QFltPlanBas.fltPlanBas;
@ -1926,6 +1950,23 @@ public class CtrCntrlQueryRepository{
builder.and(fBas.serviceType.eq(serviceType)); builder.and(fBas.serviceType.eq(serviceType));
} }
/**
* 일자[cntrlStDt] 조건,
* 항별 코드[serviceType]조건,
* 활성화코드[statusCd] '99' 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* DATE_FORMAT(FPB.CREATE_DT , '%d') as 'typeCd',
* COUNT(*) as 'count'
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON CCB.CNTRL_ID = FPCCR.CNTRL_ID
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* WHERE DATE_FORMAT(FPB.CREATE_DT , '%Y-%m') = #{yyyymm}
* AND CCB.STATUS_CD = '99'
* AND FPB.SERVICE_TYPE = #{serviceType}
*/
List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class , List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class ,
formattedDate2.as("typeCd"), formattedDate2.as("typeCd"),
bas.count().as("count") bas.count().as("count")
@ -2140,7 +2181,7 @@ public class CtrCntrlQueryRepository{
} }
/** /**
* 김포공항, 비행실적 통계 API * 김포공항, 비행실적 통계조회하는 SQL 기능 입니다.
* @param yyyymm * @param yyyymm
* @return * @return
*/ */
@ -2166,6 +2207,20 @@ public class CtrCntrlQueryRepository{
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date));
if(idntfNum != null) builder.and(bas.idntfNum.eq(idntfNum)); if(idntfNum != null) builder.and(bas.idntfNum.eq(idntfNum));
/**
* 활성화 코드[statusCd] '99' 인지,
* 날짜[date] 조건인지,
* 기체식별번호[idntfNum] 조건인지 확인하여 데이터베이스에서 조회하는 SQL 입니다.
*
* SELECT
* DATE_FORMAT(CCB.CNTRL_ST_DT, #{format[1]}) AS 'typeCd'
* COUNT(CCB.*) AS 'count'
* FROM CTR_CNTRL_BAS CCB
* WHERE CCB.STATUS_CD = '99'
* AND CCB.IDNTF_NUM = #{idntfNum}
* AND DATE_FORMAT(CCB.CNTRL_ST_DT, #{format[1]}) = #{date}
* GROUP BY DATE_FORMAT(CCB.CNTRL_ST_DT, #{format[1]})
*/
List<MainDashStcsModel> result = query List<MainDashStcsModel> result = query
.select( .select(
Projections.bean( Projections.bean(
@ -2214,6 +2269,16 @@ public class CtrCntrlQueryRepository{
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));
/**
* 날짜[date] 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* DATE_FORMAT(CCWL.CREATE_DT, #{format[1]}) AS 'typeCd'
* COUNT(FPB.*) AS 'count'
* FROM CTR_CNTRL_WARN_LOG CCWL
* WHERE DATE_FORMAT(CCWL.CREATE_DT, #{format[1]}) = #{date}
* GROUP BY DATE_FORMAT(CCWL.CREATE_DT, #{format[1]})
*/
List<MainDashStcsModel> result = query List<MainDashStcsModel> result = query
.select( .select(
Projections.bean( Projections.bean(
@ -3060,7 +3125,13 @@ public class CtrCntrlQueryRepository{
return result; return result;
} }
/**
* 시작일, 끝일 조건으로 비행관련 통계데이터를 조회하는 SQL 기능.
* @param start
* @param end
* @param serviceType
* @return
*/
public List<Tuple> completeFlight(Instant start, Instant end, String serviceType) { public List<Tuple> completeFlight(Instant start, Instant end, String serviceType) {
// Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다. // Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다.
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
@ -3076,6 +3147,32 @@ public class CtrCntrlQueryRepository{
builder.and(fpb.schFltEndDt.goe(start)); builder.and(fpb.schFltEndDt.goe(start));
if (serviceType != null && !serviceType.isEmpty()) builder.and(fpb.serviceType.eq(serviceType)); if (serviceType != null && !serviceType.isEmpty()) builder.and(fpb.serviceType.eq(serviceType));
/**
* 승인여부[aprvlYn] 'Y'인지,
* 비행계획서 일련번호[planSno] 없는행이 아닌지,
* 상태코드[statusCd] '99' 인지,
* 시작일[schFltStDt] 끝일[schFltEndDt] 사이인지,
* 각항별[serviceType] 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* FPB.PLAN_SNO ,
* FPB.APRVL_YN ,
* FPB.APRVL_DT ,
* CCB.CNTRL_ID ,
* CCB.STATUS_CD ,
* CCB.CNTRL_ST_DT ,
* CCB.CNTRL_END_DT
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* LEFT OUTER JOIN CTR_CNTRL_BAS CCB
* ON FPCCR.CNTRL_ID = CCB.CNTRL_ID
* WHERE FPB.APRVL_YN = 'Y'
* AND FPCCR.PLAN_SNO IS NOT NULL
* AND CCB.STATUS_CD = '99'
* AND FPB.SCH_FLT_ST_DT < #{end}
* AND FPB.SCH_FLT_END_DT >= #{start}
*/
return query return query
.select( .select(
fpb.planSno, fpb.planSno,
@ -3095,6 +3192,13 @@ public class CtrCntrlQueryRepository{
} }
/**
* 비행건수 조회하는 SQL 기능.
* @param start
* @param end
* @param serviceType
* @return
*/
public List<Tuple> notFlight(Instant start, Instant end, String serviceType) { public List<Tuple> notFlight(Instant start, Instant end, String serviceType) {
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
@ -3111,6 +3215,34 @@ public class CtrCntrlQueryRepository{
builder.and(fpb.schFltEndDt.goe(start)); builder.and(fpb.schFltEndDt.goe(start));
if (serviceType != null && !serviceType.isEmpty()) builder.and(fpb.serviceType.eq(serviceType)); if (serviceType != null && !serviceType.isEmpty()) builder.and(fpb.serviceType.eq(serviceType));
/**
* 승인여부[aprvlYn] 'Y'인지,
* 비행계획서 일련번호[planSno] 있는지,
* 상태값코드[statusCd] 있는지,
* 관제ID[cntrlId] 있는지,
* 시작일[schFltStDt] 끝일[schFltEndDt] 사이인지,
* 항별[serviceType]코드 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* FPB.PLAN_SNO ,
* FPB.APRVL_YN ,
* FPB.APRVL_DT ,
* CCB.CNTRL_ID ,
* FPCCR.CNTRL_ID ,
* FPCCR.PLAN_SNO
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON FPB.PLAN_SNO = FPCCR.PLAN_SNO
* LEFT OUTER JOIN CTR_CNTRL_BAS CCB
* ON CCB.CNTRL_ID = FPCCR.CNTRL_ID
* WHERE FPB.APRVL_YN = 'Y'
* AND FPCCR.PLAN_SNO IS NOT NULL
* AND CCB.STATUS_CD IS NOT NULL
* AND CCB.CNTRL_ID IS NOT NULL
* AND FPB.SCH_FLT_ST_DT < #{end}
* AND FPB.SCH_FLT_END_DT >= #{start}
* AND FPB.SERVICE_TYPE = #{serviceType}
*/
return query return query
.select( .select(
fpb.planSno, fpb.planSno,

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

@ -284,6 +284,12 @@ public class CtrCntrlWarnLogQueryRepository {
return result; return result;
} }
/**
* 카테고리[cate] 일일비정상황황에 대한 통계값을 구하는 SQL 기능.
* @param groupId
* @param cate
* @return
*/
public List<CtrCntrlWarnLog> currentStcs(String groupId, String cate){ public List<CtrCntrlWarnLog> currentStcs(String groupId, String cate){
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
@ -291,6 +297,20 @@ public class CtrCntrlWarnLogQueryRepository {
BooleanBuilder builder = getCurrentBooleanBuilder(groupId, cate, qFltPlanBas, qCtrCntrlWarnLog); BooleanBuilder builder = getCurrentBooleanBuilder(groupId, cate, qFltPlanBas, qCtrCntrlWarnLog);
/**
* 항별[serviceType] 조건인지,
* 날짜별[2일전, 1일전, 금일, 명일] 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* CCWL.WARN_TYPE
* FROM CTR_CNTRL_WARN_LOG CCWL
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON CCWL.CNTRL_ID = CCWL.CNTRL_ID
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* WHERE FPB.SERVICE_TYPE = #{serviceType}
* AND DATE_FORMAT(CCWL.CREATE_DT, #{dateFormat}) = #{cate}
*/
List<CtrCntrlWarnLog> stcsValues = query List<CtrCntrlWarnLog> stcsValues = query
.select( .select(
Projections.bean( Projections.bean(
@ -310,6 +330,15 @@ public class CtrCntrlWarnLogQueryRepository {
return stcsValues; return stcsValues;
} }
/**
* 2일전[beforeYesterday], 1일전[yesterday], 금일[today], 명일[tomorrow]
* 맞춰 WHERE절 연산값이 달라짐.
* @param serviceType
* @param cate
* @param qFltPlanBas
* @param qCtrCntrlWarnLog
* @return
*/
private BooleanBuilder getCurrentBooleanBuilder(String serviceType, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){ private BooleanBuilder getCurrentBooleanBuilder(String serviceType, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();

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

@ -949,8 +949,7 @@ public class FltPlanQueryRepository {
} }
/** /**
* 김포공항, 비행승인 통계 API * 김포공항, 비행승인 통계구하는 SQL 기능.
*
* @param date * @param date
* @return * @return
*/ */
@ -972,6 +971,18 @@ public class FltPlanQueryRepository {
builder.and(bas.aprvlYn.eq("Y")); builder.and(bas.aprvlYn.eq("Y"));
if (date != null && date.length() > 0) builder.and(formattedDate.eq(date)); if (date != null && date.length() > 0) builder.and(formattedDate.eq(date));
/**
* 날짜[date] 조건 ,
* 승인여부[aprvlYn] 조건으로 조회하는 SQL 입니다.
*
* SELECT
* DATE_FORMAT(FPB.APRVL_DT, #{format[1]}) AS 'typeCd'
* COUNT(FPB.*) AS 'count'
* FROM FLT_PLAN_BAS FPB
* WHERE FPB.APRVL_YN = 'Y'
* AND DATE_FORMAT(FPB.APRVL_DT, #{format[1]}) = #{date}
* GROUP BY DATE_FORMAT(FPB.APRVL_DT, #{format[1]})
*/
List<MainDashStcsModel> result = query List<MainDashStcsModel> result = query
.select( .select(
Projections.bean( Projections.bean(
@ -2120,6 +2131,17 @@ public class FltPlanQueryRepository {
BooleanBuilder builder = getCurrentBooleanBuilder(serviceType, cate, qFltPlanBas); BooleanBuilder builder = getCurrentBooleanBuilder(serviceType, cate, qFltPlanBas);
/**
* 항별[serviceType] 조건인지,
* 날짜별[2일전, 1일전, 금일, 명일] 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* FPB.PLAN_SNO ,
* FPB.APRVL_YN
* FROM FLT_PLAN_BAS FPB
* WHERE FPB.SERVICE_TYPE = #{serviceType}
* AND DATE_FORMAT(CCWL.CREATE_DT, #{dateFormat}) = #{cate}
*/
List<FltPlanBas> stcsValues = query List<FltPlanBas> stcsValues = query
.select( .select(
Projections.bean( Projections.bean(
@ -2135,6 +2157,14 @@ public class FltPlanQueryRepository {
return stcsValues; return stcsValues;
} }
/**
* 2일전[beforeYesterday], 1일전[yesterday], 금일[today], 명일[tomorrow]
* 맞춰 WHERE절 연산값이 달라짐.
* @param serviceType
* @param cate
* @param qFltPlanBas
* @return
*/
private BooleanBuilder getCurrentBooleanBuilder(String serviceType, String cate, QFltPlanBas qFltPlanBas){ private BooleanBuilder getCurrentBooleanBuilder(String serviceType, String cate, QFltPlanBas qFltPlanBas){
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
@ -2178,8 +2208,12 @@ public class FltPlanQueryRepository {
return builder; return builder;
} }
/**
* 드론 비행운항 목록 조회하는 SQL 기능.
* @param cptAuth
* @param serviceType
* @return
*/
public List<MainDashFlightListModel> getFlightDronList(String cptAuth, String serviceType){ public List<MainDashFlightListModel> getFlightDronList(String cptAuth, String serviceType){
QComIdntfBas cib = QComIdntfBas.comIdntfBas; QComIdntfBas cib = QComIdntfBas.comIdntfBas;
@ -2215,7 +2249,46 @@ public class FltPlanQueryRepository {
.or(fpb.createDt.between(startOfToday, startOfTomorrow)) .or(fpb.createDt.between(startOfToday, startOfTomorrow))
) )
.and(fpb.planSno.isNotNull()); .and(fpb.planSno.isNotNull());
/**
* 항별[serviceType] 조건인지,
* 비행계획서 고유번호[planSno] 비워져 있지는 않은지,
* 관제 생성시간[createDt] startOfToday와 startOfTomorrow 사이에 있는지,
* 비행계획서 생성시간이 startOfToday와 startOfTomorrow 사이에 있는지
* 확인하여 데이터베이스에서 조회하는 SQL 입니다.
*
* SELECT
* PGB.GROUP_NM ,
* FPB.MEMBER_NAME ,
* FPA.IDNTF_NUM ,
* CCB.CNTRL_ST_DT ,
* CCB.CNTRL_END_DT ,
* CONCAT(SEC_TO_TIME(TIME_TO_SEC(TIMEDIFF(CCB.CNTRL_END_DT ,CCB.CNTRL_ST_DT)))) AS 'totalFlightTime',
* CASE
* WHEN CCB.STATUS_CD = '01' THEN '비행 '
* WHEN CCB.STATUS_CD = '99' THEN '비행 완료'
* WHEN FPB.PLAN_SNO IS NOT NULL THEN '비행 대기 '
* ELSE '비행 없음'
* END AS 'status'
* FROM FLT_PLAN_ARCRFT FPA
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPA.PLAN_SNO = FPB.PLAN_SNO
* LEFT OUTER JOIN PTY_GROUP_BAS PGB
* ON FPB.GROUP_ID = PGB.GROUP_ID
* LEFT OUTER JOIN COM_IDNTF_BAS CIB
* ON FPA.IDNTF_NUM = CIB.IDNTF_NUM
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON FPB.PLAN_SNO = FPCCR.PLAN_SNO
* LEFT OUTER JOIN CTR_CNTRL_BAS CCB
* ON FPCCR.CNTRL_ID = CCB.CNTRL_ID
* WHERE FPB.SERVICE_TYPE = #{serviceType}
* AND PGB.GROUP_NM = #{cptAuth}
* AND FPB.PLAN_SNO IS NOT NULL
* AND (
* (CCB.CREATE_DT BETWEEN #{startOfToday}, #{startOfTomorrow})
* OR (FPB.CREATE_DT BETWEEN #{startOfToday}, #{startOfTomorrow})
* )
*/
List<MainDashFlightListModel> result = query List<MainDashFlightListModel> result = query
.select(Projections.bean(MainDashFlightListModel.class, .select(Projections.bean(MainDashFlightListModel.class,
pgb.groupNm, pgb.groupNm,
@ -2247,6 +2320,11 @@ public class FltPlanQueryRepository {
return result; return result;
} }
/**
* 드론 비행 현황을 조회하는 SQL 기능.
* @param cptAuth
* @return
*/
public Map<String, String> getFlightDronStcs(String cptAuth){ public Map<String, String> getFlightDronStcs(String cptAuth){
QComIdntfBas cib = QComIdntfBas.comIdntfBas; QComIdntfBas cib = QComIdntfBas.comIdntfBas;
@ -2274,6 +2352,38 @@ public class FltPlanQueryRepository {
) )
.and(fpb.planSno.isNotNull()); .and(fpb.planSno.isNotNull());
/**
* 항별[serviceType] 조건인지,
* 비행계획서 고유번호[planSno] 비워져 있지는 않은지,
* 관제 생성시간[createDt] startOfToday와 startOfTomorrow 사이에 있는지,
* 비행계획서 생성시간이 startOfToday와 startOfTomorrow 사이에 있는지
* 확인하여 데이터베이스에서 조회하는 SQL 입니다.
*
* SELECT
* CASE
* WHEN CCB.STATUS_CD = '01' THEN 'inFlight'
* WHEN CCB.STATUS_CD = '99' THEN 'flightComplete'
* WHEN FPB.PLAN_SNO IS NOT NULL THEN 'flightWaiting'
* ELSE '비행 없음'
* END AS 'status',
* COUNT(FPB.*) AS 'count'
* FROM FLT_PLAN_ARCRFT FPA
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPB.PLAN_SNO = FPA.PLAN_SNO
* LEFT OUTER JOIN COM_IDNTF_BAS CIB
* ON CIB.IDNTF_NUM = FPA.IDNTF_NUM
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* LEFT OUTER JOIN CTR_CNTRL_BAS CCB
* ON FPCCR.CNTRL_ID = CCB.CNTRL_ID
* WHERE FPB.SERVICE_TYPE = #{serviceType}
* AND FPB.PLAN_SNO IS NOT NULL
* AND (
* (CCB.CREATE_DT BETWEEN #{startOfToday}, #{startOfTomorrow})
* OR (FPB.CREATE_DT BETWEEN #{startOfToday}, #{startOfTomorrow})
* )
* GROUP BY CCB.STATUS_CD
*/
List<Tuple> res = query List<Tuple> res = query
.select( .select(
new CaseBuilder() new CaseBuilder()

32
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyDronQueryRepository.java

@ -400,14 +400,38 @@ public class PtyDronQueryRepository{
} }
/*** /**
* 메인 대시보드 기체 정보 3건 표출 * 최근 등록한 기체 정보 3건 조회하는 SQL 기능.
*/ * @param cstmrSno
* @return
*/
public List<MainDashListModel> dronTop3(int cstmrSno){ public List<MainDashListModel> dronTop3(int cstmrSno){
QComArcrftBas bas = QComArcrftBas.comArcrftBas; QComArcrftBas bas = QComArcrftBas.comArcrftBas;
QPtyGroupBas gBas = QPtyGroupBas.ptyGroupBas; QPtyGroupBas gBas = QPtyGroupBas.ptyGroupBas;
QPtyCstmrGroup group = QPtyCstmrGroup.ptyCstmrGroup; QPtyCstmrGroup group = QPtyCstmrGroup.ptyCstmrGroup;
/**
* 사용여부[useYn] 'Y'인지,
* 회원고유번호[cstmrSno] 조건인지 확인하여 조회하는 SQL 입니다.
*
* SELECT
* CAB.ARCRFT_MODEL_NM ,
* CAB.PRDCT_NUM ,
* CAB.CREATE_DT ,
* PGB.GROUP_NM
* FROM PTY_CSTMR_GROUP PCG
* LEFT OUTER JOIN COM_ARCRFT_BAS CAB
* ON PCG.GROUP_ID = CAB.GROUP_ID
* AND PCG.JOIN_YN = 'Y'
* AND PCG.APRVL_YN = 'Y'
* AND CAB.USE_YN = 'Y'
* LEFT OUTER JOIN PTY_GROUP_BAS PGB
* ON PCG.GROUP_ID = PGB.GROUP_ID
* WHERE CAB.USE_YN = 'Y'
* AND PCG.CSTMR_SNO = #{cstmrSno}
* ORDER BY CAB.CREATE_DT DESC
* LIMIT 3
*/
List<MainDashListModel> result = List<MainDashListModel> result =
query.select(Projections.bean(MainDashListModel.class , query.select(Projections.bean(MainDashListModel.class ,
bas.arcrftModelNm, bas.arcrftModelNm,

25
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java

@ -788,6 +788,12 @@ public class PtyGroupQueryRepository{
} }
return cnt; return cnt;
} }
/**
* 최근 가입된 순으로 3개 그룹 조회하는 SQL 기능.
* @param cstmrSno
* @return
*/
public List<BasGroupModel> groupTop3(int cstmrSno){ public List<BasGroupModel> groupTop3(int cstmrSno){
QPtyGroupBas bas = QPtyGroupBas.ptyGroupBas; QPtyGroupBas bas = QPtyGroupBas.ptyGroupBas;
@ -797,7 +803,24 @@ public class PtyGroupQueryRepository{
builder.and(bas.useYn.eq("Y")); builder.and(bas.useYn.eq("Y"));
builder.and(dtl.cstmrSno.eq(cstmrSno)); builder.and(dtl.cstmrSno.eq(cstmrSno));
builder.and(dtl.groupAuthCd.eq("MASTER")); builder.and(dtl.groupAuthCd.eq("MASTER"));
/**
* 사용여부[useYn] 'Y' 인지,
* 회원고유번호[cstmrSno] 조건인지,
* 그룹권한코드[groupAuthCd] 'MASTER' 인지 조회하는 SQL 입니다.
*
* SELECT
* PGB.GROUP_ID ,
* PGB.GROUP_NM ,
* PGB.GROUP_TYPE_CD ,
* PGB.CREATE_DT
* FROM PTY_GROUP_BAS PGB
* LEFT OUTER JOIN PTY_CSTMR_GROUP PCG
* ON PGB.GROUP_ID = PCG.GROUP_ID
* WHERE PGB.USE_YN = 'Y'
* AND PCG.CSTMR_SNO = #{cstmrSno}
* AND PCG.GROUP_AUTH_CD = 'MASTER'
*/
List<BasGroupModel> result = List<BasGroupModel> result =
query.select(Projections.bean(BasGroupModel.class , query.select(Projections.bean(BasGroupModel.class ,
bas.groupId, bas.groupId,

Loading…
Cancel
Save