지하수유입량 모달 평균최대최소 수정

This commit is contained in:
2025-08-12 18:39:56 +09:00
parent f35c937c0f
commit ba81c01b06
2 changed files with 34 additions and 82 deletions
@@ -4,7 +4,7 @@ import type { UnderWaterInputModalProps } from "@/app/store/underWaterInput/type
import { DateMonthPicker, UITab, UiTable } from "@common/business_components/ui";
import ListDiv from "@common/business_components/ui/list_div";
import { Table, TableCell, TableHead, TableRow, TabsContent } from "@common/components/ui";
import { useEffect, useState } from "react";
import { use, useEffect, useState } from "react";
type ModalProps ={
fcltyName: string;
@@ -34,64 +34,11 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date(
gridListUnderWaterDetail,
} = UnderWaterDetail;
// 필터링 된 후 최대, 최소, 평균 값 계산
const setFilterAfterData = (filteredData: UnderWaterInputModalProps[]) => {
let maxRealSewageInput = Number(filteredData[0]?.realSewageInput ?? 0);
let maxSewageOccur = Number(filteredData[0]?.sewageOccur ?? 0);
let maxUnderWaterInput = Number(filteredData[0]?.underWaterInput ?? 0);
let minRealSewageInput = Number(filteredData[0]?.realSewageInput ?? 0);
let minSewageOccur = Number(filteredData[0]?.sewageOccur ?? 0);
let minUnderWaterInput = Number(filteredData[0]?.underWaterInput ?? 0);
let avgRealSewageInput = 0;
let avgSewageOccur = 0;
let avgUnderWaterInput = 0;
filteredData.forEach((item: UnderWaterInputModalProps) => {
maxRealSewageInput = Math.max(Number(maxRealSewageInput), Number(item.realSewageInput));
maxSewageOccur = Math.max(Number(maxSewageOccur), Number(item.sewageOccur));
maxUnderWaterInput = Math.max(Number(maxUnderWaterInput), Number(item.underWaterInput));
minRealSewageInput = Math.min(Number(minRealSewageInput) || 0, Number(item.realSewageInput));
minSewageOccur = Math.min(Number(minSewageOccur) || 0, Number(item.sewageOccur));
minUnderWaterInput = Math.min(Number(minUnderWaterInput) || 0, Number(item.underWaterInput));
avgRealSewageInput += Number(item.realSewageInput ?? 0);
avgSewageOccur += Number(item.sewageOccur ?? 0);
avgUnderWaterInput += Number(item.underWaterInput ?? 0);
})
const newFilteredData = [
{
msrDt: '평균',
realSewageInput: filteredData.length==0?0:Math.round(Number(avgRealSewageInput) / filteredData.length * 10) / 10,
sewageOccur: filteredData.length==0?0:Math.round(Number(avgSewageOccur) / filteredData.length * 1000) / 1000 ,
underWaterInput: filteredData.length==0?0:Math.round(Number(avgUnderWaterInput) / filteredData.length * 1000) / 1000,
},
{
msrDt : '최대',
realSewageInput : Math.round(maxRealSewageInput * 10) / 10,
sewageOccur : Math.round(maxSewageOccur * 1000) / 1000 ,
underWaterInput : Math.round(maxUnderWaterInput * 1000) / 1000,
},
{
msrDt : '최소',
realSewageInput : Math.round(minRealSewageInput * 10) / 10,
sewageOccur : Math.round(minSewageOccur * 1000) / 1000 ,
underWaterInput : Math.round(minUnderWaterInput * 1000) / 1000,
},
...filteredData
];
return newFilteredData;
}
// 날짜 필터링 관련 상태
const [copyYearList, setCopyYearList] = useState<UnderWaterInputModalProps[]>([]);
useEffect(() => {
const filteredYearData = setFilterAfterData(gridListUnderWaterDetail);
setCopyYearList(filteredYearData as UnderWaterInputModalProps[]);
setCopyYearList(gridListUnderWaterDetail);
}, [gridListUnderWaterDetail]);
useEffect(() => {
@@ -115,9 +62,11 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date(
setPrevEndYmDate(searchYear+'12');
}
}, [searchYear, tabTerm]);
useEffect(()=>{
unserWaterModal(fcltyName, searchYear);
}, [])
unserWaterModal(fcltyName, searchYear, searchYear+'01', searchYear+'12');
}, [fcltyName, searchYear, unserWaterModal]);
useEffect(() => {
if(endYmDate < startYmDate) {
alert('종료일이 시작일보다 작습니다.')
@@ -130,16 +79,13 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date(
// 유효한 경우 현재 값을 이전 값으로 저장
setPrevStartYmDate(startYmDate);
setPrevEndYmDate(endYmDate);
const filteredData = gridListUnderWaterDetail.filter((item: UnderWaterInputModalProps) => {
// msrDt가 "2024-01" 형태이므로 "202401" 형태로 변환
const itemDate = item.msrDt.replace('-', '');
return itemDate >= startYmDate && itemDate <= endYmDate;
});
const filteredYearData = setFilterAfterData(filteredData);
setCopyYearList(filteredYearData as UnderWaterInputModalProps[]);
}, [startYmDate, endYmDate, gridListUnderWaterDetail, prevStartYmDate, prevEndYmDate]);
useEffect(() => {
unserWaterModal(fcltyName, searchYear, prevStartYmDate, prevEndYmDate);
} , [fcltyName, searchYear, unserWaterModal, prevStartYmDate, prevEndYmDate]);
return (
<>
<UITab tabList={tabList1} defaultValue="tab_term_year" onValueChange={(val) => {setTabTerm(val)}}>
+23 -17
View File
@@ -2,6 +2,7 @@ import DataForm from "@/app/components/common/DataForm";
import type { TableUpperProps } from "../dashboard";
import { getFetch } from "@/app/components/api";
import type { ExcelType, UnderWaterInputModalProps, UnderWaterProps } from "./types";
import { start } from "repl";
export type { TableUpperProps };
// SewageOccurDetailProps 타입을 여기에 정의
@@ -201,7 +202,7 @@ const fetchUnderWaterList = async (pageNo: number, pageSize: number, searchYear:
====================================*/
export type UnderWaterActions = {
searchUnderWaterList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void;
unserWaterModal:(bscFctCd:string, searchYear:string)=>void
unserWaterModal:(bscFctCd:string, searchYear:string, startYm:string, endYm:string)=>void
}
export type UnderWaterType = {
@@ -365,6 +366,11 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay;
const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay;
if(bscFctCd === '11200PB001R') {
console.log('calData.length : ', calData.length);
console.log('usage : ', usage, 'summerUsage : ', summerUsage, 'winterUsage : ', winterUsage);
}
item.underWaterInputYear = Math.round((usage-(usage*0.65*0.8)) * 100) / 100;
item.underWaterInputSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100;
item.underWaterInputWinter = Math.round((winterUsage-(winterUsage*0.65*0.8)) * 100) / 100;
@@ -418,25 +424,19 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
},
}))
},
unserWaterModal:async (bscFctCd, searchYear)=>{
console.log('searchYear : ', searchYear);
unserWaterModal:async (bscFctCd, searchYear, startYm, endYm)=>{
const res = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear);
const monthData: SewageOccurDetailProps[] = [];
const calData = calRainEffectDay(res.data, 'SUNNY');
let tot = 0, cnt= 0;
let tmpTot = 0;
calData.forEach((item: FlowDataItem) => {
tmpTot += Number(item.inflAmnt);
})
console.log('tmpTot : ', tmpTot/calData.length);
let tot = 0;
let cnt = 0;
calData.forEach((item: FlowDataItem) => {
const month = item.msrDt?.substring(4, 6);
const monthIdx = month ? Number(month) - 1 : -1;
if (monthIdx >= 0) {
if (monthIdx >= 0 && (monthIdx>=Number(startYm.substring(4,6))-1 && monthIdx <= Number(endYm.substring(4, 6))-1)) {
if (typeof monthData[monthIdx] === 'object') {
monthData[monthIdx].sum += Number(item.inflAmnt);
monthData[monthIdx].cnt++;
@@ -444,9 +444,12 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0};
}
}
tot += Number(item.inflAmnt)
cnt++
})
if(month >= startYm.substring(4, 6) && month <= endYm.substring(4, 6)){
cnt++;
tot += item.inflAmnt && item.inflAmnt !== 'x' ? Number(item.inflAmnt.toString().trim()) : 0;
}
});
const tableData:UnderWaterInputModalProps[] = []
let maxWaterUsage = 0;
@@ -469,13 +472,16 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
}
});
avgWaterUsage = tot/cnt
console.log('tot', tot, 'calData.length', calData.length);
avgWaterUsage = tot/cnt;
console.log(avgWaterUsage);
const newData= [
{
msrDt: '평균',
realSewageInput:Math.round(avgWaterUsage*100) /100,
sewageOccur:Math.round(avgWaterUsage*0.65*0.8 * 100) / 100,
underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100,
underWaterInput: Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100
//underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100,
},
{
msrDt: '최대',