From 25b59937bd3b01807718a73351439f6288da958a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Mon, 13 Nov 2023 22:44:15 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=84=EC=A0=95=EC=83=81=EC=83=81=ED=99=A9?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=EA=B0=9C=EC=9E=85=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MainStatisticsController.java | 14 +-- .../service/MainStatisticsService.java | 18 ++-- .../ctr/CtrCntrlWarnLogQueryRepository.java | 87 +++++++++++++++---- 3 files changed, 89 insertions(+), 30 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java index 7665c9bf..b819c5df 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java @@ -102,7 +102,7 @@ public class MainStatisticsController { List result = null; try { - result = service.getWarnStaticStcs(); + result = service.getWarnStaticStcs(groupId); log.warn("result => {}", result); } catch (Exception e) { @@ -122,19 +122,19 @@ public class MainStatisticsController { @ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) }) - public ResponseEntity warnStcs(@RequestParam String cate, String date, @PathVariable String type){ - log.warn("cate => {}, date => {}, type => {}", cate, date, type); + public ResponseEntity warnStcs(FlightStcsRQ rq, @PathVariable String type){ + log.warn("rq => {}",rq); FlightStcsModel result = new FlightStcsModel(); try { String[] formatParam = null; - if(date == null) date = ""; - formatParam = service.paramCheck(date,type); + if(rq.getDate() == null) rq.setDate(""); + formatParam = service.paramCheck(rq.getDate(),type); - List graphData = service.warnStatics(cate, date, formatParam); - List topData = service.warnTopStatics(cate, date, formatParam); + List graphData = service.warnStatics(rq, formatParam); + List topData = service.warnTopStatics(rq, formatParam); result.setGraphData(graphData); result.setTopData(topData); 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 bdd7fdd4..11e26249 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 @@ -236,7 +236,9 @@ public class MainStatisticsService { * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 * @return */ - public List getWarnStaticStcs(){ + public List getWarnStaticStcs(String groupId){ + + boolean authCheck = authCheck(groupId); // TODO:: 비행경로이탈, 고도이탈, 충돌위험 임시코드 String[] cate = {"PLAN" ,"ALTITUDE", "CRASH"}; @@ -245,7 +247,7 @@ public class MainStatisticsService { List result = new ArrayList<>(); for(int i = 0; i < cate.length; i ++){ - FlightStcsValueModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i]); + FlightStcsValueModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i], authCheck, groupId); result.add(node); } @@ -263,9 +265,11 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List warnStatics(String cate, String date, String[] formatParam){ + public List warnStatics(FlightStcsRQ rq, String[] formatParam){ + + boolean authCheck = authCheck(rq.getGroupId()); - List resultList = ctrCntrlWarnLogQueryRepository.warnStcs(cate, date, formatParam); + List resultList = ctrCntrlWarnLogQueryRepository.warnStcs(rq.getCate(), rq.getDate(), rq.getGroupId(), authCheck, formatParam); for(FlightStcsValueModel node : resultList){ if(node.getName() == null || node.getName().equals("")) node.setName(" "); @@ -281,9 +285,11 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List warnTopStatics(String cate, String date, String[] formatParam){ + public List warnTopStatics(FlightStcsRQ rq, String[] formatParam){ + + boolean authCheck = authCheck(rq.getGroupId()); - List resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(cate, date, formatParam); + List resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(rq.getCate(), rq.getDate(), rq.getGroupId(), authCheck, formatParam); return resultList; } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java index 3e293620..c7280cb1 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java @@ -6,8 +6,11 @@ import java.util.List; import org.springframework.stereotype.Repository; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.jpa.entity.QCtrCntrlWarnLog; +import com.palnet.biz.jpa.entity.QFltPlanBas; +import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Projections; @@ -25,30 +28,40 @@ public class CtrCntrlWarnLogQueryRepository { private final JPAQueryFactory query; + private final JwtTokenUtil jwtTokenUtil; + /** * 비정상상황 고정 데이터, 카테고리별 집계[PLAN, ALTITUDE, CRASH] * @return */ - public FlightStcsValueModel getWarnStaticStcs(String cate){ - FlightStcsValueModel result = new FlightStcsValueModel(); + public FlightStcsValueModel getWarnStaticStcs(String cate, boolean authCheck, String groupId){ + FlightStcsValueModel result = new FlightStcsValueModel(); - QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QCtrCntrlWarnLog qCtrCntrlWarnLog = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); - builder.and(bas.warnType.eq(cate)); + builder.and(qCtrCntrlWarnLog.warnType.eq(cate)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List queryResult = query .select( Projections.bean(FlightStcsValueModel.class, - bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 - bas.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlWarnLog.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlWarnLog.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정 ) ) - .from(bas) + .from(qCtrCntrlWarnLog) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(qCtrCntrlWarnLog.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) - .groupBy(bas.idntfNum) - .orderBy(bas.cntrlId.countDistinct().desc()) + .groupBy(qCtrCntrlWarnLog.idntfNum) + .orderBy(qCtrCntrlWarnLog.cntrlId.countDistinct().desc()) .limit(1) .fetch(); @@ -57,9 +70,9 @@ public class CtrCntrlWarnLogQueryRepository { String idntfNum = result.getName(); - result.setYear(getWarnYear(idntfNum, cate)); - result.setMonth(getWarnMonth(idntfNum, cate)); - result.setDay(getWarnDay(idntfNum, cate)); + result.setYear(getWarnYear(idntfNum, cate, authCheck, groupId)); + result.setMonth(getWarnMonth(idntfNum, cate, authCheck, groupId)); + result.setDay(getWarnDay(idntfNum, cate, authCheck, groupId)); } else { @@ -76,13 +89,17 @@ public class CtrCntrlWarnLogQueryRepository { } - private String getWarnDay(String idntfNum, String cate){ + private String getWarnDay(String idntfNum, String cate, boolean authCheck, String groupId){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum)); builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.warnType.eq(cate)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -91,18 +108,26 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private String getWarnMonth(String idntfNum, String cate){ + private String getWarnMonth(String idntfNum, String cate, boolean authCheck, String groupId){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum)); builder.and(bas.warnType.eq(cate)); builder.and(bas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -111,18 +136,26 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } - private String getWarnYear(String idntfNum, String cate){ + private String getWarnYear(String idntfNum, String cate, boolean authCheck, String groupId){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.idntfNum.eq(idntfNum)); builder.and(bas.warnType.eq(cate)); builder.and(bas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); return query .select( @@ -131,6 +164,10 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .fetchOne(); } @@ -143,9 +180,11 @@ public class CtrCntrlWarnLogQueryRepository { * @param formatParam * @return */ - public List warnStcs(String cate, String date, String[] formatParam){ + public List warnStcs(String cate, String date, String groupId, boolean authCheck, String[] formatParam){ // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" @@ -160,6 +199,8 @@ public class CtrCntrlWarnLogQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.warnType.eq(cate)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -170,6 +211,10 @@ public class CtrCntrlWarnLogQueryRepository { ) ) .from(bas) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .where(builder) .groupBy(formattedDate2) .fetch(); @@ -193,9 +238,11 @@ public class CtrCntrlWarnLogQueryRepository { * @param formatParam * @return */ - public List warnTopStcs(String cate, String date, String[] formatParam){ + public List warnTopStcs(String cate, String date, String groupId, boolean authCheck, String[] formatParam){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; StringTemplate formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})" @@ -205,6 +252,8 @@ public class CtrCntrlWarnLogQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.warnType.eq(cate)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -215,6 +264,10 @@ public class CtrCntrlWarnLogQueryRepository { ) .from(bas) .where(builder) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(bas.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) .groupBy(bas.idntfNum) .orderBy(bas.cntrlId.countDistinct().desc()) .limit(5)