Browse Source

feat: Flt모듈 - laanc코드 1차 이동

pull/9/head
lkd9125(이경도) 7 months ago
parent
commit
04506e100c
  1. 5
      app/kac-app/src/test/java/kr/co/palnet/kac/BaseTest.java
  2. 6
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArea.java
  3. 4
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanAreaCoord.java
  4. 13
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanBas.java
  5. 6
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanPilot.java
  6. 48
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java
  7. 4
      data/pty/src/main/java/kr/co/palnet/kac/data/pty/repository/PtyGroupBasRepository.java
  8. 4
      data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyGroupDomainService.java
  9. 17
      web/api-flight/build.gradle
  10. 29
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java
  11. 7
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/AnctCstmrTermsModel.java
  12. 107
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/BasLaancArcrftModel.java
  13. 34
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/BasLaancAreaCoordModel.java
  14. 56
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/BasLaancAreaModel.java
  15. 73
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/CstmrModel.java
  16. 42
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanAreaCoordDTO.java
  17. 58
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanAreaDTO.java
  18. 88
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanBasDTO.java
  19. 72
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanPilotDTO.java
  20. 31
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/ArcrftTypeCd.java
  21. 34
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/ArcrftWghtCd.java
  22. 38
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/FltMethod.java
  23. 44
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/FltPurpose.java
  24. 30
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/FltType.java
  25. 56
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/CreatePlanRQ.java
  26. 16
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/CtrTrnsLctnModel.java
  27. 18
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/pliotvalid/PilotValidRq.java
  28. 29
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/pliotvalid/PilotValidRs.java
  29. 152
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java
  30. 19
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java
  31. 11
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java
  32. 133
      web/api-flight/src/main/java/kr/co/palnet/kac/external/CtrTrnsLctnService.java
  33. 2
      web/security/src/main/java/kr/co/palnet/kac/config/security/util/JwtUtil.java

5
app/kac-app/src/test/java/kr/co/palnet/kac/BaseTest.java

@ -1,15 +1,12 @@
package kr.co.palnet.kac;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.ServletException;
import kr.co.palnet.kac.api.v1.user.account.model.detail.SearchUserRS;
import kr.co.palnet.kac.api.v1.user.account.model.register.FormRegisterRQ;
import kr.co.palnet.kac.api.v1.user.account.service.UserAccountService;
import kr.co.palnet.kac.app.KacAppApplication;
import kr.co.palnet.kac.config.security.model.BaseUserDetails;
import kr.co.palnet.kac.config.security.service.BaseUserDetailsService;
import kr.co.palnet.kac.config.security.util.JwtUtil;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -19,7 +16,6 @@ import org.springframework.restdocs.RestDocumentationContextProvider;
import org.springframework.restdocs.RestDocumentationExtension;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.security.config.BeanIds;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
@ -27,7 +23,6 @@ import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.DelegatingFilterProxy;
import java.time.LocalDate;
import java.time.LocalDateTime;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.modifyUris;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint;

6
data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArea.java

