Browse Source

Merge commit '57699c83da38b382358421999ff0e5b6c73cfc66' into develop

pull/16/head
lkd9125(이경도) 10 months ago
parent
commit
deecd68945
  1. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java
  2. 27
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java
  3. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java
  4. 4
      pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java
  5. 41
      pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  6. 20
      pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java
  7. 35
      pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java
  8. 65
      pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java
  9. 55
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  10. 3
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  11. 238
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  12. 2
      pav-socket/src/main/java/com/palnet/server/command/SocketCommand.java

3
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java

@ -15,6 +15,7 @@ public class BasFlightPlanArcrftModel {
private String groupNm;
private String prdctNum;
private String arcrftTypeCd;
private String arcrftTypeNm;
private String arcrftModelNm;
private String prdctCmpnNm;
@JsonSerialize(using = InstantDateStrSerializer.class)
@ -23,6 +24,8 @@ public class BasFlightPlanArcrftModel {
private double arcrftWdth;
private double arcrftHght;
private double arcrftWght;
private String arcrftWghtCd;
private String arcrftWghtNm;
private String wghtTypeCd;
private String imageUrl;
private double takeoffWght;

27
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java

@ -1,16 +1,24 @@
package com.palnet.biz.api.bas.flight.model;
import com.palnet.biz.jpa.entity.type.FltMethod;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.Instant;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BasFlightPlanAreaModel {
private Integer planAreaSno;
private Integer planSno;
private String areaType;
private String fltMethod;
private String fltMethodNm;
private String fltAreaAddr;
private Integer bufferZone;
private String fltElev;
@ -23,4 +31,23 @@ public class BasFlightPlanAreaModel {
private List<BasFlightPlanAreaCoordModel> bufferCoordList;
// kac 추가 필드
private String fltMothoeRm;
// public BasFlightPlanAreaModel(Integer planAreaSno, Integer planSno, String areaType, FltMethod fltMethod, String fltAreaAddr, Integer bufferZone, String fltElev, String createUserId, Instant createDt, String updateUserId, Instant updateDt, String docState, List<BasFlightPlanAreaCoordModel> coordList, List<BasFlightPlanAreaCoordModel> bufferCoordList, String fltMothoeRm) {
// this.planAreaSno = planAreaSno;
// this.planSno = planSno;
// this.areaType = areaType;
// this.fltMethod = fltMethod.getCode();
// this.fltMethodNm = fltMethod.getValue();
// this.fltAreaAddr = fltAreaAddr;
// this.bufferZone = bufferZone;
// this.fltElev = fltElev;
// this.createUserId = createUserId;
// this.createDt = createDt;
// this.updateUserId = updateUserId;
// this.updateDt = updateDt;
// this.docState = docState;
// this.coordList = coordList;
// this.bufferCoordList = bufferCoordList;
// this.fltMothoeRm = fltMothoeRm;
// }
}

3
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java

@ -21,6 +21,9 @@ public class BasFlightPlanModel {
private Instant schFltStDt;
private Instant schFltEndDt;
private String fltPurpose;
private String fltPurposeNm;
private String fltType;
private String fltTypeNm;
private String aprvlYn;
private String delYn;
private String createUserId;

4
pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java

@ -155,12 +155,12 @@ public class CtrCntrlController {
@GetMapping("/flight_plan/{idntfNum}")
@ApiOperation(value = "TODO 비행 관제 사용자 비행 계획서 정보")
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API")
@ApiImplicitParam(name = "idtfNum",value = "식별번호", dataTypeClass = String.class)
@ApiImplicitParam(name = "idtfNum",value = "식별번호", dataTypeClass = String.class, paramType = "query")
public ResponseEntity<? extends BasicResponse> findFlightPlan(@PathVariable("idntfNum") String idntfNum) {
List<BasFlightPlanModel> list;
try {
list = service.getFlightPlan(idntfNum);
list = service.getFlightPlanForKac(idntfNum);
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)

41
pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java

@ -70,6 +70,7 @@ public class CtrCntrlService {
private final FltPlanAreaCoordRepository planCoordRepository;
private final AreaUtils areaUtils;
private final ControlGpsDataContext shareContext;
private final FltPlanQueryRepository fltPlanQueryRepository;
@ -363,6 +364,46 @@ public class CtrCntrlService {
return rs;
}
/**
* 식별 번호에 해당되는 비행구역 조회
* KAC에서는 기초데이터를 먼저 입력하는 것이 아닌 비행계획서만 작성하므로 생략되는 로직이 있음
* 따라서 별도로 구성함
* @param idntfNum
* @return
*/
public List<BasFlightPlanModel> getFlightPlanForKac(String idntfNum) {
List<BasFlightPlanModel> rs = fltPlanQueryRepository.getPlanByIdntfNum(idntfNum);
// Line일 경우 버퍼 생성
if(rs != null && !rs.isEmpty()){
rs.forEach(r -> {
List<BasFlightPlanAreaModel> areaList = r.getAreaList();
if(areaList != null && !areaList.isEmpty()){
areaList.forEach(a -> {
List<BasFlightPlanAreaCoordModel> coordList = a.getCoordList();
if(coordList != null && !coordList.isEmpty()){
// Buffer 영역 생성 저장
if ("LINE".equals(a.getAreaType())) {
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(coordList);
List<Coordinate> transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(transCoordList, a.getBufferZone());
List<Coordinate> transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(transBufferList);
a.setBufferCoordList(bufferCoordList);
}
}
});
}
});
}
return rs;
}
/**
* TODO 비행 관제 비정상 상황 판별
*

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

@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel;
import com.palnet.biz.api.main.dash.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@ -18,9 +18,6 @@ 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;
import com.palnet.comn.code.RSErrorCode;
@ -382,4 +379,19 @@ public class MainDashController {
return ResponseEntity.ok().body(new SuccessResponse<List<MainCurrentStcsModel>>(result));
}
@GetMapping("/stcs/dailyflight")
@ApiOperation(value = "일일 비행횟수 현황")
@Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API")
public ResponseEntity<? extends BasicResponse> getDailyFlightNumOfStcs(){
List<MainDashFlightNumStcsModel> result = null;
try {
result = service.dailyFlightNumOfStcs();
}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<List<MainDashFlightNumStcsModel>>(result));
}
}

35
pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java

@ -0,0 +1,35 @@
package com.palnet.biz.api.main.dash.model;
import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* packageName : com.palnet.biz.api.main.dash.model
* fileName : MainDashFlightNumStcsModel
* author : hagjoon
* date : 2023-11-13
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-11-13 hagjoon 최초 생성
*/
@Data
public class MainDashFlightNumStcsModel {
@ApiParam(value = "구분",example = "전일(어제), 금일(오늘), 명일(내일)")
private String dateType = "";
@ApiParam(value = "계획",example = "전일(어제), 금일(오늘), 명일(내일) 비행계획서 목록")
private long flightPlan = 0;
@ApiParam(value = "비행 완료",example = "전일(어제), 금일(오늘), 명일(내일) 비행완료 목록")
private long completeFlight = 0;
@ApiParam(value = "미 비행",example = "전일(어제), 금일(오늘), 명일(내일) 미 비행 목록")
private long notFlight = 0;
@ApiParam(value = "비고",example = "전일(어제), 금일(오늘), 명일(내일) 비고")
private double note = 0;
}

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

@ -1,14 +1,17 @@
package com.palnet.biz.api.main.dash.service;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
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.dash.model.*;
import com.palnet.biz.api.main.statistics.service.MainStatisticsService;
import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
import com.palnet.biz.jpa.repository.pty.*;
import com.querydsl.core.Tuple;
@ -20,9 +23,6 @@ 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.entity.CtrCntrlWarnLog;
import com.palnet.biz.jpa.entity.type.WarnType;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
@ -57,6 +57,9 @@ public class MainDashService {
@Autowired
private FltPlanArcrftRepository fltPlanArcrftRepository;
@Autowired
private FltPlanBasRepository fltPlanBasRepository;
@Autowired
private JwtTokenUtil token;
@ -369,4 +372,58 @@ public class MainDashService {
return result;
}
public List<MainDashFlightNumStcsModel> dailyFlightNumOfStcs(){
// 1. 전일 , 금일, 명일(내일)
Instant yesterdayStart = Instant.now().minus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Instant yesterdayEnd = Instant.now().truncatedTo(ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
Instant todayStart = Instant.now().truncatedTo(ChronoUnit.DAYS);
Instant todayEnd = Instant.now().plus(1, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
// 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일)
long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd);
long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd);
long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd);
// 3. 비행 완료 항목 : 실제 비행이 완료된 건수
long yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size();
long todayCompleteCount = query.completeFlight(todayStart,todayEnd).size();
long tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size();
// 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수
long yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size();
long todayNotFlight = query.notFlight(todayStart, todayEnd).size();
long tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size();
// 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용
// ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용
// 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용
// 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용
long yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).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));
result.add(createModel("tomorrow", tomorrowCount,tomorrowCompleteCount,tomorrowNotFlight,tomorrowNotePercent));
return result;
}
private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount, long completeCount, long notFlight, double note) {
MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel();
model.setDateType(dateType);
model.setFlightPlan(flightPlanCount);
model.setCompleteFlight(completeCount);
model.setNotFlight(notFlight);
model.setNote(note);
return model;
}
}

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

@ -9,6 +9,8 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import com.querydsl.core.Tuple;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
@ -2609,7 +2611,60 @@ 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;
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)
)
.fetch();
}
public List<Tuple> notFlight(Instant start, Instant end){
QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas;
QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fpb = QFltPlanBas.fltPlanBas;
return query
.select(
fpb.planSno,
fpb.aprvlYn,
fpb.aprvlDt,
ccb.cntrlId,
fpccr.cntrlId,
fpccr.planSno
)
.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.cntrlEndDt.between(start, end),
fpb.aprvlDt.between(start, end)
)
.fetch();
}
}

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

