From f00128b5b8d6e2a3eb470a103b6844bc07dd2c9a Mon Sep 17 00:00:00 2001 From: YangJinSoo94 Date: Thu, 19 Jun 2025 09:37:11 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=97=EB=AC=BC=EC=8B=9C=EC=84=A4=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=EC=97=91=EC=85=80=EB=8B=A4=EC=9A=B4=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EC=96=91=EC=8B=9D=20=EB=B0=8F=20=EB=8B=A4=EC=9A=B4?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/stats/rainStat/page.tsx | 23 ++++++++++++++++--- apps/wr/app/store/stats/rainStat/excel.tsx | 20 +++++++---------- apps/wr/app/store/stats/rainStat/index.tsx | 25 +++++++++++++++++++-- apps/wr/public/sample_rainStats.xlsx | Bin 0 -> 10809 bytes 4 files changed, 51 insertions(+), 17 deletions(-) create mode 100644 apps/wr/public/sample_rainStats.xlsx diff --git a/apps/wr/app/stats/rainStat/page.tsx b/apps/wr/app/stats/rainStat/page.tsx index 7b822875a..ab855be1c 100644 --- a/apps/wr/app/stats/rainStat/page.tsx +++ b/apps/wr/app/stats/rainStat/page.tsx @@ -1,7 +1,7 @@ "use client"; import { useWrStore } from "@/app/store"; -import { yearOptions } from "@/components/lib/func/commom"; +import { excelDownload, yearOptions } from "@/components/lib/func/commom"; import { ContentsDiv, SearchDiv, @@ -14,7 +14,9 @@ import { Button } from "@common/components/ui"; import { useEffect, useState } from "react"; export default function RainStat() { + const { code } = useWrStore((state) => state) const { rainStat, searchRainStatList } = useWrStore((state) => state) + const { rainDetailList } = rainStat; const [ pageNation, setPageNation] = useState(1); const [searchYear, setSearchYear] = useState( String(new Date().getFullYear()) @@ -22,7 +24,22 @@ export default function RainStat() { useEffect(() => { searchRainStatList(searchYear); - }, [searchRainStatList, searchYear]) + }, [code.cityCd, code.sggCd, searchRainStatList, searchYear]) + + const excelDownLoad=() =>{ + rainDetailList.forEach((item) => { + item.forEach((item2) => { + console.log(item2); + }) + }) + excelDownload( + rainDetailList, + "빗물이용시설 통계", + "sample_rainStats.xlsx", + "A1:V3", + 4 + ); + } return ( <> @@ -51,7 +68,7 @@ export default function RainStat() { - diff --git a/apps/wr/app/store/stats/rainStat/excel.tsx b/apps/wr/app/store/stats/rainStat/excel.tsx index f79de9abd..d4bb0b07c 100644 --- a/apps/wr/app/store/stats/rainStat/excel.tsx +++ b/apps/wr/app/store/stats/rainStat/excel.tsx @@ -1,6 +1,6 @@ import type { RainStatProps } from "."; -export const excelRainStat = (excelList:RainStatProps[]) => { +export const excelRainStat = (excelList:RainStatProps[]) : string[][] => { const excelData: string[][] = []; excelList.forEach((item) => { excelData.push([ @@ -8,21 +8,17 @@ export const excelRainStat = (excelList:RainStatProps[]) => { String(item.sggCd) ?? "", String(item.areaNm) ?? "", String(item.bdstNm) ?? "", + String(item.bdstUsgCd) ?? "", + String(item.daddr) ?? "", + String(item.lawTrgtYn) ?? "", + String(item.instlCmptnDt) ?? "", String(item.instlCst) ?? "", - String(item.archArea) ?? "", + String(item.pntfColKnd) ?? "", + String(item.filtrTrtmfctYn) ?? "", String(item.dtfcltCpct) ?? "", String(item.wtrUsqty) ?? "", + String(item.utztnUsgCd) ?? "", String(item.anlOperCst) ?? "", - String(item.annRnwtQty) ?? "", - String(item.jungsudo) ?? "", - String(item.dachae) ?? "", - String(item.way1) ?? "", - String(item.way2) ?? "", - String(item.way3) ?? "", - String(item.way4) ?? "", - String(item.way5) ?? "", - String(item.way6) ?? "", - String(item.way7) ?? "", ]); }); return excelData; diff --git a/apps/wr/app/store/stats/rainStat/index.tsx b/apps/wr/app/store/stats/rainStat/index.tsx index 4a9e3c86b..801162093 100644 --- a/apps/wr/app/store/stats/rainStat/index.tsx +++ b/apps/wr/app/store/stats/rainStat/index.tsx @@ -1,6 +1,7 @@ import { fetchType, getFetch } from "@/components/lib/api"; import type { TableUpperProps } from "../../common/type/header"; import { rainStatHeadListExport } from "./headList"; +import { excelRainStat } from "./excel"; export type RainStatProps = { ctpvCd : string //시도 @@ -22,6 +23,11 @@ export type RainStatProps = { annRnwtQty : number //물사용량 jungsudo : number //중수도​이용량 dachae : number //대체수​이용량 + guideStats : [{ + utztnUsgCd : string, + splyUswtrUtztnQnt : number, + ruseFcltUtztnQnt : number, + }] way1 : number //방법1 way2 : number //방법2 way3 : number //방법3 @@ -43,7 +49,8 @@ type rainStatActions = { export type rainStatState = { rainStat: { rainStatHeadList:TableUpperProps[], - rainStatList : RainStatProps[] + rainStatList : RainStatProps[], + rainDetailList : [][] } } @@ -52,7 +59,8 @@ export type rainStatType = rainStatState & rainStatActions; export const rainStatExport: rainStatState = { rainStat: { rainStatHeadList:rainStatHeadListExport, - rainStatList : [] + rainStatList : [], + rainDetailList : [] } } export const rainStatActionsExport = ( @@ -62,6 +70,18 @@ export const rainStatActionsExport = ( searchRainStatList : async (year:string) => { const res = await fetchRainStatList(year); const rainStatList: never[] = []; + const rainDetailList : RainStatProps[] = []; + res.forEach((item:RainStatProps) => { + const utztnUsgArray = new Array(); + item.guideStats.forEach((guideStat) => { + utztnUsgArray.push(guideStat.utztnUsgCd); + }) + rainDetailList.push({ + ...item, + utztnUsgCd : utztnUsgArray.join(', '), + }) + }) + const excelDetailData = excelRainStat(rainDetailList); /* const rainStatHeadList = data.map((item:RainStatProps) => ({ ...item, ctpvCd:item.ctpvCd, @@ -85,6 +105,7 @@ export const rainStatActionsExport = ( rainStat: { ...state.rainStat, rainStatList: rainStatList, + rainDetailList: excelDetailData as [][] } })); } diff --git a/apps/wr/public/sample_rainStats.xlsx b/apps/wr/public/sample_rainStats.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c8f8e69b5fd4bfa9578f1300356c8b4535494232 GIT binary patch literal 10809 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 Xin0jMuL}S?gZ_M>B|$FzZ_@t*FYYFb literal 0 HcmV?d00001