@ -5,7 +5,7 @@ import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ -64,7 +64,7 @@ public class FltPlanArea {
// 생성일시
@CreationTimestamp
@Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false)
private Instant createDt;
private LocalDateTime createDt;
// 수정사용자ID
@Column(name = "UPDATE_USER_ID", length = 30, nullable = false)
@ -73,7 +73,7 @@ public class FltPlanArea {
// 수정일시
@UpdateTimestamp
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt;
private LocalDateTime updateDt;
@JoinColumn(
name = "PLAN_SNO", insertable = false, updatable = false,

4
data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanAreaCoord.java

@ -4,7 +4,7 @@ import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import java.time.Instant;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@ -46,7 +46,7 @@ public class FltPlanAreaCoord {
// 생성일시
@CreationTimestamp
@Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false)
private Instant createDt;
private LocalDateTime createDt;
@JoinColumn(
name = "PLAN_AREA_SNO", insertable = false, updatable = false,

13
data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanBas.java

@ -3,7 +3,8 @@ package kr.co.palnet.kac.data.flt.model;
import jakarta.persistence.*;
import lombok.*;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ -69,11 +70,11 @@ public class FltPlanBas {
// 예정비행시작시간
@Column(name = "SCH_FLT_ST_DT", columnDefinition = "datetime(6)", nullable = false)
private Instant schFltStDt;
private LocalDateTime schFltStDt;
// 예정비행종료시간
@Column(name = "SCH_FLT_END_DT", columnDefinition = "datetime(6)", nullable = false)
private Instant schFltEndDt;
private LocalDateTime schFltEndDt;
// 비행목적
@Column(name = "FLT_PURPOSE", length = 200, nullable = false)
@ -93,7 +94,7 @@ public class FltPlanBas {
// 승인일시
@Column(name = "APRVL_DT", columnDefinition = "datetime")
private Instant aprvlDt;
private LocalDateTime aprvlDt;
// 삭제여부
@Column(name = "DEL_YN", columnDefinition = "char(1) default 'N'", nullable = false)
@ -109,7 +110,7 @@ public class FltPlanBas {
// 생성일시
@Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false)
private Instant createDt;
private LocalDateTime createDt;
// 수정사용자ID
@Column(name = "UPDATE_USER_ID", length = 30, nullable = false)
@ -117,7 +118,7 @@ public class FltPlanBas {
// 수정일시
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt;
private LocalDateTime updateDt;
@OneToMany(mappedBy = "fltPlanBas", fetch = FetchType.LAZY)
private List<FltPlanArea> fltPlanAreaList;

6
data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanPilot.java

@ -5,7 +5,7 @@ import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.Instant;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@ -83,7 +83,7 @@ public class FltPlanPilot {
// 생성일시
@CreationTimestamp
@Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false)
private Instant createDt;
private LocalDateTime createDt;
// 수정사용자ID
@Column(name = "UPDATE_USER_ID", length = 30, nullable = false)
@ -92,7 +92,7 @@ public class FltPlanPilot {
// 수정일시
@UpdateTimestamp
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt;
private LocalDateTime updateDt;
@JoinColumn(
name = "PLAN_SNO", insertable = false, updatable = false,

48
data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java

@ -0,0 +1,48 @@
package kr.co.palnet.kac.data.flt.service;
import kr.co.palnet.kac.data.flt.model.FltPlanArea;
import kr.co.palnet.kac.data.flt.model.FltPlanAreaCoord;
import kr.co.palnet.kac.data.flt.model.FltPlanBas;
import kr.co.palnet.kac.data.flt.model.FltPlanPilot;
import kr.co.palnet.kac.data.flt.repository.FltPlanAreaCoordRepository;
import kr.co.palnet.kac.data.flt.repository.FltPlanAreaRepository;
import kr.co.palnet.kac.data.flt.repository.FltPlanBasRepository;
import kr.co.palnet.kac.data.flt.repository.FltPlanPilotRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@RequiredArgsConstructor
@Service
public class FltPlanDomainService {
private final FltPlanBasRepository fltPlanBasRepository;
private final FltPlanAreaRepository fltPlanAreaRepository;
private final FltPlanAreaCoordRepository fltPlanAreaCoordRepository;
private final FltPlanPilotRepository fltPlanPilotRepository;
public FltPlanBas saveFltPlanBas(FltPlanBas entity){
return fltPlanBasRepository.save(entity);
}
public FltPlanArea saveFltPlanArea(FltPlanArea entity){
return fltPlanAreaRepository.save(entity);
}
public FltPlanAreaCoord saveFltPlanAreaCoord(FltPlanAreaCoord entity){
return fltPlanAreaCoordRepository.save(entity);
}
public FltPlanPilot saveFltPlanPilot(FltPlanPilot entity){
return fltPlanPilotRepository.save(entity);
}
}

4
data/pty/src/main/java/kr/co/palnet/kac/data/pty/repository/PtyGroupBasRepository.java

@ -4,7 +4,11 @@ import kr.co.palnet.kac.data.pty.model.PtyGroupBas;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface PtyGroupBasRepository extends JpaRepository<PtyGroupBas, String> {
public Optional<List<PtyGroupBas>> findByGroupNm(String groupNm);
}

4
data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyGroupDomainService.java

@ -28,6 +28,10 @@ public class PtyGroupDomainService {
return ptyCstmrGroupRepository.findByGroupId(groupId);
}
public Optional<List<PtyGroupBas>> findByGroupNm(String groupNm){
return ptyGroupBasRepository.findByGroupNm(groupNm);
}
public Optional<List<PtyCstmrGroup>> findByCstmrSno(Long cstmrSno){
return ptyCstmrGroupRepository.findByCstmrSno(cstmrSno);
}

17
web/api-flight/build.gradle

@ -0,0 +1,17 @@
dependencies {
implementation "$boot:spring-boot-starter-web"
implementation "$boot:spring-boot-starter-data-jpa"
compileOnly 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
implementation project(":common:core")
implementation project(":common:util")
implementation project(":data:flt")
implementation project(":data:ctr")
implementation project(":data:com")
implementation project(":data:pty")
compileOnly project(":web:security")
}

29
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java

@ -0,0 +1,29 @@
package kr.co.palnet.kac.api.v1.flight.laanc.controller;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreatePlanRQ;
import kr.co.palnet.kac.api.v1.flight.laanc.service.FlightLaancService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
@RequestMapping("/v1/flight/laanc")
@RequiredArgsConstructor
public class FlightLaancController {
private final FlightLaancService flightLaancService;
@PostMapping("/plan/create")
public ResponseEntity<Object> createPlan(@RequestBody CreatePlanRQ rq) {
flightLaancService.createPlan(rq);
return ResponseEntity.status(HttpStatus.CREATED).body(null);
}
}

7
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/AnctCstmrTermsModel.java

@ -0,0 +1,7 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import lombok.Data;
@Data
public class AnctCstmrTermsModel {
}

107
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/BasLaancArcrftModel.java

@ -0,0 +1,107 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.ArcrftTypeCd;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.ArcrftWghtCd;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class BasLaancArcrftModel {
@Schema(description = "계획서 기체 일련번호", example = "1", hidden = true)
private Integer planArcrftSno;
@Schema(description = "비행계획서 일련번호", example = "1", hidden = true)
private Integer planSno;
@Schema(description = "기체 일련번호", example = "1", hidden = true)
private Integer arcrftSno;
@Schema(description = "식별번호(기체번호)", example = "PA0001")
private String idntfNum;
@Schema(description = "그룹명", example = "한국공항공사", hidden = true)
private String groupNm;
@Schema(description = "제작번호", example = "123101-13", hidden = true)
private String prdctNum;
@Schema(description = "기체종류코드", example = "01", hidden = true)
private ArcrftTypeCd arcrftTypeCd;
@Schema(description = "기체모델명", example = "M-01", hidden = true)
private String arcrftModelNm;
@Schema(description = "제작자", example = "DJI", hidden = true)
private String prdctCmpnNm;
@Schema(description = "제작일자", example = "2022-01-01", hidden = true)
private LocalDateTime prdctDate;
@Schema(description = "기체길이", example = "1.0", hidden = true)
private double arcrftLngth;
@Schema(description = "길체폭", example = "1.1", hidden = true)
private double arcrftWdth;
@Schema(description = "기체높이", example = "1.0", hidden = true)
private double arcrftHght;
@Schema(description = "기체중량", example = "1.5", hidden = true)
private double arcrftWght;
@Schema(description = "중량구분코드", hidden = true)
private String wghtTypeCd;
@Schema(description = "이미지URL", example = "http://www.imageurl.co.kr/image/url", hidden = true)
private String imageUrl;
@Schema(description = "최대이륙중량", example = "10", hidden = true)
private double takeoffWght;
@Schema(description = "사용여부", hidden = true)
private String useYn;
@Schema(description = "카메라탑재여부", example = "N")
private String cameraYn;
@Schema(description = "보험가입여부", example = "Y")
private String insrncYn;
@Schema(description = "소유자명(법인명)", example = "팔네트웍스")
private String ownerNm;
@Schema(description = "생성자ID", hidden = true)
private String createUserId;
@Schema(description = "생성일시", hidden = true)
private LocalDateTime createDt;
@Schema(description = "수정자ID", hidden = true)
private String updateUserId;
@Schema(description = "수정일시", hidden = true)
private LocalDateTime updateDt;
@Schema(hidden = true)
private String docState = "R";
@Schema(description = "식별장치종류코드", example = "DRON", hidden = true)
private String idntfTypeCd;
// kac 추가 필드
@Schema(description = "기체보험유무", example = "Y")
private String acrftInsuranceYn;
@Schema(description = "보험유효기간", hidden = true)
private LocalDateTime insuranceExperiod;
@Schema(description = "법인명", hidden = true)
private String corporationNm;
@Schema(description = "자체중량코드", example = "10")
private ArcrftWghtCd arcrftWghtCd; // 기체 무게 코드 ----
}

34
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/BasLaancAreaCoordModel.java

@ -0,0 +1,34 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltMethod;
import lombok.Data;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class BasLaancAreaCoordModel {
@Schema(description = "비행구역좌표 일련번호", example = "1")
private Long planAreaCoordSno;
@Schema(description = "비행계획비행구역 일련번호", example = "1")
private Long planAreaSno;
@Schema(description = "위도", example = "127.33")
private double lat;
@Schema(description = "경도", example = "37.99")
private double lon;
@Schema(description = "생성자ID", hidden = true)
private String createUserId;
@Schema(description = "생성일시", hidden = true)
private LocalDateTime createDt;
@Schema(hidden = true)
private String docState = "R";
}

56
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/BasLaancAreaModel.java

@ -0,0 +1,56 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltMethod;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class BasLaancAreaModel {
@Schema(description = "비행구역 일련번호", example = "1", hidden = true)
private Long planAreaSno;
@Schema(description = "비행계획서 일련번호", example = "1", hidden = true)
private Long planSno;
@Schema(description = "구역종류", example = "CIRCLE")
private String areaType;
@Schema(description = "비행방식", example = "01")
private FltMethod fltMethod;
@Schema(description = "비행구역주소", example = "인천광역시 부평구 청천2동")
private String fltAreaAddr;
@Schema(description = "버퍼존", example = "100")
private Integer bufferZone;
@Schema(description = "고도", example = "110")
private String fltElev;
@Schema(description = "생성자ID", hidden = true)
private String createUserId;
@Schema(description = "생성일시", hidden = true)
private LocalDateTime createDt;
@Schema(description = "수정자ID", hidden = true)
private String updateUserId;
@Schema(description = "수정일시", hidden = true)
private LocalDateTime updateDt;
private String docState = "R";
private List<BasLaancAreaCoordModel> coordList;
@Schema(hidden = true)
private List<BasLaancAreaCoordModel> bufferCoordList;
// kac 추가 필드
@Schema(description = "비행방식(기타)")
private String fltMothoeRm;
}

73
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/CstmrModel.java

@ -0,0 +1,73 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import kr.co.palnet.kac.data.pty.model.PtyCstmrBas;
import kr.co.palnet.kac.data.pty.model.PtyCstmrDtl;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class CstmrModel {
private Long cstmrSno;
private String authId;
private String cstmrDivCd;
private String cstmrStatusCd;
private LocalDateTime cstmrStatusCngDt;
private LocalDateTime joinDt;
private String joinIp;
private String memberDivCd;
private LocalDateTime pswdUpdtDt;
private String siteCode;
private String userId;
private String rfrshToken;
private String trmnlId;
private String addr;
private String addrDtlCn;
private LocalDate 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 LocalDateTime updateDt;
private String updateUserId;
private String zip;
public static CstmrModel toModel(PtyCstmrBas userEntity, PtyCstmrDtl userDeatilEntity){
CstmrModel model = new CstmrModel();
model.setCstmrSno(userEntity.getCstmrSno());
model.setAuthId(userEntity.getAuthId());
model.setCstmrDivCd(userEntity.getCstmrDivCd());
model.setCstmrStatusCd(userEntity.getCstmrStatusCd());
model.setJoinDt(userEntity.getJoinDt());
model.setJoinIp(userEntity.getJoinIp());
model.setMemberDivCd(userEntity.getMemberDivCd());
model.setPswdUpdtDt(userEntity.getPswdUpdtDt());
model.setSiteCode(userEntity.getSiteCode());
model.setTrmnlId(userEntity.getTrmnlId());
model.setAddr(userDeatilEntity.getAddr());
model.setAddrDtlCn(userDeatilEntity.getAddrDtlCn());
model.setBrthdyDate(userDeatilEntity.getBrthdyDate());
model.setClncd(userDeatilEntity.getClncd());
model.setEmail(userDeatilEntity.getEmail());
model.setGenderCd(userDeatilEntity.getGenderCd());
model.setHpno(userDeatilEntity.getHpno());
model.setIpinCi(userDeatilEntity.getIpinCi());
model.setIpinDi(userDeatilEntity.getIpinDi());
model.setJoinCrtfyCd(userDeatilEntity.getJoinCrtfyCd());
model.setMemberName(userDeatilEntity.getMemberName());
model.setUpdateDt(userDeatilEntity.getUpdateDt());
model.setUpdateUserId(userDeatilEntity.getUpdateUserId());
model.setZip(userDeatilEntity.getZip());
return model;
}
}

42
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanAreaCoordDTO.java

@ -0,0 +1,42 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import kr.co.palnet.kac.data.flt.model.FltPlanAreaCoord;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FltPlanAreaCoordDTO {
private Long planAreaCoordSno;
private Long planAreaSno; // 비행계획비행구역일련번호
private Double lon; // 위도
private Double lat; // 경도
private String createUserId; // 생성사용자ID
private LocalDateTime createDt; // 생성일시
public static FltPlanAreaCoordDTO toDto(BasLaancAreaCoordModel model){
FltPlanAreaCoordDTO dto = new FltPlanAreaCoordDTO();
dto.setPlanAreaCoordSno(model.getPlanAreaCoordSno());
dto.setPlanAreaSno(model.getPlanAreaSno());
dto.setLon(model.getLon());
dto.setLat(model.getLat());
dto.setCreateUserId(model.getCreateUserId());
dto.setCreateDt(model.getCreateDt());
return dto;
}
public static FltPlanAreaCoord toEntity(FltPlanAreaCoordDTO dto){
return FltPlanAreaCoord.builder()
.planAreaCoordSno(dto.getPlanAreaCoordSno())
.planAreaSno(dto.getPlanAreaSno())
.lon(dto.getLon())
.lat(dto.getLat())
.createUserId(dto.getCreateUserId())
.createDt(dto.getCreateDt())
.build();
}
}

58
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanAreaDTO.java

@ -0,0 +1,58 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltMethod;
import kr.co.palnet.kac.data.flt.model.FltPlanArea;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FltPlanAreaDTO {
private Long planAreaSno;
private Long planSno; // 비행계획서일련번호
private String areaType; // 구역종류
private FltMethod fltMethod; // 비행방식
private String fltMothoeRm; // 비행방식비고
private String fltAreaAddr; // 비행구역주소
private Integer bufferZone; // 버퍼존
private String fltElev; // 비행고도
private String createUserId; // 생성사용자ID
private LocalDateTime createDt; // 생성일시
private String updateUserId; // 수정사용자ID
private LocalDateTime updateDt; // 수정일시
public static FltPlanAreaDTO toDto(BasLaancAreaModel model){
FltPlanAreaDTO dto = new FltPlanAreaDTO();
dto.setPlanAreaSno(model.getPlanAreaSno());
dto.setPlanSno(model.getPlanSno());
dto.setAreaType(model.getAreaType());
dto.setFltMethod(model.getFltMethod());
dto.setFltMothoeRm(model.getFltMothoeRm());
dto.setBufferZone(model.getBufferZone());
dto.setFltElev(model.getFltElev());
dto.setCreateUserId(model.getCreateUserId());
dto.setCreateDt(model.getCreateDt());
dto.setUpdateUserId(model.getUpdateUserId());
dto.setUpdateDt(model.getUpdateDt());
return dto;
}
public static FltPlanArea toEntity(FltPlanAreaDTO dto){
return FltPlanArea.builder()
.planAreaSno(dto.getPlanAreaSno())
.planSno(dto.getPlanSno())
.areaType(dto.getAreaType())
.fltMethod(dto.getFltMethod().getCode())
.fltMothoeRm(dto.getFltMothoeRm())
.fltAreaAddr(dto.getFltAreaAddr())
.bufferZone(dto.getBufferZone())
.fltElev(dto.getFltElev())
.createUserId(dto.getCreateUserId())
.createDt(dto.getCreateDt())
.updateUserId(dto.getUpdateUserId())
.updateDt(dto.getUpdateDt())
.build();
}
}

88
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanBasDTO.java

@ -0,0 +1,88 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltPurpose;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltType;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreatePlanRQ;
import kr.co.palnet.kac.data.flt.model.FltPlanBas;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FltPlanBasDTO {
private Integer planSno;
private String groupId; // 그룹ID
private Long cstmrSno; // 고객일련번호
private String serviceType; // 서비스구분
private String memberName; // 회원이름
private String email; // 이메일
private String hpno; // 휴대폰번호
private String clncd; // 국가전화번호
private String addr; // 주소
private String addrDtlCn; // 주소상세내용
private String zip; // 우편번호
private LocalDateTime schFltStDt; // 예정비행시작시간
private LocalDateTime schFltEndDt; // 예정비행종료시간
private FltPurpose fltPurpose; // 비행목적
private FltType fltType; // 비행유형
private String corpRegYn; // 사업자여부
private String aprvlYn; // 승인여부
private LocalDateTime aprvlDt; // 승인일시
private String delYn; // 삭제여부
private Long fileGroupNo; // 파일그룹번호
private String createUserId; // 생성사용자ID
private LocalDateTime createDt; // 생성일시
private String updateUserId; // 수정사용자ID
private LocalDateTime updateDt; // 수정일시
public static FltPlanBasDTO toFltPlanBasDto(CstmrModel model, CreatePlanRQ rq){
FltPlanBasDTO dto = new FltPlanBasDTO();
dto.setCstmrSno(model.getCstmrSno());
dto.setMemberName(model.getMemberName());
dto.setEmail(model.getEmail());
dto.setHpno(model.getHpno());
dto.setClncd(model.getClncd());
dto.setAddr(model.getAddr());
dto.setAddrDtlCn(model.getAddrDtlCn());
dto.setZip(model.getZip());
dto.setSchFltStDt(rq.getSchFltStDt());
dto.setSchFltEndDt(rq.getSchFltEndDt());
dto.setFltPurpose(rq.getFltPurpose());
dto.setFltType(rq.getFltType());
return dto;
}
public static FltPlanBas toFltPlanEntity(FltPlanBasDTO dto){
return FltPlanBas.builder()
.planSno(dto.getCstmrSno())
.groupId(dto.getGroupId())
.cstmrSno(dto.getCstmrSno())
.serviceType(dto.getServiceType())
.memberName(dto.getMemberName())
.email(dto.getEmail())
.hpno(dto.getHpno())
.clncd(dto.getClncd())
.addr(dto.getAddr())
.addrDtlCn(dto.getAddrDtlCn())
.zip(dto.getZip())
.schFltStDt(dto.getSchFltStDt())
.schFltEndDt(dto.getSchFltEndDt())
.fltPurpose(dto.getFltPurpose().getCode())
.fltType(dto.getFltType().getCode())
.corpRegYn(dto.getCorpRegYn())
.aprvlYn(dto.getAprvlYn())
.aprvlDt(dto.getAprvlDt())
.delYn(dto.getDelYn())
.fileGroupNo(dto.getFileGroupNo())
.createUserId(dto.getCreateUserId())
.createDt(dto.getCreateDt())
.updateUserId(dto.getUpdateUserId())
.updateDt(dto.getUpdateDt())
.build();
}
}

72
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanPilotDTO.java

@ -0,0 +1,72 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import kr.co.palnet.kac.data.flt.model.FltPlanPilot;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
@Data
public class FltPlanPilotDTO {
private Long planPilotSno;
private Long planSno; // 비행계획서일련번호
private Long 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; // 생성사용자ID
private LocalDateTime createDt; // 생성일시
private String updateUserId; // 수정사용자ID
private LocalDateTime updateDt; // 수정일시
public static FltPlanPilotDTO toDto(CstmrModel model){
FltPlanPilotDTO dto = new FltPlanPilotDTO();
dto.setCstmrSno(model.getCstmrSno());
dto.setMemberName(model.getMemberName());
dto.setEmail(model.getEmail());
dto.setHpno(model.getHpno());
dto.setClncd(model.getClncd());
dto.setAddr(model.getAddr());
dto.setAddrDtlCn(model.getAddrDtlCn());
dto.setZip(model.getZip());
return dto;
}
public static FltPlanPilot toEntity(FltPlanPilotDTO dto){
return FltPlanPilot.builder()
.planPilotSno(dto.getPlanPilotSno())
.planSno(dto.getPlanSno())
.cstmrSno(dto.getCstmrSno())
.groupNm(dto.getGroupNm())
.memberName(dto.getMemberName())
.email(dto.getEmail())
.hpno(dto.getHpno())
.clncd(dto.getClncd())
.addr(dto.getAddr())
.addrDtlCn(dto.getAddrDtlCn())
.zip(dto.getZip())
.qlfcNo(dto.getQlfcNo())
.carrer(dto.getCarrer())
.createUserId(dto.getCreateUserId())
.createDt(dto.getCreateDt())
.updateUserId(dto.getUpdateUserId())
.updateDt(dto.getUpdateDt())
.build();
}
}

31
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/ArcrftTypeCd.java

@ -0,0 +1,31 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.constant;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
@Getter
public enum ArcrftTypeCd {
UNMANNED_AIRCRAFT("11", "무인비행기"),
UNMANNED_HELICOPTER("12", "무인헬리콤터"),
UNMANNED_MULTICOPTER("13", "무인멀티콥터"),
UNMANNED_AIRSHIP("21", "무인비행선");
private final String code;
private final String value;
ArcrftTypeCd(String code, String value) {
this.code = code;
this.value = value;
}
@JsonCreator
public static ArcrftTypeCd fromCode(String code) {
for (ArcrftTypeCd arcrftTypeCd : ArcrftTypeCd.values()) {
if (arcrftTypeCd.getCode().equals(code)) {
return arcrftTypeCd;
}
}
return null;
}
}

34
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/ArcrftWghtCd.java

@ -0,0 +1,34 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.constant;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
@Getter
public enum ArcrftWghtCd {
W250G_LOE("7", "최대이륙중량 250g 이하"),
W250G_W2KG("8", "최대이륙중량 250g 초과 ~ 2kg 이하"),
W2KG_W7KG("9", "최대이륙중량 2kg 초과 ~ 7kg 이하"),
W7KG_W25KG("10", "최대이륙중량 7kg 초과 ~ 25kg 이하"),
W25KG_GO("11", "최대이륙중량 25kg 초과"),
W25KG_GO_TEST("12", "최대이륙중량 25kg 초과 (시험비행)"),
;
private final String code;
private final String value;
ArcrftWghtCd(String code, String value) {
this.code = code;
this.value = value;
}
@JsonCreator
public static ArcrftWghtCd fromCode(String code) {
for (ArcrftWghtCd arcrftWghtCd : ArcrftWghtCd.values()) {
if (arcrftWghtCd.getCode().equals(code)) {
return arcrftWghtCd;
}
}
return null;
}
}

38
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/FltMethod.java

@ -0,0 +1,38 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.constant;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
@Getter
public enum FltMethod {
CLOCK_FLIGHT("01", "시계비행"),
AUTOMATIC_FLIGHT("02", "자동비행"),
CIRCLING_FLIGHT("03", "선회비행"),
INSTRUMENTAL_FLIGHT("04", "계기비행"),
GRID_FLIGHT("05", "격자비행"),
VERTICAL_TAKEOFF_AND_LANDING_FLIGHT("06", "수직이착륙비행"),
VISIBLE_FLIGHT("07", "가시권비행"),
HAND_OPERATED_FLIGHT("08", "수동조종비행"),
FLIGHT_IN_PLACE("09", "제자리비행"),
CLUSTER_FLIGHT("10", "군집비행"),
DIRECT_INPUT("11", "직접입력");
private final String code;
private final String value;
FltMethod(String code, String value) {
this.code = code;
this.value = value;
}
@JsonCreator
public static FltMethod fromCode(String code) {
for (FltMethod fltMethod : FltMethod.values()) {
if (fltMethod.getCode().equals(code)) {
return fltMethod;
}
}
return null;
}
}

44
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/FltPurpose.java

@ -0,0 +1,44 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.constant;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
@Getter
public enum FltPurpose {
AIR_CONTROL("01","항공방제"),
TRAFFIC_MANAGEMENT("02","교통관리"),
LEISURE_FLIGHT("03","레저비행"),
TEST_FLIGHT("04","시험비행"),
AIR_ADVERTISING("05", "공중광고"),
EDUCATION_FLIGHT("06","교육비행"),
FLIGHT_DEMONSTRATION("07","비행시연"),
PESTICIDE_SPRAY("08","농약살포"),
FOREST_OBSERVATION("09","산림관측"),
TRANSPORTATION("10","수송"),
PHOTOGRAPHY_VIDEO_SHOOTING("11","사진/영상촬영"),
SEARCH_AND_RESCUE("12","수색구조"),
FLIGHT_TRAINING("13","비행훈련"),
FLIGHT_EDUCATION("14","비행교육"),
PILOT_FLIGHT("15","계도비행"),
AIR_SURVEYING("16","항공측량"),
FLIGHT_TEST("17","비행실기시험");
private final String code;
private final String value;
FltPurpose(String code, String value) {
this.code = code;
this.value = value;
}
@JsonCreator
public static FltPurpose fromCode(String code) {
for (FltPurpose fltPurpose : FltPurpose.values()) {
if (fltPurpose.getCode().equals(code)) {
return fltPurpose;
}
}
return null;
}
}

30
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/constant/FltType.java

@ -0,0 +1,30 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.constant;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
@Getter
public enum FltType {
COMMERCIAL("COMMERCIAL", "상업용"),
NON_COMMERCIAL("NON_COMMERCIAL", "비상업용");
private final String code;
private final String value;
FltType(String code, String value) {
this.code = code;
this.value = value;
}
@JsonCreator
public static FltType fromCode(String code) {
for (FltType fltType : FltType.values()) {
if (fltType.getCode().equals(code)) {
return fltType;
}
}
return null;
}
}

56
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/CreatePlanRQ.java

@ -0,0 +1,56 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.create;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.api.v1.flight.laanc.model.AnctCstmrTermsModel;
import kr.co.palnet.kac.api.v1.flight.laanc.model.BasLaancArcrftModel;
import kr.co.palnet.kac.api.v1.flight.laanc.model.BasLaancAreaModel;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltPurpose;
import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltType;
import kr.co.palnet.kac.api.v1.flight.laanc.model.pliotvalid.PilotValidRs;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class CreatePlanRQ {
@Schema(description = "비행계획서 일련번호", example = "1", hidden = true)
private Integer planSno;
@Schema(description = "사용자 일련번호", example = "1", hidden = true)
private Integer cstmrSno;
@Schema(description = "이름", example = "조종사")
private String memberName;
@Schema(description = "비행유형", example = "COMMERCIAL")
private FltType fltType; // 비행유형 - 상업/비상업 ----
@Schema(description = "비행시작일시", example = "2024-02-12 09:00:00", implementation = String.class)
private LocalDateTime schFltStDt; // 시작일시
@Schema(description = "비행종료일시", example = "2024-02-12 10:00:00", implementation = String.class)
private LocalDateTime schFltEndDt; // 종료일시
@Schema(description = "비행목적", example = "17")
private FltPurpose fltPurpose; // 비행목적 -----
@Schema(description = "서비스구분", example = "KAC")
private String serviceType; // 고정
@Schema(hidden = true)
private String docState = "R";
private List<BasLaancAreaModel> areaList;
// private List<BasFlightPlanPilotModel> pilotList;
private List<BasLaancArcrftModel> arcrftList;
// 약관동의
private List<AnctCstmrTermsModel> terms;
// laanc 정보
// private BasLaancValidatedRs validatedRs;
private List<PilotValidRs> pilotValidRsList; // 자격여부
}

16
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/CtrTrnsLctnModel.java

@ -0,0 +1,16 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.create;
import lombok.Data;
@Data
public class CtrTrnsLctnModel {
private Long hstryAreaSno;
private String area1;
private String area2;
private String area3;
private String zipCd;
private String landNm;
private String landNum;
private String areaType;
private String areaNm;
}

18
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/pliotvalid/PilotValidRq.java

@ -0,0 +1,18 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.pliotvalid;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PilotValidRq {
@Schema(description = "조종사 ci - 본인인증", example = "dzT9zrm1JJRbrT1oRsUbvXYDfbAtXG5QOZjbIVHPaklSZ2PTw8ojYdJyeTrdQdtKIGFM5Z7xfrN/Crm6iGRLkA==")
private String pilotci;
@Schema(description = "기체신고번호", example = "C1CM0231251")
private String declarationnum;
}

29
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/pliotvalid/PilotValidRs.java

@ -0,0 +1,29 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.pliotvalid;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PilotValidRs {
@Schema(description = "결과코드", example = "200")
private String rspCode;
@Schema(description = "결과메시지", example = "SUCCESS")
private String rspMessage;
@Schema(description = "조종사자격증명여부", example = "Y")
private String pilotcredentialyn;
@Schema(description = "기체보험가입여부", example = "Y")
private String arcrftinsuranceyn;
@Schema(description = "기체신고여부", example = "Y")
private String arcrftdeclaration;
@Schema(description = "사업자유무", example = "Y")
private String corpregyn;
private PilotValidRq rq;
}

152
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java

@ -0,0 +1,152 @@
package kr.co.palnet.kac.api.v1.flight.laanc.service;
import kr.co.palnet.kac.api.v1.flight.laanc.model.CstmrModel;
import kr.co.palnet.kac.api.v1.flight.laanc.model.*;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreatePlanRQ;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CtrTrnsLctnModel;
import kr.co.palnet.kac.config.security.util.SessionHelper;
import kr.co.palnet.kac.core.exception.BaseErrorCode;
import kr.co.palnet.kac.core.exception.BaseException;
import kr.co.palnet.kac.data.flt.model.FltPlanArea;
import kr.co.palnet.kac.data.flt.model.FltPlanBas;
import kr.co.palnet.kac.data.flt.service.FltPlanDomainService;
import kr.co.palnet.kac.data.pty.model.PtyCstmrBas;
import kr.co.palnet.kac.data.pty.model.PtyCstmrDtl;
import kr.co.palnet.kac.data.pty.model.PtyGroupBas;
import kr.co.palnet.kac.data.pty.service.PtyCstmrDomainService;
import kr.co.palnet.kac.data.pty.service.PtyGroupDomainService;
import kr.co.palnet.kac.external.CtrTrnsLctnService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@Service
@Slf4j
@RequiredArgsConstructor
public class FlightLaancService {
private final PtyCstmrDomainService ptyCstmrDomainService;
private final PtyGroupDomainService ptyGroupDomainService;
private final FltPlanDomainService fltPlanDomainService;
private final CtrTrnsLctnService ctrTrnsLctnService;
@Transactional
public void createPlan(CreatePlanRQ rq) {
Long cstmrnSno = SessionHelper.getCstmrSno();
String userId = SessionHelper.getUserId();
// 비행계획서 INSERT
Optional<PtyCstmrBas> userEntityData = ptyCstmrDomainService.findPtyCstmrBasById(cstmrnSno);
Optional<PtyCstmrDtl> userDetailEntityData = ptyCstmrDomainService.findPtyCstmrDtlById(cstmrnSno);
if(userEntityData.isEmpty() || userDetailEntityData.isEmpty()) throw new BaseException(BaseErrorCode.DATA_EMPTY);
CstmrModel cstmrInfo = CstmrModel.toModel(userEntityData.get(), userDetailEntityData.get());
FltPlanBasDTO fltPlanBasDto = FltPlanBasDTO.toFltPlanBasDto(cstmrInfo, rq);
fltPlanBasDto.setDelYn("N");
fltPlanBasDto.setAprvlYn("Y");
fltPlanBasDto.setAprvlDt(LocalDateTime.now());
fltPlanBasDto.setCreateUserId(userId);
fltPlanBasDto.setUpdateUserId(userId);
// KAC 그룹 ID - LAANC에서는 KAC 그룹으로만 보여주도록 함.
String groupId = "";
String groupNm = "";
Optional<List<PtyGroupBas>> kacData = ptyGroupDomainService.findByGroupNm("KAC");
if (kacData.isPresent()) {
List<PtyGroupBas> kac = kacData.get();
groupId = kac.get(0).getGroupId();
groupNm = kac.get(0).getGroupNm();
}
fltPlanBasDto.setGroupId(groupId);
String corpRegYn = "N";
if (rq.getPilotValidRsList() != null && !rq.getPilotValidRsList().isEmpty()) {
boolean isCorpReg = rq.getPilotValidRsList().stream().anyMatch(pilotValidRs -> "Y".equals(pilotValidRs.getCorpregyn()));
corpRegYn = isCorpReg ? "Y" : "N";
}
fltPlanBasDto.setCorpRegYn(corpRegYn); // 사업자유무
fltPlanBasDto.setServiceType("F0002");
FltPlanBas fltPlanBas = fltPlanDomainService.saveFltPlanBas(FltPlanBasDTO.toFltPlanEntity(fltPlanBasDto));
Long planSno = fltPlanBas.getPlanSno();
// 비행구역 INSERT
List<BasLaancAreaModel> basLaancAreaModelList = rq.getAreaList();
if (basLaancAreaModelList != null && !basLaancAreaModelList.isEmpty()) {
for (BasLaancAreaModel laancAreaModel : basLaancAreaModelList) {
// 주소 가져오기
try {
double firstLat = laancAreaModel.getCoordList().get(0).getLat();
double firstLon = laancAreaModel.getCoordList().get(0).getLon();
CtrTrnsLctnModel ctrTrnsLctnModel = ctrTrnsLctnService.convertLatlonToAddress(firstLat, firstLon);
String address = ctrTrnsLctnModel.getArea1() + " " +
ctrTrnsLctnModel.getArea2() + " " +
ctrTrnsLctnModel.getLandNm() + " " +
ctrTrnsLctnModel.getLandNum();
laancAreaModel.setFltAreaAddr(address);
} catch (Exception e) {
log.error("get first coords to address fail. : ", e);
}
FltPlanAreaDTO fltPlanAreaDto = FltPlanAreaDTO.toDto(laancAreaModel);
fltPlanAreaDto.setPlanSno(planSno);
fltPlanAreaDto.setCreateUserId(userId);
fltPlanAreaDto.setUpdateUserId(userId);
FltPlanArea fltPlanArea = fltPlanDomainService.saveFltPlanArea(FltPlanAreaDTO.toEntity(fltPlanAreaDto));
Long planAreaSno = fltPlanArea.getPlanAreaSno();
List<BasLaancAreaCoordModel> laancAreaModelCoordList = laancAreaModel.getCoordList();
if (laancAreaModelCoordList != null && !laancAreaModelCoordList.isEmpty()) {
// double lat = laancAreaModelCoordList.get(0).getLat();
// double lon = laancAreaModelCoordList.get(0).getLon();
for (BasLaancAreaCoordModel basLaancAreaCoordModel : laancAreaModelCoordList) {
FltPlanAreaCoordDTO coordEntityDto = FltPlanAreaCoordDTO.toDto(basLaancAreaCoordModel);
coordEntityDto.setPlanAreaSno(planAreaSno);
coordEntityDto.setCreateUserId(userId);
fltPlanDomainService.saveFltPlanAreaCoord(FltPlanAreaCoordDTO.toEntity(coordEntityDto));
}
}
}
}
// 조종사 - 사용자 정보로 저장
FltPlanPilotDTO planPilotDto = FltPlanPilotDTO.toDto(cstmrInfo);
planPilotDto.setPlanSno(planSno);
planPilotDto.setGroupNm(groupNm);
planPilotDto.setCreateUserId(userId);
planPilotDto.setCreateDt(LocalDateTime.now());
planPilotDto.setUpdateUserId(userId);
planPilotDto.setUpdateDt(LocalDateTime.now());
fltPlanDomainService.saveFltPlanPilot(FltPlanPilotDTO.toEntity(planPilotDto));
// 기체정보 INSERT
List<BasLaancArcrftModel> basLaancArcrftModelList = rq.getArcrftList();
if (basLaancArcrftModelList != null && !basLaancArcrftModelList.isEmpty()) {
for (BasLaancArcrftModel basLaancArcrftModel : basLaancArcrftModelList) {
}
}
}
}

19
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java

@ -0,0 +1,19 @@
package kr.co.palnet.kac.api.v1.flight.plan.controller;
import kr.co.palnet.kac.api.v1.flight.plan.service.FlightPlanService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
@RequestMapping("/v1/flight/plan")
@RequiredArgsConstructor
public class FlightPlanController {
private final FlightPlanService flightPlanService;
}

11
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java

@ -0,0 +1,11 @@
package kr.co.palnet.kac.api.v1.flight.plan.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@RequiredArgsConstructor
public class FlightPlanService {
}

133
web/api-flight/src/main/java/kr/co/palnet/kac/external/CtrTrnsLctnService.java vendored

@ -0,0 +1,133 @@
package kr.co.palnet.kac.external;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CtrTrnsLctnModel;
import kr.co.palnet.kac.core.exception.BaseErrorCode;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.List;
import java.util.Map;
@Service
public class CtrTrnsLctnService {
@Value("${naver.api.url}")
private String NAVER_API_URL;
@Value("${naver.api.id}")
private String NAVER_API_ID;
@Value("${naver.api.key}")
private String NAVER_API_KEY;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* 위치에 맞는 값에 대한 주소로 변환하는 기능.
* @param lat
* @param lon
* @return
*/
public CtrTrnsLctnModel convertLatlonToAddress(double lat , double lon) {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(5000); //타임아웃 설정 5초
factory.setConnectionRequestTimeout(5000);//타임아웃 설정 5초
RestTemplate restTemplate = new RestTemplate(factory);
HttpHeaders header = new HttpHeaders();
header.add("X-NCP-APIGW-API-KEY-ID", NAVER_API_ID);
header.add("X-NCP-APIGW-API-KEY", NAVER_API_KEY);
HttpEntity<?> entity = new HttpEntity<>(header);
UriComponents uri = UriComponentsBuilder.fromHttpUrl(NAVER_API_URL)
.queryParam("request", "coordsToaddr")
.queryParam("coords", lon + "," + lat)
.queryParam("sourcecrs", "epsg:4326")
.queryParam("output", "json")
// .queryParam("orders", "roadaddr")
.queryParam("orders", "addr,roadaddr")
.build();
ResponseEntity<Map> resultMap = restTemplate.exchange(uri.toString(), HttpMethod.GET, entity, Map.class);
HttpStatusCode rsStatus = resultMap.getStatusCode();
if(rsStatus != HttpStatus.OK){
logger.debug("response error occurs.");
return null;
}
Map body = resultMap.getBody();
Map apiStatus = (Map)body.get("status");
try {
logger.debug(ObjectMapperUtils.getObjectMapper().writeValueAsString(body));
} catch (Exception e){
logger.error("",e);
}
String name = (String)apiStatus.get("name");
if(!"ok".equals(name)){
if(apiStatus != null){
logger.debug("get aera api response error occurs. : {}/{}", name, apiStatus.get("message"));
}else{
logger.debug("get aera api response error occurs.");
}
// logger.debug("{}\t/{}\t/{}\t/{}\t/{}", dto.getUserSno(), dto.getLctSno(), dto.getLat(), dto.getLon(), dto.getCreatDt());
logger.debug(BaseErrorCode.FAILED.message());
return null;
// throw new CustomException(ErrorCode.FAIL);
}
CtrTrnsLctnModel model = new CtrTrnsLctnModel();
List results = (List)body.get("results");
// 리스트에서 도로명 타입의 검색결과가 있는지 확인
// 있을 경우 해당 인덱스로 area 주소 반환
int typeIndex = -1;
for(Object result : results){
typeIndex++;
if("roadaddr".equals(((Map) result).get("name"))) break;
}
if(typeIndex < 0) {
logger.debug(BaseErrorCode.DATA_EMPTY.message());
return null;
}
Map result = (Map)results.get(typeIndex);
result.forEach((resultKey, resultValue) -> {
// log.debug(">>> resultKey / resultValue : {} / {}",resultKey, resultValue);
if("region".equals(resultKey)){
model.setArea1(((Map)((Map)resultValue).get("area1")).get("name").toString());
model.setArea2(((Map)((Map)resultValue).get("area2")).get("name").toString());
model.setArea3(((Map)((Map)resultValue).get("area3")).get("name").toString());
}
if("land".equals(resultKey)){
String landNum = ((Map)resultValue).get("number1").toString();
if(!"".equals(((Map)resultValue).get("number2").toString())){
landNum += "-" + ((Map)resultValue).get("number2").toString();
}
model.setLandNum(landNum);
if(((Map)resultValue).containsKey("name")){
model.setLandNm(((Map)resultValue).get("name").toString());
}else{
model.setLandNm("");
}
model.setZipCd(((Map)((Map)resultValue).get("addition1")).get("value").toString());
model.setAreaType(((Map)((Map)resultValue).get("addition0")).get("type").toString());
model.setAreaNm(((Map)((Map)resultValue).get("addition0")).get("value").toString());
}
});
return model;
}
}

2
web/security/src/main/java/kr/co/palnet/kac/config/security/util/JwtUtil.java

@ -15,7 +15,7 @@ public class JwtUtil {
// TODO key는 properties에서 가져올수 있도록 처리
private static final Algorithm ALGORITHM = Algorithm.HMAC512("pal-networks");
// 1시간
private static final long AUTH_TIME = 60 * 60;
private static final long AUTH_TIME = 60 * 600;
// 7일
private static final long REFRESH_TIME = 60 * 60 * 24 * 7;

Loading…
Cancel
Save