From 5a43b33a1d4f253c3b5eb4eced42aee6bd636b7d Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 24 Jul 2025 15:08:07 +0900 Subject: [PATCH 01/17] =?UTF-8?q?=EA=B0=95=EC=9A=B0=EB=9F=89=20=EB=B0=8F?= =?UTF-8?q?=20=EB=8B=A8=EC=9C=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/.env.local | 4 +- .../pages/facilityWaterQlty/modal/page.tsx | 2 +- apps/fo/app/pages/flowRate/modal/page.tsx | 7 +- apps/fo/app/store/common/index.tsx | 2 +- apps/fo/app/store/dashboard/index.tsx | 161 +++++++++--------- apps/fo/app/store/facilityWaterQlty/index.tsx | 4 +- apps/fo/app/store/flowRate/index.tsx | 33 ++-- 7 files changed, 109 insertions(+), 104 deletions(-) diff --git a/apps/fo/.env.local b/apps/fo/.env.local index 94488f0cd..76fb868cd 100644 --- a/apps/fo/.env.local +++ b/apps/fo/.env.local @@ -1,6 +1,6 @@ NEXT_PUBLIC_SITE_ID = FO -NEXT_PUBLIC_PORT = 11300 -NEXT_PUBLIC_PROXY_HOST = http://con.mind-one.co.kr:11300 +NEXT_PUBLIC_PORT = 3000 +NEXT_PUBLIC_PROXY_HOST = http://localhost:3000 NEXT_PUBLIC_SERVER_API_URL = http://con.mind-one.co.kr:11082/api/v1 NEXT_PUBLIC_WR_SERVER_API_URL = http://con.mind-one.co.kr:11080/api/v1 NEXT_PUBLIC_CS_SERVER_API_URL = http://dev.onasys.co.kr:8000 diff --git a/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx b/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx index 19129762e..feec1bf22 100644 --- a/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx +++ b/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx @@ -303,7 +303,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe "유출SS(mg/L)": item.efflWqltSs, "유출TN(mg/L)": item.efflWqltTn, "유출TP(mg/L)": item.efflWqltTp, - "강우량(일)": item.infoRnDay?item.infoRnDay.toString():"0.0", + "강우량(mm/일)": item.infoRnDay?item.infoRnDay.toString():"0.0", }); }); } diff --git a/apps/fo/app/pages/flowRate/modal/page.tsx b/apps/fo/app/pages/flowRate/modal/page.tsx index c3815911a..fb7852560 100644 --- a/apps/fo/app/pages/flowRate/modal/page.tsx +++ b/apps/fo/app/pages/flowRate/modal/page.tsx @@ -52,6 +52,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st return Number(value.replace(/,/g, '')); }; + console.log('filteredData : ', filteredData); let maxtotInflAmnt = 0; let maxinflAmnt = 0; let maxsumFlow = 0; @@ -65,7 +66,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st let minsumFlow = parseNumber(filteredData[0]?.sumFlow); let minreturnAmnt = parseNumber(filteredData[0]?.returnAmnt); let minefflAmnt = parseNumber(filteredData[0]?.efflAmnt); - let mininfoRnDay = parseNumber(filteredData[0]?.infoRnDay); + let mininfoRnDay = parseNumber(filteredData[0]?.infoRnDay && filteredData[0]?.infoRnDay.toString().trim() !== 'x' ? filteredData[0]?.infoRnDay.toString().trim() : 0); let avgtotInflAmnt = 0; let avginflAmnt = 0; @@ -80,7 +81,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st const sumFlow = parseNumber(item.sumFlow); const returnAmnt = parseNumber(item.returnAmnt); const efflAmnt = parseNumber(item.efflAmnt); - const infoRnDay = parseNumber(item.infoRnDay); + const infoRnDay = parseNumber(item.infoRnDay && item.infoRnDay.toString().trim() !== 'x' ? item.infoRnDay.toString().trim() : 0); maxtotInflAmnt = Math.max(maxtotInflAmnt, totInflAmnt); maxinflAmnt = Math.max(maxinflAmnt, inflAmnt); maxsumFlow = Math.max(maxsumFlow, sumFlow); @@ -166,7 +167,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st "연계처리량(m³/일)": item.sumFlow, "총인반류수량(m³/일)": item.returnAmnt, "방류량(m³/일)": item.efflAmnt, - "강우량": item.infoRnDay, + "강우량(mm/일)": item.infoRnDay, }); }); } diff --git a/apps/fo/app/store/common/index.tsx b/apps/fo/app/store/common/index.tsx index 5c07bcd6e..997e7fee7 100644 --- a/apps/fo/app/store/common/index.tsx +++ b/apps/fo/app/store/common/index.tsx @@ -414,7 +414,7 @@ export const CommonReducer:(set:(fn: (state: CommonType) => CommonType) => void) // 시도 변경 이벤트 initializeCommonData: async () => { const payLoad : ILogin = { - userId: "tuser10003", + userId: "admin1gmail", password: "test1234!" }; diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index 09c7acec9..d69e48b9d 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -1207,42 +1207,42 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) } const fcltyCpcValue = res.data.wqltObjs[0].fctCpc; - const itemList = ['계', '3mm 미만', '3~10mm 미만', '10~20mm 미만', '20~30mm 미만', '30~40mm 미만', '40~50mm 미만', '50mm~60mm 미만', '60mm 이상']; - const rainRate = ['0', '0', '0', '0', '0', '0', '0', '0', '0']; - const rainDate = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAmtCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAmnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const fcltyCpct = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const dsInflWqltBod: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const dsInflWqltCod: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const dsInflWqltSs: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const dsInflWqltTn: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const dsInflWqltTp: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltBodCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltBod = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltTocCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltToc = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltSsCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltSs = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltTnCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltTn = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltTpCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const inflAssctAftWqltTp = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltBodCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltBod = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltCodCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltCod = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltSsCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltSs = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltTnCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltTn = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltTpCnt = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - const efflWqltTp = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + const itemList = ['계', '3~10mm 미만', '10~20mm 미만', '20~30mm 미만', '30~40mm 미만', '40~50mm 미만', '50mm~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 inflAmnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const fcltyCpct = [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]; + const dsInflWqltTn: number[] = [0, 0, 0, 0, 0, 0, 0, 0]; + const dsInflWqltTp: number[] = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltBodCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltBod = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltTocCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltToc = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltSsCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltSs = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltTnCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltTn = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltTpCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const inflAssctAftWqltTp = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltBodCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltBod = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltCodCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltCod = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltSsCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltSs = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltTnCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltTn = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltTpCnt = [0, 0, 0, 0, 0, 0, 0, 0]; + const efflWqltTp = [0, 0, 0, 0, 0, 0, 0, 0]; // Process the data and create rain management list res.data.wqltObjs.forEach((item: RainManageListProps) => { // 강우일 - if(Number(item.infoRnDay) < 3){ + /*if(Number(item.infoRnDay) < 3){ rainDate[1] = Number(rainDate[1] || 0) + 1; inflAmtCnt[1] = Number(inflAmtCnt[1] || 0) + 1; inflAmnt[1] = Number(inflAmnt[1] || 0) + Number(item.inflAmnt || 0); @@ -1267,7 +1267,33 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltTn[1] = Number(efflWqltTn[1] || 0) + Number(item.efflWqltTn || 0); efflWqltTpCnt[1] = Number(efflWqltTpCnt[1] || 0) + 1; efflWqltTp[1] = Number(efflWqltTp[1] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 3 && Number(item.infoRnDay) < 10){ + }*/ + if(Number(item.infoRnDay) >= 3 && Number(item.infoRnDay) < 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); + fcltyCpct[1] = 0; + inflAssctAftWqltBodCnt[1] = Number(inflAssctAftWqltBodCnt[1] || 0) + 1; + inflAssctAftWqltBod[1] = Number(inflAssctAftWqltBod[1] || 0) + Number(item.inflAssctAftWqltBod || 0); + inflAssctAftWqltTocCnt[1] = Number(inflAssctAftWqltTocCnt[1] || 0) + 1; + inflAssctAftWqltToc[1] = Number(inflAssctAftWqltToc[1] || 0) + Number(item.inflAssctAftWqltToc || 0); + inflAssctAftWqltSsCnt[1] = Number(inflAssctAftWqltSsCnt[1] || 0) + 1; + inflAssctAftWqltSs[1] = Number(inflAssctAftWqltSs[1] || 0) + Number(item.inflAssctAftWqltSs || 0); + inflAssctAftWqltTnCnt[1] = Number(inflAssctAftWqltTnCnt[1] || 0) + 1; + inflAssctAftWqltTn[1] = Number(inflAssctAftWqltTn[1] || 0) + Number(item.inflAssctAftWqltTn || 0); + inflAssctAftWqltTpCnt[1] = Number(inflAssctAftWqltTpCnt[1] || 0) + 1; + inflAssctAftWqltTp[1] = Number(inflAssctAftWqltTp[1] || 0) + Number(item.inflAssctAftWqltTp || 0); + efflWqltBodCnt[1] = Number(efflWqltBodCnt[1] || 0) + 1; + efflWqltBod[1] = Number(efflWqltBod[1] || 0) + Number(item.efflWqltBod || 0); + efflWqltCodCnt[1] = Number(efflWqltCodCnt[1] || 0) + 1; + efflWqltCod[1] = Number(efflWqltCod[1] || 0) + Number(item.efflWqltCod || 0); + efflWqltSsCnt[1] = Number(efflWqltSsCnt[1] || 0) + 1; + efflWqltSs[1] = Number(efflWqltSs[1] || 0) + Number(item.efflWqltSs || 0); + efflWqltTnCnt[1] = Number(efflWqltTnCnt[1] || 0) + 1; + efflWqltTn[1] = Number(efflWqltTn[1] || 0) + Number(item.efflWqltTn || 0); + efflWqltTpCnt[1] = Number(efflWqltTpCnt[1] || 0) + 1; + efflWqltTp[1] = Number(efflWqltTp[1] || 0) + Number(item.efflWqltTp || 0); + }else if(Number(item.infoRnDay) >= 10 && Number(item.infoRnDay) < 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); @@ -1283,7 +1309,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) inflAssctAftWqltTpCnt[2] = Number(inflAssctAftWqltTpCnt[2] || 0) + 1; inflAssctAftWqltTp[2] = Number(inflAssctAftWqltTp[2] || 0) + Number(item.inflAssctAftWqltTp || 0); efflWqltBodCnt[2] = Number(efflWqltBodCnt[2] || 0) + 1; - efflWqltBod[2] = Number(efflWqltBod[2] || 0) + Number(item.efflWqltBod || 0); + efflWqltBod[2] = Number(efflWqltBod[2] || 0) + Number(item.efflWqltBod || 0); efflWqltCodCnt[2] = Number(efflWqltCodCnt[2] || 0) + 1; efflWqltCod[2] = Number(efflWqltCod[2] || 0) + Number(item.efflWqltCod || 0); efflWqltSsCnt[2] = Number(efflWqltSsCnt[2] || 0) + 1; @@ -1292,7 +1318,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltTn[2] = Number(efflWqltTn[2] || 0) + Number(item.efflWqltTn || 0); efflWqltTpCnt[2] = Number(efflWqltTpCnt[2] || 0) + 1; efflWqltTp[2] = Number(efflWqltTp[2] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 10 && Number(item.infoRnDay) < 20){ + }else if(Number(item.infoRnDay) >= 20 && Number(item.infoRnDay) < 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); @@ -1317,11 +1343,11 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltTn[3] = Number(efflWqltTn[3] || 0) + Number(item.efflWqltTn || 0); efflWqltTpCnt[3] = Number(efflWqltTpCnt[3] || 0) + 1; efflWqltTp[3] = Number(efflWqltTp[3] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 20 && Number(item.infoRnDay) < 30){ + }else if(Number(item.infoRnDay) >= 30 && Number(item.infoRnDay) < 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); - fcltyCpct[4] = 0; + fcltyCpct[4] = item.inflAmnt&&Number(item.inflAmnt) !== 0 ? Number(Math.round(Number(item.inflAmnt) / Number(item.fctCpc) * 10) / 10) : 0; inflAssctAftWqltBodCnt[4] = Number(inflAssctAftWqltBodCnt[4] || 0) + 1; inflAssctAftWqltBod[4] = Number(inflAssctAftWqltBod[4] || 0) + Number(item.inflAssctAftWqltBod || 0); inflAssctAftWqltTocCnt[4] = Number(inflAssctAftWqltTocCnt[4] || 0) + 1; @@ -1329,7 +1355,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) inflAssctAftWqltSsCnt[4] = Number(inflAssctAftWqltSsCnt[4] || 0) + 1; inflAssctAftWqltSs[4] = Number(inflAssctAftWqltSs[4] || 0) + Number(item.inflAssctAftWqltSs || 0); inflAssctAftWqltTnCnt[4] = Number(inflAssctAftWqltTnCnt[4] || 0) + 1; - inflAssctAftWqltTn[4] = Number(inflAssctAftWqltTn[4] || 0) + Number(item.inflAssctAftWqltTn || 0); + inflAssctAftWqltTn[4] = Number(inflAssctAftWqltTn[5] || 0) + Number(item.inflAssctAftWqltTn || 0); inflAssctAftWqltTpCnt[4] = Number(inflAssctAftWqltTpCnt[4] || 0) + 1; inflAssctAftWqltTp[4] = Number(inflAssctAftWqltTp[4] || 0) + Number(item.inflAssctAftWqltTp || 0); efflWqltBodCnt[4] = Number(efflWqltBodCnt[4] || 0) + 1; @@ -1338,15 +1364,15 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltCod[4] = Number(efflWqltCod[4] || 0) + Number(item.efflWqltCod || 0); efflWqltSsCnt[4] = Number(efflWqltSsCnt[4] || 0) + 1; efflWqltSs[4] = Number(efflWqltSs[4] || 0) + Number(item.efflWqltSs || 0); - efflWqltTnCnt[4] = Number(efflWqltTnCnt[4] || 0) + 1; + efflWqltTnCnt[4] = Number(efflWqltTnCnt[5] || 0) + 1; efflWqltTn[4] = Number(efflWqltTn[4] || 0) + Number(item.efflWqltTn || 0); - efflWqltTpCnt[4] = Number(efflWqltTpCnt[4] || 0) + 1; + efflWqltTpCnt[4] = Number(efflWqltTpCnt[5] || 0) + 1; efflWqltTp[4] = Number(efflWqltTp[4] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 30 && Number(item.infoRnDay) < 40){ + }else if(Number(item.infoRnDay) >= 40 && Number(item.infoRnDay) < 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); - fcltyCpct[5] = item.inflAmnt&&Number(item.inflAmnt) !== 0 ? Number(Math.round(Number(item.inflAmnt) / Number(item.fctCpc) * 10) / 10) : 0; + fcltyCpct[5] = 0; inflAssctAftWqltBodCnt[5] = Number(inflAssctAftWqltBodCnt[5] || 0) + 1; inflAssctAftWqltBod[5] = Number(inflAssctAftWqltBod[5] || 0) + Number(item.inflAssctAftWqltBod || 0); inflAssctAftWqltTocCnt[5] = Number(inflAssctAftWqltTocCnt[5] || 0) + 1; @@ -1367,7 +1393,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltTn[5] = Number(efflWqltTn[5] || 0) + Number(item.efflWqltTn || 0); efflWqltTpCnt[5] = Number(efflWqltTpCnt[5] || 0) + 1; efflWqltTp[5] = Number(efflWqltTp[5] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 40 && Number(item.infoRnDay) < 50){ + }else if(Number(item.infoRnDay) >= 50 && Number(item.infoRnDay) < 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); @@ -1392,7 +1418,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltTn[6] = Number(efflWqltTn[6] || 0) + Number(item.efflWqltTn || 0); efflWqltTpCnt[6] = Number(efflWqltTpCnt[6] || 0) + 1; efflWqltTp[6] = Number(efflWqltTp[6] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 50 && Number(item.infoRnDay) < 60){ + }else if(Number(item.infoRnDay) >= 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); @@ -1417,31 +1443,6 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltTn[7] = Number(efflWqltTn[7] || 0) + Number(item.efflWqltTn || 0); efflWqltTpCnt[7] = Number(efflWqltTpCnt[7] || 0) + 1; efflWqltTp[7] = Number(efflWqltTp[7] || 0) + Number(item.efflWqltTp || 0); - }else if(Number(item.infoRnDay) >= 60){ - rainDate[8] = Number(rainDate[8] || 0) + 1; - inflAmtCnt[8] = Number(inflAmtCnt[8] || 0) + 1; - inflAmnt[8] = Number(inflAmnt[8] || 0) + Number(item.inflAmnt || 0); - fcltyCpct[8] = 0; - inflAssctAftWqltBodCnt[8] = Number(inflAssctAftWqltBodCnt[8] || 0) + 1; - inflAssctAftWqltBod[8] = Number(inflAssctAftWqltBod[8] || 0) + Number(item.inflAssctAftWqltBod || 0); - inflAssctAftWqltTocCnt[8] = Number(inflAssctAftWqltTocCnt[8] || 0) + 1; - inflAssctAftWqltToc[8] = Number(inflAssctAftWqltToc[8] || 0) + Number(item.inflAssctAftWqltToc || 0); - inflAssctAftWqltSsCnt[8] = Number(inflAssctAftWqltSsCnt[8] || 0) + 1; - inflAssctAftWqltSs[8] = Number(inflAssctAftWqltSs[8] || 0) + Number(item.inflAssctAftWqltSs || 0); - inflAssctAftWqltTnCnt[8] = Number(inflAssctAftWqltTnCnt[8] || 0) + 1; - inflAssctAftWqltTn[8] = Number(inflAssctAftWqltTn[8] || 0) + Number(item.inflAssctAftWqltTn || 0); - inflAssctAftWqltTpCnt[8] = Number(inflAssctAftWqltTpCnt[8] || 0) + 1; - inflAssctAftWqltTp[8] = Number(inflAssctAftWqltTp[8] || 0) + Number(item.inflAssctAftWqltTp || 0); - efflWqltBodCnt[8] = Number(efflWqltBodCnt[8] || 0) + 1; - efflWqltBod[8] = Number(efflWqltBod[8] || 0) + Number(item.efflWqltBod || 0); - efflWqltCodCnt[8] = Number(efflWqltCodCnt[8] || 0) + 1; - efflWqltCod[8] = Number(efflWqltCod[8] || 0) + Number(item.efflWqltCod || 0); - efflWqltSsCnt[8] = Number(efflWqltSsCnt[8] || 0) + 1; - efflWqltSs[8] = Number(efflWqltSs[8] || 0) + Number(item.efflWqltSs || 0); - efflWqltTnCnt[8] = Number(efflWqltTnCnt[8] || 0) + 1; - efflWqltTn[8] = Number(efflWqltTn[8] || 0) + Number(item.efflWqltTn || 0); - efflWqltTpCnt[8] = Number(efflWqltTpCnt[8] || 0) + 1; - efflWqltTp[8] = Number(efflWqltTp[8] || 0) + Number(item.efflWqltTp || 0); } }); @@ -1488,7 +1489,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) rainDate[0] = (Number(rainDate[1]) || 0) + (Number(rainDate[2]) || 0) + (Number(rainDate[3]) || 0) + (Number(rainDate[4]) || 0) + (Number(rainDate[5]) || 0) + (Number(rainDate[6]) || 0) + - (Number(rainDate[7]) || 0) + (Number(rainDate[8]) || 0); + (Number(rainDate[7]) || 0); // 강수비율 for(let idx=0; idx DashBoardType) inflAmnt[0] = calculateAverage(calculateTotal(inflAmnt), dataIsCount); fcltyCpct[0] = calculateTotal(fcltyCpct); - inflAssctAftWqltBod[0] = Number((calculateTotal(inflAssctAftWqltBod)/8).toFixed(1)); - inflAssctAftWqltToc[0] = Number((calculateTotal(inflAssctAftWqltToc)/8).toFixed(1)); - inflAssctAftWqltSs[0] = Number((calculateTotal(inflAssctAftWqltSs)/8).toFixed(1)); - inflAssctAftWqltTn[0] = Number((calculateTotal(inflAssctAftWqltTn)/8).toFixed(3)); - inflAssctAftWqltTp[0] = Number((calculateTotal(inflAssctAftWqltTp)/8).toFixed(3)); - efflWqltBod[0] = Number((calculateTotal(efflWqltBod)/8).toFixed(1)); - efflWqltCod[0] = Number((calculateTotal(efflWqltCod)/8).toFixed(1)); - efflWqltSs[0] = Number((calculateTotal(efflWqltSs as number[])/8).toFixed(1)); - efflWqltTn[0] = Number((calculateTotal(efflWqltTn as number[])/8).toFixed(3)); - efflWqltTp[0] = Number((calculateTotal(efflWqltTp as number[])/8).toFixed(3)); + inflAssctAftWqltBod[0] = Number((calculateTotal(inflAssctAftWqltBod)/7).toFixed(1)); + inflAssctAftWqltToc[0] = Number((calculateTotal(inflAssctAftWqltToc)/7).toFixed(1)); + inflAssctAftWqltSs[0] = Number((calculateTotal(inflAssctAftWqltSs)/7).toFixed(1)); + inflAssctAftWqltTn[0] = Number((calculateTotal(inflAssctAftWqltTn)/7).toFixed(3)); + inflAssctAftWqltTp[0] = Number((calculateTotal(inflAssctAftWqltTp)/7).toFixed(3)); + efflWqltBod[0] = Number((calculateTotal(efflWqltBod)/7).toFixed(1)); + efflWqltCod[0] = Number((calculateTotal(efflWqltCod)/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)); // 최종 리스트 const filteredData = itemList.map((item, index) => ({ diff --git a/apps/fo/app/store/facilityWaterQlty/index.tsx b/apps/fo/app/store/facilityWaterQlty/index.tsx index 6430522f4..57ac2e50a 100644 --- a/apps/fo/app/store/facilityWaterQlty/index.tsx +++ b/apps/fo/app/store/facilityWaterQlty/index.tsx @@ -104,7 +104,7 @@ export type modalExcelType = { "유출SS(mg/L)": string; "유출TN(mg/L)": string; "유출TP(mg/L)": string; - "강우량(일)": string; + "강우량(mm/일)": string; } /**==================================== @@ -207,7 +207,7 @@ const upHeadListModalYear: TableUpperProps[] = [ { id: "efflWqltSs", title: "SS\n(mg/L)", upName: "upChangeRe2", upSequnce: 3, align: "right" }, { id: "efflWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe2", upSequnce: 2, align: "right" }, { id: "efflWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe2", upSequnce: 3, align: "right" }, - { id: "infoRnDay", title: "강우량", align: "right" }, + { id: "infoRnDay", title: "강우량(mm/일)", align: "right" }, ]; // 처리시설 수질현황 헤더(모달-수질TMS) diff --git a/apps/fo/app/store/flowRate/index.tsx b/apps/fo/app/store/flowRate/index.tsx index a619ddf85..ae5b7412b 100644 --- a/apps/fo/app/store/flowRate/index.tsx +++ b/apps/fo/app/store/flowRate/index.tsx @@ -13,8 +13,8 @@ const FlowRateSearchLabelArray:string[] = ['구분', '시도', '시군구', '용 export type flowRateListProps = { bscFctCd : string, - sidoNm : string, - sggNm : string, + sido : string, + gugun : string, bscFctNm : string, daddr : string, fctCpc : number, @@ -56,7 +56,7 @@ export type modalExcelType = { "연계처리량(m³/일)": number | '', "총인반류수량(m³/일)": number | '', "방류량(m³/일)": number | '', - "강우량": number | string | '', + "강우량(mm/일)": number | string | '', } /** * (2) 모달 @@ -93,8 +93,8 @@ export type FlowRateModalProps = { const upHeadList1:TableUpperProps[] = [ { id: "bscFctCd", title: "시설코드", row:0, rowSpan:2}, { id: "A", title: "행정명", row: 0 ,colSpan: 2 }, - { id: "sidoNm", title: "시도", upName:"upChangeRe", row:1 }, - { id: "sggNm", title: "시군구", upName:"upChangeRe", row:1 }, + { id: "sido", title: "시도", upName:"upChangeRe", row:1 }, + { id: "gugun", title: "시군구", upName:"upChangeRe", row:1 }, { id: "bscFctNm", title: "시설명", row: 0, rowSpan: 2}, { id: "daddr", title: "주소", row: 0, rowSpan: 2}, { id: "fctCpc", title: "시설용량\n(m³/일)", align:"right", row: 0, rowSpan: 2}, @@ -131,8 +131,8 @@ const upHeadList3:TableUpperProps[] = [ { id: "mdmbsn", title: "중권역", upName:"upChangeRe1", row:1 }, { id: "rgnNm", title: "환경청", row:0, rowSpan:2 }, { id: "B", title: "행정명", row: 0 ,colSpan: 2 }, - { id: "ctpvNm", title: "시도", upName:"upChangeRe2", row:1 }, - { id: "sggNm", title: "시군구", upName:"upChangeRe2", row:1 }, + { id: "sido", title: "시도", upName:"upChangeRe2", row:1 }, + { id: "gugun", title: "시군구", upName:"upChangeRe2", row:1 }, { id: "bscFctNm", title: "시설명", row: 0, rowSpan: 2 }, { id: "daddr", title: "주소", row: 0, rowSpan: 2 }, { id: "fctCpc", title: "시설용량\n(m³/일)", align:"right", row: 0, rowSpan: 2 }, @@ -157,7 +157,7 @@ const upHeadListFlowRateModal:TableUpperProps[] = [ { id: "sumFlow", title: "연계처리량(m³/일)", align:"right"}, { id: "returnAmnt", title: "총인 반류수량(m³/일)", align:"right"}, { id: "efflAmnt", title: "방류량(m³/일)", align:"right"}, - { id: "infoRnDay", title: "강우량", align:"right"} + { id: "infoRnDay", title: "강우량(mm/일)", align:"right"} ] const modalFlowRateListYear:FlowRateModalProps[] = [ @@ -268,11 +268,8 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow const res = await fetchFlowRateList(pageNo, pageSize, searchYear, partCd, nameCd, fcltCpct, operationValue, fcltyNm); const data = res.data; const excelDownList: ExcelType[] = []; - const rtnData = data.map((item: flowRateListProps) => { item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); - item.sidoNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; - item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; item.totInflAmnt = Number(item.inflAmnt || 0) + Number(item.sumFlow || 0) + Number(item.returnAmnt || 0) dataFormSetting(item); return item; @@ -286,8 +283,8 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow 단위유역: item.lgbsn, 중권역: item.mdmbsn, 환경청: item.rgnNm, - 시도: item.sidoNm, - 시군구: item.sggNm, + 시도: item.sido, + 시군구: item.gugun, 시설이름: item.bscFctNm, 주소: item.daddr, 용량: item.fctCpc, @@ -300,7 +297,6 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow }); } - console.log('excelDownList' , excelDownList); set((state: FlowRateSearchType) => ({ ...state, FlowRateList: pageSize<5000?{ @@ -316,8 +312,14 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow searchFlowRateModalList: async (bscFctCd: string, searchYear: string) => { const res = await fetchFlowRateModalList(bscFctCd, searchYear); const data = res.data; - const tmpData:FlowRateModalProps[] = []; + + data.forEach((item: FlowRateModalProps) => { + if(item.infoRnDay && item.infoRnDay.toString().trim() === 'x') { + item.infoRnDay = ''; + } + }); + // facilityPrecipitation의 rainEffectDay 계산 로직을 적용 for(let idx = 0; idx < data.length; idx++) { const item = data[idx]; @@ -342,6 +344,7 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow rainEffectDay = rainDay; } + let test = tmpData.find((item: FlowRateModalProps) => item.msrDt === item.msrDt); tmpData.push({ ...item, rainEffectDay: rainEffectDay, From cd08b5dad816a0dcaade4877f6b2092cad16ecd7 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 24 Jul 2025 21:58:50 +0900 Subject: [PATCH 02/17] =?UTF-8?q?=EC=A1=B0=EC=B9=98=20=EC=A7=84=ED=96=89?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/pages/dashboard/facilityInfo/page.tsx | 14 +-- apps/fo/app/pages/dashboard/page.tsx | 2 +- .../app/pages/facilityPrecipitation/page.tsx | 3 +- .../pages/facilityWaterQlty/modal/page.tsx | 30 +++-- apps/fo/app/pages/facilityWaterQlty/page.tsx | 2 +- apps/fo/app/pages/flowRate/modal/page.tsx | 114 +++++++++--------- apps/fo/app/pages/flowRate/page.tsx | 5 +- apps/fo/app/pages/planSewage/page.tsx | 8 +- apps/fo/app/pages/sewageOccur/modal/page.tsx | 9 +- apps/fo/app/pages/sewageOccur/page.tsx | 14 ++- apps/fo/app/pages/underWaterInput/page.tsx | 3 +- apps/fo/app/store/common/index.tsx | 11 -- apps/fo/app/store/dashboard/index.tsx | 1 + apps/fo/app/store/facilityWaterQlty/index.tsx | 28 ++--- apps/fo/app/store/sewageOccur/index.tsx | 92 +++++++------- apps/fo/app/store/store.tsx | 26 ++-- 16 files changed, 192 insertions(+), 170 deletions(-) diff --git a/apps/fo/app/pages/dashboard/facilityInfo/page.tsx b/apps/fo/app/pages/dashboard/facilityInfo/page.tsx index 7a88755ce..ddda9c9c0 100644 --- a/apps/fo/app/pages/dashboard/facilityInfo/page.tsx +++ b/apps/fo/app/pages/dashboard/facilityInfo/page.tsx @@ -30,20 +30,20 @@ const headMakeColSpanPlanFclty = (upHeadList: TableUpperProps[], planYearList: s const headMakeColSpanOperationStatus = (upHeadList: TableUpperProps[], searchYear: string) => { return ( <> - {searchYear+'년도 운영실태'} + {searchYear+'년도 운영실태'} { upHeadList.map((head: TableUpperProps) => (head.upName === 'upChangeRe1'&&head.upSequnce===1?{head.title}: - !head.upSequnce?{head.title}: + !head.upSequnce?{head.title}: head.upName === 'upChangeRe2'&&head.upSequnce===1?{'연간 운영실태'}: head.upName === 'upChangeRe3'&&head.upSequnce===1?{'하절기 운영실태\n(6~8월)'}: head.upName === 'upChangeRe4'&&head.upSequnce===1?{'동절기 운영실태\n(1~2월)'}: - head.upName === 'upChangeRe5'&&head.upSequnce===1?{'지하수유입량'}:null))} + head.upName === 'upChangeRe5'&&head.upSequnce===1?{'지하수 유입량 추정'}:null))} {upHeadList.map((head: TableUpperProps) => - (head.upName === 'upChangeRe2'||head.upName === 'upChangeRe3'||head.upName === 'upChangeRe4'||head.upName === 'upChangeRe5' ?{head.title}:null))} + (head.upName === 'upChangeRe2'||head.upName === 'upChangeRe3'||head.upName === 'upChangeRe4'||head.upName === 'upChangeRe5'?{head.title}:null))} ) } @@ -238,10 +238,10 @@ export default function ProcessFacilitySearch({searchYear = '', fcltyList = []}: (head.id === 'flowRate' && index === 11)?{el[head.id]}: (head.id === 'groundWaterAvg'||head.id === 'groundWaterSummer'||head.id === 'groundWaterWinter')&&(index === 0)?{el[head.id]}: (head.id === 'groundWaterAvg'||head.id === 'groundWaterSummer'||head.id === 'groundWaterWinter')&&(index === 7)?{el[head.id]}: - (head.id === 'rdi'&&index === 0)?{el[head.id]}: - (head.id === 'rdi'&&index === 2)?{'RDII추정시\n일강수량(mm)'}: - (head.id === 'rdi'&&index === 5)?{el['rdiRain']}: + (head.id === 'rdi'&&index === 0)?{el[head.id]}: (head.id === 'rdi'&&index === 7)?: + (head.id === 'rdiRain'&&index === 0)?{el['rdiRain']}: + (head.id === 'rdiRain'&&index === 7)?: (head.id === 'waterQlty')?{el[head.id]}: ((head.id === 'yearAvg' || head.id === 'yearMax' || head.id === 'yearMin') && (index>=0 && index<=4))?{fncLoadModal('flowRate', 'year', el['waterQlty'] as string);}}>{el[head.id]}: ((head.id === 'yearAvg' || head.id === 'yearMax' || head.id === 'yearMin') && (index>=5 && index<=10))?{fncLoadModal('waterQlty', 'year', el['waterQlty'] as string);}}>{el[head.id]}: diff --git a/apps/fo/app/pages/dashboard/page.tsx b/apps/fo/app/pages/dashboard/page.tsx index 97b45fd06..3b6f18351 100644 --- a/apps/fo/app/pages/dashboard/page.tsx +++ b/apps/fo/app/pages/dashboard/page.tsx @@ -14,7 +14,7 @@ const tabList = [ { value: 'facilityInfo', label: '시설정보 및 운영현황' }, { value: 'mainGraph', label: '주요그래프' }, { value: 'rainManage', label: '강우일 운영현황' }, - { value: 'drainageEquipment', label: '배수설비 정비현황' } + //{ value: 'drainageEquipment', label: '배수설비 정비현황' } ]; export default function DashBoard() { diff --git a/apps/fo/app/pages/facilityPrecipitation/page.tsx b/apps/fo/app/pages/facilityPrecipitation/page.tsx index c9403fd14..5b9cde969 100644 --- a/apps/fo/app/pages/facilityPrecipitation/page.tsx +++ b/apps/fo/app/pages/facilityPrecipitation/page.tsx @@ -81,7 +81,8 @@ export default function FacilityPrecipitation() { // 시설상태 const [operationValue, setOperationValue] = useState("0"); // 조회기간 - const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + //const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + const [searchYear, setSearchYear] = useState("2023"); /** * 페이지 함수 diff --git a/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx b/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx index feec1bf22..0cfb42998 100644 --- a/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx +++ b/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx @@ -63,7 +63,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe let maxEfflWqltBod = 0; let maxEfflWqltTn = 0; let maxEfflWqltTp = 0; - let maxefflWqltCod = 0; + let maxefflWqltToc = 0; let maxEfflWqltSs = 0; let maxInflAssctAftWqltBod = 0; @@ -80,7 +80,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe let minEfflWqltBod = filteredData.length > 0 ? parseNumber(filteredData[0]?.efflWqltBod) : 0; let minEfflWqltTn = filteredData.length > 0 ? parseNumber(filteredData[0]?.efflWqltTn) : 0; let minEfflWqltTp = filteredData.length > 0 ? parseNumber(filteredData[0]?.efflWqltTp) : 0; - let minefflWqltCod = filteredData.length > 0 ? parseNumber(filteredData[0]?.efflWqltCod) : 0; + let minefflWqltToc = filteredData.length > 0 ? parseNumber(filteredData[0]?.efflWqltToc) : 0; let minEfflWqltSs = filteredData.length > 0 ? parseNumber(filteredData[0]?.efflWqltSs) : 0; let minInflAssctAftWqltBod = filteredData.length > 0 ? parseNumber(filteredData[0]?.inflAssctAftWqltBod) : 0; @@ -97,7 +97,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe let avgEfflWqltBod = 0; let avgEfflWqltTn = 0; let avgEfflWqltTp = 0; - let avgefflWqltCod = 0; + let avgefflWqltToc = 0; let avgEfflWqltSs = 0; let avgInflAssctAftWqltBod = 0; @@ -115,7 +115,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe const efflWqltBod = parseNumber(item.efflWqltBod); const efflWqltTn = parseNumber(item.efflWqltTn); const efflWqltTp = parseNumber(item.efflWqltTp); - const efflWqltCod = parseNumber(item.efflWqltCod); + const efflWqltToc = parseNumber(item.efflWqltToc); const efflWqltSs = parseNumber(item.efflWqltSs); const inflAssctAftWqltBod = parseNumber(item.inflAssctAftWqltBod); @@ -133,7 +133,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe maxEfflWqltBod = Math.max(maxEfflWqltBod, efflWqltBod); maxEfflWqltTn = Math.max(maxEfflWqltTn, efflWqltTn); maxEfflWqltTp = Math.max(maxEfflWqltTp, efflWqltTp); - maxefflWqltCod = Math.max(maxefflWqltCod, efflWqltCod); + maxefflWqltToc = Math.max(maxefflWqltToc, efflWqltToc); maxEfflWqltSs = Math.max(maxEfflWqltSs, efflWqltSs); maxInflAssctAftWqltBod = Math.max(maxInflAssctAftWqltBod, inflAssctAftWqltBod); @@ -150,7 +150,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe minEfflWqltBod = Math.min(minEfflWqltBod, efflWqltBod); minEfflWqltTn = Math.min(minEfflWqltTn, efflWqltTn); minEfflWqltTp = Math.min(minEfflWqltTp, efflWqltTp); - minefflWqltCod = Math.min(minefflWqltCod, efflWqltCod); + minefflWqltToc = Math.min(minefflWqltToc, efflWqltToc); minEfflWqltSs = Math.min(minEfflWqltSs, efflWqltSs); minInflAssctAftWqltBod = Math.min(minInflAssctAftWqltBod, inflAssctAftWqltBod); @@ -167,7 +167,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe avgEfflWqltBod += efflWqltBod; avgEfflWqltTn += efflWqltTn; avgEfflWqltTp += efflWqltTp; - avgefflWqltCod += efflWqltCod; + avgefflWqltToc += efflWqltToc; avgEfflWqltSs += efflWqltSs; avgInflAssctAftWqltBod += inflAssctAftWqltBod; @@ -186,7 +186,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe { msrDt: '평균', efflWqltBod: filteredData.length==0?'0.0':(Math.round(avgEfflWqltBod / filteredData.length * 10) / 10).toFixed(1), - efflWqltCod: filteredData.length==0?'0.0':(Math.round(avgefflWqltCod / filteredData.length * 10) / 10).toFixed(1), + efflWqltToc: filteredData.length==0?'0.0':(Math.round(avgefflWqltToc / filteredData.length * 10) / 10).toFixed(1), efflWqltSs: filteredData.length==0?'0.0':(Math.round(avgEfflWqltSs / filteredData.length * 10) / 10).toFixed(1), efflWqltTn: filteredData.length==0?'0.000':(Math.round(avgEfflWqltTn / filteredData.length * 1000) / 1000).toFixed(3), efflWqltTp: filteredData.length==0?'0.000':(Math.round(avgEfflWqltTp / filteredData.length * 1000) / 1000).toFixed(3), @@ -209,7 +209,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe { msrDt : '최대', efflWqltBod : Math.round(maxEfflWqltBod * 10) / 10?(Math.round(maxEfflWqltBod * 10) / 10).toFixed(1):'0.0', - efflWqltCod : Math.round(maxefflWqltCod * 10) / 10?(Math.round(maxefflWqltCod * 10) / 10).toFixed(1):'0.0', + efflWqltToc : Math.round(maxefflWqltToc * 10) / 10?(Math.round(maxefflWqltToc * 10) / 10).toFixed(1):'0.0', efflWqltSs : Math.round(maxEfflWqltSs * 10) / 10?(Math.round(maxEfflWqltSs * 10) / 10).toFixed(1):'0.0', efflWqltTn : Math.round(maxEfflWqltTn * 1000) / 1000?(Math.round(maxEfflWqltTn * 1000) / 1000).toFixed(3):'0.000', efflWqltTp : Math.round(maxEfflWqltTp * 1000) / 1000?(Math.round(maxEfflWqltTp * 1000) / 1000).toFixed(3):'0.000', @@ -232,7 +232,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe { msrDt : '최소', efflWqltBod : Math.round(minEfflWqltBod * 10) / 10?(Math.round(minEfflWqltBod?minEfflWqltBod:0 * 10) / 10).toFixed(1) : '0.0', - efflWqltCod : Math.round(minefflWqltCod * 10) / 10?(Math.round(minefflWqltCod?minefflWqltCod:0 * 10) / 10).toFixed(1) : '0.0', + efflWqltToc : Math.round(minefflWqltToc * 10) / 10?(Math.round(minefflWqltToc?minefflWqltToc:0 * 10) / 10).toFixed(1) : '0.0', efflWqltSs : Math.round(minEfflWqltSs * 10) / 10?(Math.round(minEfflWqltSs * 10) / 10).toFixed(1) : '0.0', efflWqltTn : Math.round(minEfflWqltTn * 1000) / 1000?(Math.round(minEfflWqltTn * 1000) / 1000).toFixed(3) : '0.000', efflWqltTp : Math.round(minEfflWqltTp * 1000) / 1000?(Math.round(minEfflWqltTp * 1000) / 1000).toFixed(3) : '0.000', @@ -299,7 +299,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe "유입TN(mg/L)": item.inflAssctAftWqltTn, "유입TP(mg/L)": item.inflAssctBfrWqltTp, "유출BOD(mg/L)": item.efflWqltBod, - "유출TOC(COD)(mg/L)": item.efflWqltCod, + "유출TOC(COD)(mg/L)": item.efflWqltToc, "유출SS(mg/L)": item.efflWqltSs, "유출TN(mg/L)": item.efflWqltTn, "유출TP(mg/L)": item.efflWqltTp, @@ -351,7 +351,7 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe

