하수사용량 수치 오류 부분 수정.
This commit is contained in:
@@ -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 (
|
||||
<>
|
||||
|
||||
@@ -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");
|
||||
|
||||
/**
|
||||
* 페이지 함수
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}))
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user