@ -53,5 +53,8 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
"and f.aprvlYn = 'Y' ")
List<FltPlanBas> findBasList(@Param("planSno") int planSno);
@Query("SELECT f FROM FltPlanBas f WHERE f.aprvlYn = 'Y' AND f.aprvlDt IS NOT NULL AND f.aprvlDt >= :startDate AND f.aprvlDt < :endDate")
List<FltPlanBas> findApprovedFlightPlansByApprovalDate(Instant startDate, Instant endDate);
long countByAprvlYnAndAprvlDtBetween(String aprvlYn, Instant startDate, Instant endDate);
}

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

@ -1,58 +1,13 @@
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.bas.flight.model.BasFlightPlanArcrftModel;
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.bas.flight.model.*;
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;
import com.palnet.biz.jpa.entity.QComArcrftBas;
import com.palnet.biz.jpa.entity.QComFileBas;
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.biz.jpa.entity.*;
import com.palnet.biz.jpa.entity.type.*;
import com.palnet.biz.jpa.model.*;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.InstantUtils;
import com.querydsl.core.BooleanBuilder;
@ -62,12 +17,23 @@ 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.*;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
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
@Repository
@ -110,6 +76,7 @@ public class FltPlanQueryRepository {
}
builder.and(bas.delYn.ne("Y"));
List<BasFlightPlanModel> r = query
.from(bas)
.leftJoin(area)
@ -2064,4 +2031,175 @@ public class FltPlanQueryRepository {
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;
}
}

2
pav-socket/src/main/java/com/palnet/server/command/SocketCommand.java

@ -167,7 +167,7 @@ public class SocketCommand {
if (model.getObjectId().indexOf("PA") > -1) {
// messageProducer.sendControlHistoryMessage(model);
try {
taskServerService.sendData(model);
// taskServerService.sendData(model);
// taskWbService.sendDataWebClient(model);
} catch (Exception e) {
logger.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());

Loading…
Cancel
Save