Browse Source

메인 대시보드 serviceType 적용

pull/16/head
지대한 10 months ago
parent
commit
225dfb8120
  1. 14
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  2. 138
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  3. 119
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  4. 10
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java
  5. 7
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  6. 20
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  7. 1
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java
  8. 3
      pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java

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

@ -83,8 +83,6 @@ public class MainDashController {
public ResponseEntity<? extends BasicResponse> stcsArea(String yyyymm) {
List<MainDashStcsModel> result = null;
// log.debug(yyyymm);
if(yyyymm == null || !(yyyymm.length() == 7) ) {
return ResponseEntity.status(HttpStatus.OK)
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
@ -340,14 +338,14 @@ public class MainDashController {
@ApiOperation(value = "일일 비정상상황 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "groupId",value = "그룹아이디", dataTypeClass = String.class)
@ApiImplicitParam(name = "serviceType",value = "관할기관코드(cptAuthCode)", dataTypeClass = String.class)
})
public ResponseEntity<? extends BasicResponse> currentFlightWarn(@RequestParam(required = false) String groupId){
public ResponseEntity<? extends BasicResponse> currentFlightWarn(@RequestParam(required = false) String serviceType){
List<MainDashWarnNumStcsModel> result = new ArrayList<>();
try {
result = service.currentFlightWarn(groupId);
result = service.currentFlightWarn(serviceType);
}catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
@ -361,13 +359,13 @@ public class MainDashController {
@ApiOperation(value = "일일 비행계획 통계")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "groupId",value = "그룹아이디", dataTypeClass = String.class)
@ApiImplicitParam(name = "serviceType",value = "관할기관코드(cptAuthCode)", dataTypeClass = String.class)
})
public ResponseEntity<? extends BasicResponse> currentFlightPlan(@RequestParam(required = false) String groupId){
public ResponseEntity<? extends BasicResponse> currentFlightPlan(@RequestParam(required = false) String serviceType){
List<MainDashPlanNumStcsModel> result = new ArrayList<>();
try {
result = service.currentFlightPlan(groupId);
result = service.currentFlightPlan(serviceType);
} catch (Exception e){
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)

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

@ -18,6 +18,7 @@ import com.palnet.comn.exception.CustomException;
import com.querydsl.core.Tuple;
import com.querydsl.core.BooleanBuilder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
@ -32,47 +33,39 @@ import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
@Service
@Slf4j
@Service
@RequiredArgsConstructor
public class MainDashService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private PtyDronQueryRepository ptyDronQueryRepository;
@Autowired
private PtyGroupQueryRepository ptyGroupQueryRepository;
@Autowired
private FltPlanQueryRepository fltPlanQueryRepository;
@Autowired
private CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository;
@Autowired
private CtrCntrlQueryRepository query;
@Autowired
private MainStatisticsService mainStatisticsService;
@Autowired
private FltPlanArcrftRepository fltPlanArcrftRepository;
@Autowired
private FltPlanBasRepository fltPlanBasRepository;
@Autowired
private JwtTokenUtil token;
/**
* 일별 비행 통계
* 일별 비행 통계
* @param rq
* @return
*/
public List<MainDashStcsModel> mainDashStcsDay(String yyyymm){
List<MainDashStcsModel> resultList = query.mainDashStcsDay(yyyymm);
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
String serviceType = "";
String userAuthByToken = token.getUserAuthByToken();
String cptAuthCodeByToken = token.getCptAuthCodeByToken();
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){
serviceType = cptAuthCodeByToken;
}
List<MainDashStcsModel> resultList = query.mainDashStcsDay(yyyymm, serviceType);
return resultList;
}
@ -84,8 +77,15 @@ public class MainDashService {
*/
public List<MainDashStcsModel> mainDashStcsArea(String yyyymm){
List<MainDashStcsModel> resultList = query.mainDashStcsArea(yyyymm);
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
String serviceType = "";
String userAuthByToken = token.getUserAuthByToken();
String cptAuthCodeByToken = token.getCptAuthCodeByToken();
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){
serviceType = cptAuthCodeByToken;
}
List<MainDashStcsModel> resultList = query.mainDashStcsArea(yyyymm, serviceType);
return resultList;
}
@ -158,17 +158,27 @@ public class MainDashService {
public Map<String, String> mainDashDronFlightStcs() throws Exception{
String cptAuth = token.getCptAuthCodeByToken();
cptAuth = "KAC"; // 임시 테스트용으로 KAC 권한 부여
String cptAuth = "";
if(cptAuth == null) {
// cptAuth = "KAC"; // 임시 테스트용으로 KAC 권한 부여
log.error("cptAuth가 부여되지 않은 계정입니다");
throw new Exception();
// if(cptAuth == null) {
//
// log.error("cptAuth가 부여되지 않은 계정입니다");
// throw new Exception();
//
// }
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
String userAuthByToken = token.getUserAuthByToken();
String cptAuthCodeByToken = token.getCptAuthCodeByToken();
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){
cptAuth = cptAuthCodeByToken;
} else if(cptAuthCodeByToken.isEmpty()){
throw new CustomException(ErrorCode.AUTH_NAUTHORIZED, "cptAuthCode 권한이 없음.");
}
Map<String, String> resultList = new HashMap<>();
resultList = fltPlanQueryRepository.getFlightDronStcs(cptAuth);
@ -284,16 +294,23 @@ public class MainDashService {
public List<MainDashPlanNumStcsModel> currentFlightPlan(String groupId){
public List<MainDashPlanNumStcsModel> currentFlightPlan(String serviceType){
boolean authCheck = mainStatisticsService.authCheck(groupId);
// boolean authCheck = mainStatisticsService.authCheck(groupId);
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
String userAuthByToken = token.getUserAuthByToken();
String cptAuthCodeByToken = token.getCptAuthCodeByToken();
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){
serviceType = cptAuthCodeByToken;
}
String[] dateCate = {"beforeYesterday", "yesterday", "today", "tomorrow"}; // 2일전, 전일, 금일, 명일
List<MainDashPlanNumStcsModel> result = new ArrayList<>();
for(String cate : dateCate){
List<FltPlanBas> fltPlanBas = fltPlanQueryRepository.currentFlightStcs(groupId, authCheck, cate);
List<FltPlanBas> fltPlanBas = fltPlanQueryRepository.currentFlightStcs(serviceType, cate);
int plan = fltPlanBas.size();
int aprvnCount = (int)fltPlanBas.stream().filter(value -> value.getAprvlYn().equals("Y")).count();
@ -331,16 +348,22 @@ public class MainDashService {
public List<MainDashWarnNumStcsModel> currentFlightWarn(String groupId){
boolean authCheck = mainStatisticsService.authCheck(groupId);
public List<MainDashWarnNumStcsModel> currentFlightWarn(String serviceType){
// boolean authCheck = mainStatisticsService.authCheck(groupId);
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
String userAuthByToken = token.getUserAuthByToken();
String cptAuthCodeByToken = token.getCptAuthCodeByToken();
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){
serviceType = cptAuthCodeByToken;
}
String[] dateCate = {"beforeYesterday", "yesterday", "today", "tomorrow"}; // 2일전, 전일, 금일, 명일
List<MainDashWarnNumStcsModel> result = new ArrayList<>();
for(String cate : dateCate){
List<CtrCntrlWarnLog> cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(groupId, authCheck, cate);
List<CtrCntrlWarnLog> cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(serviceType, cate);
int count = cntrlWarnLogs.size(); //
@ -380,6 +403,15 @@ public class MainDashService {
}
public List<MainDashFlightNumStcsModel> dailyFlightNumOfStcs(){
// SUPER 권한일 경우와 KAC의 기관코드일 경우 전체적으로 모니터링 가능해야한다. 그외는 자신의 기관에 해당하는 데이터 볼 수 있어야 한다.
String userAuthByToken = token.getUserAuthByToken();
String cptAuthCodeByToken = token.getCptAuthCodeByToken();
String serviceType = "";
if(!"SUPER".equals(userAuthByToken) && !"KAC".equals(cptAuthCodeByToken)){
serviceType = cptAuthCodeByToken;
}
// 1. 전일 , 금일, 명일(내일)
Instant yesterdayStart = Instant.now().minus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Instant yesterdayEnd = Instant.now().truncatedTo(ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
@ -389,31 +421,47 @@ public class MainDashService {
Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
// 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일)
int yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd);
int todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd);
int tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd);
int yesterdayCount = 0;
int todayCount = 0;
int tomorrowCount = 0;
if(serviceType != null && !serviceType.isEmpty()){
yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", yesterdayStart, yesterdayEnd, serviceType);
todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", todayStart, todayEnd, serviceType);
tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", tomorrowStart, tomorrowEnd, serviceType);
} else {
yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd);
todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd);
tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd);
}
// int yesterdayCount = serviceType != null && !serviceType.isEmpty()
// ? fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", yesterdayStart, yesterdayEnd, serviceType);
// : fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd)
// int todayCount = serviceType != null && !serviceType.isEmpty()
// ? fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", todayStart, todayEnd, serviceType);
// : fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd)
// int tomorrowCount = serviceType != null && !serviceType.isEmpty()
// ? fltPlanBasRepository.countByAprvlYnAndAprvlDtBetweenAndServiceType("Y", tomorrowStart, tomorrowEnd, serviceType);
// : fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd)
// 3. 비행 완료 항목 : 실제 비행이 완료된 건수
int yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size();
int todayCompleteCount = query.completeFlight(todayStart,todayEnd).size();
int tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size();
int yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd,serviceType).size();
int todayCompleteCount = query.completeFlight(todayStart,todayEnd,serviceType).size();
int tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd,serviceType).size();
// 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수
int yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size();
int todayNotFlight = query.notFlight(todayStart, todayEnd).size();
int tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size();
int yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd, serviceType).size();
int todayNotFlight = query.notFlight(todayStart, todayEnd, serviceType).size();
int tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd, serviceType).size();
// 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용
// ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용
// 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용
// 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용
int yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size();
int yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS), serviceType).size();
double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0;
double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0;
double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0;
List<MainDashFlightNumStcsModel> result = new ArrayList<>();
result.add(createModel("yesterday", yesterdayCount,yesterdayCompleteCount,yesterdayNotFlight,yesterdayNotePercent));
result.add(createModel("today", todayCount,todayCompleteCount,todayNotFlight,todayNotePercent));

119
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -9,7 +9,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import com.palnet.biz.jpa.entity.*;
import com.querydsl.core.Tuple;
import org.apache.commons.lang3.StringUtils;
@ -1522,26 +1521,33 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
* 대시보드 통계(지역별)
*/
public List<MainDashStcsModel> mainDashStcsArea(String yyyymm){
public List<MainDashStcsModel> mainDashStcsArea(String yyyymm, String serviceType){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlHstryArea area = QCtrCntrlHstryArea.ctrCntrlHstryArea;
QFltPlanBas fBas = QFltPlanBas.fltPlanBas;
QFltPlanCtrCntrlRel rel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, bas.cntrlStDt
, ConstantImpl.create("%Y-%m"));
BooleanBuilder builder = new BooleanBuilder();
builder.and(area.area1.isNotNull());
builder.and(formattedDate.eq(yyyymm));
if(!serviceType.isEmpty()) builder.and(fBas.serviceType.eq(serviceType));
List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class ,
area.area1.as("typeCd"),
area.count().as("count")
List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class,
area.area1.as("typeCd"),
area.count().as("count")
))
.from(bas)
.leftJoin(area)
.on(bas.cntrlId.eq(area.cntrlId))
.on(area.actnType.eq("99"))
.where(area.area1.isNotNull())
.where(formattedDate.eq(yyyymm))
.on(bas.cntrlId.eq(area.cntrlId).and(area.actnType.eq("99")))
.leftJoin(rel).on(bas.cntrlId.eq(rel.cntrlId))
.leftJoin(fBas).on(rel.planSno.eq(fBas.planSno))
.where(builder)
.groupBy(area.area1)
.orderBy(area.count().desc())
.limit(5)
@ -1556,8 +1562,10 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
* 대시보드 통계(일자별)
*/
public List<MainDashStcsModel> mainDashStcsDay(String yyyymm){
public List<MainDashStcsModel> mainDashStcsDay(String yyyymm, String serviceType){
QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
QFltPlanBas fBas = QFltPlanBas.fltPlanBas;
QFltPlanCtrCntrlRel rel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
@ -1570,13 +1578,21 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
, ConstantImpl.create("%d"));
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.statusCd.eq("99"));
builder.and(formattedDate.eq(yyyymm));
if(!serviceType.isEmpty()){
builder.and(fBas.serviceType.eq(serviceType));
}
List<MainDashStcsModel> result = query.select(Projections.bean(MainDashStcsModel.class ,
formattedDate2.as("typeCd"),
bas.count().as("count")
))
.from(bas)
.where(bas.statusCd.eq("99"))
.where(formattedDate.eq(yyyymm))
.leftJoin(rel).on(bas.cntrlId.eq(rel.cntrlId))
.leftJoin(fBas).on(rel.planSno.eq(fBas.planSno))
.where(builder)
.groupBy(formattedDate2)
.fetch();
return result;
@ -2644,41 +2660,52 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
}
public List<Tuple> completeFlight(Instant start, Instant end) {
// Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다.
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
public List<Tuple> completeFlight(Instant start, Instant end, String serviceType) {
// Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다.
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(fpb.aprvlYn.eq("Y"));
builder.and(fpccr.planSno.isNotNull());
builder.and(ccb.statusCd.eq("99"));
builder.and(ccb.cntrlEndDt.between(start, end));
if (serviceType != null && !serviceType.isEmpty()) builder.and(fpb.serviceType.eq(serviceType));
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
ccb.statusCd,
ccb.cntrlStDt,
ccb.cntrlEndDt
)
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(builder)
.groupBy(fpccr.planSno)
.fetch();
}
public List<Tuple> notFlight(Instant start, Instant end, String serviceType) {
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
ccb.statusCd,
ccb.cntrlStDt,
ccb.cntrlEndDt
)
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(
fpb.aprvlYn.eq("Y"),
fpccr.planSno.isNotNull(),
ccb.statusCd.eq("99"),
ccb.cntrlEndDt.between(start,end)
)
.groupBy(fpccr.planSno)
.fetch();
}
public List<Tuple> notFlight(Instant start, Instant end){
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(fpb.aprvlYn.eq("Y"));
builder.and(fpccr.planSno.isNull());
builder.and(ccb.statusCd.isNull());
builder.and(ccb.cntrlId.isNull());
builder.and(fpb.aprvlDt.between(start, end));
if (serviceType != null && !serviceType.isEmpty()) builder.and(fpb.serviceType.eq(serviceType));
return query
.select(
fpb.planSno,
@ -2691,13 +2718,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
.from(fpb)
.leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno))
.leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId))
.where(
fpb.aprvlYn.eq("Y"),
fpccr.planSno.isNull(),
ccb.statusCd.isNull(),
ccb.cntrlId.isNull(),
fpb.aprvlDt.between(start, end)
)
.where(builder)
.fetch();
}

