diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java index c16b0a80..0e066315 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java @@ -1,23 +1,5 @@ package com.palnet.biz.api.bas.dron.controller; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import com.palnet.biz.api.bas.dron.model.BasDronModel; import com.palnet.biz.api.bas.dron.model.BasDronRqModel; import com.palnet.biz.api.bas.dron.model.BasIdntfModel; @@ -29,14 +11,23 @@ import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; import com.palnet.comn.code.RSErrorCode; import com.palnet.comn.exception.CustomException; - import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; -@Log4j2 +@Slf4j @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/bas/dron", produces = {MediaType.APPLICATION_JSON_VALUE}) diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java new file mode 100644 index 00000000..4dd9f7a7 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java @@ -0,0 +1,113 @@ +package com.palnet.biz.api.comn.elev.controller; + +import com.palnet.biz.api.comn.elev.model.ComnElevRq; +import com.palnet.biz.api.comn.elev.model.ComnElevRs; +import com.palnet.biz.api.comn.elev.model.ComnGroundElevRq; +import com.palnet.biz.api.comn.elev.service.ComnElevService; +import com.palnet.biz.api.comn.response.BasicResponse; +import com.palnet.biz.api.comn.response.ErrorResponse; +import com.palnet.biz.api.comn.response.SuccessResponse; +import com.palnet.comn.exception.CustomException; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Tag(name = "공통 API", description = "공통 API") +@RequiredArgsConstructor +@RequestMapping("/api/comn/elev") +@RestController +public class ComnElevController { + + private final ComnElevService comnElevService; + + @PostMapping(value = "/ground") + @ApiOperation(value = "지표면 고도 가져오기") + @Tag(name = "공통 API", description = "공통 API") + public ResponseEntity getGroundElev(@RequestBody List rq) { + List rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comnElevService.getGroundElev(rq); + + } catch (CustomException e) { + Map resultMap = new HashMap<>(); + log.error("IGNORE : ", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + resultMap.put("errorMessage", e.getMessage()); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + + @PostMapping(value = "/to/agl") + @ApiOperation(value = "msl을 agl로 변환") + @Tag(name = "공통 API", description = "공통 API") + public ResponseEntity convertMslToAgl(@RequestBody List rq) { + List rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comnElevService.convertMslToAgl(rq); + + } catch (CustomException e) { + Map resultMap = new HashMap<>(); + log.error("IGNORE : ", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + resultMap.put("errorMessage", e.getMessage()); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + + @PostMapping(value = "/to/msl") + @ApiOperation(value = "agl을 msl로 변환") + @Tag(name = "공통 API", description = "공통 API") + public ResponseEntity convertAglToMsl(@RequestBody List rq) { + List rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comnElevService.convertAglToMsl(rq); + + } catch (CustomException e) { + Map resultMap = new HashMap<>(); + log.error("IGNORE : ", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + resultMap.put("errorMessage", e.getMessage()); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRq.java b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRq.java new file mode 100644 index 00000000..3340ccdb --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRq.java @@ -0,0 +1,16 @@ +package com.palnet.biz.api.comn.elev.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComnElevRq { + private Double lat; + private Double lon; + private Double elev; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRs.java b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRs.java new file mode 100644 index 00000000..633d3eef --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRs.java @@ -0,0 +1,17 @@ +package com.palnet.biz.api.comn.elev.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComnElevRs { + private String elevType; + private Double lat; + private Double lon; + private Double elev; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnGroundElevRq.java b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnGroundElevRq.java new file mode 100644 index 00000000..0124064b --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnGroundElevRq.java @@ -0,0 +1,15 @@ +package com.palnet.biz.api.comn.elev.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComnGroundElevRq { + private Double lat; + private Double lon; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/service/ComnElevService.java b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/service/ComnElevService.java new file mode 100644 index 00000000..697bd31f --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/service/ComnElevService.java @@ -0,0 +1,72 @@ +package com.palnet.biz.api.comn.elev.service; + +import com.palnet.biz.api.comn.elev.model.ComnElevRq; +import com.palnet.biz.api.comn.elev.model.ComnElevRs; +import com.palnet.biz.api.comn.elev.model.ComnGroundElevRq; +import com.palnet.comn.utils.DigitalElevationModelUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.locationtech.jts.geom.Coordinate; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class ComnElevService { + + // 지표면 고도 가져오기 + public List getGroundElev(List rq) { + DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); + List rs = rq.stream().map(elev -> { + Coordinate coord = new Coordinate(elev.getLon(), elev.getLat()); + Double groundElevation = demUtils.getGroundElevation(coord); + return ComnElevRs.builder() + .elevType("ground") + .lat(elev.getLat()) + .lon(elev.getLon()) + .elev(groundElevation) + .build(); + }).collect(Collectors.toList()); + return rs; + } + + // msl 기준 고도 > agl 기준 고도 변환 + public List convertMslToAgl(List rq) { + DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); + List rs = rq.stream().map(elev -> { + Coordinate coord = new Coordinate(elev.getLon(), elev.getLat()); + // 해수면기준 고도 - 지표면 고도 = AGL기준 고도(지표면에서 떨어진 높이) + Double groundElevation = demUtils.getGroundElevation(coord); + Double aglElevation = (Math.round((elev.getElev() - groundElevation) * 100.0) / 100.0); + + return ComnElevRs.builder() + .elevType("agl") + .lat(elev.getLat()) + .lon(elev.getLon()) + .elev(aglElevation) + .build(); + }).collect(Collectors.toList()); + return rs; + } + + // agl 기준 고도 > msl 기준 고도 변환 + public List convertAglToMsl(List rq) { + DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); + List rs = rq.stream().map(elev -> { + Coordinate coord = new Coordinate(elev.getLon(), elev.getLat()); + // AGL기준 고도 + 지표면 고도 = 해수면기준 고도(해수면에서 떨어진 높이) + Double groundElevation = demUtils.getGroundElevation(coord); + Double aglElevation = (Math.round((elev.getElev() + groundElevation) * 100.0) / 100.0); + return ComnElevRs.builder() + .elevType("msl") + .lat(elev.getLat()) + .lon(elev.getLon()) + .elev(aglElevation) + .build(); + }).collect(Collectors.toList()); + return rs; + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java b/pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java index 80148049..b91c6490 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java @@ -59,7 +59,7 @@ public class SunRiseSetService { // continue 20240201 List locations = getLocation(); // LocalDate targetDate = LocalDate.now(); - LocalDate targetDate = LocalDate.of(2024, 5, 1); + LocalDate targetDate = LocalDate.of(2024, 6, 1); LocalDate end = targetDate.plusMonths(6); List sunRiseSet = new ArrayList<>(); diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java index 02795ff3..b819c5df 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java @@ -16,6 +16,7 @@ import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.api.main.statistics.model.FlightStcsModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsRQ; import com.palnet.biz.api.main.statistics.service.MainStatisticsService; import io.swagger.annotations.ApiImplicitParam; @@ -37,12 +38,14 @@ public class MainStatisticsController { @GetMapping("/flight-static") @ApiOperation(value = "비행통계 상단 데이터[DB전체 통계데이터]") @Tag(name = "통계 컨트롤러", description = "통계 관련 API") - public ResponseEntity fltStcsStatic(){ + public ResponseEntity fltStcsStatic(String groupId){ + + log.warn("GroupNm => {}", groupId); List result = null; try { - result = service.getFlightStaticStcs(); + result = service.getFlightStaticStcs(groupId); log.warn("result => {}", result); } catch (Exception e) { @@ -62,19 +65,19 @@ public class MainStatisticsController { @ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) }) - public ResponseEntity fltStcs(@RequestParam String cate, String date, @PathVariable String type){ - log.warn("cate => {}, date => {}, type => {}", cate, date, type); + public ResponseEntity fltStcs(FlightStcsRQ rq, @PathVariable String type){ + log.warn("cate => {}, groupId => {}, date => {}, type => {}", rq.getCate(), rq.getGroupId(), rq.getDate(), type); FlightStcsModel result = new FlightStcsModel(); try { String[] formatParam = null; - if(date == null) date = ""; - formatParam = service.paramCheck(date,type); + if(rq.getDate() == null) rq.setDate(""); + formatParam = service.paramCheck(rq.getDate(),type); - List graphData = service.fltStatics(cate, date, formatParam); - List topData = service.fltTopStatics(cate, date, formatParam); + List graphData = service.fltStatics(rq, formatParam); + List topData = service.fltTopStatics(rq, formatParam); result.setGraphData(graphData); result.setTopData(topData); @@ -94,12 +97,12 @@ public class MainStatisticsController { @GetMapping("/warn-static") @ApiOperation(value = "비정상 상황 상단 데이터[DB전체 통계데이터]") @Tag(name = "통계 컨트롤러", description = "통계 관련 API") - public ResponseEntity warnStcsStatic(){ + public ResponseEntity warnStcsStatic(String groupId){ List result = null; try { - result = service.getWarnStaticStcs(); + result = service.getWarnStaticStcs(groupId); log.warn("result => {}", result); } catch (Exception e) { @@ -119,19 +122,19 @@ public class MainStatisticsController { @ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) }) - public ResponseEntity warnStcs(@RequestParam String cate, String date, @PathVariable String type){ - log.warn("cate => {}, date => {}, type => {}", cate, date, type); + public ResponseEntity warnStcs(FlightStcsRQ rq, @PathVariable String type){ + log.warn("rq => {}",rq); FlightStcsModel result = new FlightStcsModel(); try { String[] formatParam = null; - if(date == null) date = ""; - formatParam = service.paramCheck(date,type); + if(rq.getDate() == null) rq.setDate(""); + formatParam = service.paramCheck(rq.getDate(),type); - List graphData = service.warnStatics(cate, date, formatParam); - List topData = service.warnTopStatics(cate, date, formatParam); + List graphData = service.warnStatics(rq, formatParam); + List topData = service.warnTopStatics(rq, formatParam); result.setGraphData(graphData); result.setTopData(topData); @@ -149,12 +152,14 @@ public class MainStatisticsController { @GetMapping("/flight/result-static") @ApiOperation(value = "비행실적 상단데이터 통계 [DB전체 통계데이터]") @Tag(name = "통계 컨트롤러", description = "통계 관련 API") - public ResponseEntity fltResultStcs(){ + public ResponseEntity fltResultStcs(String groupId){ + + log.warn("Group => {}", groupId); List result = null; try { - result = service.getFltResultStaticStcs(); + result = service.getFltResultStaticStcs(groupId); log.warn("result => {}", result); } catch (Exception e) { @@ -174,19 +179,19 @@ public class MainStatisticsController { @ApiImplicitParam(name = "cate",value = "비행실적,비행계획서,비행계획승인[FLT_PLAN_APRVN]", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) }) - public ResponseEntity fltResultStcs(@RequestParam String cate, String date, @PathVariable String type){ - log.warn("cate => {}, date => {}, type => {}", cate, date, type); + public ResponseEntity fltResultStcs(FlightStcsRQ rq, @PathVariable String type){ + log.warn("cate => {}, group => {}, date => {}, type => {}", rq.getCate(), rq.getGroupId(), rq.getDate(), type); FlightStcsModel result = new FlightStcsModel(); try { String[] formatParam = null; - if(date == null) date = ""; - formatParam = service.paramCheck(date,type); + if(rq.getDate() == null) rq.setDate(""); + formatParam = service.paramCheck(rq.getDate(),type); - List graphData = service.getFltResultStcs(cate, date, formatParam); - List topData = service.getFltTopResultStcs(cate, date, formatParam); + List graphData = service.getFltResultStcs(rq, formatParam); + List topData = service.getFltTopResultStcs(rq, formatParam); result.setGraphData(graphData); result.setTopData(topData); @@ -200,7 +205,5 @@ public class MainStatisticsController { return ResponseEntity.ok().body(new SuccessResponse(result)); } - - - + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsRQ.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsRQ.java new file mode 100644 index 00000000..c0c05bda --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsRQ.java @@ -0,0 +1,14 @@ +package com.palnet.biz.api.main.statistics.model; + +import lombok.Data; + +@Data +public class FlightStcsRQ { + + private String cate; + + private String groupId; + + private String date; + +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java index daeed3b7..aa33c2f2 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java @@ -4,13 +4,20 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; +import com.palnet.biz.api.bas.group.model.BasGroupUserListModel; +import com.palnet.biz.api.bas.group.model.BasGroupUserModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsRQ; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; -import com.palnet.biz.jpa.entity.type.WarnType; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository; import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; +import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository; import com.palnet.comn.code.ErrorCode; import com.palnet.comn.exception.CustomException; @@ -22,13 +29,16 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class MainStatisticsService { - private final CtrCntrlQueryRepository cntrlQueryRepository; private final CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository; private final FltPlanQueryRepository fltPlanQueryRepository; + private final PtyGroupQueryRepository ptyGroupQueryRepository; + + private final JwtTokenUtil jwtTokenUtil; + /** * 파라미터 체크 * 1. 연단위 검색 -> Parameter Null일 경우 @@ -96,15 +106,51 @@ public class MainStatisticsService { return result; } + /** + * 그룹권한과 유저권한 모두 USER일 경우 true 반환 + * @param groupId + * @return + */ + private Boolean authCheck(String groupId){ + + if(groupId == null || groupId.equals("")) return false; + + BasGroupUserListModel param = new BasGroupUserListModel(); + param.setCstmrSno(jwtTokenUtil.getCstmrSnoByToken()); + param.setGroupId(groupId); + param.setMemberName(jwtTokenUtil.getUserNmByToken()); + + Pageable pageable = PageRequest.of(1-1, 1); + + PageImpl queryResult = ptyGroupQueryRepository.userList(param, pageable); + + if(queryResult.getContent() == null || queryResult.getContent().size() == 0) throw new CustomException(ErrorCode.DATA_NOTFIND); + + BasGroupUserModel groupUser = queryResult.getContent().get(0); + + String groupAuth = groupUser.getGroupAuthCd(); + String userAuth = jwtTokenUtil.getUserAuthByToken(); + + boolean result = false; + + if(groupAuth.equals("USER") && userAuth.equals("USER")) result = true; + + return result; + } + + /** * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 * @return */ - public List getFlightStaticStcs(){ + public List getFlightStaticStcs(String groupId){ + + // 권한이 유저권한, 그룹권한 모두 user면 true , user가 하나라도 아닐 경우 모두 false; + boolean authCheck = authCheck(groupId); - FlightStcsValueModel time = cntrlQueryRepository.getFlightTimeStcs(); - FlightStcsValueModel distance = cntrlQueryRepository.getFlightDistanceStcs(); - FlightStcsValueModel fltCount = cntrlQueryRepository.getFlightCountStcs(); + FlightStcsValueModel time = cntrlQueryRepository.getFlightTimeStcs(authCheck, groupId); + FlightStcsValueModel distance = cntrlQueryRepository.getFlightDistanceStcs(authCheck, groupId); + FlightStcsValueModel fltCount = cntrlQueryRepository.getFlightCountStcs(authCheck, groupId); List result = Arrays.asList(time, distance, fltCount); @@ -118,23 +164,33 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List fltStatics(String cate, String date, String[] formatParam){ + public List fltStatics(FlightStcsRQ rq, String[] formatParam){ - List resultList = null; + // 권한이 유저권한, 그룹권한 모두 user면 true , user가 하나라도 아닐 경우 모두 false; + boolean authCheck = authCheck(rq.getGroupId()); + + List resultList = new ArrayList<>(); - switch (cate) { + switch (rq.getCate()) { case "TIME": - resultList = cntrlQueryRepository.fltTimeStcs(date, formatParam); + resultList = cntrlQueryRepository.fltTimeStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "DISTANCE": - resultList = cntrlQueryRepository.fltDistanceStcs(date, formatParam); + resultList = cntrlQueryRepository.fltDistanceStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "FLT_COUNT": - resultList = cntrlQueryRepository.fltCountStcs(date, formatParam); + resultList = cntrlQueryRepository.fltCountStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; + default : + + throw new CustomException(ErrorCode.NON_VALID_PARAMETER, rq.getCate(), rq.getDate()); + } + + for(FlightStcsValueModel node : resultList){ + if(node.getName() == null || node.getName().equals("")) node.setName(" "); } return resultList; @@ -147,26 +203,32 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List fltTopStatics(String cate, String date, String[] formatParam){ - List resultList = null; + public List fltTopStatics(FlightStcsRQ rq, String[] formatParam){ - switch (cate) { + boolean authCheck = authCheck(rq.getGroupId()); + + List resultList = new ArrayList<>(); + + switch (rq.getCate()) { case "TIME": - resultList = cntrlQueryRepository.fltTopTimeStcs(date, formatParam); + resultList = cntrlQueryRepository.fltTopTimeStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "DISTANCE": - resultList = cntrlQueryRepository.fltTopDistanceStcs(date, formatParam); + resultList = cntrlQueryRepository.fltTopDistanceStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "FLT_COUNT": - resultList = cntrlQueryRepository.fltTopCountStcs(date, formatParam); + resultList = cntrlQueryRepository.fltTopCountStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; + default : + + throw new CustomException(ErrorCode.NON_VALID_PARAMETER, rq.getCate(), rq.getDate()); } for(FlightStcsValueModel node : resultList){ - if(node.getName().equals("")) node.setName(" "); + if(node.getName() == null || node.getName().equals("")) node.setName(" "); } return resultList; @@ -176,7 +238,9 @@ public class MainStatisticsService { * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 * @return */ - public List getWarnStaticStcs(){ + public List getWarnStaticStcs(String groupId){ + + boolean authCheck = authCheck(groupId); // TODO:: 비행경로이탈, 고도이탈, 충돌위험 임시코드 String[] cate = {"PLAN" ,"ALTITUDE", "CRASH"}; @@ -185,10 +249,14 @@ public class MainStatisticsService { List result = new ArrayList<>(); for(int i = 0; i < cate.length; i ++){ - FlightStcsValueModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i]); + FlightStcsValueModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i], authCheck, groupId); result.add(node); } + for(FlightStcsValueModel node : result){ + if(node.getName() == null || node.getName().equals("")) node.setName(" "); + } + return result; } @@ -199,12 +267,14 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List warnStatics(String cate, String date, String[] formatParam){ + public List warnStatics(FlightStcsRQ rq, String[] formatParam){ + + boolean authCheck = authCheck(rq.getGroupId()); - List resultList = ctrCntrlWarnLogQueryRepository.warnStcs(cate, date, formatParam); + List resultList = ctrCntrlWarnLogQueryRepository.warnStcs(rq.getCate(), rq.getDate(), rq.getGroupId(), authCheck, formatParam); for(FlightStcsValueModel node : resultList){ - if(node.getName().equals("")) node.setName(" "); + if(node.getName() == null || node.getName().equals("")) node.setName(" "); } return resultList; @@ -217,9 +287,11 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List warnTopStatics(String cate, String date, String[] formatParam){ + public List warnTopStatics(FlightStcsRQ rq, String[] formatParam){ - List resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(cate, date, formatParam); + boolean authCheck = authCheck(rq.getGroupId()); + + List resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(rq.getCate(), rq.getDate(), rq.getGroupId(), authCheck, formatParam); return resultList; } @@ -228,70 +300,85 @@ public class MainStatisticsService { * 비행실적, 비행계획서 기용, 비행승인이 많이 된 기체 데이터, 상단 고정 데이터 * @return */ - public List getFltResultStaticStcs(){ + public List getFltResultStaticStcs(String groupId){ + + // 권한이 유저권한, 그룹권한 모두 user면 true , user가 하나라도 아닐 경우 모두 false; + boolean authCheck = authCheck(groupId); - FlightStcsValueModel fltResult = fltPlanQueryRepository.getFltResultStaticStcs(); - FlightStcsValueModel fltPlan = fltPlanQueryRepository.getFltPlanStaticStcs(); - FlightStcsValueModel fltPlanAprvn = fltPlanQueryRepository.getFltPlanAprvnStaticStcs(); + FlightStcsValueModel fltResult = fltPlanQueryRepository.getFltResultStaticStcs(authCheck, groupId); + FlightStcsValueModel fltPlan = fltPlanQueryRepository.getFltPlanStaticStcs(authCheck, groupId); + FlightStcsValueModel fltPlanAprvn = fltPlanQueryRepository.getFltPlanAprvnStaticStcs(authCheck, groupId); List result = Arrays.asList(fltResult,fltPlan, fltPlanAprvn); return result; } - public List getFltResultStcs(String cate, String date, String[] formatParam){ + /** + * 비행실적 날짜데이터 + * @param rq + * @param formatParam + * @return + */ + public List getFltResultStcs(FlightStcsRQ rq, String[] formatParam){ List resultList = null; + + // 권한이 유저권한, 그룹권한 모두 user면 true , user가 하나라도 아닐 경우 모두 false; + boolean authCheck = authCheck(rq.getGroupId()); - switch (cate) { + switch (rq.getCate()) { case "FLT_RESULT": - resultList = fltPlanQueryRepository.fltResultStcs(date, formatParam); + resultList = fltPlanQueryRepository.fltResultStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "FLT_PLAN": - resultList = fltPlanQueryRepository.fltPlanStcs(date, formatParam); + resultList = fltPlanQueryRepository.fltPlanStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "FLT_PLAN_APRVN": - resultList = fltPlanQueryRepository.fltPlanAprvnStcs(date, formatParam); + resultList = fltPlanQueryRepository.fltPlanAprvnStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; default : - throw new CustomException(ErrorCode.NON_VALID_PARAMETER, cate, date); + throw new CustomException(ErrorCode.NON_VALID_PARAMETER, rq.getCate(), rq.getDate()); } for(FlightStcsValueModel node : resultList){ - if(node.getName().equals("")) node.setName(" "); + if(node.getName() == null || node.getName().equals("")) node.setName(" "); } return resultList; } - public List getFltTopResultStcs(String cate, String date, String[] formatParam){ + public List getFltTopResultStcs(FlightStcsRQ rq, String[] formatParam){ List resultList = null; + + // 권한이 유저권한, 그룹권한 모두 user면 true , user가 하나라도 아닐 경우 모두 false; + boolean authCheck = authCheck(rq.getGroupId()); - switch (cate) { + switch (rq.getCate()) { case "FLT_RESULT": - resultList = fltPlanQueryRepository.fltTopResultStcs(date, formatParam); + resultList = fltPlanQueryRepository.fltTopResultStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "FLT_PLAN": - resultList = fltPlanQueryRepository.fltTopPlanStcs(date, formatParam); + resultList = fltPlanQueryRepository.fltTopPlanStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; case "FLT_PLAN_APRVN": - resultList = fltPlanQueryRepository.fltTopPlanAprvnStcs(date, formatParam); + resultList = fltPlanQueryRepository.fltTopPlanAprvnStcs(rq.getDate(), rq.getGroupId(), authCheck, formatParam); break; default : - throw new CustomException(ErrorCode.NON_VALID_PARAMETER, cate, date); + throw new CustomException(ErrorCode.NON_VALID_PARAMETER, rq.getCate(), rq.getDate()); } for(FlightStcsValueModel node : resultList){ - if(node.getName().equals("")) node.setName(" "); + if(node.getName() == null || node.getName().equals("")) node.setName(" "); } return resultList; diff --git a/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java b/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java index a35fa82d..ae369b78 100644 --- a/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java +++ b/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java @@ -16,12 +16,14 @@ public class InitRunner implements ApplicationRunner { // DEM(Digital Elevation Model load try { DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance(); + log.info("DSM size : {}", demUtils.getSize()); } catch (Exception e) { log.warn("===== InitRunner run error[DigitalElevationModelUtils] : {}", e.getMessage()); } // airspace load try { - AirspaceUtils.getInstance(); + AirspaceUtils apUtils = AirspaceUtils.getInstance(); + log.info("Air Space Count : {}", apUtils.getSize()); } catch (Exception e) { log.warn("===== InitRunner run error[AirspaceUtils] : {}", e.getMessage()); } 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 22c2b016..9e6491e1 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 @@ -71,6 +71,7 @@ public class CtrCntrlQueryRepository{ @Autowired private JwtTokenUtil jwtTokenUtil; + /** * 비행 현황 데이터 조회 * @param rq @@ -1830,23 +1831,29 @@ public List listCntrlHstry(String id){ * DB 데이터내에 가장 많은 비행시간을 가진 기체, 비행시간 SELECT * @return */ - public FlightStcsValueModel getFlightTimeStcs(){ + public FlightStcsValueModel getFlightTimeStcs(boolean authCheck, String groupId){ FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + BooleanBuilder builder = new BooleanBuilder(); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - Expressions.stringTemplate( - "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", - qCtrCntrlBas.cntrlEndDt, - qCtrCntrlBas.cntrlStDt - ).as("value") // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlBas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) .from(qCtrCntrlBas) + .where(builder) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .groupBy(qCtrCntrlBas.idntfNum) .orderBy(Expressions.stringTemplate( "SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1}))))", @@ -1861,11 +1868,9 @@ public List listCntrlHstry(String id){ String idntfNum = result.getName(); - result.setDay(getFltTimeDay(idntfNum)); - result.setYear(getFltTimeYear(idntfNum)); - result.setMonth(getFltTimeMonth(idntfNum)); - - log.warn("a => {}", result); + result.setDay(getFltTimeDay(idntfNum, authCheck, groupId)); + result.setYear(getFltTimeYear(idntfNum, authCheck, groupId)); + result.setMonth(getFltTimeMonth(idntfNum, authCheck, groupId)); } else { FlightStcsValueModel node = new FlightStcsValueModel(); @@ -1881,12 +1886,16 @@ public List listCntrlHstry(String id){ return result; } - private Long getFltTimeDay(String idntfNum){ + private Long getFltTimeDay(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return Long.parseLong(query .select( @@ -1897,17 +1906,25 @@ public List listCntrlHstry(String id){ ) // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne()); } - private Long getFltTimeMonth(String idntfNum){ + private Long getFltTimeMonth(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return Long.parseLong(query .select( @@ -1918,17 +1935,25 @@ public List listCntrlHstry(String id){ ) // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne()); } - private Long getFltTimeYear(String idntfNum){ + private Long getFltTimeYear(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return Long.parseLong(query .select( @@ -1939,6 +1964,10 @@ public List listCntrlHstry(String id){ ) // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne()); } @@ -1947,34 +1976,43 @@ public List listCntrlHstry(String id){ * 가장 많이 이동한 기체 * @return */ - public FlightStcsValueModel getFlightDistanceStcs(){ + public FlightStcsValueModel getFlightDistanceStcs(boolean authCheck, String groupId){ FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + BooleanBuilder builder = new BooleanBuilder(); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); + List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - qCtrCntrlBas.ttlDstnc.sum().as("value") + qCtrCntrlBas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) .from(qCtrCntrlBas) + .where(builder) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .groupBy(qCtrCntrlBas.idntfNum) .orderBy(qCtrCntrlBas.ttlDstnc.sum().desc()) .limit(1) - .fetch(); - - log.warn("size => {}", queryResult.size()); + .fetch(); if(queryResult.size() > 0){ result = queryResult.get(0); String idntfNum = result.getName(); - result.setYear(getFltDistanceYear(idntfNum)); - result.setMonth(getFltDistanceMonth(idntfNum)); - result.setDay(getFltDistanceDay(idntfNum)); + result.setYear(getFltDistanceYear(idntfNum, authCheck, groupId)); + result.setMonth(getFltDistanceMonth(idntfNum, authCheck, groupId)); + result.setDay(getFltDistanceDay(idntfNum, authCheck, groupId)); } else { FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); @@ -1988,29 +2026,41 @@ public List listCntrlHstry(String id){ return result; } - private Double getFltDistanceDay(String idntfNum){ + private Double getFltDistanceDay(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private Double getFltDistanceMonth(String idntfNum){ + private Double getFltDistanceMonth(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -2018,23 +2068,35 @@ public List listCntrlHstry(String id){ ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private Double getFltDistanceYear(String idntfNum){ + private Double getFltDistanceYear(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } @@ -2043,10 +2105,16 @@ public List listCntrlHstry(String id){ * 가장 많이 비행한 기체 * @return */ - public FlightStcsValueModel getFlightCountStcs(){ + public FlightStcsValueModel getFlightCountStcs(boolean authCheck, String groupId){ FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + BooleanBuilder builder = new BooleanBuilder(); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( @@ -2056,6 +2124,11 @@ public List listCntrlHstry(String id){ ) ) .from(qCtrCntrlBas) + .where(builder) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .groupBy(qCtrCntrlBas.idntfNum) .orderBy(qCtrCntrlBas.cntrlId.count().desc()) .limit(1) @@ -2066,9 +2139,9 @@ public List listCntrlHstry(String id){ String idntfNum = result.getName(); - result.setYear(getFltCountYear(idntfNum)); - result.setMonth(getFltCountMonth(idntfNum)); - result.setDay(getFltCountDay(idntfNum)); + result.setYear(getFltCountYear(idntfNum, authCheck, groupId)); + result.setMonth(getFltCountMonth(idntfNum, authCheck, groupId)); + result.setDay(getFltCountDay(idntfNum, authCheck, groupId)); } else { FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); @@ -2082,52 +2155,76 @@ public List listCntrlHstry(String id){ return result; } - private Long getFltCountDay(String idntfNum){ + private Long getFltCountDay(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private Long getFltCountMonth(String idntfNum){ + private Long getFltCountMonth(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private Long getFltCountYear(String idntfNum){ + private Long getFltCountYear(String idntfNum, boolean authCheck, String groupId){ QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정 ) .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } @@ -2141,22 +2238,26 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTimeStcs(String date, String[] formatParam){ - // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; - QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + public List fltTimeStcs(String date, String groupId, boolean authCheck, String[] formatParam){ + + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[0])); StringTemplate formattedDate2 = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[1])); BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -2165,12 +2266,16 @@ public List listCntrlHstry(String id){ formattedDate2.as("name"), Expressions.stringTemplate( "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", - bas.cntrlEndDt, - bas.cntrlStDt + qCtrCntrlBas.cntrlEndDt, + qCtrCntrlBas.cntrlStDt ).as("value") ) ) - .from(bas) + .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .groupBy(formattedDate2) .fetch(); @@ -2193,32 +2298,40 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltDistanceStcs(String date, String[] formatParam){ + public List fltDistanceStcs(String date, String groupId, boolean authCheck, String[] formatParam){ - QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[0])); StringTemplate formattedDate2 = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[1])); BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( Projections.bean( FlightStcsValueModel.class , formattedDate2.as("name"), - bas.ttlDstnc.sum().as("value") + qCtrCntrlBas.ttlDstnc.sum().as("value") ) ) - .from(bas) + .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .groupBy(formattedDate2) .fetch(); @@ -2241,32 +2354,40 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltCountStcs(String date, String[] formatParam){ + public List fltCountStcs(String date, String groupId, boolean authCheck, String[] formatParam){ - QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[0])); StringTemplate formattedDate2 = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[1])); BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( Projections.bean( FlightStcsValueModel.class , formattedDate2.as("name"), - bas.cntrlId.count().as("value") + qCtrCntrlBas.cntrlId.count().as("value") ) ) - .from(bas) + .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .groupBy(formattedDate2) .fetch(); @@ -2289,35 +2410,44 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTopTimeStcs(String date, String[] formatParam){ - QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + public List fltTopTimeStcs(String date, String groupId, boolean authCheck, String[] formatParam){ + + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[0])); BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 Expressions.stringTemplate( "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", - bas.cntrlEndDt, - bas.cntrlStDt + qCtrCntrlBas.cntrlEndDt, + qCtrCntrlBas.cntrlStDt ).as("value") // 결과 객체의 프로퍼티 이름을 지정 ) ) - .from(bas) + .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) - .groupBy(bas.idntfNum) + .groupBy(qCtrCntrlBas.idntfNum) .orderBy(Expressions.stringTemplate( "SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1}))))", - bas.cntrlEndDt, - bas.cntrlStDt + qCtrCntrlBas.cntrlEndDt, + qCtrCntrlBas.cntrlStDt ).desc()) .limit(5) .fetch(); @@ -2340,28 +2470,38 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTopDistanceStcs(String date, String[] formatParam){ - QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + public List fltTopDistanceStcs(String date, String groupId, boolean authCheck, String[] formatParam){ + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[0])); BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); + List result = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - bas.ttlDstnc.sum().as("value") + qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlBas.ttlDstnc.sum().as("value") ) ) - .from(bas) + .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) - .groupBy(bas.idntfNum) - .orderBy(bas.ttlDstnc.sum().desc()) + .groupBy(qCtrCntrlBas.idntfNum) + .orderBy(qCtrCntrlBas.ttlDstnc.sum().desc()) .limit(5) .fetch(); @@ -2383,28 +2523,37 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTopCountStcs(String date, String[] formatParam){ - QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; - + public List fltTopCountStcs(String date, String groupId, boolean authCheck, String[] formatParam){ + + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" - , bas.createDt + , qCtrCntrlBas.createDt , ConstantImpl.create(formatParam[0])); BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - bas.cntrlId.count().as("value") + qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlBas.cntrlId.count().as("value") ) ) - .from(bas) + .from(qCtrCntrlBas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qCtrCntrlBas.cntrlId.eq(qFltPlanCtrCntrlRel.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) - .groupBy(bas.idntfNum) - .orderBy(bas.cntrlId.count().desc()) + .groupBy(qCtrCntrlBas.idntfNum) + .orderBy(qCtrCntrlBas.cntrlId.count().desc()) .limit(5) .fetch(); diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java index 3e293620..c7280cb1 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java @@ -6,8 +6,11 @@ import java.util.List; import org.springframework.stereotype.Repository; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.jpa.entity.QCtrCntrlWarnLog; +import com.palnet.biz.jpa.entity.QFltPlanBas; +import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Projections; @@ -25,30 +28,40 @@ public class CtrCntrlWarnLogQueryRepository { private final JPAQueryFactory query; + private final JwtTokenUtil jwtTokenUtil; + /** * 비정상상황 고정 데이터, 카테고리별 집계[PLAN, ALTITUDE, CRASH] * @return */ - public FlightStcsValueModel getWarnStaticStcs(String cate){ - FlightStcsValueModel result = new FlightStcsValueModel(); + public FlightStcsValueModel getWarnStaticStcs(String cate, boolean authCheck, String groupId){ + FlightStcsValueModel result = new FlightStcsValueModel(); - QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QCtrCntrlWarnLog qCtrCntrlWarnLog = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); - builder.and(bas.warnType.eq(cate)); + builder.and(qCtrCntrlWarnLog.warnType.eq(cate)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - bas.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlWarnLog.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlWarnLog.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정 ) ) - .from(bas) + .from(qCtrCntrlWarnLog) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(qCtrCntrlWarnLog.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) - .groupBy(bas.idntfNum) - .orderBy(bas.cntrlId.countDistinct().desc()) + .groupBy(qCtrCntrlWarnLog.idntfNum) + .orderBy(qCtrCntrlWarnLog.cntrlId.countDistinct().desc()) .limit(1) .fetch(); @@ -57,9 +70,9 @@ public class CtrCntrlWarnLogQueryRepository { String idntfNum = result.getName(); - result.setYear(getWarnYear(idntfNum, cate)); - result.setMonth(getWarnMonth(idntfNum, cate)); - result.setDay(getWarnDay(idntfNum, cate)); + result.setYear(getWarnYear(idntfNum, cate, authCheck, groupId)); + result.setMonth(getWarnMonth(idntfNum, cate, authCheck, groupId)); + result.setDay(getWarnDay(idntfNum, cate, authCheck, groupId)); } else { @@ -76,13 +89,17 @@ public class CtrCntrlWarnLogQueryRepository { } - private String getWarnDay(String idntfNum, String cate){ + private String getWarnDay(String idntfNum, String cate, boolean authCheck, String groupId){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum)); builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.warnType.eq(cate)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -91,18 +108,26 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private String getWarnMonth(String idntfNum, String cate){ + private String getWarnMonth(String idntfNum, String cate, boolean authCheck, String groupId){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum)); builder.and(bas.warnType.eq(cate)); builder.and(bas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -111,18 +136,26 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private String getWarnYear(String idntfNum, String cate){ + private String getWarnYear(String idntfNum, String cate, boolean authCheck, String groupId){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum)); builder.and(bas.warnType.eq(cate)); builder.and(bas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -131,6 +164,10 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } @@ -143,9 +180,11 @@ public class CtrCntrlWarnLogQueryRepository { * @param formatParam * @return */ - public List warnStcs(String cate, String date, String[] formatParam){ + public List warnStcs(String cate, String date, String groupId, boolean authCheck, String[] formatParam){ // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" @@ -160,6 +199,8 @@ public class CtrCntrlWarnLogQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.warnType.eq(cate)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -170,6 +211,10 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .groupBy(formattedDate2) .fetch(); @@ -193,9 +238,11 @@ public class CtrCntrlWarnLogQueryRepository { * @param formatParam * @return */ - public List warnTopStcs(String cate, String date, String[] formatParam){ + public List warnTopStcs(String cate, String date, String groupId, boolean authCheck, String[] formatParam){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" @@ -205,6 +252,8 @@ public class CtrCntrlWarnLogQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.warnType.eq(cate)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -215,6 +264,10 @@ public class CtrCntrlWarnLogQueryRepository { ) .from(bas) .where(builder) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .groupBy(bas.idntfNum) .orderBy(bas.cntrlId.countDistinct().desc()) .limit(5) diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 6c3baa13..4ee93f10 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -7,6 +7,7 @@ import java.time.ZoneId; import java.util.List; import java.util.Optional; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -14,6 +15,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; import org.springframework.util.StringUtils; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq; import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; @@ -74,7 +76,8 @@ public class FltPlanQueryRepository { private final JPAQueryFactory query; - private final ComnFileService comnFileService; + + private final JwtTokenUtil jwtTokenUtil; // 비행계획서 목록 @@ -1185,24 +1188,29 @@ public class FltPlanQueryRepository { * 비행실적 데이터, top 1 * @return */ - public FlightStcsValueModel getFltResultStaticStcs(){ + public FlightStcsValueModel getFltResultStaticStcs(boolean authCheck, String groupId){ FlightStcsValueModel result = new FlightStcsValueModel(); - QFltPlanCtrCntrlRel bas = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); - builder.and(bas.planSno.isNotNull()); + builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 + qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) - .from(bas) + .from(qFltPlanCtrCntrlRel) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) - .groupBy(bas.idntfNum) - .orderBy(bas.planSno.countDistinct().desc()) + .groupBy(qFltPlanCtrCntrlRel.idntfNum) + .orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) .limit(1) .fetch(); @@ -1212,9 +1220,9 @@ public class FltPlanQueryRepository { String idntfNum = result.getName(); - result.setYear(getFltResultYear(idntfNum)); - result.setMonth(getFltResultMonth(idntfNum)); - result.setDay(getFltResultDay(idntfNum)); + result.setYear(getFltResultYear(idntfNum, authCheck, groupId)); + result.setMonth(getFltResultMonth(idntfNum, authCheck, groupId)); + result.setDay(getFltResultDay(idntfNum, authCheck, groupId)); } else { FlightStcsValueModel node = new FlightStcsValueModel(); @@ -1230,7 +1238,8 @@ public class FltPlanQueryRepository { } - private Long getFltResultDay(String idntfNum){ + private Long getFltResultDay(String idntfNum, boolean authCheck, String groupId){ + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1238,6 +1247,8 @@ public class FltPlanQueryRepository { builder.and(qFltPlanCtrCntrlRel.idntfNum.eq(idntfNum)); builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -1250,7 +1261,7 @@ public class FltPlanQueryRepository { .fetchOne(); } - private Long getFltResultMonth(String idntfNum){ + private Long getFltResultMonth(String idntfNum, boolean authCheck, String groupId){ QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1259,6 +1270,8 @@ public class FltPlanQueryRepository { builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -1271,7 +1284,7 @@ public class FltPlanQueryRepository { .fetchOne(); } - private Long getFltResultYear(String idntfNum){ + private Long getFltResultYear(String idntfNum, boolean authCheck, String groupId){ QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1280,6 +1293,8 @@ public class FltPlanQueryRepository { builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -1297,32 +1312,41 @@ public class FltPlanQueryRepository { * 비행계획에 많이 기용된 기체 데이터, top 1 * @return */ - public FlightStcsValueModel getFltPlanStaticStcs(){ + public FlightStcsValueModel getFltPlanStaticStcs(boolean authCheck, String groupId){ FlightStcsValueModel result = new FlightStcsValueModel(); + + QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; - QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; + BooleanBuilder builder = new BooleanBuilder(); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 + qFltPlanArcrft.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) - .from(bas) - .groupBy(bas.idntfNum) - .orderBy(bas.planSno.count().desc()) + .from(qFltPlanArcrft) + .leftJoin(qFltPlanBas) + .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) + .groupBy(qFltPlanArcrft.idntfNum) + .orderBy(qFltPlanArcrft.planSno.count().desc()) .limit(1) .fetch(); + log.warn("que => {}", queryResult); + if(queryResult.size() > 0){ result = queryResult.get(0); if(result.getName().equals("")) result.setName(" "); String idntfNum = result.getName(); - result.setYear(getFltPlanYear(idntfNum)); - result.setMonth(getFltPlanMonth(idntfNum)); - result.setDay(getFltPlanDay(idntfNum)); + result.setYear(getFltPlanYear(idntfNum, authCheck, groupId)); + result.setMonth(getFltPlanMonth(idntfNum, authCheck, groupId)); + result.setDay(getFltPlanDay(idntfNum, authCheck, groupId)); } else { FlightStcsValueModel node = new FlightStcsValueModel(); @@ -1337,52 +1361,67 @@ public class FltPlanQueryRepository { return result; } - private Long getFltPlanDay(String idntfNum){ + private Long getFltPlanDay(String idntfNum, boolean authCheck, String groupId){ QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum.trim())); builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 ) - .from(bas) + .from(bas) + .leftJoin(qFltPlanBas) + .on(qFltPlanBas.planSno.eq(bas.planSno)) .where(builder) .fetchOne(); } - private Long getFltPlanMonth(String idntfNum){ + private Long getFltPlanMonth(String idntfNum, boolean authCheck, String groupId){ QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum.trim())); builder.and(bas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 ) - .from(bas) + .from(bas) + .leftJoin(qFltPlanBas) + .on(qFltPlanBas.planSno.eq(bas.planSno)) .where(builder) .fetchOne(); } - private Long getFltPlanYear(String idntfNum){ - QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; + private Long getFltPlanYear(String idntfNum, boolean authCheck, String groupId){ + QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum.trim())); builder.and(bas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( bas.planSno.count() ) - .from(bas) + .from(bas) + .leftJoin(qFltPlanBas) + .on(qFltPlanBas.planSno.eq(bas.planSno)) .where(builder) .fetchOne(); } @@ -1391,10 +1430,10 @@ public class FltPlanQueryRepository { /** - * 비행실적 많은 기체 데이터, top 1 + * 비행승인 많은 기체 데이터, top 1 * @return */ - public FlightStcsValueModel getFltPlanAprvnStaticStcs(){ + public FlightStcsValueModel getFltPlanAprvnStaticStcs(boolean authCheck, String groupId){ FlightStcsValueModel result = new FlightStcsValueModel(); QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; @@ -1402,18 +1441,19 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(qFltPlanBas.aprvlYn.eq("Y")); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - qFltPlanArcrft.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - qFltPlanArcrft.planSno.count().as("value") // 결과 객체의 프로퍼티 이름을 지정 + qFltPlanArcrft.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) .from(qFltPlanArcrft) .leftJoin(qFltPlanBas) - .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) + .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) .where(builder) .groupBy(qFltPlanArcrft.idntfNum) .orderBy(qFltPlanArcrft.planSno.count().desc()) @@ -1425,9 +1465,9 @@ public class FltPlanQueryRepository { if(result.getName().equals("")) result.setName(" "); String idntfNum = result.getName(); - result.setYear(getFltPlanAprvnYear(idntfNum)); - result.setMonth(getFltPlanAprvnMonth(idntfNum)); - result.setDay(getFltPlanAprvnDay(idntfNum)); + result.setYear(getFltPlanAprvnYear(idntfNum, authCheck, groupId)); + result.setMonth(getFltPlanAprvnMonth(idntfNum, authCheck, groupId)); + result.setDay(getFltPlanAprvnDay(idntfNum, authCheck, groupId)); } else { FlightStcsValueModel node = new FlightStcsValueModel(); @@ -1442,7 +1482,7 @@ public class FltPlanQueryRepository { return result; } - private Long getFltPlanAprvnDay(String idntfNum){ + private Long getFltPlanAprvnDay(String idntfNum, boolean authCheck, String groupId){ QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1450,6 +1490,8 @@ public class FltPlanQueryRepository { builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -1462,7 +1504,7 @@ public class FltPlanQueryRepository { .fetchOne(); } - private Long getFltPlanAprvnMonth(String idntfNum){ + private Long getFltPlanAprvnMonth(String idntfNum, boolean authCheck, String groupId){ QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1472,6 +1514,8 @@ public class FltPlanQueryRepository { builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -1484,7 +1528,7 @@ public class FltPlanQueryRepository { .fetchOne(); } - private Long getFltPlanAprvnYear(String idntfNum){ + private Long getFltPlanAprvnYear(String idntfNum, boolean authCheck, String groupId){ QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1493,7 +1537,9 @@ public class FltPlanQueryRepository { builder.and(qFltPlanBas.aprvlYn.eq("Y")); builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); - + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); + return query .select( qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정 @@ -1511,7 +1557,7 @@ public class FltPlanQueryRepository { * @param formatParam * @return */ - public List fltResultStcs(String date, String[] formatParam){ + public List fltResultStcs(String date, String groupId, boolean authCheck, String[] formatParam){ // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1529,6 +1575,8 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -1563,10 +1611,8 @@ public class FltPlanQueryRepository { * @param formatParam * @return */ - public List fltPlanStcs(String date, String[] formatParam){ - // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; - - QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + public List fltPlanStcs(String date, String groupId, boolean authCheck, String[] formatParam){ + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" @@ -1579,7 +1625,9 @@ public class FltPlanQueryRepository { , ConstantImpl.create(formatParam[1])); BooleanBuilder builder = new BooleanBuilder(); - if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -1612,7 +1660,7 @@ public class FltPlanQueryRepository { * @param formatParam * @return */ - public List fltPlanAprvnStcs(String date, String[] formatParam){ + public List fltPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){ // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1630,6 +1678,8 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); builder.and(qFltPlanBas.aprvlYn.eq("Y")); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -1663,7 +1713,7 @@ public class FltPlanQueryRepository { * @param formatParam * @return */ - public List fltTopResultStcs(String date, String[] formatParam){ + public List fltTopResultStcs(String date, String groupId, boolean authCheck, String[] formatParam){ QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1674,12 +1724,13 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( Projections.bean(FlightStcsValueModel.class, - qFltPlanCtrCntrlRel.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - qFltPlanCtrCntrlRel.planSno.countDistinct().as("value") + qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) .from(qFltPlanCtrCntrlRel) @@ -1708,9 +1759,10 @@ public class FltPlanQueryRepository { * @param formatParam * @return */ - public List fltTopPlanStcs(String date, String[] formatParam){ + public List fltTopPlanStcs(String date, String groupId, boolean authCheck, String[] formatParam){ - QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" @@ -1719,6 +1771,8 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -1728,7 +1782,10 @@ public class FltPlanQueryRepository { ) ) .from(qFltPlanArcrft) + .leftJoin(qFltPlanBas) + .on(qFltPlanBas.planSno.eq(qFltPlanArcrft.planSno)) .where(builder) + .groupBy(qFltPlanArcrft.idntfNum) .orderBy(qFltPlanArcrft.planSno.countDistinct().desc()) .limit(5) .fetch(); @@ -1751,7 +1808,7 @@ public class FltPlanQueryRepository { * @param formatParam * @return */ - public List fltTopPlanAprvnStcs(String date, String[] formatParam){ + public List fltTopPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){ QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1763,7 +1820,9 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - builder.and(qFltPlanBas.aprvlYn.eq("Y")); + builder.and(qFltPlanBas.aprvlYn.eq("Y")); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( diff --git a/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java index cb17ae39..06b7d540 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java @@ -264,6 +264,11 @@ public class AirspaceUtils { return featureInfos; } + public int getSize() { + if(this.airspaces == null) return 0; + return this.airspaces.size(); + } + @Data @NoArgsConstructor @AllArgsConstructor diff --git a/pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java index 7561f115..4f816a25 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java @@ -13,6 +13,7 @@ import org.geotools.coverage.grid.io.GridCoverage2DReader; import org.geotools.coverage.grid.io.GridFormatFinder; import org.geotools.geometry.DirectPosition2D; import org.geotools.referencing.CRS; +import org.locationtech.jts.geom.Coordinate; import org.opengis.geometry.DirectPosition; import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; @@ -85,13 +86,14 @@ public class DigitalElevationModelUtils { this.dems = demList; } - public Double getGroundElevation(double lon, double lat) { + public Double getGroundElevation(Coordinate coord) { if (this.dems == null || dems.isEmpty()) return null; DirectPosition posWorld = null; try { CoordinateReferenceSystem wgs84CRS = CRS.decode("EPSG:4326"); - posWorld = new DirectPosition2D(wgs84CRS, lon, lat); +// posWorld = new DirectPosition2D(wgs84CRS, lon, lat); + posWorld = new DirectPosition2D(wgs84CRS, coord.x, coord.y); } catch (FactoryException e) { throw new RuntimeException(e); } @@ -123,6 +125,11 @@ public class DigitalElevationModelUtils { return null; } + public int getSize() { + if (this.dems == null) return 0; + return this.dems.size(); + } + @Data @NoArgsConstructor @AllArgsConstructor @@ -131,4 +138,13 @@ public class DigitalElevationModelUtils { private Raster raster; private GridCoverage2D coverage; } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class DigitalElevationCoordinate { + private Raster raster; + private GridCoverage2D coverage; + } } diff --git a/pav-server/src/main/java/com/palnet/server/handler/SocketHandler.java b/pav-server/src/main/java/com/palnet/server/handler/SocketHandler.java index 94008552..01c76245 100644 --- a/pav-server/src/main/java/com/palnet/server/handler/SocketHandler.java +++ b/pav-server/src/main/java/com/palnet/server/handler/SocketHandler.java @@ -31,8 +31,8 @@ public class SocketHandler extends SimpleChannelInboundHandler { } @Override - protected void channelRead0(ChannelHandlerContext ctx, SocketPayload payload){ - + protected void channelRead0(ChannelHandlerContext ctx, SocketPayload payload){ + try { logger.debug("==================== [SocketHandler channelRead0 ] ==================== "); diff --git a/pav-server/src/main/resources/application.yml b/pav-server/src/main/resources/application.yml index 05dfef04..c85a2d59 100644 --- a/pav-server/src/main/resources/application.yml +++ b/pav-server/src/main/resources/application.yml @@ -177,57 +177,3 @@ url: file: /data/server/files/ coord: /data/coord/coordinateFolder/ ---- - -spring: - config: - activate: - on-profile: prod2 - devtools: - livereload: - enabled: true - jpa: - hibernate: - naming: - physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - ddl-auto: none - properties: - hibernate: - use_sql_comments: false - show_sql: false - format_sql: false - -server: - port: 8080 - servlet: - context-path: / - tomcat: - max-connections: 10000 - max-threads: 200 - use-relative-redirects: true - -netty: - task : - controlinfoTime: 1000 - - websocket: - port: 8081 - thread: - boss: 1 - worker: 1 - socket: - port: 8082 - thread: - boss: 1 - worker: 1 - -api: - naver: - client-id: WGEct3bJhQC0pyMsP_GK - client-secret-key: Q4K4OtUYol - search-url : https://openapi.naver.com/v1/search/local.json - -url: - base: - file: /data/server/files/ - coord: /data/coord/coordinateFolder/ diff --git a/pav-server/src/main/resources/map/dem/dem_korea_010.tif b/pav-server/src/main/resources/map/dem/dem_korea_010.tif deleted file mode 100644 index 1dc05a68..00000000 Binary files a/pav-server/src/main/resources/map/dem/dem_korea_010.tif and /dev/null differ diff --git a/pav-server/src/main/resources/map/dem/dem_korea_011.tif b/pav-server/src/main/resources/map/dem/dem_korea_011.tif deleted file mode 100644 index 072a2477..00000000 Binary files a/pav-server/src/main/resources/map/dem/dem_korea_011.tif and /dev/null differ diff --git a/pav-socket/src/main/resources/application.yml b/pav-socket/src/main/resources/application.yml index ad40382d..1def7c8f 100644 --- a/pav-socket/src/main/resources/application.yml +++ b/pav-socket/src/main/resources/application.yml @@ -61,30 +61,6 @@ logging: --- -spring: - config: - activate: - on-profile: dev - -netty: - task: - controlinfoTime: 2000 - socket: - port: 8082 - thread: - boss: 1 - worker: 1 - -server: - port: 8182 - -app: - host: http://211.253.38.218:8080 -web-socket: - host: http://211.253.38.218:8081 - ---- - spring: config: activate: @@ -99,7 +75,7 @@ netty: boss: 1 worker: 1 websocket: - host: pav.palntour.com + host: 127.0.0.1 port: 8081 server: @@ -115,42 +91,7 @@ logging: com.palnet: info app: - host: http://211.253.38.218:8080 + host: http://127.0.0.1:8080 web-socket: - host: http://211.253.38.218:8081 + host: http://127.0.0.1:8081 ---- - -spring: - config: - activate: - on-profile: prod2 - -netty: - task: - controlinfoTime: 10000 - socket: - port: 8082 - thread: - boss: 1 - worker: 1 - websocket: - host: pav.palntour.com - port: 8081 - -server: - port: 8182 - -logging: - pattern: - console: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n' - file: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n' - file: - name: /data/logs/data.log - level: - com.palnet: info - -app: - host: http://211.253.38.218:8080 -web-socket: - host: http://211.253.38.218:8081 diff --git a/pav-websocket/src/main/resources/application.yml b/pav-websocket/src/main/resources/application.yml index bd647ce7..e34808a2 100644 --- a/pav-websocket/src/main/resources/application.yml +++ b/pav-websocket/src/main/resources/application.yml @@ -69,32 +69,4 @@ logging: com.palnet: debug app: - host: http://211.253.38.218:8080/ - ---- - -spring: - config: - activate: - on-profile: prod2 - -server: - port: 8181 - -netty: - task: - controlinfoTime: 2000 - websocket: - port: 8081 - -logging: - pattern: - console: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n' - file: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n' - file: - name: /data/logs/websocket/data.log - level: - com.palnet: debug - -app: - host: http://211.253.38.218:8080/ \ No newline at end of file + host: http://127.0.0.1:8080/