드론운항 통계 #11

Merged
qkr7828 merged 9 commits from develop into feature/jaewoo 10 months ago
  1. 33
      pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java
  2. 113
      pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java
  3. 16
      pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRq.java
  4. 17
      pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnElevRs.java
  5. 15
      pav-server/src/main/java/com/palnet/biz/api/comn/elev/model/ComnGroundElevRq.java
  6. 72
      pav-server/src/main/java/com/palnet/biz/api/comn/elev/service/ComnElevService.java
  7. 2
      pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java
  8. 57
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java
  9. 14
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsRQ.java
  10. 175
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java
  11. 4
      pav-server/src/main/java/com/palnet/biz/config/InitRunner.java
  12. 311
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  13. 87
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java
  14. 171
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  15. 5
      pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java
  16. 20
      pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java
  17. 4
      pav-server/src/main/java/com/palnet/server/handler/SocketHandler.java
  18. 54
      pav-server/src/main/resources/application.yml
  19. BIN
      pav-server/src/main/resources/map/dem/dem_korea_010.tif
  20. BIN
      pav-server/src/main/resources/map/dem/dem_korea_011.tif
  21. 65
      pav-socket/src/main/resources/application.yml
  22. 30
      pav-websocket/src/main/resources/application.yml

33
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})

113
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<? extends BasicResponse> getGroundElev(@RequestBody List<ComnGroundElevRq> rq) {
List<ComnElevRs> rs = null;
try {
log.debug(">>> rq : {}", rq);
rs = comnElevService.getGroundElev(rq);
} catch (CustomException e) {
Map<String, Object> 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<? extends BasicResponse> convertMslToAgl(@RequestBody List<ComnElevRq> rq) {
List<ComnElevRs> rs = null;
try {
log.debug(">>> rq : {}", rq);
rs = comnElevService.convertMslToAgl(rq);
} catch (CustomException e) {
Map<String, Object> 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<? extends BasicResponse> convertAglToMsl(@RequestBody List<ComnElevRq> rq) {
List<ComnElevRs> rs = null;
try {
log.debug(">>> rq : {}", rq);
rs = comnElevService.convertAglToMsl(rq);
} catch (CustomException e) {
Map<String, Object> 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));
}
}

16
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;
}

17
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;
}

15
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;
}

72
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<ComnElevRs> getGroundElev(List<ComnGroundElevRq> rq) {
DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance();
List<ComnElevRs> 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<ComnElevRs> convertMslToAgl(List<ComnElevRq> rq) {
DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance();
List<ComnElevRs> 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<ComnElevRs> convertAglToMsl(List<ComnElevRq> rq) {
DigitalElevationModelUtils demUtils = DigitalElevationModelUtils.getInstance();
List<ComnElevRs> 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;
}
}

2
pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java vendored

@ -59,7 +59,7 @@ public class SunRiseSetService {
// continue 20240201
List<String> 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<SunRiseSetRs> sunRiseSet = new ArrayList<>();

57
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<? extends BasicResponse> fltStcsStatic(){
public ResponseEntity<? extends BasicResponse> fltStcsStatic(String groupId){
log.warn("GroupNm => {}", groupId);
List<FlightStcsValueModel> 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<? extends BasicResponse> fltStcs(@RequestParam String cate, String date, @PathVariable String type){
log.warn("cate => {}, date => {}, type => {}", cate, date, type);
public ResponseEntity<? extends BasicResponse> 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<FlightStcsValueModel> graphData = service.fltStatics(cate, date, formatParam);
List<FlightStcsValueModel> topData = service.fltTopStatics(cate, date, formatParam);
List<FlightStcsValueModel> graphData = service.fltStatics(rq, formatParam);
List<FlightStcsValueModel> 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<? extends BasicResponse> warnStcsStatic(){
public ResponseEntity<? extends BasicResponse> warnStcsStatic(String groupId){
List<FlightStcsValueModel> 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<? extends BasicResponse> warnStcs(@RequestParam String cate, String date, @PathVariable String type){
log.warn("cate => {}, date => {}, type => {}", cate, date, type);
public ResponseEntity<? extends BasicResponse> 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<FlightStcsValueModel> graphData = service.warnStatics(cate, date, formatParam);
List<FlightStcsValueModel> topData = service.warnTopStatics(cate, date, formatParam);
List<FlightStcsValueModel> graphData = service.warnStatics(rq, formatParam);
List<FlightStcsValueModel> 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<? extends BasicResponse> fltResultStcs(){
public ResponseEntity<? extends BasicResponse> fltResultStcs(String groupId){
log.warn("Group => {}", groupId);
List<FlightStcsValueModel> 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<? extends BasicResponse> fltResultStcs(@RequestParam String cate, String date, @PathVariable String type){
log.warn("cate => {}, date => {}, type => {}", cate, date, type);
public ResponseEntity<? extends BasicResponse> 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<FlightStcsValueModel> graphData = service.getFltResultStcs(cate, date, formatParam);
List<FlightStcsValueModel> topData = service.getFltTopResultStcs(cate, date, formatParam);
List<FlightStcsValueModel> graphData = service.getFltResultStcs(rq, formatParam);
List<FlightStcsValueModel> topData = service.getFltTopResultStcs(rq, formatParam);
result.setGraphData(graphData);
result.setTopData(topData);
@ -200,7 +205,5 @@ public class MainStatisticsController {
return ResponseEntity.ok().body(new SuccessResponse<FlightStcsModel>(result));
}
}

14
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;
}

175
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<BasGroupUserModel> 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<FlightStcsValueModel> getFlightStaticStcs(){
public List<FlightStcsValueModel> 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<FlightStcsValueModel> result = Arrays.asList(time, distance, fltCount);
@ -118,23 +164,33 @@ public class MainStatisticsService {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltStatics(String cate, String date, String[] formatParam){
public List<FlightStcsValueModel> fltStatics(FlightStcsRQ rq, String[] formatParam){
List<FlightStcsValueModel> resultList = null;
// 권한이 유저권한, 그룹권한 모두 user면 true , user가 하나라도 아닐 경우 모두 false;
boolean authCheck = authCheck(rq.getGroupId());
List<FlightStcsValueModel> 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<FlightStcsValueModel> fltTopStatics(String cate, String date, String[] formatParam){
List<FlightStcsValueModel> resultList = null;
public List<FlightStcsValueModel> fltTopStatics(FlightStcsRQ rq, String[] formatParam){
switch (cate) {
boolean authCheck = authCheck(rq.getGroupId());
List<FlightStcsValueModel> 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<FlightStcsValueModel> getWarnStaticStcs(){
public List<FlightStcsValueModel> getWarnStaticStcs(String groupId){
boolean authCheck = authCheck(groupId);
// TODO:: 비행경로이탈, 고도이탈, 충돌위험 임시코드
String[] cate = {"PLAN" ,"ALTITUDE", "CRASH"};
@ -185,10 +249,14 @@ public class MainStatisticsService {
List<FlightStcsValueModel> 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<FlightStcsValueModel> warnStatics(String cate, String date, String[] formatParam){
public List<FlightStcsValueModel> warnStatics(FlightStcsRQ rq, String[] formatParam){
boolean authCheck = authCheck(rq.getGroupId());
List<FlightStcsValueModel> resultList = ctrCntrlWarnLogQueryRepository.warnStcs(cate, date, formatParam);
List<FlightStcsValueModel> 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<FlightStcsValueModel> warnTopStatics(String cate, String date, String[] formatParam){
public List<FlightStcsValueModel> warnTopStatics(FlightStcsRQ rq, String[] formatParam){
List<FlightStcsValueModel> resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(cate, date, formatParam);
boolean authCheck = authCheck(rq.getGroupId());
List<FlightStcsValueModel> resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(rq.getCate(), rq.getDate(), rq.getGroupId(), authCheck, formatParam);
return resultList;
}
@ -228,70 +300,85 @@ public class MainStatisticsService {
* 비행실적, 비행계획서 기용, 비행승인이 많이 기체 데이터, 상단 고정 데이터
* @return
*/
public List<FlightStcsValueModel> getFltResultStaticStcs(){
public List<FlightStcsValueModel> 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<FlightStcsValueModel> result = Arrays.asList(fltResult,fltPlan, fltPlanAprvn);
return result;
}
public List<FlightStcsValueModel> getFltResultStcs(String cate, String date, String[] formatParam){
/**
* 비행실적 날짜데이터
* @param rq
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> getFltResultStcs(FlightStcsRQ rq, String[] formatParam){
List<FlightStcsValueModel> 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<FlightStcsValueModel> getFltTopResultStcs(String cate, String date, String[] formatParam){
public List<FlightStcsValueModel> getFltTopResultStcs(FlightStcsRQ rq, String[] formatParam){
List<FlightStcsValueModel> 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;

4
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());
}

311
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<AnlsHstryDetailModel> 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<FlightStcsValueModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<FlightStcsValueModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<FlightStcsValueModel> queryResult = query
.select(
@ -2056,6 +2124,11 @@ public List<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTimeStcs(String date, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
public List<FlightStcsValueModel> 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<FlightStcsValueModel> result = query
.select(
@ -2165,12 +2266,16 @@ public List<AnlsHstryDetailModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltDistanceStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltCountStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTopTimeStcs(String date, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTopDistanceStcs(String date, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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<AnlsHstryDetailModel> listCntrlHstry(String id){
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTopCountStcs(String date, String[] formatParam){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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();

87
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<FlightStcsValueModel> 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<FlightStcsValueModel> warnStcs(String cate, String date, String[] formatParam){
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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<FlightStcsValueModel> warnTopStcs(String cate, String date, String[] formatParam){
public List<FlightStcsValueModel> 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<FlightStcsValueModel> 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)

171
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;
@ -70,7 +72,8 @@ public class FltPlanQueryRepository {
private final JPAQueryFactory query;
private final ComnFileService comnFileService;
private final JwtTokenUtil jwtTokenUtil;
// 비행계획서 목록
@ -1181,24 +1184,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<FlightStcsValueModel> 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();
@ -1208,9 +1216,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();
@ -1226,7 +1234,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;
@ -1234,6 +1243,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(
@ -1246,7 +1257,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;
@ -1255,6 +1266,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(
@ -1267,7 +1280,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;
@ -1276,6 +1289,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(
@ -1293,32 +1308,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<FlightStcsValueModel> 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();
@ -1333,52 +1357,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();
}
@ -1387,10 +1426,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;
@ -1398,18 +1437,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<FlightStcsValueModel> 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())
@ -1421,9 +1461,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();
@ -1438,7 +1478,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;
@ -1446,6 +1486,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(
@ -1458,7 +1500,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;
@ -1468,6 +1510,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(
@ -1480,7 +1524,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;
@ -1489,7 +1533,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() // 결과 객체의 프로퍼티 이름을 지정
@ -1507,7 +1553,7 @@ public class FltPlanQueryRepository {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltResultStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> fltResultStcs(String date, String groupId, boolean authCheck, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
@ -1525,6 +1571,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<FlightStcsValueModel> result = query
.select(
@ -1559,10 +1607,8 @@ public class FltPlanQueryRepository {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltPlanStcs(String date, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
public List<FlightStcsValueModel> fltPlanStcs(String date, String groupId, boolean authCheck, String[] formatParam){
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
@ -1575,7 +1621,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<FlightStcsValueModel> result = query
.select(
@ -1608,7 +1656,7 @@ public class FltPlanQueryRepository {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltPlanAprvnStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> fltPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
@ -1626,6 +1674,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<FlightStcsValueModel> result = query
.select(
@ -1659,7 +1709,7 @@ public class FltPlanQueryRepository {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTopResultStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> fltTopResultStcs(String date, String groupId, boolean authCheck, String[] formatParam){
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
@ -1670,12 +1720,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<FlightStcsValueModel> result = query
.select(
Projections.bean(FlightStcsValueModel.class,
qFltPlanCtrCntrlRel.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
qFltPlanCtrCntrlRel.planSno.countDistinct().as("value")
qFltPlanCtrCntrlRel.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정
)
)
.from(qFltPlanCtrCntrlRel)
@ -1704,9 +1755,10 @@ public class FltPlanQueryRepository {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTopPlanStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> 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})"
@ -1715,6 +1767,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<FlightStcsValueModel> result = query
.select(
@ -1724,7 +1778,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();
@ -1747,7 +1804,7 @@ public class FltPlanQueryRepository {
* @param formatParam
* @return
*/
public List<FlightStcsValueModel> fltTopPlanAprvnStcs(String date, String[] formatParam){
public List<FlightStcsValueModel> fltTopPlanAprvnStcs(String date, String groupId, boolean authCheck, String[] formatParam){
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
@ -1759,7 +1816,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<FlightStcsValueModel> result = query
.select(

5
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

20
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;
}
}

4
pav-server/src/main/java/com/palnet/server/handler/SocketHandler.java

@ -31,8 +31,8 @@ public class SocketHandler extends SimpleChannelInboundHandler<SocketPayload> {
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, SocketPayload payload){
protected void channelRead0(ChannelHandlerContext ctx, SocketPayload payload){
try {
logger.debug("==================== [SocketHandler channelRead0 ] ==================== ");

54
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/

BIN
pav-server/src/main/resources/map/dem/dem_korea_010.tif

Binary file not shown.

BIN
pav-server/src/main/resources/map/dem/dem_korea_011.tif

Binary file not shown.

65
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

30
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/
host: http://127.0.0.1:8080/

Loading…
Cancel
Save