From 8259b3829afae06cd7b72f84933eb13ba63b6ca0 Mon Sep 17 00:00:00 2001 From: ljpark Date: Wed, 12 Nov 2025 15:10:51 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=95=EC=88=98=ED=98=84=ED=99=A9=20exceldow?= =?UTF-8?q?n=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/store/facilityPrecipitation/index.tsx | 37 ++++++++++++++----- apps/fo/app/store/rdi/index.tsx | 14 ++++--- .../matMng/coMng/drgtSttn/page.tsx | 9 +++++ 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/apps/fo/app/store/facilityPrecipitation/index.tsx b/apps/fo/app/store/facilityPrecipitation/index.tsx index f4462c4c2..39bc35220 100644 --- a/apps/fo/app/store/facilityPrecipitation/index.tsx +++ b/apps/fo/app/store/facilityPrecipitation/index.tsx @@ -1,5 +1,5 @@ import { getFetch, postFetch } from "@/app/components/api"; -import CalcRainEffect from "@/app/components/common/CalcRainEffect"; +//import CalcRainEffect from "@/app/components/common/CalcRainEffect"; import { roundNumber } from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; export type { TableUpperProps }; @@ -132,7 +132,7 @@ const gridListPrecipitationDetail:PrecipitationPropsDetailProps[] = [ export interface FacilityRainDetailProps { bscFctCd: string, // 시설코드 - msrDt: string, // 측정일 + rainDt: string, // 측정일 stnKo: string, // 관측소명 infoRnDay: number | string | '', // 강수량 (mm/일) rainDay: number, // 강우일 (일) @@ -155,8 +155,7 @@ export const fetchFacilityRainDetailList = async (searchYear: string|undefined, 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 url = '/fclt/rain' + tailStr; const res = await getFetch('fo', url); @@ -165,11 +164,31 @@ const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, fcltCdList.push(item.bscFctCd); }); - const rainDetailListRes : any = await fetchFacilityRainDetailList(searchYear, fcltCdList); + const rainDetailListRes: Record = {}; + const promises: Promise[] = []; + for (let idx = 0; idx < fcltCdList.length; idx += 100) { + const slicedItems = fcltCdList.slice(idx, idx + 100); + // 각 fetch 호출을 Promise 배열에 담기 + promises.push(fetchFacilityRainDetailList(searchYear, slicedItems)); + } + // 모든 요청을 병렬로 실행 + const results = await Promise.all(promises); + //console.log(results); + // 결과를 합치기 + for (const res of results) { + if (res.status === 200 && res.data) { + for (const [key, value] of Object.entries(res.data)) { + const keyStr = String(key); + rainDetailListRes[keyStr] = [...(rainDetailListRes[keyStr] || []), ...(value as any[])]; + } + } + } + //console.log(rainDetailListRes); + const tmpData:PrecipitationPropsDetailProps[] = []; for (const item of res?.data) { - const rainDetailList = rainDetailListRes?.data[item.bscFctCd]; + const rainDetailList = rainDetailListRes[item.bscFctCd]; let rainDayCnt = 0; // 강우일수 let rainEffectDayCnt = 0; // 강우영향일수 @@ -197,10 +216,10 @@ const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, rainEffectDayCnt++; // 강우영향일수 증가 } totalRain += Number(item2.infoRnDay); - item2.rainDt = item2.msrDt; + item2.rainDt = item2.rainDt; tmpData.push({ bscFctCd: item.bscFctCd, - rainDt: item2.msrDt, + rainDt: item2.rainDt.substring(0,10), infoRnDay: item2.infoRnDay, rainEffectDay: item2.rainEffectDay, rainDay: item2.rainDay @@ -211,7 +230,7 @@ const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, item.totalYearRain = totalRain; item.rainDetailList = rainDetailList; } - } + } return { data: res.data, count: res.count, detailData: tmpData}; } diff --git a/apps/fo/app/store/rdi/index.tsx b/apps/fo/app/store/rdi/index.tsx index 6fd287432..92cedd301 100644 --- a/apps/fo/app/store/rdi/index.tsx +++ b/apps/fo/app/store/rdi/index.tsx @@ -184,8 +184,10 @@ const fetchRdiList = async (pageNo: number, pageSize: number, searchYear: string item.rdiiValue = ''; item.infoRnDay = ''; item.properYn = ''; - item.sido = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; - item.sigungo = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; + // item.sido = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; + // item.sigungo = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; + item.sido = item.sido; + item.sigungo = item.gugun; }); return { data: res.data, count: res.count } }catch(error){ @@ -307,8 +309,10 @@ export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunctio const rtnData = res.data.map((item: RdiProps) => { return { ...item, - sido: item.lclgvrnmntNm.split(' ')[0]?.toString() || '', - sigungo: item.lclgvrnmntNm.split(' ')[1]?.toString() || '', + //sido: item.lclgvrnmntNm.split(' ')[0]?.toString() || '', + //sigungo: item.lclgvrnmntNm.split(' ')[1]?.toString() || '', + sido: item.sido, + sigungo : item.gugun, inflAmnt: item.inflAmnt?Number(item.inflAmnt).toFixed(1): '' // 유입유량 (강우량) } }) @@ -427,7 +431,7 @@ export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunctio 환경청: item.rgnNm, 시설명: item.bscFctNm, 시도: item.sido, - 시군구: item.sigungo, + 시군구: item.gugun, 주소: item.daddr, "시설용량(m³/일)": item.fctCpc, "청천시유입하수량(m³/일)": item.chungchunFlow, diff --git a/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx b/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx index c27d418e6..b34a1eeba 100644 --- a/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMng/drgtSttn/page.tsx @@ -68,6 +68,15 @@ export default function DrgtSttn() { sggNm: code.sggCd.find(sgg => sgg.text == item.sggNm)?.text } }) + .sort((a, b) => { + // ctpvCd 기준 1차 정렬 + const ctpvCompare = (a.ctpvCd || '').localeCompare(b.ctpvCd || ''); + if (ctpvCompare !== 0) return ctpvCompare; + + // sggNm 기준 2차 정렬 + return (a.sggNm || '').localeCompare(b.sggNm || ''); + }); + const data = Array.isArray(resData) ? resData.map((item: customDrgt) => { return {