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. 30
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  20. 550
      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 "

30
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> {
@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> 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);
@Query("select f from FltPlanBas f " +
@ -28,8 +31,8 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
"and f.schFltStDt <= :fltNowDt " +
"and :fltNowDt <= f.schFltEndDt")
Optional<FltPlanBas> findByGroupFlightPlan(@Param("planSno") Integer planSno,
@Param("aprvlYn") String aprvlYn,
@Param("fltNowDt") Instant fltNowDt);
@Param("aprvlYn") String aprvlYn,
@Param("fltNowDt") Instant fltNowDt);
@Transactional
@Modifying
@ -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);
"where f.planSno = :planSno " +
"and f.aprvlYn = 'Y' ")
List<FltPlanBas> findBasList(@Param("planSno") int planSno);
}

550
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,259 +20,302 @@ import java.util.List;
@Log4j2
@Repository
@RequiredArgsConstructor
public class PtyCstmrQueryRepository{
private final JPAQueryFactory query;
public boolean findCstmrByUserId(String userId){
boolean result = false;
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
builder.and(basEntity.userId.eq(userId));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
if(entity != null) {
result = true;
}
return result;
}
public boolean certifNum(String name , String hpno) {
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(dtl.hpno.eq(hpno));
builder.and(dtl.memberName.eq(name));
PtyCstmrDtl entity = query.select(dtl)
.from(dtl)
.where(builder)
.fetchFirst();
boolean result = false;
if(entity != null) {
result = true;
}
return result;
}
public String findUserId(String name , String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.cstmrStatusCd.eq("A"));
builder.and(dtl.hpno.eq(hpno));
builder.and(dtl.memberName.eq(name));
PtyCstmrBas entity = query.select(bas)
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(builder)
.fetchFirst();
String userId = entity.getUserId();
return userId;
}
public PtyCstmrBas findUserPw(String id , String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.cstmrStatusCd.eq("A"));
builder.and(dtl.hpno.eq(hpno));
builder.and(bas.userId.eq(id));
PtyCstmrBas entity = query.select(bas)
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(builder)
.fetchFirst();
return entity;
}
public boolean findCstmrByHpno(String hpno) {
boolean result = false;
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
builder.and(dtlEntity.hpno.eq(hpno));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.leftJoin(dtlEntity)
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
.where(builder)
.fetchFirst();
if(entity != null) {
result = true;
}
return result;
}
public JwtUserModel findUserPassword(String userId) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrGroup groupEntity = QPtyCstmrGroup.ptyCstmrGroup;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.userId.eq(userId));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
List<PtyCstmrGroup> pcgEntityList = null;
if(entity != null){
BooleanBuilder groupBuilder = new BooleanBuilder();
groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno())
.and(groupEntity.joinYn.eq("Y")));
pcgEntityList = query.select(groupEntity)
.from(groupEntity)
.where(groupBuilder)
.fetch();
}
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()){
List<JwtGroupModel> groupModelList = new ArrayList<>();
for(PtyCstmrGroup pcgEntity : pcgEntityList){
JwtGroupModel groupModel = new JwtGroupModel();
groupModel.setGroupId(pcgEntity.getGroupId());
groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd());
groupModelList.add(groupModel);
}
model.setGroup(groupModelList);
}
return model;
}else {
return null;
}
}
public JwtProfileRsModel findUserProfile(int cstmrSno) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
JwtProfileRsModel model = query.select(Projections.bean(JwtProfileRsModel.class ,
basEntity.cstmrSno,
basEntity.userId,
basEntity.authId,
basEntity.trmnlId,
basEntity.siteCode,
dtlEntity.memberName
))
.from(basEntity)
.leftJoin(dtlEntity)
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
.where(builder)
.fetchFirst();
return model;
}
public JwtUserModel findRefreshtoken(int cstmrSno , String refreshToken) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
builder.and(basEntity.rfrshToken.eq(refreshToken));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
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());
return model;
}else {
return null;
}
}
public List<AnctCstmerRlModel> list(int cstmrSno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
List<AnctCstmerRlModel> list = query
.select(Projections.bean(
AnctCstmerRlModel.class,
dtl.memberName,
dtl.brthdyDate,
dtl.genderCd,
dtl.cntryCd,
dtl.email,
dtl.hpno,
dtl.updateDt,
bas.userId
))
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(bas.cstmrSno.eq(cstmrSno))
.fetch();
return list;
}
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;
}
public class PtyCstmrQueryRepository {
private final JPAQueryFactory query;
public boolean findCstmrByUserId(String userId) {
boolean result = false;
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
builder.and(basEntity.userId.eq(userId));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
if (entity != null) {
result = true;
}
return result;
}
public boolean certifNum(String name, String hpno) {
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(dtl.hpno.eq(hpno));
builder.and(dtl.memberName.eq(name));
PtyCstmrDtl entity = query.select(dtl)
.from(dtl)
.where(builder)
.fetchFirst();
boolean result = false;
if (entity != null) {
result = true;
}
return result;
}
public String findUserId(String name, String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.cstmrStatusCd.eq("A"));
builder.and(dtl.hpno.eq(hpno));
builder.and(dtl.memberName.eq(name));
PtyCstmrBas entity = query.select(bas)
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(builder)
.fetchFirst();
String userId = entity.getUserId();
return userId;
}
public PtyCstmrBas findUserPw(String id, String hpno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.cstmrStatusCd.eq("A"));
builder.and(dtl.hpno.eq(hpno));
builder.and(bas.userId.eq(id));
PtyCstmrBas entity = query.select(bas)
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(builder)
.fetchFirst();
return entity;
}
public boolean findCstmrByHpno(String hpno) {
boolean result = false;
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrStatusCd.eq("A")); //활성화 상태
builder.and(dtlEntity.hpno.eq(hpno));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.leftJoin(dtlEntity)
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
.where(builder)
.fetchFirst();
if (entity != null) {
result = true;
}
return result;
}
public JwtUserModel findUserPassword(String userId) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrGroup groupEntity = QPtyCstmrGroup.ptyCstmrGroup;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.userId.eq(userId));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
List<PtyCstmrGroup> pcgEntityList = null;
if (entity != null) {
BooleanBuilder groupBuilder = new BooleanBuilder();
groupBuilder.and(groupEntity.cstmrSno.eq(entity.getCstmrSno())
.and(groupEntity.joinYn.eq("Y")));
pcgEntityList = query.select(groupEntity)
.from(groupEntity)
.where(groupBuilder)
.fetch();
}
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()) {
List<JwtGroupModel> groupModelList = new ArrayList<>();
for (PtyCstmrGroup pcgEntity : pcgEntityList) {
JwtGroupModel groupModel = new JwtGroupModel();
groupModel.setGroupId(pcgEntity.getGroupId());
groupModel.setGroupAuthCd(pcgEntity.getGroupAuthCd());
groupModelList.add(groupModel);
}
model.setGroup(groupModelList);
}
return model;
} else {
return null;
}
}
public JwtProfileRsModel findUserProfile(int cstmrSno) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtlEntity = QPtyCstmrDtl.ptyCstmrDtl;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
JwtProfileRsModel model = query.select(Projections.bean(JwtProfileRsModel.class,
basEntity.cstmrSno,
basEntity.userId,
basEntity.authId,
basEntity.trmnlId,
basEntity.siteCode,
dtlEntity.memberName
))
.from(basEntity)
.leftJoin(dtlEntity)
.on(basEntity.cstmrSno.eq(dtlEntity.cstmrSno))
.where(builder)
.fetchFirst();
return model;
}
public JwtUserModel findRefreshtoken(int cstmrSno, String refreshToken) {
QPtyCstmrBas basEntity = QPtyCstmrBas.ptyCstmrBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(basEntity.cstmrSno.eq(cstmrSno));
builder.and(basEntity.rfrshToken.eq(refreshToken));
PtyCstmrBas entity = query.select(basEntity)
.from(basEntity)
.where(builder)
.fetchFirst();
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());
return model;
} else {
return null;
}
}
public List<AnctCstmerRlModel> list(int cstmrSno) {
QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
List<AnctCstmerRlModel> list = query
.select(Projections.bean(
AnctCstmerRlModel.class,
dtl.memberName,
dtl.brthdyDate,
dtl.genderCd,
dtl.cntryCd,
dtl.email,
dtl.hpno,
dtl.updateDt,
bas.userId
))
.from(bas)
.leftJoin(dtl)
.on(bas.cstmrSno.eq(dtl.cstmrSno))
.where(bas.cstmrSno.eq(cstmrSno))
.fetch();
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) {
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) {
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