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 8b867e0b..6728d2a0 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 @@ -19,6 +19,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.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; @@ -303,17 +304,35 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping(value = "/dron-flight/list/") + @ApiOperation(value = "드론 별 비행운항 목록") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + public ResponseEntity dronFlightList(@RequestParam String groupId){ + + List result = null; + + try { + result = service.mainDashDronFlightList(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>(result)); + } + @GetMapping("/current/flight-plan") - @ApiOperation(value = "김포공항, 비정상상황 비행 통계") + @ApiOperation(value = "일일 비행통계") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @ApiImplicitParams({ - @ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), - @ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class) + @ApiImplicitParam(name = "groupId",value = "그룹아이디", dataTypeClass = String.class) }) public ResponseEntity currentFlightPlan(@RequestParam(required = false) String groupId){ - log.warn("groupId => {}", groupId); + List result = new ArrayList<>(); + try { result = service.currentFlightPlan(groupId); } catch (Exception e){ @@ -322,11 +341,7 @@ public class MainDashController { .body(new ErrorResponse("Server Error", "-1")); } - - return ResponseEntity.ok().body(new SuccessResponse>(result)); } - - } 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 new file mode 100644 index 00000000..62020b19 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java @@ -0,0 +1,24 @@ +package com.palnet.biz.api.main.dash.model; + +import java.time.Instant; + +import lombok.Data; + +@Data +public class MainDashFlightListModel { + + private String groupNm; + + private String memberName; + + private String idntfNum; + + private Instant schFltStDt; + + private Instant schFltEndDt; + + private Object totalFlightTime; + + private String status; + +} 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 cc354f6e..40fe3f4f 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 @@ -3,6 +3,8 @@ package com.palnet.biz.api.main.dash.service; import java.util.*; import java.util.stream.Collectors; +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.api.main.dash.model.MainCurrentStcsModel; import com.palnet.biz.api.main.statistics.service.MainStatisticsService; @@ -17,9 +19,11 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +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.jpa.repository.ctr.CtrCntrlQueryRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository; import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; @Service @@ -43,7 +47,11 @@ public class MainDashService { @Autowired private MainStatisticsService mainStatisticsService; - + @Autowired + private FltPlanArcrftRepository fltPlanArcrftRepository; + + @Autowired + private JwtTokenUtil token; /** @@ -116,6 +124,31 @@ public class MainDashService { return resultList; } + public List mainDashDronFlightList(String groupId){ + + String userAuth = token.getUserAuthByToken(); + List userGroupList = token.getGroupAuthByToken(); + + + log.info(">>>>>>>>> groupList {} " , userAuth); + + BasGroupModel myFirstGroup = new BasGroupModel(); + + List resultList = new ArrayList(); + + if(userAuth.equals("SUPER")) { + + resultList = fltPlanQueryRepository.getFlightDronList("KAC", groupId); + + }else { + + myFirstGroup = ptyGroupQueryRepository.myFirstGroup(userGroupList); + + resultList = fltPlanQueryRepository.getFlightDronList(myFirstGroup.getGroupId(), "all"); + } + + return resultList; + } /** * 김포공항, 비행승인 통계 * @param yyyymm @@ -230,7 +263,7 @@ public class MainDashService { boolean authCheck = mainStatisticsService.authCheck(groupId); - String[] dateCate = {"-2", "-1", "0", "1"}; + String[] dateCate = {"-2", "-1", "0", "1"}; // 2일전, 전일, 금일, 명일 List result = new ArrayList<>(); 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 135849fc..64911f70 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 @@ -26,6 +26,7 @@ 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; import com.palnet.biz.jpa.entity.FltPlanBas; @@ -54,11 +55,18 @@ import com.palnet.comn.utils.InstantUtils; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.ConstantImpl; +import com.querydsl.core.types.Expression; import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.CaseBuilder; +import com.querydsl.core.types.dsl.ComparableExpressionBase; +import com.querydsl.core.types.dsl.DateTemplate; +import com.querydsl.core.types.dsl.Expressions; +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; @@ -1851,8 +1859,6 @@ public class FltPlanQueryRepository { BooleanBuilder builder = getCurrentBooleanBuilder(groupId, authCheck, cate, qFltPlanBas); - - List stcsValues = query .select( Projections.bean( @@ -1873,13 +1879,10 @@ public class FltPlanQueryRepository { 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})", qFltPlanBas.createDt, "%Y-%m-%d") .eq(LocalDate.now().minusDays(2).toString()); @@ -1915,4 +1918,59 @@ public class FltPlanQueryRepository { } + + public List getFlightDronList(String orderBy, 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; + + Expression groupOrder = new CaseBuilder() + .when(pgb.groupNm.eq(orderBy)).then(0) + .otherwise(1); + + BooleanBuilder builder = new BooleanBuilder(); + + if(!groupId.equals("all")) { + builder.and(pgb.groupId.eq(groupId)); + } + Instant now = Instant.now(); + + List result = query + .select(Projections.bean(MainDashFlightListModel.class, + pgb.groupNm, + fpb.memberName, + fpa.idntfNum, + ccb.cntrlStDt, + ccb.cntrlEndDt, + Expressions.stringTemplate( + "CONCAT(SEC_TO_TIME(TIME_TO_SEC(TIMEDIFF({0}, {1}))))", + ccb.cntrlEndDt, + ccb.cntrlStDt + ).as("totalFlightTime"), + new CaseBuilder() + .when(ccb.statusCd.eq("01")).then("비행 중") + .when(ccb.statusCd.eq("99")).then("비행 완료") + .otherwise("비행 대기 중").as("status") + )) + .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, now.plus(Duration.ofDays(1)))) + .and(fpb.schFltEndDt.between(now, now.plus(Duration.ofDays(1)))) + .and(fpb.planSno.isNotNull()) + ) + .orderBy(((ComparableExpressionBase) groupOrder).desc(), cib.createDt.asc()) + .fetch(); + + return result; + } } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java index c2f450cc..82e1000d 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java @@ -11,6 +11,7 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; +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.BasGroupAprvModel; import com.palnet.biz.api.bas.group.model.BasGroupAprvRqModel; @@ -241,6 +242,38 @@ public class PtyGroupQueryRepository{ } + /** + * 나의 그룹 - 내가 생성했거나 , 가입한 그룹 중 그룹의 생성일자가 가장 빠른 그룹 + * @param cstmrSno + * @return + */ + public BasGroupModel myFirstGroup(List groupList){ + QPtyGroupBas bas = QPtyGroupBas.ptyGroupBas; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.useYn.eq("Y")); + + for(JwtGroupModel group : groupList) { + builder.or(bas.groupId.in(group.getGroupId())); + } + + BasGroupModel result = + query.select(Projections.bean(BasGroupModel.class , + bas.groupId, + bas.groupNm, + bas.groupTypeCd, + bas.trmnlId, + bas.updateDt, + bas.createDt + )).from(bas) + .where(builder) + .orderBy(bas.createDt.asc()) + .fetchFirst(); + + return result; + + } + /** * 참여할 그룹 목록 * @param cstmrSno