Browse Source

비행운항 스케줄 작업중

pull/2/head
kimjh(김장현) 2 years ago
parent
commit
dbae305928
  1. 28
      package-lock.json
  2. 2
      package.json
  3. 203
      src/components/basis/flight/schedule/FlightScheduleGrid.js
  4. 22
      src/components/basis/flight/schedule/FlightScheduleRealTime.js
  5. 18
      src/components/basis/flight/schedule/FlightScheduleSearch.js
  6. 6
      src/components/crud/grid/GridDatatable.js
  7. 2
      src/containers/basis/flight/schedule/FlightScheduleContainer.js
  8. 3
      src/containers/basis/group/BasisGroupUsersContainer.js
  9. 97
      src/modules/basis/flight/actions/basisFlightAction.ts
  10. 13
      src/modules/basis/flight/apis/basisFlightApi.ts
  11. 363
      src/modules/basis/flight/models/basisFlightModel.ts
  12. 7
      src/modules/basis/flight/reducers/basisFlightReducer.ts
  13. 173
      src/modules/basis/flight/sagas/basisFlightSaga.ts
  14. 21
      src/utility/hooks/useInterval.js
  15. 1
      src/views/weather/WeatherView.js

28
package-lock.json generated

@ -12896,11 +12896,6 @@
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
}, },
"lodash.orderby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz",
"integrity": "sha1-5pfwTOXXhSL1TZM4syuBozk+TrM="
},
"lodash.template": { "lodash.template": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
@ -13495,11 +13490,6 @@
"resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
"integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
}, },
"nanoid": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
"integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
},
"nanomatch": { "nanomatch": {
"version": "1.2.13", "version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@ -20676,13 +20666,11 @@
"integrity": "sha512-exyAdFLAxtuM4wNwLYrlKyPYLiJ7e0mv9tqPAd3kq+k1CiJFtznevR3yP0icv5q/y200w+lzNgi7TQn1Wrhu0w==" "integrity": "sha512-exyAdFLAxtuM4wNwLYrlKyPYLiJ7e0mv9tqPAd3kq+k1CiJFtznevR3yP0icv5q/y200w+lzNgi7TQn1Wrhu0w=="
}, },
"react-data-table-component": { "react-data-table-component": {
"version": "6.11.2", "version": "7.5.3",
"resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-6.11.2.tgz", "resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-7.5.3.tgz",
"integrity": "sha512-xoaTVTX4svgY3norL707GSUZJ5Q0FRZ1g2QY5oI5soiNtGMor9yGTXjnMq6mDmL9A4a7lmA+4xntoEEMJMcIvA==", "integrity": "sha512-JhatRTgThAAa1HobPaPmkNPsjLT6+fnMIdtcXRCy+0bSYN7XJnTgob9Qyi4bjHh/8tMPTHtxZCV/TKiPwRvFMA==",
"requires": { "requires": {
"deepmerge": "^4.2.2", "deepmerge": "^4.2.2"
"lodash.orderby": "^4.6.0",
"shortid": "^2.2.15"
} }
}, },
"react-datepicker": { "react-datepicker": {
@ -23441,14 +23429,6 @@
"smoothscroll-polyfill": "^0.4.4" "smoothscroll-polyfill": "^0.4.4"
} }
}, },
"shortid": {
"version": "2.2.16",
"resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz",
"integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==",
"requires": {
"nanoid": "^2.1.0"
}
},
"side-channel": { "side-channel": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",

2
package.json

@ -69,7 +69,7 @@
"react-copy-to-clipboard": "5.0.2", "react-copy-to-clipboard": "5.0.2",
"react-country-flag": "2.0.1", "react-country-flag": "2.0.1",
"react-csv": "^2.0.3", "react-csv": "^2.0.3",
"react-data-table-component": "6.11.2", "react-data-table-component": "^7.5.3",
"react-datepicker": "^4.2.1", "react-datepicker": "^4.2.1",
"react-dom": "17.0.1", "react-dom": "17.0.1",
"react-draft-wysiwyg": "1.14.5", "react-draft-wysiwyg": "1.14.5",

203
src/components/basis/flight/schedule/FlightScheduleGrid.js

@ -0,0 +1,203 @@
import { useRef } from 'react';
import { GridDatabase } from '@src/components/crud/grid/GridDatatable';
import { Row, Col, Card } from 'reactstrap';
import FlightScheduleRealTime from './FlightScheduleRealTime';
import { useSelector } from 'react-redux';
import moment from 'moment';
import DataTable from 'react-data-table-component';
const KR_TIME_DIFF = 9 * 60 * 60 * 1000;
/**
* 비행 : B
* 비행 : F
* 비행 완료 : S
*/
function FlightScheduleGrid() {
const timeRef = useRef(null);
const { scheduleList } = useSelector(state => state.flightState);
// const [list, setList] = useState(
// new Array(10).fill({ groupNm: 'test', groupNm: 'test' })
// );
const fillZero = (width, str) => {
return str.length >= width
? str
: new Array(width - str.length + 1).join('0') + str; //남는 길이만큼 0으로 채움
};
const columns = [
{
name: '그룹 명',
selector: 'groupNm',
minWidth: '150px',
sortable: true,
cell: row => {
return row.groupNm;
}
// conditionalCellStyles: [
// {
// when: row => {
// return true;
// },
// style: row => {
// let color;
// if (row.statusCd === 's') {
// color = '#82868B';
// }
// return {
// backgroundColor: '#82868B',
// color: 'white'
// };
// }
// }
// ]
},
{
name: '기체 소유자',
selector: 'ownerNm',
minWidth: '150px',
sortable: true,
cell: row => {
return row.ownerNm;
}
},
{
name: '기체 식별번호',
selector: 'idntfNum',
minWidth: '150px',
sortable: true,
cell: row => {
return row.idntfNum;
}
},
{
name: '출발지',
selector: 'startAddress',
minWidth: '150px',
sortable: true,
cell: row => {
return row.startAddress;
}
},
{
name: '비행 시작 시간',
selector: 'schFltStDt ',
minWidth: '150px',
sortable: true,
cell: row => {
return moment(row.schFltStDt).format('HH:mm');
}
},
{
name: '도착지',
selector: 'endAddress',
minWidth: '150px',
sortable: true,
cell: row => {
return row.endAddress;
}
},
{
name: '비행 종료 시간',
selector: 'schFltEndDt',
minWidth: '150px',
sortable: true,
cell: row => {
return moment(row.schFltEndDt).format('HH:mm');
}
},
{
name: '총 예상 비행시간',
selector: 'groupNm',
minWidth: '150px',
sortable: true,
cell: row => {
const endDate = new Date(row.schFltEndDt);
const startDate = new Date(row.schFltStDt);
const a = endDate - startDate;
let time = fillZero(
2,
String(Math.floor((a % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)))
);
let hore = fillZero(
2,
String(Math.floor((a % (1000 * 60 * 60)) / (1000 * 60)))
);
return `${time}:${hore}`;
}
},
{
name: '상태',
selector: 'statusCd',
minWidth: '150px',
sortable: true,
cell: row => {
switch (row.statusCd) {
case 'B':
return '비행전';
case 'F':
return '비행중';
default:
return '비행완료';
}
}
}
];
const conditionalRowStyles = [
{
when: row => true,
style: {
backgroundColor: 'red'
}
}
];
return (
<div className='pal-card-box'>
<Row>
<Col>
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div
style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
width: '100%'
}}
>
<div style={{ display: 'flex', alignItems: 'center' }}>
<h4>비행운항 스케줄 목록</h4>
<span className='search-case'>
검색결과 {scheduleList.length}
</span>
</div>
<FlightScheduleRealTime ref={timeRef} />
</div>
</div>
<div className='invoice-list-wrapper'>
<Card>
<div className='invoice-list-dataTable'>
<GridDatabase
title={'비행이력'}
data={scheduleList}
count={scheduleList.length}
columns={columns}
pagination={false}
conditionalRowStyles={conditionalRowStyles}
/>
</div>
</Card>
</div>
</Col>
</Row>
</div>
);
}
export default FlightScheduleGrid;