10
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java

@ -284,12 +284,12 @@ public class CtrCntrlWarnLogQueryRepository {
return result;
}
public List<CtrCntrlWarnLog> currentStcs(String groupId, boolean authCheck, String cate){
public List<CtrCntrlWarnLog> currentStcs(String groupId, String cate){
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QCtrCntrlWarnLog qCtrCntrlWarnLog = QCtrCntrlWarnLog.ctrCntrlWarnLog;
BooleanBuilder builder = getCurrentBooleanBuilder(groupId, authCheck, cate, qFltPlanBas, qCtrCntrlWarnLog);
BooleanBuilder builder = getCurrentBooleanBuilder(groupId, cate, qFltPlanBas, qCtrCntrlWarnLog);
List<CtrCntrlWarnLog> stcsValues = query
.select(
@ -310,11 +310,11 @@ public class CtrCntrlWarnLogQueryRepository {
return stcsValues;
}
private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){
private BooleanBuilder getCurrentBooleanBuilder(String serviceType, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){
BooleanBuilder builder = new BooleanBuilder();
if(groupId != null && !(groupId.equals("")))builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
if(serviceType != null && !serviceType.isEmpty())builder.and(qFltPlanBas.serviceType.eq(serviceType));
// if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
String dateFormat = "%Y-%m-%d";
BooleanExpression dateExpression = null;

7
pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java

@ -19,11 +19,12 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
List<FltPlanBas> findBySchFltStDtLessThanEqualAndSchFltEndDtGreaterThanEqualAndAprvlYnAndDelYn(Instant schFltEndDt, Instant schFltStDt, String aprvlYn, String delYn);
@Query("select f from FltPlanBas f " +
@Query(value = "select f from FltPlanBas f " +
"where ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltEndDt)"
+ "or (SCH_FLT_ST_DT >= :schFltStDt and (SCH_FLT_ST_DT <= :schFltEndDt and SCH_FLT_END_DT >= :schFltEndDt ))"
+ "or ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltStDt) and SCH_FLT_END_DT <= :schFltEndDt)"
+ "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'")
+ "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'"
, nativeQuery = true)
List<FltPlanBas> findByStartEndDate(@Param("schFltStDt") Date schFltStDt, @Param("schFltEndDt") Date schFltEndDt);
@ -57,4 +58,6 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
List<FltPlanBas> findApprovedFlightPlansByApprovalDate(Instant startDate, Instant endDate);
int countByAprvlYnAndAprvlDtBetween(String aprvlYn, Instant startDate, Instant endDate);
int countByAprvlYnAndAprvlDtBetweenAndServiceType(String aprvlYn, Instant startDate, Instant endDate, String serviceType);
}

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

@ -1848,15 +1848,15 @@ public class FltPlanQueryRepository {
/**
* 일일 비행데이터
* @param groupId
* @param serviceType
* @param authCheck
* @param cate
* @return
*/
public List<FltPlanBas> currentFlightStcs(String groupId, boolean authCheck, String cate){
public List<FltPlanBas> currentFlightStcs(String serviceType, String cate){
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas;
BooleanBuilder builder = getCurrentBooleanBuilder(groupId, authCheck, cate, qFltPlanBas);
BooleanBuilder builder = getCurrentBooleanBuilder(serviceType, cate, qFltPlanBas);
List<FltPlanBas> stcsValues = query
.select(
@ -1873,11 +1873,10 @@ public class FltPlanQueryRepository {
return stcsValues;
}
private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas){
private BooleanBuilder getCurrentBooleanBuilder(String serviceType, String cate, QFltPlanBas qFltPlanBas){
BooleanBuilder builder = new BooleanBuilder();
if(groupId != null && !(groupId.equals("")))builder.and(qFltPlanBas.groupId.eq(groupId));
if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken()));
if (serviceType != null && !serviceType.isEmpty()) builder.and(qFltPlanBas.serviceType.eq(serviceType));
BooleanExpression dateExpression = null;
@ -1991,15 +1990,14 @@ public class FltPlanQueryRepository {
QComIdntfBas cib = QComIdntfBas.comIdntfBas;
QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas;
// QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas;
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
if(!cptAuth.equals("KAC")) {
builder.and(pgb.groupNm.eq("cptAuth"));
}
if(!cptAuth.isEmpty()) builder.and(fpb.serviceType.eq(cptAuth));
Instant now = Instant.now();
ZoneId databaseTimeZone = ZoneId.of("Asia/Seoul");
@ -2025,7 +2023,7 @@ public class FltPlanQueryRepository {
)
.from(fpa)
.leftJoin(fpb).on(fpb.planSno.eq(fpa.planSno))
.leftJoin(pgb).on(pgb.groupId.eq(fpb.groupId))
// .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))

1
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java

@ -165,6 +165,7 @@ public class PtyCstmrQueryRepository {
model.setCstmrSno(entity.getCstmrSno());
model.setCstmrStatusCd(entity.getCstmrStatusCd());
model.setUserPswd(entity.getUserPswd());
model.setCptAuthCode(entity.getCptAuthCode());
if (pcgEntityList != null && !pcgEntityList.isEmpty()) {
List<JwtGroupModel> groupModelList = new ArrayList<>();
for (PtyCstmrGroup pcgEntity : pcgEntityList) {

3
pav-server/src/main/java/com/palnet/comn/code/ErrorCode.java

@ -13,7 +13,8 @@ public enum ErrorCode {
PLAN_DATA_DUPLICATE("FT500", "이미 등록된 비행계획서의 비행구역과 비행시간이 일치합니다.\n비행시간 또는 비행구역을 수정하여 주십시오."),
ARCRFT_DATA_DUPLICATE("FT501", "해당 기체는 다른 비행계획서에서 이미 등록된 기체입니다.\n비행시간 또는 기체 정보를 확인하여 주십시오."),
PLAN_LAANC_NOT_VALID("FT502", "LAANC를 통과하지 못한 비행계획서입니다."),
EXTERNAL_API_ERROR("EA500", "외부서버 호출에 실패하였습니다.");
EXTERNAL_API_ERROR("EA500", "외부서버 호출에 실패하였습니다."),
AUTH_NAUTHORIZED("AU001", "권한이 없습니다.");

Loading…
Cancel
Save