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. 34
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  20. 552
      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' implementation 'org.springframework.cloud:spring-cloud-aws-autoconfigure:2.0.1.RELEASE'
// lombok, mapstruct // lombok, mapstruct
implementation 'org.mapstruct:mapstruct:1.5.5.Final' compileOnly 'org.projectlombok:lombok:1.18.28'
implementation '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.mapstruct:mapstruct-processor:1.5.5.Final'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0' annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
// querydsl - jpa // 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; package com.palnet.biz.api.acnt.cstmr.model;
import java.time.Instant;
import java.util.Date;
import lombok.Data; import lombok.Data;
import java.time.Instant;
@Data @Data
public class AcntCstmrEmModel { 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; package com.palnet.biz.api.acnt.cstmr.model;
import java.time.Instant;
import java.util.Date;
import lombok.Data; import lombok.Data;
import java.time.Instant;
@Data @Data
public class AcntCstmrPwModel { 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) { for(AnctCstmerRlModel model : resultList) {
model.setEmail(EncryptUtils.decrypt(model.getEmail())); model.setEmail(EncryptUtils.decrypt(model.getEmail()));
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
model.setHpno(EncryptUtils.decrypt(model.getHpno())); 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; 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.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.api.bas.flight.model.*;
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; import com.palnet.biz.api.bas.group.model.BasGroupJoinModel;
import com.palnet.biz.api.comn.model.ComnPagingRs; 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.api.external.service.TsService;
import com.palnet.biz.jpa.entity.*; import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.repository.flt.*; 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.biz.scheduler.ctr.service.CtrTrnsLctnService;
import com.palnet.comn.code.ErrorCode; import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException; import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.AirspaceUtils;
import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.EncryptUtils; import com.palnet.comn.utils.EncryptUtils;
import com.palnet.comn.utils.HttpUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; 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.JSONParser;
import org.json.simple.parser.ParseException; import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -43,7 +37,6 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -167,13 +160,18 @@ public class BasFlightService {
for (BasFlightPlanModel plan : effectivePlanList) { for (BasFlightPlanModel plan : effectivePlanList) {
effectivePlanArea.addAll(plan.getAreaList()); effectivePlanArea.addAll(plan.getAreaList());
} }
// TODO - 확인필요 - 특정 area에서만 고도가 같고 다른 area에서 고도가 다를 경우에 이슈가 생길수 있다 판단됨
for (BasFlightPlanAreaModel area : effectivePlanArea) { for (BasFlightPlanAreaModel area : effectivePlanArea) {
if (rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true; if (rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true;
} }
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq);
// TODO - 확인필요 - 동일한 비행계획서는 체크되면 안되지만 다른 비행계획서는 판단해야기 때문에 return을 하면 안되는 것으로 보임
for (BasFlightPlanModel i : effectivePlanList) { for (BasFlightPlanModel i : effectivePlanList) {
if (rq.getPlanSno().equals(i.getPlanSno())) return; if (rq.getPlanSno().equals(i.getPlanSno())) return;
} }
if (effectivePlanList != null && !effectivePlanList.isEmpty()) { if (effectivePlanList != null && !effectivePlanList.isEmpty()) {
plan: plan:
for (BasFlightPlanModel plan : effectivePlanList) { 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.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -21,6 +20,6 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class BasFlightPlanCreateRs { public class BasLaancLastRs {
private String pdfUrl; 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 com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -21,7 +21,8 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class BasFlightPlanLaancRs { public class BasLaancValidatedRs {
private String pilotQlfcYn; // 자격여부 private String pilotQlfcYn; // 자격여부
private String acrftInsuranceYn; // 항공기보험여부 private String acrftInsuranceYn; // 항공기보험여부
private String acrftDuplicatedYn; // 기체 중복여부 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; package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanArcrft; 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.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface FltPlanArcrftRepository extends JpaRepository<FltPlanArcrft, Integer> { public interface FltPlanArcrftRepository extends JpaRepository<FltPlanArcrft, Integer> {
List<FltPlanArcrft> findByPlanSnoIn(Collection<Integer> planSnos);
List<FltPlanArcrft> findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno); List<FltPlanArcrft> findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno);
@Query("select f from FltPlanArcrft f " + @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.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import java.util.Collection;
import java.util.List; import java.util.List;
public interface FltPlanAreaRepository extends JpaRepository<FltPlanArea, Integer> { public interface FltPlanAreaRepository extends JpaRepository<FltPlanArea, Integer> {
List<FltPlanArea> findByPlanSnoIn(Collection<Integer> planSnos);
List<FltPlanArea> findByPlanSnoOrderByPlanAreaSnoAsc(Integer planSno); List<FltPlanArea> findByPlanSnoOrderByPlanAreaSnoAsc(Integer planSno);
@Query(value = " select PLAN_AREA_SNO from FLT_PLAN_AREA " @Query(value = " select PLAN_AREA_SNO from FLT_PLAN_AREA "

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

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

552
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.AcntCstmrRqModel;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmerRlModel; 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.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel;
@ -19,260 +20,303 @@ import java.util.List;
@Log4j2 @Log4j2
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class PtyCstmrQueryRepository{ public class PtyCstmrQueryRepository {
private final JPAQueryFactory query; private final JPAQueryFactory query;
public boolean findCstmrByUserId(String userId){ public boolean findCstmrByUserId(String userId) {
boolean result = false; boolean result = false;
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas; QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태 builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
builder.and(basEntity.userId.eq(userId)); builder.and(basEntity.userId.eq(userId));
PtyCstmrBas entity = query.select(basEntity) PtyCstmrBas entity = query.select(basEntity)
.from(basEntity) .from(basEntity)
.where(builder) .where(builder)
.fetchFirst(); .fetchFirst();
if(entity != null) { if (entity != null) {
result = true; result = true;
} }
return result; return result;
} }
public boolean certifNum(String name , String hpno) {
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl; public boolean certifNum(String name, String hpno) {
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(dtl.hpno.eq(hpno)); BooleanBuilder builder = new BooleanBuilder();
builder.and(dtl.memberName.eq(name)); builder.and(dtl.hpno.eq(hpno));
builder.and(dtl.memberName.eq(name));
PtyCstmrDtl entity = query.select(dtl)
.from(dtl) PtyCstmrDtl entity = query.select(dtl)
.where(builder) .from(dtl)
.fetchFirst(); .where(builder)
boolean result = false; .fetchFirst();
if(entity != null) { boolean result = false;
result = true; if (entity != null) {
} result = true;
return result; }
} return result;
}
public String findUserId(String name , String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas; public String findUserId(String name, String hpno) {
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl; QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.cstmrStatusCd.eq("A")); BooleanBuilder builder = new BooleanBuilder();
builder.and(dtl.hpno.eq(hpno)); builder.and(bas.cstmrStatusCd.eq("A"));
builder.and(dtl.memberName.eq(name)); builder.and(dtl.hpno.eq(hpno));
PtyCstmrBas entity = query.select(bas) builder.and(dtl.memberName.eq(name));
.from(bas) PtyCstmrBas entity = query.select(bas)
.leftJoin(dtl) .from(bas)
.on(bas.cstmrSno.eq(dtl.cstmrSno)) .leftJoin(dtl)
.where(builder) .on(bas.cstmrSno.eq(dtl.cstmrSno))
.fetchFirst(); .where(builder)
.fetchFirst();
String userId = entity.getUserId();
return userId; String userId = entity.getUserId();
} return userId;
public PtyCstmrBas findUserPw(String id , String hpno) { }
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl; public PtyCstmrBas findUserPw(String id, String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder(); QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
builder.and(bas.cstmrStatusCd.eq("A"));
builder.and(dtl.hpno.eq(hpno)); BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.userId.eq(id)); builder.and(bas.cstmrStatusCd.eq("A"));
PtyCstmrBas entity = query.select(bas) builder.and(dtl.hpno.eq(hpno));
.from(bas) builder.and(bas.userId.eq(id));
.leftJoin(dtl) PtyCstmrBas entity = query.select(bas)
.on(bas.cstmrSno.eq(dtl.cstmrSno)) .from(bas)
.where(builder) .leftJoin(dtl)
.fetchFirst(); .on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(builder)
return entity; .fetchFirst();
}
return entity;
public boolean findCstmrByHpno(String hpno) { }
boolean result = false;
public boolean findCstmrByHpno(String hpno) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas; boolean result = false;
QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder(); QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
builder.and(dtlEntity.hpno.eq(hpno)); BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
PtyCstmrBas entity = query.select(basEntity) builder.and(dtlEntity.hpno.eq(hpno));
.from(basEntity)
.leftJoin(dtlEntity) PtyCstmrBas entity = query.select(basEntity)
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno)) .from(basEntity)
.where(builder) .leftJoin(dtlEntity)
.fetchFirst(); .on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
if(entity != null) { .where(builder)
result = true; .fetchFirst();
} if (entity != null) {
return result; result = true;
}
} return result;
public JwtUserModel findUserPassword(String userId) { }
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrGroup groupEntity = QPtyCstmrGroup.ptyCstmrGroup; public JwtUserModel findUserPassword(String userId) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder(); QPtyCstmrGroup groupEntity = QPtyCstmrGroup.ptyCstmrGroup;
builder.and(basEntity.userId.eq(userId));
BooleanBuilder builder = new BooleanBuilder();
PtyCstmrBas entity = query.select(basEntity) builder.and(basEntity.userId.eq(userId));
.from(basEntity)
.where(builder) PtyCstmrBas entity = query.select(basEntity)
.fetchFirst(); .from(basEntity)
.where(builder)
List<PtyCstmrGroup> pcgEntityList = null; .fetchFirst();
if(entity != null){
BooleanBuilder groupBuilder = new BooleanBuilder(); List<PtyCstmrGroup> pcgEntityList = null;
groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno()) if (entity != null) {
.and(groupEntity.joinYn.eq("Y"))); BooleanBuilder groupBuilder = new BooleanBuilder();
groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno())
pcgEntityList = query.select(groupEntity) .and(groupEntity.joinYn.eq("Y")));
.from(groupEntity)
.where(groupBuilder) pcgEntityList = query.select(groupEntity)
.fetch(); .from(groupEntity)
} .where(groupBuilder)
.fetch();
}
if(entity != null) {
JwtUserModel model = new JwtUserModel();
model.setAuth(entity.getAuthId()); if (entity != null) {
model.setUserId(entity.getUserId()); JwtUserModel model = new JwtUserModel();
model.setCstmrSno(entity.getCstmrSno()); model.setAuth(entity.getAuthId());
model.setCstmrStatusCd(entity.getCstmrStatusCd()); model.setUserId(entity.getUserId());
model.setUserPswd(entity.getUserPswd()); model.setCstmrSno(entity.getCstmrSno());
if(pcgEntityList != null && !pcgEntityList.isEmpty()){ model.setCstmrStatusCd(entity.getCstmrStatusCd());
List<JwtGroupModel> groupModelList = new ArrayList<>(); model.setUserPswd(entity.getUserPswd());
for(PtyCstmrGroup pcgEntity : pcgEntityList){ if (pcgEntityList != null && !pcgEntityList.isEmpty()) {
JwtGroupModel groupModel = new JwtGroupModel(); List<JwtGroupModel> groupModelList = new ArrayList<>();
groupModel.setGroupId(pcgEntity.getGroupId()); for (PtyCstmrGroup pcgEntity : pcgEntityList) {
groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd()); JwtGroupModel groupModel = new JwtGroupModel();
groupModelList.add(groupModel); groupModel.setGroupId(pcgEntity.getGroupId());
} groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd());
model.setGroup(groupModelList); groupModelList.add(groupModel);
} }
model.setGroup(groupModelList);
return model; }
}else { return model;
return null;
} } else {
return null;
}
}
public JwtProfileRsModel findUserProfile(int cstmrSno) { }
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl; public JwtProfileRsModel findUserProfile(int cstmrSno) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder(); QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
builder.and(basEntity.cstmrSno.eq(cstmrSno));
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
JwtProfileRsModel model = query.select(Projections.bean(JwtProfileRsModel.class ,
basEntity.cstmrSno,
basEntity.userId, JwtProfileRsModel model = query.select(Projections.bean(JwtProfileRsModel.class,
basEntity.authId, basEntity.cstmrSno,
basEntity.trmnlId, basEntity.userId,
basEntity.siteCode, basEntity.authId,
dtlEntity.memberName basEntity.trmnlId,
)) basEntity.siteCode,
.from(basEntity) dtlEntity.memberName
.leftJoin(dtlEntity) ))
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno)) .from(basEntity)
.where(builder) .leftJoin(dtlEntity)
.fetchFirst(); .on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
.where(builder)
return model; .fetchFirst();
} return model;
public JwtUserModel findRefreshtoken(int cstmrSno , String refreshToken) { }
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder(); public JwtUserModel findRefreshtoken(int cstmrSno, String refreshToken) {
builder.and(basEntity.cstmrSno.eq(cstmrSno)); QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
builder.and(basEntity.rfrshToken.eq(refreshToken)); BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
PtyCstmrBas entity = query.select(basEntity) builder.and(basEntity.rfrshToken.eq(refreshToken));
.from(basEntity)
.where(builder) PtyCstmrBas entity = query.select(basEntity)
.fetchFirst(); .from(basEntity)
if(entity != null) { .where(builder)
JwtUserModel model = new JwtUserModel(); .fetchFirst();
model.setAuth(entity.getAuthId()); if (entity != null) {
model.setUserId(entity.getUserId()); JwtUserModel model = new JwtUserModel();
model.setCstmrSno(entity.getCstmrSno()); model.setAuth(entity.getAuthId());
model.setCstmrStatusCd(entity.getCstmrStatusCd()); model.setUserId(entity.getUserId());
model.setUserPswd(entity.getUserPswd()); model.setCstmrSno(entity.getCstmrSno());
model.setCstmrStatusCd(entity.getCstmrStatusCd());
return model; model.setUserPswd(entity.getUserPswd());
}else { return model;
return null;
} } else {
} return null;
}
public List<AnctCstmerRlModel> list(int cstmrSno) { }
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl; public List<AnctCstmerRlModel> list(int cstmrSno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
List<AnctCstmerRlModel> list = query QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
.select(Projections.bean(
AnctCstmerRlModel.class, List<AnctCstmerRlModel> list = query
dtl.memberName, .select(Projections.bean(
dtl.brthdyDate, AnctCstmerRlModel.class,
dtl.genderCd, dtl.memberName,
dtl.cntryCd, dtl.brthdyDate,
dtl.email, dtl.genderCd,
dtl.hpno, dtl.cntryCd,
dtl.updateDt, dtl.email,
bas.userId dtl.hpno,
)) dtl.updateDt,
.from(bas) bas.userId
.leftJoin(dtl) ))
.on(bas.cstmrSno.eq(dtl.cstmrSno)) .from(bas)
.where(bas.cstmrSno.eq(cstmrSno)) .leftJoin(dtl)
.fetch(); .on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(bas.cstmrSno.eq(cstmrSno))
return list; .fetch();
}
return list;
}
public AcntCstmrRqModel findpassword(String userId) { public AnctCstmrModel findByCstmrSno(int cstmrSno) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas; QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.userId.eq(userId)); AnctCstmrModel anctCstmrModel = query
.select(Projections.bean(
PtyCstmrBas entity = query.select(basEntity) AnctCstmrModel.class,
.from(basEntity) bas.cstmrSno,
.where(builder) bas.authId,
.fetchFirst(); bas.cstmrDivCd,
bas.cstmrStatusCd,
if(entity != null) { bas.cstmrStatusCngDt,
JwtUserModel model = new JwtUserModel(); bas.joinDt,
model.setCstmrSno(entity.getCstmrSno()); bas.joinIp,
model.setUserPswd(entity.getUserPswd()); bas.memberDivCd,
} bas.pswdUpdtDt,
bas.siteCode,
return null; 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) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.userId.eq(userId));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
if (entity != null) {
JwtUserModel model = new JwtUserModel();
model.setCstmrSno(entity.getCstmrSno());
model.setUserPswd(entity.getUserPswd());
}
return null;
}
} }

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) { public Geometry createGeometryByCoordinate(List<Coordinate> target, String type) {
Geometry geometry = null; Geometry geometry = null;
if ("Polygon".equals(type)) { 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])); geometry = this.geometryFactory.createPolygon(target.toArray(new Coordinate[0]));
} else if ("LineString".equals(type)) { } else if ("LineString".equals(type)) {
geometry = this.geometryFactory.createLineString(target.toArray(new Coordinate[0])); 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