fo: dashboard 강우일운영현황
This commit is contained in:
@@ -9,15 +9,16 @@
|
||||
* @author jsyang
|
||||
*/
|
||||
|
||||
export default function CalcRainEffect(data : any, weather='ALL') {
|
||||
const rtnDataAll : any = [];
|
||||
const rtnDataSunny : any = [];
|
||||
const rtnDataRain : any = [];
|
||||
let rtnData : any = [];
|
||||
let rainEffectStd = 0;
|
||||
data.forEach(item => {
|
||||
export default function CalcRainEffect(data: any, weather = 'ALL') {
|
||||
const rtnDataAll: any = [];
|
||||
const rtnDataSunny: any = [];
|
||||
const rtnDataRain: any = [];
|
||||
let rtnData: any = [];
|
||||
let rainEffectStd = 0;
|
||||
for (let idx = 0; idx < data.length; idx++) {
|
||||
const item = data[idx];
|
||||
if (item.infoRnDay == null || item.infoRnDay == 'x' || item.infoRnDay == '') item.infoRnDay = 0;
|
||||
if(Number(item.infoRnDay) >= 3) { // 강우일
|
||||
if (Number(item.infoRnDay) >= 3) { // 강우일
|
||||
rainEffectStd = 2;
|
||||
item.toBeInfoRnDay = item.infoRnDay;
|
||||
} else {
|
||||
@@ -29,14 +30,26 @@ export default function CalcRainEffect(data : any, weather='ALL') {
|
||||
rtnDataSunny.push(item);
|
||||
} else if (rainEffectStd >= 0) { // 강우일 + 강우영향일
|
||||
item.rainEffectDay = 1;
|
||||
if (idx > 1) {
|
||||
// 전날 비가 왔고 오늘 강우량 3미만인 경우 전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전날 강우량으로 설정
|
||||
if (data[idx - 1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx - 1]?.infoRnDay.toString().trim()) >= 3) {
|
||||
data[idx]!.toBeInfoRnDay = data[idx - 1]!.infoRnDay;
|
||||
}
|
||||
}
|
||||
if (idx > 2) {
|
||||
// 전전날 비가 왔고 오늘 강우량 3미만인 경우 전전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전전날 강우량으로 설정
|
||||
if (data[idx - 2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx - 2]?.infoRnDay.toString().trim()) >= 3) {
|
||||
data[idx]!.toBeInfoRnDay = data[idx - 2]!.infoRnDay;
|
||||
}
|
||||
}
|
||||
rtnDataRain.push(item);
|
||||
}
|
||||
|
||||
rtnDataAll.push(item);
|
||||
});
|
||||
|
||||
|
||||
// // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일)
|
||||
rtnDataAll.push(item);
|
||||
}
|
||||
|
||||
|
||||
// // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일)
|
||||
// for(let idx = 0; idx < data.length; idx++) {
|
||||
// const item = data[idx];
|
||||
// if(item){
|
||||
@@ -70,22 +83,22 @@ export default function CalcRainEffect(data : any, weather='ALL') {
|
||||
// }
|
||||
// }
|
||||
|
||||
for(let idx = 0; idx < data.length; idx++) {
|
||||
if(data[idx] && data[idx]?.rainEffectDay === 1) {
|
||||
if(idx > 1){
|
||||
// 전날 비가 왔고 오늘 강우량 3미만인 경우 전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전날 강우량으로 설정
|
||||
if(data[idx-1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-1]?.infoRnDay.toString().trim()) >= 3) {
|
||||
data[idx]!.toBeInfoRnDay = data[idx-1]!.infoRnDay;
|
||||
}
|
||||
}
|
||||
if(idx > 2){
|
||||
// 전전날 비가 왔고 오늘 강우량 3미만인 경우 전전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전전날 강우량으로 설정
|
||||
if(data[idx-2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-2]?.infoRnDay.toString().trim()) >= 3) {
|
||||
data[idx]!.toBeInfoRnDay = data[idx-2]!.infoRnDay;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// for(let idx = 0; idx < data.length; idx++) {
|
||||
// if(data[idx] && data[idx]?.rainEffectDay === 1) {
|
||||
// if(idx > 1){
|
||||
// // 전날 비가 왔고 오늘 강우량 3미만인 경우 전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전날 강우량으로 설정
|
||||
// if(data[idx-1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-1]?.infoRnDay.toString().trim()) >= 3) {
|
||||
// data[idx]!.toBeInfoRnDay = data[idx-1]!.infoRnDay;
|
||||
// }
|
||||
// }
|
||||
// if(idx > 2){
|
||||
// // 전전날 비가 왔고 오늘 강우량 3미만인 경우 전전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전전날 강우량으로 설정
|
||||
// if(data[idx-2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-2]?.infoRnDay.toString().trim()) >= 3) {
|
||||
// data[idx]!.toBeInfoRnDay = data[idx-2]!.infoRnDay;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (weather === 'ALL') {
|
||||
// rtnData = data;
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
|
||||
"use client"
|
||||
import { useFoStore } from "@/app/store";
|
||||
import { ContentsDiv, downloadExcel, downloadMultipleExcel, filePickedBlobArray, MainDiv, SelectBox, UITab, type SelectDataType } from "@common/business_components";
|
||||
import {
|
||||
ContentsDiv, downloadExcel, downloadMultipleExcel, filePickedBlobArray, MainDiv
|
||||
, SelectBox, UITab, type SelectDataType
|
||||
} from "@common/business_components";
|
||||
import { Button, TabsContent } from "@common/components/ui";
|
||||
import { useEffect, useState } from "react";
|
||||
import DashBoardFclty from "../dashboardMain/page";
|
||||
@@ -50,9 +53,9 @@ type FacilityType = {
|
||||
|
||||
export default function DashBoard() {
|
||||
// 입력값 상태 관리
|
||||
const { Common, initializeCommonData, searchMainGraph, searchRainManage, searchOperationStatus, OperationStatus, RainManage, MainGraph, PlanFclty } = useFoStore((state) => state);
|
||||
const { Common, initializeCommonData, searchMainGraph, searchRainManage, searchOperationStatus
|
||||
, OperationStatus, RainManage, MainGraph, PlanFclty } = useFoStore((state) => state);
|
||||
const [activeTab, setActiveTab] = useState<string>('facilityInfo');
|
||||
|
||||
const [filteredSigunData, setFilteredSigunData] = useState<SelectDataType[]>([{ text: "전체", val: '0' }]);
|
||||
const [sidoValue, setSidoValue] = useState<string>('0');
|
||||
const [sigunValue, setSigunValue] = useState<string>('0');
|
||||
|
||||
@@ -15,27 +15,13 @@ export type facilityInfoProps = {
|
||||
fcltyList?: { bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string, efflWqltStndrdNm: string }[];
|
||||
};
|
||||
|
||||
export default function RainManageTab({searchYear = '', fcltyList = []}: facilityInfoProps) {
|
||||
|
||||
const {
|
||||
Common,
|
||||
searchRainManage,
|
||||
RainManage
|
||||
} = useFoStore((state) => state);
|
||||
export default function RainManageTab({ searchYear = '', fcltyList = [] }: facilityInfoProps) {
|
||||
|
||||
const { Common, searchRainManage, RainManage } = useFoStore((state) => state);
|
||||
const [hasSearched, setHasSearched] = useState(false);
|
||||
// 이전 시설코드 저장
|
||||
const [prevFacilityCode, setPrevFacilityCode] = useState<string>('');
|
||||
|
||||
const {
|
||||
isInit,
|
||||
} = Common;
|
||||
|
||||
const {
|
||||
upHeadListRainManage,
|
||||
rainManageList,
|
||||
} = RainManage;
|
||||
|
||||
const [prevFacilityCode, setPrevFacilityCode] = useState<string>(''); // 이전 시설코드 저장
|
||||
const { isInit, } = Common;
|
||||
const { upHeadListRainManage, rainManageList, } = RainManage;
|
||||
const tableData = fcltyList;
|
||||
|
||||
useEffect(() => {
|
||||
@@ -50,17 +36,17 @@ export default function RainManageTab({searchYear = '', fcltyList = []}: facilit
|
||||
useEffect(() => {
|
||||
setHasSearched(false);
|
||||
}, [searchYear]);
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
<UiTable
|
||||
<UiTable
|
||||
headName=""
|
||||
tableData={rainManageList}
|
||||
headlist={upHeadListRainManage}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => {}}
|
||||
onPageChange={() => { }}
|
||||
widthFixed={true}
|
||||
>
|
||||
</UiTable>
|
||||
|
||||
@@ -34,11 +34,8 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
const [copyYearList, setCopyYearList] = useState<FlowRateModalInterface[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const prevExcelListRef = useRef<modalExcelType[] | null>(null);
|
||||
const {
|
||||
modalFlowRateListYear,
|
||||
upHeadListFlowRateModalYear,
|
||||
} = FlowRateModal;
|
||||
|
||||
const { modalFlowRateListYear, upHeadListFlowRateModalYear, } = FlowRateModal;
|
||||
|
||||
const ref = useRef<ReturnType<FlowRateModalInterface>>({
|
||||
startDate: new Date(),
|
||||
endDate: new Date(),
|
||||
@@ -52,11 +49,11 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
const filteredData = setFilterAfterData(returnType.filteredList as FlowRateModalInterface[]);
|
||||
setCopyYearList(filteredData);
|
||||
}, []);
|
||||
|
||||
|
||||
// 필터링 된 후 최대, 최소, 평균 값 계산
|
||||
const setFilterAfterData = (filteredData: FlowRateModalInterface[]) => {
|
||||
if (!filteredData || filteredData.length === 0) return [];
|
||||
|
||||
|
||||
// 쉼표가 포함된 문자열을 숫자로 변환하는 함수
|
||||
const parseNumber = (value: string | number | null | undefined): number => {
|
||||
if (value === null || value === undefined || value === '') return 0;
|
||||
@@ -89,7 +86,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
let avginfoRnDay = 0;
|
||||
let avgNoProcessInflAmnt = 0;
|
||||
let noProcessInflAmntCnt = 0;
|
||||
|
||||
|
||||
filteredData.forEach((item: FlowRateModalInterface) => {
|
||||
const totInflAmnt = parseNumber(item.totInflAmnt);
|
||||
const inflAmnt = parseNumber(item.inflAmnt);
|
||||
@@ -119,24 +116,24 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
avgefflAmnt += efflAmnt;
|
||||
avginfoRnDay += infoRnDay;
|
||||
|
||||
if(item.noProcessInflAmnt && item.noProcessInflAmnt.toString().trim() != '' && item.noProcessInflAmnt != undefined){
|
||||
const noProcessInflAmnt = Number(item.noProcessInflAmnt.toString().replaceAll(',',''));
|
||||
if (item.noProcessInflAmnt && item.noProcessInflAmnt.toString().trim() != '' && item.noProcessInflAmnt != undefined) {
|
||||
const noProcessInflAmnt = Number(item.noProcessInflAmnt.toString().replaceAll(',', ''));
|
||||
avgNoProcessInflAmnt += noProcessInflAmnt;
|
||||
maxNoProcessInflAmnt = Math.max(maxNoProcessInflAmnt, noProcessInflAmnt);
|
||||
minNoProcessInflAmnt = Math.min(minNoProcessInflAmnt, noProcessInflAmnt);
|
||||
noProcessInflAmntCnt +=1;
|
||||
noProcessInflAmntCnt += 1;
|
||||
}
|
||||
});
|
||||
|
||||
const newFilteredData = [
|
||||
{
|
||||
msrDt: '평균',
|
||||
totInflAmnt: avgtotInflAmnt && avgtotInflAmnt!=0 ? roundUp((avgtotInflAmnt / filteredData.length), 0) : 0,
|
||||
inflAmnt: avginflAmnt && avginflAmnt!=0 ? roundUp((avginflAmnt / filteredData.length), 0) : 0,
|
||||
sumFlow: avgsumFlow && avgsumFlow!=0 ? roundUp((avgsumFlow / filteredData.length), 0) : 0,
|
||||
returnAmnt: avgreturnAmnt && avgreturnAmnt!=0 ? roundUp((avgreturnAmnt / filteredData.length), 0) : 0,
|
||||
efflAmnt: avgefflAmnt && avgefflAmnt!=0 ? roundUp((avgefflAmnt / filteredData.length), 0) : 0,
|
||||
noProcessInflAmnt : roundNumber(avgNoProcessInflAmnt / noProcessInflAmntCnt, 0),
|
||||
totInflAmnt: avgtotInflAmnt && avgtotInflAmnt != 0 ? roundUp((avgtotInflAmnt / filteredData.length), 0) : 0,
|
||||
inflAmnt: avginflAmnt && avginflAmnt != 0 ? roundUp((avginflAmnt / filteredData.length), 0) : 0,
|
||||
sumFlow: avgsumFlow && avgsumFlow != 0 ? roundUp((avgsumFlow / filteredData.length), 0) : 0,
|
||||
returnAmnt: avgreturnAmnt && avgreturnAmnt != 0 ? roundUp((avgreturnAmnt / filteredData.length), 0) : 0,
|
||||
efflAmnt: avgefflAmnt && avgefflAmnt != 0 ? roundUp((avgefflAmnt / filteredData.length), 0) : 0,
|
||||
noProcessInflAmnt: roundNumber(avgNoProcessInflAmnt / noProcessInflAmntCnt, 0),
|
||||
infoRnDay: avginfoRnDay > 0 ? roundUp((avginfoRnDay / filteredData.length), 1) : '0.0',
|
||||
rainEffectDay: 0,
|
||||
},
|
||||
@@ -147,7 +144,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
sumFlow: roundUp(maxsumFlow, 0),
|
||||
returnAmnt: roundUp(maxreturnAmnt, 0),
|
||||
efflAmnt: roundUp(maxefflAmnt, 0),
|
||||
noProcessInflAmnt : roundNumber(maxNoProcessInflAmnt, 0),
|
||||
noProcessInflAmnt: roundNumber(maxNoProcessInflAmnt, 0),
|
||||
infoRnDay: maxinfoRnDay > 0 ? roundUp(maxinfoRnDay, 1) : '0.0',
|
||||
rainEffectDay: 0,
|
||||
},
|
||||
@@ -158,7 +155,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
sumFlow: roundUp(minsumFlow, 0),
|
||||
returnAmnt: roundUp(minreturnAmnt, 0),
|
||||
efflAmnt: roundUp(minefflAmnt, 0),
|
||||
noProcessInflAmnt : roundNumber(minNoProcessInflAmnt, 0),
|
||||
noProcessInflAmnt: roundNumber(minNoProcessInflAmnt, 0),
|
||||
infoRnDay: mininfoRnDay > 0 ? roundUp(mininfoRnDay, 1) : '0.0',
|
||||
rainEffectDay: 0,
|
||||
},
|
||||
@@ -185,7 +182,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
|
||||
const excelDownload = () => {
|
||||
const excelDownList: modalExcelType[] = [];
|
||||
if(copyYearList.length > 0){
|
||||
if (copyYearList.length > 0) {
|
||||
copyYearList.forEach((item) => {
|
||||
excelDownList.push({
|
||||
"날짜": item.msrDt,
|
||||
@@ -200,7 +197,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
});
|
||||
}
|
||||
if (excelDownList && excelDownList.length > 0) {
|
||||
downloadExcel({ data: JSON.parse(JSON.stringify(excelDownList)), fileName: props.searchYear+'년 '+props.fcltyName + ' 유량현황', sheetNameArray: [props.fcltyName + ' 유량현황'], headerRange: 'A1:H1' });
|
||||
downloadExcel({ data: JSON.parse(JSON.stringify(excelDownList)), fileName: props.searchYear + '년 ' + props.fcltyName + ' 유량현황', sheetNameArray: [props.fcltyName + ' 유량현황'], headerRange: 'A1:H1' });
|
||||
} else if (prevExcelListRef.current && prevExcelListRef.current.length > 0) {
|
||||
alert('다운받을 데이터가 없습니다.');
|
||||
}
|
||||
@@ -210,7 +207,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
return (
|
||||
<>
|
||||
<UITab tabList={tabList} defaultValue="tab_term_year">
|
||||
<Button className={btnClass} style={{float: 'right'}} color="green" onClick={excelDownload}>
|
||||
<Button className={btnClass} style={{ float: 'right' }} color="green" onClick={excelDownload}>
|
||||
{"엑셀다운로드"}
|
||||
</Button>
|
||||
<TabsContent value="tab_term_year">
|
||||
@@ -224,16 +221,16 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
queryClick={filterData}
|
||||
/>
|
||||
<div className="h-[370px] overflow-y-auto overflow-x-hidden">
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => {}}
|
||||
className="h-[370px]"
|
||||
boldArray={[0,1,2]}
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => { }}
|
||||
className="h-[370px]"
|
||||
boldArray={[0, 1, 2]}
|
||||
/>
|
||||
</div>
|
||||
<div className="mt-20">
|
||||
@@ -251,16 +248,16 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
queryClick={filterData}
|
||||
/>
|
||||
<div className="h-[370px] overflow-y-auto overflow-x-hidden">
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => {}}
|
||||
className="h-[370px]"
|
||||
boldArray={[0,1,2]}
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => { }}
|
||||
className="h-[370px]"
|
||||
boldArray={[0, 1, 2]}
|
||||
/>
|
||||
</div>
|
||||
<div className="mt-20">
|
||||
@@ -278,23 +275,23 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
queryClick={filterData}
|
||||
/>
|
||||
<div className="h-[370px] overflow-y-auto overflow-x-hidden">
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => {}}
|
||||
className="h-[370px]"
|
||||
boldArray={[0,1,2]}
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => { }}
|
||||
className="h-[370px]"
|
||||
boldArray={[0, 1, 2]}
|
||||
/>
|
||||
</div>
|
||||
<div className="mt-20">
|
||||
<UnderComment commentArray={[commentArray]} />
|
||||
</div>
|
||||
</TabsContent>
|
||||
<TabsContent value="tab_term_chuncheon">
|
||||
<TabsContent value="tab_term_chuncheon">
|
||||
<FacilityTermModalHeader<FlowRateModalInterface>
|
||||
searchList={modalFlowRateListYear}
|
||||
fcltyCd={props.facilityCd}
|
||||
@@ -305,16 +302,16 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
queryClick={filterData}
|
||||
/>
|
||||
<div className="h-[370px] overflow-y-auto overflow-x-hidden">
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => {}}
|
||||
className="h-[370px]"
|
||||
boldArray={[0,1,2]}
|
||||
<UiTable
|
||||
headName="유량현황"
|
||||
tableData={copyYearList}
|
||||
headlist={upHeadListFlowRateModalYear}
|
||||
pageSize={0}
|
||||
total={0}
|
||||
cellClick={undefined}
|
||||
onPageChange={() => { }}
|
||||
className="h-[370px]"
|
||||
boldArray={[0, 1, 2]}
|
||||
/>
|
||||
</div>
|
||||
<div className="mt-20">
|
||||
@@ -332,10 +329,10 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
|
||||
queryClick={filterData}
|
||||
/>
|
||||
<div className="h-[370px] overflow-y-auto overflow-x-hidden">
|
||||
<UiTable headName="유량현황" tableData={copyYearList} headlist={upHeadListFlowRateModalYear} pageSize={0} total={0} cellClick={undefined} onPageChange={() => {}} className="h-[370px]" boldArray={[0,1,2]}/>
|
||||
<UiTable headName="유량현황" tableData={copyYearList} headlist={upHeadListFlowRateModalYear} pageSize={0} total={0} cellClick={undefined} onPageChange={() => { }} className="h-[370px]" boldArray={[0, 1, 2]} />
|
||||
</div>
|
||||
<div className="mt-20">
|
||||
<UnderComment commentArray={["미처리하수 추정량 산식 =[(강우시 일별유입유량*강우시 일별유입BOD)-(청천시 연평균유입유량*청천시 연평균유입BOD)]/강우시 일별유입BOD)","강우량 3mm 이상만 날과 강우영향일(강우일+2일)의 날"]} />
|
||||
<UnderComment commentArray={["미처리하수 추정량 산식 =[(강우시 일별유입유량*강우시 일별유입BOD)-(청천시 연평균유입유량*청천시 연평균유입BOD)]/강우시 일별유입BOD)", "강우량 3mm 이상만 날과 강우영향일(강우일+2일)의 날"]} />
|
||||
</div>
|
||||
</TabsContent>
|
||||
</UITab>
|
||||
|
||||
@@ -1142,6 +1142,9 @@ export type DashBoardType = {
|
||||
mainGraphData: any;
|
||||
mainGraphYear: string;
|
||||
mainGraphFcltyCd: string;
|
||||
flowRateData: any;
|
||||
flowRateYear: string;
|
||||
flowRateFcltyCd: string;
|
||||
},
|
||||
|
||||
DrainageEquipment: {
|
||||
@@ -1208,6 +1211,9 @@ export const dashBoardInitState: DashBoardType = {
|
||||
mainGraphData: null,
|
||||
mainGraphYear: '',
|
||||
mainGraphFcltyCd: '',
|
||||
flowRateData: null,
|
||||
flowRateYear: '',
|
||||
flowRateFcltyCd: '',
|
||||
},
|
||||
|
||||
DrainageEquipment: {
|
||||
@@ -1515,7 +1521,24 @@ export const dashBoardReducer = (
|
||||
|
||||
// 연계처리수,지하수유입량
|
||||
const bscFctCd = fcltyCd;
|
||||
const res2 = await fetchFlowRateModalList(bscFctCd, searchYear); // /fclt/flow/ - 일별 유량 조회
|
||||
let res2: any = { data: [] };
|
||||
|
||||
// 이미 조회된 데이터가 있는지 확인 (연도와 시설코드가 같을 때만)
|
||||
if (state.RainManage.flowRateYear === searchYear && state.RainManage.flowRateFcltyCd === fcltyCd && state.RainManage.flowRateData) {
|
||||
res2 = state.RainManage.flowRateData;
|
||||
} else {
|
||||
res2 = await fetchFlowRateModalList(bscFctCd, searchYear); // /fclt/flow/ - 일별 유량 조회
|
||||
// 조회된 데이터 저장
|
||||
set((state: DashBoardType) => ({
|
||||
...state,
|
||||
RainManage: {
|
||||
...state.RainManage,
|
||||
flowRateData: res2,
|
||||
flowRateYear: searchYear,
|
||||
flowRateFcltyCd: fcltyCd,
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
//const calData = CalcRainEffect(clone(res2.data), 'SUNNY');
|
||||
//const calRainData = CalcRainEffect(clone(res2.data), 'RAIN');
|
||||
@@ -1967,6 +1990,24 @@ export const dashBoardReducer = (
|
||||
}));
|
||||
}
|
||||
|
||||
let res2: any = { data: [] };
|
||||
// 이미 조회된 데이터가 있는지 확인 (연도와 시설코드가 같을 때만)
|
||||
if (state.RainManage.flowRateYear === searchYear && state.RainManage.flowRateFcltyCd === fcltyCd && state.RainManage.flowRateData) {
|
||||
res2 = state.RainManage.flowRateData;
|
||||
} else {
|
||||
res2 = await fetchFlowRateModalList(fcltyCd, searchYear); // /fclt/flow/ - 일별 유량 조회
|
||||
// 조회된 데이터 저장
|
||||
set((state: DashBoardType) => ({
|
||||
...state,
|
||||
RainManage: {
|
||||
...state.RainManage,
|
||||
flowRateData: res2,
|
||||
flowRateYear: searchYear,
|
||||
flowRateFcltyCd: fcltyCd,
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
set((state: DashBoardType) => ({
|
||||
...state,
|
||||
RainManage: {
|
||||
@@ -1990,10 +2031,9 @@ export const dashBoardReducer = (
|
||||
|
||||
const itemList = ['계', '3~10mm 미만', '10~20mm 미만', '20~30mm 미만', '30~40mm 미만', '40~50mm 미만', '50~60mm 미만', '60mm 이상'];
|
||||
const rainRate = ['0', '0', '0', '0', '0', '0', '0', '0'];
|
||||
const rainDate = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const inflAmtCnt = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const rainDate: number[] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const inflAmnt: number[] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const fcltyCpct = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const fcltyCpct: number[] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const dsInflWqltBod: number[] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const dsInflWqltCod: number[] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
const dsInflWqltSs: number[] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
@@ -2054,9 +2094,8 @@ export const dashBoardReducer = (
|
||||
const toBeRain = item.toBeInfoRnDay ? Number(item.toBeInfoRnDay) : 0;
|
||||
|
||||
if (toBeRain >= 3 && toBeRain < 10) {
|
||||
rainDate[1] = Number(rainDate[1] || 0) + 1;
|
||||
inflAmtCnt[1] = Number(inflAmtCnt[1] || 0) + 1;
|
||||
inflAmnt[1] = Number(inflAmnt[1] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[1] = (rainDate[1] || 0) + 1;
|
||||
inflAmnt[1] = (inflAmnt[1] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[1] = 0;
|
||||
inflAssctBfrWqltBodCnt[1] = Number(inflAssctBfrWqltBodCnt[1] || 0) + 1;
|
||||
inflAssctBfrWqltBod[1] = Number(inflAssctBfrWqltBod[1] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2079,9 +2118,8 @@ export const dashBoardReducer = (
|
||||
efflWqltTpCnt[1] = Number(efflWqltTpCnt[1] || 0) + 1;
|
||||
efflWqltTp[1] = Number(efflWqltTp[1] || 0) + Number(item.efflWqltTp || 0);
|
||||
} else if (toBeRain >= 10 && toBeRain < 20) {
|
||||
rainDate[2] = Number(rainDate[2] || 0) + 1;
|
||||
inflAmtCnt[2] = Number(inflAmtCnt[2] || 0) + 1;
|
||||
inflAmnt[2] = Number(inflAmnt[2] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[2] = (rainDate[2] || 0) + 1;
|
||||
inflAmnt[2] = (inflAmnt[2] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[2] = 0;
|
||||
inflAssctBfrWqltBodCnt[2] = Number(inflAssctBfrWqltBodCnt[2] || 0) + 1;
|
||||
inflAssctBfrWqltBod[2] = Number(inflAssctBfrWqltBod[2] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2104,9 +2142,8 @@ export const dashBoardReducer = (
|
||||
efflWqltTpCnt[2] = Number(efflWqltTpCnt[2] || 0) + 1;
|
||||
efflWqltTp[2] = Number(efflWqltTp[2] || 0) + Number(item.efflWqltTp || 0);
|
||||
} else if (toBeRain >= 20 && toBeRain < 30) {
|
||||
rainDate[3] = Number(rainDate[3] || 0) + 1;
|
||||
inflAmtCnt[3] = Number(inflAmtCnt[3] || 0) + 1;
|
||||
inflAmnt[3] = Number(inflAmnt[3] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[3] = (rainDate[3] || 0) + 1;
|
||||
inflAmnt[3] = (inflAmnt[3] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[3] = 0;
|
||||
inflAssctBfrWqltBodCnt[3] = Number(inflAssctBfrWqltBodCnt[3] || 0) + 1;
|
||||
inflAssctBfrWqltBod[3] = Number(inflAssctBfrWqltBod[3] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2129,9 +2166,8 @@ export const dashBoardReducer = (
|
||||
efflWqltTpCnt[3] = Number(efflWqltTpCnt[3] || 0) + 1;
|
||||
efflWqltTp[3] = Number(efflWqltTp[3] || 0) + Number(item.efflWqltTp || 0);
|
||||
} else if (toBeRain >= 30 && toBeRain < 40) {
|
||||
rainDate[4] = Number(rainDate[4] || 0) + 1;
|
||||
inflAmtCnt[4] = Number(inflAmtCnt[4] || 0) + 1;
|
||||
inflAmnt[4] = Number(inflAmnt[4] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[4] = (rainDate[4] || 0) + 1;
|
||||
inflAmnt[4] = (inflAmnt[4] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[4] = item.inflAmnt && Number(item.inflAmnt) !== 0 ? Number(Math.round(Number(item.inflAmnt) / Number(item.fctCpc) * 10) / 10) : 0;
|
||||
inflAssctBfrWqltBodCnt[4] = Number(inflAssctBfrWqltBodCnt[4] || 0) + 1;
|
||||
inflAssctBfrWqltBod[4] = Number(inflAssctBfrWqltBod[4] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2154,9 +2190,8 @@ export const dashBoardReducer = (
|
||||
efflWqltTpCnt[4] = Number(efflWqltTpCnt[4] || 0) + 1;
|
||||
efflWqltTp[4] = Number(efflWqltTp[4] || 0) + Number(item.efflWqltTp || 0);
|
||||
} else if (toBeRain >= 40 && toBeRain < 50) {
|
||||
rainDate[5] = Number(rainDate[5] || 0) + 1;
|
||||
inflAmtCnt[5] = Number(inflAmtCnt[5] || 0) + 1;
|
||||
inflAmnt[5] = Number(inflAmnt[5] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[5] = (rainDate[5] || 0) + 1;
|
||||
inflAmnt[5] = (inflAmnt[5] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[5] = 0;
|
||||
inflAssctBfrWqltBodCnt[5] = Number(inflAssctBfrWqltBodCnt[5] || 0) + 1;
|
||||
inflAssctBfrWqltBod[5] = Number(inflAssctBfrWqltBod[5] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2179,9 +2214,8 @@ export const dashBoardReducer = (
|
||||
efflWqltTpCnt[5] = Number(efflWqltTpCnt[5] || 0) + 1;
|
||||
efflWqltTp[5] = Number(efflWqltTp[5] || 0) + Number(item.efflWqltTp || 0);
|
||||
} else if (toBeRain >= 50 && toBeRain < 60) {
|
||||
rainDate[6] = Number(rainDate[6] || 0) + 1;
|
||||
inflAmtCnt[6] = Number(inflAmtCnt[6] || 0) + 1;
|
||||
inflAmnt[6] = Number(inflAmnt[6] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[6] = (rainDate[6] || 0) + 1;
|
||||
inflAmnt[6] = (inflAmnt[6] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[6] = 0;
|
||||
inflAssctBfrWqltBodCnt[6] = Number(inflAssctBfrWqltBodCnt[6] || 0) + 1;
|
||||
inflAssctBfrWqltBod[6] = Number(inflAssctBfrWqltBod[6] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2204,9 +2238,8 @@ export const dashBoardReducer = (
|
||||
efflWqltTpCnt[6] = Number(efflWqltTpCnt[6] || 0) + 1;
|
||||
efflWqltTp[6] = Number(efflWqltTp[6] || 0) + Number(item.efflWqltTp || 0);
|
||||
} else if (toBeRain >= 60) {
|
||||
rainDate[7] = Number(rainDate[7] || 0) + 1;
|
||||
inflAmtCnt[7] = Number(inflAmtCnt[7] || 0) + 1;
|
||||
inflAmnt[7] = Number(inflAmnt[7] || 0) + Number(item.inflAmnt || 0);
|
||||
rainDate[7] = (rainDate[7] || 0) + 1;
|
||||
inflAmnt[7] = (inflAmnt[7] || 0) + Number(item.inflAmnt || 0);
|
||||
fcltyCpct[7] = 0;
|
||||
inflAssctBfrWqltBodCnt[7] = Number(inflAssctBfrWqltBodCnt[7] || 0) + 1;
|
||||
inflAssctBfrWqltBod[7] = Number(inflAssctBfrWqltBod[7] || 0) + Number(item.inflAssctBfrWqltBod || 0);
|
||||
@@ -2231,6 +2264,40 @@ export const dashBoardReducer = (
|
||||
}
|
||||
});
|
||||
|
||||
// 유량 = 순수하수 + 연계처리수 + 총인설비반류수
|
||||
const rainEffFlowList: any[] = CalcRainEffect(res2.data, 'RAIN_DAY');
|
||||
totInflAmnt = 0; inflAmnt.fill(0); rainDate.fill(0);
|
||||
rainEffFlowList.forEach((item: any) => { // --일별 유량 start
|
||||
const toBeRain = item.toBeInfoRnDay ? Number(item.toBeInfoRnDay) : 0;
|
||||
const inflAmntOne = item.inflAmnt && item.inflAmnt !== 'x' ? Number(item.inflAmnt.toString().trim()) : 0;
|
||||
const sumFlowOne = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0;
|
||||
const returnAmntOne = item.returnAmnt && item.returnAmnt !== 'x' ? Number(item.returnAmnt.toString().trim()) : 0;
|
||||
const inflowOne = inflAmntOne + sumFlowOne + returnAmntOne;
|
||||
totInflAmnt = totInflAmnt + inflowOne; // 유량합계
|
||||
if (toBeRain >= 3 && toBeRain < 10) {
|
||||
inflAmnt[1] = (inflAmnt[1] || 0) + inflowOne;
|
||||
rainDate[1] = (rainDate[1] || 0) + 1;
|
||||
} else if (toBeRain >= 10 && toBeRain < 20) {
|
||||
inflAmnt[2] = (inflAmnt[2] || 0) + inflowOne;
|
||||
rainDate[2] = (rainDate[2] || 0) + 1;
|
||||
} else if (toBeRain >= 20 && toBeRain < 30) {
|
||||
inflAmnt[3] = (inflAmnt[3] || 0) + inflowOne;
|
||||
rainDate[3] = (rainDate[3] || 0) + 1;
|
||||
} else if (toBeRain >= 30 && toBeRain < 40) {
|
||||
inflAmnt[4] = (inflAmnt[4] || 0) + inflowOne;
|
||||
rainDate[4] = (rainDate[4] || 0) + 1;
|
||||
} else if (toBeRain >= 40 && toBeRain < 50) {
|
||||
inflAmnt[5] = (inflAmnt[5] || 0) + inflowOne;
|
||||
rainDate[5] = (rainDate[5] || 0) + 1;
|
||||
} else if (toBeRain >= 50 && toBeRain < 60) {
|
||||
inflAmnt[6] = (inflAmnt[6] || 0) + inflowOne;
|
||||
rainDate[6] = (rainDate[6] || 0) + 1;
|
||||
} else if (toBeRain >= 60) {
|
||||
inflAmnt[7] = (inflAmnt[7] || 0) + inflowOne;
|
||||
rainDate[7] = (rainDate[7] || 0) + 1;
|
||||
}
|
||||
}); // --일별 유량 end
|
||||
|
||||
// Process the data and create rain management list
|
||||
if (res.data && res.data.dsWqltObjs && res.data.dsWqltObjs.length > 0) {
|
||||
// 설계 유입수질 데이터 가져오기 - 0값이 있으면 이전 차수에서 가져오기
|
||||
@@ -2289,16 +2356,8 @@ export const dashBoardReducer = (
|
||||
return count > 0 ? Number((value / count)) : 0;
|
||||
};
|
||||
|
||||
// // 데이터 있는 항목만 계산
|
||||
// let dataIsCount = 0;
|
||||
// for (let idx = 0; idx < inflAmnt.length; idx++) {
|
||||
// if (Number(inflAmnt[idx]) > 0) {
|
||||
// dataIsCount++;
|
||||
// }
|
||||
// }
|
||||
|
||||
for (let idx = 1; idx < inflAmnt.length; idx++) {
|
||||
inflAmnt[idx] = calculateAverage(Number(inflAmnt[idx]), Number(inflAmtCnt[idx]));
|
||||
inflAmnt[idx] = rainDate[idx] ? Math.round((inflAmnt[idx] || 0) / (rainDate[idx] || 0)) : 0;
|
||||
inflAssctBfrWqltBod[idx] = calculateAverage(Number(inflAssctBfrWqltBod[idx]), Number(inflAssctBfrWqltBodCnt[idx]));
|
||||
inflAssctBfrWqltToc[idx] = calculateAverage(Number(inflAssctBfrWqltToc[idx]), Number(inflAssctBfrWqltTocCnt[idx]));
|
||||
inflAssctBfrWqltSs[idx] = calculateAverage(Number(inflAssctBfrWqltSs[idx]), Number(inflAssctBfrWqltSsCnt[idx]));
|
||||
@@ -2316,8 +2375,9 @@ export const dashBoardReducer = (
|
||||
return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0)));
|
||||
};
|
||||
|
||||
|
||||
// console.log(totInflAmnt);
|
||||
inflAmnt[0] = calculateAverage(totInflAmnt, totItemCnt);
|
||||
inflAmnt[0] = Math.round((totInflAmnt / totItemCnt)); // calculateAverage(totInflAmnt, totItemCnt);
|
||||
fcltyCpct[0] = calculateTotal(fcltyCpct);
|
||||
inflAssctBfrWqltBod[0] = Number((Math.round((totInflAssctBfrWqltBod / totItemCnt) * 10) / 10).toFixed(1));
|
||||
inflAssctBfrWqltToc[0] = Number((Math.round((totInflAssctBfrWqltToc / totItemCnt) * 10) / 10).toFixed(1));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { getFetch } from "@/app/components/api";
|
||||
import type { TableUpperProps } from "../dashboard";
|
||||
import DataForm, { roundNumber } from "@/app/components/common/DataForm";
|
||||
import DataForm from "@/app/components/common/DataForm";
|
||||
import CalcRainEffect from "@/app/components/common/CalcRainEffect";
|
||||
import { fetchFacilityWaterQltyListHist } from "../facilityWaterQlty";
|
||||
import CommaToNumber from "@/app/components/common/CommaToNumber";
|
||||
@@ -12,34 +12,34 @@ import CommaToNumber from "@/app/components/common/CommaToNumber";
|
||||
/**
|
||||
* (1) 메인페이지
|
||||
*/
|
||||
const FlowRateSearchLabelArray:string[] = ['구분', '시도', '시군구', '용량별', '시설명', '조회기간', '시설상태', '권역', '단위유역', '중권역', '환경청별'];
|
||||
const FlowRateSearchLabelArray: string[] = ['구분', '시도', '시군구', '용량별', '시설명', '조회기간', '시설상태', '권역', '단위유역', '중권역', '환경청별'];
|
||||
|
||||
export type flowRateListProps = {
|
||||
bscFctCd : string,
|
||||
sido : string,
|
||||
gugun : string,
|
||||
bscFctNm : string,
|
||||
daddr : string,
|
||||
fctCpc : number,
|
||||
lclgvrnmntNm : string,
|
||||
totInflAmnt : number | '',
|
||||
inflAmnt : number | '',
|
||||
sumFlow : number | '',
|
||||
returnAmnt : number | '',
|
||||
efflAmnt : number | '',
|
||||
rgnNm : string,
|
||||
rvbsn : string,
|
||||
lgbsn : string,
|
||||
mdmbsn : string,
|
||||
infoRnDay : number | '',
|
||||
bscFctCd: string,
|
||||
sido: string,
|
||||
gugun: string,
|
||||
bscFctNm: string,
|
||||
daddr: string,
|
||||
fctCpc: number,
|
||||
lclgvrnmntNm: string,
|
||||
totInflAmnt: number | '',
|
||||
inflAmnt: number | '',
|
||||
sumFlow: number | '',
|
||||
returnAmnt: number | '',
|
||||
efflAmnt: number | '',
|
||||
rgnNm: string,
|
||||
rvbsn: string,
|
||||
lgbsn: string,
|
||||
mdmbsn: string,
|
||||
infoRnDay: number | '',
|
||||
}
|
||||
|
||||
export interface ExcelType {
|
||||
시설코드: string,
|
||||
권역:string|'',
|
||||
단위유역:string|'',
|
||||
중권역:string|'',
|
||||
환경청:string|'',
|
||||
권역: string | '',
|
||||
단위유역: string | '',
|
||||
중권역: string | '',
|
||||
환경청: string | '',
|
||||
시도: string,
|
||||
시군구: string,
|
||||
시설이름: string,
|
||||
@@ -66,105 +66,105 @@ export type modalExcelType = {
|
||||
* (2) 모달
|
||||
*/
|
||||
export interface FlowRateModalInterface {
|
||||
msrDt : string,
|
||||
totInflAmnt : number | '',
|
||||
inflAmnt : number | '',
|
||||
sumFlow : number | '',
|
||||
returnAmnt : number | '',
|
||||
efflAmnt : number | '',
|
||||
infoRnDay : number | string | '',
|
||||
rainEffectDay : number | string | '' ,
|
||||
noProcessInflAmnt : number | string | ''
|
||||
msrDt: string,
|
||||
totInflAmnt: number | '',
|
||||
inflAmnt: number | '',
|
||||
sumFlow: number | '',
|
||||
returnAmnt: number | '',
|
||||
efflAmnt: number | '',
|
||||
infoRnDay: number | string | '',
|
||||
rainEffectDay: number | string | '',
|
||||
noProcessInflAmnt: number | string | ''
|
||||
}
|
||||
export type FlowRateModalProps = {
|
||||
msrDt : string,
|
||||
totInflAmnt : number,
|
||||
inflAmnt : number,
|
||||
sumFlow : number,
|
||||
returnAmnt : number,
|
||||
efflAmnt : number,
|
||||
infoRnDay : number | string | '',
|
||||
rainEffectDay : number | string | '',
|
||||
noProcessInflAmnt : number | string | ''
|
||||
msrDt: string,
|
||||
totInflAmnt: number,
|
||||
inflAmnt: number,
|
||||
sumFlow: number,
|
||||
returnAmnt: number,
|
||||
efflAmnt: number,
|
||||
infoRnDay: number | string | '',
|
||||
rainEffectDay: number | string | '',
|
||||
noProcessInflAmnt: number | string | ''
|
||||
}
|
||||
|
||||
/**====================================
|
||||
* Store - data
|
||||
====================================*/
|
||||
|
||||
/**
|
||||
* (1) 메인페이지
|
||||
*/
|
||||
/**
|
||||
* (1) 메인페이지
|
||||
*/
|
||||
// 리스트 (행정별)
|
||||
const upHeadList1:TableUpperProps[] = [
|
||||
const upHeadList1: TableUpperProps[] = [
|
||||
{ id: "A", title: "행정명", row: 0, colSpan: 2, widthPercent: 16 },
|
||||
{ id: "sido", title: "시도", upName:"upChangeRe", row:1, widthPercent: 8 },
|
||||
{ id: "gugun", title: "시군구", upName:"upChangeRe", row:1, widthPercent: 8 },
|
||||
{ id: "bscFctNm", title: "시설명", row: 0, rowSpan: 2, widthPercent: 10},
|
||||
{ id: "sido", title: "시도", upName: "upChangeRe", row: 1, widthPercent: 8 },
|
||||
{ id: "gugun", title: "시군구", upName: "upChangeRe", row: 1, widthPercent: 8 },
|
||||
{ id: "bscFctNm", title: "시설명", row: 0, rowSpan: 2, widthPercent: 10 },
|
||||
{ id: "daddr", title: "주소", row: 0, rowSpan: 2 },
|
||||
{ id: "fctCpc", title: "시설용량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "totInflAmnt", title: "총 유입량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "inflAmnt", title: "하수유입량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "sumFlow", title: '연계처리량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "returnAmnt", title: '총인 반류수량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "efflAmnt", title: '방류량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 }
|
||||
{ id: "fctCpc", title: "시설용량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "totInflAmnt", title: "총 유입량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "inflAmnt", title: "하수유입량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "sumFlow", title: '연계처리량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "returnAmnt", title: '총인 반류수량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "efflAmnt", title: '방류량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 }
|
||||
];
|
||||
|
||||
// 리스트 (권역별)
|
||||
const upHeadList2:TableUpperProps[] = [
|
||||
const upHeadList2: TableUpperProps[] = [
|
||||
{ id: "A", title: "유역", row: 0, colSpan: 3, widthPercent: 24 },
|
||||
{ id: "rvbsn", title: "권역", upName:"upChangeRe", row:1, widthPercent: 8 },
|
||||
{ id: "lgbsn", title: "단위유역", upName:"upChangeRe", row:1, widthPercent: 8 },
|
||||
{ id: "mdmbsn", title: "중권역", upName:"upChangeRe", row:1, widthPercent: 8 },
|
||||
{ id: "rvbsn", title: "권역", upName: "upChangeRe", row: 1, widthPercent: 8 },
|
||||
{ id: "lgbsn", title: "단위유역", upName: "upChangeRe", row: 1, widthPercent: 8 },
|
||||
{ id: "mdmbsn", title: "중권역", upName: "upChangeRe", row: 1, widthPercent: 8 },
|
||||
{ id: "bscFctNm", title: "시설명", row: 0, rowSpan: 2, widthPercent: 10 },
|
||||
{ id: "daddr", title: "주소", row: 0, rowSpan: 2 },
|
||||
{ id: "fctCpc", title: "시설용량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 10 },
|
||||
{ id: "totInflAmnt", title: "총 유입량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "inflAmnt", title: "하수유입량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "sumFlow", title: '연계처리량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "returnAmnt", title: '총인 반류수량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "efflAmnt", title: '방류량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 }
|
||||
{ id: "fctCpc", title: "시설용량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 10 },
|
||||
{ id: "totInflAmnt", title: "총 유입량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "inflAmnt", title: "하수유입량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "sumFlow", title: '연계처리량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "returnAmnt", title: '총인 반류수량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "efflAmnt", title: '방류량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 }
|
||||
];
|
||||
|
||||
// 리스트 (환경청별별)
|
||||
const upHeadList3:TableUpperProps[] = [
|
||||
const upHeadList3: TableUpperProps[] = [
|
||||
{ id: "A", title: "유역", row: 0, colSpan: 3, widthPercent: 15 },
|
||||
{ id: "rvbsn", title: "권역", upName:"upChangeRe1", row:1, widthPercent: 5 },
|
||||
{ id: "lgbsn", title: "단위유역", upName:"upChangeRe1", row:1, widthPercent: 5 },
|
||||
{ id: "mdmbsn", title: "중권역", upName:"upChangeRe1", row:1, widthPercent: 5 },
|
||||
{ id: "rgnNm", title: "환경청", row:0, rowSpan:2, widthPercent: 7 },
|
||||
{ id: "B", title: "행정명", row: 0 ,colSpan: 2, widthPercent: 10 },
|
||||
{ id: "sido", title: "시도", upName:"upChangeRe2", row:1, widthPercent: 5 },
|
||||
{ id: "gugun", title: "시군구", upName:"upChangeRe2", row:1, widthPercent: 5 },
|
||||
{ id: "rvbsn", title: "권역", upName: "upChangeRe1", row: 1, widthPercent: 5 },
|
||||
{ id: "lgbsn", title: "단위유역", upName: "upChangeRe1", row: 1, widthPercent: 5 },
|
||||
{ id: "mdmbsn", title: "중권역", upName: "upChangeRe1", row: 1, widthPercent: 5 },
|
||||
{ id: "rgnNm", title: "환경청", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "B", title: "행정명", row: 0, colSpan: 2, widthPercent: 10 },
|
||||
{ id: "sido", title: "시도", upName: "upChangeRe2", row: 1, widthPercent: 5 },
|
||||
{ id: "gugun", title: "시군구", upName: "upChangeRe2", row: 1, widthPercent: 5 },
|
||||
{ id: "bscFctNm", title: "시설명", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "daddr", title: "주소", row: 0, rowSpan: 2 },
|
||||
{ id: "fctCpc", title: "시설용량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "totInflAmnt", title: "총 유입량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "inflAmnt", title: "하수유입량\n(m³/일)", align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "sumFlow", title: '연계처리량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "returnAmnt", title: '총인 반류수량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "efflAmnt", title: '방류량\n(m³/일)', align:"right", row: 0, rowSpan: 2, widthPercent: 7 }
|
||||
{ id: "fctCpc", title: "시설용량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "totInflAmnt", title: "총 유입량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "inflAmnt", title: "하수유입량\n(m³/일)", align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "sumFlow", title: '연계처리량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "returnAmnt", title: '총인 반류수량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 },
|
||||
{ id: "efflAmnt", title: '방류량\n(m³/일)', align: "right", row: 0, rowSpan: 2, widthPercent: 7 }
|
||||
];
|
||||
|
||||
const flowRateList:flowRateListProps[] = [
|
||||
const flowRateList: flowRateListProps[] = [
|
||||
]
|
||||
|
||||
/**
|
||||
* (2) 모달
|
||||
*/
|
||||
|
||||
const upHeadListFlowRateModal:TableUpperProps[] = [
|
||||
{ id: "msrDt", title: "날짜"},
|
||||
{ id: "totInflAmnt", title: "총 유입량(m³/일)", align:"right"},
|
||||
{ id: "inflAmnt", title: "하수유입량(m³/일)", align:"right"},
|
||||
{ id: "sumFlow", title: "연계처리량(m³/일)", align:"right"},
|
||||
{ id: "returnAmnt", title: "총인 반류수량(m³/일)", align:"right"},
|
||||
{ id: "efflAmnt", title: "방류량(m³/일)", align:"right"},
|
||||
{ id: "noProcessInflAmnt", title: "미처리하수 추정량(m³/일)", align:"right"},
|
||||
{ id: "infoRnDay", title: "강우량(mm/일)", align:"right"}
|
||||
const upHeadListFlowRateModal: TableUpperProps[] = [
|
||||
{ id: "msrDt", title: "날짜" },
|
||||
{ id: "totInflAmnt", title: "총 유입량(m³/일)", align: "right" },
|
||||
{ id: "inflAmnt", title: "하수유입량(m³/일)", align: "right" },
|
||||
{ id: "sumFlow", title: "연계처리량(m³/일)", align: "right" },
|
||||
{ id: "returnAmnt", title: "총인 반류수량(m³/일)", align: "right" },
|
||||
{ id: "efflAmnt", title: "방류량(m³/일)", align: "right" },
|
||||
{ id: "noProcessInflAmnt", title: "미처리하수 추정량(m³/일)", align: "right" },
|
||||
{ id: "infoRnDay", title: "강우량(mm/일)", align: "right" }
|
||||
]
|
||||
|
||||
const modalFlowRateListYear:FlowRateModalProps[] = [
|
||||
const modalFlowRateListYear: FlowRateModalProps[] = [
|
||||
]
|
||||
|
||||
/**====================================
|
||||
@@ -172,12 +172,13 @@ const modalFlowRateListYear:FlowRateModalProps[] = [
|
||||
====================================*/
|
||||
const fetchFlowRateList = async (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => {
|
||||
try {
|
||||
const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : '';
|
||||
const tailStr = partCd ? '/' + partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : '';
|
||||
const url = '/fclt/flow/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr;
|
||||
const res = await getFetch('fo', url);
|
||||
return { data: res.data, count: res.count }
|
||||
} catch (error) {
|
||||
console.error('시설정보 유량현황 데이터를 가져오는데 실패했습니다:', error);
|
||||
console.log(error);
|
||||
return { data: [], count: 0 };
|
||||
}
|
||||
}
|
||||
@@ -186,12 +187,12 @@ export const fetchFlowRateModalList = async (bscFctCd: string, searchYear: strin
|
||||
try {
|
||||
const url = '/fclt/flow/' + bscFctCd + '/' + searchYear;
|
||||
const res = await getFetch('fo', url);
|
||||
|
||||
|
||||
// msrDt 오름차순으로 정렬
|
||||
const sortedData = res.data.sort((a: FlowRateModalInterface, b: FlowRateModalInterface) => {
|
||||
return new Date(a.msrDt).getTime() - new Date(b.msrDt).getTime();
|
||||
});
|
||||
|
||||
|
||||
return { data: sortedData }
|
||||
} catch (error) {
|
||||
console.error('시설정보 유량현황 모달 데이터를 가져오는데 실패했습니다:', error);
|
||||
@@ -206,69 +207,69 @@ export const fetchFlowRateModalList = async (bscFctCd: string, searchYear: strin
|
||||
|
||||
export type FlowRateSearchActions = {
|
||||
searchFlowRateList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void;
|
||||
|
||||
searchFlowRateModalList : (bscFctCd: string, searchYear: string) => void;
|
||||
|
||||
searchFlowRateModalList: (bscFctCd: string, searchYear: string) => void;
|
||||
}
|
||||
|
||||
export type FlowRateSearchType = {
|
||||
FlowRateSearch: {
|
||||
isInit: boolean;
|
||||
flowRateSearchLabelArray:string[];
|
||||
flowRateSearchLabelArray: string[];
|
||||
},
|
||||
|
||||
FlowRateList : {
|
||||
isInit : boolean;
|
||||
FlowRateList: {
|
||||
isInit: boolean;
|
||||
upHeadList1: TableUpperProps[];
|
||||
upHeadList2: TableUpperProps[];
|
||||
upHeadList3: TableUpperProps[];
|
||||
flowRateList:flowRateListProps[];
|
||||
flowRateList: flowRateListProps[];
|
||||
flowRateCount: number;
|
||||
excelList: ExcelType[];
|
||||
isLoading: boolean;
|
||||
},
|
||||
|
||||
FlowRateModal : {
|
||||
isInit : boolean;
|
||||
modalFlowRateListYear : FlowRateModalProps[];
|
||||
upHeadListFlowRateModalYear : TableUpperProps[];
|
||||
FlowRateModal: {
|
||||
isInit: boolean;
|
||||
modalFlowRateListYear: FlowRateModalProps[];
|
||||
upHeadListFlowRateModalYear: TableUpperProps[];
|
||||
}
|
||||
}
|
||||
|
||||
export type FlowRateSearchStore = FlowRateSearchType & FlowRateSearchActions;
|
||||
|
||||
const dataFormSetting=(item : flowRateListProps | FlowRateModalProps)=> {
|
||||
const dataFormSetting = (item: flowRateListProps | FlowRateModalProps) => {
|
||||
DataForm({ type: 'date', column: 'msrDt', item: item as unknown as Record<string, unknown> });
|
||||
DataForm({ type: 'float0', column: 'totInflAmnt', item: item as unknown as Record<string, unknown>});
|
||||
DataForm({ type: 'float0', column: 'inflAmnt', item: item as unknown as Record<string, unknown>});
|
||||
DataForm({ type: 'float0', column: 'sumFlow', item: item as unknown as Record<string, unknown>});
|
||||
DataForm({ type: 'float0', column: 'efflWqltBod', item: item as unknown as Record<string, unknown>});
|
||||
DataForm({ type: 'float0', column: 'returnAmnt', item: item as unknown as Record<string, unknown>});
|
||||
DataForm({ type: 'float0', column: 'efflAmnt', item: item as unknown as Record<string, unknown>});
|
||||
DataForm({ type: 'float0', column: 'totInflAmnt', item: item as unknown as Record<string, unknown> });
|
||||
DataForm({ type: 'float0', column: 'inflAmnt', item: item as unknown as Record<string, unknown> });
|
||||
DataForm({ type: 'float0', column: 'sumFlow', item: item as unknown as Record<string, unknown> });
|
||||
DataForm({ type: 'float0', column: 'efflWqltBod', item: item as unknown as Record<string, unknown> });
|
||||
DataForm({ type: 'float0', column: 'returnAmnt', item: item as unknown as Record<string, unknown> });
|
||||
DataForm({ type: 'float0', column: 'efflAmnt', item: item as unknown as Record<string, unknown> });
|
||||
}
|
||||
|
||||
export const flowRateSearchInitState:FlowRateSearchType = {
|
||||
export const flowRateSearchInitState: FlowRateSearchType = {
|
||||
FlowRateSearch: {
|
||||
isInit: false,
|
||||
flowRateSearchLabelArray: FlowRateSearchLabelArray,
|
||||
},
|
||||
FlowRateList : {
|
||||
isInit : false,
|
||||
upHeadList1 : upHeadList1,
|
||||
upHeadList2 : upHeadList2,
|
||||
upHeadList3 : upHeadList3,
|
||||
flowRateList : flowRateList,
|
||||
flowRateCount : 0,
|
||||
FlowRateList: {
|
||||
isInit: false,
|
||||
upHeadList1: upHeadList1,
|
||||
upHeadList2: upHeadList2,
|
||||
upHeadList3: upHeadList3,
|
||||
flowRateList: flowRateList,
|
||||
flowRateCount: 0,
|
||||
excelList: [],
|
||||
isLoading: true,
|
||||
},
|
||||
FlowRateModal : {
|
||||
isInit : false,
|
||||
upHeadListFlowRateModalYear : upHeadListFlowRateModal,
|
||||
modalFlowRateListYear : modalFlowRateListYear,
|
||||
FlowRateModal: {
|
||||
isInit: false,
|
||||
upHeadListFlowRateModalYear: upHeadListFlowRateModal,
|
||||
modalFlowRateListYear: modalFlowRateListYear,
|
||||
}
|
||||
}
|
||||
|
||||
export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => FlowRateSearchType) => void)=>FlowRateSearchActions=(set: (fn: (state: FlowRateSearchType) => FlowRateSearchType) => void) => {
|
||||
export const flowRateSearchReducer: (set: (fn: (state: FlowRateSearchType) => FlowRateSearchType) => void) => FlowRateSearchActions = (set: (fn: (state: FlowRateSearchType) => FlowRateSearchType) => void) => {
|
||||
return {
|
||||
searchFlowRateList: async (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => {
|
||||
set((state: FlowRateSearchType) => ({
|
||||
@@ -288,7 +289,7 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow
|
||||
return item;
|
||||
});
|
||||
|
||||
if(pageSize>5000){
|
||||
if (pageSize > 5000) {
|
||||
rtnData.forEach((item: flowRateListProps) => {
|
||||
excelDownList.push({
|
||||
시설코드: item.bscFctCd,
|
||||
@@ -312,15 +313,15 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow
|
||||
|
||||
set((state: FlowRateSearchType) => ({
|
||||
...state,
|
||||
FlowRateList: pageSize<5000?{
|
||||
FlowRateList: pageSize < 5000 ? {
|
||||
...state.FlowRateList,
|
||||
flowRateList: rtnData,
|
||||
flowRateCount: res.count,
|
||||
isLoading : false,
|
||||
}:{
|
||||
isLoading: false,
|
||||
} : {
|
||||
...state.FlowRateList,
|
||||
excelList: excelDownList,
|
||||
isLoading : false,
|
||||
isLoading: false,
|
||||
},
|
||||
}))
|
||||
},
|
||||
@@ -336,37 +337,37 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow
|
||||
/강우시 일별유입BOD)
|
||||
*/
|
||||
//let rainInflAmnt = 0;
|
||||
let sunnyInflAmnt = 0;
|
||||
let sunnyBod = 0;
|
||||
let sunnyInflAmnt = 0; // 청천시 일별유입유량
|
||||
let sunnyBod = 0; // 청천시 일별유입BOD
|
||||
//let rainDay = 0;
|
||||
let sunnyDay = 0;
|
||||
|
||||
inflData.forEach(item => {
|
||||
if(item.rainEffectDay == 1){
|
||||
if (item.rainEffectDay == 1) {
|
||||
//rainDay += 1;
|
||||
//rainInflAmnt += Number(item.inflAmnt);
|
||||
} else {
|
||||
const msrDt = item.msrDt.replaceAll('-','');
|
||||
const msrDt = item.msrDt.replaceAll('-', '');
|
||||
sunnyDay += 1;
|
||||
sunnyInflAmnt += Number(item.inflAmnt);
|
||||
sunnyBod += Number(wqltData.filter((wqitem)=>wqitem.msrDt === msrDt)[0].inflAssctBfrWqltBod);
|
||||
sunnyBod += Number(wqltData.filter((wqitem) => wqitem.msrDt === msrDt)[0].inflAssctBfrWqltBod);
|
||||
}
|
||||
});
|
||||
|
||||
//const yearRainAmnt = rainInflAmnt===0?0:rainInflAmnt / rainDay;
|
||||
const yearSunnyAmnt = sunnyInflAmnt===0?0:sunnyInflAmnt / sunnyDay;
|
||||
const yearSunnyBod = sunnyBod===0?0:sunnyBod / sunnyDay;
|
||||
|
||||
const yearSunnyAmnt = sunnyInflAmnt === 0 ? 0 : sunnyInflAmnt / sunnyDay; // 청천시 연평균유입유량
|
||||
const yearSunnyBod = sunnyBod === 0 ? 0 : sunnyBod / sunnyDay; // 청천시 연평균유입BOD
|
||||
|
||||
const rtnData = inflData.map((item: FlowRateModalProps) => {
|
||||
const dayBod = Number(wqltData.filter(wqitem=>wqitem.msrDt === item.msrDt.replaceAll('-',''))[0].inflAssctBfrWqltBod);
|
||||
const noProcessInflAmnt = roundNumber(((Number(item.inflAmnt) * dayBod) - (yearSunnyAmnt * yearSunnyBod)) / dayBod, 0)
|
||||
|
||||
const dayBod = Number(wqltData.filter(wqitem => wqitem.msrDt === item.msrDt.replaceAll('-', ''))[0].inflAssctBfrWqltBod);
|
||||
const noProcessInflAmnt = Math.round(((Number(item.inflAmnt) * dayBod) - (yearSunnyAmnt * yearSunnyBod)) / dayBod)
|
||||
|
||||
item.totInflAmnt = Number(item.inflAmnt || 0) + Number(item.sumFlow || 0) + Number(item.returnAmnt || 0);
|
||||
item.noProcessInflAmnt = noProcessInflAmnt && Number(noProcessInflAmnt.replaceAll(',','')) > 0 ? noProcessInflAmnt : '';
|
||||
item.noProcessInflAmnt = noProcessInflAmnt && noProcessInflAmnt > 0 ? noProcessInflAmnt : '';
|
||||
dataFormSetting(item);
|
||||
return item;
|
||||
});
|
||||
|
||||
|
||||
set((state: FlowRateSearchType) => ({
|
||||
...state,
|
||||
FlowRateModal: {
|
||||
|
||||
Reference in New Issue
Block a user