Compare commits

...

11 Commits

  1. 2
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/controller/AcntCstmrController.java
  2. 2
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java
  3. 163
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtUserModel.java
  4. 14
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/utils/JwtTokenUtil.java
  5. 3
      pav-server/src/main/java/com/palnet/biz/api/comn/elev/controller/ComnElevController.java
  6. 47
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  7. 15
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java
  8. 4
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java
  9. 88
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  10. 2
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java
  11. 5
      pav-server/src/main/java/com/palnet/biz/jpa/entity/PtyCstmrBas.java
  12. 73
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java
  13. 70
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

2
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")

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

163
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<JwtGroupModel> group;
// 사용자의 권한을 콜렉션 형태로 반환
// 단, 클래스 자료형은 GrantedAuthority를 구현해야함
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> 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<JwtGroupModel> group;
// 사용자의 권한을 콜렉션 형태로 반환
// 단, 클래스 자료형은 GrantedAuthority를 구현해야함
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> 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 -> 사용 가능
}
}

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

3
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;

47
pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java

@ -1,9 +1,9 @@
package com.palnet.biz.api.main.dash.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@ -17,11 +17,13 @@ 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;
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;
@ -163,7 +165,7 @@ public class MainDashController {
}
@GetMapping(value = "/stcs/flight/date/{type}")
@ApiOperation(value = "김포공항, 비행실적 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -302,6 +304,24 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashStcsModel>>(result));
}
@GetMapping(value = "/stcs/dron-flight/")
@ApiOperation(value = "드론 비행 현황")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
public ResponseEntity<? extends BasicResponse> dronFlightStcs(){
Map<String, String> result = null;
try {
result = service.mainDashDronFlightStcs();
}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<String, String>>(result));
}
@GetMapping(value = "/dron-flight/list/")
@ApiOperation(value = "드론 별 비행운항 목록")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ -320,19 +340,20 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainDashFlightListModel>>(result));
}
@GetMapping("/stcs/dailyflight")
@ApiOperation(value = "일일 비행횟수 현황")
@Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API")
public ResponseEntity<? extends BasicResponse> getDailyFlightNumOfStcs(){
List<MainDashFlightNumStcsModel> result = null;
@GetMapping("/current/flight-warn")
public ResponseEntity<? extends BasicResponse> currentFlightWarn(@RequestParam(required = false) String groupId){
List<MainCurrentStcsModel> result = new ArrayList<>();
try {
result = service.dailyFlightNumOfStcs();
}catch (Exception e){
log.error("IGNORE : {} ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1"));
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<List<MainDashFlightNumStcsModel>>(result));
}
return ResponseEntity.ok().body(new SuccessResponse<List<MainCurrentStcsModel>>(result));
}
}

15
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<Integer> stcsValues;
private Double percent;
}

4
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;

88
pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java

@ -3,6 +3,7 @@ package com.palnet.biz.api.main.dash.service;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -15,6 +16,7 @@ import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
import com.palnet.biz.jpa.repository.pty.*;
import com.querydsl.core.Tuple;
import lombok.extern.slf4j.Slf4j;
@ -23,10 +25,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;
@ -46,6 +54,9 @@ public class MainDashService {
@Autowired
private FltPlanQueryRepository fltPlanQueryRepository;
@Autowired
private CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository;
@Autowired
private CtrCntrlQueryRepository query;
@ -55,6 +66,9 @@ public class MainDashService {
@Autowired
private JwtTokenUtil token;
@Autowired
private MainStatisticsService mainStatisticsService;
/**
@ -132,9 +146,6 @@ public class MainDashService {
String userAuth = token.getUserAuthByToken();
List<JwtGroupModel> userGroupList = token.getGroupAuthByToken();
log.info(">>>>>>>>> groupList {} " , userAuth);
BasGroupModel myFirstGroup = new BasGroupModel();
List<MainDashFlightListModel> resultList = new ArrayList<MainDashFlightListModel>();
@ -152,6 +163,29 @@ public class MainDashService {
return resultList;
}
public Map<String, String> mainDashDronFlightStcs(){
String userAuth = token.getUserAuthByToken();
List<JwtGroupModel> userGroupList = token.getGroupAuthByToken();
BasGroupModel myFirstGroup = new BasGroupModel();
Map<String, String> 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
@ -324,4 +358,52 @@ public class MainDashService {
return model;
}
public List<MainCurrentStcsModel> currentFlightWarn(String groupId){
final int sumCount = 3; // 3번은 합계
boolean authCheck = mainStatisticsService.authCheck(groupId);
String[] dateCate = {"-2", "-1", "0", "1"};
List<MainCurrentStcsModel> result = new ArrayList<>();
for(String cate : dateCate){
List<CtrCntrlWarnLog> 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<Integer> 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;
}
}

2
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;

5
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;

73
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,74 @@ public class CtrCntrlWarnLogQueryRepository {
return result;
}
public List<CtrCntrlWarnLog> 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<CtrCntrlWarnLog> 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)
.groupBy(qCtrCntrlWarnLog.cntrlId)
.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;
}
}

70
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;
@ -1740,6 +1739,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();
@ -1917,6 +1917,68 @@ public class FltPlanQueryRepository {
.orderBy(((ComparableExpressionBase<Integer>) groupOrder).desc(), cib.createDt.asc())
.fetch();
return result;
}
public Map<String, String> 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<Tuple> 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<String, String> 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;
}
}
Loading…
Cancel
Save