하수사용량 수치 오류 부분 수정.

This commit is contained in:
2025-07-25 04:03:03 +09:00
parent ec7655a71d
commit f1563aa1fc
3 changed files with 60 additions and 69 deletions
+5 -52
View File
@@ -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<tableType[]>([]);
const [detailList, setDetailList] = useState<modalTableType[]>([]);
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 (
<>
+1 -1
View File
@@ -85,7 +85,7 @@ export default function PlanSewage() {
const [operationValue, setOperationValue] = useState<string>("0");
// 조회기간
// const [searchYear, setSearchYear] = useState<string>(selectSearchYear[0]?.val || "0");
const [searchYear, setSearchYear] = useState<string>("2023");
const [searchYear, setSearchYear] = useState<string>("2024");
/**
* 페이지 함수
+54 -16
View File
@@ -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,
}
}))
},