diff --git a/src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java b/src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java index 14e7ccb..b400b0c 100644 --- a/src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java +++ b/src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java @@ -1,6 +1,9 @@ package com.palnet.biz.api.anls.smlt.service; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -9,14 +12,23 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; import com.palnet.biz.api.anls.smlt.model.AnlsSmltDetailModel; import com.palnet.biz.api.anls.smlt.model.AnlsSmltStcsModel; +import com.palnet.biz.jpa.entity.ComIdntfBas; import com.palnet.biz.jpa.entity.CtrCntrlHstryArea; +import com.palnet.biz.jpa.entity.FltPlanBas; +import com.palnet.biz.jpa.entity.FltPlanPilot; +import com.palnet.biz.jpa.repository.com.ComIdntBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanPilotRepository; +import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.NumberUtils; @Service @@ -30,6 +42,18 @@ public class AnlsSmltService { @Autowired private CtrCntrlQueryRepository query; + @Autowired + private ComIdntBasRepository comIdntBasRepository; + + @Autowired + private FltPlanBasRepository fltPlanBasRepository; + + @Autowired + private FltPlanPilotRepository fltPlanPilotRepository; + + @Autowired + private JwtTokenUtil jwtTokenUtil; + /** * 비행 현황 목록 @@ -37,9 +61,63 @@ public class AnlsSmltService { * @return */ public List list(AnlsHstryRqModel rq){ - - List resultList = query.listCntrlBas(rq); - + String appAuth = jwtTokenUtil.getUserAuthByToken(); + List groupAuth = jwtTokenUtil.getGroupAuthByToken(); + int cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); + List groupAdminList = new ArrayList<>(); + for(JwtGroupModel list : groupAuth) { + if(list.getGroupAuthCd().equals("MASTER") || list.getGroupAuthCd().equals("LEADER")) { + groupAdminList.add(list); + } + } + List resultList = new ArrayList<>(); + + if(appAuth.equals("SUPER")||appAuth.equals("ADMIN")) { // App 권한이 수퍼 / 어드민일 경우 목록 전부 표출 + resultList = query.listCntrlBas(rq); + } else if(groupAdminList.size()>0) { // App 권한은 user이지만 group 권한이 LEADER / MASTER인 그룹이 있는 경우 해당 그룹의 비행 이력 목록 표출 + for (JwtGroupModel list : groupAdminList) { + List result = query.cntrlBasAuthList(rq, list.getGroupId()); + if (result.size() > 0) { + resultList.addAll(result); + } + } + } + + if (resultList == null || resultList.size() == 0) { /* App 권한이 유저이면서 group 권한도 모두 NORMAL인 ID인 경우 본인이 생성한 + 기체만 조회 */ + List idntfList = comIdntBasRepository.findIdntfNumber(cstmrSno); + if (idntfList.size() > 0) { + for (ComIdntfBas list : idntfList) { + List result = query.cntrlBasNormalList(rq, list.getIdntfNum()); + if (result.size() > 0) { + resultList.addAll(result); + } + } + } + List basResult = fltPlanBasRepository.findByPlanSno(cstmrSno); /* App 권한이 유저이면서 group 권한도 모두 + NORMAL인 ID인 경우 cstmrSno로 비행계획서 조회 */ + for (FltPlanBas list : basResult) { + resultList.addAll(query.cntrlBasNormalPlanList(rq, list.getPlanSno())); + } + List pilotResult = fltPlanPilotRepository.findByPlanSno(cstmrSno); /* App 권한이 유저이면서 group 권한도 + 모두 NORMAL인 ID인 경우 cstmrSno로 조종사 조회 */ + + for (FltPlanPilot list : pilotResult) { + resultList.addAll(query.cntrlBasNormalPlanList(rq, list.getPlanSno())); + } + + Comparator comparator = new Comparator() { + @Override + public int compare(AnlsHstryModel o1, AnlsHstryModel o2) { + // TODO Auto-generated method stub + + return (int) DateUtils.diffSecond(o1.getCntrlStDt(), o2.getCntrlStDt()); + } + }; + + Collections.sort(resultList, comparator); + } + return resultList; } diff --git a/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java index da7c207..f705bb7 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java @@ -21,4 +21,8 @@ public interface ComIdntBasRepository extends JpaRepository @Query("select c from ComIdntfBas c " + "where c.arcrftSno = :arcrftSno " ) List findIdntfNum(@Param("arcrftSno") int arcrftSno); + + @Query("select c from ComIdntfBas c " + + "where c.cstmrSno = :cstmrSno ") + List findIdntfNumber(@Param("cstmrSno") int cstmrSno); } diff --git a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 461f10e..f71edd1 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -37,6 +37,7 @@ import com.palnet.biz.jpa.entity.QComIdntfBas; import com.palnet.biz.jpa.entity.QCtrCntrlBas; import com.palnet.biz.jpa.entity.QCtrCntrlHstry; import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; +import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; import com.palnet.biz.jpa.entity.QPtyCstmrBas; import com.palnet.biz.jpa.entity.QPtyCstmrGroup; import com.palnet.biz.jpa.entity.QPtyGroupBas; @@ -73,6 +74,7 @@ public class CtrCntrlQueryRepository{ QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea; + BooleanBuilder builder = new BooleanBuilder(); builder.and(qCntrlBasEntity.statusCd.eq("99")); @@ -125,6 +127,101 @@ public class CtrCntrlQueryRepository{ .on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId)) .on(qCntrlHstryAreaEntity.actnType.eq("01")) .where(builder) + .orderBy(qCntrlBasEntity.cntrlStDt.desc()) + .fetch(); + + for(AnlsHstryModel model: queryList) { + String addr = ""; + + if(!StringUtils.isEmpty(model.getArea1())) { + addr = addr + " " + model.getArea1(); + } + + if(!StringUtils.isEmpty(model.getArea2())) { + addr = addr + " " + model.getArea2(); + } + + if(!StringUtils.isEmpty(model.getArea3())) { + addr = addr + " " + model.getArea3(); + } + + if(!StringUtils.isEmpty(model.getLandNm())) { + addr = addr + " " + model.getLandNm(); + } + + if(!StringUtils.isEmpty(model.getLandNum())) { + addr = addr + " " + model.getLandNum(); + } + model.setStArea(addr); + result.add(model); + } + + + + return result; + } + + public List cntrlBasAuthList(AnlsHstryRqModel rq, String groupId){ + + QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRelEntity = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + + BooleanBuilder builder = new BooleanBuilder(); + + builder.and(qCntrlBasEntity.statusCd.eq("99")); + log.debug("Params ===> " +rq.toString()); + Calendar end = Calendar.getInstance(); + end.setTime(DateUtils.stringToDate(rq.getEndDate())); + end.add(Calendar.DATE, 1); + Date endDate = end.getTime(); + builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate()))); + builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate)); + builder.and(qFltPlanCtrCntrlRelEntity.groupId.eq(groupId)); + if(!StringUtils.isEmpty(rq.getSearch1())) { + builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%")); + } + + ArrayList result = new ArrayList(); + + List queryList = query.select(Projections.bean(AnlsHstryModel.class , + qCntrlBasEntity.cntrlId, + qCntrlBasEntity.idntfNum, + qCntrlBasEntity.statusCd, + qCntrlBasEntity.objectTypeCd, + qCntrlBasEntity.flghtStDt, + qCntrlBasEntity.flghtEndDt, + qCntrlBasEntity.cntrlStDt, + qCntrlBasEntity.cntrlEndDt, + qCntrlBasEntity.ttlTime, + qCntrlBasEntity.ttlTimeType, + qCntrlBasEntity.ttlDstnc, + qCntrlBasEntity.ttlDstncType, + qCntrlBasEntity.avrgSpeed, + qCntrlBasEntity.avrgSpeedType, + qCntrlBasEntity.bttrCnsmptn, + qCntrlBasEntity.endTypeCd, + qCntrlBasEntity.createDt, + qCntrlBasEntity.updateDt, + qCntrlHstryAreaEntity.actnType, + qCntrlHstryAreaEntity.area1, + qCntrlHstryAreaEntity.area2, + qCntrlHstryAreaEntity.area3, + qCntrlHstryAreaEntity.areaNm, + qCntrlHstryAreaEntity.areaType, + qCntrlHstryAreaEntity.landNm, + qCntrlHstryAreaEntity.landNum, + qCntrlHstryAreaEntity.zipCd + + + )) + .from(qCntrlBasEntity) + .leftJoin(qCntrlHstryAreaEntity) + .on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId)) + .on(qCntrlHstryAreaEntity.actnType.eq("01")) + .leftJoin(qFltPlanCtrCntrlRelEntity) + .on(qCntrlBasEntity.cntrlId.eq(qFltPlanCtrCntrlRelEntity.cntrlId)) + .where(builder) .orderBy(qCntrlBasEntity.cntrlStDt.asc()) .fetch(); @@ -158,7 +255,194 @@ public class CtrCntrlQueryRepository{ return result; } +public List cntrlBasNormalList(AnlsHstryRqModel rq, String idntfNum){ + + QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea; + + BooleanBuilder builder = new BooleanBuilder(); + + log.debug("Params ===> " +rq.toString()); + Calendar end = Calendar.getInstance(); + end.setTime(DateUtils.stringToDate(rq.getEndDate())); + end.add(Calendar.DATE, 1); + Date endDate = end.getTime(); + builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate()))); + builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate)); + + builder.and(qCntrlBasEntity.statusCd.eq("99")); + builder.and(qCntrlBasEntity.idntfNum.eq(idntfNum)); + if(!StringUtils.isEmpty(rq.getSearch1())) { + builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%")); + } + + ArrayList result = new ArrayList(); + + List queryList = query.select(Projections.bean(AnlsHstryModel.class , + qCntrlBasEntity.cntrlId, + qCntrlBasEntity.idntfNum, + qCntrlBasEntity.statusCd, + qCntrlBasEntity.objectTypeCd, + qCntrlBasEntity.flghtStDt, + qCntrlBasEntity.flghtEndDt, + qCntrlBasEntity.cntrlStDt, + qCntrlBasEntity.cntrlEndDt, + qCntrlBasEntity.ttlTime, + qCntrlBasEntity.ttlTimeType, + qCntrlBasEntity.ttlDstnc, + qCntrlBasEntity.ttlDstncType, + qCntrlBasEntity.avrgSpeed, + qCntrlBasEntity.avrgSpeedType, + qCntrlBasEntity.bttrCnsmptn, + qCntrlBasEntity.endTypeCd, + qCntrlBasEntity.createDt, + qCntrlBasEntity.updateDt, + qCntrlHstryAreaEntity.actnType, + qCntrlHstryAreaEntity.area1, + qCntrlHstryAreaEntity.area2, + qCntrlHstryAreaEntity.area3, + qCntrlHstryAreaEntity.areaNm, + qCntrlHstryAreaEntity.areaType, + qCntrlHstryAreaEntity.landNm, + qCntrlHstryAreaEntity.landNum, + qCntrlHstryAreaEntity.zipCd + + + )) + .from(qCntrlBasEntity) + .leftJoin(qCntrlHstryAreaEntity) + .on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId)) + .on(qCntrlHstryAreaEntity.actnType.eq("01")) + .where(builder) + .orderBy(qCntrlBasEntity.cntrlStDt.asc()) + .fetch(); + + for(AnlsHstryModel model: queryList) { + String addr = ""; + + if(!StringUtils.isEmpty(model.getArea1())) { + addr = addr + " " + model.getArea1(); + } + + if(!StringUtils.isEmpty(model.getArea2())) { + addr = addr + " " + model.getArea2(); + } + + if(!StringUtils.isEmpty(model.getArea3())) { + addr = addr + " " + model.getArea3(); + } + + if(!StringUtils.isEmpty(model.getLandNm())) { + addr = addr + " " + model.getLandNm(); + } + + if(!StringUtils.isEmpty(model.getLandNum())) { + addr = addr + " " + model.getLandNum(); + } + model.setStArea(addr); + result.add(model); + } + + + return result; + } + + public List cntrlBasNormalPlanList(AnlsHstryRqModel rq, int planSno){ + + QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRelEntity = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + + BooleanBuilder builder = new BooleanBuilder(); + + log.debug("Params ===> " +rq.toString()); + Calendar end = Calendar.getInstance(); + end.setTime(DateUtils.stringToDate(rq.getEndDate())); + end.add(Calendar.DATE, 1); + Date endDate = end.getTime(); + builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate()))); + builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate)); + + builder.and(qFltPlanCtrCntrlRelEntity.planSno.eq(planSno)); + builder.and(qCntrlBasEntity.statusCd.eq("99")); + if(!StringUtils.isEmpty(rq.getSearch1())) { + builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%")); + } + + ArrayList result = new ArrayList(); + + List queryList = query.select(Projections.bean(AnlsHstryModel.class , + qCntrlBasEntity.cntrlId, + qCntrlBasEntity.idntfNum, + qCntrlBasEntity.statusCd, + qCntrlBasEntity.objectTypeCd, + qCntrlBasEntity.flghtStDt, + qCntrlBasEntity.flghtEndDt, + qCntrlBasEntity.cntrlStDt, + qCntrlBasEntity.cntrlEndDt, + qCntrlBasEntity.ttlTime, + qCntrlBasEntity.ttlTimeType, + qCntrlBasEntity.ttlDstnc, + qCntrlBasEntity.ttlDstncType, + qCntrlBasEntity.avrgSpeed, + qCntrlBasEntity.avrgSpeedType, + qCntrlBasEntity.bttrCnsmptn, + qCntrlBasEntity.endTypeCd, + qCntrlBasEntity.createDt, + qCntrlBasEntity.updateDt, + qCntrlHstryAreaEntity.actnType, + qCntrlHstryAreaEntity.area1, + qCntrlHstryAreaEntity.area2, + qCntrlHstryAreaEntity.area3, + qCntrlHstryAreaEntity.areaNm, + qCntrlHstryAreaEntity.areaType, + qCntrlHstryAreaEntity.landNm, + qCntrlHstryAreaEntity.landNum, + qCntrlHstryAreaEntity.zipCd + + + )) + .from(qCntrlBasEntity) + .leftJoin(qCntrlHstryAreaEntity) + .on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId)) + .on(qCntrlHstryAreaEntity.actnType.eq("01")) + .leftJoin(qFltPlanCtrCntrlRelEntity) + .on(qCntrlBasEntity.cntrlId.eq(qFltPlanCtrCntrlRelEntity.cntrlId)) + .where(builder) + .orderBy(qCntrlBasEntity.cntrlStDt.asc()) + .fetch(); + + for(AnlsHstryModel model: queryList) { + String addr = ""; + + if(!StringUtils.isEmpty(model.getArea1())) { + addr = addr + " " + model.getArea1(); + } + + if(!StringUtils.isEmpty(model.getArea2())) { + addr = addr + " " + model.getArea2(); + } + + if(!StringUtils.isEmpty(model.getArea3())) { + addr = addr + " " + model.getArea3(); + } + + if(!StringUtils.isEmpty(model.getLandNm())) { + addr = addr + " " + model.getLandNm(); + } + + if(!StringUtils.isEmpty(model.getLandNum())) { + addr = addr + " " + model.getLandNum(); + } + model.setStArea(addr); + result.add(model); + } + + + + return result; + } @Cacheable(value = "cntrl-count") public long countCntrlBasRs(AnlsHstryGroupModel rq, int cstmrSno) { QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java index e7b9a9e..29a220a 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java @@ -38,5 +38,7 @@ public interface FltPlanBasRepository extends JpaRepository Optional findByPlanSnoAndDelYnNot(Integer planSno, String delYn); - + @Query("Select f from FltPlanBas f " + + "where f.cstmrSno = :cstmrSno " ) + List findByPlanSno(@Param("cstmrSno")int cstmrSno); } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java index 54eae8a..7e24846 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java @@ -1,12 +1,17 @@ package com.palnet.biz.jpa.repository.flt; -import com.palnet.biz.jpa.entity.FltPlanPilot; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; -import java.util.List; -import java.util.Optional; +import com.palnet.biz.jpa.entity.FltPlanPilot; public interface FltPlanPilotRepository extends JpaRepository { List findByPlanSnoOrderByPlanPilotSnoAsc(Integer planSno); - + + @Query("select f from FltPlanPilot f " + + "where f.cstmrSno = :cstmrSno " ) + List findByPlanSno(@Param("cstmrSno") int cstmrSno); }