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