From a04740a7b35ebd373fe9032b9a06d589497c8c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Wed, 15 Nov 2023 10:05:48 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EC=9D=BC=EC=9D=BC=EB=B9=84=EC=A0=95?= =?UTF-8?q?=EC=83=81=20=EC=83=81=ED=99=A9=20=EC=9E=84=EC=8B=9C=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flight/controller/BasFlightController.java | 8 ++++---- .../dash/controller/MainDashController.java | 17 +++++++++++++++++ .../main/dash/model/MainCurrentStcsModel.java | 15 +++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index 5415a2ff..2f01e8ed 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java @@ -391,10 +391,10 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse(response)); } - @PostMapping("/coord") - public JSONObject coordTest(@RequestBody Coordinate coordinate) throws IOException, ParseException { + // @PostMapping("/coord") + // public JSONObject coordTest(@RequestBody Coordinate coordinate) throws IOException, ParseException { - return FlightUtils.getCoordinateGis(coordinate); + // return FlightUtils.getCoordinateGis(coordinate); - } + // } } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java index f139250c..b9f8538c 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java @@ -319,6 +319,23 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping("/current/flight-warn") + public ResponseEntity currentFlightWarn(@RequestParam(required = false) String groupId){ + log.warn("안뇽"); + + + + try { + + }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>(null)); + } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java new file mode 100644 index 00000000..9259902f --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java @@ -0,0 +1,15 @@ +package com.palnet.biz.api.main.dash.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class MainCurrentStcsModel { + + private List stcsValues; + + private Double percent; + + +} From 5a92ff7a75f433e913d2503538593050c6aa0206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 15 Nov 2023 10:11:06 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=96=B4=EB=93=9C?= =?UTF-8?q?=EB=AF=BC=20=EA=B6=8C=ED=95=9C=EC=97=90=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=EB=8B=B4=EB=8B=B9=EA=B4=80=ED=95=A0=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20token=20?= =?UTF-8?q?=EC=97=90=20=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cstmr/controller/AcntCstmrController.java | 2 - .../acnt/cstmr/model/AnctCstmerRlModel.java | 2 + .../biz/api/acnt/jwt/model/JwtUserModel.java | 163 +++++++++--------- .../biz/api/acnt/jwt/utils/JwtTokenUtil.java | 14 ++ .../elev/controller/ComnElevController.java | 3 - .../palnet/biz/jpa/entity/PtyCstmrBas.java | 5 +- .../pty/PtyCstmrQueryRepository.java | 4 +- 7 files changed, 105 insertions(+), 88 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/controller/AcntCstmrController.java b/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/controller/AcntCstmrController.java index e06419d6..d75a6529 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/controller/AcntCstmrController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/controller/AcntCstmrController.java @@ -13,7 +13,6 @@ import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -31,7 +30,6 @@ import java.util.Map; @Tag(name = "회원관리", description = "회원 관련 API") public class AcntCstmrController { - @Autowired private final AcntCstmrService service; @PostMapping(value = "/register") diff --git a/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java b/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java index 77dc62f3..89f36506 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java @@ -27,5 +27,7 @@ public class AnctCstmerRlModel { private Instant updateDt; private String updateuserId; + + private String cptAuthCode; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java b/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java index 03ca37fa..dd04a14f 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java @@ -16,85 +16,88 @@ import java.util.*; @AllArgsConstructor public class JwtUserModel implements UserDetails { - @Id - @GeneratedValue(strategy= GenerationType.IDENTITY) - @Column(name = "CSTMR_SNO", unique = true) - private Integer cstmrSno; - - @Column(name = "USER_ID", unique = true) - private String userId; - - @Column(name = "USER_PSWD") - private String userPswd; - - @Column(name = "SITE_CODE") - private String siteCode; - - @Column(name = "AUTH_ID") - private String auth; - - @Column(name = "CSTMR_STATUS_CD") - private String cstmrStatusCd; - - @Transient - private String userNm; - @Transient - private List group; - - - // 사용자의 권한을 콜렉션 형태로 반환 - // 단, 클래스 자료형은 GrantedAuthority를 구현해야함 - @Override - public Collection getAuthorities() { - Set roles = new HashSet<>(); - for (String role : auth.split(",")) { - roles.add(new SimpleGrantedAuthority(role)); - } - return roles; - } - - // 사용자의 id를 반환 (unique한 값) - @Override - public String getUsername() { - return userId; - } - - // 사용자의 password를 반환 - @Override - public String getPassword() { - return userPswd; - } - - // 계정 만료 여부 반환 - @Override - public boolean isAccountNonExpired() { - // 만료되었는지 확인하는 로직 - return true; // true -> 만료되지 않았음 - } - - // 계정 잠금 여부 반환 - @Override - public boolean isAccountNonLocked() { - // 계정 잠금되었는지 확인하는 로직 - if(cstmrStatusCd.equals("A")) - return true; - else - return false; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "CSTMR_SNO", unique = true) + private Integer cstmrSno; + + @Column(name = "USER_ID", unique = true) + private String userId; + + @Column(name = "USER_PSWD") + private String userPswd; + + @Column(name = "SITE_CODE") + private String siteCode; + + @Column(name = "AUTH_ID") + private String auth; + + @Column(name = "CSTMR_STATUS_CD") + private String cstmrStatusCd; + + @Column(name = "CPT_AUTH_CODE") + private String cptAuthCode; + + @Transient + private String userNm; + @Transient + private List group; + + + // 사용자의 권한을 콜렉션 형태로 반환 + // 단, 클래스 자료형은 GrantedAuthority를 구현해야함 + @Override + public Collection getAuthorities() { + Set roles = new HashSet<>(); + for (String role : auth.split(",")) { + roles.add(new SimpleGrantedAuthority(role)); + } + return roles; + } + + // 사용자의 id를 반환 (unique한 값) + @Override + public String getUsername() { + return userId; + } + + // 사용자의 password를 반환 + @Override + public String getPassword() { + return userPswd; + } + + // 계정 만료 여부 반환 + @Override + public boolean isAccountNonExpired() { + // 만료되었는지 확인하는 로직 + return true; // true -> 만료되지 않았음 + } + + // 계정 잠금 여부 반환 + @Override + public boolean isAccountNonLocked() { + // 계정 잠금되었는지 확인하는 로직 + if ("A".equals(cstmrStatusCd)) + return true; + else + return false; // return true; // true -> 잠금되지 않았음 - } - - // 패스워드의 만료 여부 반환 - @Override - public boolean isCredentialsNonExpired() { - // 패스워드가 만료되었는지 확인하는 로직 - return true; // true -> 만료되지 않았음 - } - - // 계정 사용 가능 여부 반환 - @Override - public boolean isEnabled() { - // 계정이 사용 가능한지 확인하는 로직 - return true; // true -> 사용 가능 - } - + } + + // 패스워드의 만료 여부 반환 + @Override + public boolean isCredentialsNonExpired() { + // 패스워드가 만료되었는지 확인하는 로직 + return true; // true -> 만료되지 않았음 + } + + // 계정 사용 가능 여부 반환 + @Override + public boolean isEnabled() { + // 계정이 사용 가능한지 확인하는 로직 + return true; // true -> 사용 가능 + } + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java b/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java index ee450bd2..86e1ef84 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java +++ b/pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java @@ -73,6 +73,7 @@ public class JwtTokenUtil implements Serializable { claims.put("auth", userDetails.getAuth()); claims.put("group", userDetails.getGroup()); claims.put("userNm", userDetails.getUserNm()); + claims.put("cptAuthCode", userDetails.getCptAuthCode()); return doGenerateToken(claims, userDetails.getUsername()); } @@ -178,4 +179,17 @@ public class JwtTokenUtil implements Serializable { return payload.get("auth", String.class); } + + + public String getCptAuthCodeByToken() { + HttpServletRequest rq = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = rq.getHeader("Authorization"); + + if (token == null || "".equals(token)) return null; + + token = token.substring(JWT_PREFIX.length()).trim(); + Claims payload = getAllClaimsFromToken(token); + + return payload.get("cptAuthCode", String.class); + } } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java index 4dd9f7a7..765c57df 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java @@ -8,13 +8,10 @@ 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; diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/PtyCstmrBas.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/PtyCstmrBas.java index eb74031d..de62aa77 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/entity/PtyCstmrBas.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/PtyCstmrBas.java @@ -34,11 +34,12 @@ public class PtyCstmrBas implements Serializable { @Column(name="CSTMR_STATUS_CD") private String cstmrStatusCd; -// @Temporal(TemporalType.TIMESTAMP) @Column(name="CSTMR_STATUS_CNG_DT", columnDefinition = "TIMESTAMP") private Instant cstmrStatusCngDt; -// @Temporal(TemporalType.TIMESTAMP) + @Column(name="CPT_AUTH_CODE") + private String cptAuthCode; + @Column(name="JOIN_DT", columnDefinition = "TIMESTAMP") private Instant joinDt; diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java index c3014cba..61d3b9ac 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java @@ -164,6 +164,7 @@ public class PtyCstmrQueryRepository { model.setUserId(entity.getUserId()); model.setCstmrSno(entity.getCstmrSno()); model.setCstmrStatusCd(entity.getCstmrStatusCd()); + model.setCptAuthCode(entity.getCptAuthCode()); model.setUserPswd(entity.getUserPswd()); if (pcgEntityList != null && !pcgEntityList.isEmpty()) { List groupModelList = new ArrayList<>(); @@ -277,7 +278,8 @@ public class PtyCstmrQueryRepository { dtl.email, dtl.hpno, dtl.updateDt, - bas.userId + bas.userId, + bas.cptAuthCode )) .from(bas) .leftJoin(dtl) From c4a9683ee0d84b023e21722962fcdffe224fd926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Wed, 15 Nov 2023 10:29:08 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=B9=84=ED=96=89=EC=8B=A4=EC=A0=81=20grou?= =?UTF-8?q?pby=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 92194665..b6eacdd5 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -1740,6 +1740,7 @@ public class FltPlanQueryRepository { .leftJoin(qFltPlanBas) .on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno)) .where(builder) + .groupBy(qFltPlanCtrCntrlRel.idntfNum) .orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) .limit(5) .fetch(); From 254771dc4278d3145de39d1017ef1c72a892b60b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9E=AC=EC=9A=B0?= <박재우@host.docker.internal> Date: Wed, 15 Nov 2023 10:42:35 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EB=93=9C=EB=A1=A0=ED=98=84=ED=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dash/controller/MainDashController.java | 21 +++++- .../main/dash/service/MainDashService.java | 27 +++++++- .../flt/FltPlanQueryRepository.java | 69 +++++++++++++++++-- 3 files changed, 108 insertions(+), 9 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java index f139250c..e8e7877c 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java @@ -21,6 +21,7 @@ import com.palnet.biz.api.main.dash.model.MainDashListModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.api.main.dash.service.MainDashService; import com.palnet.comn.code.RSErrorCode; +import com.querydsl.core.Tuple; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -301,6 +302,24 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping(value = "/stcs/dron-flight/") + @ApiOperation(value = "드론 비행 현황") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + public ResponseEntity dronFlightStcs(@RequestParam String groupId){ + + Map result = null; + + try { + result = service.mainDashDronFlightStcs(groupId); + }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< Map>(result)); + } + @GetMapping(value = "/dron-flight/list/") @ApiOperation(value = "드론 별 비행운항 목록") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @@ -319,6 +338,4 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } - - } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java index 9f0f8238..f868f95a 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java @@ -10,6 +10,7 @@ import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.bas.group.model.BasGroupModel; import com.palnet.biz.jpa.repository.pty.*; +import com.querydsl.core.Tuple; import lombok.extern.slf4j.Slf4j; @@ -125,9 +126,6 @@ public class MainDashService { String userAuth = token.getUserAuthByToken(); List userGroupList = token.getGroupAuthByToken(); - - log.info(">>>>>>>>> groupList {} " , userAuth); - BasGroupModel myFirstGroup = new BasGroupModel(); List resultList = new ArrayList(); @@ -145,6 +143,29 @@ public class MainDashService { return resultList; } + + public Map mainDashDronFlightStcs(String groupId){ + + String userAuth = token.getUserAuthByToken(); + List userGroupList = token.getGroupAuthByToken(); + + BasGroupModel myFirstGroup = new BasGroupModel(); + + Map resultList = new HashMap<>(); + + if(userAuth.equals("SUPER")) { + + resultList = fltPlanQueryRepository.getFlightDronStcs("KAC"); + + }else { + + myFirstGroup = ptyGroupQueryRepository.myFirstGroup(userGroupList); + + resultList = fltPlanQueryRepository.getFlightDronStcs(myFirstGroup.getGroupId()); + } + + return resultList; + } /** * 김포공항, 비행승인 통계 * @param yyyymm diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index b6eacdd5..9e6b32d1 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -3,14 +3,14 @@ package com.palnet.biz.jpa.repository.flt; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; +import java.util.HashMap; import java.util.List; +import java.util.Map; 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; @@ -26,7 +26,6 @@ import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; -import com.palnet.biz.api.comn.file.service.ComnFileService; import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; @@ -54,6 +53,7 @@ import com.palnet.biz.jpa.model.LaancPlanareaCoordDto; import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.InstantUtils; import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.Tuple; import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; @@ -67,7 +67,6 @@ import com.querydsl.core.types.dsl.StringTemplate; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; -import com.querydsl.sql.SQLExpressions; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -1918,6 +1917,68 @@ public class FltPlanQueryRepository { .orderBy(((ComparableExpressionBase) groupOrder).desc(), cib.createDt.asc()) .fetch(); + return result; + } + + public Map getFlightDronStcs(String groupId){ + + QComIdntfBas cib = QComIdntfBas.comIdntfBas; + QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas fpb = QFltPlanBas.fltPlanBas; + QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas; + QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; + + BooleanBuilder builder = new BooleanBuilder(); + + if(!groupId.equals("all")) { + builder.and(pgb.groupId.eq(groupId)); + } + Instant now = Instant.now(); + + Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC); + Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC); + + List res = query + .select( + new CaseBuilder() + .when(ccb.statusCd.eq("01")).then("비행 중") + .when(ccb.statusCd.eq("99")).then("비행 완료") + .when(fpb.planSno.isNotNull()).then("비행 대기 중") + .otherwise("비행 없음").as("status"), + fpb.count() + ) + .from(fpa) + .leftJoin(fpb).on(fpb.planSno.eq(fpa.planSno)) + .leftJoin(pgb).on(pgb.groupId.eq(fpb.groupId)) + .leftJoin(cib).on(cib.idntfNum.eq(fpa.idntfNum)) + .leftJoin(fpccr).on(fpccr.planSno.eq(fpb.planSno)) + .leftJoin(ccb).on(ccb.cntrlId.eq(fpccr.cntrlId)) + .where( + builder + .and(fpb.schFltStDt.between( + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).toInstant(), + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).plus(1, ChronoUnit.DAYS).toInstant() + )) + .and(fpb.schFltEndDt.between( + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).toInstant(), + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).plus(1, ChronoUnit.DAYS).toInstant() + )) + .and(fpb.planSno.isNotNull()) + ) + .groupBy(ccb.statusCd) + .fetch(); + + Map result = new HashMap<>(); + + for (Tuple tuple : res) { + String status = tuple.get(0, String.class); + String count = tuple.get(1, Long.class).toString(); // Assuming count is at index 1 + + result.put(status, count); + } + + return result; } } \ No newline at end of file From 814adff88eb7cb36b77c2727decf9ce8b994a48e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9E=AC=EC=9A=B0?= <박재우@host.docker.internal> Date: Wed, 15 Nov 2023 10:57:48 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=EB=93=9C=EB=A1=A0=ED=86=B5=EA=B3=84=20rq?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/api/main/dash/controller/MainDashController.java | 4 ++-- .../com/palnet/biz/api/main/dash/service/MainDashService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java index e8e7877c..f2a9114b 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java @@ -305,12 +305,12 @@ public class MainDashController { @GetMapping(value = "/stcs/dron-flight/") @ApiOperation(value = "드론 비행 현황") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") - public ResponseEntity dronFlightStcs(@RequestParam String groupId){ + public ResponseEntity dronFlightStcs(){ Map result = null; try { - result = service.mainDashDronFlightStcs(groupId); + result = service.mainDashDronFlightStcs(); }catch (Exception e) { log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java index f868f95a..a584f856 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java @@ -144,7 +144,7 @@ public class MainDashService { return resultList; } - public Map mainDashDronFlightStcs(String groupId){ + public Map mainDashDronFlightStcs(){ String userAuth = token.getUserAuthByToken(); List userGroupList = token.getGroupAuthByToken(); From ca86a2debdd264d10972bb1db00fe044b2678f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9E=AC=EC=9A=B0?= <박재우@host.docker.internal> Date: Wed, 15 Nov 2023 11:26:57 +0900 Subject: [PATCH 6/8] . --- .../biz/api/main/dash/model/MainDashFlightListModel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java index 62020b19..40c89bed 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java @@ -13,9 +13,9 @@ public class MainDashFlightListModel { private String idntfNum; - private Instant schFltStDt; + private Instant cntrlStDt; - private Instant schFltEndDt; + private Instant cntrlEndDt; private Object totalFlightTime; From 4c34b1e081231b5848298225de689acabd121fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Wed, 15 Nov 2023 11:34:02 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=EC=9D=BC=EC=9D=BC=20=EB=B9=84=EC=A0=95?= =?UTF-8?q?=EC=83=81=20=EC=83=81=ED=99=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dash/controller/MainDashController.java | 11 ++- .../main/dash/service/MainDashService.java | 61 ++++++++++++++++ .../service/MainStatisticsService.java | 2 +- .../ctr/CtrCntrlWarnLogQueryRepository.java | 72 +++++++++++++++++++ 4 files changed, 139 insertions(+), 7 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java index b9f8538c..37ef7d26 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java @@ -1,5 +1,6 @@ package com.palnet.biz.api.main.dash.controller; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController; 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.biz.api.main.dash.model.MainCurrentStcsModel; import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; import com.palnet.biz.api.main.dash.model.MainDashListModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; @@ -321,21 +323,18 @@ public class MainDashController { @GetMapping("/current/flight-warn") public ResponseEntity currentFlightWarn(@RequestParam(required = false) String groupId){ - log.warn("안뇽"); - - + List result = new ArrayList<>(); try { - + result = service.currentFlightWarn(groupId); }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>(null)); + return ResponseEntity.ok().body(new SuccessResponse>(result)); } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java index 9f0f8238..c1a17a19 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java @@ -1,6 +1,7 @@ package com.palnet.biz.api.main.dash.service; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -18,10 +19,16 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; import com.palnet.biz.api.main.dash.model.MainDashListModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; +import com.palnet.biz.api.main.statistics.service.MainStatisticsService; +import com.palnet.biz.jpa.entity.CtrCntrlWarnLog; +import com.palnet.biz.jpa.entity.FltPlanBas; +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.FltPlanArcrftRepository; import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; @@ -39,6 +46,9 @@ public class MainDashService { @Autowired private FltPlanQueryRepository fltPlanQueryRepository; + + @Autowired + private CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository; @Autowired private CtrCntrlQueryRepository query; @@ -48,6 +58,9 @@ public class MainDashService { @Autowired private JwtTokenUtil token; + + @Autowired + private MainStatisticsService mainStatisticsService; /** @@ -252,4 +265,52 @@ public class MainDashService { return result; } + + public List currentFlightWarn(String groupId){ + final int sumCount = 3; // 3번은 합계 + + boolean authCheck = mainStatisticsService.authCheck(groupId); + + + String[] dateCate = {"-2", "-1", "0", "1"}; + + List result = new ArrayList<>(); + + for(String cate : dateCate){ + List cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(groupId, authCheck, cate); + + int count = cntrlWarnLogs.size(); // + + int plan = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.PLAN.getValue())).count(); + int altitude = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.ALTITUDE.getValue())).count(); + int crash = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.CRASH.getValue())).count(); + + List stcsValues = Arrays.asList(plan, altitude, crash, count); + + MainCurrentStcsModel node = new MainCurrentStcsModel(); + node.setStcsValues(stcsValues); + + result.add(node); + } + + for(int i = 0; i < result.size(); i++){ + + if(i == 0) continue;; + + int prevSum = result.get(i-1).getStcsValues().get(sumCount); // 전날 합계 [기준] + int sum = result.get(i).getStcsValues().get(sumCount); // 합계 + + double percent = 0; + + if(prevSum != 0){ + percent = ((sum - prevSum) / (double) prevSum) * 100; + } + + result.get(i).setPercent(percent); + } + + result.remove(0); + + return result; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java index aa33c2f2..cb16a98a 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java @@ -111,7 +111,7 @@ public class MainStatisticsService { * @param groupId * @return */ - private Boolean authCheck(String groupId){ + public Boolean authCheck(String groupId){ if(groupId == null || groupId.equals("")) return false; diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java index c7280cb1..088486ab 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java @@ -8,12 +8,15 @@ 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.CtrCntrlWarnLog; +import com.palnet.biz.jpa.entity.FltPlanBas; 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; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.StringTemplate; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -284,4 +287,73 @@ public class CtrCntrlWarnLogQueryRepository { return result; } + + public List currentStcs(String groupId, boolean authCheck, String cate){ + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QCtrCntrlWarnLog qCtrCntrlWarnLog = QCtrCntrlWarnLog.ctrCntrlWarnLog; + + BooleanBuilder builder = getCurrentBooleanBuilder(groupId, authCheck, cate, qFltPlanBas, qCtrCntrlWarnLog); + + List stcsValues = query + .select( + Projections.bean( + CtrCntrlWarnLog.class, + qCtrCntrlWarnLog.warnType + ) + ) + .from(qCtrCntrlWarnLog) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(qCtrCntrlWarnLog.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) + .where(builder) + .fetch(); + + return stcsValues; + } + + private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){ + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); + + String dateFormat = "%Y-%m-%d"; + BooleanExpression dateExpression = null; + switch (cate){ + case "-2" : + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().minusDays(2).toString()); + + builder.and(dateExpression); + + break; + case "-1": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().minusDays(1).toString()); + + builder.and(dateExpression); + break; + + case "0": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().toString()); + builder.and(dateExpression); + break; + + case "1": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().plusDays(1).toString()); + + builder.and(dateExpression); + break; + } + + return builder; + } } From 3414b7fc767ffde835b3cde54c0c51fa0469d775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Wed, 15 Nov 2023 11:47:39 +0900 Subject: [PATCH 8/8] =?UTF-8?q?QueryDSL=20GroupBY=EC=A0=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java index 088486ab..4825bda1 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java @@ -308,6 +308,7 @@ public class CtrCntrlWarnLogQueryRepository { .leftJoin(qFltPlanBas) .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) + .groupBy(qCtrCntrlWarnLog.cntrlId) .fetch(); return stcsValues;