From 03675aaa6062402fbb3772e97cd966c0f7abd890 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Tue, 22 Jul 2025 14:36:09 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=AC=EC=9D=B4=EC=9A=A9=ED=86=B5=EA=B3=84?= =?UTF-8?q?=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=EC=8B=9C=20=EC=8B=9C=EB=8F=84=EB=AA=85=20=EC=97=86=EC=9D=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/stats/rainStat/page.tsx | 76 +++++++++++++------------- apps/wr/app/stats/rswtStat/page.tsx | 84 +++++++++++++++-------------- 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/apps/wr/app/stats/rainStat/page.tsx b/apps/wr/app/stats/rainStat/page.tsx index 591ea5fdf..528f17cd4 100644 --- a/apps/wr/app/stats/rainStat/page.tsx +++ b/apps/wr/app/stats/rainStat/page.tsx @@ -31,7 +31,7 @@ export default function RainStat() { searchRainStatList(searchYear); }, [code.cityCd, code.sggCd, searchRainStatList]) - const excelDetailDownLoad=() =>{ + const excelDetailDownLoad = () => { const sidoList = new Set(); const sidoDataMap = new Map(); // 시도별 데이터를 저장할 Map const sidoDetailMap = new Map(); // 시도별 상세 데이터를 저장할 Map @@ -49,7 +49,7 @@ export default function RainStat() { sidoText = sido?.text || ''; sigunText = sigun?.text || ''; - + // 시도, 시군구 코드를 텍스트로 변환하여 데이터에 할당 if (item.length > 0) { item[0] = sidoText as unknown as RainStatProps; @@ -58,7 +58,7 @@ export default function RainStat() { item[1] = sigunText as unknown as RainStatProps; } if (item.length > 2) { - item[2] = sidoText+' '+sigunText as unknown as RainStatProps; + item[2] = sidoText + ' ' + sigunText as unknown as RainStatProps; } // 시도별 상세 데이터 수집 @@ -89,32 +89,32 @@ export default function RainStat() { const sidoData = sidoDataMap.get(sidoText)!; // 각 컬럼의 값을 합계에 더하기 (1번 인덱스부터 시작) for (let i = 1; i < item.length && i < sidoData.length; i++) { - if(i == 2){ + if (i == 2) { sidoData[i] = '합계'; - } else if(i == 3){ + } else if (i == 3) { // 해당 시도의 데이터 개수를 계산 - const sidoDataCount = rainDetailList.filter((data: unknown[]) => + const sidoDataCount = rainDetailList.filter((data: unknown[]) => Array.isArray(data) && data.length > 0 && String(data[0]) === sidoText ).length; sidoData[i] = sidoDataCount; - } else if( i == 4){ + } else if (i == 4) { sidoData[i] = ''; - } else if(i == 6){ + } else if (i == 6) { // 법정 대상 건축물 개수 (인덱스 6이 'Y'인 경우) - const bumCnt = rainDetailList.filter((data: unknown[]) => + const bumCnt = rainDetailList.filter((data: unknown[]) => Array.isArray(data) && data.length > 6 && String(data[0]) === sidoText ).filter((data: unknown[]) => String(data[6]) === '대상').length; sidoData[i] = bumCnt; - } else if(i==8){ + } else if (i == 8) { const value = Number(item[8]) || 0; sidoData[i] = (Number(sidoData[i]) + value) as string | number; - } else if(i==11){ + } else if (i == 11) { const value = Number(item[11]) || 0; sidoData[i] = (Number(sidoData[i]) + value) as string | number; - } else if(i==12){ + } else if (i == 12) { const value = Number(item[12]) || 0; sidoData[i] = (Number(sidoData[i]) + value) as string | number; - } else if(i==14){ + } else if (i == 14) { const value = Number(item[14]) || 0; sidoData[i] = (Number(sidoData[i]) + value) as string | number; } @@ -127,12 +127,12 @@ export default function RainStat() { // 시도별로 합계와 상세 데이터를 순서대로 배치 const summaryExcelData: (string | number)[][] = []; - + // 시도별로 순회하면서 합계와 상세 데이터를 추가 Array.from(sidoList).forEach((sidoText) => { const sidoSummary = sidoDataMap.get(sidoText); const sidoDetails = sidoDetailMap.get(sidoText) || []; - + if (sidoSummary) { // 시도 합계 데이터 추가 summaryExcelData.push(sidoSummary); @@ -147,14 +147,14 @@ export default function RainStat() { const sidoTotalSummary = [['전체', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '', 0]]; sidoSummaryList.forEach((item: (string | number)[]) => { item.forEach((value: string | number, index: number) => { - if(typeof value === 'number') { + if (typeof value === 'number') { if (sidoTotalSummary[0] && index < sidoTotalSummary[0].length) { sidoTotalSummary[0][index] = Number(sidoTotalSummary[0][index]) + Number(value); } } }); }); - + // sidoSummaryList와 rainDetailList를 합쳐서 엑셀 데이터 생성 const excelData = [...sidoTotalSummary, ...sidoSummaryList, ...summaryExcelData]; @@ -175,28 +175,30 @@ export default function RainStat() { headerRange: "A1:M1" }) } - + useEffect(() => { const transExcel = Array.isArray(excelList) ? excelList : [excelList]; const excelData = tableData(transExcel, { code }); const tbData = Array.isArray(excelData) - ? excelData.map((item: RainStatProps) => { - return { - "시도": item.cityText, - "개소": item.tmp, - "설치비(백만원)": item.instlCst, - "저류조용량(m³/년)": item.dtfcltCpct, - "연간사용량(m³/년)": item.wtrUsqty, - "조경용수": item.lndwtr, - "청소화장실용수": item.cleanToilUswtr, - "세척살수용수": item.resn, - "농업용수": item.farmUswtr, - "공업용수": item.indstUswtr, - "친수용수": item.hydUswtr, - "기타": item.ithlEtcUswtr, - "연간운영비(백만원/년)": item.anlOperCst, - }; - }) + ? excelData + .filter((item: RainStatProps) => item.cityText !== '없음') + .map((item: RainStatProps) => { + return { + "시도": item.cityText, + "개소": item.tmp, + "설치비(백만원)": item.instlCst, + "저류조용량(m³/년)": item.dtfcltCpct, + "연간사용량(m³/년)": item.wtrUsqty, + "조경용수": item.lndwtr, + "청소화장실용수": item.cleanToilUswtr, + "세척살수용수": item.resn, + "농업용수": item.farmUswtr, + "공업용수": item.indstUswtr, + "친수용수": item.hydUswtr, + "기타": item.ithlEtcUswtr, + "연간운영비(백만원/년)": item.anlOperCst, + }; + }) : []; setExData(tbData); }, [code, excelList]) @@ -237,7 +239,7 @@ export default function RainStat() { />
-