From 383e5f83822787fb9ee09c7beed72565c9d1c477 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Tue, 22 Jul 2025 20:38:42 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=A4=91=EC=88=98=EB=8F=84=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=ED=85=8C=EC=9D=B4=EB=B8=94,=20=EC=97=91=EC=85=80?= =?UTF-8?q?=20=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 | 97 +++++++++--------- apps/wr/app/store/stats/rswtStat/excel.tsx | 3 +- apps/wr/app/store/stats/rswtStat/index.tsx | 114 +++++++++++++++------ apps/wr/public/sample_rswtStats.xlsx | Bin 10897 -> 10776 bytes 5 files changed, 169 insertions(+), 121 deletions(-) diff --git a/apps/wr/app/stats/rainStat/page.tsx b/apps/wr/app/stats/rainStat/page.tsx index 528f17cd4..591ea5fdf 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,30 +175,28 @@ 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 - .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, - }; - }) + ? 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, + }; + }) : []; setExData(tbData); }, [code, excelList]) @@ -239,7 +237,7 @@ export default function RainStat() { />
-
+ ); diff --git a/apps/wr/app/store/stats/rswtStat/excel.tsx b/apps/wr/app/store/stats/rswtStat/excel.tsx index 7c6e2b4cc..00935b8fb 100644 --- a/apps/wr/app/store/stats/rswtStat/excel.tsx +++ b/apps/wr/app/store/stats/rswtStat/excel.tsx @@ -1,4 +1,5 @@ import type { RswtStatProps } from "."; +import { bdstUsgCd } from "../../common/code/basicCode"; export const excelRswtStat = (excelList:RswtStatProps[]) : (string | number)[][] => { const excelData: (string | number)[][] = []; @@ -14,7 +15,7 @@ export const excelRswtStat = (excelList:RswtStatProps[]) : (string | number)[][] String(item.bdstNm) ?? "", //건축물용도코드(빈칸) //String(item.bdstUsgCd) ?? "", - "", + bdstUsgCd.find((cd)=> cd.val === item.bdstUsgCd.toString())?.text ?? "", //건축물용도 //주소 String(item.daddr) ?? "", //법적의무대상여부 diff --git a/apps/wr/app/store/stats/rswtStat/index.tsx b/apps/wr/app/store/stats/rswtStat/index.tsx index af106c3b3..ca81cff2a 100644 --- a/apps/wr/app/store/stats/rswtStat/index.tsx +++ b/apps/wr/app/store/stats/rswtStat/index.tsx @@ -6,7 +6,7 @@ import { excelRswtStat } from "./excel"; export type RswtStatProps = { cityText: string //시도명 ctpvCd: string //시도 - sggCd : string //시군구 + sggCd: string //시군구 areaNm: string //행정구역명 bdstNm: string //시설명 daddr: string //주소 @@ -26,9 +26,10 @@ export type RswtStatProps = { ithlEtcUswtr: number //기타 anlOperCst: number //연간운영비 guideStats: GuideStatProps[] - utztnUsgCd : string //이용코드 - lawTrgtYn : string //법적의무대상여부 - instlCmptnDt : string //설치완료일자 + utztnUsgCd: string //이용코드 + lawTrgtYn: string //법적의무대상여부 + instlCmptnDt: string //설치완료일자 + bdstUsgCd: number } export type GuideStatProps = { @@ -37,7 +38,7 @@ export type GuideStatProps = { } type rswtStatActions = { - searchRswtStatList: (year: string) => void; + searchRswtStatList: (year: string, city: { val: string; text: string }[]) => void; } export type ExcelType = { @@ -71,36 +72,47 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( set: any ) => { return { - searchRswtStatList: async (year: string) => { + searchRswtStatList: async (year: string, city: { val: string; text: string }[]) => { const res = await getFetch(fetchType.WR, `/reuseChk/reuseWater/stat/${year}`) - + console.log("city", city) + console.log("res", res) + const data = res.filter(item => { + const code = item.ctpvCd.trim(); + return city.some(el => el.val === code); + }); + console.log("data", data) const cityArr: any[] = []; - res.forEach((item: RswtStatProps) => { + data.forEach((item: RswtStatProps) => { let obj = cityArr.find((e) => { return e.ctpvCd == item.ctpvCd }) if (obj) { - obj.ctpvCnt += 1 - obj.archArea += item.archArea - obj.filtrTrtmfctCpct += item.filtrTrtmfctCpct - obj.wtrUsqty += item.wtrUsqty - obj.rswtAltSum += (item.rswtrUsqty + item.altUswtrUtztnQnt) - obj.rswtrUsqty += item.rswtrUsqty - obj.altUswtrUtztnQnt += item.altUswtrUtztnQnt - obj.anlOperCst += item.anlOperCst + obj.ctpvCnt += 1 //개소 + // obj.archArea += item.archArea 건축면적 삭제 + obj.filtrTrtmfctCpct += item.filtrTrtmfctCpct //처리용량 + obj.wtrUsqty += item.wtrUsqty //물사용량 + obj.rswtAltSum += (item.rswtrUsqty + item.altUswtrUtztnQnt) //중수도+대체수 + obj.rswtrUsqty += item.rswtrUsqty //중수도사용량 + obj.altUswtrUtztnQnt += item.altUswtrUtztnQnt //대체수이용량 + obj.anlOperCst += item.anlOperCst //연간운영비용 } else { - obj = {}; - obj.ctpvCd = item.ctpvCd - obj.ctpvCnt = 1 - obj.archArea = item.archArea - obj.filtrTrtmfctCpct = item.filtrTrtmfctCpct - obj.wtrUsqty = item.wtrUsqty - obj.rswtAltSum = item.rswtrUsqty + item.altUswtrUtztnQnt - obj.rswtrUsqty = item.rswtrUsqty - obj.altUswtrUtztnQnt = item.altUswtrUtztnQnt - obj.anlOperCst = item.anlOperCst - + obj = { + ctpvCd: item.ctpvCd, + ctpvCnt: 1, + filtrTrtmfctCpct: item.filtrTrtmfctCpct, + wtrUsqty: item.wtrUsqty, + rswtAltSum: item.rswtrUsqty + item.altUswtrUtztnQnt, + rswtrUsqty: item.rswtrUsqty, + altUswtrUtztnQnt: item.altUswtrUtztnQnt, + anlOperCst: item.anlOperCst, + lndwtr: 0, + cleanToilUswtr: 0, + farmUswtr: 0, + indstUswtr: 0, + hydUswtr: 0, + ithlEtcUswtr: 0, + } cityArr.push(obj) } @@ -120,11 +132,47 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( } }); + const total: any = { + ctpvCd: "0", + ctpvCnt: 0, + filtrTrtmfctCpct: 0, + wtrUsqty: 0, + rswtAltSum: 0, + rswtrUsqty: 0, + altUswtrUtztnQnt: 0, + anlOperCst: 0, + lndwtr: 0, + cleanToilUswtr: 0, + farmUswtr: 0, + indstUswtr: 0, + hydUswtr: 0, + ithlEtcUswtr: 0, + }; + + cityArr.forEach(item => { + total.ctpvCnt += item.ctpvCnt; + total.archArea += item.archArea; + total.filtrTrtmfctCpct += item.filtrTrtmfctCpct; + total.wtrUsqty += item.wtrUsqty; + total.rswtAltSum += item.rswtAltSum; + total.rswtrUsqty += item.rswtrUsqty; + total.altUswtrUtztnQnt += item.altUswtrUtztnQnt; + total.anlOperCst += item.anlOperCst; + total.lndwtr += item.lndwtr; + total.cleanToilUswtr += item.cleanToilUswtr; + total.farmUswtr += item.farmUswtr; + total.indstUswtr += item.indstUswtr; + total.hydUswtr += item.hydUswtr; + total.ithlEtcUswtr += item.ithlEtcUswtr; + }); + + cityArr.unshift(total); + cityArr.forEach(item => { excelDownList.push({ ctpvCd: item.ctpvCd, ctpvCnt: item.ctpvCnt, - archArea: item.archArea, + // archArea: item.archArea, filtrTrtmfctCpct: item.filtrTrtmfctCpct, wtrUsqty: item.wtrUsqty, rswtAltSum: item.rswtAltSum, @@ -139,21 +187,21 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( anlOperCst: item.anlOperCst, }) }) + console.log("엑셀다운리스트", excelDownList) //상세 - const rswtDetailList : RswtStatProps[] = []; - res.forEach((item:RswtStatProps) => { + const rswtDetailList: RswtStatProps[] = []; + res.forEach((item: RswtStatProps) => { const utztnUsgArray = new Array(); item.guideStats.forEach((guideStat) => { utztnUsgArray.push(guideStat.utztnUsgCd); }) rswtDetailList.push({ ...item, - rswtAltSum : item.rswtrUsqty + item.altUswtrUtztnQnt, - utztnUsgCd : utztnUsgArray.join(', '), + rswtAltSum: item.rswtrUsqty + item.altUswtrUtztnQnt, + utztnUsgCd: utztnUsgArray.join(', '), }) }); - const excelDetailData = excelRswtStat(rswtDetailList); set((state: rswtStatState) => ({ rswtStat: { diff --git a/apps/wr/public/sample_rswtStats.xlsx b/apps/wr/public/sample_rswtStats.xlsx index 702c4cec0da4eefb5c10e37547be86a7579c4cc9..bee059e26d1da9056a6d1b1994b21cc9c903346c 100644 GIT binary patch delta 5199 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 F{tH)b-oyX^ From 99229a8453aada65465e578d71fae56783c73b59 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Tue, 22 Jul 2025 20:41:37 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=EC=B0=BD=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/store/stats/rswtStat/index.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/wr/app/store/stats/rswtStat/index.tsx b/apps/wr/app/store/stats/rswtStat/index.tsx index ca81cff2a..89c4089c0 100644 --- a/apps/wr/app/store/stats/rswtStat/index.tsx +++ b/apps/wr/app/store/stats/rswtStat/index.tsx @@ -74,13 +74,10 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( return { searchRswtStatList: async (year: string, city: { val: string; text: string }[]) => { const res = await getFetch(fetchType.WR, `/reuseChk/reuseWater/stat/${year}`) - console.log("city", city) - console.log("res", res) const data = res.filter(item => { const code = item.ctpvCd.trim(); return city.some(el => el.val === code); }); - console.log("data", data) const cityArr: any[] = []; data.forEach((item: RswtStatProps) => { let obj = cityArr.find((e) => { @@ -187,7 +184,6 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( anlOperCst: item.anlOperCst, }) }) - console.log("엑셀다운리스트", excelDownList) //상세 const rswtDetailList: RswtStatProps[] = []; From 0a109111cbf2cae77a348bddb2116a56950852e8 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Tue, 22 Jul 2025 20:55:14 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EC=A4=91=EC=88=98=EB=8F=84=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=EC=83=81=EC=84=B8=20=EC=97=91=EC=85=80=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=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/rswtStat/page.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/wr/app/stats/rswtStat/page.tsx b/apps/wr/app/stats/rswtStat/page.tsx index e693cafec..99a8bc4f3 100644 --- a/apps/wr/app/stats/rswtStat/page.tsx +++ b/apps/wr/app/stats/rswtStat/page.tsx @@ -72,7 +72,7 @@ export default function RswtStat() { return { ...item, ctpvCd: item.cityText === '전체' ? '전국' : item.cityText, - cityText: item.cityText === '전체' ? '전국' : item.cityText + cityText: item.cityText === '전체' ? '전국' : item.cityText }; }) : []; @@ -80,12 +80,15 @@ export default function RswtStat() { }, [code, rswtStatList]); const excelDetailDownLoad = () => { + const sidoList = new Set(); const sidoDataMap = new Map(); // 시도별 데이터를 저장할 Map const sidoDetailMap = new Map(); // 시도별 상세 데이터를 저장할 Map // 먼저 시도별 상세 데이터를 그룹화 - rswtDetailList.forEach((item: RswtStatProps[]) => { + const transformedRswtDetailList = rswtDetailList.map((originItem: RswtStatProps[]) => { + // rswtDetailList.forEach((item: RswtStatProps[]) => { + const item = [...originItem]; // 원본 복사 const sidoVal = item.at(0)?.toString().trim(); const sigunVal = item.at(1)?.toString().trim(); let sidoText = ''; @@ -127,10 +130,11 @@ export default function RswtStat() { } sidoDataMap.set(sidoText, initialData); } + return item; }); // 시도별 합계 계산 - rswtDetailList.forEach((item: RswtStatProps[]) => { + transformedRswtDetailList.forEach((item: RswtStatProps[]) => { const sidoText = item[0]?.toString(); if (sidoText && sidoDataMap.has(sidoText)) { const sidoData = sidoDataMap.get(sidoText)!;