22
src/components/basis/flight/schedule/FlightScheduleRealTime.js

@ -0,0 +1,22 @@
import { useState, forwardRef } from 'react';
import moment from 'moment';
import useInterval from '@src/utility/hooks/useInterval';
const KR_TIME_DIFF = 9 * 60 * 60 * 1000;
const FlightScheduleRealTime = forwardRef(({}, ref) => {
const [currTime, setCurrTime] = useState(new Date());
const utc = currTime.getTime() + currTime.getTimezoneOffset() * 60 * 1000;
const kr_curr = new Date(utc + KR_TIME_DIFF);
useInterval(() => {
setCurrTime(new Date());
setTime(moment(new Date()).format('HH:mm:ss'));
}, [1000]);
const [time, setTime] = useState(moment(kr_curr).format('HH:mm:ss'));
return <div ref={ref}>현재시간 UTC : {time.toString()}</div>;
});
export default FlightScheduleRealTime;

18
src/components/basis/flight/schedule/FlightScheduleSearch.js

@ -3,16 +3,32 @@ import { Row, Col, Button, Card, CardBody } from 'reactstrap';
import { Search, Calendar } from 'react-feather'; import { Search, Calendar } from 'react-feather';
import moment from 'moment'; import moment from 'moment';
import Flatpickr from 'react-flatpickr'; import Flatpickr from 'react-flatpickr';
import { FLIGHT_SCHEDULE_LIST } from '@src/modules/basis/flight/actions/basisFlightAction';
import { useDispatch } from 'react-redux';
import useInterval from '@src/utility/hooks/useInterval';
function FlightScheduleSearch() { function FlightScheduleSearch() {
const dispatch = useDispatch();
const [date, setDate] = useState( const [date, setDate] = useState(
moment().subtract('day').format('YYYY-MM-DD') moment().subtract('day').format('YYYY-MM-DD')
); );
const [isSearch, setIsSearch] = useState(false);
useInterval(() => {
if (isSearch) {
dispatch(FLIGHT_SCHEDULE_LIST.request(date));
}
}, [10000]);
const handlerChangeDate = val => { const handlerChangeDate = val => {
setDate(moment(val[0]).format('YYYY-MM-DD')); setDate(moment(val[0]).format('YYYY-MM-DD'));
}; };
const handlerSearch = () => {
setIsSearch(true);
dispatch(FLIGHT_SCHEDULE_LIST.request(date));
};
return ( return (
<div className='pal-card-box'> <div className='pal-card-box'>
<Row> <Row>
@ -22,7 +38,7 @@ function FlightScheduleSearch() {
<h4>검색조건</h4> <h4>검색조건</h4>
</div> </div>
<div className='d-flex align-items-center'> <div className='d-flex align-items-center'>
<Button.Ripple color='primary' size='sm' onClick={e => {}}> <Button.Ripple color='primary' size='sm' onClick={handlerSearch}>
<Search size={16} /> <Search size={16} />
검색 검색
</Button.Ripple> </Button.Ripple>

6
src/components/crud/grid/GridDatatable.js

@ -38,9 +38,9 @@ export const GridDatabase = props => {
}} }}
selectableRows={props.selectableRows} selectableRows={props.selectableRows}
selectableRowsComponent={props.selectableRowsComponent} selectableRowsComponent={props.selectableRowsComponent}
onSelectedRowsChange={ {...(props.onSelectedRowsChange
props.onSelectedRowsChange ? props.onSelectedRowsChange : null ? { onSelectedRowsChange: props.onSelectedRowsChange }
} : {})}
/> />
</div> </div>
</> </>

2
src/containers/basis/flight/schedule/FlightScheduleContainer.js

@ -1,10 +1,12 @@
import { CustomMainLayout } from '@src/components/layout/CustomMainLayout'; import { CustomMainLayout } from '@src/components/layout/CustomMainLayout';
import FlightScheduleSearch from '@src/components/basis/flight/schedule/FlightScheduleSearch'; import FlightScheduleSearch from '@src/components/basis/flight/schedule/FlightScheduleSearch';
import FlightScheduleGrid from '@src/components/basis/flight/schedule/FlightScheduleGrid';
function FlightScheduleContainer() { function FlightScheduleContainer() {
return ( return (
<CustomMainLayout title={'비행운항 스케줄'}> <CustomMainLayout title={'비행운항 스케줄'}>
<FlightScheduleSearch /> <FlightScheduleSearch />
<FlightScheduleGrid />
</CustomMainLayout> </CustomMainLayout>
); );
} }

3
src/containers/basis/group/BasisGroupUsersContainer.js

@ -285,10 +285,7 @@ export const BasisGroupUsersContainer = props => {
searchParams: param searchParams: param
}) })
); );
console.log('볼 수 있음');
} else { } else {
console.log('볼 수 없다');
setInfoModal({ setInfoModal({
isOpen: true, isOpen: true,
title: '권한 확인', title: '권한 확인',

97
src/modules/basis/flight/actions/basisFlightAction.ts

@ -6,10 +6,14 @@ import {
FlightPlanArcrftDataList, FlightPlanArcrftDataList,
FlightPlanAreaDataList, FlightPlanAreaDataList,
FlightPlanData, FlightPlanData,
FlightPlanListRqData, FlightPlanPilotDataList, PilotSelectData, SelectGroupData, BasFlightAprovData FlightPlanListRqData,
FlightPlanPilotDataList,
PilotSelectData,
SelectGroupData,
BasFlightAprovData,
BasFlightScheduleList
} from '../models/basisFlightModel'; } from '../models/basisFlightModel';
// 공역 조회 // 공역 조회
const PUBLIC_AREA_LIST_REQUEST = 'basis/flight/public_area/LIST_REQUEST'; const PUBLIC_AREA_LIST_REQUEST = 'basis/flight/public_area/LIST_REQUEST';
const PUBLIC_AREA_LIST_SUCCESS = 'basis/flight/public_area/LIST_SUCCESS'; const PUBLIC_AREA_LIST_SUCCESS = 'basis/flight/public_area/LIST_SUCCESS';
@ -42,17 +46,23 @@ const FLIGHT_PLAN_DELETE_SUCCESS = 'basis/flight/plan/delete/DELETE_SUCCESS';
const FLIGHT_PLAN_DELETE_FAILURE = 'basis/flight/plan/delete/DELETE_FAILURE'; const FLIGHT_PLAN_DELETE_FAILURE = 'basis/flight/plan/delete/DELETE_FAILURE';
// 조종사 조회 // 조종사 조회
const FLIGHT_PLAN_PILOT_LIST_REQUEST = 'basis/flight/plan/pilot_list/PILOT_LIST_REQUEST'; const FLIGHT_PLAN_PILOT_LIST_REQUEST =
const FLIGHT_PLAN_PILOT_LIST_SUCCESS = 'basis/flight/plan/pilot_list/PILOT_LIST_SUCCESS'; 'basis/flight/plan/pilot_list/PILOT_LIST_REQUEST';
const FLIGHT_PLAN_PILOT_LIST_FAILURE = 'basis/flight/plan/pilot_list/PILOT_LIST_FAILURE'; const FLIGHT_PLAN_PILOT_LIST_SUCCESS =
'basis/flight/plan/pilot_list/PILOT_LIST_SUCCESS';
const FLIGHT_PLAN_PILOT_LIST_FAILURE =
'basis/flight/plan/pilot_list/PILOT_LIST_FAILURE';
// 조종사 선택 // 조종사 선택
const FLIGHT_PLAN_PILOT_SELECT = 'basis/flight/plan/pilot_list/PILOT_SELECT'; const FLIGHT_PLAN_PILOT_SELECT = 'basis/flight/plan/pilot_list/PILOT_SELECT';
// 기체 조회 // 기체 조회
const FLIGHT_PLAN_ARCRFT_LIST_REQUEST = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_REQUEST'; const FLIGHT_PLAN_ARCRFT_LIST_REQUEST =
const FLIGHT_PLAN_ARCRFT_LIST_SUCCESS = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_SUCCESS'; 'basis/flight/plan/arcrft_list/ARCRFT_LIST_REQUEST';
const FLIGHT_PLAN_ARCRFT_LIST_FAILURE = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_FAILURE'; const FLIGHT_PLAN_ARCRFT_LIST_SUCCESS =
'basis/flight/plan/arcrft_list/ARCRFT_LIST_SUCCESS';
const FLIGHT_PLAN_ARCRFT_LIST_FAILURE =
'basis/flight/plan/arcrft_list/ARCRFT_LIST_FAILURE';
// 기체 선택 // 기체 선택
const FLIGHT_PLAN_ARCRFT_SELECT = 'basis/flight/plan/arcrft_list/ARCRFT_SELECT'; const FLIGHT_PLAN_ARCRFT_SELECT = 'basis/flight/plan/arcrft_list/ARCRFT_SELECT';
@ -78,24 +88,42 @@ const AREA_BUFFER_LIST_SUCCESS = 'basis/flight/plan/area/BUFFER_LIST_SUCCESS';
const AREA_BUFFER_LIST_FAILURE = 'basis/flight/plan/area/BUFFER_LIST_FAILURE'; const AREA_BUFFER_LIST_FAILURE = 'basis/flight/plan/area/BUFFER_LIST_FAILURE';
// 비행계획서 조회(승인) // 비행계획서 조회(승인)
const FLIGHT_APRV_LIST_REQUEST = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_REQUEST'; const FLIGHT_APRV_LIST_REQUEST =
const FLIGHT_APRV_LIST_SUCCESS = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_SUCCESS'; 'basis/flight/aprv/list/FLIGHT_APRV_LIST_REQUEST';
const FLIGHT_APRV_LIST_FAILURE = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_FAILURE'; const FLIGHT_APRV_LIST_SUCCESS =
'basis/flight/aprv/list/FLIGHT_APRV_LIST_SUCCESS';
const FLIGHT_APRV_LIST_FAILURE =
'basis/flight/aprv/list/FLIGHT_APRV_LIST_FAILURE';
// 비행계획서 승인/미승인 처리 // 비행계획서 승인/미승인 처리
const FLIGHT_APRV_PROC_REQUEST = 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_REQUEST'; const FLIGHT_APRV_PROC_REQUEST =
const FLIGHT_APRV_PROC_SUCCESS = 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_SUCCESS'; 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_REQUEST';
const FLIGHT_APRV_PROC_FAILURE = 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_FAILURE'; const FLIGHT_APRV_PROC_SUCCESS =
'basis/flight/aprv/proc/FLIGHT_APRV_PROC_SUCCESS';
const FLIGHT_APRV_PROC_FAILURE =
'basis/flight/aprv/proc/FLIGHT_APRV_PROC_FAILURE';
//지도 검색 //지도 검색
const FLIGHT_SEARCH_AREA_REQUEST = 'basis/flight/search/area/FLIGHT_SEARCH_AREA_REQUEST'; const FLIGHT_SEARCH_AREA_REQUEST =
const FLIGHT_SEARCH_AREA_SUCCESS = 'basis/flight/search/area/FLIGHT_SEARCH_AREA_SUCCESS'; 'basis/flight/search/area/FLIGHT_SEARCH_AREA_REQUEST';
const FLIGHT_SEARCH_AREA_FAILURE = 'basis/flight/search/area/FLIGHT_SEARCH_AREA_FAILURE'; const FLIGHT_SEARCH_AREA_SUCCESS =
'basis/flight/search/area/FLIGHT_SEARCH_AREA_SUCCESS';
const FLIGHT_SEARCH_AREA_FAILURE =
'basis/flight/search/area/FLIGHT_SEARCH_AREA_FAILURE';
// 비행운항 스케줄
const FLIGHT_SCHEDULE_REQUEST =
'basis/flight/schedule/list/FLIGHT_SCHEDULE_REQUEST';
const FLIGHT_SCHEDULE_SUCCESS =
'basis/flight/schedule/list/FLIGHT_SCHEDULE_SUCCESS';
const FLIGHT_SCHEDULE_FAILURE =
'basis/flight/schedule/list/FLIGHT_SCHEDULE_FAILURE';
export const SEARCH_AREA = createAsyncAction( export const SEARCH_AREA = createAsyncAction(
FLIGHT_SEARCH_AREA_REQUEST, FLIGHT_SEARCH_AREA_REQUEST,
FLIGHT_SEARCH_AREA_SUCCESS, FLIGHT_SEARCH_AREA_SUCCESS,
FLIGHT_SEARCH_AREA_FAILURE FLIGHT_SEARCH_AREA_FAILURE
)<{query: string}, string, AxiosError>(); )<{ query: string }, string, AxiosError>();
export const PUBLIC_AREA_LIST = createAsyncAction( export const PUBLIC_AREA_LIST = createAsyncAction(
PUBLIC_AREA_LIST_REQUEST, PUBLIC_AREA_LIST_REQUEST,
@ -117,7 +145,9 @@ export const FLIGHT_PLAN_DETAIL = createAsyncAction(
FLIGHT_PLAN_DETAIL_FAILURE FLIGHT_PLAN_DETAIL_FAILURE
)<number, FlightPlanData, AxiosError>(); )<number, FlightPlanData, AxiosError>();
// 상세 초기화 // 상세 초기화
export const FLIGHT_PLAN_DETAIL_INIT = createAction(FLIGHT_PLAN_DETAIL_INITIAL)(); export const FLIGHT_PLAN_DETAIL_INIT = createAction(
FLIGHT_PLAN_DETAIL_INITIAL
)();
// 생성 // 생성
export const FLIGHT_PLAN_CREATE = createAsyncAction( export const FLIGHT_PLAN_CREATE = createAsyncAction(
FLIGHT_PLAN_CREATE_REQUEST, FLIGHT_PLAN_CREATE_REQUEST,
@ -147,7 +177,9 @@ export const FLIGHT_PLAN_PILOT_LIST = createAsyncAction(
)<string, FlightPlanPilotDataList, AxiosError>(); )<string, FlightPlanPilotDataList, AxiosError>();
// 조종사 선택 // 조종사 선택
export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)<PilotSelectData>(); export const PILOT_SELECT = createAction(
FLIGHT_PLAN_PILOT_SELECT
)<PilotSelectData>();
// 기체 목록 // 기체 목록
export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction( export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction(
@ -157,19 +189,26 @@ export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction(
)<string, FlightPlanArcrftDataList, AxiosError>(); )<string, FlightPlanArcrftDataList, AxiosError>();
// 조종사 선택 // 조종사 선택
export const ARCRFT_SELECT = createAction(FLIGHT_PLAN_ARCRFT_SELECT)<FlightPlanArcrftData>(); export const ARCRFT_SELECT = createAction(
FLIGHT_PLAN_ARCRFT_SELECT
)<FlightPlanArcrftData>();
// 조종사, 기체 선택 초기화 // 조종사, 기체 선택 초기화
export const PILOT_ARCRFT_SELECT_INIT = createAction(PILOT_ARCRFT_SELECT_INITIAL)(); export const PILOT_ARCRFT_SELECT_INIT = createAction(
PILOT_ARCRFT_SELECT_INITIAL
)();
// 비행 구역 좌표 저장 (스텝2 데이터 공유) // 비행 구역 좌표 저장 (스텝2 데이터 공유)
export const AREA_COORDINATE_LIST_SAVE = createAction(AREA_COORDINATE_LIST)<FlightPlanAreaDataList>(); export const AREA_COORDINATE_LIST_SAVE =
createAction(AREA_COORDINATE_LIST)<FlightPlanAreaDataList>();
// 비행 구역 상세 저장 // 비행 구역 상세 저장
export const AREA_DETAIL_LIST_SAVE = createAction(AREA_DETAIL_LIST)<FlightPlanAreaDataList>(); export const AREA_DETAIL_LIST_SAVE =
createAction(AREA_DETAIL_LIST)<FlightPlanAreaDataList>();
// 비행 계획서 그룹 선택 // 비행 계획서 그룹 선택
export const FLIGHT_PLAN_GROUP_SELECT = createAction(ROUP_SELECT)<SelectGroupData>(); export const FLIGHT_PLAN_GROUP_SELECT =
createAction(ROUP_SELECT)<SelectGroupData>();
// 비행 구역 상세 값 초기화 // 비행 구역 상세 값 초기화
export const AREA_DETAIL_INIT = createAction(AREA_DETAIL_INITIAL)(); export const AREA_DETAIL_INIT = createAction(AREA_DETAIL_INITIAL)();
@ -194,6 +233,11 @@ export const FLIGHT_APRV_PROC = createAsyncAction(
FLIGHT_APRV_PROC_FAILURE FLIGHT_APRV_PROC_FAILURE
)<BasFlightAprovData, string, AxiosError>(); )<BasFlightAprovData, string, AxiosError>();
export const FLIGHT_SCHEDULE_LIST = createAsyncAction(
FLIGHT_SCHEDULE_REQUEST,
FLIGHT_SCHEDULE_SUCCESS,
FLIGHT_SCHEDULE_FAILURE
)<string, [BasFlightScheduleList], AxiosError>();
const actions = { const actions = {
PUBLIC_AREA_LIST, PUBLIC_AREA_LIST,
@ -216,7 +260,8 @@ const actions = {
AREA_DETAIL_INIT, AREA_DETAIL_INIT,
FLIGHT_APRV_LIST, FLIGHT_APRV_LIST,
FLIGHT_APRV_PROC, FLIGHT_APRV_PROC,
SEARCH_AREA SEARCH_AREA,
FLIGHT_SCHEDULE_LIST
}; };
export type FlightAction = ActionType<typeof actions>; export type FlightAction = ActionType<typeof actions>;

13
src/modules/basis/flight/apis/basisFlightApi.ts

@ -8,7 +8,6 @@ import {
FlightPlanListRqData FlightPlanListRqData
} from '../models/basisFlightModel'; } from '../models/basisFlightModel';
export const flightPlanAPI = { export const flightPlanAPI = {
area: async () => { area: async () => {
const res = await axios.get(`api/bas/flight/area`); const res = await axios.get(`api/bas/flight/area`);
@ -67,8 +66,12 @@ export const flightPlanAPI = {
return res; return res;
}, },
searchArea: async(param) => { searchArea: async param => {
return await axios.get(`api/bas/flight/plan/area/search?query=${param.query}`); return await axios.get(
`api/bas/flight/plan/area/search?query=${param.query}`
);
},
scheduleList: async (date: string) => {
return await axios.get(`api/bas/flight/schedule?searchDate=${date}`);
} }
} };

363
src/modules/basis/flight/models/basisFlightModel.ts

@ -1,178 +1,195 @@
import moment from "moment"; import moment from 'moment';
export interface FlightState { export interface FlightState {
publicAreaList: PublicAreaData | undefined publicAreaList: PublicAreaData | undefined;
flightPlanArea: FlightPlanArea | undefined flightPlanArea: FlightPlanArea | undefined;
list: [FlightPlanData] | undefined list: [FlightPlanData] | undefined;
detail: FlightPlanData | undefined detail: FlightPlanData | undefined;
pilotList: FlightPlanPilotDataList | undefined pilotList: FlightPlanPilotDataList | undefined;
arcrftList: FlightPlanArcrftDataList | undefined arcrftList: FlightPlanArcrftDataList | undefined;
pilotSelect: PilotSelectData | undefined pilotSelect: PilotSelectData | undefined;
arcrftSelect: FlightPlanArcrftData | undefined arcrftSelect: FlightPlanArcrftData | undefined;
areaCoordList: FlightPlanAreaData[] | undefined areaCoordList: FlightPlanAreaData[] | undefined;
areaList: FlightPlanAreaData[] | undefined areaList: FlightPlanAreaData[] | undefined;
selectGroup: SelectGroupData | undefined selectGroup: SelectGroupData | undefined;
aprvList: [FlightPlanData] | undefined aprvList: [FlightPlanData] | undefined;
aprvProc: any | undefined aprvProc: any | undefined;
scheduleList: BasFlightScheduleList[] | [];
} }
export interface SelectGroupData { export interface SelectGroupData {
cstmrSno: number, cstmrSno: number;
groupId: string, groupId: string;
groupNm: string, groupNm: string;
} }
export interface PublicAreaData { export interface PublicAreaData {
publicAreaList: [] publicAreaList: [];
} }
export interface FlightPlanArea { export interface FlightPlanArea {
address: string, address: string;
coordinates: string, coordinates: string;
redius: string, redius: string;
altitude_m: string, altitude_m: string;
altitude_ft: string, altitude_ft: string;
} }
export interface FlightPlanData { export interface FlightPlanData {
planSno?: number, planSno?: number;
groupId: string, groupId: string;
cstmrSno: number, cstmrSno: number;
memberName: string, memberName: string;
email: string, email: string;
hpno: string, hpno: string;
clncd: string, clncd: string;
addr: string, addr: string;
addrDtlCn: string, addrDtlCn: string;
zip: string, zip: string;
schFltStDt: string, schFltStDt: string;
schFltEndDt: string, schFltEndDt: string;
fltPurpose: string, fltPurpose: string;
aprvlYn: string, aprvlYn: string;
delYn: string, delYn: string;
createUserId: string, createUserId: string;
createDt: string, createDt: string;
updateUserId: string, updateUserId: string;
updateDt: string, updateDt: string;
areaList?: FlightPlanAreaDataList | undefined, areaList?: FlightPlanAreaDataList | undefined;
pilotList?: FlightPlanPilotDataList | undefined, pilotList?: FlightPlanPilotDataList | undefined;
arcrftList?: FlightPlanArcrftDataList | undefined arcrftList?: FlightPlanArcrftDataList | undefined;
// docState: string // docState: string
} }
export interface FlightPlanAreaData { export interface FlightPlanAreaData {
planAreaSno?: number, planAreaSno?: number;
planSno: number, planSno: number;
areaType: string, areaType: string;
fltMethod: string, fltMethod: string;
bufferZone: number, bufferZone: number;
fltElev: string, fltElev: string;
createUserId?: string, createUserId?: string;
createDt?: string, createDt?: string;
updateUserId?: string, updateUserId?: string;
updateDt?: string, updateDt?: string;
coordList?: FlightPlanAreaCoordDataList | undefined coordList?: FlightPlanAreaCoordDataList | undefined;
bufferCoordList?: FlightPlanAreaCoordDataList | undefined bufferCoordList?: FlightPlanAreaCoordDataList | undefined;
// docState: string, // docState: string,
} }
export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {}; export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {}
export interface FlightPlanAreaCoordData { export interface FlightPlanAreaCoordData {
planAreaCoordSno?: number, planAreaCoordSno?: number;
planAreaSno?: number, planAreaSno?: number;
lat: number, lat: number;
lon: number, lon: number;
createUserId?: string, createUserId?: string;
createDt?: string createDt?: string;
// docState: string // docState: string
} }
export interface FlightPlanAreaCoordDataList extends Array<FlightPlanAreaCoordData> {}; export interface FlightPlanAreaCoordDataList
extends Array<FlightPlanAreaCoordData> {}
export interface FlightPlanPilotData { export interface FlightPlanPilotData {
planPilotSno?: number, planPilotSno?: number;
planSno?: number, planSno?: number;
cstmrSno?: number, cstmrSno?: number;
groupNm: string, groupNm: string;
memberName: string, memberName: string;
email: string, email: string;
hpno: string, hpno: string;
clncd: string, clncd: string;
addr: string, addr: string;
addrDtlCn: string, addrDtlCn: string;
zip: string, zip: string;
qlfcNo: string, qlfcNo: string;
carrer: string, carrer: string;
createUserId: string, createUserId: string;
createDt: string, createDt: string;
updateUserId: string, updateUserId: string;
updateDt: string updateDt: string;
// docState: string // docState: string
} }
export interface FlightPlanPilotDataList extends Array<FlightPlanPilotData> {}; export interface FlightPlanPilotDataList extends Array<FlightPlanPilotData> {}
export interface FlightPlanArcrftData { export interface FlightPlanArcrftData {
planArcrftSno: number, planArcrftSno: number;
planSno: number, planSno: number;
arcrftSno: number, arcrftSno: number;
idntfNum: string, idntfNum: string;
groupNm: string, groupNm: string;
prdctNum: string, prdctNum: string;
arcrftTypeCd: string, arcrftTypeCd: string;
arcrftModelNm: string, arcrftModelNm: string;
prdctCmpnNm: string, prdctCmpnNm: string;
prdctDate: string, prdctDate: string;
arcrftLngth: number, arcrftLngth: number;
arcrftWdth: number, arcrftWdth: number;
arcrftHght: number, arcrftHght: number;
arcrftWght: number, arcrftWght: number;
wghtTypeCd: string, wghtTypeCd: string;
imageUrl: string, imageUrl: string;
takeoffWght: number, takeoffWght: number;
useYn: string, useYn: string;
cameraYn: string, cameraYn: string;
insrncYn: string, insrncYn: string;
ownerNm: string, ownerNm: string;
createUserId: string, createUserId: string;
createDt: string, createDt: string;
updateUserId: string, updateUserId: string;
updateDt: string updateDt: string;
// docState: string // docState: string
} }
export interface FlightPlanArcrftDataList extends Array<FlightPlanArcrftData> {}; export interface FlightPlanArcrftDataList extends Array<FlightPlanArcrftData> {}
// rq // rq
export interface FlightPlanListRqData { export interface FlightPlanListRqData {
groupId: string, groupId: string;
cstmrSno: number, cstmrSno: number;
schFltStDt: string, schFltStDt: string;
schFltEndDt: string, schFltEndDt: string;
aprvlYn: string aprvlYn: string;
} }
export interface FlightPlanAprovRqData { export interface FlightPlanAprovRqData {
planSnoList: [number], planSnoList: [number];
aprvlYn: string aprvlYn: string;
} }
export interface PilotSelectData { export interface PilotSelectData {
groupNm: string, groupNm: string;
cstmrSno: string, cstmrSno: string;
memberName: string, memberName: string;
email: string, email: string;
hpno: string, hpno: string;
clncd: string, clncd: string;
addr: string, addr: string;
addrDtlCn: string, addrDtlCn: string;
zip: string zip: string;
} }
export interface BasFlightAprovData { export interface BasFlightAprovData {
planSnoList: [number] planSnoList: [number];
aprvlYn: string aprvlYn: string;
}
export interface BasFlightScheduleList {
groupId: string;
groupNm: string;
memberName: string;
ownerNm: string;
idntfNum: string;
schFltStDt: string;
schFltEndDt: string;
}
export interface BasFlightScheduleData {
count: number;
list: [BasFlightScheduleList];
} }
export const initFlight = { export const initFlight = {
@ -195,8 +212,12 @@ export const initFlight = {
addr: '', addr: '',
addrDtlCn: '', addrDtlCn: '',
zip: '', zip: '',
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), schFltStDt: moment()
schFltEndDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), .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: '', fltPurpose: '',
aprvlYn: '', aprvlYn: '',
delYn: '', delYn: '',
@ -204,7 +225,8 @@ export const initFlight = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '', updateDt: '',
areaList: [{ areaList: [
{
planAreaSno: 0, planAreaSno: 0,
planSno: 0, planSno: 0,
areaType: '', areaType: '',
@ -215,24 +237,30 @@ export const initFlight = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '', updateDt: '',
coordList: [{ coordList: [
{
planAreaCoordSno: 0, planAreaCoordSno: 0,
planAreaSno: 0, planAreaSno: 0,
lat: 0, lat: 0,
lon: 0, lon: 0,
createUserId: '', createUserId: '',
createDt: '' createDt: ''
}], }
bufferCoordList: [{ ],
bufferCoordList: [
{
planAreaCoordSno: 0, planAreaCoordSno: 0,
planAreaSno: 0, planAreaSno: 0,
lat: 0, lat: 0,
lon: 0, lon: 0,
createUserId: '', createUserId: '',
createDt: '' createDt: ''
}], }
}], ]
pilotList: [{ }
],
pilotList: [
{
planPilotSno: 0, planPilotSno: 0,
planSno: 0, planSno: 0,
cstmrSno: 0, cstmrSno: 0,
@ -250,8 +278,10 @@ export const initFlight = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '' updateDt: ''
}], }
arcrftList: [{ ],
arcrftList: [
{
planArcrftSno: 0, planArcrftSno: 0,
planSno: 0, planSno: 0,
arcrftSno: 0, arcrftSno: 0,
@ -277,7 +307,8 @@ export const initFlight = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '' updateDt: ''
}] }
]
}, },
pilotList: undefined, pilotList: undefined,
arcrftList: undefined, arcrftList: undefined,
@ -286,10 +317,10 @@ export const initFlight = {
areaCoordList: undefined, areaCoordList: undefined,
areaList: undefined, areaList: undefined,
aprvList: undefined, aprvList: undefined,
aprvProc: undefined aprvProc: undefined,
scheduleList: []
}; };
export const initFlightBas = { export const initFlightBas = {
plan: { plan: {
planSno: 0, planSno: 0,
@ -302,8 +333,12 @@ export const initFlightBas = {
addr: '', addr: '',
addrDtlCn: '', addrDtlCn: '',
zip: '', zip: '',
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), schFltStDt: moment()
schFltEndDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), .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: '', fltPurpose: '',
aprvlYn: '', aprvlYn: '',
delYn: '', delYn: '',
@ -313,7 +348,7 @@ export const initFlightBas = {
updateDt: '', updateDt: '',
areaList: undefined, areaList: undefined,
pilotList: undefined, pilotList: undefined,
arcrftList: undefined, arcrftList: undefined
}, },
pilot: { pilot: {
planPilotSno: 0, planPilotSno: 0,
@ -393,8 +428,12 @@ export const initFlightBas = {
addr: '', addr: '',
addrDtlCn: '', addrDtlCn: '',
zip: '', zip: '',
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), schFltStDt: moment()
schFltEndDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), .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: '', fltPurpose: '',
aprvlYn: '', aprvlYn: '',
delYn: '', delYn: '',
@ -402,7 +441,8 @@ export const initFlightBas = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '', updateDt: '',
areaList: [{ areaList: [
{
planAreaSno: 0, planAreaSno: 0,
planSno: 0, planSno: 0,
areaType: '', areaType: '',
@ -413,24 +453,30 @@ export const initFlightBas = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '', updateDt: '',
coordList: [{ coordList: [
{
planAreaCoordSno: 0, planAreaCoordSno: 0,
planAreaSno: 0, planAreaSno: 0,
lat: 0, lat: 0,
lon: 0, lon: 0,
createUserId: '', createUserId: '',
createDt: '' createDt: ''
}], }
bufferCoordList: [{ ],
bufferCoordList: [
{
planAreaCoordSno: 0, planAreaCoordSno: 0,
planAreaSno: 0, planAreaSno: 0,
lat: 0, lat: 0,
lon: 0, lon: 0,
createUserId: '', createUserId: '',
createDt: '' createDt: ''
}], }
}], ]
pilotList: [{ }
],
pilotList: [
{
planPilotSno: 0, planPilotSno: 0,
planSno: 0, planSno: 0,
cstmrSno: 0, cstmrSno: 0,
@ -448,8 +494,10 @@ export const initFlightBas = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '' updateDt: ''
}], }
arcrftList: [{ ],
arcrftList: [
{
planArcrftSno: 0, planArcrftSno: 0,
planSno: 0, planSno: 0,
arcrftSno: 0, arcrftSno: 0,
@ -475,6 +523,7 @@ export const initFlightBas = {
createDt: '', createDt: '',
updateUserId: '', updateUserId: '',
updateDt: '' updateDt: ''
}]
} }
} ]
}
};

7
src/modules/basis/flight/reducers/basisFlightReducer.ts

@ -129,4 +129,11 @@ export const flightReducer = createReducer<FlightState, Actions.FlightAction>(
const data = action.payload; const data = action.payload;
draft.aprvProc = data; draft.aprvProc = data;
}) })
)
// 비행운항 스케줄
.handleAction(Actions.FLIGHT_SCHEDULE_LIST.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.scheduleList = data;
})
); );

