diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java index ca85162c..9d6c538f 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java @@ -36,7 +36,7 @@ public class CtrCntrlController { } /** - * TODO 드론 관제 이력 목록 (Socket 분리 전) + * TODO 드론 관제 이력 목록 (Socket 분리 전) 조회하는 기능. * * @param id - 관제 ID * @return @@ -49,9 +49,16 @@ public class CtrCntrlController { List result = null; try { - result = service.getListHistory(id); + result = service.getListHistory(id); // 관제이력을 조회하는 기능 [현재는 사용하지 않음] } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -61,8 +68,8 @@ public class CtrCntrlController { } /** - * TODO 드론 관제 상세 정보 - * + * TODO 드론 관제 상세 정보 조회 기능, + * 관제ID[controlId]로 조회하여 확인함 * @param id - 관제 ID * @return */ @@ -74,9 +81,16 @@ public class CtrCntrlController { CtrCntrlDtlModel result = null; try { - result = service.getDetail(id); + result = service.getDetail(id); // 관제 상세 조회 } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -99,8 +113,15 @@ public class CtrCntrlController { List history; try { - history = service.getHistory(id); + history = service.getHistory(id); // 관제 이력 조회하는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -108,14 +129,29 @@ public class CtrCntrlController { return ResponseEntity.ok().body(new SuccessResponse<>(history)); } + /** + * 드론관제 날씨를 조회하는 기능, + * CtrCntrlWeatherModel값에 따라 조회함 + * @param rq + * @return + * @throws IOException + * @throws ParseException + */ @GetMapping("/api/weather") @ApiOperation(value = "드론 관제 날씨") @Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") public ResponseEntity restApiGetWeather(CtrCntrlWeatherModel rq) throws IOException, ParseException { JSONObject jsonObject = null; try { - jsonObject = service.getWeather(rq); + jsonObject = service.getWeather(rq); // 날씨 조회하는 기능 } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -136,8 +172,15 @@ public class CtrCntrlController { List list; try { - list = service.getGroupAuthInfo(); + list = service.getGroupAuthInfo(); // 그룹의 기체 정보 조회하는 기능 } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -162,6 +205,13 @@ public class CtrCntrlController { try { list = service.getFlightPlanForKac(idntfNum); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -186,6 +236,13 @@ public class CtrCntrlController { try { warnLog = service.getWarnLog(id); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -210,6 +267,13 @@ public class CtrCntrlController { try { arcrftWarnList = service.getArcrftWarnList(rq.getCntrlId()); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -232,6 +296,13 @@ public class CtrCntrlController { try { rs = service.checkPlanContains(rq); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -254,6 +325,13 @@ public class CtrCntrlController { try { result = service.getId(id); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -279,6 +357,13 @@ public class CtrCntrlController { try { result = service.checkWarring(id, lat, lon); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -300,6 +385,13 @@ public class CtrCntrlController { try { result = service.getComplete(cntrlId); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/PingController.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/PingController.java index ed25e2f1..43f919c6 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/PingController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/PingController.java @@ -6,6 +6,10 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class PingController { + /** + * 서버가 살아있는지 확인하는 API + * @return + */ @GetMapping("/ping") public String ping(){ return "SUCCESS"; diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/SocketReceiverController.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/SocketReceiverController.java index 21d9e3f5..b88db876 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/SocketReceiverController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/SocketReceiverController.java @@ -32,13 +32,26 @@ import java.util.concurrent.Callable; public class SocketReceiverController { private final SocketReceiverService socketReceiverService; + + /** + * 소켓에서 날아오는 데이터를 데이터베이스에 저장시키는 기능, + * GPModel 모델에 오는값을 저장시킴. + * @param model + * @return + */ @PostMapping("/receiver") - public ResponseEntity receiver(@RequestBody GPModel model) { - System.out.println("socket message : " + model); - socketReceiverService.insert(model); + public ResponseEntity receiver(@RequestBody GPModel model) { + log.info("socket message : {}", model); + socketReceiverService.insert(model); // 소켓에서 날아오는 데이터를 데이터베이스에 저장시키는 기능 return ResponseEntity.ok().build(); } + /** + * 비동기방식으로 소켓에서 날아오는 데이터를 데이터베이스에 저장시키는 기능, + * GPModel 모델에 오는값을 저장시킴. + * @param model + * @return + */ @PostMapping("/receiver/async") public Callable asyncReceiver(@RequestBody GPModel model) { return () -> { @@ -48,10 +61,16 @@ public class SocketReceiverController { }; } + /** + * 소켓에서 날아오는 데이터를 데이터베이스에 저장시키는 기능, + * 한번에 많은 관제아이디를 저장시키기 위해 사용하는 기능. + * @param models + * @return + */ @PostMapping("/receiver/all") public ResponseEntity receiver(@RequestBody Map> models) { // System.out.println("socket message : " + models); - socketReceiverService.insertAll(models); + socketReceiverService.insertAll(models); // 한번에 많은 데이터를 데이터베이스에 저장하는 기능 return ResponseEntity.ok().build(); } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java index 66225e66..23b41879 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java @@ -73,6 +73,12 @@ public class CtrCntrlService { private final FltPlanQueryRepository fltPlanQueryRepository; + /** + * 관제이력을 조회하는 기능. + * 현재는 사용하지 않음. + * @param objectId + * @return + */ public List getListHistory(String objectId) { List filterList = new ArrayList(); @@ -92,7 +98,7 @@ public class CtrCntrlService { } /** - * TODO 관제 상세 조회 + * TODO 관제 상세 조회하는 기능. * * @param controlId * @return @@ -109,7 +115,7 @@ public class CtrCntrlService { if (result.getHpno() != null && !result.getHpno().isEmpty()) { try { - String decHpno = EncryptUtils.decrypt(result.getHpno()); + String decHpno = EncryptUtils.decrypt(result.getHpno()); // 휴대폰번호 복호화. if (decHpno != null && !decHpno.isEmpty()) { result.setHpno(decHpno); } @@ -609,6 +615,13 @@ public class CtrCntrlService { return result; } + /** + * 날씨 조회하는 기능. + * @param rq + * @return + * @throws IOException + * @throws ParseException + */ public JSONObject getWeather(CtrCntrlWeatherModel rq) throws IOException, ParseException { StringBuilder urlBuilder = new StringBuilder(weatherUrl); diff --git a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/SocketReceiverService.java b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/SocketReceiverService.java index f157a02e..2bf21e3d 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/SocketReceiverService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/SocketReceiverService.java @@ -42,6 +42,11 @@ public class SocketReceiverService { private final FltPlanQueryRepository fltPlanQueryRepository; private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository; + /** + * 소켓에서 날아오는 데이터를 데이터베이스에 저장시키는 기능. + * @Transactional 데이터베이스에 저장, 삭제, 수정일 경우 데이터베이스의 정합을 위해 사용함. + * @param model + */ @Transactional public void insert(GPModel model) { GPDatabaseModel dbModel = new GPDatabaseModel(); @@ -111,6 +116,11 @@ public class SocketReceiverService { } + /** + * 한번에 많은 데이터를 데이터베이스에 저장하는 기능. + * @Transactional 데이터베이스에 저장, 삭제, 수정일 경우 데이터베이스의 정합을 위해 사용함. + * @param models + */ @Transactional public void insertAll(Map> models) { // TODO 일괄 처리 필요 diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 21357e37..ed4ef481 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -1239,6 +1239,7 @@ public class CtrCntrlQueryRepository{ /** * 비행번호[CNTRL_ID] 로 이력현황을 조회하는 SQL입니다. + * * SELECT * CCH.CNTRL_ID , * CCH.HSTRY_SNO , @@ -1554,6 +1555,11 @@ public class CtrCntrlQueryRepository{ } // TODO 임시 수정 + /** + * 관제사항 상세보는 SQL기능. + * @param controlId + * @return + */ public CtrCntrlDtlModel detailCntrlForKac(String controlId) { QCtrCntrlBas ctr = QCtrCntrlBas.ctrCntrlBas; // QComArcrftBas cBas = QComArcrftBas.comArcrftBas; @@ -1563,6 +1569,40 @@ public class CtrCntrlQueryRepository{ QFltPlanCtrCntrlRel rel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanBas fBas = QFltPlanBas.fltPlanBas; + /** + * 관제ID[controlId]값 조건으로 조회하는 SQL입니다. + * + * SELECT + * CCB.CNTRL_ID , + * CCB.CNTRL_ST_DT , + * CCB.CNTRL_END_DT , + * FPA.ARCRFT_SNO , + * FPA.PRDCT_NUM , + * FPA.ARCRFT_TYPE_CD , + * FPA.ARCRFT_MODEL_NM , + * FPA.PRDCT_CMPN_NM , + * FPA.WGHT_TYPE_CD , + * FPA.IMAGE_URL , + * FPA.CAMERA_YN , + * FPA.INSRNC_YN , + * FPA.OWNER_NM , + * FPP.HPNO , + * FPB.CORP_REG_YN , + * FPB.APRVL_DT , + * FPB.APRVL_YN + * 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 + * LEFT OUTER JOIN FLT_PLAN_ARCRFT FPA + * ON FPB.PLAN_SNO = FPA.PLAN_SNO + * AND CCB.IDNTF_NUM = FPA.IDNTF_NUM + * LEFT OUTER JOIN FLT_PLAN_PILOT FPP + * ON FPB.PLAN_SNO = FPP.PLAN_SNO + * WHERE CCB.CNTRL_ID = #{cntrlId} + * ORDER BY CCB.CREATE_DT DESC + */ CtrCntrlDtlModel result = query.select(Projections.bean(CtrCntrlDtlModel.class, ctr.cntrlId, ctr.cntrlStDt, @@ -1899,11 +1939,28 @@ public class CtrCntrlQueryRepository{ return result; } + /** + * 관제이력을 조회하는 SQL 입니다.. + * @param controlId + * @return + */ public List getDroneHistory(String controlId) { QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlHstry hst = QCtrCntrlHstry.ctrCntrlHstry; + /** + * 비행관제번호[CNTRL_ID]로 시뮬레이션 상세정보 조회하는 SQL 입니다. + * + * SELECT + * CCB.IDNTF_NUM AS 'objectId', + * CCH.LAT AS 'lat', + * CCH.LON AS 'lon' + * FROM CTR_CNTRL_BAS CCB + * LEFT OUTER JOIN CTR_CNTRL_HSTRY CCH + * ON CCB.CNTRL_ID = CCH.CNTRL_ID + * WHERE CCB.CNTRL_ID = #{cntrlId} + */ List list = query.select(Projections.bean(GPHistoryModel.class, bas.idntfNum.as("objectId"), hst.lat.as("lat"), @@ -1918,6 +1975,11 @@ public class CtrCntrlQueryRepository{ } + /** + * 그룹의 기체 정보 조회하는 SQL 입니다. + * @Cacheable은 RQ값이 같을 시 이전 구해놨던 데이터를 바로 발송하는 어노테이션입니다, 자주 쓰는 항목에 사용합니다. + * @return + */ @Cacheable(value = "group-auth") public List findByGroupInfo() { QPtyCstmrGroup pcg = QPtyCstmrGroup.ptyCstmrGroup; @@ -1937,6 +1999,21 @@ public class CtrCntrlQueryRepository{ builder.and(pcg.cstmrSno.eq(cstmrSno)); } + /** + * 권한에 따라 조회하는 SQL입니다. + * + * SELECT + * PGB.GROUP_ID AS 'groupId', + * PGB.GROUP_NM AS 'groupNm', + * PCG.GROUP_AUTH_CD AS 'groupAuthCd' + * 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.GROUP_AUTH_CD = 'MASTER' -- 권한이 ADMIN 혹은 SUPER일 경우 + * AND PCG.APRVL_YN = 'Y' -- 권한이 USER일 경우 + * AND PCG.CSTMR_SNO = #{cstmrSno} -- 권한이 USER일 경우 + */ List model = query.select(Projections.bean(CtrCntrlGroupModel.class, pgb.groupId.as("groupId"), pgb.groupNm.as("groupNm"), @@ -2161,6 +2238,11 @@ public class CtrCntrlQueryRepository{ return result; } + /** + * 비행완료된 관제이력 조회하는 SQL 기능. + * @param cntrlId + * @return + */ public List getCompleteInfo(String cntrlId){ QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; @@ -2170,6 +2252,24 @@ public class CtrCntrlQueryRepository{ builder.and(qCtrCntrHstry.cntrlId.eq(cntrlId)); builder.and(qCntrlBasEntity.statusCd.eq("99")); + /** + * 비행번호[CNTRL_ID] 로 이력현황을 조회하는 SQL입니다. + * + * SELECT + * CCH.LAT , + * CCH.LON , + * CCH.SPEED , + * CCH.SPEED_TYPE , + * CCH.ELEV , + * CCH.ELEV_TYPE , + * CCH.MV_DSTNC , + * CCH.MV_DSTNC_TYPE + * FROM CTR_CNTRL_BAS CCB + * LEFT OUTER JOIN CTR_CNTRL_HSTRY CCH + * ON CCB.CNTRL_ID = CCH.CNTRL_ID + * WHERE CCH.CNTRL_ID = #{cntrlId} + * AND CCB.STATUS_CD = '99' + */ List result = query.select(Projections.bean(CtrCntrlHstry.class , qCtrCntrHstry.lat, qCtrCntrHstry.lon ,