From 055d0bef16024c501d9b21ec25d54056b4d6d62f Mon Sep 17 00:00:00 2001 From: jsyang Date: Mon, 11 Aug 2025 14:50:52 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EC=98=A4=ED=83=80=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=EA=B5=AC=EC=97=AD=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/dashboard/index.tsx | 14 ++--- apps/fo/app/store/processArea/index.tsx | 79 +++++++++++++------------ apps/fo/app/store/sewageOccur/index.tsx | 4 +- 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b23006c10..b16cb8e87 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -1068,8 +1068,8 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) let minDiff=9999999; let minIndex; res.forEach((el:any, idx) => { - if(minDiff>Math.abs(Number(targetYear) - Number(el.yr))){ - minDiff=Math.abs(Number(targetYear) - Number(el.yr)); + if(minDiff>Math.abs(Number(targetYear) - Number(el.planYr))){ + minDiff=Math.abs(Number(targetYear) - Number(el.planYr)); minIndex=idx; } }); @@ -1078,11 +1078,11 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) planFcltyList.map((el, index) => { planYearList = []; - planYearList.push(rtnPlanData?rtnPlanData.yrDt4.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc1.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc2.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc3.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc4.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDt4.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc1.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc2.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc3.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc4.toString():""); if(index === 0){ el.provisionalApproval = rtnPlanData?rtnPlanData.planSwageQntSumDt4:''; diff --git a/apps/fo/app/store/processArea/index.tsx b/apps/fo/app/store/processArea/index.tsx index 049341d23..50fc25fc6 100644 --- a/apps/fo/app/store/processArea/index.tsx +++ b/apps/fo/app/store/processArea/index.tsx @@ -19,12 +19,12 @@ export type ProcessAreaProps = { location : string, fctCpc : number | '', ruse : boolean, - yrDt4 : string, - yr : string, - yrDc1 : string, - yrDc2 : string, - yrDc3 : string, - yrDc4 : string, + planYrDt4 : string, + planYr : string, + planYrDc1 : string, + planYrDc2 : string, + planYrDc3 : string, + planYrDc4 : string, /** * 증설계획 */ @@ -236,17 +236,17 @@ const fetchProcessAreaList = async (pageNo : number, pageSize : number, ctpvNm : res.map(async (item: ProcessAreaProps) => { upHeadList1.forEach((head:TableUpperProps) => { /* if (head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = '현재\n(' + item.yr + '년)'; + head.title = '현재\n(' + item.planYr + '년)'; } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = '1단계\n(' + item.yrDc1 + '년)'; + head.title = '1단계\n(' + item.planYrDc1 + '년)'; } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = '2단계\n(' + item.yrDc2 + '년)'; + head.title = '2단계\n(' + item.planYrDc2 + '년)'; } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = '3단계\n(' + item.yrDc3 + '년)'; + head.title = '3단계\n(' + item.planYrDc3 + '년)'; } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = '4단계\n(' + item.yrDc4 + '년)'; + head.title = '4단계\n(' + item.planYrDc4 + '년)'; } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = '기승인\n4단계(' + item.yrDt4 + '년)'; + head.title = '기승인\n4단계(' + item.planYrDt4 + '년)'; } */ if (head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { head.title = '현재'; @@ -431,52 +431,53 @@ export const processAreaReducer:(set:SetStateFunction)=>ProcessAreaActions=(set: initModalData: async (swtrmtFcltCd:string) => { set((state: ProcessAreaType) => { const rtnData = state.ProcessArea.processAreaList.find((item: ProcessAreaProps) => item.swtrmtFcltCd === swtrmtFcltCd); + console.log('initModalData', rtnData); if (rtnData) { - upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => { - if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = rtnData.yr? '현재\n(' + rtnData.yr + '년)':head.title = '현재'; - } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = rtnData.yrDc1? '1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계'; - } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = rtnData.yrDc2? '2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계'; - } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = rtnData.yrDc3? '3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계'; - } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = rtnData.yrDc4? '4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계'; - } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = rtnData.yrDt4? '기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계'; - } - }); + upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => { + if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { + head.title = rtnData.planYr? '현재\n(' + rtnData.planYr + '년)':head.title = '현재'; + } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { + head.title = rtnData.planYrDc1? '1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계'; + } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { + head.title = rtnData.planYrDc2? '2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계'; + } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { + head.title = rtnData.planYrDc3? '3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계'; + } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { + head.title = rtnData.planYrDc4? '4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계'; + } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { + head.title = rtnData.planYrDt4? '기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계'; + } + }); upHeadListProcessAreaPlan.forEach((head:TableUpperProps) => { if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = rtnData.yr? '현재\n(' + rtnData.yr + '년)':head.title = '현재'; + head.title = rtnData.planYr? '현재\n(' + rtnData.planYr + '년)':head.title = '현재'; } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = rtnData.yrDc1?'1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계'; + head.title = rtnData.planYrDc1?'1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계'; } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = rtnData.yrDc2?'2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계'; + head.title = rtnData.planYrDc2?'2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계'; } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = rtnData.yrDc3? '3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계'; + head.title = rtnData.planYrDc3? '3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계'; } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = rtnData.yrDc4?'4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계'; + head.title = rtnData.planYrDc4?'4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계'; } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = rtnData.yrDt4?'기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계'; + head.title = rtnData.planYrDt4?'기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계'; } }); upHeadListProcessPopulation.forEach((head:TableUpperProps) => { if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = rtnData.yr?'현재\n(' + rtnData.yr + '년)':head.title = '현재'; + head.title = rtnData.planYr?'현재\n(' + rtnData.planYr + '년)':head.title = '현재'; } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = rtnData.yrDc1?'1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계'; + head.title = rtnData.planYrDc1?'1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계'; } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = rtnData.yrDc2?'2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계'; + head.title = rtnData.planYrDc2?'2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계'; } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = rtnData.yrDc3?'3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계'; + head.title = rtnData.planYrDc3?'3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계'; } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = rtnData.yrDc4?'4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계'; + head.title = rtnData.planYrDc4?'4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계'; } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = rtnData.yrDt4?'기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계'; + head.title = rtnData.planYrDt4?'기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계'; } }); diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index f97520d17..a7dc20b1e 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -312,8 +312,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { 중권역: item.mdmbsn, 환경청: item.rgnNm, 시설명: item.bscFctNm, - 시도: item.sido, - 시군구: item.sigungo, + 시도: item.sidoNm, + 시군구: item.sggNm, 주소: item.daddr, 시설용량: item.fctCpc, 물사용량: item.waterUsage, From a6bb1bc66346d88dc6480ee8c4983c17697131db Mon Sep 17 00:00:00 2001 From: jsyang Date: Mon, 11 Aug 2025 17:51:32 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EC=BD=98=EC=86=94=EC=A0=9C=EA=B1=B0,=20?= =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20=EB=85=84=EB=8F=84=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/dashboard/index.tsx | 5 ++--- apps/fo/app/store/processArea/index.tsx | 1 - apps/fo/app/store/sewageOccur/index.tsx | 13 ++----------- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b16cb8e87..b526195ff 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -1075,10 +1075,10 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) }); const rtnPlanData = res[minIndex]; - planFcltyList.map((el, index) => { planYearList = []; planYearList.push(rtnPlanData?rtnPlanData.planYrDt4.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYr.toString():""); planYearList.push(rtnPlanData?rtnPlanData.planYrDc1.toString():""); planYearList.push(rtnPlanData?rtnPlanData.planYrDc2.toString():""); planYearList.push(rtnPlanData?rtnPlanData.planYrDc3.toString():""); @@ -1114,14 +1114,13 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 임시시 dataFormSettingPlan(el); - console.log('planFcltyList', planFcltyList); - console.log('rtnPlanData', rtnPlanData); set((state: DashBoardType) => ({ ...state, PlanFclty: { ...state.PlanFclty, planFcltyList: planFcltyList, isLoadingPlanFclty: false, + planYearList: planYearList, }, })); }); diff --git a/apps/fo/app/store/processArea/index.tsx b/apps/fo/app/store/processArea/index.tsx index 50fc25fc6..0aa655246 100644 --- a/apps/fo/app/store/processArea/index.tsx +++ b/apps/fo/app/store/processArea/index.tsx @@ -431,7 +431,6 @@ export const processAreaReducer:(set:SetStateFunction)=>ProcessAreaActions=(set: initModalData: async (swtrmtFcltCd:string) => { set((state: ProcessAreaType) => { const rtnData = state.ProcessArea.processAreaList.find((item: ProcessAreaProps) => item.swtrmtFcltCd === swtrmtFcltCd); - console.log('initModalData', rtnData); if (rtnData) { upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => { if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index a7dc20b1e..6ec97d8ff 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -129,7 +129,6 @@ const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : ''; const url = '/fclt/flow/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr; const res = await getFetch('fo', url); - console.log("res", res.data); return { data: res.data, count: res.count } /* @@ -237,10 +236,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { let sumChungcunDay = 0; let chungcunSumFlow = 0; let totWaterUsage = 0; - - if(bscFctCd === '11200PB001R'){ - console.log('res2.data : ',res2.data); - } + // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일) for(let idx = 0; idx < res2.data.length; idx++) { const item = res2.data[idx]; @@ -281,10 +277,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { } } } - - if(bscFctCd === '11200PB001R'){ - console.log('calData : ',res2.data); - } res2.data.forEach((item: FlowDataItem) => { @@ -345,7 +337,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const monthData: SewageOccurDetailProps[] = []; let tot = 0, cnt= 0; - console.log('startYearMonth : ', startYearMonth, 'endYearMonth : ', endYearMonth); if(startYearMonth) { res.data = res.data.filter((item: FlowDataItem) => { const month = item.msrDt?.substring(0, 6); @@ -373,7 +364,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { tot += Number(item.inflAmnt) cnt++ }) - console.log('tot', tot, cnt, tot/cnt, tot/cnt*0.65); + const tableData:modalTableType[] = [] let maxWaterUsage = 0; From 4941593bb070a0db974bce3733d757af6fc29a1a Mon Sep 17 00:00:00 2001 From: jsyang Date: Mon, 11 Aug 2025 22:13:37 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20?= =?UTF-8?q?=EC=97=B0=EA=B3=84=EC=B2=98=EB=A6=AC=EC=88=98=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=EC=99=84=EB=A3=8C,=20=EB=8C=80=EC=8B=9C=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EC=A4=80=EB=85=84=EB=8F=84=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(with-layout)/flowRate/modal/page.tsx | 5 + apps/fo/app/store/dashboard/index.tsx | 162 ++++++++++++++---- 2 files changed, 135 insertions(+), 32 deletions(-) diff --git a/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx b/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx index 92e81f61d..e5622ed30 100644 --- a/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx @@ -74,6 +74,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st let avgefflAmnt = 0; let avginfoRnDay = 0; + console.log('filteredData', filteredData); filteredData.forEach((item: FlowRateModalInterface) => { const totInflAmnt = parseNumber(item.totInflAmnt); const inflAmnt = parseNumber(item.inflAmnt); @@ -103,6 +104,10 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st avginfoRnDay += infoRnDay; }); + console.log('maxtotInflAmnt', maxtotInflAmnt, 'maxinflAmnt', maxinflAmnt, 'maxsumFlow', maxsumFlow, 'maxreturnAmnt', maxreturnAmnt, 'maxefflAmnt', maxefflAmnt, 'maxinfoRnDay', maxinfoRnDay); + console.log('mintotInflAmnt', mintotInflAmnt, 'mininflAmnt', mininflAmnt, 'minsumFlow', minsumFlow, 'minreturnAmnt', minreturnAmnt, 'minefflAmnt', minefflAmnt, 'mininfoRnDay', mininfoRnDay); + console.log('avgtotInflAmnt', avgtotInflAmnt, 'avginflAmnt', avginflAmnt, 'avgsumFlow', avgsumFlow, 'avgreturnAmnt', avgreturnAmnt, 'avgefflAmnt', avgefflAmnt, 'avginfoRnDay', avginfoRnDay); + const newFilteredData = [ { msrDt: '평균', diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b526195ff..6f3fd6f04 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -980,6 +980,13 @@ const searchWaterUsage = async (searchYear: string, fcltyCd: string) => { return waterUsage; } +// 쉼표가 포함된 문자열을 숫자로 변환하는 함수 +const parseNumber = (value: string | number | null | undefined): number => { + if (value === null || value === undefined || value === '') return 0; + if (typeof value === 'number') return value; + return Number(value.replace(/,/g, '')); +}; + // 강우영향일 계산 및 강우량 덮어씌우기 export const calRainEffectDayRainManage = (data: RainManageListProps[]) => { @@ -1138,6 +1145,17 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) const res = await fetchOperationStatus(searchYear, fcltyCd); const data = res.data; + let yearMaxSumFlow = 1; + let yearMinSumFlow = 1; + let yearAvgSumFlow = 1; + let summerAll = 1; + let summerThree = 1; + let summerRain = 1; + let winterAll = 1; + let winterSunnyMin = 1; + let winterSunnyAvg = 1; + let winterSunnyMax = 1; + if(data && operationalStatusList){ // 유량 - 유입 if (operationalStatusList?.[0]) { @@ -1170,47 +1188,111 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) operationalStatusList[0].winterSunnyAvg = data.winterSunny === null ? '' : (data.winterSunny.AVG_INFL_AMNT ? data.winterSunny.AVG_INFL_AMNT : 0) + (data.winterSunny.AVG_SUM_FLOW ? data.winterSunny.AVG_SUM_FLOW : 0) + (data.winterSunny.AVG_TP_INFL_WQLT_TP ? data.winterSunny.AVG_TP_INFL_WQLT_TP : 0); operationalStatusList[0].winterSunnyMax = data.winterSunny === null ? '' : (data.winterSunny.MAX_INFL_AMNT ? data.winterSunny.MAX_INFL_AMNT : 0) + (data.winterSunny.MAX_SUM_FLOW ? data.winterSunny.MAX_SUM_FLOW : 0) + (data.winterSunny.MAX_TP_INFL_WQLT_TP ? data.winterSunny.MAX_TP_INFL_WQLT_TP : 0); + // 연계처리수 + let yearDay = 0; + let summerDay = 0; + let winterDay = 0; + let summerRainDay = 0; + let summerChungchunDay = 0; + let winterChungchuDay = 0; + + let yearSumFlow = 0; + let maxYearSumFlow = 0; + let minYearSumFlow = 9999999; + let summerSumFlow = 0; + let summerChungchunSumFlow = 0; + let summerRainDaySumFlow = 0; + let winterSumFlow = 0; + let winterChungchunSumFlow = 0; + let minWinterChungchunSumFlow = 9999999; + let maxWinterChungchunSumFlow = 0; + // 연계처리수,지하수유입량 const bscFctCd = fcltyCd; const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as ApiResponse; - - const calData = calRainEffectDay(res2.data, 'SUNNY'); - let chungcunSumFlow = 0; - - let sumSummerChungcunDay = 0; - let sumSummerChungcunFlow = 0; - - let sumWinterChungcunDay = 0; - let sumWinterChungcunFlow = 0; - - /* let yearSumFlow = 0; - let summerSumFlow = 0; - let winterSumFlow = 0; */ - - calData.forEach((flowItem: FlowDataItem) => { - chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - //yearSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; - - if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){ - sumSummerChungcunDay += 1; - sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - //summerSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; - }else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){ - sumWinterChungcunDay += 1; - sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - // winterSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + console.log('res2', res2); + yearDay = res2.data?res2.data.length:1; + res2.data.forEach((item: FlowDataItem) => { + yearSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + if(maxYearSumFlow < (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0)) { + maxYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } + if(minYearSumFlow > (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0) || minYearSumFlow === 0) { + minYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } + if(item.msrDt.substring(4,6) === '06' || item.msrDt.substring(4,6) === '07' || item.msrDt.substring(4,6) === '08') { + summerDay += 1; + summerSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } else if(item.msrDt.substring(4,6) === '01' || item.msrDt.substring(4,6) === '02') { + winterDay += 1; + winterSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; } }); - + + const calData = calRainEffectDay(res2.data, 'SUNNY'); + const calRainDate = calRainEffectDay(res2.data, 'RAIN'); + + // 지하수유입량 - 청천시 기준 + let chungcunSumFlow = 0; + let sumSummerChungcunFlow = 0; + let sumWinterChungcunFlow = 0; + + // 하절기, 동절기 청천시 계산 + calData.forEach((flowItem: FlowDataItem) => { + chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + + if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){ + summerChungchunDay += 1; + summerChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + }else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){ + if(minWinterChungchunSumFlow > (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0) || minWinterChungchunSumFlow === 0) { + minWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + if(maxWinterChungchunSumFlow < (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0)) { + maxWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + winterChungchuDay += 1; + winterChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + } + }); + + // 하절기 강우시 계산 + calRainDate.forEach((flowItem: FlowDataItem) => { + if(flowItem.msrDt.substring(4,6) === '06' || flowItem.msrDt.substring(4,6) === '07' || flowItem.msrDt.substring(4,6) === '08') { + summerRainDay += 1; + summerRainDaySumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + }); + + operationalStatusList[0].yearAvg = Number(operationalStatusList[0].yearAvg) + (yearSumFlow&&Number(yearSumFlow) != 0?Number(yearSumFlow / yearDay):0); + operationalStatusList[0].yearMax = Number(operationalStatusList[0].yearMax) + Number(maxYearSumFlow); + operationalStatusList[0].yearMin = Number(operationalStatusList[0].yearMin) + Number(minYearSumFlow); + operationalStatusList[0].summerAll = Number(operationalStatusList[0].summerAll) + (summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0); + operationalStatusList[0].summerThree = Number(operationalStatusList[0].summerThree) + (summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0); + operationalStatusList[0].summerRain = Number(operationalStatusList[0].summerRain) + (summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0); + operationalStatusList[0].winterAll = Number(operationalStatusList[0].winterAll) + (winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0); + operationalStatusList[0].winterSunnyMin = Number(operationalStatusList[0].winterSunnyMin) + Number(minWinterChungchunSumFlow); + operationalStatusList[0].winterSunnyMax = Number(operationalStatusList[0].winterSunnyMax) + (winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?Number(winterChungchunSumFlow / winterChungchuDay):0); + operationalStatusList[0].winterSunnyAvg = Number(operationalStatusList[0].winterSunnyAvg) + Number(maxWinterChungchunSumFlow); + // 연계처리수 - /* const avgYearSumFlow = yearSumFlow / calData.length; - const avgSummerSumFlow = summerSumFlow / calData.length; - const avgWinterSumFlow = winterSumFlow / calData.length; */ + yearAvgSumFlow = Number((yearSumFlow&&Number(yearSumFlow)!=0)?(yearSumFlow / yearDay):''); + yearMaxSumFlow = maxYearSumFlow; + yearMinSumFlow = minYearSumFlow; + summerAll = summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0 + summerThree= summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0; + summerRain = summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0; + winterAll = winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0; + winterSunnyMin = minWinterChungchunSumFlow; + winterSunnyAvg = winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?(winterChungchunSumFlow / winterChungchuDay):0; + winterSunnyMax = maxWinterChungchunSumFlow; // 지하수유입량 const usage = chungcunSumFlow / calData.length; - const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay; - const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay; + const summerUsage = sumSummerChungcunFlow / summerChungchunDay; + const winterUsage = sumWinterChungcunFlow / winterChungchuDay; operationalStatusList[0].groundWaterAvg = Math.round((usage-(usage*0.65*0.8)) * 100) / 100; operationalStatusList[0].groundWaterSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100; @@ -1252,7 +1334,23 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) } } } + + if(operationalStatusList[2]){ + operationalStatusList[2].yearAvg = yearAvgSumFlow; + operationalStatusList[2].yearMax = yearMaxSumFlow; + operationalStatusList[2].yearMin = yearMinSumFlow; + operationalStatusList[2].summerAll = summerAll; + operationalStatusList[2].summerThree = summerThree; + operationalStatusList[2].summerRain = summerRain; + operationalStatusList[2].winterAll = winterAll; + operationalStatusList[2].winterSunnyMin = winterSunnyMin; + operationalStatusList[2].winterSunnyAvg = winterSunnyAvg; + operationalStatusList[2].winterSunnyMax = winterSunnyMax; + dataFormSetting(operationalStatusList[2]); + } } + + console.log('operationalStatusList', operationalStatusList); //const excelDownList: RainManageExcelType[] = []; /* if(isExcel){ res.data.forEach(item => { From eeef871a93ef6a7949d43917dfbfc2df878d6bd5 Mon Sep 17 00:00:00 2001 From: jsyang Date: Mon, 11 Aug 2025 22:16:15 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EB=B9=8C=EB=93=9C=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/dashboard/index.tsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index 6f3fd6f04..87091a3a1 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -980,13 +980,6 @@ const searchWaterUsage = async (searchYear: string, fcltyCd: string) => { return waterUsage; } -// 쉼표가 포함된 문자열을 숫자로 변환하는 함수 -const parseNumber = (value: string | number | null | undefined): number => { - if (value === null || value === undefined || value === '') return 0; - if (typeof value === 'number') return value; - return Number(value.replace(/,/g, '')); -}; - // 강우영향일 계산 및 강우량 덮어씌우기 export const calRainEffectDayRainManage = (data: RainManageListProps[]) => { From a6f39491ef6e0c91ab4b4cbb35d5db140b22c565 Mon Sep 17 00:00:00 2001 From: jsyang Date: Tue, 12 Aug 2025 11:36:38 +0900 Subject: [PATCH 5/8] =?UTF-8?q?rdii=20=EB=B6=84=EC=84=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/facilityWaterQlty/index.tsx | 3 +- apps/fo/app/store/rdi/index.tsx | 39 ++++++++++++++++++- apps/fo/app/store/underWaterInput/index.tsx | 8 +++- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/apps/fo/app/store/facilityWaterQlty/index.tsx b/apps/fo/app/store/facilityWaterQlty/index.tsx index 53e430d47..3c5cd9067 100644 --- a/apps/fo/app/store/facilityWaterQlty/index.tsx +++ b/apps/fo/app/store/facilityWaterQlty/index.tsx @@ -269,7 +269,7 @@ const fetchFacilityWaterQltyTmsList = async (facilityCd: string|undefined) => { }; // 시설정보 수질 리스트 데이터 호출(모달-이력) -const fetchFacilityWaterQltyListHist = async (searchYear: string|undefined, facilityCd: string|undefined): Promise => { +export const fetchFacilityWaterQltyListHist = async (searchYear: string|undefined, facilityCd: string|undefined): Promise => { try {// const res = await getFetch('fo', '/fclt/qlty/hist/' + searchYear + '/' + facilityCd); return res; @@ -623,6 +623,7 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType if(item.efflWqltTn){ item.efflWqltTn = Number(Math.round(Number(item.efflWqltTn) * 1000)/1000).toFixed(3); } + if(item.inflAssctBfrWqltTp){ item.inflAssctBfrWqltTp = Number(Math.round(Number(item.inflAssctBfrWqltTp) * 1000)/1000).toFixed(3); } diff --git a/apps/fo/app/store/rdi/index.tsx b/apps/fo/app/store/rdi/index.tsx index fd9ca52b6..398c51a52 100644 --- a/apps/fo/app/store/rdi/index.tsx +++ b/apps/fo/app/store/rdi/index.tsx @@ -1,6 +1,8 @@ +import { getFetch } from "@/app/components/api"; import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; -import { getFetch } from "@/app/components/api"; +import { fetchFacilityWaterQltyListHist } from "../facilityWaterQlty"; +import { calRainEffectDay } from "../underWaterInput"; export type { TableUpperProps }; /**==================================== * Store - 타입 @@ -27,6 +29,7 @@ export type RdiProps = { rvbsn : string, lgbsn : string, mdmbsn : string, + rainEffectDay : number, // 강우영향일 } export interface RdiInterface { @@ -242,6 +245,40 @@ export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunctio } }) + // 청천히 동절기 유입bod를 새로 구하기 위해서 재 호출 + for (const item of rtnData) { + const fcltyCd = item.bscFctCd; + let winterInflBod = 0; + + const res: any = await fetchFacilityWaterQltyListHist(searchYear, fcltyCd); + + if (res?.data) { + const rtnWqltData = res.data.wqltObjs; + rtnWqltData.forEach((dataItem: any) => { + dataItem.rainEffectDay = 0; + }); + + calRainEffectDay(rtnWqltData, 'SUNNY'); + + const rtnWqltWinterData = rtnWqltData.filter((dataItem: any) => + dataItem.msrDt.substring(4, 6) === '01' || + dataItem.msrDt.substring(4, 6) === '02' + ); + + rtnWqltWinterData.forEach((dataItem: any) => { + winterInflBod += dataItem.inflAssctBfrWqltBod + ? Number(dataItem.inflAssctBfrWqltBod) + : 0; + }); + + if (rtnWqltWinterData.length > 0) { + winterInflBod = winterInflBod / rtnWqltWinterData.length; + } + } + + item.winterAvgBodLowRainfall = winterInflBod; + } + rtnData.forEach((item: RdiProps) => { dataFormSetting(item) }) diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index 589c35962..db6fa34aa 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -261,7 +261,13 @@ const dataFormSetting=(item : UnderWaterProps)=> { export type UnderWaterStore = UnderWaterType & UnderWaterActions; -export const calRainEffectDay = (data: FlowDataItem[], weather: string) => { +/** + * + * @param data + * @param weather ('ALL' | 'SUNNY' | 'RAINY') + * @returns + */ +export const calRainEffectDay = (data: any, weather: string) => { // 강우영향일 계산 (강우량이 3 이상이면 무조건 강우영향일) for(let idx = 0; idx < data.length; idx++) { const item = data[idx]; From f35c937c0fe0ffad7da4cb40e19a4aff3632caf7 Mon Sep 17 00:00:00 2001 From: jsyang Date: Tue, 12 Aug 2025 16:40:39 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=EA=B0=95=EC=9A=B0=EC=9D=BC=20=EC=9A=B4?= =?UTF-8?q?=EC=98=81=ED=98=84=ED=99=A9=20=EC=88=98=EC=A0=95,=20=EC=BD=98?= =?UTF-8?q?=EC=86=94=EB=93=A4=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/components/common/SearchInput.tsx | 5 - .../dashboard/facilityInfo/page.tsx | 1 - apps/fo/app/store/dashboard/index.tsx | 150 ++++++++++-------- apps/fo/app/store/processFacility/index.tsx | 1 - apps/fo/app/store/rdi/index.tsx | 7 +- 5 files changed, 90 insertions(+), 74 deletions(-) diff --git a/apps/fo/app/components/common/SearchInput.tsx b/apps/fo/app/components/common/SearchInput.tsx index 11bdd3676..c15ab7506 100644 --- a/apps/fo/app/components/common/SearchInput.tsx +++ b/apps/fo/app/components/common/SearchInput.tsx @@ -47,11 +47,6 @@ export default function SearchInputText({label=undefined, setValue=()=>{}, sidoS }, [fcltyName]); const handleSuggestionClick = useCallback((bscFctCd: string, bscFctNm: string, fctCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | '') => { - console.log('bscFctNm : ', bscFctNm); - console.log('bscFctCd : ', bscFctCd); - console.log('fctCpc : ', fctCpc); - console.log('trtFrfNm : ', trtFrfNm); - console.log('efflWqltStndrdNm : ', efflWqltStndrdNm); setTextValue(bscFctNm); setValue(bscFctCd, bscFctNm, fctCpc, trtFrfNm, efflWqltStndrdNm); setIsOpen(false); diff --git a/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx b/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx index 9c16161f5..2ca8354b6 100644 --- a/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx +++ b/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx @@ -171,7 +171,6 @@ export default function ProcessFacilitySearch({searchYear = '', fcltyList = []}: el['provisionalApproval'] = waterUsage1; } }); - console.log('planFcltyList :', planFcltyList); } }, [waterUsage1, waterUsage2, waterUsage3, searchYear, planFcltyList]); // 연도가 바뀌면 hasSearched를 false로 리셋 diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index 87091a3a1..319bbd5cd 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -152,21 +152,21 @@ export interface RainManageExcelType { 강우량: string, 강우조건비율: number | '', 일수: number | '', - 유입유량: number | '', - 시설용량대비: number | '', - 설계유입수질BOD: number | '', - 설계유입수질TOC: number | '', - 설계유입수질SS: number | '', + 유입유량: string | number | '', + 시설용량대비: string |number | '', + 설계유입수질BOD: string | number | '', + 설계유입수질TOC: string | number | '', + 설계유입수질SS: string | number | '', 설계유입수질TN: string | number | '', 설계유입수질TP: string | number | '', - 유입수질BOD: number | '', - 유입수질TOC: number | '', - 유입수질SS: number | '', + 유입수질BOD: string | number | '', + 유입수질TOC: string | number | '', + 유입수질SS: string | number | '', 유입수질TN: string | number | '', 유입수질TP: string | number | '', - 방류수질BOD: number | '', - 방류수질TOC: number | '', - 방류수질SS: number | '', + 방류수질BOD: string | number | '', + 방류수질TOC: string |number | '', + 방류수질SS: string | number | '', 방류수질TN: string | number | '', 방류수질TP: string | number | '', } @@ -1203,7 +1203,6 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 연계처리수,지하수유입량 const bscFctCd = fcltyCd; const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as ApiResponse; - console.log('res2', res2); yearDay = res2.data?res2.data.length:1; res2.data.forEach((item: FlowDataItem) => { yearSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; @@ -1343,7 +1342,6 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) } } - console.log('operationalStatusList', operationalStatusList); //const excelDownList: RainManageExcelType[] = []; /* if(isExcel){ res.data.forEach(item => { @@ -1539,7 +1537,31 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) const rainEffectList = calRainEffectDayRainManage(res.data.wqltObjs); // Process the data and create rain management list + + const totItemCnt = rainEffectList?rainEffectList.length : 1; + let totInflAssctBfrWqltBod = 0; + let totInflAssctBfrWqltToc = 0; + let totInflAssctBfrWqltSs = 0; + let totInflAssctBfrWqltTn = 0; + let totInflAssctBfrWqltTp = 0; + let totEfflWqltBod = 0; + let totEfflWqltToc = 0; + let totEfflWqltSs = 0; + let totEfflWqltTn = 0; + let totEfflWqltTp = 0; + rainEffectList.forEach((item: RainManageListProps) => { + totInflAssctBfrWqltBod += item.inflAssctBfrWqltBod ? Number(item.inflAssctBfrWqltBod.toString().trim()) : 0; + totInflAssctBfrWqltToc += item.inflAssctBfrWqltToc ? Number(item.inflAssctBfrWqltToc.toString().trim()) : 0; + totInflAssctBfrWqltSs += item.inflAssctBfrWqltSs ? Number(item.inflAssctBfrWqltSs.toString().trim()) : 0; + totInflAssctBfrWqltTn += item.inflAssctBfrWqltTn ? Number(item.inflAssctBfrWqltTn.toString().trim()) : 0; + totInflAssctBfrWqltTp += item.inflAssctBfrWqltTp ? Number(item.inflAssctBfrWqltTp.toString().trim()) : 0; + totEfflWqltBod += item.efflWqltBod ? Number(item.efflWqltBod.toString().trim()) : 0; + totEfflWqltToc += item.efflWqltToc ? Number(item.efflWqltToc.toString().trim()) : 0; + totEfflWqltSs += item.efflWqltSs ? Number(item.efflWqltSs.toString().trim()) : 0; + totEfflWqltTn += item.efflWqltTn ? Number(item.efflWqltTn.toString().trim()) : 0; + totEfflWqltTp += item.efflWqltTp ? Number(item.efflWqltTp.toString().trim()) : 0; + if(Number(item.infoRnDay) >= 3 && Number(item.infoRnDay) < 10){ rainDate[1] = Number(rainDate[1] || 0) + 1; inflAmtCnt[1] = Number(inflAmtCnt[1] || 0) + 1; @@ -1627,7 +1649,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) inflAssctBfrWqltSsCnt[4] = Number(inflAssctBfrWqltSsCnt[4] || 0) + 1; inflAssctBfrWqltSs[4] = Number(inflAssctBfrWqltSs[4] || 0) + Number(item.inflAssctBfrWqltSs || 0); inflAssctBfrWqltTnCnt[4] = Number(inflAssctBfrWqltTnCnt[4] || 0) + 1; - inflAssctBfrWqltTn[4] = Number(inflAssctBfrWqltTn[5] || 0) + Number(item.inflAssctBfrWqltTn || 0); + inflAssctBfrWqltTn[4] = Number(inflAssctBfrWqltTn[4] || 0) + Number(item.inflAssctBfrWqltTn || 0); inflAssctBfrWqltTpCnt[4] = Number(inflAssctBfrWqltTpCnt[4] || 0) + 1; inflAssctBfrWqltTp[4] = Number(inflAssctBfrWqltTp[4] || 0) + Number(item.inflAssctBfrWqltTp || 0); efflWqltBodCnt[4] = Number(efflWqltBodCnt[4] || 0) + 1; @@ -1636,9 +1658,9 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltToc[4] = Number(efflWqltToc[4] || 0) + Number(item.efflWqltToc || 0); efflWqltSsCnt[4] = Number(efflWqltSsCnt[4] || 0) + 1; efflWqltSs[4] = Number(efflWqltSs[4] || 0) + Number(item.efflWqltSs || 0); - efflWqltTnCnt[4] = Number(efflWqltTnCnt[5] || 0) + 1; + efflWqltTnCnt[4] = Number(efflWqltTnCnt[4] || 0) + 1; efflWqltTn[4] = Number(efflWqltTn[4] || 0) + Number(item.efflWqltTn || 0); - efflWqltTpCnt[4] = Number(efflWqltTpCnt[5] || 0) + 1; + efflWqltTpCnt[4] = Number(efflWqltTpCnt[4] || 0) + 1; efflWqltTp[4] = Number(efflWqltTp[4] || 0) + Number(item.efflWqltTp || 0); }else if(Number(item.infoRnDay) >= 40 && Number(item.infoRnDay) < 50){ rainDate[5] = Number(rainDate[5] || 0) + 1; @@ -1773,7 +1795,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 평균 및 합계 계산 const calculateAverage = (value: number, count: number) => { - return count > 0 ? Number((value / count).toFixed(1)) : 0; + return count > 0 ? Number((value / count)) : 0; }; // 데이터 있는 항목만 계산 @@ -1800,44 +1822,44 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 합계 계산 (index 0) const calculateTotal = (arr: number[]) => { - return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0)).toFixed(1)); + return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0))); }; inflAmnt[0] = calculateAverage(calculateTotal(inflAmnt), dataIsCount); fcltyCpct[0] = calculateTotal(fcltyCpct); - inflAssctBfrWqltBod[0] = Number((calculateTotal(inflAssctBfrWqltBod)/7).toFixed(1)); - inflAssctBfrWqltToc[0] = Number((calculateTotal(inflAssctBfrWqltToc)/7).toFixed(1)); - inflAssctBfrWqltSs[0] = Number((calculateTotal(inflAssctBfrWqltSs)/7).toFixed(1)); - inflAssctBfrWqltTn[0] = Number((calculateTotal(inflAssctBfrWqltTn)/7).toFixed(3)); - inflAssctBfrWqltTp[0] = Number((calculateTotal(inflAssctBfrWqltTp)/7).toFixed(3)); - efflWqltBod[0] = Number((calculateTotal(efflWqltBod)/7).toFixed(1)); - efflWqltToc[0] = Number((calculateTotal(efflWqltToc)/7).toFixed(1)); - efflWqltSs[0] = Number((calculateTotal(efflWqltSs as number[])/7).toFixed(1)); - efflWqltTn[0] = Number((calculateTotal(efflWqltTn as number[])/7).toFixed(3)); - efflWqltTp[0] = Number((calculateTotal(efflWqltTp as number[])/7).toFixed(3)); + inflAssctBfrWqltBod[0] = Number((Math.round((totInflAssctBfrWqltBod / totItemCnt) * 10) / 10).toFixed(1)); + inflAssctBfrWqltToc[0] = Number((Math.round((totInflAssctBfrWqltToc / totItemCnt) * 10) / 10).toFixed(1)); + inflAssctBfrWqltSs[0] = Number((Math.round((totInflAssctBfrWqltSs / totItemCnt) * 10) / 10).toFixed(1)); + inflAssctBfrWqltTn[0] = Number((Math.round((totInflAssctBfrWqltTn / totItemCnt) * 1000) / 1000).toFixed(3)); + inflAssctBfrWqltTp[0] = Number((Math.round((totInflAssctBfrWqltTp / totItemCnt) * 1000) / 1000).toFixed(3)); + efflWqltBod[0] = Number((Math.round((totEfflWqltBod / totItemCnt) * 10) / 10).toFixed(1)); + efflWqltToc[0] = Number((Math.round((totEfflWqltToc / totItemCnt) * 10) / 10).toFixed(1)); + efflWqltSs[0] = Number((Math.round((totEfflWqltSs / totItemCnt) * 10) / 10).toFixed(1)); + efflWqltTn[0] = Number((Math.round((totEfflWqltTn / totItemCnt) * 1000) / 1000).toFixed(3)); + efflWqltTp[0] = Number((Math.round((totEfflWqltTp / totItemCnt) * 1000) / 1000).toFixed(3)); // 최종 리스트 const filteredData = itemList.map((item, index) => ({ rainItem: item, rainRate: rainRate[index] || '0', rainDay: rainDate[index] ? Number(rainDate[index].toFixed(1)) : '', - inflAmnt: inflAmnt[index] ? Number(inflAmnt[index].toFixed(1)) : '', - fctCpc: inflAmnt[index] ? Number((inflAmnt[index] / fcltyCpcValue).toFixed(1)) : '', - dsInflWqltBod: dsInflWqltBod[index] ? Number(dsInflWqltBod[index].toFixed(1)) : '', - dsInflWqltCod: dsInflWqltCod[index] ? Number(dsInflWqltCod[index].toFixed(1)) : '', - dsInflWqltSs: dsInflWqltSs[index] ? Number(dsInflWqltSs[index].toFixed(1)) : '', - dsInflWqltTn: dsInflWqltTn[index] ? dsInflWqltTn[index].toFixed(3) : '', - dsInflWqltTp: dsInflWqltTp[index] ? dsInflWqltTp[index].toFixed(3) : '', - inflAssctBfrWqltBod: inflAssctBfrWqltBod[index] ? Number(inflAssctBfrWqltBod[index].toFixed(1)) : '', - inflAssctBfrWqltToc: inflAssctBfrWqltToc[index] ? Number(inflAssctBfrWqltToc[index].toFixed(1)) : '', - inflAssctBfrWqltSs: inflAssctBfrWqltSs[index] ? Number(inflAssctBfrWqltSs[index].toFixed(1)) : '', - inflAssctBfrWqltTn: inflAssctBfrWqltTn[index] ? inflAssctBfrWqltTn[index].toFixed(3) : '', - inflAssctBfrWqltTp: inflAssctBfrWqltTp[index] ? inflAssctBfrWqltTp[index].toFixed(3) : '', - efflWqltBod: efflWqltBod[index] ? Number(efflWqltBod[index].toFixed(1)) : '', - efflWqltToc: efflWqltToc[index] ? Number(efflWqltToc[index].toFixed(1)) : '', - efflWqltSs: efflWqltSs[index] ? Number(efflWqltSs[index].toFixed(1)) : '', - efflWqltTn: efflWqltTn[index] ? efflWqltTn[index].toFixed(3) : '', - efflWqltTp: efflWqltTp[index] ? efflWqltTp[index].toFixed(3) : '' + inflAmnt: inflAmnt[index] ? Number((Math.round(inflAmnt[index] * 10) / 10).toFixed(1)) : '', + fctCpc: inflAmnt[index] ? (Math.round((inflAmnt[index] / fcltyCpcValue) * 10) / 10).toFixed(1) : '', + dsInflWqltBod: dsInflWqltBod[index] ? (Math.round(dsInflWqltBod[index] * 10) / 10).toFixed(1) : '', + dsInflWqltCod: dsInflWqltCod[index] ? (Math.round(dsInflWqltCod[index] * 10) / 10).toFixed(1) : '', + dsInflWqltSs: dsInflWqltSs[index] ? (Math.round(dsInflWqltSs[index] * 10) / 10).toFixed(1) : '', + dsInflWqltTn: dsInflWqltTn[index] ? (Math.round(dsInflWqltTn[index] * 1000) / 1000).toFixed(3) : '', + dsInflWqltTp: dsInflWqltTp[index] ? (Math.round(dsInflWqltTp[index] * 1000) / 1000).toFixed(3) : '', + inflAssctBfrWqltBod: inflAssctBfrWqltBod[index] ? (Math.round(inflAssctBfrWqltBod[index] * 10) / 10).toFixed(1) : '', + inflAssctBfrWqltToc: inflAssctBfrWqltToc[index] ? (Math.round(inflAssctBfrWqltToc[index] * 10) / 10).toFixed(1) : '', + inflAssctBfrWqltSs: inflAssctBfrWqltSs[index] ? (Math.round(inflAssctBfrWqltSs[index] * 10) / 10).toFixed(1) : '', + inflAssctBfrWqltTn: inflAssctBfrWqltTn[index] ? (Math.round(inflAssctBfrWqltTn[index] * 1000) / 1000).toFixed(3) : '', + inflAssctBfrWqltTp: inflAssctBfrWqltTp[index] ? (Math.round(inflAssctBfrWqltTp[index] * 1000) / 1000).toFixed(3) : '', + efflWqltBod: efflWqltBod[index] ? (Math.round(efflWqltBod[index] * 10) / 10).toFixed(1): '', + efflWqltToc: efflWqltToc[index] ? (Math.round(efflWqltToc[index] * 10) / 10).toFixed(1) : '', + efflWqltSs: efflWqltSs[index] ? (Math.round(efflWqltSs[index] * 10) / 10).toFixed(1) : '', + efflWqltTn: efflWqltTn[index] ? (Math.round(efflWqltTn[index] * 1000) / 1000).toFixed(3) : '', + efflWqltTp: efflWqltTp[index] ? (Math.round(efflWqltTp[index] * 1000) / 1000).toFixed(3) : '' })); const excelList : RainManageExcelType[] = []; @@ -1847,23 +1869,23 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) 강우량: item.rainItem, 강우조건비율: item.rainRate ? Number(Number(item.rainRate).toFixed(1)) : '', 일수: item.rainDay ? Number(Number(item.rainDay).toFixed(1)) : '', - 유입유량: item.inflAmnt ? Number(Number(item.inflAmnt).toFixed(1)) : '', - 시설용량대비: item.fctCpc ? Number(Number(item.fctCpc).toFixed(1)) : '', - 설계유입수질BOD: item.dsInflWqltBod ? Number(Number(item.dsInflWqltBod).toFixed(1)) : '', - 설계유입수질TOC: item.dsInflWqltCod ? Number(Number(item.dsInflWqltCod).toFixed(1)) : '', - 설계유입수질SS: item.dsInflWqltSs ? Number(Number(item.dsInflWqltSs).toFixed(1)) : '', - 설계유입수질TN: item.dsInflWqltTn ? Number(item.dsInflWqltTn).toFixed(3) : '', - 설계유입수질TP: item.dsInflWqltTp ? Number(item.dsInflWqltTp).toFixed(3) : '', - 유입수질BOD: item.inflAssctBfrWqltBod ? Number(Number(item.inflAssctBfrWqltBod).toFixed(1)) : '', - 유입수질TOC: item.inflAssctBfrWqltToc ? Number(Number(item.inflAssctBfrWqltToc).toFixed(1)) : '', - 유입수질SS: item.inflAssctBfrWqltSs ? Number(Number(item.inflAssctBfrWqltSs).toFixed(1)) : '', - 유입수질TN: item.inflAssctBfrWqltTn ? Number(item.inflAssctBfrWqltTn).toFixed(3) : '', - 유입수질TP: item.inflAssctBfrWqltTp ? Number(item.inflAssctBfrWqltTp).toFixed(3) : '', - 방류수질BOD: item.efflWqltBod ? Number(Number(item.efflWqltBod).toFixed(1)) : '', - 방류수질TOC: item.efflWqltToc ? Number(Number(item.efflWqltToc).toFixed(1)) : '', - 방류수질SS: item.efflWqltSs ? Number(Number(item.efflWqltSs).toFixed(1)) : '', - 방류수질TN: item.efflWqltTn ? Number(item.efflWqltTn).toFixed(3) : '', - 방류수질TP: item.efflWqltTp ? Number(item.efflWqltTp).toFixed(3) : '', + 유입유량: item.inflAmnt ? Number((Math.round(Number(item.inflAmnt) * 10) / 10).toFixed(1)) : '', + 시설용량대비: item.fctCpc ? (Math.round(Number(item.fctCpc) * 10) / 10).toFixed(1) : '', + 설계유입수질BOD: item.dsInflWqltBod ? (Math.round(Number(item.dsInflWqltBod) * 10) / 10).toFixed(1) : '', + 설계유입수질TOC: item.dsInflWqltCod ? (Math.round(Number(item.dsInflWqltCod) * 10) / 10).toFixed(1) : '', + 설계유입수질SS: item.dsInflWqltSs ? (Math.round(Number(item.dsInflWqltSs) * 10) / 10).toFixed(1) : '', + 설계유입수질TN: item.dsInflWqltTn ?(Math.round(Number(item.dsInflWqltTn) * 1000) / 1000).toFixed(3) : '', + 설계유입수질TP: item.dsInflWqltTp ? (Math.round(Number(item.dsInflWqltTp) * 1000) / 1000).toFixed(3) : '', + 유입수질BOD: item.inflAssctBfrWqltBod ? (Math.round(Number(item.inflAssctBfrWqltBod) * 10) / 10).toFixed(1) : '', + 유입수질TOC: item.inflAssctBfrWqltToc ? (Math.round(Number(item.inflAssctBfrWqltToc) * 10) / 10).toFixed(1) : '', + 유입수질SS: item.inflAssctBfrWqltSs ? (Math.round(Number(item.inflAssctBfrWqltSs) * 10) / 10).toFixed(1) : '', + 유입수질TN: item.inflAssctBfrWqltTn ? (Math.round(Number(item.inflAssctBfrWqltTn) * 1000) / 1000).toFixed(3) : '', + 유입수질TP: item.inflAssctBfrWqltTp ? (Math.round(Number(item.inflAssctBfrWqltTp) * 1000) / 1000).toFixed(3) : '', + 방류수질BOD: item.efflWqltBod ? (Math.round(Number(item.efflWqltBod) * 10) / 10).toFixed(1) : '', + 방류수질TOC: item.efflWqltToc ? (Math.round(Number(item.efflWqltToc) * 10) / 10).toFixed(1) : '', + 방류수질SS: item.efflWqltSs ? (Math.round(Number(item.efflWqltSs) * 10) / 10).toFixed(1) : '', + 방류수질TN: item.efflWqltTn ? (Math.round(Number(item.efflWqltTn) * 1000) / 1000).toFixed(3) : '', + 방류수질TP: item.efflWqltTp ? (Math.round(Number(item.efflWqltTp) * 1000) / 1000).toFixed(3) : '', }); }); } @@ -1872,12 +1894,12 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) ...state, RainManage: isExcel ? { ...state.RainManage, - rainManageList: filteredData as RainManageListProps[], + rainManageList: filteredData as any[], excelList: excelList, isLoadingRainManage : false, } : { ...state.RainManage, - rainManageList: filteredData as RainManageListProps[], + rainManageList: filteredData as any[], isLoadingRainManage : false, } })); diff --git a/apps/fo/app/store/processFacility/index.tsx b/apps/fo/app/store/processFacility/index.tsx index 022c28c3e..988be1e46 100644 --- a/apps/fo/app/store/processFacility/index.tsx +++ b/apps/fo/app/store/processFacility/index.tsx @@ -676,7 +676,6 @@ export const processFacilityReducer:(set:SetStateFunction)=>ProcessFacilityActio item.plInflWqltBod = item.plInflWqltBod ? Number(item.plInflWqltBod).toFixed(1) : ''; item.dsInflWqltBod = item.dsInflWqltBod ? Number(item.dsInflWqltBod).toFixed(1) : ''; }) */ - console.log(res.data); set((state:ProcessFacilityType) => ({ ...state, ProcessFacilityList: { diff --git a/apps/fo/app/store/rdi/index.tsx b/apps/fo/app/store/rdi/index.tsx index 398c51a52..1dd1a6334 100644 --- a/apps/fo/app/store/rdi/index.tsx +++ b/apps/fo/app/store/rdi/index.tsx @@ -259,10 +259,11 @@ export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunctio }); calRainEffectDay(rtnWqltData, 'SUNNY'); - + const rtnWqltWinterData = rtnWqltData.filter((dataItem: any) => - dataItem.msrDt.substring(4, 6) === '01' || - dataItem.msrDt.substring(4, 6) === '02' + (dataItem.msrDt.substring(4, 6) === '01' || + dataItem.msrDt.substring(4, 6) === '02') && + dataItem.rainEffectDay == 0 ); rtnWqltWinterData.forEach((dataItem: any) => { From ba81c01b064d5a8492660dfd8f22dd37151e1cb7 Mon Sep 17 00:00:00 2001 From: jsyang Date: Tue, 12 Aug 2025 18:39:56 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=EC=A7=80=ED=95=98=EC=88=98=EC=9C=A0?= =?UTF-8?q?=EC=9E=85=EB=9F=89=20=EB=AA=A8=EB=8B=AC=20=ED=8F=89=EA=B7=A0?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=EC=B5=9C=EC=86=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../underWaterInput/modal/page.tsx | 76 +++---------------- apps/fo/app/store/underWaterInput/index.tsx | 40 +++++----- 2 files changed, 34 insertions(+), 82 deletions(-) diff --git a/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx b/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx index 1e37569c6..355bddedd 100644 --- a/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx @@ -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([]); 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 ( <> {setTabTerm(val)}}> diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index db6fa34aa..a820a7ecf 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -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: '최대', From 5c28d56d839684193fa62343ded19e96af6e9317 Mon Sep 17 00:00:00 2001 From: jsyang Date: Tue, 12 Aug 2025 18:46:29 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=EB=B9=8C=EB=93=9C=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx | 2 +- apps/fo/app/store/underWaterInput/index.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx b/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx index 355bddedd..498fe3a1a 100644 --- a/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx @@ -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 { use, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; type ModalProps ={ fcltyName: string; diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index a820a7ecf..1ab331a60 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -1,8 +1,7 @@ +import { getFetch } from "@/app/components/api"; 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 타입을 여기에 정의