From c4a98b5468b524852f20e01663168ff11ce9c998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?junh=5Feee=28=EC=9D=B4=EC=A4=80=ED=9D=AC=29?= Date: Tue, 24 Oct 2023 12:05:20 +0900 Subject: [PATCH] =?UTF-8?q?laanc=20=EB=B9=84=ED=96=89=EA=B5=AC=EC=97=AD=20?= =?UTF-8?q?=EA=B4=80=EC=A0=9C=EA=B6=8C=ED=8F=AC=ED=95=A8=20=EC=9C=A0?= =?UTF-8?q?=EB=AC=B4=20api=EC=97=B0=EA=B2=B0=20=EB=B0=8F=20reducer=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/laanc/LaancAreaMap.js | 15 ++++++---- .../map/mapbox/draw/LaancDrawControl.js | 29 ++++--------------- .../basis/flight/actions/basisFlightAction.ts | 15 +++++++++- .../basis/flight/apis/basisFlightApi.ts | 5 ++++ .../basis/flight/models/basisFlightModel.ts | 13 ++++----- .../flight/reducers/basisFlightReducer.ts | 22 ++++++-------- .../basis/flight/sagas/basisFlightSaga.ts | 14 +++++++++ 7 files changed, 64 insertions(+), 49 deletions(-) diff --git a/src/components/laanc/LaancAreaMap.js b/src/components/laanc/LaancAreaMap.js index d55e0218..0fc00850 100644 --- a/src/components/laanc/LaancAreaMap.js +++ b/src/components/laanc/LaancAreaMap.js @@ -9,7 +9,8 @@ import { Card, CardBody } from 'reactstrap'; import { initFlightBas } from '../../modules/basis/flight/models/basisFlightModel'; import { AREA_COORDINATE_LIST_SAVE, - FLIGHT_PLAN_AREA_BUFFER_LIST + FLIGHT_PLAN_AREA_BUFFER_LIST, + FLIGHT_PLAN_AREA_INAIRAREA } from '../../modules/basis/flight/actions/basisFlightAction'; import { drawTypeChangeAction, @@ -45,6 +46,7 @@ export default function LaancAreaMap({ const dispatch = useDispatch(); const mapControl = useSelector(state => state.controlMapReducer); const { areaCoordList } = useSelector(state => state.flightState); + const { inAirArea } = useSelector(state => state.flightState); const [mapObject, setMapObject] = useState(); const [isMapLoad, setIsMapLoad] = useState(false); @@ -75,6 +77,10 @@ export default function LaancAreaMap({ setMode(mapControl.drawType); }, [mapControl.drawType]); + // useEffect(() => { + // console.log(inAirArea, '--inairARea'); + // }, [inAirArea]); + useEffect(() => { if (areaCoordList && mapObject) { if ( @@ -280,18 +286,17 @@ export default function LaancAreaMap({ ...area, bufferZone: areaInfo.bufferZone, areaType: areaInfo.areaType, - coordList: coordList, - inAirArea: areaInfo.inAirArea + coordList: coordList }; }); - sessionStorage.setItem('inAirArea', JSON.stringify(areaList[0].inAirArea)); - if (areaInfo.areaType === 'LINE' || areaInfo.areaType === 'POLYGON') { dispatch(FLIGHT_PLAN_AREA_BUFFER_LIST.request(areaList)); } else { setMapAreaCoordList(areaList); } + + dispatch(FLIGHT_PLAN_AREA_INAIRAREA.request(areaList)); }; const handlerConfirm = areaList => { diff --git a/src/components/map/mapbox/draw/LaancDrawControl.js b/src/components/map/mapbox/draw/LaancDrawControl.js index f33621b2..6123e5a3 100644 --- a/src/components/map/mapbox/draw/LaancDrawControl.js +++ b/src/components/map/mapbox/draw/LaancDrawControl.js @@ -3,7 +3,6 @@ import { InfoModal } from '../../../modal/InfoModal'; import { useDispatch, useSelector } from 'react-redux'; import { CalculateDistance, - handlerGetCircleCoord, handlerGetHtmlContent, handlerGetMidPoint, handlerRemoveAllMarker, @@ -13,6 +12,7 @@ import { import { drawTypeChangeAction } from '../../../../modules/control/map/actions/controlMapActions'; import MapboxDraw from '@mapbox/mapbox-gl-draw'; import { CircleMode } from 'mapbox-gl-draw-circle'; +import axios from '../../../../modules/utils/customAxiosUtil'; export const LaancDrawControl = props => { const dispatch = useDispatch(); @@ -21,12 +21,9 @@ export const LaancDrawControl = props => { const drawObj = props.drawObj; const mapObject = props.mapObject; - // const [drawObjId, setDrawObjId] = useState(); const [bufferId, setBufferId] = useState(); const [isDrawDone, setIsDrawDone] = useState(false); - // const [inAirArea, setInAirArea] = useState(false); - let inAirArea = 'N'; const [alertModal, setAlertModal] = useState({ isOpen: false, @@ -79,15 +76,6 @@ export const LaancDrawControl = props => { const handlerCustomOnClick = (state, e) => { console.log('click'); - const features = mapObject.queryRenderedFeatures(e.point, { - layers: ['maine'] - }); - if (features.length > 0) { - inAirArea = 'Y'; - // setInAirArea(true); - // console.log(features, '>>>>>관제권?'); - } - const type = handlerReturnMode(drawObj.getMode()); const obj = state[type?.toLowerCase()]; @@ -135,8 +123,6 @@ export const LaancDrawControl = props => { radius: obj.properties.radiusInKm * 1000, id: obj.id }; - // 임시 데이터(circle 관제권 유무 판별 여기서 해줘야 함) - drawObj.setFeatureProperty(obj.id, 'inAirArea', 'N'); drawObj.setFeatureProperty(data.id, 'id', mode); handlerCreateOneMarker([0, -10], data.coord, data.radius, data.id); @@ -146,7 +132,6 @@ export const LaancDrawControl = props => { const length = state.currentVertexPosition; if (obj.coordinates.length > 0) { drawObj?.setFeatureProperty(obj.id, 'id', mode); - drawObj?.setFeatureProperty(obj.id, 'inAirArea', inAirArea); // dbl클릭이 click 두번으로 인식돼서, 마지막 값을 없애버리기로 함 if (mode === 'LINE') { @@ -186,8 +171,7 @@ export const LaancDrawControl = props => { } const data = { coord: obj.coordinates, - id: obj.id, - inAirArea: inAirArea + id: obj.id }; handlerAbnormalityCheck(data, mode); } @@ -251,7 +235,7 @@ export const LaancDrawControl = props => { ? data.coord : null; - const datas = { coord: initCoord, mode: mode, inAirArea: inAirArea }; + const datas = { coord: initCoord, mode: mode }; handlerSaveAreaInfo(datas); }; @@ -321,8 +305,7 @@ export const LaancDrawControl = props => { const areaInfo = { coordinates: [], bufferZone: 0, - areaType: '', - inAirArea: 'N' + areaType: '' }; const bufferZone = data.mode === 'POLYGON' ? 0 : 100; @@ -342,7 +325,6 @@ export const LaancDrawControl = props => { areaInfo.coordinates = prePath; areaInfo.bufferZone = bufferZone; - areaInfo.inAirArea = inAirArea; if (areaInfo.areaType === 'CIRCLE') { const obj = drawObj.getAll().features; const feature = obj.filter(o => o.properties.id === 'CIRCLE'); @@ -354,12 +336,13 @@ export const LaancDrawControl = props => { areaInfo.coordinates = [point]; areaInfo.bufferZone = feature[0].properties.radiusInKm * 1000; } + props.handlerCoordinates(areaInfo); setIsDrawDone(true); const viewCoordObj = drawObj .getAll() - .features.filter(o => o.properties?.inAirArea); + .features.filter(o => o.properties.id !== 'BUFFER'); props.setViewCoordObj(viewCoordObj); diff --git a/src/modules/basis/flight/actions/basisFlightAction.ts b/src/modules/basis/flight/actions/basisFlightAction.ts index a359199a..23708d02 100644 --- a/src/modules/basis/flight/actions/basisFlightAction.ts +++ b/src/modules/basis/flight/actions/basisFlightAction.ts @@ -97,6 +97,11 @@ const FLIGHT_WEATHER_REQUEST = 'control/gp/FLIGHT_WEATHER_REQUEST'; const FLIGHT_WEATHER_SUCCESS = 'control/gp/FLIGHT_WEATHER_SUCCESS'; const FLIGHT_WEATHER_FAILURE = 'control/gp/FLIGHT_WEATHER_FAILURE'; +// 관제권 유무 +const AREA_INAIRAREA_REQUEST = 'basis/flight/plan/area/INAIRAREA_REQUEST'; +const AREA_INAIRAREA_SUCCESS = 'basis/flight/plan/area/INAIRAREA_SUCCESS'; +const AREA_INAIRAREA_FAILURE = 'basis/flight/plan/area/INAIRAREA_FAILURE'; + // 비행계획서 조회(승인) const FLIGHT_APRV_LIST_REQUEST = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_REQUEST'; @@ -246,6 +251,13 @@ export const FLIGHT_PLAN_AREA_BUFFER_LIST = createAsyncAction( AREA_BUFFER_LIST_FAILURE )(); +// 관제권 포함 유무 +export const FLIGHT_PLAN_AREA_INAIRAREA = createAsyncAction( + AREA_INAIRAREA_REQUEST, + AREA_INAIRAREA_SUCCESS, + AREA_INAIRAREA_FAILURE +)(); + // 비행계획서 조회(승인) export const FLIGHT_APRV_LIST = createAsyncAction( FLIGHT_APRV_LIST_REQUEST, @@ -305,7 +317,8 @@ const actions = { FLIGHT_APRV_PROC, SEARCH_AREA, FLIGHT_SCHEDULE_LIST, - FlightweatherAction + FlightweatherAction, + FLIGHT_PLAN_AREA_INAIRAREA }; export type FlightAction = ActionType; diff --git a/src/modules/basis/flight/apis/basisFlightApi.ts b/src/modules/basis/flight/apis/basisFlightApi.ts index a9a1bfb2..dc4d5c0e 100644 --- a/src/modules/basis/flight/apis/basisFlightApi.ts +++ b/src/modules/basis/flight/apis/basisFlightApi.ts @@ -82,5 +82,10 @@ export const flightPlanAPI = { }, scheduleList: async (date: string) => { return await axios.get(`api/bas/flight/schedule?searchDate=${date}`); + }, + + inAirArea: async (data: FlightPlanAreaDataList) => { + const res = await axios.post(`api/bas/flight/airspace/contains`, data); + return res.data.result; } }; diff --git a/src/modules/basis/flight/models/basisFlightModel.ts b/src/modules/basis/flight/models/basisFlightModel.ts index 93cbaa0e..bc30cc07 100644 --- a/src/modules/basis/flight/models/basisFlightModel.ts +++ b/src/modules/basis/flight/models/basisFlightModel.ts @@ -21,6 +21,7 @@ export interface FlightState { selectGroup: SelectGroupData | undefined; listSelect: ListGroupData | undefined; aprvSelect: ListGroupData | undefined; + inAirArea: boolean | undefined; } export interface weatherData { serviceKey: string; @@ -124,7 +125,6 @@ export interface FlightPlanAreaData { updateDt?: string; coordList?: FlightPlanAreaCoordDataList | undefined; bufferCoordList?: FlightPlanAreaCoordDataList | undefined; - inAirArea: boolean; // docState: string, } @@ -249,6 +249,7 @@ export const initFlight = { page: 1, total: 0, conut: 0, + inAirArea: false, selectGroup: { cstmrSno: 0, groupId: '', @@ -325,8 +326,7 @@ export const initFlight = { createUserId: '', createDt: '' } - ], - inAirArea: false + ] } ], @@ -395,6 +395,7 @@ export const initFlight = { export const initFlightBas = { page: 1, total: 0, + inAirArea: false, plan: { planSno: 0, groupId: '', @@ -476,8 +477,7 @@ export const initFlightBas = { createDt: '', updateUserId: '', updateDt: '', - coordList: undefined, - inAirArea: false + coordList: undefined }, coord: { planAreaCoordSno: 0, @@ -539,8 +539,7 @@ export const initFlightBas = { createUserId: '', createDt: '' } - ], - inAirArea: false + ] } ], pilotList: [ diff --git a/src/modules/basis/flight/reducers/basisFlightReducer.ts b/src/modules/basis/flight/reducers/basisFlightReducer.ts index 7c0a233a..55391bb4 100644 --- a/src/modules/basis/flight/reducers/basisFlightReducer.ts +++ b/src/modules/basis/flight/reducers/basisFlightReducer.ts @@ -124,19 +124,7 @@ export const flightReducer = createReducer( .handleAction(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.success, (state, action) => produce(state, draft => { const data = action.payload; - if (draft.areaCoordList) { - if (draft.areaCoordList.length > 0) { - // const inAirArea = draft.areaCoordList[0].inAirArea; - const inAirArea = sessionStorage.getItem('inAirArea') as string; - if (inAirArea.includes('N')) { - draft.areaCoordList[0] = { ...data[0], inAirArea: false }; - } else { - draft.areaCoordList[0] = { ...data[0], inAirArea: true }; - } - // draft.areaCoordList[0] = { ...data[0], inAirArea }; - // draft.areaCoordList[0] = { ...data[0] }; - } - } + draft.areaCoordList = data; }) ) //비행구역설정 날씨 API @@ -175,4 +163,12 @@ export const flightReducer = createReducer( const data = action.payload; draft.scheduleList = data; }) + ) + + // 관제권 포함 유무 + .handleAction(Actions.FLIGHT_PLAN_AREA_INAIRAREA.success, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.inAirArea = data; + }) ); diff --git a/src/modules/basis/flight/sagas/basisFlightSaga.ts b/src/modules/basis/flight/sagas/basisFlightSaga.ts index 4cc56933..4a665ca9 100644 --- a/src/modules/basis/flight/sagas/basisFlightSaga.ts +++ b/src/modules/basis/flight/sagas/basisFlightSaga.ts @@ -433,6 +433,19 @@ function* searchAreaSaga( } } +// 관제권 유무 +function* inAirAreaSaga( + action: ActionType +) { + try { + const data = action.payload; + const res = yield call(Apis.flightPlanAPI.inAirArea, data); + yield put(Actions.FLIGHT_PLAN_AREA_INAIRAREA.success(res)); + } catch (error) { + yield put(Actions.FLIGHT_PLAN_AREA_INAIRAREA.failure(error)); + } +} + export function* flightSaga() { yield takeEvery(Actions.PUBLIC_AREA_LIST.request, listAreaSaga); // yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea); @@ -449,4 +462,5 @@ export function* flightSaga() { yield takeEvery(Actions.SEARCH_AREA.request, searchAreaSaga); yield takeEvery(Actions.FLIGHT_SCHEDULE_LIST.request, scheduleListSaga); yield takeEvery(Actions.FlightweatherAction.request, WeatherSaga); + yield takeEvery(Actions.FLIGHT_PLAN_AREA_INAIRAREA.request, inAirAreaSaga); }