173
src/modules/basis/flight/sagas/basisFlightSaga.ts

@ -9,15 +9,19 @@ import {
import * as MessageActions from '../../../comn/message/actions/comnMessageAction'; import * as MessageActions from '../../../comn/message/actions/comnMessageAction';
import * as Actions from '../actions/basisFlightAction'; import * as Actions from '../actions/basisFlightAction';
import * as Apis from '../apis/basisFlightApi'; import * as Apis from '../apis/basisFlightApi';
import { FlightPlanData } from "../models/basisFlightModel"; import { FlightPlanData } from '../models/basisFlightModel';
import { import {
FLIGHT_PLAN_ARCRFT_LIST, FLIGHT_PLAN_ARCRFT_LIST,
FLIGHT_PLAN_CREATE, FLIGHT_PLAN_DELETE, FLIGHT_PLAN_CREATE,
FLIGHT_PLAN_DELETE,
FLIGHT_PLAN_DETAIL, FLIGHT_PLAN_DETAIL,
FLIGHT_PLAN_PILOT_LIST, FLIGHT_PLAN_UPDATE FLIGHT_PLAN_PILOT_LIST,
} from "../actions/basisFlightAction"; FLIGHT_PLAN_UPDATE
} from '../actions/basisFlightAction';
function* listAreaSaga(action: ActionType<typeof Actions.PUBLIC_AREA_LIST.request>) { function* listAreaSaga(
action: ActionType<typeof Actions.PUBLIC_AREA_LIST.request>
) {
try { try {
const response = yield call(Apis.flightPlanAPI.area); const response = yield call(Apis.flightPlanAPI.area);
@ -39,9 +43,7 @@ function* listAreaSaga(action: ActionType<typeof Actions.PUBLIC_AREA_LIST.reques
}) })
); );
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.PUBLIC_AREA_LIST.failure(error));
Actions.PUBLIC_AREA_LIST.failure(error)
);
} }
} }
@ -63,7 +65,9 @@ function* listAreaSaga(action: ActionType<typeof Actions.PUBLIC_AREA_LIST.reques
// } // }
// 비행계획서 목록 // 비행계획서 목록
function* listPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_LIST.request>) { function* listPlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_LIST.request>
) {
try { try {
const data = action.payload; const data = action.payload;
const response = yield call(Apis.flightPlanAPI.list, data); const response = yield call(Apis.flightPlanAPI.list, data);
@ -79,18 +83,16 @@ function* listPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_LIST.reques
return; return;
} }
yield put( yield put(Actions.FLIGHT_PLAN_LIST.success(response.data));
Actions.FLIGHT_PLAN_LIST.success(response.data)
);
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.FLIGHT_PLAN_LIST.failure(error));
Actions.FLIGHT_PLAN_LIST.failure(error)
);
} }
} }
// 비행계획서 상세 // 비행계획서 상세
function* detailPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DETAIL.request>) { function* detailPlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_DETAIL.request>
) {
try { try {
const data = action.payload; const data = action.payload;
const response = yield call(Apis.flightPlanAPI.detail, data); const response = yield call(Apis.flightPlanAPI.detail, data);
@ -106,24 +108,22 @@ function* detailPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DETAIL.re
return; return;
} }
yield put( yield put(Actions.FLIGHT_PLAN_DETAIL.success(response.data));
Actions.FLIGHT_PLAN_DETAIL.success(response.data)
);
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.FLIGHT_PLAN_DETAIL.failure(error));
Actions.FLIGHT_PLAN_DETAIL.failure(error)
);
} }
} }
// 비행계획서 등록 // 비행계획서 등록
function* createPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.request>) { function* createPlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.request>
) {
try { try {
const detail = action.payload; const detail = action.payload;
const res = yield call(Apis.flightPlanAPI.create, detail); const res = yield call(Apis.flightPlanAPI.create, detail);
const {data} = res; const { data } = res;
if (data.result) { if (data.result) {
yield put( yield put(
@ -144,7 +144,7 @@ function* createPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.re
isRefresh: false isRefresh: false
}) })
); );
} else if(data.errorCode === 'FT500') { } else if (data.errorCode === 'FT500') {
yield put( yield put(
MessageActions.IS_ERROR({ MessageActions.IS_ERROR({
errorCode: DUPLATE_MESSAGE.code, errorCode: DUPLATE_MESSAGE.code,
@ -171,13 +171,15 @@ function* createPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.re
} }
// 비행계획서 수정 // 비행계획서 수정
function* updatePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_UPDATE.request>) { function* updatePlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_UPDATE.request>
) {
try { try {
const detail = action.payload; const detail = action.payload;
const res = yield call(Apis.flightPlanAPI.update, detail); const res = yield call(Apis.flightPlanAPI.update, detail);
const {data} = res; const { data } = res;
if (data.result) { if (data.result) {
yield put( yield put(
@ -216,12 +218,14 @@ function* updatePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_UPDATE.re
} }
// 비행계획서 삭제 // 비행계획서 삭제
function* deletePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DELETE.request>) { function* deletePlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_DELETE.request>
) {
try { try {
const id = action.payload; const id = action.payload;
const res = yield call(Apis.flightPlanAPI.delete, id); const res = yield call(Apis.flightPlanAPI.delete, id);
const {data} = res; const { data } = res;
if (data.result) { if (data.result) {
yield put( yield put(
@ -249,7 +253,9 @@ function* deletePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DELETE.re
} }
// 조종사 목록 // 조종사 목록
function* listPilotSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_PILOT_LIST.request>) { function* listPilotSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_PILOT_LIST.request>
) {
try { try {
const data = action.payload; const data = action.payload;
const response = yield call(Apis.flightPlanAPI.listPilot, data); const response = yield call(Apis.flightPlanAPI.listPilot, data);
@ -265,18 +271,16 @@ function* listPilotSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_PILOT_LIST
return; return;
} }
yield put( yield put(Actions.FLIGHT_PLAN_PILOT_LIST.success(response.data));
Actions.FLIGHT_PLAN_PILOT_LIST.success(response.data)
);
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.FLIGHT_PLAN_PILOT_LIST.failure(error));
Actions.FLIGHT_PLAN_PILOT_LIST.failure(error)
);
} }
} }
// 기체 목록 // 기체 목록
function* listArcrftSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_ARCRFT_LIST.request>) { function* listArcrftSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_ARCRFT_LIST.request>
) {
try { try {
const data = action.payload; const data = action.payload;
const response = yield call(Apis.flightPlanAPI.listArcrft, data); const response = yield call(Apis.flightPlanAPI.listArcrft, data);
@ -292,18 +296,16 @@ function* listArcrftSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_ARCRFT_LI
return; return;
} }
yield put( yield put(Actions.FLIGHT_PLAN_ARCRFT_LIST.success(response.data));
Actions.FLIGHT_PLAN_ARCRFT_LIST.success(response.data)
);
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.FLIGHT_PLAN_ARCRFT_LIST.failure(error));
Actions.FLIGHT_PLAN_ARCRFT_LIST.failure(error)
);
} }
} }
// get buffer list // get buffer list
function* listBuffer(action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request>) { function* listBuffer(
action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request>
) {
try { try {
const data = action.payload; const data = action.payload;
const response = yield call(Apis.flightPlanAPI.listBuffer, data); const response = yield call(Apis.flightPlanAPI.listBuffer, data);
@ -319,19 +321,16 @@ function* listBuffer(action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_BUFFER_L
return; return;
} }
yield put( yield put(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.success(response.data));
Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.success(response.data)
);
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.failure(error));
Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.failure(error)
);
} }
} }
// 비행계획서 목록(승인) // 비행계획서 목록(승인)
function* listAprvSaga(action: ActionType<typeof Actions.FLIGHT_APRV_LIST.request>) { function* listAprvSaga(
action: ActionType<typeof Actions.FLIGHT_APRV_LIST.request>
) {
try { try {
const data = action.payload; const data = action.payload;
const response = yield call(Apis.flightPlanAPI.aprvList, data); const response = yield call(Apis.flightPlanAPI.aprvList, data);
@ -347,25 +346,22 @@ function* listAprvSaga(action: ActionType<typeof Actions.FLIGHT_APRV_LIST.reques
return; return;
} }
yield put( yield put(Actions.FLIGHT_APRV_LIST.success(response.data));
Actions.FLIGHT_APRV_LIST.success(response.data)
);
} catch (error: any) { } catch (error: any) {
yield put( yield put(Actions.FLIGHT_APRV_LIST.failure(error));
Actions.FLIGHT_APRV_LIST.failure(error)
);
} }
} }
// 비행계획서 승인 // 비행계획서 승인
function* aprvProcSaga(action: ActionType<typeof Actions.FLIGHT_APRV_PROC.request>) { function* aprvProcSaga(
action: ActionType<typeof Actions.FLIGHT_APRV_PROC.request>
) {
try { try {
const sendData = action.payload; const sendData = action.payload;
const res = yield call(Apis.flightPlanAPI.aprvProc, sendData); const res = yield call(Apis.flightPlanAPI.aprvProc, sendData);
const {data} = res; const { data } = res;
if (data.result) { if (data.result) {
yield put( yield put(
@ -376,9 +372,7 @@ function* aprvProcSaga(action: ActionType<typeof Actions.FLIGHT_APRV_PROC.reques
isRefresh: false isRefresh: false
}) })
); );
yield put( yield put(Actions.FLIGHT_APRV_PROC.success(data));
Actions.FLIGHT_APRV_PROC.success(data)
)
} else { } else {
if (data.errorCode === 'DT002') { if (data.errorCode === 'DT002') {
yield put( yield put(
@ -406,10 +400,36 @@ function* aprvProcSaga(action: ActionType<typeof Actions.FLIGHT_APRV_PROC.reques
} }
} }
// 비행계획서 목록
function* scheduleListSaga(
action: ActionType<typeof Actions.FLIGHT_SCHEDULE_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.scheduleList, data);
if (response.errorCode) {
yield put(
MessageActions.IS_ERROR({
errorCode: response.errorCode,
errorMessage: response.errorMessage,
isHistoryBack: false,
isRefresh: false
})
);
return;
}
yield put(Actions.FLIGHT_SCHEDULE_LIST.success(response.data || []));
} catch (error: any) {
yield put(Actions.FLIGHT_SCHEDULE_LIST.failure(error));
}
}
function* searchAreaSaga( function* searchAreaSaga(
action: ActionType<typeof Actions.SEARCH_AREA.request> action: ActionType<typeof Actions.SEARCH_AREA.request>
) { ) {
try{ try {
const { query } = action.payload; const { query } = action.payload;
const res = yield call(Apis.flightPlanAPI.searchArea, { query }); const res = yield call(Apis.flightPlanAPI.searchArea, { query });
@ -422,15 +442,16 @@ function* searchAreaSaga(
export function* flightSaga() { export function* flightSaga() {
yield takeEvery(Actions.PUBLIC_AREA_LIST.request, listAreaSaga); yield takeEvery(Actions.PUBLIC_AREA_LIST.request, listAreaSaga);
// yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea); // yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea);
yield takeEvery(Actions.FLIGHT_PLAN_LIST.request, listPlanSaga) yield takeEvery(Actions.FLIGHT_PLAN_LIST.request, listPlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_DETAIL.request, detailPlanSaga) yield takeEvery(Actions.FLIGHT_PLAN_DETAIL.request, detailPlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_CREATE.request, createPlanSaga) yield takeEvery(Actions.FLIGHT_PLAN_CREATE.request, createPlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_UPDATE.request, updatePlanSaga) yield takeEvery(Actions.FLIGHT_PLAN_UPDATE.request, updatePlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_DELETE.request, deletePlanSaga) yield takeEvery(Actions.FLIGHT_PLAN_DELETE.request, deletePlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_PILOT_LIST.request, listPilotSaga) yield takeEvery(Actions.FLIGHT_PLAN_PILOT_LIST.request, listPilotSaga);
yield takeEvery(Actions.FLIGHT_PLAN_ARCRFT_LIST.request, listArcrftSaga) yield takeEvery(Actions.FLIGHT_PLAN_ARCRFT_LIST.request, listArcrftSaga);
yield takeEvery(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request, listBuffer) yield takeEvery(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request, listBuffer);
yield takeEvery(Actions.FLIGHT_APRV_LIST.request, listAprvSaga) yield takeEvery(Actions.FLIGHT_APRV_LIST.request, listAprvSaga);
yield takeEvery(Actions.FLIGHT_APRV_PROC.request, aprvProcSaga) yield takeEvery(Actions.FLIGHT_APRV_PROC.request, aprvProcSaga);
yield takeEvery(Actions.SEARCH_AREA.request, searchAreaSaga) yield takeEvery(Actions.SEARCH_AREA.request, searchAreaSaga);
yield takeEvery(Actions.FLIGHT_SCHEDULE_LIST.request, scheduleListSaga);
} }

21
src/utility/hooks/useInterval.js

@ -0,0 +1,21 @@
import { useEffect, useRef } from 'react';
const useInterval = (callback, delay) => {
const savedCallback = useRef(null);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
const executeCallback = () => {
savedCallback.current();
};
const timerId = setInterval(executeCallback, delay);
return () => clearInterval(timerId);
}, []);
};
export default useInterval;

1
src/views/weather/WeatherView.js

@ -48,7 +48,6 @@ const WeatherView = () => {
easing: 'easeOutCubic' easing: 'easeOutCubic'
}; };
// map.morph(latlng, 16, options) // map.morph(latlng, 16, options)
console.log(map);
}; };
const handleEnter = e => { const handleEnter = e => {
if (e.key == 'Enter') { if (e.key == 'Enter') {

Loading…
Cancel
Save