lkd9125(이경도)
7 months ago
33 changed files with 1266 additions and 20 deletions
@ -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); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -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") |
||||
|
||||
} |
||||
|
@ -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); |
||||
} |
||||
} |
@ -0,0 +1,7 @@
|
||||
package kr.co.palnet.kac.api.v1.flight.laanc.model; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class AnctCstmrTermsModel { |
||||
} |
@ -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; // 기체 무게 코드 ----
|
||||
} |
@ -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"; |
||||
} |
@ -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; |
||||
} |
@ -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; |
||||
} |
||||
|
||||
|
||||
} |
@ -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(); |
||||
} |
||||
|
||||
} |
@ -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(); |
||||
} |
||||
} |
@ -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(); |
||||
} |
||||
|
||||
|
||||
} |
@ -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(); |
||||
} |
||||
|
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; // 자격여부
|
||||
} |
@ -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; |
||||
} |
@ -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; |
||||
} |
@ -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; |
||||
} |
@ -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) { |
||||
|
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -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; |
||||
|
||||
|
||||
|
||||
} |
@ -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 { |
||||
} |
@ -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; |
||||
|
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue