import {useState, useEffect} from 'react'; import { getData } from '@/components/lib/api'; import moment from "moment"; export type TInftwtAnls = { inftwtAnlsSn:number; aplcnYm: string; enoCd: string; ctpvCd: string; sggCd: string; swageTmplntCd: string; swageTmplntNm: string; swtrmtZoneCd: string; swtrmtZoneNm: string; atflCd: string; atflId: string; atflInpNm: string; atflHrPttnNm: string; atflMpngNm: string; atflOilqNm: string; atflNm: string; drtwSwtcRt:number; anlsInfo: string; scsYn: string; }; export type TInftwtAnlsRslt = { inftwtAnlsSn: number; pplMngNo: string; anlsTm: string; predcOilq:number; } export type TRdiiAnls = { rainInfwtAnlsSn:number; aplcnYm: string; enoCd: string; ctpvCd: string; sggCd: string; swageTmplntCd: string; swageTmplntNm: string; swtrmtZoneCd: string; swtrmtZoneNm: string; atflCd: string; atflId: string; atflInpNm: string; atflHrPttnNm: string; atflMpngNm: string; atflRainNm: string; atflNm: string; drtwSwtcRt:number; anlsInfo: string; scsYn: string; srcNm: string; // 출처이름 }; export type TRdiiAnlsRslt = { rainInfwtAnlsSn: number; pplMngNo: string; anlsTm: string; predcOilq:number; minq:number; } export type TOilqData = { inftwtAnlsSn: number; // 침입수분석 일련번호 pplMngNo: string; // 관로관리번호 mtrngDt: string; // 계측일시 oilq: number; // 유량 } export type TRainData = { rainInfwtAnlsSn: number; mtrngDt: string; amrf: number; // 강우량 } function roundTo(n: number, digits: number): number { const factor = Math.pow(10, digits); return Math.round(n * factor) / factor; } const getOptionsAplcnYm = (yyyymms: string[]): { text: string; val: string, hidden?: boolean }[] => { const yyyymms1 : { text: string; val: string; hidden?: boolean }[] = yyyymms.map(dateStr => { const year = dateStr.slice(0, 4); const month = dateStr.slice(4, 6); return { text: `${year}-${month}`, val: dateStr }; }); yyyymms1.unshift({ val: '0', text: '선택', hidden: true }); return yyyymms1; }; const selectAplcnYms = async(gubun:string) => { // 상수사용월 try { const queryString = ''; const result = await getData(`v1/${gubun}/aplcnYm${queryString ? `?${queryString}` : ''}`); if (result && result.length > 0) { console.log("selectAplcnYms", result); return getOptionsAplcnYm(result); } } catch (error) { console.error(error); } }; export const useAplcnYms = (gubun:string) => { const [data, setData] = useState<{ text: string; val: string }[]>([]); useEffect(() => { const fetch = async (gubun:string) => { const result = await selectAplcnYms(gubun); if (result) setData(result); }; fetch(gubun); }, [gubun]); return data; }; export const getOptionsInftwtAnlsInfo = (anlsArr: TInftwtAnls[]): { text: string; val: number, hidden?: boolean }[] => { const options : { text: string; val: number; hidden?: boolean }[] = anlsArr.map(anls => ({ text: anls.anlsInfo, val: anls.inftwtAnlsSn, })); options.unshift({ val: 0, text: '선택', hidden: true }); return options; }; export const selectInftwtAnls = async(aplcnYm:string) => { // 침입수분석 try { const queryString = aplcnYm ? `aplcnYmFrom=${aplcnYm}&aplcnYmTo=${aplcnYm}` : ''; const result = await getData(`v1/inftwtAnls${queryString ? `?${queryString}` : ''}`); if (result && result.numberOfElements > 0) { console.log("selectInftwtAnls", result.content); return result.content; } } catch (error) { console.error(error); } }; export const getChartDataInftwtAnlsRslt = (arr: TInftwtAnlsRslt[]): { label: string; val: number }[] => { const options = arr.map(anlsRslt => ({ label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("HH시"), val: roundTo(anlsRslt.predcOilq, 2), })); return options; }; export const selectInftwtAnlsRslt = async(inftwtAnlsSn:number, pplMngNo:string) => { // 침입수분석 결과 try { if ((inftwtAnlsSn === undefined || inftwtAnlsSn === 0) || !pplMngNo) { console.warn("inftwtAnlsSn or pplMngNo is not provided"); return []; } const result = await getData(`v1/inftwtAnlsRslt/ppl/${inftwtAnlsSn}/${pplMngNo}`); if (result && result.numberOfElements > 0) { console.log("selectInftwtAnlsRslt", result.content); return result.content; } } catch (error) { console.error(error); } }; export const getChartDataOilq = (arr: TOilqData[]): { label: string; val: number }[] => { const options = arr.map(anlsRslt => ({ label: anlsRslt.mtrngDt, val: roundTo(anlsRslt.oilq, 2), })); return options; }; export const selectOilq = async(inftwtAnlsSn:number, pplMngNo:string) => { // 유량 try { if ((inftwtAnlsSn === undefined || inftwtAnlsSn === 0) || !pplMngNo) { console.warn("inftwtAnlsSn or pplMngNo is not provided"); return []; } const result = await getData(`v1/inftwtAnlsRslt/oilqPpl/${inftwtAnlsSn}/${pplMngNo}`); if (result && result.numberOfElements > 0) { console.log("selectOilq", result.content); return result.content; } } catch (error) { console.error(error); } }; export const selectPplInftwtQty = async(inftwtAnlsSn:number, pplMngNo:string) => { // 침입수량 try { if ((inftwtAnlsSn === undefined || inftwtAnlsSn === 0) || !pplMngNo) { console.warn("inftwtAnlsSn or pplMngNo is not provided"); return []; } const result = await getData(`v1/inftwtAnlsRslt/pplInftwtQty/${inftwtAnlsSn}/${pplMngNo}`); if (result.length > 0) { console.log("selectPplInftwtQty", result); return result[0].avg_day_flow; } else { return 0; // 데이터가 없을 경우 0 반환 } } catch (error) { console.error(error); } }; //---------- export const selectPplRdiiQty = async(rainInfwtAnlsSn:number, pplMngNo:string) => { // rdii값 try { if ((rainInfwtAnlsSn === undefined || rainInfwtAnlsSn === 0) || !pplMngNo) { console.warn("rainInfwtAnlsSn or pplMngNo is not provided"); return []; } const result = await getData(`v1/rdiiAnlsRslt/pplRdiiQty/${rainInfwtAnlsSn}/${pplMngNo}`); if (result?.sustaintime > 0) { console.log("selectPplRdiiQty", result); return result; } } catch (error) { console.error(error); } }; export const getOptionsRdiiAnlsInfo = (anlsArr: TRdiiAnls[]): { text: string; val: number, hidden?: boolean }[] => { const options : { text: string; val: number; hidden?: boolean }[] = anlsArr.map(anls => ({ text: anls.anlsInfo, val: anls.rainInfwtAnlsSn, })); options.unshift({ val: 0, text: '선택', hidden: true }); return options; }; export const selectRdiiAnls = async(aplcnYm:string) => { // 침입수분석 try { const queryString = aplcnYm ? `aplcnYmFrom=${aplcnYm}&aplcnYmTo=${aplcnYm}` : ''; const result = await getData(`v1/rdiiAnls${queryString ? `?${queryString}` : ''}`); if (result && result.numberOfElements > 0) { console.log("selectRdiiAnls", result.content); return result.content; } } catch (error) { console.error(error); } }; export const getChartDataRdiiAnlsRslt = (arr: TRdiiAnlsRslt[]): { label: string; lineVal0: number, barVal0:number }[] => { const options = arr.map(anlsRslt => ({ label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("MM-DD HH시"), lineVal0: roundTo(anlsRslt.predcOilq, 2), barVal0: 0 })); return options; }; export const getChartDataRdiiAnlsRsltMinq = (arr: TRdiiAnlsRslt[]): { label: string; val: number }[] => { const options = arr.map(anlsRslt => ({ label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("MM-DD HH시"), val: roundTo(anlsRslt.minq, 2), })); return options; }; export const selectRdiiAnlsRslt = async(rainInfwtAnlsSn:number, pplMngNo:string) => { // RDII분석 결과 try { if ((rainInfwtAnlsSn === undefined || rainInfwtAnlsSn === 0) || !pplMngNo) { console.warn("RdiiAnlsSn or pplMngNo is not provided"); return []; } const result = await getData(`v1/rdiiAnlsRslt/ppl/${rainInfwtAnlsSn}/${pplMngNo}`); if (result && result.numberOfElements > 0) { return result.content; } } catch (error) { console.error(error); } }; export const selectRainData = async(rainInfwtAnlsSn:number) => { // 강우데이터 try { if ((rainInfwtAnlsSn === undefined || rainInfwtAnlsSn === 0)) { console.warn("RdiiAnlsSn or pplMngNo is not provided"); return []; } const result = await getData(`v1/rdiiAnlsRslt/rainData/${rainInfwtAnlsSn}`); if (result && result.numberOfElements > 0) { console.log("selectRainData", result.content); return result.content; } } catch (error) { console.error(error); } }; export const getChartDataRainData = (arr: TRainData[]): { label: string; lineVal0: number, barVal0: number }[] => { const options = arr.map(data => ({ label: moment(data.mtrngDt, "YYYY-MM-DD HH:mm:ss").format("MM-DD HH시"), lineVal0: 0, barVal0: roundTo(data.amrf,2), })); return options; };