From b9b52cbec6839f4be9bc7d518bbf9608a1acecb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?sanguu516=28=EB=B0=95=EC=83=81=ED=98=84=29?= Date: Thu, 5 Oct 2023 13:51:55 +0900 Subject: [PATCH] =?UTF-8?q?laanc=201=EC=8A=A4=ED=85=9D=20api=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0(=EC=9E=91=EC=97=85=EC=A4=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/containers/laanc/LaancPlanContainer.js | 55 +-- src/modules/laanc/actions/laancActions.ts | 8 +- src/modules/laanc/apis/laancApi.ts | 21 +- src/modules/laanc/models/laancModels.ts | 425 +++++++++++++++++++- src/modules/laanc/reducers/laancReducers.ts | 7 +- src/modules/laanc/sagas/laancSagas.ts | 33 +- src/views/laanc/LaacnStep3.js | 22 +- src/views/laanc/LaancStep1.js | 71 ++-- src/views/laanc/LaancStep2.js | 28 +- 9 files changed, 569 insertions(+), 101 deletions(-) diff --git a/src/containers/laanc/LaancPlanContainer.js b/src/containers/laanc/LaancPlanContainer.js index eea39856..29e9884c 100644 --- a/src/containers/laanc/LaancPlanContainer.js +++ b/src/containers/laanc/LaancPlanContainer.js @@ -9,27 +9,15 @@ import { ErrorModal } from '../../components/modal/ErrorModal'; import { initFlight, initFlightBas -} from '../../modules/basis/flight/models/basisFlightModel'; -import { - Row, - Col, - Button, - Modal, - ModalHeader, - ModalBody, - ModalFooter, - Alert, - FormGroup, - Label, - Input -} from 'reactstrap'; +} from '../../modules/laanc/models/laancModels'; +import { Modal } from 'reactstrap'; import { AREA_DETAIL_INIT, FLIGHT_PLAN_AREA_BUFFER_LIST } from '../../modules/basis/flight/actions/basisFlightAction'; import { useDispatch, useSelector } from 'react-redux'; import { drawTypeChangeAction } from '../../modules/control/map/actions/controlMapActions'; - +import * as LaancAction from '../../modules/laanc/actions/laancActions'; export default function LaancPlanContainer({ currentParm, disabledAnimation, @@ -37,7 +25,6 @@ export default function LaancPlanContainer({ }) { const { areaCoordList } = useSelector(state => state.flightState); - const dispatch = useDispatch(); const [step, setStep] = useState(1); const [detailData, setDetailData] = useState(initFlightBas.initDetail); const [centeredModal, setCenteredModal] = useState(false); @@ -47,19 +34,16 @@ export default function LaancPlanContainer({ title: '', desc: '' }); - //날씨 임시 데이터 - const [wheather, setWheather] = useState([ - { - coordList: [ - { - lat: 37.40284040287055, - lon: 126.68639226254697 - } - ] - } - ]); + const { user } = useSelector(state => state.authState); + const dispatch = useDispatch(); + console.log('user>>>', user); useEffect(() => { + setDetailData({ + ...detailData, + cstmrSno: user.cstmrSno, + memberName: user.memberName + }); return () => { dispatch(drawTypeChangeAction('')); }; @@ -214,10 +198,10 @@ export default function LaancPlanContainer({ return false; } else if ( !detailData.arcrftList[0].arcrftTypeCd && - (detailData.commercial === '상업' || - detailData.arcrftList[0].arcrftWdth == '25kg초과' || - detailData.arcrftList[0].arcrftWdth == '2kg초과~7kg이하' || - detailData.arcrftList[0].arcrftWdth == '7kg초과~25kg이하') + (detailData.commercial === 'COMMERCIAL' || + detailData.arcrftList[0].arcrftWdth == '9' || + detailData.arcrftList[0].arcrftWdth == '10' || + detailData.arcrftList[0].arcrftWdth == '11') ) { setModal2({ isOpen: true, @@ -228,10 +212,10 @@ export default function LaancPlanContainer({ return false; } else if ( !detailData.arcrftList[0].groupNm && - (detailData.commercial === '상업' || - detailData.arcrftList[0].arcrftWdth == '25kg초과' || - detailData.arcrftList[0].arcrftWdth == '2kg초과~7kg이하' || - detailData.arcrftList[0].arcrftWdth == '7kg초과~25kg이하') + (detailData.commercial === 'COMMERCIAL' || + detailData.arcrftList[0].arcrftWdth == '9' || + detailData.arcrftList[0].arcrftWdth == '10' || + detailData.arcrftList[0].arcrftWdth == '11') ) { setModal2({ isOpen: true, @@ -243,6 +227,7 @@ export default function LaancPlanContainer({ } else { //api 호출 부분 + dispatch(LaancAction.laancFlightApproval.request(detailData)); setStep(2); } }; diff --git a/src/modules/laanc/actions/laancActions.ts b/src/modules/laanc/actions/laancActions.ts index 21356c02..87ec2e6b 100644 --- a/src/modules/laanc/actions/laancActions.ts +++ b/src/modules/laanc/actions/laancActions.ts @@ -1,7 +1,11 @@ import { AxiosError } from 'axios'; import { create } from 'sortablejs'; import { ActionType, createAction, createAsyncAction } from 'typesafe-actions'; -import { LaancFlightData, LaancApproval } from '../models/laancModels'; +import { + LaancFlightData, + LaancApproval, + FlightPlanData +} from '../models/laancModels'; // laanc 공문 pdf 다운로드 const LAANC_PDF_REQUEST = 'laanc/pdf/REQUEST'; @@ -25,7 +29,7 @@ export const laancFlightApproval = createAsyncAction( LAANC_FLIGHT_APPROVAL_REQUEST, LAANC_FLIGHT_APPROVAL_SUCCESS, LAANC_FLIGHT_APPROVAL_FAILURE -)(); +)(); const actions = { laancPdfAction, diff --git a/src/modules/laanc/apis/laancApi.ts b/src/modules/laanc/apis/laancApi.ts index bcdc54f8..2e992cab 100644 --- a/src/modules/laanc/apis/laancApi.ts +++ b/src/modules/laanc/apis/laancApi.ts @@ -1,13 +1,14 @@ import axios from '../../utils/customAxiosUtil'; -import {} from '../models/laancModels'; +import { + LaancFlightData, + FlightPlanAreaData, + FlightPlanData +} from '../models/laancModels'; // laanc 승인 -// export const laancApprovalApi = { -// postApproval: async (rq:) => { -// const { data }: ResponseApprovalData = await axios.post( -// `api/ctr/cntrl/history/list/${id}` -// ); - -// return data; -// }, -// } +export const laancApi = { + postApproval: async (data: FlightPlanData) => { + const res = await axios.post(`api/bas/laanc/plan/valid`, data); + return res; + } +}; diff --git a/src/modules/laanc/models/laancModels.ts b/src/modules/laanc/models/laancModels.ts index 99f4b679..d6964c5b 100644 --- a/src/modules/laanc/models/laancModels.ts +++ b/src/modules/laanc/models/laancModels.ts @@ -2,6 +2,7 @@ import moment from 'moment'; export interface laancState { laancApproval: LaancApproval | undefined; + detail: FlightPlanData | undefined; } // laanc계획서 초기값 @@ -216,6 +217,428 @@ export interface LaancApproval { flightAreaYn: string; // LAANC 기준 비행가능여부 } +export interface FlightPlanData { + planSno?: number; + groupId: string; + cstmrSno: number; + memberName: string; + email: string; + hpno: string; + clncd: string; + addr: string; + addrDtlCn: string; + zip: string; + schFltStDt: string; + schFltEndDt: string; + fltPurpose: string; + aprvlYn: string; + delYn: string; + createUserId: string; + createDt: string; + updateUserId: string; + updateDt: string; + areaList?: FlightPlanAreaDataList | undefined; + pilotList?: FlightPlanPilotDataList | undefined; + arcrftList?: FlightPlanArcrftDataList | undefined; + // docState: string +} + +export interface FlightPlanAreaData { + planAreaSno?: number; + planSno: number; + areaType: string; + fltMethod: string; + bufferZone: number; + fltElev: string; + createUserId?: string; + createDt?: string; + updateUserId?: string; + updateDt?: string; + coordList?: FlightPlanAreaCoordDataList | undefined; + bufferCoordList?: FlightPlanAreaCoordDataList | undefined; + // docState: string, +} + +export interface FlightPlanAreaDataList extends Array {} + +export interface FlightPlanAreaCoordData { + planAreaCoordSno?: number; + planAreaSno?: number; + lat: number; + lon: number; + createUserId?: string; + createDt?: string; + // docState: string +} + +export interface FlightPlanAreaCoordDataList + extends Array {} + +export interface FlightPlanPilotData { + planPilotSno?: number; + planSno?: number; + cstmrSno?: number; + groupNm: string; + memberName: string; + email: string; + hpno: string; + clncd: string; + addr: string; + addrDtlCn: string; + zip: string; + qlfcNo: string; + carrer: string; + createUserId: string; + createDt: string; + updateUserId: string; + updateDt: string; + // docState: string +} + +export interface FlightPlanPilotDataList extends Array {} + +export interface FlightPlanArcrftData { + planArcrftSno: number; + planSno: number; + arcrftSno: number; + idntfNum: string; + groupNm: string; + prdctNum: string; + arcrftTypeCd: string; + arcrftModelNm: string; + prdctCmpnNm: string; + prdctDate: string; + arcrftLngth: number; + arcrftWdth: number; + arcrftHght: number; + arcrftWght: number; + wghtTypeCd: string; + imageUrl: string; + takeoffWght: number; + useYn: string; + cameraYn: string; + insrncYn: string; + ownerNm: string; + createUserId: string; + createDt: string; + updateUserId: string; + updateDt: string; + // docState: string +} + +export interface FlightPlanArcrftDataList extends Array {} + export const laancControlData = { - laancApproval: undefined + laancApproval: undefined, + detail: { + planSno: 0, + groupId: '', + cstmrSno: 0, + memberName: '', + email: '', + hpno: '', + clncd: '+82', + addr: '', + addrDtlCn: '', + zip: '', + schFltStDt: moment() + .set({ h: 0, m: 0, s: 0 }) + .format('YYYY-MM-DD HH:mm:ss'), + schFltEndDt: moment() + .set({ h: 0, m: 0, s: 0 }) + .format('YYYY-MM-DD HH:mm:ss'), + fltPurpose: '', + aprvlYn: '', + delYn: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '', + areaList: [ + { + planAreaSno: 0, + planSno: 0, + areaType: '', + fltMethod: '', + bufferZone: 0, + fltElev: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '', + coordList: [ + { + planAreaCoordSno: 0, + planAreaSno: 0, + lat: 0, + lon: 0, + createUserId: '', + createDt: '' + } + ], + bufferCoordList: [ + { + planAreaCoordSno: 0, + planAreaSno: 0, + lat: 0, + lon: 0, + createUserId: '', + createDt: '' + } + ] + } + ], + + pilotList: [ + { + planPilotSno: 0, + planSno: 0, + cstmrSno: 0, + groupNm: '', + memberName: '', + email: '', + hpno: '', + clncd: '+82', + addr: '', + addrDtlCn: '', + zip: '', + qlfcNo: '', + carrer: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '' + } + ], + arcrftList: [ + { + planArcrftSno: 0, + planSno: 0, + arcrftSno: 0, + idntfNum: '', + groupNm: '', + prdctNum: '', + arcrftTypeCd: '', + arcrftModelNm: '', + prdctCmpnNm: '', + prdctDate: '', + arcrftLngth: 0, + arcrftWdth: 0, + arcrftHght: 0, + arcrftWght: 0, + wghtTypeCd: '', + imageUrl: '', + takeoffWght: 0, + useYn: '', + cameraYn: '', + insrncYn: '', + ownerNm: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '' + } + ] + } +}; +export const initFlightBas = { + page: 1, + total: 0, + plan: { + planSno: 0, + groupId: '', + cstmrSno: 0, + memberName: '', + email: '', + hpno: '', + clncd: '+82', + addr: '', + addrDtlCn: '', + zip: '', + schFltStDt: moment().format('YYYY-MM-DD HH:mm:ss'), + schFltEndDt: moment().format('YYYY-MM-DD HH:mm:ss'), + fltPurpose: '', + aprvlYn: '', + delYn: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '', + areaList: undefined, + pilotList: undefined, + arcrftList: undefined + }, + pilot: { + planPilotSno: 0, + planSno: 0, + cstmrSno: 0, + groupNm: '', + memberName: '', + email: '', + hpno: '', + clncd: '+82', + addr: '', + addrDtlCn: '', + zip: '', + qlfcNo: '', + carrer: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '' + }, + arcrft: { + planArcrftSno: 0, + planSno: 0, + arcrftSno: 0, + idntfNum: '', + groupNm: '', + prdctNum: '', + arcrftTypeCd: '', + arcrftModelNm: '', + prdctCmpnNm: '', + prdctDate: '', + arcrftLngth: 0, + arcrftWdth: 0, + arcrftHght: 0, + arcrftWght: 0, + wghtTypeCd: '', + imageUrl: '', + takeoffWght: 0, + useYn: '', + cameraYn: '', + insrncYn: '', + ownerNm: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '' + }, + area: { + planAreaSno: 0, + planSno: 0, + areaType: '', + fltMethod: '', + bufferZone: 0, + fltElev: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '', + coordList: undefined + }, + coord: { + planAreaCoordSno: 0, + planAreaSno: 0, + lat: 0, + lon: 0, + createUserId: '', + createDt: '' + }, + initDetail: { + planSno: 0, + groupId: '', + cstmrSno: 0, + memberName: '', + email: '', + commercial: '', + hpno: '', + clncd: '+82', + addr: '', + addrDtlCn: '', + zip: '', + schFltStDt: moment().add(5, 'minute').format('YYYY-MM-DD HH:mm:ss'), + schFltEndDt: moment().add(2, 'hours').format('YYYY-MM-DD HH:mm:ss'), + fltPurpose: '', + aprvlYn: '', + delYn: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '', + areaList: [ + { + planAreaSno: 0, + planSno: 0, + areaType: '', + fltMethod: '', + bufferZone: 0, + fltElev: '0', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '', + coordList: [ + { + planAreaCoordSno: 0, + planAreaSno: 0, + lat: 0, + lon: 0, + createUserId: '', + createDt: '' + } + ], + bufferCoordList: [ + { + planAreaCoordSno: 0, + planAreaSno: 0, + lat: 0, + lon: 0, + createUserId: '', + createDt: '' + } + ] + } + ], + pilotList: [ + { + planPilotSno: 0, + planSno: 0, + cstmrSno: 0, + groupNm: '', + memberName: '', + email: '', + hpno: '', + clncd: '+82', + addr: '', + addrDtlCn: '', + zip: '', + qlfcNo: '', + carrer: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '' + } + ], + arcrftList: [ + { + planArcrftSno: 0, + planSno: 0, + arcrftSno: 0, + idntfNum: '', + groupNm: '', + prdctNum: '', + arcrftTypeCd: '', + arcrftModelNm: '', + prdctCmpnNm: '', + prdctDate: '', + arcrftLngth: 0, + arcrftWdth: 0, + arcrftHght: 0, + arcrftWght: 0, + wghtTypeCd: '', + imageUrl: '', + takeoffWght: 0, + useYn: '', + cameraYn: '', + insrncYn: '', + ownerNm: '', + createUserId: '', + createDt: '', + updateUserId: '', + updateDt: '' + } + ] + } }; diff --git a/src/modules/laanc/reducers/laancReducers.ts b/src/modules/laanc/reducers/laancReducers.ts index d6115dc8..7a1ab9d0 100644 --- a/src/modules/laanc/reducers/laancReducers.ts +++ b/src/modules/laanc/reducers/laancReducers.ts @@ -9,12 +9,17 @@ import { laancPdfAction } from '../actions/laancActions'; import { LaancFlightData, + laancControlData, laancState, - laancControlData + initFlightBas } from '../models/laancModels'; export const laancReducer = createReducer( laancControlData +).handleAction(Actions.laancFlightApproval.success, (state, action) => + produce(state, draft => { + draft.detail = initFlightBas.initDetail; + }) ); // handleAction(Actions.laancFlightApproval.success, (state, action) => diff --git a/src/modules/laanc/sagas/laancSagas.ts b/src/modules/laanc/sagas/laancSagas.ts index 9114e26d..0349fa36 100644 --- a/src/modules/laanc/sagas/laancSagas.ts +++ b/src/modules/laanc/sagas/laancSagas.ts @@ -1,7 +1,9 @@ import { call, put, select, takeEvery } from '@redux-saga/core/effects'; import * as Actions from '../actions/laancActions'; import { ActionType } from 'typesafe-actions'; - +import * as MessageActions from '../../comn/message/actions/comnMessageAction'; +import * as Apis from '../apis/laancApi'; +import { ERROR_MESSAGE, SAVE_MESSAGE } from '../../../configs/constants'; // pdf 연결 function* getLaancPdfsaga( action: ActionType @@ -10,7 +12,34 @@ function* getLaancPdfsaga( // laanc 승인 여부 function* postApprovalsata( action: ActionType -) {} +) { + try { + const detail = action.payload; + + const res = yield call(Apis.laancApi.postApproval, detail); + + const { data } = res; + + yield put( + MessageActions.IS_MESSAGE({ + messageCode: SAVE_MESSAGE.code, + message: SAVE_MESSAGE.message, + isHistoryBack: true, + isRefresh: false + }) + ); + } catch (error) { + yield put( + MessageActions.IS_ERROR({ + errorCode: ERROR_MESSAGE.code, + errorMessage: ERROR_MESSAGE.message, + isHistoryBack: false, + isRefresh: false + }) + ); + // yield put(Actions.FLIGHT_PLAN_CREATE.failure(error)); + } +} export function* laancSaga() { yield takeEvery(Actions.laancPdfAction.request, getLaancPdfsaga); diff --git a/src/views/laanc/LaacnStep3.js b/src/views/laanc/LaacnStep3.js index 13cfea05..9001dd51 100644 --- a/src/views/laanc/LaacnStep3.js +++ b/src/views/laanc/LaacnStep3.js @@ -28,6 +28,19 @@ export default function LaacnStep3({ setCenteredModal, handleChange }) { + const obj = { + commercial: { + COMMERCIAL: '사업', + NON_COMMERCIAL: '비사업' + }, + arcrftWdth: { + 7: '최대이륙중량 250g 이하', + 8: '250g초과 ~ 2kg 이하', + 9: '2kg초과~7kg이하', + 10: '7kg초과~25kg이하', + 11: '25kg초과' + } + }; const [centeredModal2, setCenteredModal2] = useState(false); const { user } = useSelector(state => state.authState); return ( @@ -85,7 +98,7 @@ export default function LaacnStep3({ bsSize='sm' placeholder='' disabled - value={data.commercial} + value={obj.commercial[data.commercial]} /> @@ -149,7 +162,7 @@ export default function LaacnStep3({ bsSize='sm' placeholder='' disabled - value={data.arcrftList[0].arcrftWdth} + value={obj.arcrftWdth[data.arcrftList[0].arcrftWdth]} /> @@ -239,7 +252,10 @@ export default function LaacnStep3({ 신청하신 비행요청이 승인되었습니다.{' '} - 조종자 준수사항을 다시 확인부탁드리며,
자세한 사항은 발송된 문자를 확인해주시기 바랍니다.
+ + 조종자 준수사항을 다시 확인부탁드리며,
+ 자세한 사항은 발송된 문자를 확인해주시기 바랍니다. +
diff --git a/src/views/laanc/LaancStep1.js b/src/views/laanc/LaancStep1.js index bfb935fa..37988e05 100644 --- a/src/views/laanc/LaancStep1.js +++ b/src/views/laanc/LaancStep1.js @@ -125,8 +125,8 @@ export default function LaancStep1({ }} > - - + + @@ -212,22 +212,23 @@ export default function LaancStep1({ }} > - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -379,26 +380,18 @@ export default function LaancStep1({ }} > - - - - - + + + + + - {data.commercial === '사업' || - data.arcrftList[0].arcrftWdth == '25kg초과' || - data.arcrftList[0].arcrftWdth == '2kg초과~7kg이하' || - data.arcrftList[0].arcrftWdth == '7kg초과~25kg이하' ? ( + {data.commercial === 'COMMERCIAL' || + data.arcrftList[0].arcrftWdth == '11' || + data.arcrftList[0].arcrftWdth == '10' || + data.arcrftList[0].arcrftWdth == '9' ? ( <> @@ -421,10 +414,10 @@ export default function LaancStep1({ }} > - - - - + + + + diff --git a/src/views/laanc/LaancStep2.js b/src/views/laanc/LaancStep2.js index 57c83497..697292c0 100644 --- a/src/views/laanc/LaancStep2.js +++ b/src/views/laanc/LaancStep2.js @@ -49,6 +49,19 @@ export default function LaancStep2({ setCenteredModal, handlerLaancClose }) { + const obj = { + commercial: { + COMMERCIAL: '사업', + NON_COMMERCIAL: '비사업' + }, + arcrftWdth: { + 7: '최대이륙중량 250g 이하', + 8: '250g초과 ~ 2kg 이하', + 9: '2kg초과~7kg이하', + 10: '7kg초과~25kg이하', + 11: '25kg초과' + } + }; const [isterms, setIsterms] = useState(false); const [detailData, setDetailData] = useState(initFlightBas.initDetail); const { user } = useSelector(state => state.authState); @@ -75,6 +88,7 @@ export default function LaancStep2({ return Math.round(number * multiplier) / multiplier; }; + console.log('>>>>>>>>>', data); return ( <> @@ -218,16 +232,13 @@ export default function LaancStep2({ *승인 유형 - - - + /> @@ -278,9 +289,10 @@ export default function LaancStep2({