lkd9125(이경도)
7 months ago
9 changed files with 438 additions and 19 deletions
@ -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; |
||||
} |
||||
} |
@ -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(); |
||||
} |
||||
} |
Loading…
Reference in new issue