Browse Source

laanc 새로운 페이지에 따른 api 생성

pull/8/head
지대한 1 year ago
parent
commit
d578d5d297
  1. 6
      pav-server/build.gradle
  2. 5
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AcntCstmrEmModel.java
  3. 5
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AcntCstmrPwModel.java
  4. 54
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmrModel.java
  5. 1
      pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/service/AcntCstmrService.java
  6. 12
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  7. 103
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java
  8. 44
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancArcrftModel.java
  9. 16
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAreaCoordModel.java
  10. 25
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAreaModel.java
  11. 5
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancLastRs.java
  12. 27
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancPilotModel.java
  13. 30
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancPlanRq.java
  14. 5
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java
  15. 43
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancMapper.java
  16. 328
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java
  17. 5
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java
  18. 2
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java
  19. 14
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  20. 80
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java
  21. 5
      pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java
  22. 8
      pav-server/src/main/java/com/palnet/comn/utils/AreaUtils.java

6
pav-server/build.gradle

@ -63,11 +63,11 @@ dependencies {
implementation 'org.springframework.cloud:spring-cloud-aws-autoconfigure:2.0.1.RELEASE'
// lombok, mapstruct
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
implementation 'org.projectlombok:lombok:1.18.28'
compileOnly 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
// querydsl - jpa

5
pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AcntCstmrEmModel.java

@ -1,10 +1,9 @@
package com.palnet.biz.api.acnt.cstmr.model;
import java.time.Instant;
import java.util.Date;
import lombok.Data;
import java.time.Instant;
@Data
public class AcntCstmrEmModel {

5
pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AcntCstmrPwModel.java

@ -1,10 +1,9 @@
package com.palnet.biz.api.acnt.cstmr.model;
import java.time.Instant;
import java.util.Date;
import lombok.Data;
import java.time.Instant;
@Data
public class AcntCstmrPwModel {

54
pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/model/AnctCstmrModel.java

@ -0,0 +1,54 @@
package com.palnet.biz.api.acnt.cstmr.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.Instant;
/**
* packageName : com.palnet.biz.api.acnt.cstmr.model
* fileName : AnctCstmrModel
* author : dhji
* date : 2023-09-22(022)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-22(022) dhji 최초 생성
*/
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class AnctCstmrModel {
private Integer cstmrSno;
private String authId;
private String cstmrDivCd;
private String cstmrStatusCd;
private Instant cstmrStatusCngDt;
private Instant joinDt;
private String joinIp;
private String memberDivCd;
private Instant pswdUpdtDt;
private String siteCode;
private String userId;
private String rfrshToken;
private String trmnlId;
private String addr;
private String addrDtlCn;
private Instant brthdyDate;
private String clncd;
private String cntryCd;
private String email;
private String genderCd;
private String hpno;
private String ipinCi;
private String ipinDi;
private String joinCrtfyCd;
private String memberName;
private Instant updateDt;
private String updateUserId;
private String zip;
}

1
pav-server/src/main/java/com/palnet/biz/api/acnt/cstmr/service/AcntCstmrService.java

@ -196,7 +196,6 @@ public class AcntCstmrService {
for(AnctCstmerRlModel model : resultList) {
model.setEmail(EncryptUtils.decrypt(model.getEmail()));
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
model.setHpno(EncryptUtils.decrypt(model.getHpno()));
}

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

@ -1,13 +1,10 @@
package com.palnet.biz.api.bas.flight.service;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.model.*;
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel;
import com.palnet.biz.api.comn.model.ComnPagingRs;
import com.palnet.biz.api.external.model.PilotValidRq;
import com.palnet.biz.api.external.model.PilotValidRs;
import com.palnet.biz.api.external.service.TsService;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.repository.flt.*;
@ -17,10 +14,8 @@ import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel;
import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.AirspaceUtils;
import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.EncryptUtils;
import com.palnet.comn.utils.HttpUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -28,7 +23,6 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@ -43,7 +37,6 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -167,13 +160,18 @@ public class BasFlightService {
for (BasFlightPlanModel plan : effectivePlanList) {
effectivePlanArea.addAll(plan.getAreaList());
}
// TODO - 확인필요 - 특정 area에서만 고도가 같고 다른 area에서 고도가 다를 경우에 이슈가 생길수 있다 판단됨
for (BasFlightPlanAreaModel area : effectivePlanArea) {
if (rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true;
}
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq);
// TODO - 확인필요 - 동일한 비행계획서는 체크되면 안되지만 다른 비행계획서는 판단해야기 때문에 return을 하면 안되는 것으로 보임
for (BasFlightPlanModel i : effectivePlanList) {
if (rq.getPlanSno().equals(i.getPlanSno())) return;
}
if (effectivePlanList != null && !effectivePlanList.isEmpty()) {
plan:
for (BasFlightPlanModel plan : effectivePlanList) {

103
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java

@ -0,0 +1,103 @@
package com.palnet.biz.api.bas.laanc.controller;
import com.palnet.biz.api.bas.flight.template.service.TemplateService;
import com.palnet.biz.api.bas.laanc.model.BasLaancPlanRq;
import com.palnet.biz.api.bas.laanc.model.BasLaancLastRs;
import com.palnet.biz.api.bas.laanc.model.BasLaancValidatedRs;
import com.palnet.biz.api.bas.laanc.service.BasLaancService;
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.comn.exception.CustomException;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* packageName : com.palnet.biz.api.bas.laanc.controller
* fileName : BasLaancController
* author : dhji
* date : 2023-09-22(022)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-22(022) dhji 최초 생성
*/
@Slf4j
@Tag(name = "LAANC", description = "LAANC 관련 API")
@RequiredArgsConstructor
@RequestMapping(value = "/api/bas/laanc", produces = {MediaType.APPLICATION_JSON_VALUE})
@RestController
public class BasLaancController {
private final BasLaancService basLaancService;
private final TemplateService templateService;
// LAANC 검증
@PostMapping(value = "/plan/valid")
@ApiOperation(value = "LAANC 검증")
@Tag(name = "LAANC 검증", description = "LAANC 관련 API")
public ResponseEntity<? extends BasicResponse> validationLaanc(BasLaancPlanRq rq) {
BasLaancValidatedRs rs = null;
try {
log.debug(">>> rq : {}", rq);
rs = basLaancService.validationLaanc(rq);
log.debug(">>> rs : {}", rs);
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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<>(rs));
}
// 비행계획서 등록, 약관 등록, 공문 생성
@PostMapping(value = "/plan/create")
@ApiOperation(value = "비행계획서 등록")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> createPlan(@RequestBody BasLaancPlanRq rq) {
BasLaancLastRs rs = null;
try {
rs = basLaancService.createFlightPlan(rq);
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} 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<>(rs));
}
@GetMapping("/laanc-pdf/download")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ApiOperation(value = "Laanc 공문 다운로드")
public void downloadPDF(int fileSno) {
templateService.fileDownload(fileSno);
}
}

44
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancArcrftModel.java

@ -0,0 +1,44 @@
package com.palnet.biz.api.bas.laanc.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.palnet.biz.config.convert.InstantDateStrSerializer;
import lombok.Data;
import java.time.Instant;
@Data
public class BasLaancArcrftModel {
private Integer planArcrftSno;
private Integer planSno;
private Integer arcrftSno;
private String idntfNum;
private String groupNm;
private String prdctNum;
private String arcrftTypeCd;
private String arcrftModelNm;
private String prdctCmpnNm;
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant prdctDate;
private double arcrftLngth;
private double arcrftWdth;
private double arcrftHght;
private double arcrftWght;
private String wghtTypeCd;
private String imageUrl;
private double takeoffWght;
private String useYn;
private String cameraYn;
private String insrncYn;
private String ownerNm;
private String createUserId;
private Instant createDt;
private String updateUserId;
private Instant updateDt;
private String docState = "R";
private String idntfTypeCd;
// kac 추가 필드
private String acrftInsuranceYn;
@JsonSerialize(using = InstantDateStrSerializer.class)
private Instant insuranceExperiod;
private String corporationNm;
}

16
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAreaCoordModel.java

@ -0,0 +1,16 @@
package com.palnet.biz.api.bas.laanc.model;
import lombok.Data;
import java.time.Instant;
@Data
public class BasLaancAreaCoordModel {
private Integer planAreaCoordSno;
private Integer planAreaSno;
private double lat;
private double lon;
private String createUserId;
private Instant createDt;
private String docState = "R";
}

25
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancAreaModel.java

@ -0,0 +1,25 @@
package com.palnet.biz.api.bas.laanc.model;
import lombok.Data;
import java.time.Instant;
import java.util.List;
@Data
public class BasLaancAreaModel {
private Integer planAreaSno;
private Integer planSno;
private String areaType;
private String fltMethod;
private Integer bufferZone;
private String fltElev;
private String createUserId;
private Instant createDt;
private String updateUserId;
private Instant updateDt;
private String docState = "R";
private List<BasLaancAreaCoordModel> coordList;
private List<BasLaancAreaCoordModel> bufferCoordList;
// kac 추가 필드
private String fltMothoeRm;
}

5
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanCreateRs.java → pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancLastRs.java

@ -1,6 +1,5 @@
package com.palnet.biz.api.bas.flight.model;
package com.palnet.biz.api.bas.laanc.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -21,6 +20,6 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BasFlightPlanCreateRs {
public class BasLaancLastRs {
private String pdfUrl;
}

27
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancPilotModel.java

@ -0,0 +1,27 @@
package com.palnet.biz.api.bas.laanc.model;
import lombok.Data;
import java.time.Instant;
@Data
public class BasLaancPilotModel {
private Integer planPilotSno;
private Integer planSno;
private Integer cstmrSno;
private String groupNm;
private String memberName;
private String email;
private String hpno;
private String clncd;
private String addr;
private String addrDtlCn;
private String zip;
private String qlfcNo;
private String carrer;
private String createUserId;
private Instant createDt;
private String updateUserId;
private Instant updateDt;
private String docState = "R";
}

30
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancPlanRq.java

@ -0,0 +1,30 @@
package com.palnet.biz.api.bas.laanc.model;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel;
import lombok.Data;
import java.time.Instant;
import java.util.List;
@Data
public class BasLaancPlanRq {
private Integer planSno;
private Integer cstmrSno;
private String memberName;
private Instant schFltStDt;
private Instant schFltEndDt;
private String fltPurpose;
private String corpRegYn;
private String serviceType;
private String docState = "R";
private List<BasLaancAreaModel> areaList;
// private List<BasFlightPlanPilotModel> pilotList;
private List<BasLaancArcrftModel> arcrftList;
// laanc 정보
private BasLaancValidatedRs validatedRs;
// 약관동의
private List<AnctCstmrTermsModel> terms;
}

5
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanLaancRs.java → pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java

@ -1,4 +1,4 @@
package com.palnet.biz.api.bas.flight.model;
package com.palnet.biz.api.bas.laanc.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
@ -21,7 +21,8 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BasFlightPlanLaancRs {
public class BasLaancValidatedRs {
private String pilotQlfcYn; // 자격여부
private String acrftInsuranceYn; // 항공기보험여부
private String acrftDuplicatedYn; // 기체 중복여부

43
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancMapper.java

@ -0,0 +1,43 @@
package com.palnet.biz.api.bas.laanc.service;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancArcrftModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancAreaCoordModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancAreaModel;
import com.palnet.biz.api.bas.laanc.model.BasLaancPlanRq;
import com.palnet.biz.jpa.entity.*;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
/**
* packageName : com.palnet.biz.api.bas.laanc.service
* fileName : BasLaancMapper
* author : dhji
* date : 2023-09-22(022)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-22(022) dhji 최초 생성
*/
@Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface BasLaancMapper {
BasLaancMapper MAPPER = Mappers.getMapper(BasLaancMapper.class);
FltPlanBas mergeToEntity(@MappingTarget FltPlanBas rq1, FltPlanBas rq2);
FltPlanBas modelToPlanEntity(AnctCstmrModel rq);
FltPlanBas modelToPlanEntity(BasLaancPlanRq rq);
FltPlanArea modelToPlanEntity(BasLaancAreaModel rq);
FltPlanAreaCoord modelToPlanEntity(BasLaancAreaCoordModel rq);
FltPlanArcrft modelToPlanEntity(BasLaancArcrftModel rq);
FltPlanPilot modelToPilotEntity(AnctCstmrModel rq);
}

328
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java

@ -0,0 +1,328 @@
package com.palnet.biz.api.bas.laanc.service;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrModel;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.laanc.model.*;
import com.palnet.biz.api.external.model.PilotValidRq;
import com.palnet.biz.api.external.model.PilotValidRs;
import com.palnet.biz.api.external.service.TsService;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.repository.flt.*;
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository;
import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository;
import com.palnet.biz.jpa.repository.pty.PtyTermsAgreeTxnRepository;
import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.AirspaceUtils;
import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.HttpUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* packageName : com.palnet.biz.api.bas.laanc.service
* fileName : BasLaancService
* author : dhji
* date : 2023-09-22(022)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-22(022) dhji 최초 생성
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class BasLaancService {
private final CtrTrnsLctnService ctrTrnsLctnService;
private final FltPlanBasRepository fltPlanBasRepository;
private final FltPlanArcrftRepository fltPlanArcrftRepository;
private final FltPlanAreaRepository fltPlanAreaRepository;
private final FltPlanAreaCoordRepository fltPlanAreaCoordRepository;
private final FltPlanPilotRepository fltPlanPilotRepository;
private final FltPlanQueryRepository fltPlanQueryRepository;
private final PtyGroupQueryRepository ptyPlanQueryRepository;
private final PtyCstmrQueryRepository ptyCstmrQueryRepository;
private final PtyTermsAgreeTxnRepository ptyTermsAgreeTxnRepository;
private final TsService tsService;
private final JwtTokenUtil jwtTokenUtil;
private final AreaUtils areaUtils;
// LAANC 검증
public BasLaancValidatedRs validationLaanc(BasLaancPlanRq rq) {
BasLaancValidatedRs basLaancValidatedRs = this.validationAreaAndArcrft(rq);
// TODO 조종사 자격 및 기체보험 확인
PilotValidRq pilotValidRq = PilotValidRq.builder()
.pilotci("조종사CI")
.declarationnum("기체신고번호")
.build();
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq);
if (pilotValidRs == null) {
basLaancValidatedRs.setPilotQlfcYn("N");
basLaancValidatedRs.setAcrftInsuranceYn("N");
basLaancValidatedRs.setCorpRegYn("N");
} else {
basLaancValidatedRs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn());
basLaancValidatedRs.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn());
basLaancValidatedRs.setCorpRegYn(pilotValidRs.getCorpregyn());
}
return basLaancValidatedRs;
}
// 비행계획서 등록, 약관 등록, 공문 생성
public BasLaancLastRs createFlightPlan(BasLaancPlanRq rq) {
BasLaancValidatedRs basLaancValidatedRs = this.validationAreaAndArcrft(rq);
// LAANC가 검증된것들만 DB저장
if (!basLaancValidatedRs.isValidAirspace()) new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
// 비행계획서 - // TODO 작성자 정보 불러와서 넣기
String userId = jwtTokenUtil.getUserIdByToken();
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken();
// 개인정보 가져오기 - 비행계획서 작성자 정보, 조종사 정보
AnctCstmrModel cstmrInfo = ptyCstmrQueryRepository.findByCstmrSno(cstmrSno);
FltPlanBas cstmrFltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(cstmrInfo);
FltPlanBas rqFltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(rq);
FltPlanBas fltPlanBas = BasLaancMapper.MAPPER.mergeToEntity(rqFltPlanBas, cstmrFltPlanBas);
fltPlanBas.setDelYn("N");
fltPlanBas.setAprvlYn("N");
fltPlanBas.setCreateUserId(userId);
fltPlanBas.setUpdateUserId(userId);
// 사업자 유무 - TS 데이터
fltPlanBas.setCorpRegYn(rq.getValidatedRs().getCorpRegYn()); // 사업자유무
fltPlanBas.setServiceType("PAV-KAC");
FltPlanBas rBasEntity = fltPlanBasRepository.save(fltPlanBas);
Integer planSno = rBasEntity.getPlanSno();
// 비행구역
List<BasLaancAreaModel> basLaancAreaModelList = rq.getAreaList();
if (basLaancAreaModelList != null && !basLaancAreaModelList.isEmpty()) {
for (BasLaancAreaModel laancAreaModel : basLaancAreaModelList) {
FltPlanArea areaEntity = BasLaancMapper.MAPPER.modelToPlanEntity(laancAreaModel);
areaEntity.setPlanSno(planSno);
areaEntity.setCreateUserId(userId);
areaEntity.setUpdateUserId(userId);
FltPlanArea rAreaEntity = fltPlanAreaRepository.save(areaEntity);
Integer planAreaSno = rAreaEntity.getPlanAreaSno();
List<BasLaancAreaCoordModel> laancAreaModelCoordList = laancAreaModel.getCoordList();
if (laancAreaModelCoordList != null && !laancAreaModelCoordList.isEmpty()) {
for (BasLaancAreaCoordModel basLaancAreaCoordModel : laancAreaModelCoordList) {
FltPlanAreaCoord coordEntity = BasLaancMapper.MAPPER.modelToPlanEntity(basLaancAreaCoordModel);
coordEntity.setPlanAreaSno(planAreaSno);
coordEntity.setCreateUserId(userId);
fltPlanAreaCoordRepository.save(coordEntity);
}
}
}
}
// 조종사 - 사용자 정보로 저장
FltPlanPilot pilotEntity = BasLaancMapper.MAPPER.modelToPilotEntity(cstmrInfo);
pilotEntity.setPlanSno(planSno);
pilotEntity.setCreateUserId(userId);
pilotEntity.setUpdateUserId(userId);
fltPlanPilotRepository.save(pilotEntity);
// 기체
List<BasLaancArcrftModel> basLaancArcrftModelList = rq.getArcrftList();
if (basLaancArcrftModelList != null && !basLaancArcrftModelList.isEmpty()) {
for (BasLaancArcrftModel basLaancArcrftModel : basLaancArcrftModelList) {
FltPlanArcrft arcrftEntity = BasLaancMapper.MAPPER.modelToPlanEntity(basLaancArcrftModel);
arcrftEntity.setPlanSno(planSno);
arcrftEntity.setCreateUserId(userId);
arcrftEntity.setUpdateUserId(userId);
// 추가 필드
arcrftEntity.setAcrftInsuranceYn(rq.getValidatedRs().getAcrftInsuranceYn()); // 보험여부
// arcrftEntity.setInsuranceExperiod(null); // 보헌 유효기간
// arcrftEntity.setCorporationNm(null); // 법인명
fltPlanArcrftRepository.save(arcrftEntity);
}
}
// 약관 저장
if (rq.getTerms() != null && !rq.getTerms().isEmpty()) {
for (AnctCstmrTermsModel agree : rq.getTerms()) {
PtyTermsAgreeTxn agreeEntity = new PtyTermsAgreeTxn();
agreeEntity.setCstmrSno(fltPlanBas.getCstmrSno());
agreeEntity.setProcIp(HttpUtils.getRequestIp());
agreeEntity.setTermsSno(agree.getTermsSno());
agreeEntity.setUpdateDt(Instant.now());
agreeEntity.setUpdateUserId(userId);
agreeEntity.setAgreeYn(agree.getAgreeYn());
if (agree.getAgreeYn().equals("Y")) {
agreeEntity.setAgreeDt(Instant.now());
}
ptyTermsAgreeTxnRepository.save(agreeEntity);
}
} else {
throw new CustomException(ErrorCode.FAIL, "약관등록 실패");
}
// TODO PDF 생성 후 URL 가져오기
BasLaancLastRs rs = BasLaancLastRs.builder()
.pdfUrl("....")
.build();
return rs;
}
// LAANC 검증 및 기체 중복 확인
private BasLaancValidatedRs validationAreaAndArcrft(BasLaancPlanRq rq) {
// 초기화
BasLaancValidatedRs rs = BasLaancValidatedRs.builder()
.pilotQlfcYn("N")
.acrftInsuranceYn("N")
.acrftDuplicatedYn("N")
.planAreaDuplicatdYn("N")
.evaluatedTargetAreaYn("N")
.flightAreaYn("N")
.build();
// 비행계획서
List<FltPlanBas> fltPlanBasList = fltPlanBasRepository.findBySchFltStDtGreaterThanEqualAndSchFltEndDtLessThanEqualAndDelYn(rq.getSchFltEndDt(), rq.getSchFltStDt(), "N");
if (fltPlanBasList != null && !fltPlanBasList.isEmpty()) {
if (rq.getPlanSno() != null) {
// 동일한 비행계획서는 검증에서 제외 처리
fltPlanBasList = fltPlanBasList.stream().filter(fltPlanBas -> !rq.getPlanSno().equals(fltPlanBas.getPlanSno())).collect(Collectors.toList());
}
// 비행계획서 planSno 모음
List<Integer> planSnoList = fltPlanBasList.stream().map(FltPlanBas::getPlanSno).collect(Collectors.toList());
// 지역
// List<FltPlanArea> fltPlanAreaList = fltPlanAreaRepository.findByPlanSnoIn(planSnoList);
for (FltPlanBas fltPlanBas : fltPlanBasList) {
// 1. 구역조회
List<FltPlanArea> fltPlanAreaList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(fltPlanBas.getPlanSno());
// 2. 좌표 조회 -> 영역 포함 여부 확인
for (FltPlanArea fltPlanArea : fltPlanAreaList) {
String effectiveFltElev = fltPlanArea.getFltElev();
List<FltPlanAreaCoord> fltPlanAreaCoordList = fltPlanAreaCoordRepository.findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(fltPlanArea.getPlanAreaSno());
if (fltPlanAreaCoordList == null || fltPlanAreaCoordList.isEmpty()) continue;
// 2-1 영역 좌표
List<Coordinate> effectiveCoordList = fltPlanAreaCoordList.stream().map(fltPlanAreaCoord -> new Coordinate(fltPlanAreaCoord.getLon(), fltPlanAreaCoord.getLat())).collect(Collectors.toList());
List<Coordinate> effectiveCoordBufferList = new ArrayList<>();
// Query에서 조회한 좌표로 버퍼좌표 생성
if ("LINE".equals(fltPlanArea.getAreaType())) {
List<Coordinate> trans = areaUtils.transform(effectiveCoordList, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, fltPlanArea.getBufferZone());
effectiveCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
}
if ("POLYGON".equals(fltPlanArea.getAreaType())) {
effectiveCoordBufferList.addAll(effectiveCoordList);
}
if ("CIRCLE".equals(fltPlanArea.getAreaType())) {
effectiveCoordBufferList = areaUtils.createCircle(effectiveCoordList.get(0), fltPlanArea.getBufferZone());
}
for (BasLaancAreaModel basLaancAreaModel : rq.getAreaList()) {
String targetFltElev = basLaancAreaModel.getFltElev();
// TODO 추후 특정 고도 범위 확인
boolean isEqualsFltElev = effectiveFltElev.equals(targetFltElev);
//rq로 들어온 좌표로 버퍼좌표 생성
List<Coordinate> targetCoords = basLaancAreaModel.getCoordList().stream().map(coord -> new Coordinate(coord.getLon(), coord.getLat())).collect(Collectors.toList());
List<Coordinate> targetBufferCoords = new ArrayList<>();
if ("LINE".equals(basLaancAreaModel.getAreaType())) {
List<Coordinate> trans = areaUtils.transform(targetCoords, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, fltPlanArea.getBufferZone());
targetBufferCoords = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
} else if ("POLYGON".equals(basLaancAreaModel.getAreaType())) {
targetBufferCoords.addAll(targetCoords);
} else if ("CIRCLE".equals(basLaancAreaModel.getAreaType())) {
targetBufferCoords = areaUtils.createCircle(targetCoords.get(0), fltPlanArea.getBufferZone());
}
// 검증
Geometry targetGeometry = areaUtils.coordinateToGeometry(targetBufferCoords);
Geometry effectiveGeometry = areaUtils.coordinateToGeometry(effectiveCoordBufferList);
if (targetGeometry.intersects(effectiveGeometry) && isEqualsFltElev) {
rs.setPlanAreaDuplicatdYn("Y");
}
}
}
}
// 기체 중복 여부 확인
List<BasLaancArcrftModel> arcrftList = rq.getArcrftList();
if (arcrftList != null && !arcrftList.isEmpty()) {
List<FltPlanArcrft> fltPlanArcrftList = fltPlanArcrftRepository.findByPlanSnoIn(planSnoList);
if (fltPlanArcrftList != null && !fltPlanArcrftList.isEmpty()) {
boolean isDuplicatedArcrft = arcrftList.stream().anyMatch(arcrft ->
fltPlanArcrftList.stream().anyMatch(fltPlanArcrft ->
arcrft.getIdntfNum().equals(fltPlanArcrft.getIdntfNum())
)
);
if (isDuplicatedArcrft) {
rs.setAcrftDuplicatedYn("Y");
}
}
}
}
// 공역 중복 확인
for (BasLaancAreaModel basLaancAreaModel : rq.getAreaList()) {
List<Coordinate> rqCoord = new ArrayList<>();
List<Coordinate> rqCoordBufferList = new ArrayList<>();
//rq로 들어온 좌표로 버퍼좌표 생성
for (BasLaancAreaCoordModel basLaancAreaCoordModel : basLaancAreaModel.getCoordList()) {
Coordinate coords = new Coordinate(basLaancAreaCoordModel.getLon(), basLaancAreaCoordModel.getLat());
rqCoord.add(coords);
}
if ("LINE".equals(basLaancAreaModel.getAreaType())) {
List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, basLaancAreaModel.getBufferZone());
rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
} else if ("POLYGON".equals(basLaancAreaModel.getAreaType())) {
rqCoordBufferList.addAll(rqCoord);
} else if ("CIRCLE".equals(basLaancAreaModel.getAreaType())) {
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), basLaancAreaModel.getBufferZone());
}
AirspaceUtils airspaceUtils = AirspaceUtils.getInstance();
Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList);
Integer fltElev = basLaancAreaModel.getFltElev() != null ? Integer.valueOf(basLaancAreaModel.getFltElev()) : 0;
AirspaceUtils.FeatureInfo featureInfo = new AirspaceUtils.FeatureInfo(null, null, 0, fltElev, rqGeometry);
// 평가 가능 지역 판단
boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo);
rs.setEvaluatedTargetAreaYn(duplicatedAirspace ? "Y" : "N");
// 비행 가능 지역 판단
if (duplicatedAirspace) {
boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N");
} else {
rs.setFlightAreaYn("N");
}
}
return rs;
}
}

5
pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java

@ -1,15 +1,14 @@
package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanArcrft;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
public interface FltPlanArcrftRepository extends JpaRepository<FltPlanArcrft, Integer> {
List<FltPlanArcrft> findByPlanSnoIn(Collection<Integer> planSnos);
List<FltPlanArcrft> findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno);
@Query("select f from FltPlanArcrft f " +

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

@ -5,9 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.Collection;
import java.util.List;
public interface FltPlanAreaRepository extends JpaRepository<FltPlanArea, Integer> {
List<FltPlanArea> findByPlanSnoIn(Collection<Integer> planSnos);
List<FltPlanArea> findByPlanSnoOrderByPlanAreaSnoAsc(Integer planSno);
@Query(value = " select PLAN_AREA_SNO from FLT_PLAN_AREA "

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

@ -14,12 +14,15 @@ import java.util.List;
import java.util.Optional;
public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer> {
List<FltPlanBas> findBySchFltStDtGreaterThanEqualAndSchFltEndDtLessThanEqualAndDelYn(Instant schFltStDt, Instant schFltEndDt, String delYn);
@Query("select f from FltPlanBas f " +
"where ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltEndDt)"
+ "or (SCH_FLT_ST_DT >= :schFltStDt and (SCH_FLT_ST_DT <= :schFltEndDt and SCH_FLT_END_DT >= :schFltEndDt ))"
+ "or ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltStDt) and SCH_FLT_END_DT <= :schFltEndDt)"
+ "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'")
List<FltPlanBas> findByStartEndDate(@Param("schFltStDt") Date schFltStDt,@Param("schFltEndDt") Date schFltEndDt);
List<FltPlanBas> findByStartEndDate(@Param("schFltStDt") Date schFltStDt, @Param("schFltEndDt") Date schFltEndDt);
@Query("select f from FltPlanBas f " +
@ -40,11 +43,12 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
@Query("Select f from FltPlanBas f " +
"where f.cstmrSno = :cstmrSno " +
"and f.aprvlYn = 'Y' " )
List<FltPlanBas> findByPlanSno(@Param("cstmrSno")int cstmrSno);
"and f.aprvlYn = 'Y' ")
List<FltPlanBas> findByPlanSno(@Param("cstmrSno") int cstmrSno);
@Query("Select f from FltPlanBas f " +
"where f.planSno = :planSno " +
"and f.aprvlYn = 'Y' " )
List<FltPlanBas> findBasList(@Param("planSno")int planSno);
"and f.aprvlYn = 'Y' ")
List<FltPlanBas> findBasList(@Param("planSno") int planSno);
}

80
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java

@ -2,6 +2,7 @@ package com.palnet.biz.jpa.repository.pty;
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRqModel;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmerRlModel;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrModel;
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel;
@ -19,12 +20,12 @@ import java.util.List;
@Log4j2
@Repository
@RequiredArgsConstructor
public class PtyCstmrQueryRepository{
public class PtyCstmrQueryRepository {
private final JPAQueryFactory query;
public boolean findCstmrByUserId(String userId){
public boolean findCstmrByUserId(String userId) {
boolean result = false;
@ -40,13 +41,14 @@ public class PtyCstmrQueryRepository{
.from(basEntity)
.where(builder)
.fetchFirst();
if(entity != null) {
if (entity != null) {
result = true;
}
return result;
}
public boolean certifNum(String name , String hpno) {
public boolean certifNum(String name, String hpno) {
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
@ -58,13 +60,13 @@ public class PtyCstmrQueryRepository{
.where(builder)
.fetchFirst();
boolean result = false;
if(entity != null) {
if (entity != null) {
result = true;
}
return result;
}
public String findUserId(String name , String hpno) {
public String findUserId(String name, String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
@ -82,7 +84,8 @@ public class PtyCstmrQueryRepository{
String userId = entity.getUserId();
return userId;
}
public PtyCstmrBas findUserPw(String id , String hpno) {
public PtyCstmrBas findUserPw(String id, String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
@ -116,7 +119,7 @@ public class PtyCstmrQueryRepository{
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
.where(builder)
.fetchFirst();
if(entity != null) {
if (entity != null) {
result = true;
}
return result;
@ -136,7 +139,7 @@ public class PtyCstmrQueryRepository{
.fetchFirst();
List<PtyCstmrGroup> pcgEntityList = null;
if(entity != null){
if (entity != null) {
BooleanBuilder groupBuilder = new BooleanBuilder();
groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno())
.and(groupEntity.joinYn.eq("Y")));
@ -148,16 +151,16 @@ public class PtyCstmrQueryRepository{
}
if(entity != null) {
if (entity != null) {
JwtUserModel model = new JwtUserModel();
model.setAuth(entity.getAuthId());
model.setUserId(entity.getUserId());
model.setCstmrSno(entity.getCstmrSno());
model.setCstmrStatusCd(entity.getCstmrStatusCd());
model.setUserPswd(entity.getUserPswd());
if(pcgEntityList != null && !pcgEntityList.isEmpty()){
if (pcgEntityList != null && !pcgEntityList.isEmpty()) {
List<JwtGroupModel> groupModelList = new ArrayList<>();
for(PtyCstmrGroup pcgEntity : pcgEntityList){
for (PtyCstmrGroup pcgEntity : pcgEntityList) {
JwtGroupModel groupModel = new JwtGroupModel();
groupModel.setGroupId(pcgEntity.getGroupId());
groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd());
@ -168,7 +171,7 @@ public class PtyCstmrQueryRepository{
return model;
}else {
} else {
return null;
}
@ -183,7 +186,7 @@ public class PtyCstmrQueryRepository{
builder.and(basEntity.cstmrSno.eq(cstmrSno));
JwtProfileRsModel model = query.select(Projections.bean(JwtProfileRsModel.class ,
JwtProfileRsModel model = query.select(Projections.bean(JwtProfileRsModel.class,
basEntity.cstmrSno,
basEntity.userId,
basEntity.authId,
@ -201,7 +204,7 @@ public class PtyCstmrQueryRepository{
}
public JwtUserModel findRefreshtoken(int cstmrSno , String refreshToken) {
public JwtUserModel findRefreshtoken(int cstmrSno, String refreshToken) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
@ -211,7 +214,7 @@ public class PtyCstmrQueryRepository{
.from(basEntity)
.where(builder)
.fetchFirst();
if(entity != null) {
if (entity != null) {
JwtUserModel model = new JwtUserModel();
model.setAuth(entity.getAuthId());
model.setUserId(entity.getUserId());
@ -221,7 +224,7 @@ public class PtyCstmrQueryRepository{
return model;
}else {
} else {
return null;
}
}
@ -251,6 +254,47 @@ public class PtyCstmrQueryRepository{
return list;
}
public AnctCstmrModel findByCstmrSno(int cstmrSno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
AnctCstmrModel anctCstmrModel = query
.select(Projections.bean(
AnctCstmrModel.class,
bas.cstmrSno,
bas.authId,
bas.cstmrDivCd,
bas.cstmrStatusCd,
bas.cstmrStatusCngDt,
bas.joinDt,
bas.joinIp,
bas.memberDivCd,
bas.pswdUpdtDt,
bas.siteCode,
bas.trmnlId,
dtl.addr,
dtl.addrDtlCn,
dtl.brthdyDate,
dtl.clncd,
dtl.email,
dtl.genderCd,
dtl.hpno,
dtl.ipinCi,
dtl.ipinDi,
dtl.joinCrtfyCd,
dtl.memberName,
dtl.updateDt,
dtl.updateUserId,
dtl.zip
))
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(bas.cstmrSno.eq(cstmrSno))
.fetchFirst();
return anctCstmrModel;
}
public AcntCstmrRqModel findpassword(String userId) {
@ -264,7 +308,7 @@ public class PtyCstmrQueryRepository{
.where(builder)
.fetchFirst();
if(entity != null) {
if (entity != null) {
JwtUserModel model = new JwtUserModel();
model.setCstmrSno(entity.getCstmrSno());
model.setUserPswd(entity.getUserPswd());

5
pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java

@ -126,6 +126,11 @@ public class AirspaceUtils {
public Geometry createGeometryByCoordinate(List<Coordinate> target, String type) {
Geometry geometry = null;
if ("Polygon".equals(type)) {
if (target == null || target.isEmpty()) return null;
log.info(">>> {}", target.get(0) != target.get(target.size() - 1));
if (target.get(0) != target.get(target.size() - 1)) {
target.add(target.get(0));
}
geometry = this.geometryFactory.createPolygon(target.toArray(new Coordinate[0]));
} else if ("LineString".equals(type)) {
geometry = this.geometryFactory.createLineString(target.toArray(new Coordinate[0]));

8
pav-server/src/main/java/com/palnet/comn/utils/AreaUtils.java

@ -332,4 +332,12 @@ public class AreaUtils {
}
}
}
public Geometry coordinateToGeometry(List<Coordinate> target) {
if (target == null || target.isEmpty()) return null;
log.info(">>> {}", target.get(0) != target.get(target.size() - 1));
if (target.get(0) != target.get(target.size() - 1)) {
target.add(target.get(0));
}
return geometryFactory.createPolygon(target.toArray(new Coordinate[]{}));
}
}

Loading…
Cancel
Save