From 9cf9081efcee5842b81e238441cf774be61b734b Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 20 Apr 2026 17:20:12 +0900 Subject: [PATCH] =?UTF-8?q?wr:=20=ED=86=B5=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(with-layout)/stats/rswtStat/page.tsx | 16 +-- apps/wr/app/store/stats/rainStat/excel.tsx | 52 ++++++---- apps/wr/app/store/stats/rainStat/index.tsx | 34 +++++-- apps/wr/app/store/stats/rswtStat/excel.tsx | 93 +++++++++--------- apps/wr/app/store/stats/rswtStat/headList.tsx | 14 +-- apps/wr/app/store/stats/rswtStat/index.tsx | 46 +++++++-- apps/wr/public/sample_rswtStats.xlsx | Bin 10883 -> 10844 bytes apps/wr/public/sample_rswtStats_물사용량.xlsx | Bin 0 -> 10885 bytes 8 files changed, 156 insertions(+), 99 deletions(-) create mode 100644 apps/wr/public/sample_rswtStats_물사용량.xlsx diff --git a/apps/wr/app/(with-layout)/stats/rswtStat/page.tsx b/apps/wr/app/(with-layout)/stats/rswtStat/page.tsx index 3e3e26dcf..b8c7d735c 100644 --- a/apps/wr/app/(with-layout)/stats/rswtStat/page.tsx +++ b/apps/wr/app/(with-layout)/stats/rswtStat/page.tsx @@ -41,7 +41,7 @@ export default function RswtStat() { "개소": item.ctpvCnt, // "건축연면적(m³)": item.archArea, "처리용량(m³)": item.filtrTrtmfctCpct, - "물사용량(m³/년)": item.wtrUsqty, + // "물사용량(m³/년)": item.wtrUsqty, "중수도+대체수이용량(m³/년)": item.rswtAltSum, "중수도이용량(m³/년)": item.rswtrUsqty, "대체수이용량(m³/년)": item.altUswtrUtztnQnt, @@ -59,8 +59,8 @@ export default function RswtStat() { data: (data as unknown as JSON[]) ?? [], fileName: "중수도재이용통계", sheetNameArray: ["Sheet1"], - headerRange: "A1:N1", - decimalArray0: [1,2,3,4,5,6,7,8,9,10,11,12,13], // 0부터 시작 + headerRange: "A1:M1", + decimalArray0: [1,2,3,4,5,6,7,8,9,10,11,12], // 0부터 시작 }) } else { alert(t("excelDownErrMsg")) @@ -174,15 +174,9 @@ export default function RswtStat() { } else if (i == 12) { const value = Number(item[12]) || 0; sidoData[i] = (Number(sidoData[i]) + value) as string | number; - } else if (i == 13) { - const value = Number(item[13]) || 0; - sidoData[i] = (Number(sidoData[i]) + value) as string | number; } else if (i == 14) { const value = Number(item[14]) || 0; sidoData[i] = (Number(sidoData[i]) + value) as string | number; - } else if (i == 16) { - const value = Number(item[16]) || 0; - sidoData[i] = (Number(sidoData[i]) + value) as string | number; } else { sidoData[i] = ''; } @@ -209,7 +203,7 @@ export default function RswtStat() { }); const sidoSummaryList = Array.from(sidoDataMap.values()); - const sidoTotalSummary = [['전국', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '']]; + const sidoTotalSummary = [['전국', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, '', 0]]; sidoSummaryList.forEach((item: (string | number)[]) => { item.forEach((value: string | number, index: number) => { if (typeof value === 'number') { @@ -226,7 +220,7 @@ export default function RswtStat() { const sheetArray: SheetParameter[] = [{ data: excelData, headerNum: 3, - headerRange: "A1:P3", + headerRange: "A1:O3", sheetName: 'sheet1', startCol: 'A', decimalArray0: [1,2,3,4,5,6,7,8,9,10,11,12], // 0부터 시작 diff --git a/apps/wr/app/store/stats/rainStat/excel.tsx b/apps/wr/app/store/stats/rainStat/excel.tsx index db2099d9a..2405872bb 100644 --- a/apps/wr/app/store/stats/rainStat/excel.tsx +++ b/apps/wr/app/store/stats/rainStat/excel.tsx @@ -1,41 +1,51 @@ -import type { RainStatProps } from "."; +import { codeToText } from "@/components/lib/func/common"; +import type { RainStatProps } from "."; -export const excelRainStat = (excelList:RainStatProps[]) : (string | number)[][] => { +const toUseTypeText = (val: string) => + val + .split(",") + .map((code) => code.trim()) + .filter(Boolean) + .map((code) => codeToText(code, "dmdUszCd") ?? code) + .join(", "); + +export const excelRainStat = ( + excelList: RainStatProps[] +): (string | number)[][] => { const excelData: (string | number)[][] = []; - excelList.forEach((item) => { + excelList.forEach((item) => { excelData.push([ //시도 item.ctpvCd ?? "", //시군구 item.sggCd ?? "", - //행정구역명 - String(item.areaNm) ?? "", + //행정구역명 + String(item.areaNm) ?? "", //시설명 String(item.bdstNm) ?? "", //건축물용도코드 (값 없음) - //String(item.bdstUsgCd) ?? "", - "", + codeToText(String(item.bdstUsgCd ?? ""), "bdstUsgCd") ?? String(item.bdstUsgCd ?? ""), //주소 String(item.daddr) ?? "", //법적의무대상여부 - String(item.lawTrgtYn)==="Y" ? "대상" : "미대상", + String(item.lawTrgtYn) === "Y" ? "대상" : "미대상", //설치완료일자 String(item.instlCmptnDt).substring(0, 10) ?? "", //설치비용 item.instlCst ?? "", - //접수면종류 - String(item.pntfColKnd) ?? "", + //집수면종류 + codeToText(String(item.pntfColKnd ?? ""), "rainFcltCd") ?? String(item.pntfColKnd ?? ""), //여과등처리시설유무 String(item.filtrTrtmfctYn) ?? "", - //처리용량(저류조용량) - item.dtfcltCpct ?? "", - //연간사용량 - item.wtrUsqty ?? "", - //이용용도코드 - item.utztnUsgCd ?? "", - //연간운영비 - item.anlOperCst ?? "", - ]); - }); + //처리용량(저류조용량) + item.dtfcltCpct ?? "", + //연간사용량 + item.wtrUsqty ?? "", + //이용용도코드 + toUseTypeText(item.utztnUsgCd ?? ""), + //연간운영비 + item.anlOperCst ?? "", + ]); + }); return excelData; -} \ No newline at end of file +}; diff --git a/apps/wr/app/store/stats/rainStat/index.tsx b/apps/wr/app/store/stats/rainStat/index.tsx index d08db404d..084d6e938 100644 --- a/apps/wr/app/store/stats/rainStat/index.tsx +++ b/apps/wr/app/store/stats/rainStat/index.tsx @@ -89,6 +89,7 @@ export const rainStatActionsExport = ( searchRainStatList: async (year: string, city: SelectDataType[]) => { const res = await fetchRainStatList(year); const cityArr: any[] = []; + excelDownList.length = 0; res.filter((resFilter: RainStatProps) => city.some((cityCd) => @@ -104,7 +105,6 @@ export const rainStatActionsExport = ( if (obj) { obj.instlCst += item.instlCst; obj.dtfcltCpct += item.dtfcltCpct; - obj.wtrUsqty += item.wtrUsqty; obj.anlOperCst += item.anlOperCst; obj.tmp += 1; } else { @@ -113,7 +113,7 @@ export const rainStatActionsExport = ( obj.instlCst = item.instlCst; obj.tmp = 1; obj.dtfcltCpct = item.dtfcltCpct; - obj.wtrUsqty = item.wtrUsqty; + obj.wtrUsqty = 0; obj.anlOperCst = item.anlOperCst; obj.lndwtr = 0; //조경용수 obj.cleanToilUswtr = 0; //청소화장실용수 @@ -138,6 +138,15 @@ export const rainStatActionsExport = ( }); }); } + + obj.wtrUsqty = + obj.lndwtr + + obj.cleanToilUswtr + + obj.resn + + obj.farmUswtr + + obj.indstUswtr + + obj.hydUswtr + + obj.ithlEtcUswtr; }); const totalObj = { @@ -145,7 +154,7 @@ export const rainStatActionsExport = ( tmp: 0, instlCst: 0, //설치비 dtfcltCpct: 0, //저류조용량 - bdstUsgCd: 0, //연간사용량 + wtrUsqty: 0, //연간사용량 lndwtr: 0, //조경용수 cleanToilUswtr: 0, //청소화장실용수 resn: 0, //세척살수용수 @@ -165,8 +174,8 @@ export const rainStatActionsExport = ( totalObj.dtfcltCpct += !isNaN(Number(item.dtfcltCpct)) ? Number(item.dtfcltCpct) : 0; - totalObj.bdstUsgCd += !isNaN(Number(item.bdstUsgCd)) - ? Number(item.bdstUsgCd) + totalObj.wtrUsqty += !isNaN(Number(item.wtrUsqty)) + ? Number(item.wtrUsqty) : 0; totalObj.lndwtr += !isNaN(Number(item.lndwtr)) ? Number(item.lndwtr) @@ -196,7 +205,7 @@ export const rainStatActionsExport = ( tmp: item.tmp, instlCst: item.instlCst, //설치비 dtfcltCpct: item.dtfcltCpct, //저류조용량 - bdstUsgCd: item.bdstUsgCd, //연간사용량 + wtrUsqty: item.wtrUsqty, //연간사용량 lndwtr: item.lndwtr, //조경용수 cleanToilUswtr: item.cleanToilUswtr, //청소화장실용수 resn: item.resn, //세척살수용수 @@ -208,17 +217,30 @@ export const rainStatActionsExport = ( }); }); + cityArr.forEach((item) => { + item.instlCst = Math.round(Number(item.instlCst) / 1000000); + item.anlOperCst = Math.round(Number(item.anlOperCst) / 1000000); + }); + + totalObj.instlCst = Math.round(Number(totalObj.instlCst) / 1000000); + totalObj.anlOperCst = Math.round(Number(totalObj.anlOperCst) / 1000000); + //상세 const rainDetailList: RainStatProps[] = []; res.forEach((item: RainStatProps) => { const utztnUsgArray = new Array(); + let wtrUsqty = 0; item.guideStats.forEach((guideStat) => { utztnUsgArray.push(guideStat.utztnUsgCd); + wtrUsqty += Number(guideStat.ruseFcltUtztnQnt) || 0; }); rainDetailList.push({ ...item, + instlCst: Math.round(Number(item.instlCst) / 1000000), + wtrUsqty, utztnUsgCd: utztnUsgArray.join(", "), + anlOperCst: Math.round(Number(item.anlOperCst) / 1000000), }); }); diff --git a/apps/wr/app/store/stats/rswtStat/excel.tsx b/apps/wr/app/store/stats/rswtStat/excel.tsx index 4bd698ad0..eb9eba6da 100644 --- a/apps/wr/app/store/stats/rswtStat/excel.tsx +++ b/apps/wr/app/store/stats/rswtStat/excel.tsx @@ -1,50 +1,53 @@ -import type { SelectDataType } from "@common/business_components/ui"; +import { codeToText } from "@/components/lib/func/common"; import type { RswtStatProps } from "."; -export const excelRswtStat = (excelList: RswtStatProps[], rswtBdstType : SelectDataType[] ) : (string | number)[][] => { +const toUseTypeText = (val: string) => + val + .split(",") + .map((code) => code.trim()) + .filter(Boolean) + .map((code) => codeToText(code, "dmdUszCd") ?? code) + .join(", "); - - console.log('bdstUsgCd ', rswtBdstType) +export const excelRswtStat = ( + excelList: RswtStatProps[] +): (string | number)[][] => { const excelData: (string | number)[][] = []; - excelList.forEach((item) => { - excelData.push([ - //시도 - String(item.ctpvCd) ?? "", - //시군구 - String(item.sggCd) ?? "", - //행정구역명 - String(item.areaNm) ?? "", - //건축물명 - String(item.bdstNm) ?? "", - //건축물용도코드(빈칸) - //String(item.bdstUsgCd) ?? "", - rswtBdstType?.find((cd)=> cd.val === item.bdstUsgCd.toString())?.text ?? "", //건축물용도 - //주소 - String(item.daddr) ?? "", - //법적의무대상여부 - String(item.lawTrgtYn)==="Y" ? "대상" : "미대상", - //설치완료일자 - item.instlCmptnDt ? String(item.instlCmptnDt).substring(0, 10) : "", - //가동개시일(빈칸) - //String(item.instlCst) ?? "", - "", - //건축물면적 - // item.archArea ?? "", - //처리용량 - item.filtrTrtmfctCpct ?? "", - //물사용량 - item.wtrUsqty ?? "", - //중수도+대체수이용량 - item.rswtAltSum ?? "", - //중수도이용량 - item.rswtrUsqty ?? "", - //대체수이용량 - item.altUswtrUtztnQnt ?? "", - //중수도용도 - String(item.utztnUsgCd) ?? "", - //연간운영비 - item.anlOperCst ?? "", - ]); - }); + excelList.forEach((item) => { + excelData.push([ + //시도 + String(item.ctpvCd) ?? "", + //시군구 + String(item.sggCd) ?? "", + //행정구역명 + String(item.areaNm) ?? "", + //건축물명 + String(item.bdstNm) ?? "", + //건축물용도코드 + codeToText(String(item.bdstUsgCd ?? ""), "rswtBdstType") ?? String(item.bdstUsgCd ?? ""), + //주소 + String(item.daddr) ?? "", + //법적의무대상여부 + String(item.lawTrgtYn) === "Y" ? "대상" : "미대상", + //설치완료일자 + item.instlCmptnDt ? String(item.instlCmptnDt).substring(0, 10) : "", + //가동개시일(빈칸) + "", + //처리용량 + item.filtrTrtmfctCpct ?? "", + //물사용량 + // item.wtrUsqty ?? "", + //중수도+대체수이용량 + item.rswtAltSum ?? "", + //중수도이용량 + item.rswtrUsqty ?? "", + //대체수이용량 + item.altUswtrUtztnQnt ?? "", + //중수도용도 + toUseTypeText(String(item.utztnUsgCd ?? "")), + //연간운영비 + item.anlOperCst ?? "", + ]); + }); return excelData; -} \ No newline at end of file +}; diff --git a/apps/wr/app/store/stats/rswtStat/headList.tsx b/apps/wr/app/store/stats/rswtStat/headList.tsx index 47aeca57b..609a155cd 100644 --- a/apps/wr/app/store/stats/rswtStat/headList.tsx +++ b/apps/wr/app/store/stats/rswtStat/headList.tsx @@ -30,12 +30,12 @@ export const rswtStatHeadListExport :TableUpperProps[]=[ row:0, rowSpan:2 }, - { - id: "wtrUsqty", - title: "물사용량(m³/년)", - row:0, - rowSpan:2 - }, + // { + // id: "wtrUsqty", + // title: "물사용량(m³/년)", + // row:0, + // rowSpan:2 + // }, { id: "rswtAltSum", title: "중수도+대체수이용량(m³/년)", @@ -105,4 +105,4 @@ export const rswtStatHeadListExport :TableUpperProps[]=[ }, -] \ No newline at end of file +] diff --git a/apps/wr/app/store/stats/rswtStat/index.tsx b/apps/wr/app/store/stats/rswtStat/index.tsx index fa183f1a2..ac4387aa9 100644 --- a/apps/wr/app/store/stats/rswtStat/index.tsx +++ b/apps/wr/app/store/stats/rswtStat/index.tsx @@ -35,6 +35,7 @@ export type RswtStatProps = { export type GuideStatProps = { utztnUsgCd: string + splyUswtrUtztnQnt: number ruseFcltUtztnQnt: number } @@ -80,7 +81,15 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( return city.some(el => el.val === code); }); const cityArr: any[] = []; + excelDownList.length = 0; data.forEach((item: RswtStatProps) => { + const itemAltUswtrUtztnQnt = + item.guideStats && item.guideStats.length > 0 + ? item.guideStats.reduce( + (sum, guide) => sum + (Number(guide.splyUswtrUtztnQnt) || 0), + 0 + ) + : Number(item.altUswtrUtztnQnt) || 0; let obj = cityArr.find((e) => { return e.ctpvCd == item.ctpvCd }) @@ -90,9 +99,7 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( // 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.altUswtrUtztnQnt += itemAltUswtrUtztnQnt //대체수이용량 obj.anlOperCst += item.anlOperCst //연간운영비용 } else { obj = { @@ -100,9 +107,9 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( ctpvCnt: 1, filtrTrtmfctCpct: item.filtrTrtmfctCpct, wtrUsqty: item.wtrUsqty, - rswtAltSum: item.rswtrUsqty + item.altUswtrUtztnQnt, - rswtrUsqty: item.rswtrUsqty, - altUswtrUtztnQnt: item.altUswtrUtztnQnt, + rswtAltSum: 0, + rswtrUsqty: 0, + altUswtrUtztnQnt: itemAltUswtrUtztnQnt, anlOperCst: item.anlOperCst, lndwtr: 0, cleanToilUswtr: 0, @@ -127,6 +134,15 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( }); }) } + + obj.rswtrUsqty = + obj.lndwtr + + obj.cleanToilUswtr + + obj.farmUswtr + + obj.indstUswtr + + obj.hydUswtr + + obj.ithlEtcUswtr; + obj.rswtAltSum = obj.rswtrUsqty + obj.altUswtrUtztnQnt; }); const total: any = { @@ -163,6 +179,11 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( total.ithlEtcUswtr += item.ithlEtcUswtr; }); + cityArr.forEach(item => { + item.anlOperCst = Math.round(Number(item.anlOperCst) / 1000000); + }); + total.anlOperCst = Math.round(Number(total.anlOperCst) / 1000000); + cityArr.unshift(total); cityArr.forEach(item => { @@ -189,16 +210,23 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( const rswtDetailList: RswtStatProps[] = []; res.forEach((item: RswtStatProps) => { const utztnUsgArray = new Array(); + let rswtrUsqty = 0; + let altUswtrUtztnQnt = 0; item.guideStats.forEach((guideStat) => { utztnUsgArray.push(guideStat.utztnUsgCd); + rswtrUsqty += Number(guideStat.ruseFcltUtztnQnt) || 0; + altUswtrUtztnQnt += Number(guideStat.splyUswtrUtztnQnt) || 0; }) rswtDetailList.push({ ...item, - rswtAltSum: item.rswtrUsqty + item.altUswtrUtztnQnt, + rswtAltSum: rswtrUsqty + altUswtrUtztnQnt, + rswtrUsqty, + altUswtrUtztnQnt, utztnUsgCd: utztnUsgArray.join(', '), + anlOperCst: Math.round(Number(item.anlOperCst) / 1000000), }) }); - const excelDetailData = excelRswtStat(rswtDetailList,rswtBdstType); + const excelDetailData = excelRswtStat(rswtDetailList); set((state: rswtStatState) => ({ rswtStat: { ...state.rswtStat, @@ -209,4 +237,4 @@ export const rswtStatActionsExport: (set: any) => rswtStatActions = ( })); } } -} \ No newline at end of file +} diff --git a/apps/wr/public/sample_rswtStats.xlsx b/apps/wr/public/sample_rswtStats.xlsx index 82dad8d2b6f50c8edfe7044d927c3b18e1e5374f..c3885eca45b9f2ebccfe1aeaa9c1ee79af3e663b 100644 GIT binary patch delta 4275 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 weEM@ig?TsWhSPJ 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 diff --git a/apps/wr/public/sample_rswtStats_물사용량.xlsx b/apps/wr/public/sample_rswtStats_물사용량.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..68cae66eeaf71f4766b0f630123a39c0c6012b6e GIT binary patch literal 10885 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 PuOHvnnZYUbZ~y)uCbB5F literal 0 HcmV?d00001