수질 TMS

-

({msrmtDate?msrmtDate.substring(0,4)+'-'+msrmtDate.substring(4,6)+'-'+msrmtDate.substring(6,8):yesterDayStr})

+ {/*

({msrmtDate?msrmtDate.substring(0,4)+'-'+msrmtDate.substring(4,6)+'-'+msrmtDate.substring(6,8):yesterDayStr})

*/}
+
+ ☞ 청천시 : 강우량이 3mm미만의 날 +
@@ -476,6 +479,9 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe +
+ ☞ 강우량 3mm 이상만 날과 강우영향일(강우일+2일)의 날 +
diff --git a/apps/fo/app/pages/facilityWaterQlty/page.tsx b/apps/fo/app/pages/facilityWaterQlty/page.tsx index 2c728f679..6a9ad4f69 100644 --- a/apps/fo/app/pages/facilityWaterQlty/page.tsx +++ b/apps/fo/app/pages/facilityWaterQlty/page.tsx @@ -196,7 +196,7 @@ export default function ProcessFacilitySearch() { {selectedRow !== null && ( } - bodyClass="sm:max-w-[90vw] w-[1200px] h-[920px]" + bodyClass="sm:max-w-[90vw] w-[1300px] h-[920px]" open={selectedRow !== null} onOpenChange={(open) => !open && closeModal()} noHeaderYn="Y" diff --git a/apps/fo/app/pages/flowRate/modal/page.tsx b/apps/fo/app/pages/flowRate/modal/page.tsx index fb7852560..33b255b6c 100644 --- a/apps/fo/app/pages/flowRate/modal/page.tsx +++ b/apps/fo/app/pages/flowRate/modal/page.tsx @@ -195,20 +195,18 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st ref={ref} queryClick={filterData} /> -
-
- {}} - className="h-[370px]" - boldArray={[0,1,2]} - /> -
+
+ {}} + className="h-[370px]" + boldArray={[0,1,2]} + />
@@ -221,20 +219,18 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st ref={ref} queryClick={filterData} /> -
-
- {}} - className="h-[370px]" - boldArray={[0,1,2]} - /> -
+
+ {}} + className="h-[370px]" + boldArray={[0,1,2]} + />
@@ -247,20 +243,18 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st ref={ref} queryClick={filterData} /> -
-
- {}} - className="h-[370px]" - boldArray={[0,1,2]} - /> -
+
+ {}} + className="h-[370px]" + boldArray={[0,1,2]} + />
@@ -273,20 +267,21 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st ref={ref} queryClick={filterData} /> -
-
- {}} - className="h-[370px]" - boldArray={[0,1,2]} - /> -
+
+ {}} + className="h-[370px]" + boldArray={[0,1,2]} + /> +
+
+ ☞ 청천시 : 강우량이 3mm미만의 날
@@ -299,10 +294,11 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st ref={ref} queryClick={filterData} /> -
-
+
{}} className="h-[370px]" boldArray={[0,1,2]}/> -
+
+
+ ☞ 강우량 3mm 이상만 날과 강우영향일(강우일+2일)의 날
diff --git a/apps/fo/app/pages/flowRate/page.tsx b/apps/fo/app/pages/flowRate/page.tsx index 3910944cf..8e258b5a2 100644 --- a/apps/fo/app/pages/flowRate/page.tsx +++ b/apps/fo/app/pages/flowRate/page.tsx @@ -49,7 +49,8 @@ export default function ProcessFacilitySearch() { const [fcltCpct, setFcltCpct] = useState("0"); const [fcltyName, setFcltyName] = useState(""); const [operationValue, setOperationValue] = useState("0"); - const [searchYearValue, setSearchYearValue] = useState(selectSearchYear[0]?.val || "0"); + //const [searchYearValue, setSearchYearValue] = useState(selectSearchYear[0]?.val || "0"); + const [searchYearValue, setSearchYearValue] = useState("2023"); const [widthSize, setWidthSize] = useState("w-[120%]"); const [upheadList, setUpheadList] = useState(upHeadList1); const [resetPage, setResetPage] = useState(false); @@ -197,7 +198,7 @@ export default function ProcessFacilitySearch() { {selectedRow !== null && ( } - bodyClass="sm:max-w-[90vw] w-[1050px] h-[700px]" + bodyClass="sm:max-w-[90vw] w-[1250px] h-[780px]" open={selectedRow !== null} onOpenChange={(open: boolean) => !open && closeModal()} /> diff --git a/apps/fo/app/pages/planSewage/page.tsx b/apps/fo/app/pages/planSewage/page.tsx index 8d7de5d80..c9324c246 100644 --- a/apps/fo/app/pages/planSewage/page.tsx +++ b/apps/fo/app/pages/planSewage/page.tsx @@ -70,7 +70,8 @@ export default function PlanSewage() { // 시설상태 const [operationValue, setOperationValue] = useState("0"); // 조회기간 - const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + //const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + const [searchYear, setSearchYear] = useState("2023"); /** * 페이지 함수 @@ -190,6 +191,11 @@ export default function PlanSewage() {
+
+ ☞ 여유용량 = 하수처리시설 시설용량 – 건기시 유입유량(평균)​
+ ☞ 변동부하율 = 건기시 일최대 유량/일평균​유량(기준 최근 3개년)​
+ ☞ 분류식화율 = 분류식지역 면적(㎢) / 처리​구역 면적합계(㎢) ×100
+
diff --git a/apps/fo/app/pages/sewageOccur/modal/page.tsx b/apps/fo/app/pages/sewageOccur/modal/page.tsx index e8a90651e..824871432 100644 --- a/apps/fo/app/pages/sewageOccur/modal/page.tsx +++ b/apps/fo/app/pages/sewageOccur/modal/page.tsx @@ -8,7 +8,7 @@ import { useEffect, useState } from "react"; export default function SewageOccurModal(props: { fcltyName: string; facilityCd : string; searchYear : string}) { // 그리드 관련 - const {SewageOccurDetail} = useFoStore((state) => state); + const {SewageOccurDetail, searchSewageOccurDetailList} = useFoStore((state) => state); // searchYear 유효성 검사 및 기본값 설정 const validSearchYear = props.searchYear && /^\d{4}$/.test(props.searchYear) ? props.searchYear : new Date().getFullYear().toString(); @@ -22,8 +22,8 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd } = SewageOccurDetail; useEffect(() => { - setDetailList(gridListSewageOccurDetail); - }, [gridListSewageOccurDetail]); + searchSewageOccurDetailList(props.facilityCd, validSearchYear); + }, [searchSewageOccurDetailList, props.facilityCd, validSearchYear]); useEffect(() => { const filteredList = gridListSewageOccurDetail.filter(item => item.msrDt.replace(/-/g, '') >= startYearMonth && item.msrDt.replace(/-/g, '') <= endYearMonth); @@ -70,6 +70,9 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd }); avgWaterUsage = totalWaterUsage?totalWaterUsage / filteredList.length:0; + console.log("totalWaterUsage", totalWaterUsage); + console.log("filteredList.length", filteredList.length); + console.log("avgWaterUsage", avgWaterUsage); avgSwageChangePercent = totalSwageChangePercent?totalSwageChangePercent / filteredList.length:0; avgEstimationSewage = totalEstimationSewage?totalEstimationSewage / filteredList.length:0; diff --git a/apps/fo/app/pages/sewageOccur/page.tsx b/apps/fo/app/pages/sewageOccur/page.tsx index a137d9ebe..af59c633e 100644 --- a/apps/fo/app/pages/sewageOccur/page.tsx +++ b/apps/fo/app/pages/sewageOccur/page.tsx @@ -13,12 +13,14 @@ export default function PlanSewage() { ,SewageOccurSearch ,initializeCommonData ,searchSewageOccurList + ,calculateModalDataForAllFacilities } = useFoStore((state) => state) || { Common: { isInit: false, selectUpdownData: [], selectOperationData: [], selectSidoData: [], selectSigunData: [], selectRegionData: [], selectUnitWaterShedData: [], selectMiddleRegionData: [], selectEnvPartData: [], selectSearchYear: [{ val: "0" }], btnClass: "" }, SewageOccur: { sewageOccurList: [], sewageOccurCount: 0, excelList: [], upHeadList1: [], upHeadList2: [], upHeadList3: [] }, SewageOccurSearch: { labelArray: [] }, initializeCommonData: () => {}, - searchSewageOccurList: () => {} + searchSewageOccurList: () => {}, + calculateModalDataForAllFacilities: async () => [] }; const { @@ -66,6 +68,7 @@ export default function PlanSewage() { const [selectedRow, setSelectedRow] = useState(null); const [fcltyNm, setFcltyNm] = useState(""); const [fcltyCd, setFcltyCd] = useState(""); + const [isCalculating, setIsCalculating] = useState(false); // 그리드 관련 const searchInputRef = useRef(null); @@ -83,7 +86,8 @@ export default function PlanSewage() { // 시설상태 const [operationValue, setOperationValue] = useState("0"); // 조회기간 - const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + // const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + const [searchYear, setSearchYear] = useState("2023"); /** * 페이지 함수 @@ -224,7 +228,11 @@ export default function PlanSewage() { {selectedRow !== null && ( } + body={} bodyClass="sm:max-w-[90vw] w-[1000px] h-[770px]" open={selectedRow !== null} onOpenChange={(open) => !open && closeModal()} diff --git a/apps/fo/app/pages/underWaterInput/page.tsx b/apps/fo/app/pages/underWaterInput/page.tsx index 1e821734b..93a6f0863 100644 --- a/apps/fo/app/pages/underWaterInput/page.tsx +++ b/apps/fo/app/pages/underWaterInput/page.tsx @@ -82,7 +82,8 @@ export default function UnderWaterInput() { // 시설상태 const [operationValue, setOperationValue] = useState("0"); // 조회기간 - const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + //const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); + const [searchYear, setSearchYear] = useState("2023"); /** * 페이지 함수 diff --git a/apps/fo/app/store/common/index.tsx b/apps/fo/app/store/common/index.tsx index 997e7fee7..3e15e2162 100644 --- a/apps/fo/app/store/common/index.tsx +++ b/apps/fo/app/store/common/index.tsx @@ -3,8 +3,6 @@ ====================================**/ import { getFetch } from "@/app/components/api"; -import { LoginApi } from "@/src/entities/auth"; -import type { ILogin } from "@/src/entities/auth/model/login-interface"; /** * STORE - TYPE @@ -413,15 +411,6 @@ export const CommonReducer:(set:(fn: (state: CommonType) => CommonType) => void) // 시도 변경 이벤트 initializeCommonData: async () => { - const payLoad : ILogin = { - userId: "admin1gmail", - password: "test1234!" - }; - - console.log(payLoad.userId) - console.log(payLoad.password) - - LoginApi.login(payLoad); const promiseSet = await Promise.all([fetchSidoData(), fetchSigunData(), fetchRegionData(), fetchUnitWaterShedData(), fetchMiddleRegionData(), fetchEnvPartData()]); const [sidoData, sggData, regionData, unitData, midData, envData] = promiseSet; set((state: CommonType) => ({ diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index d69e48b9d..b12c24d39 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -347,6 +347,7 @@ const upHeadListOperationStatus : TableUpperProps[] = [ { id: "groundWaterSummer", title: "하절기\n평균", upName:"upChangeRe5", upSequnce:2 }, { id: "groundWaterWinter", title: "동절기\n평균", upName:"upChangeRe5", upSequnce:3 }, { id: "rdi", title: "RDII 추정" }, + { id: "rdiRain", title: "RDII 추정시\n일강수량(mm)" }, ] const upHeadListRainManage : TableUpperProps[] = [ diff --git a/apps/fo/app/store/facilityWaterQlty/index.tsx b/apps/fo/app/store/facilityWaterQlty/index.tsx index 57ac2e50a..2e8d1cfd6 100644 --- a/apps/fo/app/store/facilityWaterQlty/index.tsx +++ b/apps/fo/app/store/facilityWaterQlty/index.tsx @@ -28,7 +28,7 @@ export interface FacilityWaterQltyProps { inflAssctAftWqltTp: string | '', inflAssctBfrWqltTp: string | '', efflWqltBod: string | '', - efflWqltCod: string | '', + efflWqltToc: string | '', efflWqltSs: string | '', efflWqltTn: string | '', efflWqltTp: string | '', @@ -133,7 +133,7 @@ const upHeadList1: TableUpperProps[] = [ { id: "inflAssctAftWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe3", upSequnce: 4, align: "right", row: 1 }, { id: "inflAssctAftWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe3", upSequnce: 3, align: "right", row: 1 }, { id: "efflWqltBod", title: "BOD\n(mg/L)", upName: "upChangeRe4", upSequnce: 1, align: "right", row: 1 }, - { id: "efflWqltCod", title: "TOC\n(COD)\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row: 1 }, + { id: "efflWqltToc", title: "TOC\n(COD)\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row: 1 }, { id: "efflWqltSs", title: "SS\n(mg/L)", upName: "upChangeRe4", upSequnce: 3, align: "right", row: 1 }, { id: "efflWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe4", upSequnce: 4, align: "right", row: 1 }, { id: "efflWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe4", upSequnce: 3, align: "right", row: 1 }, @@ -157,7 +157,7 @@ const upHeadList2: TableUpperProps[] = [ { id: "inflAssctAftWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe3", upSequnce: 2, align: "right", row:1 }, { id: "inflAssctAftWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe3", upSequnce: 3, align: "right", row:1 }, { id: "efflWqltBod", title: "BOD\n(mg/L)", upName: "upChangeRe4", upSequnce: 1, align: "right", row:1 }, - { id: "efflWqltCod", title: "TOC\n(COD)\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row:1 }, + { id: "efflWqltToc", title: "TOC\n(COD)\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row:1 }, { id: "efflWqltSs", title: "SS\n(mg/L)", upName: "upChangeRe4", upSequnce: 3, align: "right", row:1 }, { id: "efflWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row:1 }, { id: "efflWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe4", upSequnce: 3, align: "right", row:1 }, @@ -185,7 +185,7 @@ const upHeadList3: TableUpperProps[] = [ { id: "inflAssctAftWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe3", upSequnce: 2, align: "right", row:1 }, { id: "inflAssctAftWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe3", upSequnce: 3, align: "right", row:1 }, { id: "efflWqltBod", title: "BOD\n(mg/L)", upName: "upChangeRe4", upSequnce: 1, align: "right", row:1 }, - { id: "efflWqltCod", title: "TOC\n(COD)\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row:1 }, + { id: "efflWqltToc", title: "TOC\n(COD)\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row:1 }, { id: "efflWqltSs", title: "SS\n(mg/L)", upName: "upChangeRe4", upSequnce: 3, align: "right", row:1 }, { id: "efflWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe4", upSequnce: 2, align: "right", row:1 }, { id: "efflWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe4", upSequnce: 3, align: "right", row:1 }, @@ -203,7 +203,7 @@ const upHeadListModalYear: TableUpperProps[] = [ { id: "inflAssctAftWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe1", upSequnce: 2, align: "right" }, { id: "inflAssctBfrWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe1", upSequnce: 3, align: "right" }, { id: "efflWqltBod", title: "BOD\n(mg/L)", upName: "upChangeRe2", upSequnce: 1, align: "right" }, - { id: "efflWqltCod", title: "TOC(COD)\n(mg/L)", upName: "upChangeRe2", upSequnce: 2, align: "right" }, + { id: "efflWqltToc", title: "TOC(COD)\n(mg/L)", upName: "upChangeRe2", upSequnce: 2, align: "right" }, { id: "efflWqltSs", title: "SS\n(mg/L)", upName: "upChangeRe2", upSequnce: 3, align: "right" }, { id: "efflWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe2", upSequnce: 2, align: "right" }, { id: "efflWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe2", upSequnce: 3, align: "right" }, @@ -409,8 +409,8 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType if(item.inflAssctAftWqltToc){ item.inflAssctAftWqltToc = Number(Math.round(Number(item.inflAssctAftWqltToc) * 10)/10).toFixed(1); } - if(item.efflWqltCod){ - item.efflWqltCod = Number(Math.round(Number(item.efflWqltCod) * 10)/10).toFixed(1); + if(item.efflWqltToc){ + item.efflWqltToc = Number(Math.round(Number(item.efflWqltToc) * 10)/10).toFixed(1); } if(item.inflAssctAftWqltBod){ item.inflAssctAftWqltBod = Number(Math.round(Number(item.inflAssctAftWqltBod) * 10)/10).toFixed(1); @@ -427,8 +427,8 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType if(item.inflAssctAftWqltToc){ item.inflAssctAftWqltToc = Number(Math.round(Number(item.inflAssctAftWqltToc) * 10)/10).toFixed(1); } - if(item.efflWqltCod){ - item.efflWqltCod = Number(Math.round(Number(item.efflWqltCod) * 10)/10).toFixed(1); + if(item.efflWqltToc){ + item.efflWqltToc = Number(Math.round(Number(item.efflWqltToc) * 10)/10).toFixed(1); } return item; }); @@ -456,7 +456,7 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType 유입TN: item.inflAssctAftWqltTn, 유입TP: item.inflAssctAftWqltTp, 유출BOD: item.efflWqltBod, - 유출TOC: item.efflWqltCod, + 유출TOC: item.efflWqltToc, 유출SS: item.efflWqltSs, 유출TN: item.efflWqltTn, 유출TP: item.efflWqltTp, @@ -610,8 +610,8 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType if(item.inflAssctAftWqltToc){ item.inflAssctAftWqltToc = Number(Math.round(Number(item.inflAssctAftWqltToc) * 10)/10).toFixed(1); } - if(item.efflWqltCod){ - item.efflWqltCod = Number(Math.round(Number(item.efflWqltCod) * 10)/10).toFixed(1); + if(item.efflWqltToc){ + item.efflWqltToc = Number(Math.round(Number(item.efflWqltToc) * 10)/10).toFixed(1); } if(item.inflAssctAftWqltBod){ item.inflAssctAftWqltBod = Number(Math.round(Number(item.inflAssctAftWqltBod) * 10)/10).toFixed(1); @@ -628,8 +628,8 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType if(item.inflAssctAftWqltToc){ item.inflAssctAftWqltToc = Number(Math.round(Number(item.inflAssctAftWqltToc) * 10)/10).toFixed(1); } - if(item.efflWqltCod){ - item.efflWqltCod = Number(Math.round(Number(item.efflWqltCod) * 10)/10).toFixed(1); + if(item.efflWqltToc){ + item.efflWqltToc = Number(Math.round(Number(item.efflWqltToc) * 10)/10).toFixed(1); } if(item.tpInflWqltBod){ diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index 93de7ca94..a97494726 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -37,6 +37,13 @@ export type SewageOccurDetailProps = { estimationSewage : number, } +type RawSewageData = { + msrDt: string; + inflAmnt: string; + // 기타 다른 필드 생략 +}; + + /**==================================== * Store - data ====================================*/ @@ -120,7 +127,7 @@ const upHeadList3:TableUpperProps[] = [ const upHeadListSewageOccurDetail:TableUpperProps[] = [ { id: "msrDt", title: "년월" }, { id: "waterUsage", title: "물사용량(m³/일)" }, - { id: "swageChangePercent", title: "오수전환율" }, + { id: "swageChangePercent", title: "오수전환율(%)" }, { id: "estimationSewage", title: "오수발생량 추정(m³/일)", row:0, rowSpan:2 }, ]; @@ -299,11 +306,19 @@ const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear return { data: res.data, count: res.count } */ } +const fetchSewageOccurDetailList = async (bscFctCd: string, searchYear: string) => { + const url = '/fclt/flow/' + bscFctCd + '/' + searchYear; + const res = await getFetch('fo', url); + return { data: res.data, count: res.count } +} + /**==================================== * Store - expaort ====================================*/ export type SewageOccurActions = { searchSewageOccurList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void; + searchSewageOccurDetailList: (bscFctCd: string, searchYear: string) => void; + calculateModalDataForAllFacilities: (facilityList: SewageOccurProps[], searchYear: string) => Promise; } export type SewageOccurType = { @@ -388,7 +403,7 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: item.sidoNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); - item.waterUsage = item.fctCpc * 0.6; + item.waterUsage = 0; item.swageChangePercent = 80; item.estimationSewage = item.waterUsage * (item.swageChangePercent/100); @@ -399,55 +414,22 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: let sumChungcunDay = 0; let chungcunSumFlow = 0; - + let totWaterUsage = 0; res2.data.forEach((item: FlowDataItem) => { if(Number(item.infoRnDay) ===0){ chungcunSumFlow += Number(item.inflAmnt); sumChungcunDay += 1; - }else{ - console.log(item.bscFctCd +' day : ' +' '+item.msrDt); } + totWaterUsage += Number(item.inflAmnt); }); - + let avg = totWaterUsage /res2.count; + console.log("avg ", avg); + item.waterUsage = avg * 0.65; item.sewageInputYear = sumFlow/res2.count; item.sewageInputChungchun = chungcunSumFlow===0?0:(chungcunSumFlow / sumChungcunDay); return item; })); - - console.log('calData : ', calData); - - const excelDownList: ExcelType[] = []; - if(pageSize>5000){ - calData.forEach(item => { - dataFormSetting(item) - item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); - /* item.ctpvNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; - item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; */ - excelDownList.push({ - 시설코드: item.bscFctCd, - 권역: item.rvbsn, - 단위유역: item.lgbsn, - 중권역: item.mdmbsn, - 환경청: item.rgnNm, - 시도: item.sidoNm, - 시군구: item.sggNm, - 시설명: item.bscFctNm, - 주소: item.daddr, - 시설용량: item.fctCpc, - 물사용량: item.waterUsage, - 오수전환율: item.swageChangePercent, - 오수발생량추정: item.estimationSewage, - 연간하수유입량: item.sewageInputYear, - 청천시하수유입량: item.sewageInputChungchun, - }); - }); - }else{ - calData.forEach((item: SewageOccurProps) => { - dataFormSetting(item) - /* item.sidoNmNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; - item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; */ - }); - } + // 조회 데이터 설정 set((state: SewageOccurType) => ({ ...state, SewageOccur: pageSize<5000?{ @@ -456,7 +438,33 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: sewageOccurCount: res.count, }:{ ...state.SewageOccur, - excelList: excelDownList, + excelList: [], + } + })) + }, + + searchSewageOccurDetailList: async (bscFctCd: string, searchYear: string) => { + const res = await fetchSewageOccurDetailList(bscFctCd, searchYear); + console.log('resData ', res.data); + let monthData: number[] = []; + + res.data.forEach((item: FlowDataItem) => { + let month = item.msrDt?.substring(5, 7); + const monthIdx = month ? Number(month) - 1 : -1; + if (monthIdx >= 0) { + if (typeof monthData[monthIdx] === 'number') { + monthData[monthIdx] += Number(item.inflAmnt); + } else { + monthData[monthIdx] = Number(item.inflAmnt); + } + } + }) + + set((state: SewageOccurType) => ({ + ...state, + SewageOccurDetail: { + ...state.SewageOccurDetail, + gridListSewageOccurDetail: processedData, } })) }, diff --git a/apps/fo/app/store/store.tsx b/apps/fo/app/store/store.tsx index f17801d1f..cba4b9976 100644 --- a/apps/fo/app/store/store.tsx +++ b/apps/fo/app/store/store.tsx @@ -1,13 +1,19 @@ +import { LoginApi } from '@/src/entities/auth/api/login-service'; import { createStore } from 'zustand/vanilla'; import { CommonReducer, commonState, type CommonStore, type CommonType } from './common'; -import { dashBoardReducer, dashBoardInitState, type DashBoardStore, type DashBoardType } from './dashboard'; +import { dashBoardInitState, dashBoardReducer, type DashBoardStore, type DashBoardType } from './dashboard'; import { facilityPrecipitationInitState, facilityPrecipitationReducer, type FacilityPrecipitationStore, type FacilityPrecipitationType } from './facilityPrecipitation'; -import { planSewageInitState, planSewageReducer, type PlanSewageStore, type PlanSewageType } from './planSewage'; +import { + facilityWaterQltyInitState, + facilityWaterQltyReducer, + type FacilityWaterQltyStore, type FacilityWaterQltyType +} from './facilityWaterQlty'; import { flowRateSearchInitState, flowRateSearchReducer, type FlowRateSearchStore, type FlowRateSearchType } from './flowRate'; +import { planSewageInitState, planSewageReducer, type PlanSewageStore, type PlanSewageType } from './planSewage'; import { processAreaInitState, processAreaReducer, @@ -18,11 +24,12 @@ import { processFacilityReducer, type ProcessFacilityStore, type ProcessFacilityType } from './processFacility'; +import { tableActionsExport, tableStateExport, type tableState, type tableType } from './publicReuseFaciltyInsert/index'; import { - facilityWaterQltyInitState, - facilityWaterQltyReducer, - type FacilityWaterQltyStore, type FacilityWaterQltyType -} from './facilityWaterQlty'; + rdiInitState, + rdiReducer, + type RdiStore, type RdiType +} from './rdi'; import { sewageOccurInitState, sewageOccurReducer, @@ -33,12 +40,6 @@ import { underWaterReducer, type UnderWaterStore, type UnderWaterType } from './underWaterInput'; -import { - rdiInitState, - rdiReducer, - type RdiStore, type RdiType -} from './rdi'; -import { tableActionsExport, tableStateExport, type tableState, type tableType } from './publicReuseFaciltyInsert/index'; export type FoStore = CommonStore & tableType & DashBoardStore & ProcessFacilityStore & ProcessAreaStore & FlowRateSearchStore & FacilityPrecipitationStore & FacilityWaterQltyStore & PlanSewageStore & SewageOccurStore & UnderWaterStore & RdiStore; export type FoState = CommonType & tableState & ProcessFacilityType & ProcessAreaType & FacilityPrecipitationType & FlowRateSearchType & DashBoardType & FacilityWaterQltyType & PlanSewageType & SewageOccurType & UnderWaterType & RdiType; @@ -58,6 +59,7 @@ export const StoreZus = } ) => { return createStore()((set) => { + LoginApi.login({userId: "tuser10003", password: "test1234!"}) return { ...initState, ...CommonReducer(set), From c8d2c4e17ed3b3f42ac32860f8851e5f1e472387 Mon Sep 17 00:00:00 2001 From: jsyang Date: Thu, 24 Jul 2025 10:17:58 -0400 Subject: [PATCH 03/17] =?UTF-8?q?=EC=A1=B0=EC=B9=98=20=EC=A7=84=ED=96=89?= =?UTF-8?q?=20=EC=A4=91,=20pnpm=20build=20any=EC=A0=9C=EC=99=B8=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/pages/dashboard/facilityInfo/page.tsx | 2 +- apps/fo/app/pages/sewageOccur/modal/page.tsx | 75 +++---- apps/fo/app/pages/sewageOccur/page.tsx | 2 - apps/fo/app/store/flowRate/index.tsx | 1 - apps/fo/app/store/sewageOccur/index.tsx | 207 ++---------------- apps/fo/eslint.config.mjs | 4 + .../fo/src/entities/auth/lib/token-manager.ts | 2 +- 7 files changed, 50 insertions(+), 243 deletions(-) diff --git a/apps/fo/app/pages/dashboard/facilityInfo/page.tsx b/apps/fo/app/pages/dashboard/facilityInfo/page.tsx index ddda9c9c0..767ed54e4 100644 --- a/apps/fo/app/pages/dashboard/facilityInfo/page.tsx +++ b/apps/fo/app/pages/dashboard/facilityInfo/page.tsx @@ -2,7 +2,7 @@ import { useFoStore } from "@/app/store"; import type { TableUpperProps } from "@/app/store/processFacility"; import { ContentsDiv, UiModal, UiTable } from "@common/business_components"; -import { cn, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components"; import { useEffect, useState } from "react"; import DashBoardChartModal from "./modal/page"; diff --git a/apps/fo/app/pages/sewageOccur/modal/page.tsx b/apps/fo/app/pages/sewageOccur/modal/page.tsx index 824871432..b776ff7ef 100644 --- a/apps/fo/app/pages/sewageOccur/modal/page.tsx +++ b/apps/fo/app/pages/sewageOccur/modal/page.tsx @@ -1,11 +1,11 @@ "use client" import { useFoStore } from "@/app/store"; -import type { SewageOccurDetailProps } from "@/app/store/sewageOccur"; import { DateMonthPicker, UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Table, TableCell, TableHead, TableRow } from "@common/components/ui"; import { useEffect, useState } from "react"; +type tableType = { msrDt: string,waterUsage: number,swageChangePercent: number,estimationSewage: number}; export default function SewageOccurModal(props: { fcltyName: string; facilityCd : string; searchYear : string}) { // 그리드 관련 const {SewageOccurDetail, searchSewageOccurDetailList} = useFoStore((state) => state); @@ -15,7 +15,7 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd const [startYearMonth, setStartYearMonth] = useState(validSearchYear+'01'); const [endYearMonth, setEndYearMonth] = useState(validSearchYear+'12'); - const [detailList, setDetailList] = useState([]); + const [detailList, setDetailList] = useState([]); const { upHeadListSewageOccurDetail, gridListSewageOccurDetail @@ -26,76 +26,51 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd }, [searchSewageOccurDetailList, props.facilityCd, validSearchYear]); useEffect(() => { - const filteredList = gridListSewageOccurDetail.filter(item => item.msrDt.replace(/-/g, '') >= startYearMonth && item.msrDt.replace(/-/g, '') <= endYearMonth); let maxWaterUsage = 0; - let maxSwageChangePercent = 0; - let maxEstimationSewage = 0; - - let minWaterUsage = filteredList[0]?.waterUsage || 0; - let minSwageChangePercent = filteredList[0]?.swageChangePercent || 0; - let minEstimationSewage = filteredList[0]?.estimationSewage || 0; - + let minWaterUsage = 9999999999; let totalWaterUsage = 0; - let totalSwageChangePercent = 0; - let totalEstimationSewage = 0; - let avgWaterUsage = 0; - let avgSwageChangePercent = 0; - let avgEstimationSewage = 0; - - filteredList.forEach(item => { - if (item.waterUsage > maxWaterUsage) { - maxWaterUsage = item.waterUsage; - } - if (item.swageChangePercent > maxSwageChangePercent) { - maxSwageChangePercent = item.swageChangePercent; - } - if (item.estimationSewage > maxEstimationSewage) { - maxEstimationSewage = item.estimationSewage; + const tableData:tableType[] = [] + gridListSewageOccurDetail.forEach((item, index) => { + tableData.push({ + msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), + waterUsage: Math.round(item.usege * 100) / 100, + swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, + estimationSewage: Math.round(item.usege*0.8 * 100) / 100 + }) + if (item.usege > maxWaterUsage) { + maxWaterUsage = item.usege; } - if (item.waterUsage < minWaterUsage) { - minWaterUsage = item.waterUsage; + if (item.usege < minWaterUsage) { + minWaterUsage = item.usege; } - if (item.swageChangePercent < minSwageChangePercent) { - minSwageChangePercent = item.swageChangePercent; - } - if (item.estimationSewage < minEstimationSewage) { - minEstimationSewage = item.estimationSewage; - } - totalWaterUsage += item.waterUsage; - totalSwageChangePercent += item.swageChangePercent; - totalEstimationSewage += item.estimationSewage; + totalWaterUsage += item.usege; }); - avgWaterUsage = totalWaterUsage?totalWaterUsage / filteredList.length:0; - console.log("totalWaterUsage", totalWaterUsage); - console.log("filteredList.length", filteredList.length); - console.log("avgWaterUsage", avgWaterUsage); - avgSwageChangePercent = totalSwageChangePercent?totalSwageChangePercent / filteredList.length:0; - avgEstimationSewage = totalEstimationSewage?totalEstimationSewage / filteredList.length:0; + avgWaterUsage = totalWaterUsage?totalWaterUsage / gridListSewageOccurDetail.length:0; - const newData = [ + const newData= [ { msrDt: '평균', waterUsage: Math.round(avgWaterUsage * 100) / 100, - swageChangePercent: Math.round(avgSwageChangePercent * 100) / 100, - estimationSewage: Math.round(avgEstimationSewage * 100) / 100 + swageChangePercent: Math.round((avgWaterUsage/avgWaterUsage*0.8) * 100) / 100, + estimationSewage: Math.round(avgWaterUsage*0.8 * 100) / 100 }, { msrDt: '최대', waterUsage: maxWaterUsage, - swageChangePercent: maxSwageChangePercent, - estimationSewage: maxEstimationSewage + swageChangePercent: Math.round((maxWaterUsage/maxWaterUsage*0.8) * 100) / 100, + estimationSewage: Math.round(maxWaterUsage*0.8 * 100) / 100 }, { msrDt: '최소', waterUsage: minWaterUsage, - swageChangePercent: minSwageChangePercent, - estimationSewage: minEstimationSewage + swageChangePercent: Math.round((minWaterUsage/minWaterUsage*0.8) * 100) / 100, + estimationSewage: Math.round(minWaterUsage*0.8 * 100) / 100 }, - ...filteredList + ...tableData ] setDetailList(newData); diff --git a/apps/fo/app/pages/sewageOccur/page.tsx b/apps/fo/app/pages/sewageOccur/page.tsx index af59c633e..68a8f6ed3 100644 --- a/apps/fo/app/pages/sewageOccur/page.tsx +++ b/apps/fo/app/pages/sewageOccur/page.tsx @@ -13,7 +13,6 @@ export default function PlanSewage() { ,SewageOccurSearch ,initializeCommonData ,searchSewageOccurList - ,calculateModalDataForAllFacilities } = useFoStore((state) => state) || { Common: { isInit: false, selectUpdownData: [], selectOperationData: [], selectSidoData: [], selectSigunData: [], selectRegionData: [], selectUnitWaterShedData: [], selectMiddleRegionData: [], selectEnvPartData: [], selectSearchYear: [{ val: "0" }], btnClass: "" }, SewageOccur: { sewageOccurList: [], sewageOccurCount: 0, excelList: [], upHeadList1: [], upHeadList2: [], upHeadList3: [] }, @@ -68,7 +67,6 @@ export default function PlanSewage() { const [selectedRow, setSelectedRow] = useState(null); const [fcltyNm, setFcltyNm] = useState(""); const [fcltyCd, setFcltyCd] = useState(""); - const [isCalculating, setIsCalculating] = useState(false); // 그리드 관련 const searchInputRef = useRef(null); diff --git a/apps/fo/app/store/flowRate/index.tsx b/apps/fo/app/store/flowRate/index.tsx index ae5b7412b..c4c773115 100644 --- a/apps/fo/app/store/flowRate/index.tsx +++ b/apps/fo/app/store/flowRate/index.tsx @@ -344,7 +344,6 @@ export const flowRateSearchReducer:(set:(fn: (state: FlowRateSearchType) => Flow rainEffectDay = rainDay; } - let test = tmpData.find((item: FlowRateModalProps) => item.msrDt === item.msrDt); tmpData.push({ ...item, rainEffectDay: rainEffectDay, diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index a97494726..b8819dba8 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -1,4 +1,3 @@ -import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; import { getFetch } from "@/app/components/api"; export type { TableUpperProps }; @@ -31,26 +30,12 @@ export type SewageOccurProps = { } export type SewageOccurDetailProps = { - msrDt : string, - waterUsage : number, - swageChangePercent : number, - estimationSewage : number, + cnt : number, + sum : number, + yr:string, + usege:number } -type RawSewageData = { - msrDt: string; - inflAmnt: string; - // 기타 다른 필드 생략 -}; - - -/**==================================== - * Store - data - ====================================*/ - -/** - * (1) 메인페이지 - */ // 검색단 const LabelArray:string[] = ['구분', '시도', '시군구','용량별', '시설명', '조회기간', '시설상태', '권역', '단위유역', '중권역', '환경청별']; @@ -131,155 +116,9 @@ const upHeadListSewageOccurDetail:TableUpperProps[] = [ { id: "estimationSewage", title: "오수발생량 추정(m³/일)", row:0, rowSpan:2 }, ]; -const sewageOccurList:SewageOccurProps[] = [ -] +const sewageOccurList:SewageOccurProps[] = [] -const tempSewageOccurList:SewageOccurDetailProps[] = [ - { - msrDt: '2024-01', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 60, - }, - { - msrDt: '2024-02', - waterUsage: 106, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-03', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-04', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-05', - waterUsage: 100, - swageChangePercent: 10, - estimationSewage: 80, - }, - { - msrDt: '2024-06', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-07', - waterUsage: 100, - swageChangePercent: 580, - estimationSewage: 80, - }, - { - msrDt: '2024-08', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-09', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-10', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-11', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2024-12', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-01', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-02', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-03', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-04', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-05', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-06', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-07', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-08', - waterUsage: 100, - swageChangePercent: 0.8, - estimationSewage: 80, - }, - { - msrDt: '2025-09', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-10', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-11', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, - { - msrDt: '2025-12', - waterUsage: 100, - swageChangePercent: 80, - estimationSewage: 80, - }, -] +const tempSewageOccurList:SewageOccurDetailProps[] = [] /**==================================== * Store - API @@ -318,7 +157,6 @@ const fetchSewageOccurDetailList = async (bscFctCd: string, searchYear: string) export type SewageOccurActions = { searchSewageOccurList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void; searchSewageOccurDetailList: (bscFctCd: string, searchYear: string) => void; - calculateModalDataForAllFacilities: (facilityList: SewageOccurProps[], searchYear: string) => Promise; } export type SewageOccurType = { @@ -367,14 +205,6 @@ export const sewageOccurInitState: SewageOccurType = { } } -const dataFormSetting=(item : SewageOccurProps)=> { - DataForm({ type: 'float1', column: 'fctCpc', item: item as unknown as Record }); - DataForm({ type: 'float1', column: 'waterUsage', item: item as unknown as Record}); - DataForm({ type: 'float2', column: 'estimationSewage', item: item as unknown as Record}); - DataForm({ type: 'float2', column: 'sewageInputYear', item: item as unknown as Record}); - DataForm({ type: 'float2', column: 'sewageInputChungchun', item: item as unknown as Record}); -} - export type SewageOccurStore = SewageOccurType & SewageOccurActions; // Add type definitions for API responses @@ -390,9 +220,7 @@ type FlowResponse = { count: number; } -type SetStateFunction = (state: SewageOccurType | ((state: SewageOccurType) => SewageOccurType)) => void; - -export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: SetStateFunction) => { +export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { return { searchSewageOccurList: async (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { const res = await fetchSewageOccurList(pageNo, pageSize, searchYear, part, nameCd, fcltCpct, operationValue, fcltyNm); @@ -422,7 +250,7 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: } totWaterUsage += Number(item.inflAmnt); }); - let avg = totWaterUsage /res2.count; + const avg = totWaterUsage /res2.count; console.log("avg ", avg); item.waterUsage = avg * 0.65; item.sewageInputYear = sumFlow/res2.count; @@ -430,7 +258,7 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: return item; })); // 조회 데이터 설정 - set((state: SewageOccurType) => ({ + set((state: any) => ({ ...state, SewageOccur: pageSize<5000?{ ...state.SewageOccur, @@ -445,26 +273,29 @@ export const sewageOccurReducer:(set:SetStateFunction)=>SewageOccurActions=(set: searchSewageOccurDetailList: async (bscFctCd: string, searchYear: string) => { const res = await fetchSewageOccurDetailList(bscFctCd, searchYear); - console.log('resData ', res.data); - let monthData: number[] = []; + const monthData: SewageOccurDetailProps[] = []; res.data.forEach((item: FlowDataItem) => { - let month = item.msrDt?.substring(5, 7); + const month = item.msrDt?.substring(5, 7); const monthIdx = month ? Number(month) - 1 : -1; if (monthIdx >= 0) { - if (typeof monthData[monthIdx] === 'number') { - monthData[monthIdx] += Number(item.inflAmnt); + if (typeof monthData[monthIdx] === 'object') { + monthData[monthIdx].sum += Number(item.inflAmnt); + monthData[monthIdx].cnt++; } else { - monthData[monthIdx] = Number(item.inflAmnt); + monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0}; } } }) + monthData.forEach(item => { + item.usege = item.sum/item.cnt *0.65 + }); set((state: SewageOccurType) => ({ ...state, SewageOccurDetail: { ...state.SewageOccurDetail, - gridListSewageOccurDetail: processedData, + gridListSewageOccurDetail: monthData, } })) }, diff --git a/apps/fo/eslint.config.mjs b/apps/fo/eslint.config.mjs index c85fb67c4..29e63f653 100644 --- a/apps/fo/eslint.config.mjs +++ b/apps/fo/eslint.config.mjs @@ -11,6 +11,10 @@ const compat = new FlatCompat({ const eslintConfig = [ ...compat.extends("next/core-web-vitals", "next/typescript"), + {rules:{ + // other rules.. + "@typescript-eslint/no-explicit-any": "off", + }}, ]; export default eslintConfig; diff --git a/apps/fo/src/entities/auth/lib/token-manager.ts b/apps/fo/src/entities/auth/lib/token-manager.ts index 40d32f33e..e86dba5f2 100644 --- a/apps/fo/src/entities/auth/lib/token-manager.ts +++ b/apps/fo/src/entities/auth/lib/token-manager.ts @@ -20,7 +20,7 @@ export class TokenManager { public setToken(key: string, value: string): void { setCookie(key, value, { - secure: window.location.protocol === "https:", + secure: location.protocol === "https:", sameSite: "lax", }); } From f1563aa1fc303156046a74d4bea1ff9d0a72f088 Mon Sep 17 00:00:00 2001 From: jwpark Date: Fri, 25 Jul 2025 04:03:03 +0900 Subject: [PATCH 04/17] =?UTF-8?q?=ED=95=98=EC=88=98=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=9F=89=20=EC=88=98=EC=B9=98=20=EC=98=A4=EB=A5=98=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=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/sewageOccur/modal/page.tsx | 57 ++-------------- apps/fo/app/pages/sewageOccur/page.tsx | 2 +- apps/fo/app/store/sewageOccur/index.tsx | 70 +++++++++++++++----- 3 files changed, 60 insertions(+), 69 deletions(-) diff --git a/apps/fo/app/pages/sewageOccur/modal/page.tsx b/apps/fo/app/pages/sewageOccur/modal/page.tsx index b776ff7ef..23c890160 100644 --- a/apps/fo/app/pages/sewageOccur/modal/page.tsx +++ b/apps/fo/app/pages/sewageOccur/modal/page.tsx @@ -1,11 +1,12 @@ "use client" import { useFoStore } from "@/app/store"; +import type { modalTableType } from "@/app/store/sewageOccur"; import { DateMonthPicker, UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Table, TableCell, TableHead, TableRow } from "@common/components/ui"; import { useEffect, useState } from "react"; -type tableType = { msrDt: string,waterUsage: number,swageChangePercent: number,estimationSewage: number}; + export default function SewageOccurModal(props: { fcltyName: string; facilityCd : string; searchYear : string}) { // 그리드 관련 const {SewageOccurDetail, searchSewageOccurDetailList} = useFoStore((state) => state); @@ -15,7 +16,7 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd const [startYearMonth, setStartYearMonth] = useState(validSearchYear+'01'); const [endYearMonth, setEndYearMonth] = useState(validSearchYear+'12'); - const [detailList, setDetailList] = useState([]); + const [detailList, setDetailList] = useState([]); const { upHeadListSewageOccurDetail, gridListSewageOccurDetail @@ -26,56 +27,8 @@ export default function SewageOccurModal(props: { fcltyName: string; facilityCd }, [searchSewageOccurDetailList, props.facilityCd, validSearchYear]); useEffect(() => { - let maxWaterUsage = 0; - let minWaterUsage = 9999999999; - let totalWaterUsage = 0; - let avgWaterUsage = 0; - const tableData:tableType[] = [] - gridListSewageOccurDetail.forEach((item, index) => { - tableData.push({ - msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), - waterUsage: Math.round(item.usege * 100) / 100, - swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, - estimationSewage: Math.round(item.usege*0.8 * 100) / 100 - }) - if (item.usege > maxWaterUsage) { - maxWaterUsage = item.usege; - } - - if (item.usege < minWaterUsage) { - minWaterUsage = item.usege; - } - - totalWaterUsage += item.usege; - }); - - avgWaterUsage = totalWaterUsage?totalWaterUsage / gridListSewageOccurDetail.length:0; - - const newData= [ - { - msrDt: '평균', - waterUsage: Math.round(avgWaterUsage * 100) / 100, - swageChangePercent: Math.round((avgWaterUsage/avgWaterUsage*0.8) * 100) / 100, - estimationSewage: Math.round(avgWaterUsage*0.8 * 100) / 100 - }, - { - msrDt: '최대', - waterUsage: maxWaterUsage, - swageChangePercent: Math.round((maxWaterUsage/maxWaterUsage*0.8) * 100) / 100, - estimationSewage: Math.round(maxWaterUsage*0.8 * 100) / 100 - }, - { - msrDt: '최소', - waterUsage: minWaterUsage, - swageChangePercent: Math.round((minWaterUsage/minWaterUsage*0.8) * 100) / 100, - estimationSewage: Math.round(minWaterUsage*0.8 * 100) / 100 - }, - ...tableData - ] - setDetailList(newData); - - - }, [startYearMonth, endYearMonth, gridListSewageOccurDetail]); + setDetailList(gridListSewageOccurDetail); + }, [gridListSewageOccurDetail]); return ( <> diff --git a/apps/fo/app/pages/sewageOccur/page.tsx b/apps/fo/app/pages/sewageOccur/page.tsx index 68a8f6ed3..d275d7356 100644 --- a/apps/fo/app/pages/sewageOccur/page.tsx +++ b/apps/fo/app/pages/sewageOccur/page.tsx @@ -85,7 +85,7 @@ export default function PlanSewage() { const [operationValue, setOperationValue] = useState("0"); // 조회기간 // const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); - const [searchYear, setSearchYear] = useState("2023"); + const [searchYear, setSearchYear] = useState("2024"); /** * 페이지 함수 diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index b8819dba8..eef3ad3dd 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -28,7 +28,7 @@ export type SewageOccurProps = { mdmbsn : string, msrDt : string, } - +export type modalTableType = { msrDt: string,waterUsage: number,swageChangePercent: number,estimationSewage: number}; export type SewageOccurDetailProps = { cnt : number, sum : number, @@ -118,7 +118,7 @@ const upHeadListSewageOccurDetail:TableUpperProps[] = [ const sewageOccurList:SewageOccurProps[] = [] -const tempSewageOccurList:SewageOccurDetailProps[] = [] +const tempSewageOccurList:modalTableType[] = [] /**==================================== * Store - API @@ -126,11 +126,6 @@ const tempSewageOccurList:SewageOccurDetailProps[] = [] const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { // 20250701임시시 - console.log("partCd", partCd); - console.log("nameCd", nameCd); - console.log("fcltCpct", fcltCpct); - console.log("operationValue", operationValue); - console.log("fcltyNm", fcltyNm); console.log("searchYear", searchYear); const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : ''; const url = '/fclt/flow/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr; @@ -178,7 +173,7 @@ export type SewageOccurType = { SewageOccurDetail : { isInit: boolean; upHeadListSewageOccurDetail: TableUpperProps[]; - gridListSewageOccurDetail: SewageOccurDetailProps[]; + gridListSewageOccurDetail: modalTableType[]; } } @@ -227,7 +222,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const data = res.data; // Promise.all을 사용하여 모든 비동기 작업이 완료될 때까지 기다림 - const calData = await Promise.all(data.map(async (item: SewageOccurProps) => { + const calData = await Promise.all(data.map(async (item: SewageOccurProps, idx) => { item.sidoNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); @@ -238,7 +233,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const bscFctCd = item.bscFctCd; const url2 = '/fclt/flow/' + bscFctCd + '/' + searchYear; const res2 = await getFetch('fo', url2) as FlowResponse; - const sumFlow = res2.data.reduce((acc: number, curr: FlowDataItem) => Number(acc) + Number(curr.inflAmnt), 0); let sumChungcunDay = 0; let chungcunSumFlow = 0; @@ -251,9 +245,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { totWaterUsage += Number(item.inflAmnt); }); const avg = totWaterUsage /res2.count; - console.log("avg ", avg); item.waterUsage = avg * 0.65; - item.sewageInputYear = sumFlow/res2.count; + item.sewageInputYear = avg; item.sewageInputChungchun = chungcunSumFlow===0?0:(chungcunSumFlow / sumChungcunDay); return item; })); @@ -274,9 +267,9 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { searchSewageOccurDetailList: async (bscFctCd: string, searchYear: string) => { const res = await fetchSewageOccurDetailList(bscFctCd, searchYear); const monthData: SewageOccurDetailProps[] = []; - + let tot = 0, cnt= 0 res.data.forEach((item: FlowDataItem) => { - const month = item.msrDt?.substring(5, 7); + const month = item.msrDt?.substring(4, 6); const monthIdx = month ? Number(month) - 1 : -1; if (monthIdx >= 0) { if (typeof monthData[monthIdx] === 'object') { @@ -286,16 +279,61 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0}; } } + tot += Number(item.inflAmnt) + cnt++ }) - monthData.forEach(item => { + console.log('tot', tot, cnt, tot/cnt, tot/cnt*0.65); + const tableData:modalTableType[] = [] + + let maxWaterUsage = 0; + let minWaterUsage = 9999999999; + let avgWaterUsage = 0; + monthData.forEach((item, index) => { item.usege = item.sum/item.cnt *0.65 + tableData.push({ + msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), + waterUsage: Math.round(item.usege*100) /100, + swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, + estimationSewage: Math.round(item.usege*0.8 * 100) / 100 + }) + if (item.usege > maxWaterUsage) { + maxWaterUsage = item.usege; + } + + if (item.usege < minWaterUsage) { + minWaterUsage = item.usege; + } + }); + avgWaterUsage = tot/cnt*0.65 + + const newData= [ + { + msrDt: '평균', + waterUsage: Math.round(avgWaterUsage*100) /100, + swageChangePercent: 0.8, + estimationSewage: Math.round(avgWaterUsage*0.8*100) /100, + }, + { + msrDt: '최대', + waterUsage: Math.round(maxWaterUsage*100) /100, + swageChangePercent: 0.8, + estimationSewage: Math.round(maxWaterUsage*0.8*100) /100, + }, + { + msrDt: '최소', + waterUsage: Math.round(minWaterUsage*100) /100, + swageChangePercent: 0.8, + estimationSewage: Math.round(minWaterUsage*0.8*100) /100, + }, + ...tableData + ] set((state: SewageOccurType) => ({ ...state, SewageOccurDetail: { ...state.SewageOccurDetail, - gridListSewageOccurDetail: monthData, + gridListSewageOccurDetail: newData, } })) }, From 04bb3657bb282dcc3060c8a5558dcb3c1677116e Mon Sep 17 00:00:00 2001 From: jwpark Date: Fri, 25 Jul 2025 04:16:27 +0900 Subject: [PATCH 05/17] =?UTF-8?q?idx=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=EB=A1=9C=20=EC=82=AD=EC=A0=9C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/sewageOccur/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index eef3ad3dd..6aff0cec2 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -222,7 +222,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const data = res.data; // Promise.all을 사용하여 모든 비동기 작업이 완료될 때까지 기다림 - const calData = await Promise.all(data.map(async (item: SewageOccurProps, idx) => { + const calData = await Promise.all(data.map(async (item: SewageOccurProps) => { item.sidoNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); From e7195f7db0cfa263dc8a418c351a4454e84a28b3 Mon Sep 17 00:00:00 2001 From: jwpark Date: Fri, 25 Jul 2025 04:26:17 +0900 Subject: [PATCH 06/17] =?UTF-8?q?=EC=98=A4=EC=88=98=EB=B0=9C=EC=83=9D?= =?UTF-8?q?=EB=9F=89=20=EB=82=98=EC=98=A4=EB=8F=84=EB=A1=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/sewageOccur/index.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index 6aff0cec2..4bf285230 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -226,9 +226,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { item.sidoNm = item.lclgvrnmntNm.split(' ')[0]?.toString() || ''; item.sggNm = item.lclgvrnmntNm.split(' ')[1]?.toString() || ''; item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); - item.waterUsage = 0; item.swageChangePercent = 80; - item.estimationSewage = item.waterUsage * (item.swageChangePercent/100); + const bscFctCd = item.bscFctCd; const url2 = '/fclt/flow/' + bscFctCd + '/' + searchYear; @@ -245,9 +244,10 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { totWaterUsage += Number(item.inflAmnt); }); const avg = totWaterUsage /res2.count; - item.waterUsage = avg * 0.65; - item.sewageInputYear = avg; - item.sewageInputChungchun = chungcunSumFlow===0?0:(chungcunSumFlow / sumChungcunDay); + item.waterUsage = parseFloat((avg * 0.65).toFixed(2)); + item.sewageInputYear = parseFloat(avg.toFixed(2)); + item.sewageInputChungchun = parseFloat((chungcunSumFlow===0?0:(chungcunSumFlow / sumChungcunDay)).toFixed(2)); + item.estimationSewage = parseFloat((item.waterUsage * (item.swageChangePercent/100)).toFixed(2)); return item; })); // 조회 데이터 설정 From 583559ec601bc53e93348d83728d6fb4a41673c2 Mon Sep 17 00:00:00 2001 From: jwpark Date: Fri, 25 Jul 2025 04:35:24 +0900 Subject: [PATCH 07/17] =?UTF-8?q?=EC=98=A4=EC=88=98=EB=B0=9C=EC=83=9D?= =?UTF-8?q?=EB=9F=89=EC=97=90=20=EA=B8=B0=EC=A4=80=EB=85=84=EB=8F=84=20202?= =?UTF-8?q?3=EC=9C=BC=EB=A1=9C=20=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/sewageOccur/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/fo/app/pages/sewageOccur/page.tsx b/apps/fo/app/pages/sewageOccur/page.tsx index d275d7356..8b004e681 100644 --- a/apps/fo/app/pages/sewageOccur/page.tsx +++ b/apps/fo/app/pages/sewageOccur/page.tsx @@ -85,7 +85,7 @@ export default function PlanSewage() { const [operationValue, setOperationValue] = useState("0"); // 조회기간 // const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || "0"); - const [searchYear, setSearchYear] = useState("2024"); + const [searchYear, setSearchYear] = useState("2023"); /** * 페이지 함수 @@ -128,9 +128,9 @@ export default function PlanSewage() { useEffect(() => { if (!isInit) { initializeCommonData(); - searchSewageOccurList(1, 10, selectSearchYear[0]?.val || "0"); + searchSewageOccurList(1, 10, searchYear || "0"); } - }, [isInit, initializeCommonData, searchSewageOccurList, selectSearchYear]); + }, [isInit, initializeCommonData, searchSewageOccurList, searchYear]); useEffect(() => { if (excelList && excelList.length > 0) { From cc67d707d99c76c698dcd0d49c50943d78347abd Mon Sep 17 00:00:00 2001 From: jwpark Date: Fri, 25 Jul 2025 04:49:18 +0900 Subject: [PATCH 08/17] =?UTF-8?q?default=20=EA=B0=92=EC=9D=B4=202023?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9A=B0=EC=84=A0=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/pages/flowRate/page.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/fo/app/pages/flowRate/page.tsx b/apps/fo/app/pages/flowRate/page.tsx index 8e258b5a2..0c4f503e9 100644 --- a/apps/fo/app/pages/flowRate/page.tsx +++ b/apps/fo/app/pages/flowRate/page.tsx @@ -126,10 +126,11 @@ export default function ProcessFacilitySearch() { // 시도 데이터 초기화 useEffect(() => { if(!isInit) { + console.log('searchYearValue', searchYearValue, isInit); initializeCommonData(); - searchFlowRateList(1, 10, selectSearchYear[0]?.val || "0"); + searchFlowRateList(1, 10, searchYearValue || "0"); } - }, [isInit, initializeCommonData, searchFlowRateList, selectSearchYear]); + }, [isInit, initializeCommonData, searchFlowRateList, searchYearValue]); useEffect(() => { if (excelList && excelList.length > 0) { From d23c9ca4b1989d604f0f9264da6d0a79e5cf1172 Mon Sep 17 00:00:00 2001 From: jwpark Date: Fri, 25 Jul 2025 04:53:53 +0900 Subject: [PATCH 09/17] =?UTF-8?q?2023=EB=85=84=EB=8F=84=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EC=9E=AC=20=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/facilityPrecipitation/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/fo/app/pages/facilityPrecipitation/page.tsx b/apps/fo/app/pages/facilityPrecipitation/page.tsx index 5b9cde969..96456a71b 100644 --- a/apps/fo/app/pages/facilityPrecipitation/page.tsx +++ b/apps/fo/app/pages/facilityPrecipitation/page.tsx @@ -126,9 +126,9 @@ export default function FacilityPrecipitation() { useEffect(() => { if (!isInit) { initializeCommonData(); - searchFacilityPrecipitationList(1, 10, selectSearchYear[0]?.val || "0"); + searchFacilityPrecipitationList(1, 10, searchYear || "0"); } - }, [isInit, initializeCommonData, searchFacilityPrecipitationList, selectSearchYear]); + }, [isInit, initializeCommonData, searchFacilityPrecipitationList, searchYear]); useEffect(() => { if (excelList && excelList.length > 0) { From 99ffa1d6d4a669a612bbd8a668887970e75ce60f Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Jul 2025 09:38:50 +0900 Subject: [PATCH 10/17] =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=2020?= =?UTF-8?q?21=EB=85=84=20=EB=B6=80=EC=82=B0=20=EC=88=98=EC=98=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20default=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/pages/dashboard/page.tsx | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/fo/app/pages/dashboard/page.tsx b/apps/fo/app/pages/dashboard/page.tsx index 3b6f18351..8ffd3e943 100644 --- a/apps/fo/app/pages/dashboard/page.tsx +++ b/apps/fo/app/pages/dashboard/page.tsx @@ -57,7 +57,8 @@ export default function DashBoard() { /******************선택된 데이터******************/ // 연도 - const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || '0'); + //const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || '0'); + const [searchYear, setSearchYear] = useState('2021'); // 시설명 const [fcltyList, setFcltyList] = useState<{bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | ''}>({ bscFctCd: '', @@ -71,11 +72,11 @@ export default function DashBoard() { if (!isInit) { initializeCommonData(); setFcltyList({ - bscFctCd: '11000SW001R', - bscFctNm: '난지', - fcltyCpc: 860000, - trtFrfNm: '표준활성슬러지법, MLE, A2O', - efflWqltStndrdNm: '500톤 이상(Ⅲ지역)' + bscFctCd: '26260PB001R', + bscFctNm: '수영', + fcltyCpc: 452000, + trtFrfNm: '표준활성슬러지법, MLE, MBR', + efflWqltStndrdNm: '500톤 이상(Ⅳ지역)' }); } }, [isInit, initializeCommonData]); @@ -257,11 +258,11 @@ export default function DashBoard() { const initVal = () => { setFcltyList({ - bscFctCd: '11000SW001R', - bscFctNm: '난지', - fcltyCpc: 860000, - trtFrfNm: '표준활성슬러지법, MLE, A2O', - efflWqltStndrdNm: '500톤 이상(Ⅲ지역)' + bscFctCd: '26260PB001R', + bscFctNm: '수영', + fcltyCpc: 452000, + trtFrfNm: '표준활성슬러지법, MLE, MBR', + efflWqltStndrdNm: '500톤 이상(Ⅳ지역)' }); } From 314e6ed9ad00bafcc395d140036fa5109d3a2284 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Jul 2025 09:57:47 +0900 Subject: [PATCH 11/17] =?UTF-8?q?=EC=A1=B0=EC=B9=98=EC=A7=84=ED=96=89?= =?UTF-8?q?=EC=A4=91=20-=20=EA=B0=95=EC=9A=B0=EB=9F=89=20=EC=88=A8?= =?UTF-8?q?=EA=B9=80=20-=20=EC=88=98=EC=A7=88=EC=A1=B0=ED=9A=8C=202023?= =?UTF-8?q?=EB=85=84=EC=9C=BC=EB=A1=9C=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/pages/facilityWaterQlty/modal/page.tsx | 4 ++-- apps/fo/app/pages/facilityWaterQlty/page.tsx | 3 ++- apps/fo/app/pages/flowRate/modal/page.tsx | 2 +- apps/fo/app/store/facilityWaterQlty/index.tsx | 4 ++-- apps/fo/app/store/flowRate/index.tsx | 6 +++--- apps/fo/app/store/store.tsx | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx b/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx index 0cfb42998..eadfa9ba8 100644 --- a/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx +++ b/apps/fo/app/pages/facilityWaterQlty/modal/page.tsx @@ -303,12 +303,12 @@ export default function WaterQualityModal({fcltyName='', facilityCd='', searchYe "유출SS(mg/L)": item.efflWqltSs, "유출TN(mg/L)": item.efflWqltTn, "유출TP(mg/L)": item.efflWqltTp, - "강우량(mm/일)": item.infoRnDay?item.infoRnDay.toString():"0.0", +/* "강우량(mm/일)": item.infoRnDay?item.infoRnDay.toString():"0.0", */ }); }); } if (excelDownList && excelDownList.length > 0) { - downloadExcel({ data: JSON.parse(JSON.stringify(excelDownList)), fileName: searchYear+'년 '+fcltyName + ' 수질현황', sheetNameArray: [fcltyName + ' 수질현황'], headerRange: 'A1:L1' }); + downloadExcel({ data: JSON.parse(JSON.stringify(excelDownList)), fileName: searchYear+'년 '+fcltyName + ' 수질현황', sheetNameArray: [fcltyName + ' 수질현황'], headerRange: 'A1:K1' }); } else if (prevExcelListRef.current && prevExcelListRef.current.length > 0) { alert('다운받을 데이터가 없습니다.'); } diff --git a/apps/fo/app/pages/facilityWaterQlty/page.tsx b/apps/fo/app/pages/facilityWaterQlty/page.tsx index 6a9ad4f69..7d571a69f 100644 --- a/apps/fo/app/pages/facilityWaterQlty/page.tsx +++ b/apps/fo/app/pages/facilityWaterQlty/page.tsx @@ -48,7 +48,8 @@ export default function ProcessFacilitySearch() { const [upheadList, setUpheadList] = useState(upHeadList1); const [fcltyName, setFcltyName] = useState(""); const [operationValue, setOperationValue] = useState("0"); - const [searchYearValue, setSearchYearValue] = useState(selectSearchYear[0]?.val || "0"); + //const [searchYearValue, setSearchYearValue] = useState(selectSearchYear[0]?.val || "0"); + const [searchYearValue, setSearchYearValue] = useState("2023"); const [fcltCpct, setFcltCpct] = useState("0"); // 모달 상태 추가 diff --git a/apps/fo/app/pages/flowRate/modal/page.tsx b/apps/fo/app/pages/flowRate/modal/page.tsx index 33b255b6c..409dab7eb 100644 --- a/apps/fo/app/pages/flowRate/modal/page.tsx +++ b/apps/fo/app/pages/flowRate/modal/page.tsx @@ -167,7 +167,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st "연계처리량(m³/일)": item.sumFlow, "총인반류수량(m³/일)": item.returnAmnt, "방류량(m³/일)": item.efflAmnt, - "강우량(mm/일)": item.infoRnDay, + /* "강우량(mm/일)": item.infoRnDay, */ }); }); } diff --git a/apps/fo/app/store/facilityWaterQlty/index.tsx b/apps/fo/app/store/facilityWaterQlty/index.tsx index 2e8d1cfd6..565c251d2 100644 --- a/apps/fo/app/store/facilityWaterQlty/index.tsx +++ b/apps/fo/app/store/facilityWaterQlty/index.tsx @@ -104,7 +104,7 @@ export type modalExcelType = { "유출SS(mg/L)": string; "유출TN(mg/L)": string; "유출TP(mg/L)": string; - "강우량(mm/일)": string; + /* "강우량(mm/일)": string; */ } /**==================================== @@ -207,7 +207,7 @@ const upHeadListModalYear: TableUpperProps[] = [ { id: "efflWqltSs", title: "SS\n(mg/L)", upName: "upChangeRe2", upSequnce: 3, align: "right" }, { id: "efflWqltTn", title: "T-N\n(mg/L)", upName: "upChangeRe2", upSequnce: 2, align: "right" }, { id: "efflWqltTp", title: "T-P\n(mg/L)", upName: "upChangeRe2", upSequnce: 3, align: "right" }, - { id: "infoRnDay", title: "강우량(mm/일)", align: "right" }, + /* { id: "infoRnDay", title: "강우량(mm/일)", align: "right" }, */ ]; // 처리시설 수질현황 헤더(모달-수질TMS) diff --git a/apps/fo/app/store/flowRate/index.tsx b/apps/fo/app/store/flowRate/index.tsx index c4c773115..38cb4e2e6 100644 --- a/apps/fo/app/store/flowRate/index.tsx +++ b/apps/fo/app/store/flowRate/index.tsx @@ -50,13 +50,13 @@ export interface ExcelType { } export type modalExcelType = { - 날짜: string, + "날짜": string, "총유입량(m³/일)": number | '', "하수유입량(m³/일)": number | '', "연계처리량(m³/일)": number | '', "총인반류수량(m³/일)": number | '', "방류량(m³/일)": number | '', - "강우량(mm/일)": number | string | '', + /* "강우량(mm/일)": number | string | '', */ } /** * (2) 모달 @@ -157,7 +157,7 @@ const upHeadListFlowRateModal:TableUpperProps[] = [ { id: "sumFlow", title: "연계처리량(m³/일)", align:"right"}, { id: "returnAmnt", title: "총인 반류수량(m³/일)", align:"right"}, { id: "efflAmnt", title: "방류량(m³/일)", align:"right"}, - { id: "infoRnDay", title: "강우량(mm/일)", align:"right"} + /* { id: "infoRnDay", title: "강우량(mm/일)", align:"right"} */ ] const modalFlowRateListYear:FlowRateModalProps[] = [ diff --git a/apps/fo/app/store/store.tsx b/apps/fo/app/store/store.tsx index cba4b9976..512458c90 100644 --- a/apps/fo/app/store/store.tsx +++ b/apps/fo/app/store/store.tsx @@ -59,7 +59,7 @@ export const StoreZus = } ) => { return createStore()((set) => { - LoginApi.login({userId: "tuser10003", password: "test1234!"}) + LoginApi.login({userId: "admin1gmail", password: "test1234!"}) return { ...initState, ...CommonReducer(set), From ea36df1c29d3b0918e4d76f7d2f1547ce887708a Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Jul 2025 15:49:06 +0900 Subject: [PATCH 12/17] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=99=84=EB=A3=8C,=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EC=8B=9C=20=EC=88=98=EC=98=81=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/pages/dashboard/page.tsx | 40 ++++++++++++++++++++---- apps/fo/app/pages/dashboardMain/page.tsx | 6 ++-- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/apps/fo/app/pages/dashboard/page.tsx b/apps/fo/app/pages/dashboard/page.tsx index 8ffd3e943..754021374 100644 --- a/apps/fo/app/pages/dashboard/page.tsx +++ b/apps/fo/app/pages/dashboard/page.tsx @@ -61,6 +61,14 @@ export default function DashBoard() { const [searchYear, setSearchYear] = useState('2021'); // 시설명 const [fcltyList, setFcltyList] = useState<{bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | ''}>({ + bscFctCd: '26260PB001R', + bscFctNm: '수영', + fcltyCpc: 452000, + trtFrfNm: '표준활성슬러지법, MLE, MBR', + efflWqltStndrdNm: '500톤 이상(Ⅳ지역)' + }); + + const [searchFcltyList, setSearchFcltyList] = useState<{bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | ''}>({ bscFctCd: '', bscFctNm: '', fcltyCpc: '', @@ -71,7 +79,7 @@ export default function DashBoard() { useEffect(() => { if (!isInit) { initializeCommonData(); - setFcltyList({ + setSearchFcltyList({ bscFctCd: '26260PB001R', bscFctNm: '수영', fcltyCpc: 452000, @@ -264,6 +272,23 @@ export default function DashBoard() { trtFrfNm: '표준활성슬러지법, MLE, MBR', efflWqltStndrdNm: '500톤 이상(Ⅳ지역)' }); + + setSearchFcltyList({ + bscFctCd: '26260PB001R', + bscFctNm: '수영', + fcltyCpc: 452000, + trtFrfNm: '표준활성슬러지법, MLE, MBR', + efflWqltStndrdNm: '500톤 이상(Ⅳ지역)' + }); + + searchFcltyList.bscFctNm = '수영'; + } + + const searchVal = () => { + setSearchFcltyList(fcltyList); + if(searchFcltyList.bscFctCd) { + searchOperationStatus(false, searchYear, fcltyList.bscFctCd); + } } return ( @@ -275,10 +300,13 @@ export default function DashBoard() { onSelectValue(val.toString(), 'sido')} value={sidoValue} selectClass={undefined}/> onSelectValue(val.toString(), 'sigun')} value={sigunValue} selectClass={undefined}/>
- +
+ @@ -289,16 +317,16 @@ export default function DashBoard() {
- + - + - + - + diff --git a/apps/fo/app/pages/dashboardMain/page.tsx b/apps/fo/app/pages/dashboardMain/page.tsx index ccbf42c9d..143a78acd 100644 --- a/apps/fo/app/pages/dashboardMain/page.tsx +++ b/apps/fo/app/pages/dashboardMain/page.tsx @@ -3,7 +3,7 @@ import { useFoStore } from "@/app/store"; import { useEffect, useState } from "react"; import SearchInput from "../../components/common/SearchInput"; -export default function DashBoardFclty({ onFacilityChange, sidoSigun, facilityNm }: { onFacilityChange?: (facility: { bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | '' }) => void, sidoSigun?: string, facilityNm?: string }) { +export default function DashBoardFclty({ onFacilityChange, sidoSigun, facilityNm, }: { onFacilityChange?: (facility: { bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | '' }) => void, sidoSigun?: string, facilityNm?: string }) { // 입력값 상태 관리 const { Common, initializeCommonData } = useFoStore((state) => state); @@ -12,7 +12,7 @@ export default function DashBoardFclty({ onFacilityChange, sidoSigun, facilityNm } = Common; // 시설명 - const [bscFctNm, setFcltyName] = useState(facilityNm || '난지'); + const [bscFctNm, setFcltyName] = useState(facilityNm || '수영'); const [bscFctCd, setbscFctCd] = useState('11000SW001R'); const [fcltyCpc, setFcltyCpc] = useState(860000); const [trtFrfNm, setTrtFrfNm] = useState('표준활성슬러지법, MLE, A2O'); @@ -48,8 +48,6 @@ export default function DashBoardFclty({ onFacilityChange, sidoSigun, facilityNm } } - console.log('bscFctNm : ', bscFctNm); - return (
From f744957447e791973bea837123ef1652e75f2b8d Mon Sep 17 00:00:00 2001 From: jsyang Date: Fri, 25 Jul 2025 05:03:08 -0400 Subject: [PATCH 13/17] =?UTF-8?q?=EC=A7=80=ED=95=98=EC=88=98=20=EC=9C=A0?= =?UTF-8?q?=EC=9E=85=EB=9F=89=20=EB=AA=A8=EB=8B=AC=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/pages/underWaterInput/modal/page.tsx | 9 +- apps/fo/app/pages/underWaterInput/page.tsx | 4 +- apps/fo/app/store/sewageOccur/index.tsx | 11 +- apps/fo/app/store/underWaterInput/index.tsx | 135 ++++++++++-------- apps/fo/app/store/underWaterInput/types.tsx | 58 ++++++++ 5 files changed, 144 insertions(+), 73 deletions(-) create mode 100644 apps/fo/app/store/underWaterInput/types.tsx diff --git a/apps/fo/app/pages/underWaterInput/modal/page.tsx b/apps/fo/app/pages/underWaterInput/modal/page.tsx index 9e49fb1bc..145612431 100644 --- a/apps/fo/app/pages/underWaterInput/modal/page.tsx +++ b/apps/fo/app/pages/underWaterInput/modal/page.tsx @@ -1,6 +1,6 @@ "use client" import { useFoStore } from "@/app/store"; -import type { UnderWaterInputModalProps } from "@/app/store/underWaterInput"; +import type { UnderWaterInputModalProps } from "@/app/store/underWaterInput/types"; 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"; @@ -19,7 +19,7 @@ const tabList1 = [ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date().getFullYear().toString()} : ModalProps) { // 그리드 관련 - const {UnderWaterDetail} = useFoStore((state) => state); + const {UnderWaterDetail, unserWaterModal} = useFoStore((state) => state); const [startYmDate, setStartYmDate] = useState(searchYear+'01'); const [endYmDate, setEndYmDate] = useState(searchYear+'12'); @@ -115,7 +115,10 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date( setPrevEndYmDate(searchYear+'12'); } }, [searchYear, tabTerm]); - + useEffect(()=>{ + console.log(fcltyName, searchYear); + unserWaterModal(fcltyName, searchYear); + }, []) useEffect(() => { if(endYmDate < startYmDate) { alert('종료일이 시작일보다 작습니다.') diff --git a/apps/fo/app/pages/underWaterInput/page.tsx b/apps/fo/app/pages/underWaterInput/page.tsx index 93a6f0863..d57c894dd 100644 --- a/apps/fo/app/pages/underWaterInput/page.tsx +++ b/apps/fo/app/pages/underWaterInput/page.tsx @@ -5,7 +5,7 @@ import { ContentsDiv, downloadExcel, MainDiv, SearchBaseForm, SearchInput, Selec import ListDiv from "@common/business_components/ui/list_div"; import { useCallback, useEffect, useRef, useState } from "react"; import UnderWaterInputModal from "./modal/page"; -import type { UnderWaterProps } from "@/app/store/underWaterInput"; +import type { UnderWaterProps } from "@/app/store/underWaterInput/types"; export default function UnderWaterInput() { const {Common @@ -115,7 +115,7 @@ export default function UnderWaterInput() { // 셀 클릭 시 모달 표시 const cellClick = (index: number) => { if (underWater[index]) { - setFcltyNm(underWater[index].bscFctNm); + setFcltyNm(underWater[index].bscFctCd); setSelectedRow(index); // 클릭한 행의 index 저장 } }; diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index 4bf285230..d27aaee49 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -140,12 +140,6 @@ const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear return { data: res.data, count: res.count } */ } -const fetchSewageOccurDetailList = async (bscFctCd: string, searchYear: string) => { - const url = '/fclt/flow/' + bscFctCd + '/' + searchYear; - const res = await getFetch('fo', url); - return { data: res.data, count: res.count } -} - /**==================================== * Store - expaort ====================================*/ @@ -230,8 +224,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const bscFctCd = item.bscFctCd; - const url2 = '/fclt/flow/' + bscFctCd + '/' + searchYear; - const res2 = await getFetch('fo', url2) as FlowResponse; + const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as FlowResponse; let sumChungcunDay = 0; let chungcunSumFlow = 0; @@ -265,7 +258,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { }, searchSewageOccurDetailList: async (bscFctCd: string, searchYear: string) => { - const res = await fetchSewageOccurDetailList(bscFctCd, searchYear); + const res = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear); const monthData: SewageOccurDetailProps[] = []; let tot = 0, cnt= 0 res.data.forEach((item: FlowDataItem) => { diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index ea6f4575b..6d067ae58 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -1,6 +1,8 @@ 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 type { modalTableType, SewageOccurDetailProps } from "../sewageOccur"; export type { TableUpperProps }; /**==================================== * Store - 타입 @@ -10,47 +12,6 @@ export type { TableUpperProps }; * (1) 메인페이지 */ // 시설별 강수현황 -export type UnderWaterProps = { - bscFctCd : string, - lclgvrnmntNm : string, - sidoNm : string, - sggNm : string, - bscFctNm : string, - daddr : string, - fctCpc : number, - underWaterInputYear : number, - underWaterInputSummer : number, - underWaterInputWinter : number, - infoRnDay : number, - rgnNm : string, - rvbsn : string, - lgbsn : string, - mdmbsn : string, -} -export interface UnderWaterInterface { - bscFctCd : string, - sidoNm : string, - sggNm : string, - bscFctNm : string, - daddr : string, - fctCpc : number, - underWaterInputYear : number, - underWaterInputSummer : number, - underWaterInputWinter : number, - infoRnDay : number, - rgnNm : string, - rvbsn : string, - lgbsn : string, - mdmbsn : string, -} - -// 모달 -export interface UnderWaterInputModalProps { - msrDt : string, - realSewageInput : number | '', - sewageOccur : number | '', - underWaterInput : number | '', -} /**==================================== * Store - data @@ -62,22 +23,6 @@ export interface UnderWaterInputModalProps { // 검색단 const LabelArray:string[] = ['구분', '시도', '시군구','용량별', '시설명', '조회기간', '시설상태', '권역', '단위유역', '중권역', '환경청별']; -export interface ExcelType { - 시설코드: string, - 권역:string|'', - 단위유역:string|'', - 중권역:string|'', - 환경청:string|'', - 시도: string, - 시군구: string, - 시설명: string, - 주소: string, - 시설용량: number, - 연간지하수유입량: number | '', - 하절기지하수유입량: number | '', - 동절기지하수유입량: number | '', -} - // 리스트 헤더 const upHeadList1:TableUpperProps[] = [ { id: "bscFctCd", title: "시설코드", row:0, rowSpan:2 }, @@ -247,6 +192,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 } export type UnderWaterType = { @@ -315,8 +261,7 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy item.fctCpc = parseFloat(item.fctCpc.toString().replace(/,/g, '')); const bscFctCd = item.bscFctCd; - const url2 = '/fclt/flow/' + bscFctCd + '/' + searchYear; - const res2 = await getFetch('fo', url2) as ApiResponse; + const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as ApiResponse; let sumChungcunDay = 0; let chungcunSumFlow = 0; @@ -393,5 +338,77 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy } })) }, + unserWaterModal:async (bscFctCd, searchYear)=>{ + const res = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear); + const monthData: SewageOccurDetailProps[] = []; + let tot = 0, cnt= 0 + res.data.forEach((item: FlowDataItem) => { + const month = item.msrDt?.substring(4, 6); + const monthIdx = month ? Number(month) - 1 : -1; + if (monthIdx >= 0) { + if (typeof monthData[monthIdx] === 'object') { + monthData[monthIdx].sum += Number(item.inflAmnt); + monthData[monthIdx].cnt++; + } else { + monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0}; + } + } + tot += Number(item.inflAmnt) + cnt++ + }) + const tableData:UnderWaterInputModalProps[] = [] + + let maxWaterUsage = 0; + let minWaterUsage = 9999999999; + let avgWaterUsage = 0; + monthData.forEach((item, index) => { + item.usege = item.sum/item.cnt + tableData.push({ + msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), + realSewageInput:Math.round(item.usege*100) /100, + sewageOccur:Math.round(item.usege*0.65*0.8 * 100) / 100, + underWaterInput:Math.round((item.usege-(item.usege*0.65*0.8)) * 100) / 100, + }) + if (item.usege > maxWaterUsage) { + maxWaterUsage = item.usege; + } + + if (item.usege < minWaterUsage) { + minWaterUsage = item.usege; + } + + }); + avgWaterUsage = tot/cnt + + 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, + }, + { + msrDt: '최대', + realSewageInput: Math.round(maxWaterUsage*100) /100, + sewageOccur: Math.round(maxWaterUsage*0.65*0.8 * 100) / 100, + underWaterInput: Math.round((maxWaterUsage-(maxWaterUsage*0.65*0.8)) * 100) / 100, + }, + { + msrDt: '최소', + realSewageInput: Math.round(minWaterUsage*100) /100, + sewageOccur: Math.round(minWaterUsage*0.65*0.8 * 100) / 100, + underWaterInput: Math.round((minWaterUsage-(minWaterUsage*0.65*0.8)) * 100) / 100, + }, + ...tableData + ] + + set((state: UnderWaterType) => ({ + ...state, + UnderWaterDetail: { + ...state.UnderWaterDetail, + gridListUnderWaterDetail:newData + } + })) + } } } \ No newline at end of file diff --git a/apps/fo/app/store/underWaterInput/types.tsx b/apps/fo/app/store/underWaterInput/types.tsx new file mode 100644 index 000000000..c90c654ad --- /dev/null +++ b/apps/fo/app/store/underWaterInput/types.tsx @@ -0,0 +1,58 @@ +export type UnderWaterProps = { + bscFctCd : string, + lclgvrnmntNm : string, + sidoNm : string, + sggNm : string, + bscFctNm : string, + daddr : string, + fctCpc : number, + underWaterInputYear : number, + underWaterInputSummer : number, + underWaterInputWinter : number, + infoRnDay : number, + rgnNm : string, + rvbsn : string, + lgbsn : string, + mdmbsn : string, +} +export interface UnderWaterInterface { + bscFctCd : string, + sidoNm : string, + sggNm : string, + bscFctNm : string, + daddr : string, + fctCpc : number, + underWaterInputYear : number, + underWaterInputSummer : number, + underWaterInputWinter : number, + infoRnDay : number, + rgnNm : string, + rvbsn : string, + lgbsn : string, + mdmbsn : string, +} + +// 모달 +export interface UnderWaterInputModalProps { + msrDt : string, + realSewageInput : number | '', + sewageOccur : number | '', + underWaterInput : number | '', +} + + +export interface ExcelType { + 시설코드: string, + 권역:string|'', + 단위유역:string|'', + 중권역:string|'', + 환경청:string|'', + 시도: string, + 시군구: string, + 시설명: string, + 주소: string, + 시설용량: number, + 연간지하수유입량: number | '', + 하절기지하수유입량: number | '', + 동절기지하수유입량: number | '', +} \ No newline at end of file From b543ff6334847d11599218fadab2154752ad62e8 Mon Sep 17 00:00:00 2001 From: jsyang Date: Fri, 25 Jul 2025 05:06:47 -0400 Subject: [PATCH 14/17] =?UTF-8?q?build=20=EC=98=A4=EB=A5=98=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/underWaterInput/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index 6d067ae58..912d8673e 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -2,7 +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 type { modalTableType, SewageOccurDetailProps } from "../sewageOccur"; +import type { SewageOccurDetailProps } from "../sewageOccur"; export type { TableUpperProps }; /**==================================== * Store - 타입 From c43b5521aebd9aa8ca5e202b89fc03d9e9fdcb45 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Jul 2025 18:30:37 +0900 Subject: [PATCH 15/17] =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=EC=A0=95=EB=B3=B4=20=EC=B5=9C=EC=8B=A0?= =?UTF-8?q?=EB=82=A0=EC=A7=9C=EC=9D=98=20=EA=B3=84=ED=9A=8D=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=B6=88=EB=9F=AC=EC=98=A4=EB=8F=84=EB=A1=9D=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/dashboard/page.tsx | 4 +- apps/fo/app/store/dashboard/index.tsx | 64 ++++++++++++++++----------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/apps/fo/app/pages/dashboard/page.tsx b/apps/fo/app/pages/dashboard/page.tsx index 754021374..09c452da4 100644 --- a/apps/fo/app/pages/dashboard/page.tsx +++ b/apps/fo/app/pages/dashboard/page.tsx @@ -58,7 +58,7 @@ export default function DashBoard() { /******************선택된 데이터******************/ // 연도 //const [searchYear, setSearchYear] = useState(selectSearchYear[0]?.val || '0'); - const [searchYear, setSearchYear] = useState('2021'); + const [searchYear, setSearchYear] = useState('2023'); // 시설명 const [fcltyList, setFcltyList] = useState<{bscFctCd: string, bscFctNm: string, fcltyCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | ''}>({ bscFctCd: '26260PB001R', @@ -280,7 +280,7 @@ export default function DashBoard() { trtFrfNm: '표준활성슬러지법, MLE, MBR', efflWqltStndrdNm: '500톤 이상(Ⅳ지역)' }); - + setSearchYear('2023'); searchFcltyList.bscFctNm = '수영'; } diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b12c24d39..b4118dfc7 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -694,7 +694,7 @@ const fetchFacilityPlan = async (targetYear : string | undefined, fcltyCd : stri const queryParams = new URLSearchParams(); if (fcltyCd) queryParams.append('swtrmtFcltCd', fcltyCd); - if (targetYear) queryParams.append('targetYear',targetYear); + //if (targetYear) queryParams.append('targetYear',targetYear); const queryString = queryParams.toString(); const url = queryString ? `${baseUrl}?${queryString}` : baseUrl; const res = await getFetchAreaList(url); @@ -955,41 +955,55 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) /** 시설정보 및 운영현황 - 계획정보 */ searchPlanInfo : async (targetYear: string, fcltyCd: string) => { const res = await fetchFacilityPlan(targetYear, fcltyCd); + console.log(res); + let tmpArray:number[] = []; + 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)); + minIndex=idx; + } + }); + + console.log('minIndex : ', minIndex); + let rtnPlanData = res[minIndex]; + console.log('minData : ', res[minIndex]); planFcltyList.map((el, index) => { planYearList = []; - planYearList.push(res[0]?res[0].yrDt4.toString():""); - planYearList.push(res[0]?res[0].yrDc1.toString():""); - planYearList.push(res[0]?res[0].yrDc2.toString():""); - planYearList.push(res[0]?res[0].yrDc3.toString():""); - planYearList.push(res[0]?res[0].yrDc4.toString():""); + 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():""); if(index === 0){ - el.provisionalApproval = res&&res.length>0?res[0].planSwageQntSumDt4:''; - el.now = res&&res.length>0?res[0].planSwageQntSum:''; - el.stepOne = res&&res.length>0?res[0].planSwageQntSumDc1:''; - el.stepTwo = res&&res.length>0?res[0].planSwageQntSumDc2:''; - el.stepThree = res&&res.length>0?res[0].planSwageQntSumDc3:''; - el.stepFour = res&&res.length>0?res[0].planSwageQntSumDc4:''; + el.provisionalApproval = rtnPlanData?rtnPlanData.planSwageQntSumDt4:''; + el.now = rtnPlanData?rtnPlanData.planSwageQntSum:''; + el.stepOne = rtnPlanData?rtnPlanData.planSwageQntSumDc1:''; + el.stepTwo = rtnPlanData?rtnPlanData.planSwageQntSumDc2:''; + el.stepThree = rtnPlanData?rtnPlanData.planSwageQntSumDc3:''; + el.stepFour = rtnPlanData?rtnPlanData.planSwageQntSumDc4:''; } if(index === 1){ - el.provisionalApproval = res&&res.length>0?res[0].swtrmtPpltnCntDt4:''; - el.now = res&&res.length>0?res[0].swtrmtPpltnCnt:''; - el.stepOne = res&&res.length>0?res[0].swtrmtPpltnCntDc1:''; - el.stepTwo = res&&res.length>0?res[0].swtrmtPpltnCntDc2:''; - el.stepThree = res&&res.length>0?res[0].swtrmtPpltnCntDc3:''; - el.stepFour = res&&res.length>0?res[0].swtrmtPpltnCntDc4:''; + el.provisionalApproval = rtnPlanData?rtnPlanData.swtrmtPpltnCntDt4:''; + el.now = rtnPlanData?rtnPlanData.swtrmtPpltnCnt:''; + el.stepOne = rtnPlanData?rtnPlanData.swtrmtPpltnCntDc1:''; + el.stepTwo = rtnPlanData?rtnPlanData.swtrmtPpltnCntDc2:''; + el.stepThree = rtnPlanData?rtnPlanData.swtrmtPpltnCntDc3:''; + el.stepFour = rtnPlanData?rtnPlanData.swtrmtPpltnCntDc4:''; } if(index === 2){ - el.provisionalApproval = res&&res.length>0?res[0].swtrmtZoneAreaDt4:''; - el.now = res&&res.length>0?res[0].swtrmtZoneArea:''; - el.stepOne = res&&res.length>0?res[0].swtrmtZoneAreaDc1:''; - el.stepTwo = res&&res.length>0?res[0].swtrmtZoneAreaDc2:''; - el.stepThree = res&&res.length>0?res[0].swtrmtZoneAreaDc3:''; - el.stepFour = res&&res.length>0?res[0].swtrmtZoneAreaDc4:''; + el.provisionalApproval = rtnPlanData?rtnPlanData.swtrmtZoneAreaDt4:''; + el.now = rtnPlanData?rtnPlanData.swtrmtZoneArea:''; + el.stepOne = rtnPlanData?rtnPlanData.swtrmtZoneAreaDc1:''; + el.stepTwo = rtnPlanData?rtnPlanData.swtrmtZoneAreaDc2:''; + el.stepThree = rtnPlanData?rtnPlanData.swtrmtZoneAreaDc3:''; + el.stepFour = rtnPlanData?rtnPlanData.swtrmtZoneAreaDc4:''; } if(index === 4){ - el.provisionalApproval = res&&res.length>0?res[0].ugwtUseSum:''; + el.provisionalApproval = rtnPlanData?rtnPlanData.ugwtUseSum:''; } // 임시시 From 83cb4ec7fa3797a90fd1a82aec8c64b5f1984a91 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Jul 2025 18:34:03 +0900 Subject: [PATCH 16/17] =?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 | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b4118dfc7..2b7f06023 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -955,8 +955,6 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) /** 시설정보 및 운영현황 - 계획정보 */ searchPlanInfo : async (targetYear: string, fcltyCd: string) => { const res = await fetchFacilityPlan(targetYear, fcltyCd); - console.log(res); - let tmpArray:number[] = []; let minDiff=9999999; let minIndex; res.forEach((el:any, idx) => { @@ -966,9 +964,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) } }); - console.log('minIndex : ', minIndex); - let rtnPlanData = res[minIndex]; - console.log('minData : ', res[minIndex]); + const rtnPlanData = res[minIndex]; planFcltyList.map((el, index) => { planYearList = []; From 9da2e0054cb2256d84037859aa731288cf63143c Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Jul 2025 19:55:54 +0900 Subject: [PATCH 17/17] =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20-=20=EC=A7=80=ED=95=98=EC=88=98=EC=9C=A0?= =?UTF-8?q?=EC=9E=85=EB=9F=89=ED=8C=8C=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/app/store/dashboard/index.tsx | 28 ++++++++++++++++++------- apps/fo/app/store/sewageOccur/index.tsx | 8 +++---- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index 2b7f06023..c0720b9fa 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -689,7 +689,7 @@ const drainageEquipmentList : DrainageEquipmentListProps[] = [ /* 시설정보 및 운영현황 - 계획 */ const fetchFacilityPlan = async (targetYear : string | undefined, fcltyCd : string | undefined) => { try { - targetYear = targetYear ? targetYear : "2024"; + targetYear = targetYear ? targetYear : "2023"; const baseUrl = 'https://apigateway.rsonesoft.com/dc-service/api/v1/nowDmgMtncGnsvy'; const queryParams = new URLSearchParams(); @@ -708,7 +708,7 @@ const fetchFacilityPlan = async (targetYear : string | undefined, fcltyCd : stri /* 시설정보 및 운영현황 - 운영실태 */ const fetchOperationStatus = async (searchYear: string|undefined, fcltyCd: string|undefined) => { try{ - const url = '/dashBoard/mngInfo/' + (searchYear?searchYear:'2024') + '/' + (fcltyCd?fcltyCd:''); + const url = '/dashBoard/mngInfo/' + (searchYear?searchYear:'2023') + '/' + (fcltyCd?fcltyCd:''); const res = await getFetch('fo', url); return { data: res.data, count: res.count } } catch (error) { @@ -720,7 +720,7 @@ const fetchOperationStatus = async (searchYear: string|undefined, fcltyCd: strin // 주요그래프 데이터 const fetchMainGraph = async (searchYear: string|undefined, fcltyCd: string|undefined) => { try { - const url = '/fclt/qlty/hist/' + (searchYear?searchYear:'2024') + '/' + (fcltyCd?fcltyCd:'11680PB001R'); + const url = '/fclt/qlty/hist/' + (searchYear?searchYear:'2023') + '/' + (fcltyCd?fcltyCd:'11680PB001R'); const res = await getFetch('fo', url); return { data: res.data, count: res.count } } catch (error) { @@ -1051,9 +1051,10 @@ 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); // 지하수 - operationalStatusList[0].groundWaterAvg = 10; - operationalStatusList[0].groundWaterSummer = 11; - operationalStatusList[0].groundWaterWinter = 12; + operationalStatusList[0].groundWaterAvg = data.yearData.AVG_INFL_AMNT === null ? '' : Number(data.yearData.AVG_INFL_AMNT) - (Number(data.yearData.AVG_INFL_AMNT)*0.65*0.8); + operationalStatusList[0].groundWaterSummer = data.summer.AVG_INFL_AMNT === null ? '' : Number(data.summer.AVG_INFL_AMNT) - (Number(data.summer.AVG_INFL_AMNT)*0.65*0.8); + operationalStatusList[0].groundWaterWinter = data.winter.AVG_INFL_AMNT === null ? '' : Number(data.winter.AVG_INFL_AMNT) - (Number(data.winter.AVG_INFL_AMNT)*0.65*0.8); + // 오염물질 // RDII 추정 = 하절기(6~8월) 중 최저 유입 BOD일때 유입유량 x ((동절기 청천시 유입BOD - 하절기(6~8월) 중 최저 유입BOD) / (동절기 청천시 유입BOD)) const summerLowFlow = data.summerBod&&data.summerBod.INFL_AMNT&&data.summerBod.INFL_AMNT!='null'?Number(data.summerBod.INFL_AMNT):0; @@ -1064,7 +1065,20 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) operationalStatusList[0].rdiRain = summerLowRain; dataFormSetting(operationalStatusList[0]); } - + + if(operationalStatusList[0] && operationalStatusList[7]){ + console.log(Number(operationalStatusList[0].groundWaterAvg)+' '+Number(data.yearData.AVG_INFL_AMNT)); + console.log(Number(operationalStatusList[0].groundWaterSummer)+' '+Number(data.summer.AVG_INFL_AMNT)); + console.log(Number(operationalStatusList[0].groundWaterWinter)+' '+Number(data.winter.AVG_INFL_AMNT)); + operationalStatusList[7].groundWaterAvg = Number(operationalStatusList[0].groundWaterAvg) / Number(data.yearData.AVG_INFL_AMNT) * 100; + operationalStatusList[7].groundWaterSummer = Number(operationalStatusList[0].groundWaterSummer) / Number(data.summer.AVG_INFL_AMNT) * 100; + operationalStatusList[7].groundWaterWinter = Number(operationalStatusList[0].groundWaterWinter) / Number(data.winter.AVG_INFL_AMNT) * 100; + /* operationalStatusList[7].groundWaterAvg = operationalStatusList[0].groundWaterAvg === null ? '' : Number(Number(operationalStatusList[0].groundWaterAvg) / Number(data.yearData.AVG_INFL_AMNT)) * 100; + operationalStatusList[7].groundWaterSummer = operationalStatusList[0].groundWaterSummer === null ? '' : Number(Number(operationalStatusList[0].groundWaterSummer) / Number(data.summer.AVG_INFL_AMNT)) * 100; + operationalStatusList[7].groundWaterWinter = operationalStatusList[0].groundWaterWinter === null ? '' : Number(Number(operationalStatusList[0].groundWaterWinter) / Number(data.winter.AVG_INFL_AMNT)) * 100;*/ + dataFormSetting(operationalStatusList[0]); + } + for(let i=1; iSewageOccurActions=(set: any) => { tableData.push({ msrDt: item.yr+'-'+(index+1>10?String(index+1):'0'+(index+1)), waterUsage: Math.round(item.usege*100) /100, - swageChangePercent: Math.round((item.usege/item.usege*0.8) * 100) / 100, + swageChangePercent: (Math.round((item.usege/item.usege*0.8) * 100) / 100) * 100, estimationSewage: Math.round(item.usege*0.8 * 100) / 100 }) if (item.usege > maxWaterUsage) { @@ -304,19 +304,19 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { { msrDt: '평균', waterUsage: Math.round(avgWaterUsage*100) /100, - swageChangePercent: 0.8, + swageChangePercent: 80, estimationSewage: Math.round(avgWaterUsage*0.8*100) /100, }, { msrDt: '최대', waterUsage: Math.round(maxWaterUsage*100) /100, - swageChangePercent: 0.8, + swageChangePercent: 80, estimationSewage: Math.round(maxWaterUsage*0.8*100) /100, }, { msrDt: '최소', waterUsage: Math.round(minWaterUsage*100) /100, - swageChangePercent: 0.8, + swageChangePercent: 80, estimationSewage: Math.round(minWaterUsage*0.8*100) /100, }, ...tableData