Browse Source

DB 추가 필드에 대한 비행계획서 등록/수정/조회/상세조회 모델 변경

pull/2/head
지대한 1 year ago
parent
commit
24fa9841e2
  1. 6
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AcntCstmrRqModel.java
  2. 2
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java
  3. 5
      pav-server/src/main/java/com/palnet/biz/api/acnt/terms/model/AcntTermsRsModel.java
  4. 3
      pav-server/src/main/java/com/palnet/biz/api/bas/dron/model/BasDronModel.java
  5. 8
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  6. 7
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java
  7. 2
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java
  8. 7
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java
  9. 20
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java
  10. 391
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  11. 2
      pav-server/src/main/java/com/palnet/biz/jpa/entity/FltPlanArcrft.java
  12. 3
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java
  13. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  14. 7
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  15. 23
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java
  16. 15
      pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/controller/KacFlightPlanController.java
  17. 15
      pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/model/KacFlightPlanModel.java
  18. 15
      pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/service/KacFlightPlanService.java
  19. 49768
      pav-server/src/main/resources/air/airgeo.json

6
pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AcntCstmrRqModel.java

@ -1,5 +1,7 @@
package com.palnet.biz.api.acnt.cstmr.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.Data;
import java.time.Instant;
@ -32,8 +34,10 @@ public class AcntCstmrRqModel{
private String genderCd;
private String memberName;
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant brthdyDate;
private Instant testDt;
private String email;

2
pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmerRlModel.java

@ -1,6 +1,5 @@
package com.palnet.biz.api.acnt.cstmr.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.Data;
@ -12,7 +11,6 @@ public class AnctCstmerRlModel {
private String memberName;
// @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant brthdyDate;

5
pav-server/src/main/java/com/palnet/biz/api/acnt/terms/model/AcntTermsRsModel.java

@ -1,5 +1,7 @@
package com.palnet.biz.api.acnt.terms.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.Data;
import java.time.Instant;
@ -10,7 +12,8 @@ public class AcntTermsRsModel{
private int termsSno ;
private String siteCd;
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant estbshDate;
private String termsCtgryCd;

3
pav-server/src/main/java/com/palnet/biz/api/bas/dron/model/BasDronModel.java

@ -3,6 +3,8 @@ package com.palnet.biz.api.bas.dron.model;
import java.time.Instant;
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.Data;
@Data
@ -36,6 +38,7 @@ public class BasDronModel {
private String prdctCmpnNm;
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant prdctDate;
private String prdctNum;

8
pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -89,8 +89,8 @@ public class BasFlightController {
Object airArea = jsonObject;
List<Object> features = (List<Object>) jsonObject.get("features");
log.info("type is name : {}", type);
log.info("features size : {}", features.size());
log.debug("type is name : {}", type);
log.debug("features size : {}", features.size());
return ResponseEntity.ok().body(airArea);
}
@ -101,9 +101,7 @@ public class BasFlightController {
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> findPlanList(BasFlightPlanListRq rq) {
ComnPagingRs<BasFlightPlanModel> result = null;
// System.out.println(rq);
log.error(">>> rq : {}", rq);
log.debug(">>> rq : {}", rq);
try {
result = basFlightService.listPlan(rq);
} catch (Exception e) {

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

@ -1,5 +1,7 @@
package com.palnet.biz.api.bas.flight.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.Data;
import java.time.Instant;
@ -15,6 +17,7 @@ public class BasFlightPlanArcrftModel {
private String arcrftTypeCd;
private String arcrftModelNm;
private String prdctCmpnNm;
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant prdctDate;
private double arcrftLngth;
private double arcrftWdth;
@ -33,4 +36,8 @@ public class BasFlightPlanArcrftModel {
private Instant updateDt;
private String docState = "R";
private String idntfTypeCd;
// kac 추가 필드
private String acrftInsuranceYn;
private Instant insuranceExperiod;
private String corporationNm;
}

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

@ -20,4 +20,6 @@ public class BasFlightPlanAreaModel {
private String docState = "R";
private List<BasFlightPlanAreaCoordModel> coordList;
private List<BasFlightPlanAreaCoordModel> bufferCoordList;
// kac 추가 필드
private String fltMothoeRm;
}

7
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java

@ -1,13 +1,10 @@
package com.palnet.biz.api.bas.flight.model;
import com.palnet.biz.api.comn.model.ComnPagingModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.Instant;
import java.util.Date;
import com.palnet.biz.api.comn.model.ComnPagingModel;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
@Data
@EqualsAndHashCode(callSuper=false)

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

@ -1,6 +1,5 @@
package com.palnet.biz.api.bas.flight.model;
import com.palnet.comn.utils.DateUtils;
import lombok.Data;
import java.time.Instant;
@ -32,20 +31,7 @@ public class BasFlightPlanModel {
private List<BasFlightPlanAreaModel> areaList;
private List<BasFlightPlanPilotModel> pilotList;
private List<BasFlightPlanArcrftModel> arcrftList;
public void setSchFltStDt(String schFltStDt){
this.schFltStDt = DateUtils.stringToInstant(schFltStDt);
}
public void setSchFltEndDt(String schFltEndDt){
this.schFltEndDt = DateUtils.stringToInstant(schFltEndDt);
}
public void setCreateDt(String createDt){
this.createDt = DateUtils.stringToInstant(createDt);
}
public void setUpdateDt(String updateDt){
this.updateDt = DateUtils.stringToInstant(updateDt);
}
// kac 추가 필드
private String corpRegYn;
private String serviceType;
}

391
pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -66,9 +66,9 @@ import lombok.extern.log4j.Log4j2;
@Transactional(readOnly = true)
public class BasFlightService {
@Autowired
private CtrTrnsLctnService ctrTrnsLctnService;
@Autowired
private CtrTrnsLctnService ctrTrnsLctnService;
private final FltPlanBasRepository fltPlanBasRepository;
private final FltPlanArcrftRepository fltPlanArcrftRepository;
private final FltPlanAreaRepository fltPlanAreaRepository;
@ -107,43 +107,43 @@ public class BasFlightService {
String appAuth = jwtTokenUtil.getUserAuthByToken();
ComnPagingRs<BasFlightPlanModel> response = new ComnPagingRs<>();
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord());
if(groupList.size() > 0) {
Pageable pageable = PageRequest.of(rq.getPage() - 1, rq.getRecord());
if (groupList.size() > 0) {
for (BasGroupJoinModel list : groupList) {
if (list.getGroupId().equals(rq.getGroupId())) {
userAccount = list.getGroupAuthCd();
}
}
}
if (appAuth.equals("SUPER") || appAuth.equals("ADMIN")) {
masterAccount = "ADMIN";
} else if (userAccount.equals("MASTER") || userAccount.equals("LEADER")) {
masterAccount = "ADMIN";
} else {
masterAccount = "NORMAL";
}
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.listPlan(rq, masterAccount, pageable);
long total = fltPlanQueryRepository.listPlanCount(rq, masterAccount);
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord();
response.setItems(result.getContent());
response.setTotal(total);
response.setPage(rq.getPage());
response.setTotalPage(totalPage);
if (appAuth.equals("SUPER") || appAuth.equals("ADMIN")) {
masterAccount = "ADMIN";
} else if (userAccount.equals("MASTER") || userAccount.equals("LEADER")) {
masterAccount = "ADMIN";
} else {
masterAccount = "NORMAL";
}
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.listPlan(rq, masterAccount, pageable);
long total = fltPlanQueryRepository.listPlanCount(rq, masterAccount);
long totalPage = total % rq.getRecord() > 0 ? (total / rq.getRecord()) + 1 : total / rq.getRecord();
response.setItems(result.getContent());
response.setTotal(total);
response.setPage(rq.getPage());
response.setTotalPage(totalPage);
return response;
}
// 비행계획서 상세 조회
public BasFlightPlanModel detailPlan(Integer planSno) {
BasFlightPlanModel rs = new BasFlightPlanModel();
BasFlightPlanModel rs = new BasFlightPlanModel();
// 비행계획서
FltPlanBas planEntity = fltPlanBasRepository.findByPlanSnoAndDelYnNot(planSno, "Y").orElse(null);
if(planEntity != null){
rs = BasFlightMapper.mapper.entityToModel(planEntity);
if (planEntity != null) {
rs = BasFlightMapper.mapper.entityToModel(planEntity);
// 버퍼영역
List<FltPlanArea> areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno);
if (areaEntityList != null && !areaEntityList.isEmpty()) {
@ -155,7 +155,7 @@ public class BasFlightService {
areaModel.setCoordList(BasFlightMapper.mapper.entityToModelCoordList(coordEntityList));
// Line인 경우 BufferList 생성
if("LINE".equals(areaEntity.getAreaType())) {
if ("LINE".equals(areaEntity.getAreaType())) {
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(areaModel.getCoordList());
List<Coordinate> bufferList = areaUtils.buffer(convertCoordinates, areaModel.getBufferZone());
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(bufferList);
@ -180,93 +180,93 @@ public class BasFlightService {
}
return rs;
}
public void planValid(BasFlightPlanModel rq) {
boolean isEqualsFltElev = false;
List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList();
String rqFltElev = rqAreaList.get(0).getFltElev();
boolean isEqualsFltElev = false;
List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList();
String rqFltElev = rqAreaList.get(0).getFltElev();
List<BasFlightPlanModel> effectivePlanList = fltPlanQueryRepository.CoordCheck(rq);
List<BasFlightPlanAreaModel> effectivePlanArea = new ArrayList<>();
for(BasFlightPlanModel plan : effectivePlanList) {
effectivePlanArea.addAll(plan.getAreaList());
}
for(BasFlightPlanAreaModel area : effectivePlanArea) {
if(rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true;
}
List<BasFlightPlanAreaModel> effectivePlanArea = new ArrayList<>();
for (BasFlightPlanModel plan : effectivePlanList) {
effectivePlanArea.addAll(plan.getAreaList());
}
for (BasFlightPlanAreaModel area : effectivePlanArea) {
if (rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true;
}
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq);
for(BasFlightPlanModel i : effectivePlanList) {
if(rq.getPlanSno().equals(i.getPlanSno()))return;
for (BasFlightPlanModel i : effectivePlanList) {
if (rq.getPlanSno().equals(i.getPlanSno())) return;
}
if(effectivePlanList != null && !effectivePlanList.isEmpty()) {
for(BasFlightPlanModel plan : effectivePlanList) {
if (effectivePlanList != null && !effectivePlanList.isEmpty()) {
for (BasFlightPlanModel plan : effectivePlanList) {
// 1. 구역 조회
List<FltPlanArea> areaList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(plan.getPlanSno());
// 2. 좌표 조회 -> 영역 포함 여부 확인
for(FltPlanArea area : areaList) {
for (FltPlanArea area : areaList) {
List<FltPlanAreaCoord> coordList = fltPlanAreaCoordRepository.findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(area.getPlanAreaSno());
if(coordList != null && !coordList.isEmpty()) {
if (coordList != null && !coordList.isEmpty()) {
List<BasFlightPlanAreaCoordModel> coordListMapping = BasFlightMapper.mapper.entityToModelCoordList(coordList);
// 2-1 영역 좌표 -> jts model로 mapping
List<Coordinate> effectiveCoordList = areaUtils.convertCoordinates(coordListMapping);
List<Coordinate> effectiveCoordBufferList = new ArrayList<>();
// Query에서 조회한 좌표로 버퍼좌표 생성
if("LINE".equals(area.getAreaType())){
List<Coordinate> trans = areaUtils.transform(effectiveCoordList, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, area.getBufferZone());
effectiveCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
if ("LINE".equals(area.getAreaType())) {
List<Coordinate> trans = areaUtils.transform(effectiveCoordList, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, area.getBufferZone());
effectiveCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
}
if("POLYGON".equals(area.getAreaType())) {
effectiveCoordBufferList.addAll(effectiveCoordList);
if ("POLYGON".equals(area.getAreaType())) {
effectiveCoordBufferList.addAll(effectiveCoordList);
}
if("CIRCLE".equals(area.getAreaType())) {
effectiveCoordBufferList = areaUtils.createCircle(effectiveCoordList.get(0), area.getBufferZone());
if ("CIRCLE".equals(area.getAreaType())) {
effectiveCoordBufferList = areaUtils.createCircle(effectiveCoordList.get(0), area.getBufferZone());
}
// 유효한 비행구역 검증하기.
for(BasFlightPlanAreaModel rqArea : rq.getAreaList()) {
for (BasFlightPlanAreaModel rqArea : rq.getAreaList()) {
boolean overlapCheck = false;
boolean overlapCheck2 = false;
boolean containCheck = false;
boolean containCheck2 = false;
List<Coordinate> rqCoord = new ArrayList<>();
List<Coordinate> rqCoordBufferList = new ArrayList<>();
//rq로 들어온 좌표로 버퍼좌표 생성
for(BasFlightPlanAreaCoordModel coord : rqArea.getCoordList()) {
Coordinate coords = new Coordinate(coord.getLon(), coord.getLat());
rqCoord.add(coords);
for (BasFlightPlanAreaCoordModel coord : rqArea.getCoordList()) {
Coordinate coords = new Coordinate(coord.getLon(), coord.getLat());
rqCoord.add(coords);
}
if("LINE".equals(rqArea.getAreaType())){
List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, rqArea.getBufferZone());
rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
}else if( "POLYGON".equals(rqArea.getAreaType())) {
rqCoordBufferList.addAll(rqCoord);
}else if("CIRCLE".equals(rqArea.getAreaType())) {
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone());
if ("LINE".equals(rqArea.getAreaType())) {
List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, rqArea.getBufferZone());
rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
} else if ("POLYGON".equals(rqArea.getAreaType())) {
rqCoordBufferList.addAll(rqCoord);
} else if ("CIRCLE".equals(rqArea.getAreaType())) {
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone());
}
//검증
overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList);
overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList);
if((overlapCheck || overlapCheck2) && isEqualsFltElev) {
if ((overlapCheck || overlapCheck2) && isEqualsFltElev) {
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
}
for(Coordinate coord : effectiveCoordBufferList) {
containCheck = areaUtils.contains(rqCoordBufferList, coord);
if(containCheck && isEqualsFltElev) {
for (Coordinate coord : effectiveCoordBufferList) {
containCheck = areaUtils.contains(rqCoordBufferList, coord);
if (containCheck && isEqualsFltElev) {
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
}
}
for(Coordinate coord : rqCoordBufferList) {
containCheck2 = areaUtils.contains(effectiveCoordBufferList , coord);
if(containCheck2 && isEqualsFltElev) {
for (Coordinate coord : rqCoordBufferList) {
containCheck2 = areaUtils.contains(effectiveCoordBufferList, coord);
if (containCheck2 && isEqualsFltElev) {
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
}
}
@ -275,18 +275,18 @@ public class BasFlightService {
}
// 3. 중복 기체 확인
for(BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) {
for(BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) {
if(rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) {
throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE);
}
for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) {
for (BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) {
if (rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) {
throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE);
}
}
}
}
}
}
}
// 비행계획서 등록
@Transactional
public boolean createPlan(BasFlightPlanModel rq) {
@ -355,10 +355,10 @@ public class BasFlightService {
// 비행계획서 수정
@Transactional
public boolean updatePlan(BasFlightPlanModel rq) {
// 비행계획서 유효성 검사.
// 비행계획서 유효성 검사.
this.planValid(rq);
if (rq != null && rq.getPlanSno() != null) {
String userId = jwtTokenUtil.getUserIdByToken();
Integer planSno = rq.getPlanSno();
@ -426,17 +426,17 @@ public class BasFlightService {
// 조종사
List<BasFlightPlanPilotModel> pilotModelList = rq.getPilotList();
if(pilotModelList != null && !pilotModelList.isEmpty()){
if (pilotModelList != null && !pilotModelList.isEmpty()) {
List<FltPlanPilot> pilotEntityList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno);
for(BasFlightPlanPilotModel pilotModel : pilotModelList){
for (BasFlightPlanPilotModel pilotModel : pilotModelList) {
FltPlanPilot pilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> fltPlanPilot.getPlanPilotSno().equals(pilotModel.getPlanPilotSno())).findFirst().orElse(null);
if(pilotEntity == null){
pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel);
if (pilotEntity == null) {
pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel);
pilotEntity.setUpdateUserId(userId);
pilotEntity.setCreateUserId(userId);
}else {
BasFlightMapper.mapper.updateEntityByModel(pilotEntity, pilotModel);
} else {
BasFlightMapper.mapper.updateEntityByModel(pilotEntity, pilotModel);
}
fltPlanPilotRepository.save(pilotEntity);
}
@ -452,16 +452,16 @@ public class BasFlightService {
// 기체
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrftList();
if(arcrftModelList != null && !arcrftModelList.isEmpty()){
if (arcrftModelList != null && !arcrftModelList.isEmpty()) {
List<FltPlanArcrft> arcrftEntityList = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno);
for(BasFlightPlanArcrftModel arcrftModel : arcrftModelList){
for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) {
FltPlanArcrft arcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> fltPlanArcrft.getPlanArcrftSno().equals(arcrftModel.getPlanArcrftSno())).findFirst().orElse(null);
if(arcrftEntity == null){
if (arcrftEntity == null) {
arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel);
arcrftEntity.setUpdateUserId(userId);
arcrftEntity.setCreateUserId(userId);
}else {
BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel);
} else {
BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel);
}
fltPlanArcrftRepository.save(arcrftEntity);
}
@ -488,22 +488,21 @@ public class BasFlightService {
}
// 그룹 조종사 조회
public List<BasFlightPlanPilotModel> listPilotByGroup(String groupId) {
List<BasFlightPlanPilotModel> pilotList = fltPlanQueryRepository.listPilot(groupId);
/* 개인정보 복호화 처리 */
for(BasFlightPlanPilotModel model : pilotList) {
if(!StringUtils.isEmpty(model.getHpno())) {
for (BasFlightPlanPilotModel model : pilotList) {
if (!StringUtils.isEmpty(model.getHpno())) {
model.setHpno(EncryptUtils.decrypt(model.getHpno()));
}
if(!StringUtils.isEmpty(model.getMemberName())) {
if (!StringUtils.isEmpty(model.getMemberName())) {
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
}
if(!StringUtils.isEmpty(model.getEmail())) {
if (!StringUtils.isEmpty(model.getEmail())) {
model.setEmail(EncryptUtils.decrypt(model.getEmail()));
}
}
@ -523,9 +522,9 @@ public class BasFlightService {
// 비행 구역 buffer zone
public List<BasFlightPlanAreaModel> getBuffer(List<BasFlightPlanAreaModel> rq) {
for(BasFlightPlanAreaModel area : rq) {
for (BasFlightPlanAreaModel area : rq) {
if("LINE".equals(area.getAreaType())) {
if ("LINE".equals(area.getAreaType())) {
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(area.getCoordList()); // 객체 타입 변환
List<Coordinate> transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181");
@ -545,17 +544,17 @@ public class BasFlightService {
public ComnPagingRs<BasFlightPlanModel> aprvList(BasFlightPlanListRq rq) {
String appAuth = jwtTokenUtil.getUserAuthByToken();
ComnPagingRs<BasFlightPlanModel> response = new ComnPagingRs<>();
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord());
ComnPagingRs<BasFlightPlanModel> response = new ComnPagingRs<>();
Pageable pageable = PageRequest.of(rq.getPage() - 1, rq.getRecord());
List<JwtGroupModel> groupAuthList = jwtTokenUtil.getGroupAuthByToken();
List<String> groupIdList = new ArrayList<>();
String userAccount = null;
String masterAccount = null;
if(groupAuthList.size() > 0) {
if (groupAuthList.size() > 0) {
for (JwtGroupModel list : groupAuthList) {
if (list.getGroupId().equals(rq.getGroupId())) {
userAccount = list.getGroupAuthCd();
@ -570,18 +569,19 @@ public class BasFlightService {
masterAccount = "NORMAL";
}
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.aprvList(rq, masterAccount, pageable);
long total = fltPlanQueryRepository.aprvCount(rq, masterAccount);
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord();
response.setItems(result.getContent());
response.setTotal(total);
response.setPage(rq.getPage());
response.setTotalPage(totalPage);
long totalPage = total % rq.getRecord() > 0 ? (total / rq.getRecord()) + 1 : total / rq.getRecord();
response.setItems(result.getContent());
response.setTotal(total);
response.setPage(rq.getPage());
response.setTotalPage(totalPage);
return response;
}
// 비행계획서 승인/미승인
@Transactional
public int aprovePlan(BasFlightAprovRq rq) {
@ -592,20 +592,20 @@ public class BasFlightService {
public boolean checkAirspaceContains(List<BasFlightPlanAreaModel> rq) {
boolean result = false;
for(BasFlightPlanAreaModel area : rq) {
for (BasFlightPlanAreaModel area : rq) {
List<Coordinate> coordinates = areaUtils.convertCoordinates(area.getCoordList());
if("LINE".equals(area.getAreaType())) {
List<Coordinate> transCoordList = areaUtils.transform(coordinates, "EPSG:4326", "EPSG:5181");
if ("LINE".equals(area.getAreaType())) {
List<Coordinate> transCoordList = areaUtils.transform(coordinates, "EPSG:4326", "EPSG:5181");
List<Coordinate> buffer = areaUtils.buffer(transCoordList, area.getBufferZone());
List<Coordinate> transBufferList = areaUtils.transform(buffer, "EPSG:5181", "EPSG:4326");
List<Coordinate> transBufferList = areaUtils.transform(buffer, "EPSG:5181", "EPSG:4326");
result = areaUtils.overlaps(transBufferList);
}
if("POLYGON".equals(area.getAreaType())) {
if ("POLYGON".equals(area.getAreaType())) {
result = areaUtils.overlaps(coordinates);
}
if("CIRCLE".equals(area.getAreaType())) {
if ("CIRCLE".equals(area.getAreaType())) {
List<Coordinate> circle = areaUtils.createCircle(coordinates.get(0), area.getBufferZone());
result = areaUtils.overlaps(circle);
}
@ -614,56 +614,56 @@ public class BasFlightService {
return result;
}
//지역 검색
public String searchArea(String apiUrl, Map<String, String> requestHeaders) {
HttpURLConnection con = connect(apiUrl);
try {
con.setRequestMethod("GET");
for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
HttpURLConnection con = connect(apiUrl);
try {
con.setRequestMethod("GET");
for (Map.Entry<String, String> header : requestHeaders.entrySet()) {
con.setRequestProperty(header.getKey(), header.getValue());
}
int responseCode = con.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK) {
return readBody(con.getInputStream());
} else {
return readBody(con.getErrorStream());
}
} catch (IOException e) {
throw new RuntimeException("API 요청과 응답 실패", e);
} finally {
con.disconnect();
}
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
return readBody(con.getInputStream());
} else {
return readBody(con.getErrorStream());
}
} catch (IOException e) {
throw new RuntimeException("API 요청과 응답 실패", e);
} finally {
con.disconnect();
}
}
public HttpURLConnection connect(String apiUrl) {
try {
URL url = new URL(apiUrl);
return (HttpURLConnection)url.openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
} catch (IOException e) {
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
}
try {
URL url = new URL(apiUrl);
return (HttpURLConnection) url.openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
} catch (IOException e) {
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
}
}
public String readBody(InputStream body) {
InputStreamReader streamReader = new InputStreamReader(body);
try(BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
InputStreamReader streamReader = new InputStreamReader(body);
try (BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
public List<BasFlightScheduleRs> findSchecdule(String searchDate) {
@ -672,23 +672,24 @@ public class BasFlightService {
return schedule;
}
public JSONObject getWeather(BasFlightWeatherModel rq) throws IOException, ParseException {
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst");
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D");
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode(rq.getPageNo(),"UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode(rq.getNumOfRows(), "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(rq.getBase_date(), "UTF-8")); /*'21년 6월 28일 발표*/
urlBuilder.append("&" + URLEncoder.encode("base_time","UTF-8") + "=" + URLEncoder.encode(rq.getBase_time(), "UTF-8")); /*06시 발표(정시단위) */
urlBuilder.append("&" + URLEncoder.encode("nx","UTF-8") + "=" + URLEncoder.encode(rq.getNx(), "UTF-8")); /*예보지점의 X 좌표값*/
urlBuilder.append("&" + URLEncoder.encode("ny","UTF-8") + "=" + URLEncoder.encode(rq.getNy(), "UTF-8")); /*예보지점의 Y 좌표값*/
public JSONObject getWeather(BasFlightWeatherModel rq) throws IOException, ParseException {
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst");
urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D");
urlBuilder.append("&" + URLEncoder.encode("pageNo", "UTF-8") + "=" + URLEncoder.encode(rq.getPageNo(), "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "=" + URLEncoder.encode(rq.getNumOfRows(), "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(rq.getBase_date(), "UTF-8")); /*'21년 6월 28일 발표*/
urlBuilder.append("&" + URLEncoder.encode("base_time", "UTF-8") + "=" + URLEncoder.encode(rq.getBase_time(), "UTF-8")); /*06시 발표(정시단위) */
urlBuilder.append("&" + URLEncoder.encode("nx", "UTF-8") + "=" + URLEncoder.encode(rq.getNx(), "UTF-8")); /*예보지점의 X 좌표값*/
urlBuilder.append("&" + URLEncoder.encode("ny", "UTF-8") + "=" + URLEncoder.encode(rq.getNy(), "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()));
@ -700,26 +701,26 @@ public class BasFlightService {
sb.append(line);
}
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(),rq.getNy2());
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());
}
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(), rq.getNy2());
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());
}
rd.close();
conn.disconnect();
log.info(sb.toString());
return jsonObject;
}
}

2
pav-server/src/main/java/com/palnet/biz/jpa/entity/FltPlanArcrft.java

@ -97,7 +97,7 @@ public class FltPlanArcrft {
@Column(name="ACRFT_INSURANCE_YN")
private String acrftInsuranceYn;
@Column(name="INSURANCE_EXPERIOD")
@Column(name="INSURANCE_EXPERIOD", columnDefinition = "TIMESTAMP")
private Instant insuranceExperiod;
@Column(name="CORPORATION_NM")

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

@ -1,14 +1,11 @@
package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanArea;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Optional;
public interface FltPlanAreaRepository extends JpaRepository<FltPlanArea, Integer> {
List<FltPlanArea> findByPlanSnoOrderByPlanAreaSnoAsc(Integer planSno);

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

@ -1,7 +1,6 @@
package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlSocketDataModel;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
@ -10,7 +9,6 @@ import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Optional;

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

@ -113,6 +113,9 @@ public class FltPlanQueryRepository {
bas.createDt,
bas.updateUserId,
bas.updateDt,
// kac 추가 필드
bas.corpRegYn,
bas.serviceType,
GroupBy.list(Projections.bean(
BasFlightPlanAreaModel.class,
area.planAreaSno,
@ -124,7 +127,9 @@ public class FltPlanQueryRepository {
area.createUserId,
area.createDt,
area.updateUserId,
area.updateDt
area.updateDt,
// kac 추가 필드
area.fltMothoeRm
).skipNulls()).as("areaList")
))
);

23
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCrtfyhpBasQueryRepository.java

@ -6,15 +6,15 @@ import com.palnet.biz.jpa.entity.QPtyCrtfyhpBas;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.Calendar;
import java.util.Date;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
@Log4j2
@Slf4j
@Repository
@RequiredArgsConstructor
public class PtyCrtfyhpBasQueryRepository {
@ -24,29 +24,22 @@ public class PtyCrtfyhpBasQueryRepository {
public List<PtyCrtfyhpBas> confirmSms(String hpno, String crtfyNo) {
QPtyCrtfyhpBas qEntity = QPtyCrtfyhpBas.ptyCrtfyhpBas;
Date now = Calendar.getInstance().getTime();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, -5);
Date prevTime = calendar.getTime();
Instant now = Instant.now();
Instant prevTime = Instant.now().minus(5, ChronoUnit.MINUTES);
BooleanBuilder builder = new BooleanBuilder();
builder.and(qEntity.crtfyhpNo.eq(crtfyNo));
builder.and(qEntity.crtfyhpYn.eq("N"));
// builder.and(qEntity.createDt.between(LocalDateTime.now().minusMinutes(5), LocalDateTime.now()));
builder.and(qEntity.createDt.goe(prevTime.toInstant()));
builder.and(qEntity.createDt.loe(now.toInstant()));
builder.and(qEntity.createDt.goe(prevTime));
builder.and(qEntity.createDt.loe(now));
List<PtyCrtfyhpBas> entity =
query.select(qEntity).from(qEntity)
.where(builder)
.orderBy(qEntity.createDt.desc())
.fetch();
return entity;
}

15
pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/controller/KacFlightPlanController.java

@ -0,0 +1,15 @@
package com.palnet.pav.kac.api.flight.plan.controller;
/**
* packageName : com.palnet.pav.kac.api.plan.controller
* fileName : KacPlanController
* author : dhji
* date : 2023-09-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-15(015) dhji 최초 생성
*/
public class KacFlightPlanController {
}

15
pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/model/KacFlightPlanModel.java

@ -0,0 +1,15 @@
package com.palnet.pav.kac.api.flight.plan.model;
/**
* packageName : com.palnet.pav.kac.api.flight.plan.model
* fileName : KacFlightPlanModel
* author : dhji
* date : 2023-09-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-15(015) dhji 최초 생성
*/
public class KacFlightPlanModel {
}

15
pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/service/KacFlightPlanService.java

@ -0,0 +1,15 @@
package com.palnet.pav.kac.api.flight.plan.service;
/**
* packageName : com.palnet.pav.kac.api.flight.plan.service
* fileName : KacFlightPlanService
* author : dhji
* date : 2023-09-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-15(015) dhji 최초 생성
*/
public class KacFlightPlanService {
}

49768
pav-server/src/main/resources/air/airgeo.json

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save