지대한 10 months ago
parent
commit
82b8d0c60d
  1. 8
      pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlDtlModel.java
  2. 142
      pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  3. 76
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

8
pav-server/src/main/java/com/palnet/biz/api/ctr/cntrl/model/CtrCntrlDtlModel.java

@ -1,14 +1,13 @@
package com.palnet.biz.api.ctr.cntrl.model;
import java.time.Instant;
import java.util.Date;
import lombok.Data;
import java.time.Instant;
@Data
public class CtrCntrlDtlModel {
private String messageTypeCd;
private String messageTypeCd;
private String cntrlId;
private Instant cntrlStDt;
@ -16,6 +15,7 @@ private String messageTypeCd;
private int arcrftSno;
private String prdctNum;
private String arcrftTypeCd;
private String arcrftTypeNm;
private String arcrftModelNm;
private String prdctCmpnNm;
private String wghtTypeCd;

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

@ -73,7 +73,6 @@ public class CtrCntrlService {
private final FltPlanQueryRepository fltPlanQueryRepository;
public List<GPHistoryModel> getListHistory(String objectId) {
List<GPHistoryModel> filterList = new ArrayList<GPHistoryModel>();
@ -102,14 +101,21 @@ public class CtrCntrlService {
CtrCntrlDtlModel result;
result = query.detailCntrl(controlId);
// result = query.detailCntrl(controlId);
result = query.detailCntrlForKac(controlId);
List<CtrCntrlHstryArea> areaList = query.detailArea(controlId);
String stAreaNm = "";
if (result.getHpno() == null || result.getHpno().isEmpty()) {
} else {
result.setHpno(EncryptUtils.decrypt(result.getHpno()));
if (result.getHpno() != null && !result.getHpno().isEmpty()) {
try {
String decHpno = EncryptUtils.decrypt(result.getHpno());
if (decHpno != null && !decHpno.isEmpty()) {
result.setHpno(decHpno);
}
} catch (Exception e) {
log.error("ERROR: ", e);
}
}
for (CtrCntrlHstryArea data : areaList) {
@ -220,7 +226,7 @@ public class CtrCntrlService {
CtrCntrlHstry hisControl = query.getWarnHstryList(cntrlId); // repo method 이름을 왜 이렇게 지었는지는 모르겠으나.. cntrlBas에 insert될 때 같이 insert되는 cntrlHstry 데이터 중 가장 마지막에 찍힌 hstry 로그를 가져옴
int planSno = relRepository.getPlanSno(idntfNum).orElse(0); // cntrlBas insert될때 같이 insert된 mapping 테이블에서 식별번호로 planSno 가져옴
if(query.checkPlanSno(planSno) < 1) continue;
if (query.checkPlanSno(planSno) < 1) continue;
FltPlanArea planAreaData = query.getPlanData(planSno); // planSno에 맞는 비헹계획서의 비행계획경로정보 가져옴
@ -304,7 +310,7 @@ public class CtrCntrlService {
arcrftList.forEach(arcrft -> {
FltPlanBas plan = planBasRepository.
findByGroupFlightPlan(arcrft.getPlanSno(), "Y", fltNowDt).orElse(null);
List<BasFlightPlanArcrftModel>arcrftMappingList = new ArrayList<>();
List<BasFlightPlanArcrftModel> arcrftMappingList = new ArrayList<>();
BasFlightPlanArcrftModel arcrftMapping = BasFlightMapper.mapper.entityToModel(arcrftBas);
arcrftMapping.setIdntfNum(idntfNum);
arcrftMappingList.add(arcrftMapping);
@ -368,6 +374,7 @@ public class CtrCntrlService {
* 식별 번호에 해당되는 비행구역 조회
* KAC에서는 기초데이터를 먼저 입력하는 것이 아닌 비행계획서만 작성하므로 생략되는 로직이 있음
* 따라서 별도로 구성함
*
* @param idntfNum
* @return
*/
@ -375,13 +382,13 @@ public class CtrCntrlService {
List<BasFlightPlanModel> rs = fltPlanQueryRepository.getPlanByIdntfNum(idntfNum);
// Line일 경우 버퍼 생성
if(rs != null && !rs.isEmpty()){
if (rs != null && !rs.isEmpty()) {
rs.forEach(r -> {
List<BasFlightPlanAreaModel> areaList = r.getAreaList();
if(areaList != null && !areaList.isEmpty()){
if (areaList != null && !areaList.isEmpty()) {
areaList.forEach(a -> {
List<BasFlightPlanAreaCoordModel> coordList = a.getCoordList();
if(coordList != null && !coordList.isEmpty()){
if (coordList != null && !coordList.isEmpty()) {
// Buffer 영역 생성 저장
if ("LINE".equals(a.getAreaType())) {
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(coordList);
@ -480,7 +487,7 @@ public class CtrCntrlService {
if (rq.getIdntfNum() != null) {
List<Coordinate> planArea = new ArrayList<>();
for(FltPlanAreaCoord coord : rq.getCoordList()) {
for (FltPlanAreaCoord coord : rq.getCoordList()) {
Coordinate coordinate = new Coordinate(coord.getLon(), coord.getLat());
planArea.add(coordinate);
@ -493,8 +500,8 @@ public class CtrCntrlService {
* 2. 비정상 상황 TYPE(비행구역, 공역) 따라 구분 (미적용)
*/
boolean areaContains = true;
switch(rq.getAreaType()) {
case "LINE" :
switch (rq.getAreaType()) {
case "LINE":
List<Coordinate> transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181");
List<Coordinate> planBuffer = areaUtils.buffer(transPlanArea, rq.getBufferZone());
List<Coordinate> transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326");
@ -502,12 +509,12 @@ public class CtrCntrlService {
areaContains = areaUtils.contains(transPlanBuffer, targetCoord);
break;
case "POLYGON" :
case "POLYGON":
planArea.add(planArea.get(0));
areaContains = areaUtils.contains(planArea, targetCoord);
break;
case "CIRCLE" :
case "CIRCLE":
List<Coordinate> circle = areaUtils.createCircle(planArea.get(0), rq.getBufferZone());
areaContains = areaUtils.contains(circle, targetCoord);
break;
@ -617,58 +624,46 @@ public class CtrCntrlService {
// 시, 분, 초 구하기
int hour = now.getHour();
int minute = now.getMinute();
int length = (int)(Math.log10(minute)+1);
int hourlength = (int)(Math.log10(hour)+1);
int length = (int) (Math.log10(minute) + 1);
int hourlength = (int) (Math.log10(hour) + 1);
String strminute = Integer.toString(minute);
String strhour = Integer.toString(hour);
String basetime = null;
if(length<=1){
strminute = 0+Integer.toString(minute);
}if(hourlength<=1){
strhour = 0+Integer.toString(hour);
if (length <= 1) {
strminute = 0 + Integer.toString(minute);
}
if (hourlength <= 1) {
strhour = 0 + Integer.toString(hour);
}
// 시, 분, 초 출력
if ((Integer.parseInt(strhour) >= 2 && Integer.parseInt(strminute )> 9) && Integer.parseInt(strhour) <= 5) {
if ((Integer.parseInt(strhour) >= 2 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) <= 5) {
basetime = "0200";
}
else if ((Integer.parseInt(strhour) >= 5 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 8) {
} else if ((Integer.parseInt(strhour) >= 5 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) < 8) {
basetime = "0500";
}
else if (Integer.parseInt(strhour) <= 8 && Integer.parseInt(strminute ) < 10) {
} else if (Integer.parseInt(strhour) <= 8 && Integer.parseInt(strminute) < 10) {
basetime = "0500";
}
else if ((Integer.parseInt(strhour) >= 8 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 11) {
} else if ((Integer.parseInt(strhour) >= 8 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) < 11) {
basetime = "0800";
}
else if (Integer.parseInt(strhour) <= 11 && Integer.parseInt(strminute ) < 10) {
} else if (Integer.parseInt(strhour) <= 11 && Integer.parseInt(strminute) < 10) {
basetime = "0800";
}
else if ((Integer.parseInt(strhour) >= 11 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 14) {
} else if ((Integer.parseInt(strhour) >= 11 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) < 14) {
basetime = "1100";
}
else if (Integer.parseInt(strhour) <= 14 && Integer.parseInt(strminute ) < 10) {
} else if (Integer.parseInt(strhour) <= 14 && Integer.parseInt(strminute) < 10) {
basetime = "1100";
}
else if ((Integer.parseInt(strhour) >= 14 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 17) {
} else if ((Integer.parseInt(strhour) >= 14 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) < 17) {
basetime = "1400";
}
else if (Integer.parseInt(strhour) <= 17 && Integer.parseInt(strminute ) < 10) {
} else if (Integer.parseInt(strhour) <= 17 && Integer.parseInt(strminute) < 10) {
basetime = "1400";
}
else if ((Integer.parseInt(strhour) >= 17 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 20) {
} else if ((Integer.parseInt(strhour) >= 17 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) < 20) {
basetime = "1700";
}
else if (Integer.parseInt(strhour) <= 20 && Integer.parseInt(strminute ) < 10) {
} else if (Integer.parseInt(strhour) <= 20 && Integer.parseInt(strminute) < 10) {
basetime = "1700";
}
else if ((Integer.parseInt(strhour) >= 20 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 23) {
} else if ((Integer.parseInt(strhour) >= 20 && Integer.parseInt(strminute) > 9) && Integer.parseInt(strhour) < 23) {
basetime = "2000";
}
else if (Integer.parseInt(strhour) <= 23 && Integer.parseInt(strminute ) < 10) {
} else if (Integer.parseInt(strhour) <= 23 && Integer.parseInt(strminute) < 10) {
basetime = "2000";
}
else
} else
basetime = "2300";
@ -681,24 +676,24 @@ public class CtrCntrlService {
double nx = returnCoord.getX();
double ny = returnCoord.getY();
String Snx = String.format("%.0f",nx);
String Sny = String.format("%.0f",ny);
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + weatherKey);
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1","UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("14", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/
urlBuilder.append("&" + URLEncoder.encode("base_date","UTF-8") + "=" + URLEncoder.encode(strToday, "UTF-8")); /*'21년 6월 28일 발표*/
urlBuilder.append("&" + URLEncoder.encode("base_time","UTF-8") + "=" + URLEncoder.encode(basetime, "UTF-8")); /*06시 발표(정시단위) */
urlBuilder.append("&" + URLEncoder.encode("nx","UTF-8") + "=" + URLEncoder.encode(Snx, "UTF-8")); /*예보지점의 X 좌표값*/
urlBuilder.append("&" + URLEncoder.encode("ny","UTF-8") + "=" + URLEncoder.encode(Sny, "UTF-8")); /*예보지점의 Y 좌표값*/
String Snx = String.format("%.0f", nx);
String Sny = String.format("%.0f", ny);
urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8") + weatherKey);
urlBuilder.append("&" + URLEncoder.encode("pageNo", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "=" + URLEncoder.encode("14", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("dataType", "UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/
urlBuilder.append("&" + URLEncoder.encode("base_date", "UTF-8") + "=" + URLEncoder.encode(strToday, "UTF-8")); /*'21년 6월 28일 발표*/
urlBuilder.append("&" + URLEncoder.encode("base_time", "UTF-8") + "=" + URLEncoder.encode(basetime, "UTF-8")); /*06시 발표(정시단위) */
urlBuilder.append("&" + URLEncoder.encode("nx", "UTF-8") + "=" + URLEncoder.encode(Snx, "UTF-8")); /*예보지점의 X 좌표값*/
urlBuilder.append("&" + URLEncoder.encode("ny", "UTF-8") + "=" + URLEncoder.encode(Sny, "UTF-8")); /*예보지점의 Y 좌표값*/
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
log.info("Response code: " + conn.getResponseCode());
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
@ -708,18 +703,18 @@ public class CtrCntrlService {
while ((line = rd.readLine()) != null) {
sb.append(line);
}
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx(),rq.getNy());
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx(), rq.getNy());
log.info("weatherResult >>>> : {}", weatherResult);
String str = sb.toString();
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(str);
if(weatherResult != null) {
jsonObject.put("area1",weatherResult.getArea1());
jsonObject.put("area2",weatherResult.getArea2());
jsonObject.put("area3",weatherResult.getArea3());
jsonObject.put("landNm",weatherResult.getLandNm());
jsonObject.put("landNum",weatherResult.getLandNum());
if (weatherResult != null) {
jsonObject.put("area1", weatherResult.getArea1());
jsonObject.put("area2", weatherResult.getArea2());
jsonObject.put("area3", weatherResult.getArea3());
jsonObject.put("landNm", weatherResult.getLandNm());
jsonObject.put("landNum", weatherResult.getLandNum());
}
rd.close();
conn.disconnect();
@ -727,6 +722,7 @@ public class CtrCntrlService {
return jsonObject;
}
public Coordinate wheather(Coordinate coord) {
double nx;
double ny;
@ -821,20 +817,20 @@ public class CtrCntrlService {
Double mvDistanceAll = 0.0;
Duration duration = null;
if(completeInfo.size() > 2) {
if (completeInfo.size() > 2) {
Instant start = completeInfo.get(0).getSrvrRcvDt();
Instant end = completeInfo.get(completeInfo.size()-1).getSrvrRcvDt();
Instant end = completeInfo.get(completeInfo.size() - 1).getSrvrRcvDt();
if(start != null && end != null) {
if (start != null && end != null) {
LocalDate startDate = start.atZone(ZoneId.of("Asia/Seoul")).toLocalDate();
LocalDate endDate = end.atZone(ZoneId.of("Asia/Seoul")).toLocalDate();
duration = Duration.between(startDate, endDate);
}
for (int from = 0, to = 1; from <completeInfo.size()-2; from++, to++) {
for (int from = 0, to = 1; from < completeInfo.size() - 2; from++, to++) {
Coordinate fromCoord = new Coordinate();
Coordinate toCoord = new Coordinate();
@ -864,8 +860,8 @@ public class CtrCntrlService {
result.setElevAvg(elevAvg);
result.setSpeedAvg(speedAvg);
result.setMvDistance(mvDistanceAll*1000);
if(duration != null) result.setMvTime(duration.toString());
result.setMvDistance(mvDistanceAll * 1000);
if (duration != null) result.setMvTime(duration.toString());
return result;
}

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

@ -10,6 +10,7 @@ import java.util.Date;
import java.util.List;
import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel;
import com.palnet.biz.jpa.entity.*;
import com.querydsl.core.Tuple;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -32,23 +33,6 @@ import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupArcrftModel;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupModel;
import com.palnet.biz.api.main.dash.model.MainDashStcsModel;
import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel;
import com.palnet.biz.jpa.entity.ComArcrftBas;
import com.palnet.biz.jpa.entity.ComIdntfBas;
import com.palnet.biz.jpa.entity.CtrCntrlHstry;
import com.palnet.biz.jpa.entity.CtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.FltPlanArea;
import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.entity.QComArcrftBas;
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.QCtrCntrlWarnLog;
import com.palnet.biz.jpa.entity.QFltPlanArea;
import com.palnet.biz.jpa.entity.QFltPlanBas;
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel;
import com.palnet.biz.jpa.entity.QPtyCstmrGroup;
import com.palnet.biz.jpa.entity.QPtyGroupBas;
import com.palnet.comn.model.GPHistoryModel;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.InstantUtils;
@ -1312,6 +1296,64 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
}
// TODO 임시 수정
public CtrCntrlDtlModel detailCntrlForKac(String controlId) {
QCtrCntrlBas ctr = QCtrCntrlBas.ctrCntrlBas;
// QComArcrftBas cBas = QComArcrftBas.comArcrftBas;
// QComIdntfBas own = QComIdntfBas.comIdntfBas;
QFltPlanArcrft fltArcrft = QFltPlanArcrft.fltPlanArcrft;
QFltPlanPilot fltPilot = QFltPlanPilot.fltPlanPilot;
QFltPlanCtrCntrlRel rel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
QFltPlanBas fBas = QFltPlanBas.fltPlanBas;
CtrCntrlDtlModel result = query.select(Projections.bean(CtrCntrlDtlModel.class,
ctr.cntrlId,
ctr.cntrlStDt,
ctr.cntrlEndDt,
fltArcrft.arcrftSno,
fltArcrft.prdctNum,
fltArcrft.arcrftTypeCd.stringValue().as("arcrftTypeCd"),
fltArcrft.arcrftModelNm,
fltArcrft.prdctCmpnNm,
fltArcrft.wghtTypeCd,
fltArcrft.imageUrl,
fltArcrft.cameraYn,
fltArcrft.insrncYn,
fltArcrft.ownerNm,
fltPilot.hpno,
fBas.corpRegYn,
fBas.aprvlDt,
fBas.aprvlYn
))
.from(ctr)
.leftJoin(rel)
.on(ctr.cntrlId.eq(rel.cntrlId))
.leftJoin(fBas)
.on(rel.planSno.eq(fBas.planSno))
.leftJoin(fltArcrft)
.on(fBas.planSno.eq(fltArcrft.planSno).and(ctr.idntfNum.eq(fltArcrft.idntfNum)))
.leftJoin(fltPilot)
.on(fBas.planSno.eq(fltPilot.planSno))
.where(ctr.cntrlId.eq(controlId))
.orderBy(ctr.createDt.desc())
.fetchFirst();
if (result == null) return new CtrCntrlDtlModel();
// if(!StringUtils.isEmpty(result.getOwnerNm())) {
//// result.setOwnerNm(EncryptUtils.decrypt(result.getOwnerNm()));
//// }
//// if(!StringUtils.isEmpty(result.getHpno())) {
//// result.setHpno(EncryptUtils.decrypt(result.getHpno()));
//// }
//// if(!StringUtils.isEmpty(result.getTelno())) {
//// result.setTelno(EncryptUtils.decrypt(result.getTelno()));
//// }
return result;
}
/**
* 상세보기 조회
* 지역정보 조회

Loading…
Cancel
Save