287 lines
9.0 KiB
TypeScript
287 lines
9.0 KiB
TypeScript
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;
|
|
}; |