|
|
@ -1,58 +1,13 @@ |
|
|
|
package com.palnet.biz.jpa.repository.flt; |
|
|
|
package com.palnet.biz.jpa.repository.flt; |
|
|
|
|
|
|
|
|
|
|
|
import java.time.Duration; |
|
|
|
|
|
|
|
import java.time.Instant; |
|
|
|
|
|
|
|
import java.time.LocalDate; |
|
|
|
|
|
|
|
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 com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; |
|
|
|
|
|
|
|
import com.querydsl.core.types.dsl.*; |
|
|
|
|
|
|
|
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; |
|
|
|
|
|
|
|
import org.springframework.data.domain.Pageable; |
|
|
|
|
|
|
|
import org.springframework.stereotype.Repository; |
|
|
|
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
|
|
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; |
|
|
|
import com.palnet.biz.api.bas.flight.model.*; |
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq; |
|
|
|
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; |
|
|
|
|
|
|
|
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.main.dash.model.MainDashFlightListModel; |
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; |
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; |
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; |
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; |
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; |
|
|
|
import com.palnet.biz.jpa.entity.FltPlanBas; |
|
|
|
import com.palnet.biz.jpa.entity.*; |
|
|
|
import com.palnet.biz.jpa.entity.QComArcrftBas; |
|
|
|
import com.palnet.biz.jpa.entity.type.*; |
|
|
|
import com.palnet.biz.jpa.entity.QComFileBas; |
|
|
|
import com.palnet.biz.jpa.model.*; |
|
|
|
import com.palnet.biz.jpa.entity.QComIdntfBas; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QCtrCntrlBas; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanArcrft; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanArea; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanAreaCoord; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanBas; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanPilot; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QPtyCstmrDtl; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QPtyCstmrGroup; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.QPtyGroupBas; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.model.LaancAprvSearchDto; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanArcrftDto; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanAreaDto; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanDto; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanPilotDto; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanareaCoordDto; |
|
|
|
|
|
|
|
import com.palnet.comn.utils.DateUtils; |
|
|
|
import com.palnet.comn.utils.DateUtils; |
|
|
|
import com.palnet.comn.utils.InstantUtils; |
|
|
|
import com.palnet.comn.utils.InstantUtils; |
|
|
|
import com.querydsl.core.BooleanBuilder; |
|
|
|
import com.querydsl.core.BooleanBuilder; |
|
|
@ -62,17 +17,23 @@ import com.querydsl.core.types.ConstantImpl; |
|
|
|
import com.querydsl.core.types.Expression; |
|
|
|
import com.querydsl.core.types.Expression; |
|
|
|
import com.querydsl.core.types.ExpressionUtils; |
|
|
|
import com.querydsl.core.types.ExpressionUtils; |
|
|
|
import com.querydsl.core.types.Projections; |
|
|
|
import com.querydsl.core.types.Projections; |
|
|
|
import com.querydsl.core.types.dsl.CaseBuilder; |
|
|
|
import com.querydsl.core.types.dsl.*; |
|
|
|
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.JPAExpressions; |
|
|
|
import com.querydsl.jpa.impl.JPAQuery; |
|
|
|
import com.querydsl.jpa.impl.JPAQuery; |
|
|
|
import com.querydsl.jpa.impl.JPAQueryFactory; |
|
|
|
import com.querydsl.jpa.impl.JPAQueryFactory; |
|
|
|
|
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
|
|
import org.springframework.cache.annotation.Cacheable; |
|
|
|
|
|
|
|
import org.springframework.data.domain.Page; |
|
|
|
|
|
|
|
import org.springframework.data.domain.PageImpl; |
|
|
|
|
|
|
|
import org.springframework.data.domain.Pageable; |
|
|
|
|
|
|
|
import org.springframework.stereotype.Repository; |
|
|
|
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.time.*; |
|
|
|
|
|
|
|
import java.time.temporal.ChronoUnit; |
|
|
|
|
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@Slf4j |
|
|
|
@Repository |
|
|
|
@Repository |
|
|
@ -115,6 +76,7 @@ public class FltPlanQueryRepository { |
|
|
|
} |
|
|
|
} |
|
|
|
builder.and(bas.delYn.ne("Y")); |
|
|
|
builder.and(bas.delYn.ne("Y")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<BasFlightPlanModel> r = query |
|
|
|
List<BasFlightPlanModel> r = query |
|
|
|
.from(bas) |
|
|
|
.from(bas) |
|
|
|
.leftJoin(area) |
|
|
|
.leftJoin(area) |
|
|
@ -2060,4 +2022,175 @@ public class FltPlanQueryRepository { |
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 기체번호로 비행계획서 조회
|
|
|
|
|
|
|
|
public List<BasFlightPlanModel> getPlanByIdntfNum(String idntfNum) { |
|
|
|
|
|
|
|
QFltPlanBas bas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
QFltPlanArcrft arcrft = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
|
|
|
QFltPlanArea area = QFltPlanArea.fltPlanArea; |
|
|
|
|
|
|
|
QFltPlanAreaCoord coord = QFltPlanAreaCoord.fltPlanAreaCoord; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Instant fltNowDt = Instant.now(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<BasFlightPlanModel> rs = query.from(bas) |
|
|
|
|
|
|
|
.leftJoin(arcrft) |
|
|
|
|
|
|
|
.on(bas.planSno.eq(arcrft.planSno)) |
|
|
|
|
|
|
|
.leftJoin(area) |
|
|
|
|
|
|
|
.on(area.planSno.eq(area.planSno)) |
|
|
|
|
|
|
|
.where( |
|
|
|
|
|
|
|
arcrft.idntfNum.eq(idntfNum) |
|
|
|
|
|
|
|
.and(bas.aprvlYn.eq("Y")) |
|
|
|
|
|
|
|
.and(bas.schFltStDt.before(fltNowDt)) |
|
|
|
|
|
|
|
.and(bas.schFltEndDt.after(fltNowDt)) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
.orderBy(bas.createDt.desc()) |
|
|
|
|
|
|
|
.transform( |
|
|
|
|
|
|
|
GroupBy.groupBy(bas.planSno) |
|
|
|
|
|
|
|
.list(Projections.bean( |
|
|
|
|
|
|
|
BasFlightPlanModel.class, |
|
|
|
|
|
|
|
bas.planSno, |
|
|
|
|
|
|
|
bas.groupId, |
|
|
|
|
|
|
|
bas.cstmrSno, |
|
|
|
|
|
|
|
bas.memberName, |
|
|
|
|
|
|
|
bas.fltType.stringValue().as("fltType"), |
|
|
|
|
|
|
|
bas.email, |
|
|
|
|
|
|
|
bas.hpno, |
|
|
|
|
|
|
|
bas.clncd, |
|
|
|
|
|
|
|
bas.addr, |
|
|
|
|
|
|
|
bas.addrDtlCn, |
|
|
|
|
|
|
|
bas.zip, |
|
|
|
|
|
|
|
bas.schFltStDt, |
|
|
|
|
|
|
|
bas.schFltEndDt, |
|
|
|
|
|
|
|
bas.fltPurpose.stringValue().as("fltPurpose"), |
|
|
|
|
|
|
|
bas.aprvlYn, |
|
|
|
|
|
|
|
bas.delYn, |
|
|
|
|
|
|
|
bas.fileGroupNo, |
|
|
|
|
|
|
|
bas.createUserId, |
|
|
|
|
|
|
|
bas.createDt, |
|
|
|
|
|
|
|
bas.updateUserId, |
|
|
|
|
|
|
|
bas.updateDt, |
|
|
|
|
|
|
|
bas.corpRegYn, |
|
|
|
|
|
|
|
bas.serviceType, |
|
|
|
|
|
|
|
GroupBy.list(Projections.bean( |
|
|
|
|
|
|
|
BasFlightPlanAreaModel.class, |
|
|
|
|
|
|
|
area.planAreaSno, |
|
|
|
|
|
|
|
area.planSno, |
|
|
|
|
|
|
|
area.areaType, |
|
|
|
|
|
|
|
area.fltMethod.stringValue().as("fltMethod"), |
|
|
|
|
|
|
|
area.bufferZone, |
|
|
|
|
|
|
|
area.fltElev, |
|
|
|
|
|
|
|
area.createUserId, |
|
|
|
|
|
|
|
area.createDt, |
|
|
|
|
|
|
|
area.updateUserId, |
|
|
|
|
|
|
|
area.updateDt, |
|
|
|
|
|
|
|
area.fltMothoeRm |
|
|
|
|
|
|
|
).skipNulls()).as("areaList"), |
|
|
|
|
|
|
|
GroupBy.list(Projections.bean( |
|
|
|
|
|
|
|
BasFlightPlanArcrftModel.class, |
|
|
|
|
|
|
|
arcrft.planArcrftSno, |
|
|
|
|
|
|
|
arcrft.planSno, |
|
|
|
|
|
|
|
arcrft.arcrftSno, |
|
|
|
|
|
|
|
arcrft.idntfNum, |
|
|
|
|
|
|
|
arcrft.groupNm, |
|
|
|
|
|
|
|
arcrft.prdctNum, |
|
|
|
|
|
|
|
arcrft.arcrftTypeCd.stringValue().as("arcrftTypeCd"), |
|
|
|
|
|
|
|
arcrft.arcrftModelNm, |
|
|
|
|
|
|
|
arcrft.prdctCmpnNm, |
|
|
|
|
|
|
|
arcrft.prdctDate, |
|
|
|
|
|
|
|
arcrft.arcrftLngth, |
|
|
|
|
|
|
|
arcrft.arcrftWdth, |
|
|
|
|
|
|
|
arcrft.arcrftHght, |
|
|
|
|
|
|
|
arcrft.arcrftWght, |
|
|
|
|
|
|
|
arcrft.arcrftWghtCd.stringValue().as("arcrftWghtCd"), |
|
|
|
|
|
|
|
arcrft.wghtTypeCd, |
|
|
|
|
|
|
|
arcrft.imageUrl, |
|
|
|
|
|
|
|
arcrft.takeoffWght, |
|
|
|
|
|
|
|
arcrft.useYn, |
|
|
|
|
|
|
|
arcrft.cameraYn, |
|
|
|
|
|
|
|
arcrft.insrncYn, |
|
|
|
|
|
|
|
arcrft.ownerNm, |
|
|
|
|
|
|
|
arcrft.createUserId, |
|
|
|
|
|
|
|
arcrft.createDt, |
|
|
|
|
|
|
|
arcrft.updateUserId, |
|
|
|
|
|
|
|
arcrft.updateDt, |
|
|
|
|
|
|
|
arcrft.acrftInsuranceYn, |
|
|
|
|
|
|
|
arcrft.insuranceExperiod, |
|
|
|
|
|
|
|
arcrft.corporationNm |
|
|
|
|
|
|
|
).skipNulls()).as("arcrftList") |
|
|
|
|
|
|
|
).skipNulls()) |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rs != null && !rs.isEmpty()) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// enum cd -> nm
|
|
|
|
|
|
|
|
for (BasFlightPlanModel p : rs) { |
|
|
|
|
|
|
|
if (p == null) continue; |
|
|
|
|
|
|
|
FltType fltType = FltType.fromCode(p.getFltType()); |
|
|
|
|
|
|
|
if (fltType != null) p.setFltTypeNm(fltType.getValue()); |
|
|
|
|
|
|
|
FltPurpose fltPurpose = FltPurpose.fromCode(p.getFltPurpose()); |
|
|
|
|
|
|
|
if (fltPurpose != null) p.setFltPurposeNm(fltPurpose.getValue()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (p.getAreaList() != null && !p.getAreaList().isEmpty()) { |
|
|
|
|
|
|
|
for (BasFlightPlanAreaModel a : p.getAreaList()) { |
|
|
|
|
|
|
|
if (a == null) continue; |
|
|
|
|
|
|
|
FltMethod fltMethod = FltMethod.fromCode(a.getFltMethod()); |
|
|
|
|
|
|
|
if (fltMethod != null) a.setFltMethodNm(fltMethod.getValue()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (p.getArcrftList() != null && !p.getArcrftList().isEmpty()) { |
|
|
|
|
|
|
|
for (BasFlightPlanArcrftModel c : p.getArcrftList()) { |
|
|
|
|
|
|
|
if (c == null) continue; |
|
|
|
|
|
|
|
ArcrftTypeCd arcrftTypeCd = ArcrftTypeCd.fromCode(c.getArcrftTypeCd()); |
|
|
|
|
|
|
|
if (arcrftTypeCd != null) c.setArcrftTypeNm(arcrftTypeCd.getValue()); |
|
|
|
|
|
|
|
ArcrftWghtCd arcrftWghtCd = ArcrftWghtCd.fromCode(c.getArcrftWghtCd()); |
|
|
|
|
|
|
|
if (arcrftWghtCd != null) c.setArcrftWghtNm(arcrftWghtCd.getValue()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Integer> areaSnoList = rs.stream() |
|
|
|
|
|
|
|
.filter(p -> p != null && p.getAreaList() != null && !p.getAreaList().isEmpty()) |
|
|
|
|
|
|
|
.map(p -> { |
|
|
|
|
|
|
|
List<BasFlightPlanAreaModel> areaList = p.getAreaList(); |
|
|
|
|
|
|
|
return areaList.stream().map(BasFlightPlanAreaModel::getPlanAreaSno).collect(Collectors.toList()); |
|
|
|
|
|
|
|
}).flatMap(Collection::stream).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<BasFlightPlanAreaCoordModel> coordEntities = query.select( |
|
|
|
|
|
|
|
Projections.bean( |
|
|
|
|
|
|
|
BasFlightPlanAreaCoordModel.class, |
|
|
|
|
|
|
|
coord.planAreaCoordSno, |
|
|
|
|
|
|
|
coord.planAreaSno, |
|
|
|
|
|
|
|
coord.lat, |
|
|
|
|
|
|
|
coord.lon, |
|
|
|
|
|
|
|
coord.createUserId, |
|
|
|
|
|
|
|
coord.createDt |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
.from(coord) |
|
|
|
|
|
|
|
.where(coord.planAreaSno.in(areaSnoList)) |
|
|
|
|
|
|
|
.orderBy(coord.planAreaSno.asc(), coord.planAreaCoordSno.asc()) |
|
|
|
|
|
|
|
.fetch(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<Integer, List<BasFlightPlanAreaCoordModel>> coordMap = coordEntities.stream().collect(Collectors.groupingBy(BasFlightPlanAreaCoordModel::getPlanAreaSno)); |
|
|
|
|
|
|
|
if (!areaSnoList.isEmpty()) { |
|
|
|
|
|
|
|
rs.forEach(r -> { |
|
|
|
|
|
|
|
List<BasFlightPlanAreaModel> areaList = r.getAreaList(); |
|
|
|
|
|
|
|
areaList.forEach(a -> { |
|
|
|
|
|
|
|
List<BasFlightPlanAreaCoordModel> coordList = coordMap.get(a.getPlanAreaSno()); |
|
|
|
|
|
|
|
if (coordList != null && !coordList.isEmpty()) { |
|
|
|
|
|
|
|
a.setCoordList(coordList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return rs; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |