Browse Source

feat: PlanController 테스트 코드 추가

pull/9/head
lkd9125(이경도) 7 months ago
parent
commit
63b665c9e8
  1. 35
      app/kac-app/src/test/java/kr/co/palnet/kac/flt/laanc/FlightLaancControllerTest.java
  2. 255
      app/kac-app/src/test/java/kr/co/palnet/kac/flt/plan/FlightPlanControllerTest.java
  3. 8
      data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java
  4. 2
      data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArea.java
  5. 23
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanPilotDTO.java
  6. 13
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancAreaCoordModel.java
  7. 54
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java
  8. 55
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/CtrCntrlBasDTO.java
  9. 12
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java

35
app/kac-app/src/test/java/kr/co/palnet/kac/flt/laanc/FlightLaancControllerTest.java

@ -13,9 +13,6 @@ import org.springframework.http.MediaType;
import org.springframework.restdocs.headers.HeaderDocumentation;
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders;
import org.springframework.restdocs.payload.JsonFieldType;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.transaction.annotation.Transactional;
import java.util.UUID;
@ -104,9 +101,18 @@ public class FlightLaancControllerTest extends BaseTest {
fieldWithPath("areaList[].updateUserId").type(JsonFieldType.STRING).description("수정자ID"),
fieldWithPath("areaList[].updateDt").type(JsonFieldType.STRING).description("수정일시"),
fieldWithPath("areaList[].docState").type(JsonFieldType.STRING).description("코드"),
fieldWithPath("areaList[].coordList").type(JsonFieldType.ARRAY).description("비행구역 좌표리스트").optional(),
fieldWithPath("areaList[].bufferCoordList").type(JsonFieldType.ARRAY).description("비행 버퍼 좌표리스트").optional(),
fieldWithPath("areaList[].fltMothoeRm").type(JsonFieldType.STRING).description("비행방식(기타)"),
fieldWithPath("areaList[].coordList").type(JsonFieldType.ARRAY).description("비행구역 좌표리스트").optional(),
fieldWithPath("areaList[].coordList[].planAreaCoordSno").type(JsonFieldType.NUMBER).description("비행구역좌표 일련번호"),
fieldWithPath("areaList[].coordList[].planAreaSno").type(JsonFieldType.NUMBER).description("비행계획비행구역 일련번호"),
fieldWithPath("areaList[].coordList[].lat").type(JsonFieldType.NUMBER).description("위도"),
fieldWithPath("areaList[].coordList[].lon").type(JsonFieldType.NUMBER).description("경"),
fieldWithPath("areaList[].coordList[].createUserId").type(JsonFieldType.STRING).description("생성자ID"),
fieldWithPath("areaList[].coordList[].createDt").type(JsonFieldType.STRING).description("생성일시"),
fieldWithPath("areaList[].coordList[].docState").type(JsonFieldType.STRING).description("코드"),
fieldWithPath("arcrftList").type(JsonFieldType.ARRAY).description("비행기체 리스트"),
fieldWithPath("arcrftList[].planArcrftSno").type(JsonFieldType.NUMBER).description("계획서 기체 일련번호"),
@ -141,7 +147,26 @@ public class FlightLaancControllerTest extends BaseTest {
fieldWithPath("arcrftList[].corporationNm").type(JsonFieldType.STRING).description("법인명").optional(),
fieldWithPath("arcrftList[].arcrftWghtCd").type(JsonFieldType.STRING).description("자체중량코드"),
fieldWithPath("pilotList").type(JsonFieldType.ARRAY).description("공문URL").optional(),
fieldWithPath("pilotList").type(JsonFieldType.ARRAY).description("조종자 정보 리스트").optional(),
fieldWithPath("pilotList[].planPilotSno").type(JsonFieldType.NUMBER).description("조종자 일련번호"),
fieldWithPath("pilotList[].planSno").type(JsonFieldType.NUMBER).description("비행계획서일련번호"),
fieldWithPath("pilotList[].cstmrSno").type(JsonFieldType.NUMBER).description("고객일련번호"),
fieldWithPath("pilotList[].groupNm").type(JsonFieldType.STRING).description("그룹명"),
fieldWithPath("pilotList[].memberName").type(JsonFieldType.STRING).description("회원이름"),
fieldWithPath("pilotList[].email").type(JsonFieldType.STRING).description("이메일"),
fieldWithPath("pilotList[].hpno").type(JsonFieldType.STRING).description("휴대폰번"),
fieldWithPath("pilotList[].clncd").type(JsonFieldType.STRING).description("국가전화번호"),
fieldWithPath("pilotList[].addr").type(JsonFieldType.STRING).description("주소").optional(),
fieldWithPath("pilotList[].addrDtlCn").type(JsonFieldType.STRING).description("주소 상세내용").optional(),
fieldWithPath("pilotList[].zip").type(JsonFieldType.STRING).description("우편번호").optional(),
fieldWithPath("pilotList[].qlfcNo").type(JsonFieldType.STRING).description("자격번호").optional(),
fieldWithPath("pilotList[].carrer").type(JsonFieldType.STRING).description("경력").optional(),
fieldWithPath("pilotList[].createUserId").type(JsonFieldType.STRING).description("생성자ID"),
fieldWithPath("pilotList[].createDt").type(JsonFieldType.STRING).description("생성일시"),
fieldWithPath("pilotList[].updateUserId").type(JsonFieldType.STRING).description("수정자ID"),
fieldWithPath("pilotList[].updateDt").type(JsonFieldType.STRING).description("수정일시"),
fieldWithPath("arcrftWght").type(JsonFieldType.STRING).description("기체 중량설명"),
fieldWithPath("elev").type(JsonFieldType.STRING).description("비행고도")
)

255
app/kac-app/src/test/java/kr/co/palnet/kac/flt/plan/FlightPlanControllerTest.java

@ -0,0 +1,255 @@
package kr.co.palnet.kac.flt.plan;
import kr.co.palnet.kac.BaseTest;
import kr.co.palnet.kac.api.v1.flight.laanc.model.FltPlanBasDTO;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreateLaancPlanRQ;
import kr.co.palnet.kac.api.v1.flight.laanc.service.FlightLaancService;
import kr.co.palnet.kac.api.v1.flight.plan.model.CtrCntrlBasDTO;
import kr.co.palnet.kac.api.v1.flight.plan.service.FlightPlanService;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.restdocs.headers.HeaderDocumentation;
import org.springframework.restdocs.payload.JsonFieldType;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.restdocs.request.RequestDocumentation.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
public class FlightPlanControllerTest extends BaseTest {
@Autowired
private FlightLaancService flightLaancService;
@Autowired
private FlightPlanService flightPlanService;
private final String BASE_URL = "/v1/flight/plan";
private final String GRANT_TYPE = "Bearer";
@DisplayName("비행 운항 스케줄 조회")
@Test
@Transactional
public void getPlanSchedule() throws Exception{
String token = this.getUserToken();
LocalDate searchDate = LocalDate.now().plusDays(2);
this.testCreateData(searchDate);
this.mockMvc.perform(
get(this.BASE_URL + "/schedule")
.param("searchDate", searchDate.toString())
.accept(MediaType.APPLICATION_JSON_VALUE)
.header("Authorization", GRANT_TYPE + " " + token)
)
.andDo(print())
.andDo(
document(
"flight/plan/schedule",
preprocessResponse(prettyPrint()),
HeaderDocumentation.requestHeaders(
HeaderDocumentation.headerWithName("Authorization").description("Access토큰 [로그인 발급]")
),
queryParameters(
parameterWithName("searchDate").description("검색일자")
),
responseFields(
fieldWithPath("[].groupId").type(JsonFieldType.STRING).description("그룹아이디").optional(),
fieldWithPath("[].groupNm").type(JsonFieldType.STRING).description("그룹 명").optional(),
fieldWithPath("[].ownerNm").type(JsonFieldType.STRING).description("기체 소유자 이름").optional(),
fieldWithPath("[].idntfNum").type(JsonFieldType.STRING).description("기체 식별번호"),
fieldWithPath("[].startAddress").type(JsonFieldType.STRING).description("비행시작 주소").optional(),
fieldWithPath("[].endAddress").type(JsonFieldType.STRING).description("비행종료 주소").optional(),
fieldWithPath("[].schFltStDt").type(JsonFieldType.STRING).description("비행계획서 시작일").optional(),
fieldWithPath("[].schFltEndDt").type(JsonFieldType.STRING).description("비행계획서 종료일").optional(),
fieldWithPath("[].cntrlId").type(JsonFieldType.STRING).description("관제ID"),
fieldWithPath("[].cntrlStDt").type(JsonFieldType.STRING).description("비행 시작시간"),
fieldWithPath("[].cntrlEndDt").type(JsonFieldType.STRING).description("비행 종료시간"),
fieldWithPath("[].statusCd").type(JsonFieldType.STRING).description("스테이터스").optional()
)
)
)
.andExpect(status().isOk());
}
@DisplayName("비행 계획서 작성 - 버퍼존 생성")
@Test
@Transactional
public void createBuffer() throws Exception{
String token = this.getUserToken();
String jsonRQ = """
[
{
"planAreaSno": 0,
"planSno": 0,
"areaType": "LINE",
"fltMethod": "",
"fltMothoeRm": "",
"bufferZone": 100,
"fltElev": 0,
"createUserId": "",
"createDt": "",
"updateUserId": "",
"updateDt": "",
"coordList": [
{
"planAreaCoordSno": 0,
"planAreaSno": 0,
"lat": 37.53540376761919,
"lon": 126.70505084176824,
"createUserId": "",
"createDt": ""
},
{
"planAreaCoordSno": 0,
"planAreaSno": 0,
"lat": 37.53254793498979,
"lon": 126.71167265598018,
"createUserId": "",
"createDt": ""
}
]
}
]
""";
this.mockMvc.perform(
post(this.BASE_URL + "/area/buffer")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(jsonRQ)
.accept(MediaType.APPLICATION_JSON_VALUE)
.header("Authorization", GRANT_TYPE + " " + token)
)
.andDo(print())
.andDo(
document(
"flight/plan/area/buffer",
preprocessResponse(prettyPrint()),
HeaderDocumentation.requestHeaders(
HeaderDocumentation.headerWithName("Authorization").description("Access토큰 [로그인 발급]")
),
requestFields(
fieldWithPath("[].planAreaSno").type(JsonFieldType.NUMBER).description("비행구역 일련번호").optional(),
fieldWithPath("[].planSno").type(JsonFieldType.NUMBER).description("비행계획서 일련번호").optional(),
fieldWithPath("[].areaType").type(JsonFieldType.STRING).description("비행구역 생성타입"),
fieldWithPath("[].fltMethod").type(JsonFieldType.STRING).description("비행방식").optional(),
fieldWithPath("[].fltMothoeRm").type(JsonFieldType.STRING).description("비행방식(기타)").optional(),
fieldWithPath("[].bufferZone").type(JsonFieldType.NUMBER).description("버퍼존"),
fieldWithPath("[].fltElev").type(JsonFieldType.NUMBER).description("비행고도").optional(),
fieldWithPath("[].createUserId").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].createDt").type(JsonFieldType.STRING).description("생성일시").optional(),
fieldWithPath("[].updateUserId").type(JsonFieldType.STRING).description("수정자ID").optional(),
fieldWithPath("[].updateDt").type(JsonFieldType.STRING).description("수정일시").optional(),
fieldWithPath("[].coordList").type(JsonFieldType.ARRAY).description("좌표리스트"),
fieldWithPath("[].coordList[].planAreaCoordSno").type(JsonFieldType.NUMBER).description("비행구역좌표 일련번호").optional(),
fieldWithPath("[].coordList[].planAreaSno").type(JsonFieldType.NUMBER).description("비행계획비행구역 일련번호").optional(),
fieldWithPath("[].coordList[].lat").type(JsonFieldType.NUMBER).description("위도 [ ex -> 37.53540376761919 ] "),
fieldWithPath("[].coordList[].lon").type(JsonFieldType.NUMBER).description("경도 [ ex -> 126.70505084176824 ]"),
fieldWithPath("[].coordList[].createUserId").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].coordList[].createDt").type(JsonFieldType.STRING).description("생성일시").optional()
),
responseFields(
fieldWithPath("[].planAreaSno").type(JsonFieldType.NUMBER).description("비행구역 일련번호").optional(),
fieldWithPath("[].planSno").type(JsonFieldType.NUMBER).description("비행계획서 일련번호").optional(),
fieldWithPath("[].areaType").type(JsonFieldType.STRING).description("비행구역 생성타입"),
fieldWithPath("[].fltMethod").type(JsonFieldType.STRING).description("비행방식").optional(),
fieldWithPath("[].fltAreaAddr").type(JsonFieldType.STRING).description("비행지역주소").optional(),
fieldWithPath("[].fltMothoeRm").type(JsonFieldType.STRING).description("비행방식(기타)").optional(),
fieldWithPath("[].bufferZone").type(JsonFieldType.NUMBER).description("버퍼존"),
fieldWithPath("[].fltElev").type(JsonFieldType.STRING).description("비행고도").optional(),
fieldWithPath("[].createUserId").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].createDt").type(JsonFieldType.STRING).description("생성일시").optional(),
fieldWithPath("[].updateUserId").type(JsonFieldType.STRING).description("수정자ID").optional(),
fieldWithPath("[].updateDt").type(JsonFieldType.STRING).description("수정일시").optional(),
fieldWithPath("[].docState").type(JsonFieldType.STRING).description("코드").optional(),
fieldWithPath("[].bufferCoordList").type(JsonFieldType.ARRAY).description("좌표리스트"),
fieldWithPath("[].bufferCoordList[].planAreaCoordSno").type(JsonFieldType.NUMBER).description("비행구역좌표 일련번호").optional(),
fieldWithPath("[].bufferCoordList[].planAreaSno").type(JsonFieldType.NUMBER).description("비행계획비행구역 일련번호").optional(),
fieldWithPath("[].bufferCoordList[].lat").type(JsonFieldType.NUMBER).description("위도 [ ex -> 37.53540376761919 ] "),
fieldWithPath("[].bufferCoordList[].lon").type(JsonFieldType.NUMBER).description("경도 [ ex -> 126.70505084176824 ]"),
fieldWithPath("[].bufferCoordList[].createUserId").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].bufferCoordList[].createDt").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].bufferCoordList[].docState").type(JsonFieldType.STRING).description("코드").optional(),
fieldWithPath("[].coordList").type(JsonFieldType.ARRAY).description("좌표리스트"),
fieldWithPath("[].coordList[].planAreaCoordSno").type(JsonFieldType.NUMBER).description("비행구역좌표 일련번호").optional(),
fieldWithPath("[].coordList[].planAreaSno").type(JsonFieldType.NUMBER).description("비행계획비행구역 일련번호").optional(),
fieldWithPath("[].coordList[].lat").type(JsonFieldType.NUMBER).description("위도 [ ex -> 37.53540376761919 ] "),
fieldWithPath("[].coordList[].lon").type(JsonFieldType.NUMBER).description("경도 [ ex -> 126.70505084176824 ]"),
fieldWithPath("[].coordList[].createUserId").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].coordList[].createDt").type(JsonFieldType.STRING).description("생성자ID").optional(),
fieldWithPath("[].coordList[].docState").type(JsonFieldType.STRING).description("코드").optional()
)
)
)
.andExpect(status().isOk());
}
private FltPlanBasDTO testCreateData(LocalDate searchData){
LocalDateTime plusOneDay = LocalDateTime.now().plusDays(1);
LocalDateTime plusThreeDay = LocalDateTime.now().plusDays(3);
String jsonRQ = "{\"cstmrSno\": 3,\"fltType\": \"COMMERCIAL\",\"schFltStDt\": \"%s\",\"schFltEndDt\": \"%s\",\"fltPurpose\": \"06\",\"serviceType\": \"KAC\",\"areaList\" : [{\"areaType\": \"LINE\",\"fltMethod\": \"02\",\"fltMothoeRm\": \"\",\"bufferZone\": \"100\",\"fltElev\": \"100\",\"coordList\": [{\"lat\": 37.51625845252909,\"lon\": 126.72340194011286},{\"lat\": 37.512215014051776,\"lon\": 126.72058946300956},{\"lat\": 37.51123897883966,\"lon\": 126.72463239884405}]}],\"arcrftList\" : [{\"idntfNum\": \"PA0001\",\"groupNm\": \"\",\"prdctNum\": \"\",\"arcrftTypeCd\": \"11\",\"arcrftModelNm\": \"\",\"prdctCmpnNm\": \"\",\"prdctDate\": \"\",\"arcrftLngth\": 0,\"arcrftWghtCd\": \"8\",\"arcrftHght\": 0,\"arcrftWght\": 0,\"wghtTypeCd\": \"\",\"imageUrl\": \"\",\"takeoffWght\": 0,\"useYn\": \"\",\"cameraYn\": \"\",\"insrncYn\": \"\",\"ownerNm\": \"\"}],\"terms\": []}"
.trim()
.formatted(plusOneDay.toString(), plusThreeDay.toString());
CreateLaancPlanRQ rq;
FltPlanBasDTO result = new FltPlanBasDTO();
try{
rq = ObjectMapperUtils.getObjectMapper().readValue(jsonRQ, CreateLaancPlanRQ.class);
flightLaancService.createPlan(rq);
result = flightLaancService.testDescPlanSno();
LocalDateTime ctEndDt = searchData.atStartOfDay().plusHours(2);
LocalDateTime ctStDt = searchData.atStartOfDay();
CtrCntrlBasDTO ctrCntrlBasDTO = new CtrCntrlBasDTO();
ctrCntrlBasDTO.setAvrgSpeed(0.0);
ctrCntrlBasDTO.setBttrCnsmptn(null);
ctrCntrlBasDTO.setTtlDstnc(33.30811254417446);
ctrCntrlBasDTO.setTtlTime(0.0);
ctrCntrlBasDTO.setCntrlEndDt(ctEndDt);
ctrCntrlBasDTO.setCntrlStDt(ctStDt);
ctrCntrlBasDTO.setCreateDt(LocalDateTime.now());
ctrCntrlBasDTO.setFlghtEndDt(null);
ctrCntrlBasDTO.setFlghtStDt(null);
ctrCntrlBasDTO.setUpdateDt(LocalDateTime.now());
ctrCntrlBasDTO.setEndTypeCd("01");
ctrCntrlBasDTO.setObjectTypeCd("DRON");
ctrCntrlBasDTO.setStatusCd("99");
ctrCntrlBasDTO.setTtlDstncType("M");
ctrCntrlBasDTO.setTtlTimeType(null);
ctrCntrlBasDTO.setIdntfNum("PA0001");
ctrCntrlBasDTO.setCntrlId("00121354-7c41-4637-8283-c34c508625ac");
ctrCntrlBasDTO.setProcStatusYn("N");
flightPlanService.testCreateCtrCntrlBas(ctrCntrlBasDTO);
} catch (Exception e){
e.printStackTrace();
}
return result;
}
}

8
data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java

@ -1,7 +1,9 @@
package kr.co.palnet.kac.data.ctr.service;
import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas;
import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel;
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasQueryRepository;
import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,12 +17,18 @@ import java.util.Optional;
@RequiredArgsConstructor
public class CtrCntrlDomainService {
private final CtrCntrlBasRepository ctrCntrlBasRepository;
private final CtrCntrlBasQueryRepository ctrCntrlBasQueryRepository;
public Optional<List<CntrlJoinHstryAreaModel>> findCntrlJoinHstryAreaByIdntfNumAndSearchDate(String idntfNum, LocalDateTime schFltStDt, LocalDateTime schFltEndDt){
return ctrCntrlBasQueryRepository.findByIdntfNumAndSearchDate(idntfNum, schFltStDt, schFltEndDt);
}
public CtrCntrlBas saveCtrCntrlBas(CtrCntrlBas entity){
return ctrCntrlBasRepository.save(entity);
}

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

@ -82,7 +82,7 @@ public class FltPlanArea {
@ManyToOne(fetch = FetchType.LAZY)
private FltPlanBas fltPlanBas;
@OneToMany(mappedBy = "fltPlanArea", fetch = FetchType.LAZY)
@OneToMany(mappedBy = "fltPlanArea", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<FltPlanAreaCoord> fltPlanAreaCoordList;
}

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

@ -39,6 +39,29 @@ public class FltPlanPilotDTO {
return dto;
}
public static FltPlanPilotDTO toDto(FltPlanPilot entity){
FltPlanPilotDTO dto = new FltPlanPilotDTO();
dto.setPlanPilotSno(entity.getPlanPilotSno());
dto.setPlanSno(entity.getPlanSno());
dto.setCstmrSno(entity.getCstmrSno());
dto.setGroupNm(entity.getGroupNm());
dto.setMemberName(entity.getMemberName());
dto.setEmail(entity.getEmail());
dto.setHpno(entity.getHpno());
dto.setClncd(entity.getClncd());
dto.setAddr(entity.getAddr());
dto.setAddrDtlCn(entity.getAddrDtlCn());
dto.setZip(entity.getZip());
dto.setQlfcNo(entity.getQlfcNo());
dto.setCarrer(entity.getCarrer());
dto.setCreateUserId(entity.getCreateUserId());
dto.setCreateDt(entity.getCreateDt());
dto.setUpdateUserId(entity.getUpdateUserId());
dto.setUpdateDt(entity.getUpdateDt());
return dto;
}
public static FltPlanPilot toEntity(FltPlanPilotDTO dto){
return FltPlanPilot.builder()
.planPilotSno(dto.getPlanPilotSno())

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

@ -1,6 +1,7 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model.create;
import io.swagger.v3.oas.annotations.media.Schema;
import kr.co.palnet.kac.data.flt.model.FltPlanAreaCoord;
import lombok.Data;
import java.time.LocalDateTime;
@ -28,4 +29,16 @@ public class BasLaancAreaCoordModel {
@Schema(hidden = true)
private String docState = "R";
public static BasLaancAreaCoordModel toModel(FltPlanAreaCoord entity){
BasLaancAreaCoordModel model = new BasLaancAreaCoordModel();
model.setPlanAreaCoordSno(entity.getPlanAreaCoordSno());
model.setPlanAreaSno(entity.getPlanAreaSno());
model.setLat(entity.getLat());
model.setLon(entity.getLon());
model.setCreateUserId(entity.getCreateUserId());
model.setCreateDt(entity.getCreateDt());
return model;
}
}

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

@ -18,7 +18,7 @@ import kr.co.palnet.kac.api.v1.flight.laanc.model.valid.*;
import kr.co.palnet.kac.data.com.domain.ComConfirmBas;
import kr.co.palnet.kac.data.com.domain.ComFileBas;
import kr.co.palnet.kac.data.com.service.ComConfirmDomainService;
import kr.co.palnet.kac.data.flt.model.FltPlanArcrft;
import kr.co.palnet.kac.data.flt.model.*;
import kr.co.palnet.kac.data.other.service.OtherDomainService;
import kr.co.palnet.kac.api.external.model.ComnSmsLaancAprovModel;
import kr.co.palnet.kac.api.external.model.CtrTrnsLctnModel;
@ -27,8 +27,6 @@ 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.com.service.ComFileDomainService;
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;
@ -119,7 +117,9 @@ public class FlightLaancService {
String groupId = "";
String groupNm = "";
Optional<List<PtyGroupBas>> kacData = ptyGroupDomainService.findPtyGroupBasByGroupNm(rq.getServiceType());
// Optional<List<PtyGroupBas>> kacData = ptyGroupDomainService.findPtyGroupBasByGroupNm(rq.getServiceType());
// TODO :: 현재 모듈에서는 KAC 그룹이 생성되는 코드가 없기에 "" 값만 들어갈 예정임
Optional<List<PtyGroupBas>> kacData = ptyGroupDomainService.findPtyGroupBasByGroupNm("KAC");
if (kacData.isPresent() && !kacData.get().isEmpty()) {
List<PtyGroupBas> kac = kacData.get();
@ -144,6 +144,9 @@ public class FlightLaancService {
List<BasLaancAreaModel> basLaancAreaModelList = rq.getAreaList();
if (basLaancAreaModelList != null && !basLaancAreaModelList.isEmpty()) {
List<FltPlanArea> fltPlanAreaList = new ArrayList<>();
for (BasLaancAreaModel laancAreaModel : basLaancAreaModelList) {
// 주소 가져오기
try {
@ -171,16 +174,26 @@ public class FlightLaancService {
if (laancAreaModelCoordList != null && !laancAreaModelCoordList.isEmpty()) {
// double lat = laancAreaModelCoordList.get(0).getLat();
// double lon = laancAreaModelCoordList.get(0).getLon();
List<FltPlanAreaCoord> fltPlanAreaCoordList = new ArrayList<>();
for (BasLaancAreaCoordModel basLaancAreaCoordModel : laancAreaModelCoordList) {
FltPlanAreaCoordDTO coordEntityDto = FltPlanAreaCoordDTO.toDto(basLaancAreaCoordModel);
coordEntityDto.setPlanAreaSno(planAreaSno);
coordEntityDto.setCreateUserId(userId);
fltPlanDomainService.saveFltPlanAreaCoord(FltPlanAreaCoordDTO.toEntity(coordEntityDto));
FltPlanAreaCoord fltPlanAreaCoord = FltPlanAreaCoordDTO.toEntity(coordEntityDto);
fltPlanAreaCoordList.add(fltPlanAreaCoord);
}
fltPlanArea.setFltPlanAreaCoordList(fltPlanAreaCoordList);
}
fltPlanAreaList.add(fltPlanArea);
}
fltPlanBas.setFltPlanAreaList(fltPlanAreaList);
}
// 조종사 - 사용자 정보로 저장
@ -596,23 +609,38 @@ public class FlightLaancService {
result.setEmail(EncryptUtil.decrypt(result.getEmail()));
result.setFltTypeNm(result.getFltType().getValue());
Optional<List<FltPlanArea>> fltPlanAreaListData = fltPlanDomainService.findFltPlanAreaByPlanSno(planSno);
Optional<List<FltPlanArcrft>> fltPlanArcrftListData = fltPlanDomainService.findFltPlanArcrftByPlanSno(planSno);
List<FltPlanArea> fltPlanAreaList = fltPlanBas.getFltPlanAreaList();
List<FltPlanArcrft> fltPlanArcrftList = fltPlanBas.getFltPlanArcrftList();
List<FltPlanPilot> fltPlanPilotList = fltPlanBas.getFltPlanPilotList();
if(fltPlanAreaListData.isPresent()){
List<FltPlanArea> fltPlanAreaList = fltPlanAreaListData.get();
List<BasLaancAreaModel> areaList = fltPlanAreaList.stream().map(BasLaancAreaModel::toModel).toList();
if(fltPlanAreaList != null && !fltPlanAreaList.isEmpty()){
List<BasLaancAreaModel> areaList = new ArrayList<>();
for(FltPlanArea fltPlanArea : fltPlanAreaList){
List<BasLaancAreaCoordModel> fltPlanAreaCoordList = fltPlanArea.getFltPlanAreaCoordList().stream().map(BasLaancAreaCoordModel::toModel).toList();
BasLaancAreaModel node = BasLaancAreaModel.toModel(fltPlanArea);
node.setCoordList(fltPlanAreaCoordList);
areaList.add(node);
}
result.setAreaList(areaList);
}
if(fltPlanArcrftListData.isPresent()){
List<FltPlanArcrft> fltPlanArcrftList = fltPlanArcrftListData.get();
if(fltPlanArcrftList != null && !fltPlanArcrftList.isEmpty()){
List<BasLaancArcrftModel> arcrftList = fltPlanArcrftList.stream().map(BasLaancArcrftModel::toModel).toList();
result.setArcrftList(arcrftList);
}
if(fltPlanPilotList != null && !fltPlanPilotList.isEmpty()){
List<FltPlanPilotDTO> fltPlanPilotDTOList = fltPlanPilotList.stream().map(FltPlanPilotDTO::toDto).toList();
result.setPilotList(fltPlanPilotDTOList);
}
Optional<ComFileBas> comFileBasData = comFileDomainService.findFirstByFileGroupNoAndDelYnOrderByCreateDtDesc(fltPlanBas.getFileGroupNo());
// PDF URL 추출
@ -648,4 +676,6 @@ public class FlightLaancService {
public FltPlanBasDTO testDescPlanSno(){
return FltPlanBasDTO.toFltPlanBasDto(fltPlanDomainService.findByOrderByPlanSnoDesc());
}
}

55
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/CtrCntrlBasDTO.java

@ -0,0 +1,55 @@
package kr.co.palnet.kac.api.v1.flight.plan.model;
import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class CtrCntrlBasDTO {
private String cntrlId; // 관제ID
private String idntfNum; // 식별번호
private String statusCd; // 상태코드
private String procStatusYn; // 처리상태여부
private String objectTypeCd; // 물체타입코드
private LocalDateTime flghtStDt; // 비행시작일시
private LocalDateTime flghtEndDt; // 비행종료일시
private LocalDateTime cntrlStDt; // 관제시작일시
private LocalDateTime cntrlEndDt; // 관제종료일시
private Double ttlTime; // 총비행시간
private String ttlTimeType; // 총비행시간단위
private Double ttlDstnc; // 총비행거리
private String ttlDstncType; // 총비행거리단위
private Double avrgSpeed; // 평균속도
private String avrgSpeedType; // 평균속도단위
private Double bttrCnsmptn; // 배터리소모량
private String endTypeCd; // 종료타입코드
private LocalDateTime createDt; // 생성일시
private LocalDateTime updateDt; // 수정일시
public CtrCntrlBas toEntity(){
return CtrCntrlBas.builder()
.cntrlId(this.cntrlId)
.idntfNum(this.idntfNum)
.statusCd(this.statusCd)
.procStatusYn(this.procStatusYn)
.objectTypeCd(this.objectTypeCd)
.flghtStDt(this.flghtStDt)
.flghtEndDt(this.flghtEndDt)
.cntrlStDt(this.cntrlStDt)
.cntrlEndDt(this.cntrlEndDt)
.ttlTime(this.ttlTime)
.ttlTimeType(this.ttlTimeType)
.ttlDstnc(this.ttlDstnc)
.ttlDstncType(this.ttlDstncType)
.avrgSpeed(this.avrgSpeed)
.avrgSpeedType(this.avrgSpeedType)
.bttrCnsmptn(this.bttrCnsmptn)
.endTypeCd(this.endTypeCd)
.createDt(this.createDt)
.updateDt(this.updateDt)
.build();
}
}

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

@ -2,9 +2,11 @@ package kr.co.palnet.kac.api.v1.flight.plan.service;
import kr.co.palnet.kac.api.util.AreaUtils;
import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.CtrCntrlBasDTO;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.BufferAreaCoordModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel;
import kr.co.palnet.kac.api.v1.flight.plan.model.schedule.SearchPlanScheduleRS;
import kr.co.palnet.kac.data.ctr.model.CtrCntrlBas;
import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel;
import kr.co.palnet.kac.data.ctr.service.CtrCntrlDomainService;
import kr.co.palnet.kac.data.flt.model.join.FltPlanBasJoinAreaModel;
@ -87,7 +89,11 @@ public class FlightPlanService {
node.setOwnerNm(model.getOwnerNm());
node.setIdntfNum(model.getIdntfNum());
node.setGroupId(model.getGroupId());
node.setGroupNm(ptyGroupBas.getGroupNm());
node.setSchFltStDt(model.getSchFltStDt());
node.setSchFltEndDt(model.getSchFltEndDt());
// node.setGroupId(ptyGroupBas.getGroupNm());
// TODO :: FLT모듈 추가시에는 그룹을 추가하는 코드가 없어 ""으로 대체 추후 그룹 추가시 주석은 풀고 아래코드는 삭제할것임
node.setGroupNm(ptyGroupBas == null ? "" : ptyGroupBas.getGroupNm());
result.add(node);
@ -96,4 +102,8 @@ public class FlightPlanService {
return result;
}
public void testCreateCtrCntrlBas(CtrCntrlBasDTO createData){
CtrCntrlBas ctrCntrlBas = ctrCntrlDomainService.saveCtrCntrlBas(createData.toEntity());
}
}

Loading…
Cancel
Save