diff --git a/apps/fo/app/pages/sewageOccur/modal/page.tsx b/apps/fo/app/pages/sewageOccur/modal/page.tsx index b776ff7ef..23c890160 100644 --- a/apps/fo/app/pages/sewageOccur/modal/page.tsx +++ b/apps/fo/app/pages/sewageOccur/modal/page.tsx @@ -1,11 +1,12 @@ "use client" import { useFoStore } from "@/app/store"; +import type { modalTableType } from "@/app/store/sewageOccur"; import { DateMonthPicker, UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Table, TableCell, TableHead, TableRow } from "@common/components/ui"; import { useEffect, useState } from "react"; -type tableType = { msrDt: string,waterUsage: number,swageChangePercent: number,estimationSewage: number}; + export default function SewageOccurModal(props: { fcltyName: string; facilityCd : string; searchYear : string}) { // 그리드 관련 const {SewageOccurDetail, searchSewageOccurDetailList} = useFoStore((state) => state); @@ -15,7 +16,7 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd const [startYearMonth, setStartYearMonth] = useState(validSearchYear+'01'); const [endYearMonth, setEndYearMonth] = useState(validSearchYear+'12'); - const [detailList, setDetailList] = useState([]); + const [detailList, setDetailList] = useState([]); const { upHeadListSewageOccurDetail, gridListSewageOccurDetail @@ -26,56 +27,8 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd }, [searchSewageOccurDetailList, props.facilityCd, validSearchYear]); useEffect(() => { - let maxWaterUsage = 0; - let minWaterUsage = 9999999999; - let totalWaterUsage = 0; - let avgWaterUsage = 0; - const tableData:tableType[] = [] - gridListSewageOccurDetail.forEach((item, index) => { - tableData.push({ - msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), - waterUsage: Math.round(item.usege * 100) / 100, - swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, - estimationSewage: Math.round(item.usege*0.8 * 100) / 100 - }) - if (item.usege > maxWaterUsage) { - maxWaterUsage = item.usege; - } - - if (item.usege < minWaterUsage) { - minWaterUsage = item.usege; - } - - totalWaterUsage += item.usege; - }); - - avgWaterUsage = totalWaterUsage?totalWaterUsage / gridListSewageOccurDetail.length:0; - - const newData= [ - { - msrDt: '평균', - waterUsage: Math.round(avgWaterUsage * 100) / 100, - swageChangePercent: Math.round((avgWaterUsage/avgWaterUsage*0.8) * 100) / 100, - estimationSewage: Math.round(avgWaterUsage*0.8 * 100) / 100 - }, - { - msrDt: '최대', - waterUsage: maxWaterUsage, - swageChangePercent: Math.round((maxWaterUsage/maxWaterUsage*0.8) * 100) / 100, - estimationSewage: Math.round(maxWaterUsage*0.8 * 100) / 100 - }, - { - msrDt: '최소', - waterUsage: minWaterUsage, - swageChangePercent: Math.round((minWaterUsage/minWaterUsage*0.8) * 100) / 100, - estimationSewage: Math.round(minWaterUsage*0.8 * 100) / 100 - }, - ...tableData - ] - setDetailList(newData); - - - }, [startYearMonth, endYearMonth, gridListSewageOccurDetail]); + setDetailList(gridListSewageOccurDetail); + }, [gridListSewageOccurDetail]); return ( <> diff --git a/apps/fo/app/pages/sewageOccur/page.tsx b/apps/fo/app/pages/sewageOccur/page.tsx index 68a8f6ed3..d275d7356 100644 --- a/apps/fo/app/pages/sewageOccur/page.tsx +++ b/apps/fo/app/pages/sewageOccur/page.tsx @@ -85,7 +85,7 @@ export default function PlanSewage() { const [operationValue, setOperationValue] = useState("0"); // 조회기간 // const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); - const [searchYear, setSearchYear] = useState("2023"); + const [searchYear, setSearchYear] = useState("2024"); /** * 페이지 함수 diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index b8819dba8..eef3ad3dd 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -28,7 +28,7 @@ export type SewageOccurProps = { mdmbsn : string, msrDt : string, } - +export type modalTableType = { msrDt: string,waterUsage: number,swageChangePercent: number,estimationSewage: number}; export type SewageOccurDetailProps = { cnt : number, sum : number, @@ -118,7 +118,7 @@ const upHeadListSewageOccurDetail:TableUpperProps[] = [ const sewageOccurList:SewageOccurProps[] = [] -const tempSewageOccurList:SewageOccurDetailProps[] = [] +const tempSewageOccurList:modalTableType[] = [] /**==================================== * Store - API @@ -126,11 +126,6 @@ const tempSewageOccurList:SewageOccurDetailProps[] = [] const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { // 20250701임시시 - console.log("partCd", partCd); - console.log("nameCd", nameCd); - console.log("fcltCpct", fcltCpct); - console.log("operationValue", operationValue); - console.log("fcltyNm", fcltyNm); console.log("searchYear", searchYear); const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : ''; const url = '/fclt/flow/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr; @@ -178,7 +173,7 @@ export type SewageOccurType = { SewageOccurDetail : { isInit: boolean; upHeadListSewageOccurDetail: TableUpperProps[]; - gridListSewageOccurDetail: SewageOccurDetailProps[]; + gridListSewageOccurDetail: modalTableType[]; } } @@ -227,7 +222,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const data = res.data; // Promise.all을 사용하여 모든 비동기 작업이 완료될 때까지 기다림 - const calData = await Promise.all(data.map(async (item: SewageOccurProps) => { + const calData = await Promise.all(data.map(async (item: SewageOccurProps, idx) => { item.sidoNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); @@ -238,7 +233,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const bscFctCd = item.bscFctCd; const url2 = '/fclt/flow/' + bscFctCd + '/' + searchYear; const res2 = await getFetch('fo', url2) as FlowResponse; - const sumFlow = res2.data.reduce((acc: number, curr: FlowDataItem) => Number(acc) + Number(curr.inflAmnt), 0); let sumChungcunDay = 0; let chungcunSumFlow = 0; @@ -251,9 +245,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { totWaterUsage += Number(item.inflAmnt); }); const avg = totWaterUsage /res2.count; - console.log("avg ", avg); item.waterUsage = avg * 0.65; - item.sewageInputYear = sumFlow/res2.count; + item.sewageInputYear = avg; item.sewageInputChungchun = chungcunSumFlow===0?0:(chungcunSumFlow / sumChungcunDay); return item; })); @@ -274,9 +267,9 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { searchSewageOccurDetailList: async (bscFctCd: string, searchYear: string) => { const res = await fetchSewageOccurDetailList(bscFctCd, searchYear); const monthData: SewageOccurDetailProps[] = []; - + let tot = 0, cnt= 0 res.data.forEach((item: FlowDataItem) => { - const month = item.msrDt?.substring(5, 7); + const month = item.msrDt?.substring(4, 6); const monthIdx = month ? Number(month) - 1 : -1; if (monthIdx >= 0) { if (typeof monthData[monthIdx] === 'object') { @@ -286,16 +279,61 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0}; } } + tot += Number(item.inflAmnt) + cnt++ }) - monthData.forEach(item => { + console.log('tot', tot, cnt, tot/cnt, tot/cnt*0.65); + const tableData:modalTableType[] = [] + + let maxWaterUsage = 0; + let minWaterUsage = 9999999999; + let avgWaterUsage = 0; + monthData.forEach((item, index) => { item.usege = item.sum/item.cnt *0.65 + tableData.push({ + msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), + waterUsage: Math.round(item.usege*100) /100, + swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, + estimationSewage: Math.round(item.usege*0.8 * 100) / 100 + }) + if (item.usege > maxWaterUsage) { + maxWaterUsage = item.usege; + } + + if (item.usege < minWaterUsage) { + minWaterUsage = item.usege; + } + }); + avgWaterUsage = tot/cnt*0.65 + + const newData= [ + { + msrDt: '평균', + waterUsage: Math.round(avgWaterUsage*100) /100, + swageChangePercent: 0.8, + estimationSewage: Math.round(avgWaterUsage*0.8*100) /100, + }, + { + msrDt: '최대', + waterUsage: Math.round(maxWaterUsage*100) /100, + swageChangePercent: 0.8, + estimationSewage: Math.round(maxWaterUsage*0.8*100) /100, + }, + { + msrDt: '최소', + waterUsage: Math.round(minWaterUsage*100) /100, + swageChangePercent: 0.8, + estimationSewage: Math.round(minWaterUsage*0.8*100) /100, + }, + ...tableData + ] set((state: SewageOccurType) => ({ ...state, SewageOccurDetail: { ...state.SewageOccurDetail, - gridListSewageOccurDetail: monthData, + gridListSewageOccurDetail: newData, } })) },