Browse Source

Merge remote-tracking branch 'origin/develop' into develop

pull/18/head
지대한 9 months ago
parent
commit
bfc2a00547
  1. 136
      pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java
  2. 36
      pav-server/src/main/java/com/palnet/biz/api/bas/dron/service/BasDronService.java
  3. 250
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  4. 103
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  5. 268
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  6. 107
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyDronQueryRepository.java
  7. 8
      pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrTrnsLctnService.java

136
pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java

@ -39,7 +39,8 @@ public class BasDronController {
/**
* 목록 조회
* 드론 목록 조회기능,
* BasDronRqModel에 조회할 조건 값들이 들어있음
* @param rq
* @return
*/
@ -49,17 +50,25 @@ public class BasDronController {
public ResponseEntity<? extends BasicResponse> list(BasDronRqModel rq) {
ComnPagingRs<BasDronModel> result = null;
//입력값 검증
// 그룹아이디[groupId] 입력값 검증
if(StringUtils.isEmpty(rq.getGroupId())) {
return ResponseEntity.status(HttpStatus.OK)
// 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
try {
result = service.list(rq);
result = service.list(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"));
@ -71,7 +80,8 @@ public class BasDronController {
/**
* 식별정보 조회
* 식별정보 조회하는 기능,
* 기체 일련번호[arcrftSno] 조회함.
* @param rq
* @return
*/
@ -82,17 +92,25 @@ public class BasDronController {
public ResponseEntity<? extends BasicResponse> mylist(@PathVariable Integer id) {
List<BasIdntfModel> result = null;
//입력값 검증
// 기체일련번호확인[id] 입력값 검증처리
if(StringUtils.isEmpty(id)) {
return ResponseEntity.status(HttpStatus.OK)
// 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
try {
result = service.listIdntf(id);
result = service.listIdntf(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"));
@ -104,7 +122,8 @@ public class BasDronController {
/**
* 상세 조회
* 드론 상세 조회,
* 기체일련번호[arcrftSno] 드론 상세조회하는 기능.
* @param id
* @return
*/
@ -116,16 +135,24 @@ public class BasDronController {
BasDronModel result = null;
try {
//입력값 검증
// 기체일련번호확인[id] 입력값 검증처리
if(StringUtils.isEmpty(id)) {
return ResponseEntity.status(HttpStatus.OK)
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
// 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
result = service.detail(id);
result = service.detail(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"));
@ -137,7 +164,8 @@ public class BasDronController {
/**
* 생성
* 드론정보 생성하는 기능,
* BasDronModel 모델에 드론 입력정보로 드론정보 생성함.
* @return
*/
@PostMapping(value = "/create")
@ -147,16 +175,31 @@ public class BasDronController {
Map<String , Object> resultMap = new HashMap<String,Object>();
try {
boolean result = service.create(rq);
boolean result = service.create(rq); // 드론 정보 생성하는 기능.
resultMap.put("result", result);
}catch(CustomException e2) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e2);
resultMap.put("result", false);
resultMap.put("errorCode", e2.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}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"));
@ -167,7 +210,8 @@ public class BasDronController {
}
/**
* 생성
* 식별장치 생성하는 기능,
* BasIdntfRqModel 모델에 입력받은 식별장치정보 생성함/
* @return
*/
@PostMapping(value = "/idntf/create")
@ -178,17 +222,32 @@ public class BasDronController {
try {
// boolean result = service.create(rq);
boolean result = service.createIdntf(rq);
boolean result = service.createIdntf(rq); // 식밸장치 생성하는 기능.
resultMap.put("result", result);
}catch(CustomException e2) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e2);
resultMap.put("result", false);
resultMap.put("errorCode", e2.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
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"));
@ -199,7 +258,8 @@ public class BasDronController {
}
/**
* 수정
* 드론 정보 수정하는 기능,
* BasDronModel에 입력받은 수정할 정보를 데이터베이스에 수정함.
* @return
*/
@PutMapping(value = "/update")
@ -209,17 +269,32 @@ public class BasDronController {
Map<String , Object> resultMap = new HashMap<String,Object>();
try {
boolean result = service.update(rq);
boolean result = service.update(rq); // 드론정보 수정하는 기능.
resultMap.put("result", result);
}
catch(CustomException e2) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e2);
resultMap.put("result", false);
resultMap.put("errorCode", e2.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}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"));
@ -230,7 +305,8 @@ public class BasDronController {
}
/**
* 삭제
* 드론정보 삭제하는 기능,
* 기체일련번호[arcrftSno] 삭제함
* @param id
* @return
*/
@ -277,17 +353,25 @@ public class BasDronController {
try {
//입력값 검증
// 기체일련번호확인[id] 입력값 검증처리
if(StringUtils.isEmpty(id)) {
return ResponseEntity.status(HttpStatus.OK)
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
boolean result = service.deleteIdntf(id);
// 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
boolean result = service.deleteIdntf(id); // 드론정보 삭제하는 기능.
resultMap.put("result", result);
} 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"));

36
pav-server/src/main/java/com/palnet/biz/api/bas/dron/service/BasDronService.java

@ -48,7 +48,7 @@ public class BasDronService {
private JwtTokenUtil jwtTokenUtil;
/**
* 드론 목록
* 드론 목록 조회하는 기능
* @param rq
* @return
*/
@ -56,10 +56,13 @@ public class BasDronService {
ComnPagingRs<BasDronModel> response = new ComnPagingRs<>();
// 페이징 처리를 위한 객체
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord());
// 데이터 베이스에서 검색조건에 맞는 값으로 드론목록 조회함.
PageImpl<BasDronModel> result = query.list(rq, pageable);
// 데이터 베이스에서 전체 리스트 값이 몇인지 조회.
long total = query.listCount(rq);
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord();
@ -92,7 +95,7 @@ public class BasDronService {
}
/**
* 상세 조회
* 드론 상세 조회하는 기능.
* @param arcrftSno
* @return
* @throws Exception
@ -110,7 +113,7 @@ public class BasDronService {
}
/**
* 생성
* 드론 정보 생성하는 기능.
* @param
* @return
* @throws Exception
@ -168,7 +171,7 @@ public class BasDronService {
}
/**
* 식밸장치 생성
* 식밸장치 생성하는 기능.
* @param
* @return
* @throws Exception
@ -206,6 +209,11 @@ public class BasDronService {
}
/**
* 드론정보 삭제하는 기능.
* @param idntfNum
* @return
*/
public boolean deleteIdntf(String idntfNum) {
Optional<ComIdntfBas> optional = comIdntBasRepository.findById(idntfNum);
@ -218,7 +226,13 @@ public class BasDronService {
return true;
}
/**
* 입력받은 드론정보 데이터베이스에 생성함.
* @param model
* @return
* @throws Exception
*/
public ComArcrftBas insertComArcrftBas(BasDronModel model) throws Exception{
@ -261,7 +275,7 @@ public class BasDronService {
/**
* 수정
* 드론정보 수정하는 기능.
* @param
* @return
* @throws Exception
@ -319,7 +333,13 @@ public class BasDronService {
return true;
}
/**
* 입력받은 드론 수정정보로 데이터베이스에 수정함.
* @param model
* @return
* @throws Exception
*/
public ComArcrftBas updateComArcrftBas(BasDronModel model) throws Exception{

250
pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -78,9 +78,16 @@ public class BasFlightController {
private final ComnFileService comnFileService;
private final PdfUtils pdfUtils;
/**
* 공역데이터 내려주는 기능.
* @return
* @throws IOException
* @throws ParseException
*/
@GetMapping("/area")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<Object> findAirSpace() throws IOException, ParseException {
// 1. file read
Resource resource = new ClassPathResource("air/airgeo.json");
InputStream jsonInputStream = resource.getInputStream();
@ -102,7 +109,12 @@ public class BasFlightController {
return ResponseEntity.ok().body(airArea);
}
// 비행계획서 조회
/**
* 비행계획서 조회하는 기능,
* BasFlightPlanListRq 모델에 조건값에 따라 조회함.
* @param rq
* @return
*/
@GetMapping(value = "/plan/list")
@ApiOperation(value = "비행계획서 조회")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -110,8 +122,15 @@ public class BasFlightController {
ComnPagingRs<BasFlightPlanModel> result = null;
log.debug(">>> rq : {}", rq);
try {
result = basFlightService.listPlan(rq);
result = basFlightService.listPlan(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"));
@ -120,7 +139,12 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(result));
}
// 비행계획서 상세 조회
/**
* 비행계획서 상세 조회기능,
* 비행계획서 번호[planSno] 상세조회
* @param planSno
* @return
*/
@GetMapping(value = "/plan/detail/{planSno}")
@ApiOperation(value = "비행계획서 상세 조회")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -128,8 +152,15 @@ public class BasFlightController {
public ResponseEntity<? extends BasicResponse> detailPlan(@PathVariable("planSno") Integer planSno) {
BasFlightPlanModel result = null;
try {
result = basFlightService.detailPlan(planSno);
result = basFlightService.detailPlan(planSno); // 비행계획서 고유번호[planSno]로 상세 조회하는 기능.
} 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"));
@ -138,25 +169,46 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(result));
}
// 비행계획서 등록
/**
* 비행계획서 등록하는 기능,
* BasFlightPlanModel모델에 입력받은값으로 등록함.
* @param rq
* @return
*/
@PostMapping(value = "/plan/create")
@ApiOperation(value = "비행계획서 등록")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> createPlan(@RequestBody BasFlightPlanModel rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
log.error(">>> rq : {}", rq);
boolean result = basFlightService.createPlan(rq);
boolean result = basFlightService.createPlan(rq); // 입력받은 값으로 비행계획서 등록하는 기능.
resultMap.put("result", result);
log.info(">>> resultMap : " , resultMap);
} catch (CustomException e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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"));
@ -165,23 +217,43 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
}
// 비행계획서 수정
/**
* 비행계획서 수정하는 기능,
* BasFlightPlanModel 모델에 입력받은 값으로 수정함
* @param rq
* @return
*/
@PutMapping(value = "/plan/update")
@ApiOperation(value = "비행계획서 수정")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> updatePlan(@RequestBody BasFlightPlanModel rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
boolean result = basFlightService.updatePlan(rq);
boolean result = basFlightService.updatePlan(rq); // 입력받은 값으로 비행계획서 수정하는 기능.
resultMap.put("result", result);
} catch (CustomException e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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"));
@ -190,7 +262,12 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
}
// 비행계획서 삭제
/**
* 비행계획서 삭제하는 기능,
* 비행계획서 고유번호[planSno] 삭제함.
* @param planSno
* @return
*/
@DeleteMapping(value = "/plan/delete/{planSno}")
@ApiOperation(value = "비행계획서 삭제")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -198,15 +275,30 @@ public class BasFlightController {
public ResponseEntity<? extends BasicResponse> deletePlan(@PathVariable("planSno") Integer planSno) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
boolean result = basFlightService.deletePlan(planSno);
boolean result = basFlightService.deletePlan(planSno); // 비행계획서 고유번호[planSno]로 비행계획서 삭제하는 기능.
resultMap.put("result", result);
} catch (CustomException e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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"));
@ -215,7 +307,12 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
}
// 그룹 조종사 조회
/**
* 그룹 조종사 조회하는 기능
* 그룹아이디[groupId] 조회함.
* @param groupId
* @return
*/
@GetMapping(value = "/plan/pilot/{groupId}")
@ApiOperation(value = "그룹의 조종사 조회")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -223,9 +320,16 @@ public class BasFlightController {
public ResponseEntity<? extends BasicResponse> findPilot(@PathVariable("groupId") String groupId) {
List<BasFlightPlanPilotModel> result = null;
try {
result = basFlightService.listPilotByGroup(groupId);
result = basFlightService.listPilotByGroup(groupId); // 그룹아이디[groupId]로 그룹 조종사 조회하는 기능.
} 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"));
@ -235,7 +339,12 @@ public class BasFlightController {
}
// 그룹 기체 조회
/**
* 그룹 기체 조회하는 기능,
* 그룹아이디[groupId] 조회함.
* @param groupId
* @return
*/
@GetMapping(value = "/plan/arcrft/{groupId}")
@ApiOperation(value = "그룹의 기체 조회")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -243,8 +352,15 @@ public class BasFlightController {
public ResponseEntity<? extends BasicResponse> findArcrft(@PathVariable("groupId") String groupId) {
List<BasFlightPlanArcrftModel> result = null;
try {
result = basFlightService.listArcrftByGroup(groupId);
result = basFlightService.listArcrftByGroup(groupId); // 그룹아이디[groupId]로 그룹 기체 조회하는 기능.
} 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,15 +370,26 @@ public class BasFlightController {
}
// 비행 구역 버퍼 존 생성
/**
* 비행 구역 버퍼 생성하는 기능
* @param rq
* @return
*/
@PostMapping("/plan/area/buffer")
@ApiOperation(value = "비행 구역 버퍼 존 생성")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> findBuffer(@RequestBody List<BasFlightPlanAreaModel> rq) {
List<BasFlightPlanAreaModel> rs = null;
try {
rs = basFlightService.getBuffer(rq);
rs = basFlightService.getBuffer(rq); // 비행 구역 buffer zone 생성하는 기능.
} 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"));
@ -271,6 +398,11 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(rs));
}
/**
* 비행계획서 날씨 확인하는 기능.
* @param rq
* @return
*/
@GetMapping("/plan/api/weather")
@ApiOperation(value = "비행계획서 날씨")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -278,8 +410,15 @@ public class BasFlightController {
JSONObject jsonObject = null;
try {
jsonObject = basFlightService.getWeather(rq);
jsonObject = basFlightService.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"));
@ -289,15 +428,27 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(jsonObject));
}
// 비행계획서 리스트(승인)
/**
* 비행계획서 리스트(승인) 조회하는 기능,
* 입력받은 값으로 승인관련된 비행계획서 리스트를 조회함.
* @param rq
* @return
*/
@GetMapping(value = "/aprv/list")
@ApiOperation(value = "비행계획서 리스트(승인)")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> findAprvList(BasFlightPlanListRq rq) {
ComnPagingRs<BasFlightPlanModel> result = null;
try {
result = basFlightService.aprvList(rq);
result = basFlightService.aprvList(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"));
@ -306,22 +457,42 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(result));
}
// 비행계획서 승인/미승인
/**
* 비행계획서 승인/미승인 하는 기능,
* BasFlightAprovRq에 있는 값을 토대로 승인/미승인 .
* @param rq
* @return
*/
@PutMapping(value = "/aprv/proc")
@ApiOperation(value = "비행 계획서 승인/미승인")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> updateAprvProc(@RequestBody BasFlightAprovRq rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
int result = basFlightService.aprovePlan(rq);
int result = basFlightService.aprovePlan(rq); // 비행계획서 승인/미승인하는 기능.
resultMap.put("result", result);
} catch (CustomException e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* CustomException은 개발자가 "의도적으로" 예외처리,
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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"));
@ -331,15 +502,27 @@ public class BasFlightController {
}
/**
* 비행경로 체크하는 기능.
* @param rq
* @return
*/
@PostMapping("/airspace/contains")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> checkAirspaceContains(@RequestBody List<BasFlightPlanAreaModel> rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
boolean result = basFlightService.checkAirspaceContains(rq);
boolean result = basFlightService.checkAirspaceContains(rq); // 비행경로 체크하는 기능.
resultMap.put("result", result);
} 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"));
@ -349,7 +532,12 @@ public class BasFlightController {
}
//지역 검색
/**
* 지역 검색하는 기능.
* @param query
* @return
* @throws ParseException
*/
@GetMapping("/plan/area/search")
@ApiOperation(value = "지역 검색")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -358,6 +546,7 @@ public class BasFlightController {
try {
text = URLEncoder.encode(query, "UTF-8");
} catch (UnsupportedEncodingException e) {
// UTF-8 포맷팅으로 인코딩 실패시 에러 던짐
throw new RuntimeException("검색어 인코딩 실패", e);
}
@ -373,6 +562,12 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(obj));
}
/**
* 비행계획서 스케줄 검색하는 기능,
* 검색일[searchDate] 조건으로 조회함.
* @param searchDate
* @return
*/
@GetMapping("/schedule")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> findSchedule(@RequestParam("searchDate") String searchDate) {
@ -380,9 +575,16 @@ public class BasFlightController {
try {
response = basFlightService.findSchecdule(searchDate);
response = basFlightService.findSchecdule(searchDate); // 검색날짜 조건으로 비행스케줄 조회하는 기능.
} 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"));

103
pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -73,7 +73,11 @@ public class BasFlightService {
private final AreaUtils areaUtils;
// 비행계획서 조회
/**
* 비행계획서 조회하는 기능
* @param rq
* @return
*/
public ComnPagingRs<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) {
List<BasGroupJoinModel> groupList = ptyPlanQueryRepository.joinList(rq.getCstmrSno());
String userAccount = null;
@ -97,8 +101,11 @@ public class BasFlightService {
} else {
masterAccount = "NORMAL";
}
// 데이터베이스에서 조건에 따라 비행계획서를 조회함.
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.listPlan(rq, masterAccount, pageable);
// 데이터베이스에서 조건에 따라 비행계획서를 조회하고 그 사이즈를 가져옴.
long total = fltPlanQueryRepository.listPlanCount(rq, masterAccount);
long totalPage = total % rq.getRecord() > 0 ? (total / rq.getRecord()) + 1 : total / rq.getRecord();
@ -111,7 +118,11 @@ public class BasFlightService {
return response;
}
// 비행계획서 상세 조회
/**
* 비행계획서 고유번호[planSno] 상세 조회하는 기능.
* @param planSno
* @return
*/
public BasFlightPlanModel detailPlan(Integer planSno) {
BasFlightPlanModel rs = new BasFlightPlanModel();
// 비행계획서
@ -155,6 +166,10 @@ public class BasFlightService {
return rs;
}
/**
* 비행계획서 유효하는지 확인하는 기능.
* @param rq
*/
public void planValid(BasFlightPlanModel rq) {
boolean isEqualsFltElev = false;
@ -269,7 +284,11 @@ public class BasFlightService {
}
}
// 비행계획서 등록
/**
* 입력받은 값으로 비행계획서 등록하는 기능.
* @param rq
* @return
*/
@Transactional
public boolean createPlan(BasFlightPlanModel rq) {
@ -335,7 +354,11 @@ public class BasFlightService {
return true;
}
// 비행계획서 수정
/**
* 입력받은 값으로 비행계획서 수정하는 기능.
* @param rq
* @return
*/
@Transactional
public boolean updatePlan(BasFlightPlanModel rq) {
@ -461,7 +484,11 @@ public class BasFlightService {
return true;
}
// 비행계획서 삭제
/**
* 비행계획서 고유번호[planSno] 비행계획서 삭제하는 기능.
* @param planSno
* @return
*/
@Transactional
public boolean deletePlan(Integer planSno) {
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow();
@ -471,7 +498,11 @@ public class BasFlightService {
}
// 그룹 조종사 조회
/**
* 그룹아이디[groupId] 그룹 조종사 조회하는 기능.
* @param groupId
* @return
*/
public List<BasFlightPlanPilotModel> listPilotByGroup(String groupId) {
List<BasFlightPlanPilotModel> pilotList = fltPlanQueryRepository.listPilot(groupId);
@ -493,7 +524,11 @@ public class BasFlightService {
return pilotList;
}
// 그룹 기체 조회
/**
* 그룹아이디[groupId] 그룹 기체 조회하는 기능.
* @param groupId
* @return
*/
public List<BasFlightPlanArcrftModel> listArcrftByGroup(String groupId) {
List<BasFlightPlanArcrftModel> arcrftModels = fltPlanQueryRepository.listArcrft(groupId);
@ -502,7 +537,11 @@ public class BasFlightService {
return arcrftModels;
}
// 비행 구역 buffer zone
/**
* 비행 구역 buffer zone 생성하는 기능.
* @param rq
* @return
*/
public List<BasFlightPlanAreaModel> getBuffer(List<BasFlightPlanAreaModel> rq) {
for (BasFlightPlanAreaModel area : rq) {
@ -523,7 +562,11 @@ public class BasFlightService {
return rq;
}
// 비행계획서 리스트(승인)
/**
* 비행계획서 리스트(승인) 조회하는 기능.
* @param rq
* @return
*/
public ComnPagingRs<BasFlightPlanModel> aprvList(BasFlightPlanListRq rq) {
String appAuth = jwtTokenUtil.getUserAuthByToken();
@ -544,6 +587,8 @@ public class BasFlightService {
}
}
}
// 유저의 권한을 확인하는 로직
if (appAuth.equals("SUPER") || appAuth.equals("ADMIN")) {
masterAccount = "ADMIN";
} else if (userAccount.equals("MASTER") || userAccount.equals("LEADER")) {
@ -551,9 +596,9 @@ public class BasFlightService {
} else {
masterAccount = "NORMAL";
}
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.aprvList(rq, masterAccount, pageable);
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.aprvList(rq, masterAccount, pageable); // 승인관련된 비행계획서를 조회하는 기능.
long total = fltPlanQueryRepository.aprvCount(rq, masterAccount);
long total = fltPlanQueryRepository.aprvCount(rq, masterAccount); // 승인관련된 비행계획서의 갯수를 조회하는 기능.
long totalPage = total % rq.getRecord() > 0 ? (total / rq.getRecord()) + 1 : total / rq.getRecord();
@ -565,13 +610,22 @@ public class BasFlightService {
return response;
}
// 비행계획서 승인/미승인
/**
* 비행계획서 승인/미승인하는 기능.
* @param rq
* @return
*/
@Transactional
public int aprovePlan(BasFlightAprovRq rq) {
int cnt = fltPlanBasRepository.updateAprvlYnByPlanSnoIn(rq.getPlanSnoList(), rq.getAprvlYn());
return cnt;
}
/**
* 비행경로 체크하는 기능.
* @param rq
* @return
*/
public boolean checkAirspaceContains(List<BasFlightPlanAreaModel> rq) {
boolean result = false;
@ -599,7 +653,12 @@ public class BasFlightService {
}
//지역 검색
/**
* 지역 검색하는 기능
* @param apiUrl
* @param requestHeaders
* @return
*/
public String searchArea(String apiUrl, Map<String, String> requestHeaders) {
HttpURLConnection con = connect(apiUrl);
try {
@ -649,6 +708,11 @@ public class BasFlightService {
}
}
/**
* 검색날짜 조건으로 비행스케줄 조회하는 기능.
* @param searchDate
* @return
*/
public List<BasFlightScheduleRs> findSchecdule(String searchDate) {
List<BasFlightScheduleRs> schedule = fltPlanQueryRepository.findSchedule(searchDate);
@ -656,8 +720,17 @@ public class BasFlightService {
return schedule;
}
/**
* 지역과 날씨에 대한 정보를 얻는 기능.
* @param rq
* @return
* @throws IOException
* @throws ParseException
*/
public JSONObject getWeather(BasFlightWeatherModel rq) throws IOException, ParseException {
StringBuilder urlBuilder = new StringBuilder(weatherUrl);
StringBuilder urlBuilder = new StringBuilder(weatherUrl); // weather.api.url[application.yml 파일] 에 있는 URL로 날씨 관련 요청을 보냄
urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8") + weatherKey);
urlBuilder.append("&" + URLEncoder.encode("pageNo", "UTF-8") + "=" + URLEncoder.encode(rq.getPageNo(), "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "=" + URLEncoder.encode(rq.getNumOfRows(), "UTF-8")); /*한 페이지 결과 수*/
@ -684,7 +757,7 @@ public class BasFlightService {
sb.append(line);
}
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(), rq.getNy2());
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(), rq.getNy2()); // 위치에 맞는 값에 대한 주소로 변환하는 기능.
log.info("weatherResult >>>> : {}", weatherResult);

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

@ -46,7 +46,13 @@ public class FltPlanQueryRepository {
private final JwtTokenUtil jwtTokenUtil;
// 비행계획서 목록
/**
* 비행계획서 목록 조회하는 SQL 기능.
* @param rq
* @param masterAccount
* @param pageable
* @return
*/
// TODO 현재 모두 조회 - 권한에 따른 조회 필요
public PageImpl<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq, String masterAccount, Pageable pageable) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
@ -77,6 +83,53 @@ public class FltPlanQueryRepository {
builder.and(bas.delYn.ne("Y"));
/**
* 승인값[aprvlYn] 조건인지,
* 권한이 유저일 경우 유저번호[cstmrNo] 조건인지,
* 삭제된 [delYn] 조건인지,
* 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다.
*
* SELECT
* FPB.PLAN_SNO ,
* FPB.GROUP_ID ,
* FPB.CSTMR_SNO ,
* FPB.MEMBER_NAME ,
* FPB.EMAIL ,
* FPB.HPNO ,
* FPB.CLNCD ,
* FPB.ADDR ,
* FPB.ADDR_DTL_CN ,
* FPB.ZIP ,
* FPB.SCH_FLT_ST_DT ,
* FPB.SCH_FLT_END_DT ,
* FPB.FLT_PURPOSE ,
* FPB.APRVL_YN ,
* FPB.DEL_YN ,
* FPB.CREATE_USER_ID ,
* FPB.CREATE_DT ,
* FPB.UPDATE_USER_ID ,
* FPB.UPDATE_DT ,
* FPB.CORP_REG_YN ,
* FPB.SERVICE_TYPE ,
* FPA.PLAN_AREA_SNO ,
* FPA.PLAN_SNO ,
* FPA.AREA_TYPE ,
* FPA.FLT_METHOD ,
* FPA.BUFFER_ZONE ,
* FPA.FLT_ELEV ,
* FPA.CREATE_USER_ID ,
* FPA.CREATE_DT ,
* FPA.UPDATE_USER_ID ,
* FPA.UPDATE_DT
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_AREA FPA
* ON FPB.PLAN_SNO = FPA.PLAN_SNO
* WHERE FPB.GROUP_ID = #{groupId}
* AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우
* AND FPB.APRVL_YN = #{aprvlYn}
* AND FPB.DEL_YN != 'Y'
* LIMIT #{pageSize} OFFSET #{offset}
*/
List<BasFlightPlanModel> r = query
.from(bas)
.leftJoin(area)
@ -160,6 +213,23 @@ public class FltPlanQueryRepository {
}
builder.and(bas.delYn.ne("Y"));
/**
* 승인값[aprvlYn] 조건인지,
* 권한이 유저일 경우 유저번호[cstmrNo] 조건인지,
* 삭제된 [delYn] 조건인지,
* 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다.
*
* SELECT
* COUNT(*)
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_AREA FPA
* ON FPB.PLAN_SNO = FPA.PLAN_SNO
* WHERE FPB.GROUP_ID = #{groupId}
* AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우
* AND FPB.APRVL_YN = #{aprvlYn}
* AND FPB.DEL_YN != 'Y'
* LIMIT #{pageSize} OFFSET #{offset}
*/
List<BasFlightPlanModel> r = query
.from(bas)
.leftJoin(area)
@ -346,7 +416,11 @@ public class FltPlanQueryRepository {
return list;
}
// 조종사 조회
/**
* 그룹아이디[groupId] 조종사 조회하는 SQL기능.
* @param groupId
* @return
*/
public List<BasFlightPlanPilotModel> listPilot(String groupId) {
// QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
@ -356,6 +430,26 @@ public class FltPlanQueryRepository {
BooleanBuilder builder = new BooleanBuilder();
builder.and(group.groupId.eq(groupId));
/**
* 그룹 아이디[groupId] 그룹에 있는 조종사 정보를 조회하는 SQL입니다.
*
* SELECT
* PGB.GROUP_NM ,
* PCD.CSTMR_SNO ,
* PCD.MEMBER_NAME ,
* PCD.EMAIL ,
* PCD.HPNO ,
* PCD.CLNCD ,
* PCD.ADDR ,
* PCD.ADDR_DTL_CN ,
* PCD.ZIP
* FROM PTY_CSTMR_DTL PCD
* LEFT OUTER JOIN PTY_CSTMR_GROUP PCG
* ON PCD.CSTMR_SNO = PCG.CSTMR_SNO
* LEFT OUTER JOIN PTY_GROUP_BAS PGB
* ON PCG.GROUP_ID = PGB.GROUP_ID
* WHERE PCG.GROUP_ID = #{groupId}
*/
List<BasFlightPlanPilotModel> r = query
.select(Projections.bean(
BasFlightPlanPilotModel.class,
@ -378,8 +472,12 @@ public class FltPlanQueryRepository {
.fetch();
return r;
}
// 기체 조회
/**
* 그룹아이디[groupId] 기체 조회하는 SQL기능.
* @param groupId
* @return
*/
public List<BasFlightPlanArcrftModel> listArcrft(String groupId) {
QComArcrftBas arcrft = QComArcrftBas.comArcrftBas;
QPtyGroupBas group = QPtyGroupBas.ptyGroupBas;
@ -388,6 +486,32 @@ public class FltPlanQueryRepository {
BooleanBuilder builder = new BooleanBuilder();
builder.and(group.groupId.eq(groupId)).and(idntf.idntfNum.isNotNull());
/**
* 그룹아이디[groupId] 조건으로 기체정보를 조회하는 SQL입니다.
*
* SELECT
* CAB.ARCRFT_SNO ,
* CAB.ARCRFT_MODEL_NM ,
* CAB.ARCRFT_TYPE_CD ,
* CAB.PRDCT_NUM ,
* CAB.PRDCT_CMPN_NM ,
* CAB.PRDCT_DATE ,
* CAB.USE_YN ,
* CAB.CREATE_USER_ID ,
* PGB.GROUP_ID ,
* PGB.GROUP_NM ,
* PGB.GROUP_TYPE_CD ,
* CIB.OWNER_NM ,
* CIB.HPNO ,
* CIB.IDNTF_TYPE_CD
* FROM COM_ARCRFT_BAS CAB
* LEFT OUTER JOIN PTY_GROUP_BAS PGB
* ON CAB.GROUP_ID = PGB.GROUP_ID
* LEFT OUTER JOIN COM_IDNTF_BAS CIB
* ON CAB.ARCRFT_SNO = CIB.ARCRFT_SNO
* WHERE PGB.GROUP_ID = #{groupId}
* AND CIB.IDNTF_NUM IS NOT NULL
*/
List<BasFlightPlanArcrftModel> models = query.select(Projections.bean(
BasFlightPlanArcrftModel.class,
arcrft.arcrftSno,
@ -417,11 +541,23 @@ public class FltPlanQueryRepository {
return models;
}
/**
* 승인관련된 비행계획서를 조회하는 SQL기능 입니다.
* @param rq
* @param masterAccount
* @param pageable
* @return
*/
public PageImpl<BasFlightPlanModel> aprvList(BasFlightPlanListRq rq, String masterAccount, Pageable pageable) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
QFltPlanArea area = QFltPlanArea.fltPlanArea;
BooleanBuilder builder = new BooleanBuilder();
// if (userAccount.equals("CREATER") || userAccount.equals("ADMIN")) {
/*
권한이 SUPER, ADMIN일시 그룹 전체 조회,
권한이 USER 일시 자기 항목만 조회
*/
if (masterAccount != null) {
if (masterAccount.equals("SPUER") || masterAccount.equals("ADMIN")) {
builder.and(bas.groupId.in(rq.getGroupId()));
@ -438,6 +574,53 @@ public class FltPlanQueryRepository {
}
builder.and(bas.delYn.ne("Y"));
/**
* 승인값[aprvlYn] 조건인지,
* 권한이 유저일 경우 유저번호[cstmrNo] 조건인지,
* 삭제된 [delYn] 조건인지,
* 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다.
*
* SELECT
* FPB.PLAN_SNO ,
* FPB.GROUP_ID ,
* FPB.CSTMR_SNO ,
* FPB.MEMBER_NAME ,
* FPB.EMAIL ,
* FPB.HPNO ,
* FPB.CLNCD ,
* FPB.ADDR ,
* FPB.ADDR_DTL_CN ,
* FPB.ZIP ,
* FPB.SCH_FLT_ST_DT ,
* FPB.SCH_FLT_END_DT ,
* FPB.FLT_PURPOSE ,
* FPB.APRVL_YN ,
* FPB.DEL_YN ,
* FPB.CREATE_USER_ID ,
* FPB.CREATE_DT ,
* FPB.UPDATE_USER_ID ,
* FPB.UPDATE_DT ,
* FPB.CORP_REG_YN ,
* FPB.SERVICE_TYPE ,
* FPA.PLAN_AREA_SNO ,
* FPA.PLAN_SNO ,
* FPA.AREA_TYPE ,
* FPA.FLT_METHOD ,
* FPA.BUFFER_ZONE ,
* FPA.FLT_ELEV ,
* FPA.CREATE_USER_ID ,
* FPA.CREATE_DT ,
* FPA.UPDATE_USER_ID ,
* FPA.UPDATE_DT
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_AREA FPA
* ON FPB.PLAN_SNO = FPA.PLAN_SNO
* WHERE FPB.GROUP_ID = #{groupId}
* AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우
* AND FPB.APRVL_YN = #{aprvlYn}
* AND FPB.DEL_YN != 'Y'
* LIMIT #{pageSize} OFFSET #{offset}
*/
List<BasFlightPlanModel> r = query
.from(bas)
.leftJoin(area)
@ -487,6 +670,12 @@ public class FltPlanQueryRepository {
return new PageImpl<>(r, pageable, r.size());
}
/**
* 승인관련된 비행계획서의 갯수를 조회하는 SQL 기능.
* @param rq
* @param masterAccount
* @return
*/
public long aprvCount(BasFlightPlanListRq rq, String masterAccount) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
QFltPlanArea area = QFltPlanArea.fltPlanArea;
@ -509,6 +698,23 @@ public class FltPlanQueryRepository {
}
builder.and(bas.delYn.ne("Y"));
/**
* 승인값[aprvlYn] 조건인지,
* 권한이 유저일 경우 유저번호[cstmrNo] 조건인지,
* 삭제된 [delYn] 조건인지,
* 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다.
*
* SELECT
* COUNT(*)
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_AREA FPA
* ON FPB.PLAN_SNO = FPA.PLAN_SNO
* WHERE FPB.GROUP_ID = #{groupId}
* AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우
* AND FPB.APRVL_YN = #{aprvlYn}
* AND FPB.DEL_YN != 'Y'
* LIMIT #{pageSize} OFFSET #{offset}
*/
List<BasFlightPlanModel> list = query
.from(bas)
.leftJoin(area)
@ -560,6 +766,12 @@ public class FltPlanQueryRepository {
return cnt;
}
/**
* 검색시간[searchDate] 조건으로 비행스케줄을 조회하는 SQL 기능.
* @Cacheable 해당 어노테이션으로 RQ깂 변동 없을시 이전 데이터 주는기능.
* @param searchDate
* @return
*/
@Cacheable(value = "schedule")
public List<BasFlightScheduleRs> findSchedule(String searchDate) {
QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas;
@ -582,6 +794,54 @@ public class FltPlanQueryRepository {
.and(fltPlanBas.schFltEndDt.goe(searchDateParam))
.and(fltPlanBas.aprvlYn.eq("Y"));
/**
* 검색시간[searchDate] 조건으로 비행스케줄을 조회하는 SQL입니다.
*
* SELECT
* FPB.GROUP_ID ,
* (
* SELECT
* PGB.GROUP_NM
* FROM PTY_GROUP_BAS PGB
* WHERE PGB.GROUP_ID = FPB.GROUP_ID
* ) AS 'groupNm',
* FPA.OWNER_NM ,
* FPA.IDNTF_NUM ,
* (
* SELECT
* CONCAT('', CCHA.AREA2, '', CCHA.AREA3, '', CCHA.LAND_NM, '', CCHA.LAND_NUM)
* FROM CTR_CNTRL_HSTRY_AREA CCHA
* WHERE CCHA.CNTRL_ID = CCB.CNTRL_ID
* AND CCHA.ACTN_TYPE = '01'
* ) AS 'startAddress' ,
* (
* SELECT
* CONCAT('', CCHA.AREA2, '', CCHA.AREA3, '', CCHA.LAND_NM, '', CCHA.LAND_NUM)
* FROM CTR_CNTRL_HSTRY_AREA CCHA
* WHERE CCHA.CNTRL_ID = CCB.CNTRL_ID
* AND CCHA.ACTN_TYPE = '99'
* ) AS 'endAddress' ,
* FPB.SCH_FLT_ST_DT ,
* FPB.SCH_FLT_END_DT ,
* CCB.CNTRL_ID ,
* CCB.CNTRL_ST_DT ,
* CCB.CNTRL_END_DT ,
* CASE
* WHEN CCB.STATUS_CD = '01' THEN 'F'
* WHEN CCB.STATUS_CD = '00' THEN 'S'
* ELSE 'B'
* END AS 'statusCd'
* FROM FLT_PLAN_BAS FPB
* LEFT OUTER JOIN FLT_PLAN_ARCRFT FPA
* ON FPB.PLAN_SNO = FPA.PLAN_SNO
* LEFT OUTER JOIN CTR_CNTRL_BAS CCB
* ON FPA.IDNTF_NUM = CCB.IDNTF_NUM
* AND CCB.CNTRL_ST_DT >= FPB.SCH_FLT_ST_DT
* AND CCB.CNTRL_ST_DT <= FPB.SCH_FLT_END_DT
* WHERE FPB.SCH_FLT_ST_DT <= #{searchDate}
* AND FPB.SCH_FLT_END_DT >= #{searchDate}
* AND FPB.APRVL_YN = 'Y'
*/
List<BasFlightScheduleRs> querys = query.select(
Projections.bean(
BasFlightScheduleRs.class,

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

@ -31,7 +31,7 @@ public class PtyDronQueryRepository{
private final JPAQueryFactory query;
/**
* 목록 조회
* 드론 목록 조회하는 SQL기능.
* @param rq
* @return
*/
@ -55,8 +55,39 @@ public class PtyDronQueryRepository{
builder.and(bas.arcrftTypeCd.eq(rq.getArcrftTypeCd()));
}
builder.and(bas.useYn.eq("Y"));
builder.and(bas.useYn.eq("Y")); // 사용여부값
/**
* 기체이름 [arcrftModelNm] 조건인지,
* 그룹아이디 [groupId] 조건인지,
* 기체타입 [arcrftTypeCd] 조건인지,
* 사용여부 [useYn] "Y" 인지 조건으로 데이터베이스에서 조회하는 SQL입니다.
* SELECT
* CAB.GROUP_ID ,
* CAB.ARCRFT_SNO ,
* CAB.ARCRFT_HGHT ,
* CAB.ARCRFT_LNGTH ,
* CAB.ARCRFT_MODEL_NM ,
* CAB.ARCRFT_TYPE_CD ,
* CAB.ARCRFT_WDTH ,
* CAB.ARCRFT_WGHT ,
* CAB.CAMERA_YN ,
* CAB.CREATE_DT ,
* CAB.CREATE_USER_ID ,
* CAB.INSRNC_YN ,
* CAB.PRDCT_CMPN_NM ,
* CAB.PRDCT_DATE ,
* CAB.PRDCT_NUM ,
* CAB.TAKEOFF_WGHT ,
* CAB.UPDATE_DT ,
* CAB.UPDATE_USER_ID ,
* CAB.WGHT_TYPE_CD
* FROM COM_ARCRFT_BAS CAB
* WHERE CAB.USE_YN = 'Y'
* AND CAB.ARCRFT_MODEL_NM = #{arcrftModelNm} -- 조건에 있을경우
* AND CAB.GROUP_ID = #{groupId} -- 조건에 있을경우
* AND CAB.ARCRFT_TYPE_CD = #{arcrftTypeCd} -- 조건에 있을경우
*/
List<BasDronModel> result =
query.select(Projections.bean(BasDronModel.class ,
bas.groupId,
@ -97,7 +128,13 @@ public class PtyDronQueryRepository{
return new PageImpl<>(result, pageable, result.size());
}
public long listCount(BasDronRqModel rq){
/**
* 검색조건에 맞춘 드론목록의 사이즈가 몇인지 조회하는 SQL기능
* @param rq
* @return
*/
public long listCount(BasDronRqModel rq){
QComArcrftBas bas = QComArcrftBas.comArcrftBas;
QComIdntfBas idnt = QComIdntfBas.comIdntfBas;
@ -119,6 +156,19 @@ public class PtyDronQueryRepository{
builder.and(bas.useYn.eq("Y"));
/**
* 기체이름 [arcrftModelNm] 조건인지,
* 그룹아이디 [groupId] 조건인지,
* 기체타입 [arcrftTypeCd] 조건인지,
* 사용여부 [useYn] "Y" 인지 조건으로 데이터베이스에서 조회하는 SQL입니다.
* SELECT
* count(*)
* FROM COM_ARCRFT_BAS CAB
* WHERE CAB.USE_YN = 'Y'
* AND CAB.ARCRFT_MODEL_NM = #{arcrftModelNm} -- 조건에 있을경우
* AND CAB.GROUP_ID = #{groupId} -- 조건에 있을경우
* AND CAB.ARCRFT_TYPE_CD = #{arcrftTypeCd} -- 조건에 있을경우
*/
List<BasDronModel> result =
query.select(Projections.bean(BasDronModel.class ,
bas.groupId,
@ -161,7 +211,7 @@ public class PtyDronQueryRepository{
return cnt;
}
/**
* 식별번호 조회
* 식별번호 조회하는 SQL기능.
* @param arcrftSno
* @return
*/
@ -174,7 +224,25 @@ public class PtyDronQueryRepository{
BooleanBuilder builder = new BooleanBuilder();
builder.and(idnt.arcrftSno.eq(arcrftSno));
/**
* 기체일련번호[arcrftSno] 조건으로 조회하는 SQL기능입니다.
*
* SELECT
* CIB.ARCRFT_SNO ,
* CIB.IDNTF_NUM ,
* CIB.IDNTF_TYPE_CD ,
* CIB.CREATE_DT ,
* CIB.UPDATE_DT ,
* CIB.OWNER_NM ,
* CIB.HPNO ,
* CIB.CSTMR_SNO ,
* CAB.GROUP_ID
* FROM COM_IDNTF_BAS CIB
* LEFT OUTER JOIN COM_ARCRFT_BAS CAB
* ON CIB.ARCRFT_SNO = CAB.ARCRFT_SNO
* WHERE CIB.ARCRFT_SNO = #{arcrftSno}
* ORDER BY CIB.CREATE_DT ASC
*/
List<BasIdntfModel> result =
query.select(Projections.bean(BasIdntfModel.class ,
@ -200,7 +268,7 @@ public class PtyDronQueryRepository{
/**
* 상세 조회
* 드론 상세 조회하는 SQL기능.
* @param arcrftSno
* @return
*/
@ -208,6 +276,33 @@ public class PtyDronQueryRepository{
QComArcrftBas bas = QComArcrftBas.comArcrftBas;
/**
* 기체일련번호[arcrftSno] 조건으로 드론 상세조회하는 SQL입니다.
*
* SELECT
* CAB.GROUP_ID ,
* CAB.ARCRFT_SNO ,
* CAB.ARCRFT_HGHT ,
* CAB.ARCRFT_LNGTH ,
* CAB.ARCRFT_MODEL_NM ,
* CAB.ARCRFT_TYPE_CD ,
* CAB.ARCRFT_WDTH ,
* CAB.ARCRFT_WGHT ,
* CAB.CAMERA_YN ,
* CAB.CREATE_DT ,
* CAB.CREATE_USER_ID ,
* CAB.INSRNC_YN ,
* CAB.PRDCT_CMPN_NM ,
* CAB.PRDCT_DATE ,
* CAB.PRDCT_NUM ,
* CAB.TAKEOFF_WGHT ,
* CAB.UPDATE_DT ,
* CAB.UPDATE_USER_ID ,
* CAB.WGHT_TYPE_CD ,
* CAB.IMAGE_URL
* FROM COM_ARCRFT_BAS CAB
* WHERE CAB.ARCRFT_SNO = #{arcrftSno}
*/
BasDronModel result =
query.select(Projections.bean(BasDronModel.class ,
bas.groupId,

8
pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrTrnsLctnService.java

@ -34,7 +34,13 @@ public class CtrTrnsLctnService {
private String NAVER_API_KEY;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* 위치에 맞는 값에 대한 주소로 변환하는 기능.
* @param lat
* @param lon
* @return
*/
public CtrTrnsLctnModel convertLatlonToAddress(double lat , double lon) {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(5000); //타임아웃 설정 5초

Loading…
Cancel
Save