From 81b027cfe1151493b68ba4b01788349ad36184d6 Mon Sep 17 00:00:00 2001 From: dongsilove Date: Wed, 12 Nov 2025 00:00:18 +0900 Subject: [PATCH] =?UTF-8?q?fo=20=EC=88=98=EC=A0=95=EC=A4=912?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/store/facilityPrecipitation/index.tsx | 110 ++++++++++++------ 1 file changed, 75 insertions(+), 35 deletions(-) diff --git a/apps/fo/app/store/facilityPrecipitation/index.tsx b/apps/fo/app/store/facilityPrecipitation/index.tsx index 75e9042bd..f4462c4c2 100644 --- a/apps/fo/app/store/facilityPrecipitation/index.tsx +++ b/apps/fo/app/store/facilityPrecipitation/index.tsx @@ -1,4 +1,4 @@ -import { getFetch } from "@/app/components/api"; +import { getFetch, postFetch } from "@/app/components/api"; import CalcRainEffect from "@/app/components/common/CalcRainEffect"; import { roundNumber } from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; @@ -130,50 +130,90 @@ const upHeadListPrecipitationDetail:TableUpperProps[] = [ const gridListPrecipitationDetail:PrecipitationPropsDetailProps[] = [ ] +export interface FacilityRainDetailProps { + bscFctCd: string, // 시설코드 + msrDt: string, // 측정일 + stnKo: string, // 관측소명 + infoRnDay: number | string | '', // 강수량 (mm/일) + rainDay: number, // 강우일 (일) + rainEffectDay: number, // 강우영향일 (일) +} + /**==================================== * Store - api ====================================*/ +// 시설정보 목록 [] +export const fetchFacilityRainDetailList = async (searchYear: string|undefined, fcltCdList: string[]): Promise => { + try { + const res = await postFetch('fo', '/fclt/rain/detail/'+searchYear, fcltCdList); + return res; + } catch (error) { + console.error('시설정보 목록 데이터를 가져오는데 실패했습니다:', error); + return null; + } +}; const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { const tailStr = '/'+pageNo + '/' + pageSize + '/' + searchYear + (part?'/' + part:'' ) + (nameCd?'/' + nameCd:'' ) + (fcltCpct?'/' + fcltCpct:'' ) + (operationValue?'/' + operationValue:'' ) + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') ; // const url = '/fclt/rain' + tailStr; const url = '/rdii/list' + tailStr; const res = await getFetch('fo', url); - // const tmpData:PrecipitationPropsDetailProps[] = []; - // if(res!= null && res.data.length > 0){ - // for(let idx=0; idx=3?1:0; - - // tmpData.push({ - // bscFctCd : bscFctCd, - // rainDt : rainDt, - // infoRnDay : infoRnDay, - // rainDay : rainDay, - // rainEffectDay : rainDay - // }) - // } - // } - - // res.data.map((item: FacilityPrecipitationProps) => { - // const filteredList = tmpData.filter((gridItem) => { - // return gridItem.bscFctCd === item.bscFctCd; - // }); - - // const rtnData = CalcRainEffect(filteredList); - // item.rainEffectDay = rtnData.reduce((acc, curr) => acc + curr.rainEffectDay, 0); // 강우영향일 - // item.totalYearRain = rtnData.reduce((acc, curr) => acc + Number(curr.infoRnDay), 0); // 연간 총 강수량 - // item.infoRnDay = filteredList.reduce((acc, curr) => acc + curr.rainDay, 0); // 강우일 - // }); - - // } - - - return { data: res.data, count: res.count, detailData: tmpData }; + + const fcltCdList : string[]= []; + res?.data.forEach(item => { + fcltCdList.push(item.bscFctCd); + }); + + const rainDetailListRes : any = await fetchFacilityRainDetailList(searchYear, fcltCdList); + const tmpData:PrecipitationPropsDetailProps[] = []; + + for (const item of res?.data) { + const rainDetailList = rainDetailListRes?.data[item.bscFctCd]; + + let rainDayCnt = 0; // 강우일수 + let rainEffectDayCnt = 0; // 강우영향일수 + let totalRain = 0; // 총강수량 + if (rainDetailList) { + item.stnKo = rainDetailList[0]?.stnKo || ''; // 관측소명 + + let rainEffectDayEval = 0; // 강우영향일 평가 변수 + rainDetailList.forEach(item2 => { + + if (item2.infoRnDay == null) item2.infoRnDay = 0; + if (item2.infoRnDay >= 3) { // 강우량이 3mm 이상인 경우 강우일 + rainEffectDayEval = 2; + item2.rainDay = 1; + rainDayCnt++; // 강우일수 증가 + } else { + rainEffectDayEval--; + item2.rainDay = 0; + } + + if (rainEffectDayEval < 0) { // 청천일 + item2.rainEffectDay = 0; + } else { // 강우영향일 + item2.rainEffectDay = 1; + rainEffectDayCnt++; // 강우영향일수 증가 + } + totalRain += Number(item2.infoRnDay); + item2.rainDt = item2.msrDt; + tmpData.push({ + bscFctCd: item.bscFctCd, + rainDt: item2.msrDt, + infoRnDay: item2.infoRnDay, + rainEffectDay: item2.rainEffectDay, + rainDay: item2.rainDay + }); + }); + item.infoRnDay = rainDayCnt; + item.rainEffectDay = rainEffectDayCnt; + item.totalYearRain = totalRain; + item.rainDetailList = rainDetailList; + } + } + + return { data: res.data, count: res.count, detailData: tmpData}; } /**====================================