Browse Source

드론관제시스템 날씨 페이지(reducer 값 인식 x)

ctrlDraw
sanguu(박상현) 2 years ago
parent
commit
523ef1cdf0
  1. 3
      src/configs/constants.js
  2. 57
      src/modules/control/gp/actions/controlGpAction.ts
  3. 12
      src/modules/control/gp/apis/controlGpApi.ts
  4. 175
      src/modules/control/gp/models/controlGpModel.ts
  5. 56
      src/modules/control/gp/reducers/controlGpReducer.ts
  6. 19
      src/modules/control/gp/sagas/controlGpSaga.ts
  7. 1
      src/redux/reducers/rootReducer.ts
  8. 70
      src/utility/dfsxyconv.js
  9. 126
      src/views/control/report/ControlReportDetail.js

3
src/configs/constants.js

@ -11,11 +11,14 @@ export const NAVER_APP_SECRET_KEY = process.env.NAVER_APP_SECRET_KEY;
// WINDY API KEY
export const WINDY_KEY = process.env.REACT_WINDY_KEY;
// 기상청 API KEY
export const WHEATHER_KEY = process.env.REACT_WHEATHER_KEY;
// 통신 코드
export const HTTP_STATUS_CODE = {
OK: '00000'
};
//r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D
export const FORM_PROC_TYPE = {
SELECT: 'R',
CREATE: 'C',

57
src/modules/control/gp/actions/controlGpAction.ts

@ -15,7 +15,9 @@ import {
ControlGroupAuthState,
ControlGpArcrftWarnList,
ControlGpWarnLogList,
// ControlGpWarnLogDataList,
ControlweatherData,
ControlGpWeatherState,
rescontrolweatherData
} from '../models/controlGpModel';
const CONTROL_GP_REQUEST = 'control/gp/CONTROL_GP_REQUEST';
@ -40,26 +42,41 @@ const CONTROL_GROUP_AUTH_SUCCESS = 'control/group/CONTROL_GROUP_AUTH_SUCCESS';
const CONTROL_GROUP_AUTH_FAILURE = 'control/group/CONTROL_GROUP_AUTH_FAILURE';
// [관제] 비행 구역 조회
const CONTROL_FLIGHT_PLAN_REQUEST = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_REQUEST';
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_FLIGHT_PLAN_REQUEST =
'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_REQUEST';
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';
//로그 리스트 조회
const CONTROL_WEATHER_REQUEST = 'control/gp/CONTROL_WEATHER_REQUEST';
const CONTROL_WEATHER_SUCCESS = 'control/gp/CONTROL_WEATHER_SUCCESS';
const CONTROL_WEATHER_FAILURE = 'control/gp/CONTROL_WEATHER_FAILURE';
const CONTROL_FLIGHT_PLAN_INIT =
'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_INIT';
// [관제] 비행 구역 비정상 여부 체크
const CONTROL_FLIGHT_PLAN_WARN_REQUEST = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_WARN_REQUEST';
const CONTROL_FLIGHT_PLAN_WARN_SUCCESS = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_WARN_SUCCESS';
const CONTROL_FLIGHT_PLAN_WARN_FAILURE = 'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_WARN_FAILURE';
const CONTROL_FLIGHT_PLAN_WARN_REQUEST =
'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_WARN_REQUEST';
const CONTROL_FLIGHT_PLAN_WARN_SUCCESS =
'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_WARN_SUCCESS';
const CONTROL_FLIGHT_PLAN_WARN_FAILURE =
'control/gp/flight/plan/CONTROL_FLIGHT_PLAN_WARN_FAILURE';
// [관제] 기체 별 비정상 리스트 조회
const CONTROL_GP_ARCRFT_WARN_REQUEST = 'control/gp/arcrft/warn/CONTROL_FLIGHT_PLAN_WARN_REQUEST';
const CONTROL_GP_ARCRFT_WARN_SUCCESS = 'control/gp/arcrft/warn/CONTROL_FLIGHT_PLAN_WARN_SUCCESS';
const CONTROL_GP_ARCRFT_WARN_FAILURE = 'control/gp/arcrft/warn/CONTROL_FLIGHT_PLAN_WARN_FAILURE';
const CONTROL_GP_ARCRFT_WARN_REQUEST =
'control/gp/arcrft/warn/CONTROL_FLIGHT_PLAN_WARN_REQUEST';
const CONTROL_GP_ARCRFT_WARN_SUCCESS =
'control/gp/arcrft/warn/CONTROL_FLIGHT_PLAN_WARN_SUCCESS';
const CONTROL_GP_ARCRFT_WARN_FAILURE =
'control/gp/arcrft/warn/CONTROL_FLIGHT_PLAN_WARN_FAILURE';
export const controlGpAction = createAsyncAction(
CONTROL_GP_REQUEST,
@ -73,7 +90,6 @@ export const controlGpHisAction = createAsyncAction(
CONTROL_GP_HIS_FAILURE
)<{ id: string }, ControlGpHisState, AxiosError>();
export const controlGpDtlAction = createAsyncAction(
CONTROL_GP_DTL_REQUEST,
CONTROL_GP_DTL_SUCCESS,
@ -95,7 +111,7 @@ export const controlGroupAuthAction = createAsyncAction(
export const controlGpFlightPlanAction = createAsyncAction(
CONTROL_FLIGHT_PLAN_REQUEST,
CONTROL_FLIGHT_PLAN_SUCCESS,
CONTROL_FLIGHT_PLAN_FAILURE,
CONTROL_FLIGHT_PLAN_FAILURE
)<string, ControlGpFlightPlanDataList, AxiosError>();
export const controlGpLogAction = createAsyncAction(
@ -107,7 +123,7 @@ export const controlGpLogAction = createAsyncAction(
export const controlGpFlightPlanWarnAction = createAsyncAction(
CONTROL_FLIGHT_PLAN_WARN_REQUEST,
CONTROL_FLIGHT_PLAN_WARN_SUCCESS,
CONTROL_FLIGHT_PLAN_WARN_FAILURE,
CONTROL_FLIGHT_PLAN_WARN_FAILURE
)<ControlGpPlanContainsRQ, ControlGpPlanContainsRS, AxiosError>();
export const controlGpArcrftWarnAction = createAsyncAction(
@ -116,7 +132,15 @@ export const controlGpArcrftWarnAction = createAsyncAction(
CONTROL_GP_ARCRFT_WARN_FAILURE
)<string, ControlGpArcrftWarnList, AxiosError>();
export const controlGpFlightPlanInitAction = createAction(CONTROL_FLIGHT_PLAN_INIT)();
export const controlweatherAction = createAsyncAction(
CONTROL_WEATHER_REQUEST,
CONTROL_WEATHER_SUCCESS,
CONTROL_WEATHER_FAILURE
)<ControlweatherData, rescontrolweatherData, AxiosError>();
export const controlGpFlightPlanInitAction = createAction(
CONTROL_FLIGHT_PLAN_INIT
)();
const actions = {
controlGpAction,
@ -128,7 +152,8 @@ const actions = {
controlGpFlightPlanAction,
controlGpFlightPlanWarnAction,
controlGpArcrftWarnAction,
controlGpFlightPlanInitAction
controlGpFlightPlanInitAction,
controlweatherAction
};
export type ControlGpAction = ActionType<typeof actions>;

12
src/modules/control/gp/apis/controlGpApi.ts

@ -3,7 +3,8 @@ import {
ResponseControlGpHistory,
ResponseControlGroupAuth,
ControlGpPlanContainsRQ,
ResponseControlGpWarnLog
ResponseControlGpWarnLog,
ControlweatherData
} from '../models/controlGpModel';
import qs from 'qs';
@ -50,6 +51,15 @@ export const controlGpApi = {
return data;
},
apiweather: async (rq: ControlweatherData) => {
const { data } = await axios.get(`api/ctr/cntrl/api/weather`, {
params: {
...rq
}
});
return data;
},
checkPlanContains: async (rq: ControlGpPlanContainsRQ) => {
if (!rq.idntfNum) {
return null;

175
src/modules/control/gp/models/controlGpModel.ts

@ -1,9 +1,13 @@
import { FlightPlanData } from "../../../basis/flight/models/basisFlightModel";
import { FlightPlanData } from '../../../basis/flight/models/basisFlightModel';
export interface ControlGpState {
controlGpList: ControlGpData[] | undefined;
}
export interface ControlGpWeatherState {
controlWheather: rescontrolweatherData | undefined;
}
export interface ControlGpFlightPlanState {
controlGpFltPlanList: ControlGpFlightPlanDataList | undefined;
controlGpContains: ControlGpPlanContainsRS | undefined;
@ -95,40 +99,50 @@ export interface ControlGpData {
controlWarnCd: boolean;
controlWarnNotyCd: boolean;
}
export interface ControlweatherData {
serviceKey: string;
numOfRows: string;
pageNo: string;
dataType: string;
base_date: string;
base_time: string;
nx: string;
ny: string;
}
export interface ControlGroupAuthData {
cstmrSno: number,
userId: string,
groupId: string,
groupNm: string,
groupAuthCd: string,
arcrftSno: number,
idntfNum: string,
createUserId: string
cstmrSno: number;
userId: string;
groupId: string;
groupNm: string;
groupAuthCd: string;
arcrftSno: number;
idntfNum: string;
createUserId: string;
}
export interface ControlGpFlightPlanDataList extends Array<ControlGpFlightPlanData> {};
export interface ControlGpFlightPlanDataList
extends Array<ControlGpFlightPlanData> {}
export interface ControlGpFlightPlanData {
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
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;
}
export interface ControlGpWarnLogData {
@ -138,58 +152,76 @@ export interface ControlGpWarnLogData {
idntfNum: String;
}
export interface ControlGpWarnLogList extends Array<ControlGpWarnLogData> {};
export interface ControlGpWarnLogList extends Array<ControlGpWarnLogData> {}
export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {};
export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {}
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
}
export interface FlightPlanAreaCoordDataList extends Array<FlightPlanAreaCoordData> {};
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;
}
export interface FlightPlanAreaCoordDataList
extends Array<FlightPlanAreaCoordData> {}
export interface FlightPlanAreaCoordData {
planAreaCoordSno?: number,
planAreaSno?: number,
lat: number,
lon: number,
createUserId?: string,
createDt?: string
planAreaCoordSno?: number;
planAreaSno?: number;
lat: number;
lon: number;
createUserId?: string;
createDt?: string;
// docState: string
}
export interface ControlGpArcrftWarnData {
cntrlId: string,
warnType: string,
idntfNum: string,
occurDt: string,
createDt: string,
warnCount: number,
}
export interface ControlGpArcrftWarnList extends Array<ControlGpArcrftWarnData> {};
cntrlId: string;
warnType: string;
idntfNum: string;
occurDt: string;
createDt: string;
warnCount: number;
}
export interface rescontrolweatherData {
resultCode: string;
resultMsg: string;
numOfRows: string;
pageNo: string;
totalCount: string;
dataType: string;
baseDate: string;
baseTime: string;
fcstDate: string;
fcstTime: string;
category: string;
fcstValue: string;
nx: string;
ny: string;
}
export interface ControlGpArcrftWarnList
extends Array<ControlGpArcrftWarnData> {}
export interface ControlGpPlanContainsRQ {
idntfNum: string,
lat: number,
lon: number,
planList: FlightPlanData[]
idntfNum: string;
lat: number;
lon: number;
planList: FlightPlanData[];
}
export interface ControlGpPlanContainsRS {
contains: boolean,
idntfNum: string,
contains: boolean;
idntfNum: string;
}
export interface ResponseControlGpHistory {
@ -214,5 +246,8 @@ export const initiaResponseControlGpData = {
controlGpFltPlanList: undefined,
controlGpWarnLogList: undefined,
controlGpContains: undefined,
controlGpArcrftWarnList: undefined
controlGpArcrftWarnList: undefined,
controlweatherData: undefined,
rescontrolweatherData: undefined,
controlWheather: undefined
};

56
src/modules/control/gp/reducers/controlGpReducer.ts

@ -12,6 +12,7 @@ import {
controlGpRtDtlAction,
controlGroupAuthAction,
controlGpArcrftWarnAction,
controlweatherAction
} from '../actions/controlGpAction';
import {
ControlGpWarnLogData,
@ -23,6 +24,7 @@ import {
ControlGpState,
ControlGroupAuthState,
initiaResponseControlGpData,
ControlGpWeatherState
} from '../models/controlGpModel';
export const controlGpReducer = createReducer<ControlGpState, ControlGpAction>(
@ -33,10 +35,24 @@ export const controlGpReducer = createReducer<ControlGpState, ControlGpAction>(
draft.controlGpList = controlGpList;
})
);
export const controlGpweatherReducer = createReducer<
ControlGpWeatherState,
ControlGpAction
>(initiaResponseControlGpData).handleAction(
controlweatherAction.success,
(state, action) =>
produce(state, draft => {
const data = action.payload;
console.log('data>>>>>>>>>', data);
draft.controlWheather = data;
})
);
export const controlGpFltPlanReducer = createReducer<ControlGpFlightPlanState, ControlGpAction>(
initiaResponseControlGpData
).handleAction(controlGpFlightPlanAction.success, (state, action) =>
export const controlGpFltPlanReducer = createReducer<
ControlGpFlightPlanState,
ControlGpAction
>(initiaResponseControlGpData)
.handleAction(controlGpFlightPlanAction.success, (state, action) =>
produce(state, draft => {
const list = action.payload;
draft.controlGpFltPlanList = list;
@ -54,9 +70,11 @@ export const controlGpFltPlanReducer = createReducer<ControlGpFlightPlanState, C
})
);
export const controlGpLogReducer = createReducer<ControlGpLogState, ControlGpAction>(
initiaResponseControlGpData
).handleAction(controlGpLogAction.success, (state, action) =>
export const controlGpLogReducer = createReducer<
ControlGpLogState,
ControlGpAction
>(initiaResponseControlGpData)
.handleAction(controlGpLogAction.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.controlGpWarnLog = data;
@ -69,18 +87,23 @@ export const controlGpLogReducer = createReducer<ControlGpLogState, ControlGpAct
})
);
export const controlGpHisReducer = createReducer<ControlGpHisState, ControlGpAction>(
initiaResponseControlGpData
).handleAction(controlGpHisAction.success, (state, action) =>
export const controlGpHisReducer = createReducer<
ControlGpHisState,
ControlGpAction
>(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<
ControlGpDtlState,
ControlGpAction
>(initiaResponseControlGpData)
.handleAction(controlGpRtDtlAction.success, (state, action) =>
produce(state, draft => {
const { controlGpDetail } = action.payload;
@ -93,16 +116,17 @@ export const controlGpDtlReducer = createReducer<ControlGpDtlState, ControlGpAct
draft.controlDetail = data;
})
)
);
export const controlGroupAuthReducer = createReducer<
ControlGroupAuthState,
ControlGpAction
>(initiaResponseControlGpData)
.handleAction(controlGroupAuthAction.success, (state, action) =>
>(initiaResponseControlGpData).handleAction(
controlGroupAuthAction.success,
(state, action) =>
produce(state, draft => {
const { controlGroupAuthInfo } = action.payload;
draft.controlGroupAuthInfo = controlGroupAuthInfo;
})
)
);

19
src/modules/control/gp/sagas/controlGpSaga.ts

@ -19,7 +19,6 @@ function* getControlGpSaga(
const data = action.payload;
const state = yield select();
const { objectId, isClickObject } = state.controlMapReducer;
// 그룹 별 기체 필터링
const { controlGroupAuthInfo } = state.controlGroupAuthState;
const { controlGpHistory } = state.controlGpHisState;
@ -62,7 +61,7 @@ function* getControlGpSaga(
yield put(Actions.controlGpArcrftWarnAction.success(rs));
}
if (objectId && isClickObject) {
if (objectId) {
let detailData;
//상세 정보에서 실시간 데이터 호출
@ -103,7 +102,7 @@ function* controlGpRtDtlSaga(
) {
try {
const controlGpDetail = action.payload;
// console.log(controlGpDetail);
yield put(
Actions.controlGpRtDtlAction.success({
controlDetail: undefined,
@ -168,13 +167,23 @@ function* getControlGpWarnLogSaga(
try {
const { id } = action.payload;
const data = yield call(controlGpApi.getWarnLog, id);
yield put(Actions.controlGpLogAction.success(data));
} catch (error) {
yield put(Actions.controlGpLogAction.failure(error));
}
}
function* ControlWeatherSaga(
action: ActionType<typeof Actions.controlweatherAction.request>
) {
try {
const rq = action.payload;
const data = yield call(controlGpApi.apiweather, rq);
yield put(Actions.controlweatherAction.success(data.response.body.items));
} catch (error) {
yield put(Actions.controlweatherAction.failure(error));
}
}
function* controlGpFlightPlanWarnSaga(
action: ActionType<typeof Actions.controlGpFlightPlanWarnAction.request>
) {
@ -210,6 +219,8 @@ export function* controlGpSaga() {
yield takeEvery(Actions.controlGpRtDtlAction.request, controlGpRtDtlSaga);
yield takeEvery(Actions.controlGpDtlAction.request, controlDtlSaga);
yield takeEvery(Actions.controlGroupAuthAction.request, controlGroupAuthSaga);
yield takeEvery(Actions.controlweatherAction.request, ControlWeatherSaga);
yield takeEvery(
Actions.controlGpFlightPlanAction.request,
controlGpFlightPlanSaga

1
src/redux/reducers/rootReducer.ts

@ -84,6 +84,7 @@ const rootReducer = combineReducers({
menuState: menuReducer,
analysisHistoryState: analysisHistoryReducer,
analysisSimulatorState: analysisSimulatorReducer,
ControlGpWeatherState: controlGpReducer,
flightState: flightReducer,
findState: findAccountReducer
});

70
src/utility/dfsxyconv.js

@ -0,0 +1,70 @@
var RE = 6371.00877; // 지구 반경(km)
var GRID = 5.0; // 격자 간격(km)
var SLAT1 = 30.0; // 투영 위도1(degree)
var SLAT2 = 60.0; // 투영 위도2(degree)
var OLON = 126.0; // 기준점 경도(degree)
var OLAT = 38.0; // 기준점 위도(degree)
var XO = 43; // 기준점 X좌표(GRID)
var YO = 136; // 기1준점 Y좌표(GRID)
//
// LCC DFS 좌표변환 ( code : "toXY"(위경도->좌표, v1:위도, v2:경도), "toLL"(좌표->위경도,v1:x, v2:y) )
//
export default (code, v1, v2) => {
var DEGRAD = Math.PI / 180.0;
var RADDEG = 180.0 / Math.PI;
var re = RE / GRID;
var slat1 = SLAT1 * DEGRAD;
var slat2 = SLAT2 * DEGRAD;
var olon = OLON * DEGRAD;
var olat = OLAT * DEGRAD;
var sn = Math.tan(Math.PI * 0.25 + slat2 * 0.5) / Math.tan(Math.PI * 0.25 + slat1 * 0.5);
sn = Math.log(Math.cos(slat1) / Math.cos(slat2)) / Math.log(sn);
var sf = Math.tan(Math.PI * 0.25 + slat1 * 0.5);
sf = Math.pow(sf, sn) * Math.cos(slat1) / sn;
var ro = Math.tan(Math.PI * 0.25 + olat * 0.5);
ro = re * sf / Math.pow(ro, sn);
var rs = {};
if (code == "toXY") {
rs['lat'] = v1;
rs['lng'] = v2;
var ra = Math.tan(Math.PI * 0.25 + (v1) * DEGRAD * 0.5);
ra = re * sf / Math.pow(ra, sn);
var theta = v2 * DEGRAD - olon;
if (theta > Math.PI) theta -= 2.0 * Math.PI;
if (theta < -Math.PI) theta += 2.0 * Math.PI;
theta *= sn;
rs['x'] = Math.floor(ra * Math.sin(theta) + XO + 0.5);
rs['y'] = Math.floor(ro - ra * Math.cos(theta) + YO + 0.5);
}
else {
rs['x'] = v1;
rs['y'] = v2;
var xn = v1 - XO;
var yn = ro - v2 + YO;
ra = Math.sqrt(xn * xn + yn * yn);
if (sn < 0.0) - ra;
var alat = Math.pow((re * sf / ra), (1.0 / sn));
alat = 2.0 * Math.atan(alat) - Math.PI * 0.5;
if (Math.abs(xn) <= 0.0) {
theta = 0.0;
}
else {
if (Math.abs(yn) <= 0.0) {
theta = Math.PI * 0.5;
if (xn < 0.0) - theta;
}
else theta = Math.atan2(xn, yn);
}
var alon = theta / sn + olon;
rs['lat'] = alat * RADDEG;
rs['lng'] = alon * RADDEG;
}
return rs;
}

126
src/views/control/report/ControlReportDetail.js

@ -11,10 +11,21 @@ import {
GET_ARCTFT_TYPE_CD,
GET_WGHT_TYPE_CD
} from '../../../utility/CondeUtil';
import { controlGpLogAction } from '../../../modules/control/gp';
import dfsxyconv from '../../../utility/dfsxyconv';
import { controlGpLogAction, controlweatherAction } from '../../../modules/control/gp';
import ControlAlarmDetail from '../alarm/ControlAlarmDetail';
import axios from '../../../modules/utils/customAxiosUtil';
import {
Navigation2,
Search,
Compass,
Sun,
Cloud,
CloudRain,
CloudSnow
} from 'react-feather';
import { WHEATHER_KEY } from '../../../configs/constants';
import { Table } from 'reactstrap';
const ControlReportDetail = props => {
const dispatch = useDispatch();
const [historyModal, setHistoryModal] = useState(false);
@ -22,9 +33,79 @@ const ControlReportDetail = props => {
const { controlGpDetail, controlDetail } = useSelector(
state => state.controlGpDtlState
);
const { controlWheather } = useSelector(state => state.ControlGpWeatherState);
const { controlGpWarnLog } = useSelector(state => state.controlGpLogState);
useEffect(() => {
if (controlGpDetail) {
const rs = dfsxyconv("toXY", controlGpDetail?.lat, controlGpDetail?.lng);
let now = new Date();
let year = now.getFullYear(); // 년도
let month = now.getMonth() + 1; // 월
let day = ('0' + now.getDate()).slice(-2); // 날짜
const today = `${year}${month}${day}`;
let hours = now.getHours();
let minutes = now.getMinutes();
let basetime = "2300";
if ((hours >= 2 && minutes > 9) && hours <= 5) {
basetime = "0200";
}
else if ((hours >= 5 && minutes > 9) && hours < 8) {
basetime = "0500";
}
else if (hours >= 8 && minutes < 10) {
basetime = "0500";
}
else if ((hours >= 8 && minutes > 9) && hours < 11) {
basetime = "0800";
}
else if (hours >= 11 && minutes < 10) {
basetime = "0800";
}
else if (hours >= 11 && hours < 14) {
basetime = "1100";
}
else if (hours >= 14 && minutes < 10) {
basetime = "1100";
}
else if ((hours >= 14 && minutes > 9) && hours < 17) {
basetime = "1400";
}
else if (hours >= 17 && minutes < 10) {
basetime = "1400";
}
else if ((hours >= 17 && minutes > 9) && hours < 20) {
basetime = "1700";
}
else if (hours >= 20 && minutes < 10) {
basetime = "2000";
}
else if ((hours >= 20 && minutes > 9) && hours < 23) {
basetime = "2000";
}
else if (hours >= 23 && minutes < 10) {
basetime = "2300";
}
else if (hours >= 23 && minutes > 9) {
basetime = "2300";
}
const apidata = {
serviceKey: "r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D",
numOfRows: 14,
pageNo: 1,
dataType: "JSON",
base_date: today,
base_time: basetime,
nx: rs.x,
ny: rs.y,
}
dispatch(controlweatherAction.request(apidata));
}
}, [controlGpDetail])
useEffect(() => {
if (historyModal) {
if (controlGpDetail) {
dispatch(controlGpLogAction.request({ id: controlGpDetail.controlId }));
@ -43,7 +124,6 @@ const ControlReportDetail = props => {
return '-';
}
};
return (
<div className='left-layer'>
<div className='layer-content'>
@ -181,7 +261,7 @@ const ControlReportDetail = props => {
<dt>
<div className='list-left-txt'>헤딩 방위각</div>
<div className='list-right-txt'>
{controlGpDetail?.heading} °
{controlGpDetail?.heading}
</div>
</dt>
{/* <dt>
@ -232,7 +312,41 @@ const ControlReportDetail = props => {
</div>
</div>
</div>
<div className='layer-content'>
<div className="layer-ti">
<h4>날씨 정보</h4>
</div>
<div className="layer-content-box">
<div className="layer-content-info">
<div className="layer-weather-table">
<div className="layer-weather-address">
현재위치의 날씨 정보입니다.
<span><Compass size={20} />{controlDetail?.stAreaNm}</span>
</div>
<Table responsive>
<thead>
<tr>
<th>시각</th>
<th>날씨</th>
<th>기온</th>
<th>풍향</th>
<th>풍속</th>
</tr>
</thead>
<tbody>
<tr>
<td>15</td>
<td><Sun /></td>
<td>27</td>
<td><Navigation2 className="rotate-45" /></td>
<td>2m/s</td>
</tr>
</tbody>
</Table>
</div>
</div>
</div>
</div>
<ControlAlarmDetail
historyModal={historyModal}
setHistoryModal={setHistoryModal}

Loading…
Cancel
Save