From 2b4f6799ba233be5224da35292c1cc9a5a84ed04 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: Fri, 19 Aug 2022 18:08:35 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EC=A0=9C=20-=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/map/naver/dron/DronMarker.js | 6 +- .../control/gp/actions/controlGpAction.ts | 28 ++++-- src/modules/control/gp/apis/controlGpApi.ts | 21 ++++- .../control/gp/models/controlGpModel.ts | 20 +++- .../control/gp/reducers/controlGpReducer.ts | 34 ++++--- src/modules/control/gp/sagas/controlGpSaga.ts | 34 +++++-- src/redux/reducers/rootReducer.ts | 3 + .../control/report/ControlReportDetail.js | 91 +++++++++++-------- src/views/control/report/ControlReportList.js | 9 +- 9 files changed, 166 insertions(+), 80 deletions(-) diff --git a/src/components/map/naver/dron/DronMarker.js b/src/components/map/naver/dron/DronMarker.js index 6b9adb4b..d92182ac 100644 --- a/src/components/map/naver/dron/DronMarker.js +++ b/src/components/map/naver/dron/DronMarker.js @@ -4,7 +4,7 @@ import { useDispatch, useSelector } from 'react-redux'; import '../../../../assets/css/custom.css'; import DronIconPulple from '../../../../assets/images/drone-marker-icon-pulple.png'; import DronIcon from '../../../../assets/images/drone-marker-icon.png'; -import { controlGpDtlAction, controlGpHisAction, controlDbHisAction, controlGpFlightPlanAction } from '../../../../modules/control/gp'; +import { controlGpDtlAction, controlGpHisAction, controlDbHisAction, controlGpFlightPlanAction, controlGpLogAction } from '../../../../modules/control/gp'; import { objectClickAction, objectUnClickAction } from '../../../../modules/control/map/actions/controlMapActions'; import { toast } from 'react-toastify'; import DronToast from './DronToast'; @@ -129,6 +129,10 @@ export const DronMarker = props => { dispatch(objectClickAction(controlId)); dispatch(controlGpDtlAction.request(controlId)); dispatch(controlGpFlightPlanAction.request(idntfNum)); + // dispatch(controlGpLogAction.request({ id: controlId })); + // dispatch(controlGpLogAction.request(controlId)); + + // dispatch(controlGpHisAction.request({ id: objectId })); }; //마커를 삭제 한다. diff --git a/src/modules/control/gp/actions/controlGpAction.ts b/src/modules/control/gp/actions/controlGpAction.ts index 2699804c..c99489cd 100644 --- a/src/modules/control/gp/actions/controlGpAction.ts +++ b/src/modules/control/gp/actions/controlGpAction.ts @@ -4,13 +4,16 @@ import { ActionType, createAction, createAsyncAction } from 'typesafe-actions'; import { ControlDetailData, ControlGpData, + ControlGpState, ControlGpDtlState, ControlGpFlightPlanDataList, + ControlGpWarnLogData, + ControlGpLogState, ControlGpHisState, ControlGpPlanContainsRQ, ControlGpPlanContainsRS, - ControlGpState, - ControlGroupAuthState + ControlGroupAuthState, + // ControlGpWarnLogDataList, } from '../models/controlGpModel'; const CONTROL_GP_REQUEST = 'control/gp/CONTROL_GP_REQUEST'; @@ -39,6 +42,11 @@ const CONTROL_FLIGHT_PLAN_REQUEST = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_ const CONTROL_FLIGHT_PLAN_SUCCESS = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_SUCCESS'; const CONTROL_FLIGHT_PLAN_FAILURE = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_FAILURE'; +//로그 리스트 조회 +const CONTROL_GP_LOG_REQIEST = 'control/gp/CONTROL_GP_LOG_REQUEST'; +const CONTROL_GP_LOG_SUCCESS = 'control/gp/CONTROL_GP_LOG_SUCCESS'; +const CONTROL_GP_LOG_FAILURE = 'control/gp/CONTROL_GP_LOG_FAILURE'; + const CONTROL_FLIGHT_PLAN_INIT = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_INIT'; // [관제] 비행 구역 비정상 여부 체크 @@ -51,37 +59,44 @@ export const controlGpAction = createAsyncAction( CONTROL_GP_SUCCESS, CONTROL_GP_FAILURE )(); - + export const controlGpHisAction = createAsyncAction( CONTROL_GP_HIS_REQUEST, CONTROL_GP_HIS_SUCCESS, CONTROL_GP_HIS_FAILURE )<{ id: string }, ControlGpHisState, AxiosError>(); + export const controlGpDtlAction = createAsyncAction( CONTROL_GP_DTL_REQUEST, CONTROL_GP_DTL_SUCCESS, CONTROL_GP_DTL_FAILURE )(); - + export const controlGpRtDtlAction = createAsyncAction( CONTROL_GP_RTDTL_REQUEST, CONTROL_GP_RTDTL_SUCCESS, CONTROL_GP_RTDTL_FAILURE )(); - + export const controlGroupAuthAction = createAsyncAction( CONTROL_GROUP_AUTH_REQUEST, CONTROL_GROUP_AUTH_SUCCESS, CONTROL_GROUP_AUTH_FAILURE )(); - + export const controlGpFlightPlanAction = createAsyncAction( CONTROL_FLIGHT_PLAN_REQUEST, CONTROL_FLIGHT_PLAN_SUCCESS, CONTROL_FLIGHT_PLAN_FAILURE, )(); +export const controlGpLogAction = createAsyncAction( + CONTROL_GP_LOG_REQIEST, + CONTROL_GP_LOG_SUCCESS, + CONTROL_GP_LOG_FAILURE + )<{ id: string }, ControlGpLogState, AxiosError>(); + export const controlGpFlightPlanWarnAction = createAsyncAction( CONTROL_FLIGHT_PLAN_WARN_REQUEST, CONTROL_FLIGHT_PLAN_WARN_SUCCESS, @@ -93,6 +108,7 @@ export const controlGpFlightPlanInitAction = createAction(CONTROL_FLIGHT_PLAN_IN const actions = { controlGpAction, controlGpHisAction, + controlGpLogAction, controlGpDtlAction, controlGpRtDtlAction, controlGroupAuthAction, diff --git a/src/modules/control/gp/apis/controlGpApi.ts b/src/modules/control/gp/apis/controlGpApi.ts index 46d3ed61..80e00820 100644 --- a/src/modules/control/gp/apis/controlGpApi.ts +++ b/src/modules/control/gp/apis/controlGpApi.ts @@ -1,5 +1,10 @@ import axios from '../../../utils/customAxiosUtil'; -import { ReponseControlGpHistory, ControlGroupAuthData, ResponseControlGroupAuth, ControlGpPlanContainsRQ} from '../models/controlGpModel'; +import { + ResponseControlGpHistory, + ResponseControlGroupAuth, + ControlGpPlanContainsRQ, + ResponseControlGpWarnLog +} from '../models/controlGpModel'; import qs from 'qs'; export const controlGpApi = { @@ -8,12 +13,24 @@ export const controlGpApi = { console.log(' ID is Empty'); return null; } - const { data }: ReponseControlGpHistory = await axios.get( + const { data }: ResponseControlGpHistory = await axios.get( `api/ctr/cntrl/history/list/${id}` ); return data; }, + getWarnLog: async (id: string) => { + if (!id) { + console.log(' ID is Empty'); + return null; + } + + const { data }: ResponseControlGpWarnLog = await axios.get( + `api/ctr/cntrl/warnLog/${id}` + ); + + return data; + }, getDetail: async (id: string) => { return await axios.get(`api/ctr/cntrl/detail/${id}`); }, diff --git a/src/modules/control/gp/models/controlGpModel.ts b/src/modules/control/gp/models/controlGpModel.ts index 27077961..e3d21b29 100644 --- a/src/modules/control/gp/models/controlGpModel.ts +++ b/src/modules/control/gp/models/controlGpModel.ts @@ -9,6 +9,10 @@ export interface ControlGpFlightPlanState { controlGpContains: ControlGpPlanContainsRS | undefined; } +export interface ControlGpLogState { + controlGpWarnLog: ControlGpWarnLogData[] | undefined; +} + export interface ControlGpHisState { controlGpHistory: ControlGpHistoryData[] | undefined; } @@ -16,7 +20,6 @@ export interface ControlGpHisState { export interface ControlGpDtlState { controlGpDetail: ControlGpDtlData | undefined; controlDetail: ControlDetailData | undefined; - } export interface ControlGroupAuthState { @@ -104,7 +107,6 @@ export interface ControlGroupAuthData { } export interface ControlGpFlightPlanDataList extends Array {}; - export interface ControlGpFlightPlanData { planSno?: number, groupId: string, @@ -128,6 +130,12 @@ export interface ControlGpFlightPlanData { areaList?: FlightPlanAreaDataList | undefined } +export interface ControlGpWarnLogData { + warnLogSno: number; + cntrlId: String; + createDt: String; +} + export interface FlightPlanAreaDataList extends Array {}; export interface FlightPlanAreaData { @@ -169,10 +177,14 @@ export interface ControlGpPlanContainsRS { idntfNum: string, } -export interface ReponseControlGpHistory { +export interface ResponseControlGpHistory { data: ControlGpHistoryData[]; } +export interface ResponseControlGpWarnLog { + data: ControlGpWarnLogData[]; +} + export interface ResponseControlGroupAuth { data: ControlGroupAuthData[]; } @@ -181,8 +193,10 @@ export const initiaResponseControlGpData = { controlGpList: undefined, controlGpDetail: undefined, controlGpHistory: undefined, + controlGpWarnLog: undefined, controlDetail: undefined, controlGroupAuthInfo: undefined, controlGpFltPlanList: undefined, + controlGpWarnLogList: undefined, controlGpContains: undefined }; diff --git a/src/modules/control/gp/reducers/controlGpReducer.ts b/src/modules/control/gp/reducers/controlGpReducer.ts index 52790305..ed2317c4 100644 --- a/src/modules/control/gp/reducers/controlGpReducer.ts +++ b/src/modules/control/gp/reducers/controlGpReducer.ts @@ -7,18 +7,21 @@ import { controlGpFlightPlanAction, controlGpFlightPlanInitAction, controlGpFlightPlanWarnAction, + controlGpLogAction, controlGpHisAction, controlGpRtDtlAction, - controlGroupAuthAction + controlGroupAuthAction, } from '../actions/controlGpAction'; import { + ControlGpWarnLogData, ControlDetailData, ControlGpDtlState, ControlGpFlightPlanState, + ControlGpLogState, ControlGpHisState, ControlGpState, ControlGroupAuthState, - initiaResponseControlGpData + initiaResponseControlGpData, } from '../models/controlGpModel'; export const controlGpReducer = createReducer( @@ -28,7 +31,7 @@ export const controlGpReducer = createReducer( const { controlGpList } = action.payload; draft.controlGpList = controlGpList; }) -) +); export const controlGpFltPlanReducer = createReducer( initiaResponseControlGpData @@ -50,24 +53,27 @@ export const controlGpFltPlanReducer = createReducer( + initiaResponseControlGpData +).handleAction(controlGpLogAction.success, (state, action) => + produce(state, draft => { + const { controlGpWarnLog } = action.payload; + draft.controlGpWarnLog = controlGpWarnLog; + }) +); -export const controlGpHisReducer = createReducer< - ControlGpHisState, - ControlGpAction ->(initiaResponseControlGpData).handleAction( - controlGpHisAction.success, - (state, action) => +export const controlGpHisReducer = createReducer( + initiaResponseControlGpData + ).handleAction(controlGpHisAction.success, (state, action) => produce(state, draft => { const { controlGpHistory } = action.payload; draft.controlGpHistory = controlGpHistory; }) ); -export const controlGpDtlReducer = createReducer< - ControlGpDtlState, - ControlGpAction ->(initiaResponseControlGpData) - .handleAction(controlGpRtDtlAction.success, (state, action) => +export const controlGpDtlReducer = createReducer( + initiaResponseControlGpData + ).handleAction(controlGpRtDtlAction.success, (state, action) => produce(state, draft => { const { controlGpDetail } = action.payload; diff --git a/src/modules/control/gp/sagas/controlGpSaga.ts b/src/modules/control/gp/sagas/controlGpSaga.ts index 7a9c37b4..2feddb2c 100644 --- a/src/modules/control/gp/sagas/controlGpSaga.ts +++ b/src/modules/control/gp/sagas/controlGpSaga.ts @@ -15,7 +15,7 @@ function* getControlGpSaga( const state = yield select(); const { objectId, isClickObject } = state.controlMapReducer; const { controlGroupAuthInfo } = state.controlGroupAuthState; - const { controlGpHistory } = state.controlGpHisState; + const { controlGpHistory } = state.controlGpHisState; let gpsData: ControlGpData[] = []; @@ -35,25 +35,24 @@ function* getControlGpSaga( }); } - console.log('gps ', gpsData); + console.log('gps>>>> ', data); yield put( Actions.controlGpAction.success({ - controlGpList: gpsData + controlGpList: data }) ); - if (objectId && isClickObject) { let detailData; //상세 정보에서 실시간 데이터 호출 - gpsData.map(item => { + data.map(item => { if (item.controlId === objectId) { detailData = item; } - }); - + }); + yield put(Actions.controlGpRtDtlAction.request(detailData)); // History Push @@ -98,7 +97,6 @@ function* controlGpRtDtlSaga( try { const controlGpDetail = action.payload; - // console.log(controlGpDetail); yield put( Actions.controlGpRtDtlAction.success({ controlDetail: undefined, @@ -117,7 +115,6 @@ function* controlDtlSaga( const controlId = action.payload; const { data } = yield call(controlGpApi.getDetail, controlId); - console.log('data>>>>>>>>>>>>>>>>>>>>>', data); yield put(Actions.controlGpDtlAction.success(data)); } catch (error) { yield put(Actions.controlGpDtlAction.failure(error)); @@ -161,6 +158,23 @@ function* controlGpFlightPlanSaga( } } +function* getControlGpWarnLogSaga( + action: ActionType +) { + try{ + const {id} = action.payload; + const data = yield call(controlGpApi.getWarnLog, id) + console.log('SAGA : Warn Log list : ', data); + yield put( + Actions.controlGpLogAction.success({ + controlGpWarnLog: data + }) + ); + } catch(error) { + yield put(Actions.controlGpLogAction.failure(error)); + } +} + function* controlGpFlightPlanWarnSaga( action: ActionType ) { @@ -176,9 +190,11 @@ function* controlGpFlightPlanWarnSaga( } } + export function* controlGpSaga() { yield takeEvery(Actions.controlGpAction.request, getControlGpSaga); yield takeEvery(Actions.controlGpHisAction.request, getControlGpHistorySaga); + yield takeEvery(Actions.controlGpLogAction.request, getControlGpWarnLogSaga); yield takeEvery(Actions.controlGpRtDtlAction.request, controlGpRtDtlSaga); yield takeEvery(Actions.controlGpDtlAction.request, controlDtlSaga); yield takeEvery(Actions.controlGroupAuthAction.request, controlGroupAuthSaga); diff --git a/src/redux/reducers/rootReducer.ts b/src/redux/reducers/rootReducer.ts index 35f4130f..29079c23 100644 --- a/src/redux/reducers/rootReducer.ts +++ b/src/redux/reducers/rootReducer.ts @@ -22,6 +22,7 @@ import { controlGpFltPlanReducer, controlGpSaga, ControlGpState, + controlGpLogReducer, } from '../../modules/control/gp'; import controlMapReducer from '../../modules/control/map/reducers/controlMapReducer'; import { mainDahReducer } from '../../modules/main/dash/reducers/mainDashReducer'; @@ -34,6 +35,7 @@ import navbar from './navbar'; import { flightReducer } from '../../modules/basis/flight/reducers/basisFlightReducer'; import { flightSaga } from '../../modules/basis/flight/sagas/basisFlightSaga'; + export interface StoreState { controlGpState: ControlGpState; } @@ -63,6 +65,7 @@ const rootReducer = combineReducers({ accountState: accountReducer, controlGpState: controlGpReducer, controlGpHisState: controlGpHisReducer, + controlGpLogState: controlGpLogReducer, controlGpDtlState: controlGpDtlReducer, controlGroupAuthState: controlGroupAuthReducer, controlGpFltPlanState: controlGpFltPlanReducer, diff --git a/src/views/control/report/ControlReportDetail.js b/src/views/control/report/ControlReportDetail.js index d3f04255..3551254a 100644 --- a/src/views/control/report/ControlReportDetail.js +++ b/src/views/control/report/ControlReportDetail.js @@ -11,19 +11,22 @@ import { GET_ARCTFT_TYPE_CD, GET_WGHT_TYPE_CD } from '../../../utility/CondeUtil'; -import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap' +import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Card } from 'reactstrap' +import { controlGpLogAction } from '../../../modules/control/gp'; const ControlReportDetail = props => { - const [historyModal, setHistoryModal] = useState(false); const dispatch = useDispatch(); + const [historyModal, setHistoryModal] = useState(false); - const { controlGpDetail, controlDetail } = useSelector( - state => state.controlGpDtlState - ); + const { controlGpDetail, controlDetail } = useSelector(state => state.controlGpDtlState); + const { controlGpWarnLog } = useSelector(state => state.controlGpLogState); + + useEffect(() => { + if(historyModal) { + dispatch(controlGpLogAction.request({id : controlGpDetail.controlId})); + } + }, [historyModal]) - // useEffect(() => { - // // console.log(controlGpDetail); - // }, [controlGpDetail]); const handlerClose = () => { // console.log('================'); @@ -37,6 +40,7 @@ const ControlReportDetail = props => { return '-'; } }; + return (
@@ -55,41 +59,52 @@ const ControlReportDetail = props => {
+ setHistoryModal(!historyModal)} className='modal-dialog-centered historyModal' > - setHistoryModal(!historyModal)}> -
- DRONE01 - 알림내역 -
- -
- - - - - - - - - - - - -
번호날짜내용
12022-08-12 22:12:05탈출!!비상탈출!!!
-
- - - -
+ setHistoryModal(!historyModal)}> +
+ {controlGpDetail?.objectId} + 알림내역 +
+ +
+ + + + + + + + {controlGpWarnLog ? + controlGpWarnLog.map((p, i) => { + return ( + + + + + + ) + }) + : + + + + } +
번호날짜내용
{i+1}{p.createDt}{p.warnType}
데이터가 없습니다.
+
+ + + +
diff --git a/src/views/control/report/ControlReportList.js b/src/views/control/report/ControlReportList.js index 38455511..abd8aa6a 100644 --- a/src/views/control/report/ControlReportList.js +++ b/src/views/control/report/ControlReportList.js @@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'; import { Search, X } from 'react-feather'; import { useDispatch, useSelector } from 'react-redux'; import { Badge, Button, Input, InputGroup } from 'reactstrap'; -import { controlGpDtlAction } from '../../../modules/control/gp'; +import { controlGpDtlAction, controlGpLogAction } from '../../../modules/control/gp'; import { objectClickAction } from '../../../modules/control/map/actions/controlMapActions'; const ControlReportList = props => { @@ -12,11 +12,6 @@ const ControlReportList = props => { const dispatch = useDispatch(); - useEffect(() => { - // console.log('>>>>', filterId); - controlGpList; - }, [controlGpList]); - const handlerDetail = (objectId, cntrlId) => { dispatch(objectClickAction(objectId)); dispatch(controlGpDtlAction.request(cntrlId)); @@ -63,7 +58,7 @@ const ControlReportList = props => { // console.log(item); if (item.objectId && item.objectId.indexOf(filterId) != -1) { - console.log(item); + // console.log(item); return (