diff --git a/apps/fo/app/components/common/SearchInput.tsx b/apps/fo/app/components/common/SearchInput.tsx index 11bdd3676..c15ab7506 100644 --- a/apps/fo/app/components/common/SearchInput.tsx +++ b/apps/fo/app/components/common/SearchInput.tsx @@ -47,11 +47,6 @@ export default function SearchInputText({label=undefined, setValue=()=>{}, sidoS }, [fcltyName]); const handleSuggestionClick = useCallback((bscFctCd: string, bscFctNm: string, fctCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | '') => { - console.log('bscFctNm : ', bscFctNm); - console.log('bscFctCd : ', bscFctCd); - console.log('fctCpc : ', fctCpc); - console.log('trtFrfNm : ', trtFrfNm); - console.log('efflWqltStndrdNm : ', efflWqltStndrdNm); setTextValue(bscFctNm); setValue(bscFctCd, bscFctNm, fctCpc, trtFrfNm, efflWqltStndrdNm); setIsOpen(false); diff --git a/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx b/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx index 9c16161f5..2ca8354b6 100644 --- a/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx +++ b/apps/fo/app/pages/(with-layout)/dashboard/facilityInfo/page.tsx @@ -171,7 +171,6 @@ export default function ProcessFacilitySearch({searchYear = '', fcltyList = []}: el['provisionalApproval'] = waterUsage1; } }); - console.log('planFcltyList :', planFcltyList); } }, [waterUsage1, waterUsage2, waterUsage3, searchYear, planFcltyList]); // 연도가 바뀌면 hasSearched를 false로 리셋 diff --git a/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx b/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx index 92e81f61d..e5622ed30 100644 --- a/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx @@ -74,6 +74,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st let avgefflAmnt = 0; let avginfoRnDay = 0; + console.log('filteredData', filteredData); filteredData.forEach((item: FlowRateModalInterface) => { const totInflAmnt = parseNumber(item.totInflAmnt); const inflAmnt = parseNumber(item.inflAmnt); @@ -103,6 +104,10 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st avginfoRnDay += infoRnDay; }); + console.log('maxtotInflAmnt', maxtotInflAmnt, 'maxinflAmnt', maxinflAmnt, 'maxsumFlow', maxsumFlow, 'maxreturnAmnt', maxreturnAmnt, 'maxefflAmnt', maxefflAmnt, 'maxinfoRnDay', maxinfoRnDay); + console.log('mintotInflAmnt', mintotInflAmnt, 'mininflAmnt', mininflAmnt, 'minsumFlow', minsumFlow, 'minreturnAmnt', minreturnAmnt, 'minefflAmnt', minefflAmnt, 'mininfoRnDay', mininfoRnDay); + console.log('avgtotInflAmnt', avgtotInflAmnt, 'avginflAmnt', avginflAmnt, 'avgsumFlow', avgsumFlow, 'avgreturnAmnt', avgreturnAmnt, 'avgefflAmnt', avgefflAmnt, 'avginfoRnDay', avginfoRnDay); + const newFilteredData = [ { msrDt: '평균', diff --git a/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx b/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx index 1e37569c6..498fe3a1a 100644 --- a/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/underWaterInput/modal/page.tsx @@ -34,64 +34,11 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date( gridListUnderWaterDetail, } = UnderWaterDetail; - // 필터링 된 후 최대, 최소, 평균 값 계산 - const setFilterAfterData = (filteredData: UnderWaterInputModalProps[]) => { - let maxRealSewageInput = Number(filteredData[0]?.realSewageInput ?? 0); - let maxSewageOccur = Number(filteredData[0]?.sewageOccur ?? 0); - let maxUnderWaterInput = Number(filteredData[0]?.underWaterInput ?? 0); - - let minRealSewageInput = Number(filteredData[0]?.realSewageInput ?? 0); - let minSewageOccur = Number(filteredData[0]?.sewageOccur ?? 0); - let minUnderWaterInput = Number(filteredData[0]?.underWaterInput ?? 0); - - let avgRealSewageInput = 0; - let avgSewageOccur = 0; - let avgUnderWaterInput = 0; - - filteredData.forEach((item: UnderWaterInputModalProps) => { - maxRealSewageInput = Math.max(Number(maxRealSewageInput), Number(item.realSewageInput)); - maxSewageOccur = Math.max(Number(maxSewageOccur), Number(item.sewageOccur)); - maxUnderWaterInput = Math.max(Number(maxUnderWaterInput), Number(item.underWaterInput)); - - minRealSewageInput = Math.min(Number(minRealSewageInput) || 0, Number(item.realSewageInput)); - minSewageOccur = Math.min(Number(minSewageOccur) || 0, Number(item.sewageOccur)); - minUnderWaterInput = Math.min(Number(minUnderWaterInput) || 0, Number(item.underWaterInput)); - - avgRealSewageInput += Number(item.realSewageInput ?? 0); - avgSewageOccur += Number(item.sewageOccur ?? 0); - avgUnderWaterInput += Number(item.underWaterInput ?? 0); - }) - - const newFilteredData = [ - { - msrDt: '평균', - realSewageInput: filteredData.length==0?0:Math.round(Number(avgRealSewageInput) / filteredData.length * 10) / 10, - sewageOccur: filteredData.length==0?0:Math.round(Number(avgSewageOccur) / filteredData.length * 1000) / 1000 , - underWaterInput: filteredData.length==0?0:Math.round(Number(avgUnderWaterInput) / filteredData.length * 1000) / 1000, - }, - { - msrDt : '최대', - realSewageInput : Math.round(maxRealSewageInput * 10) / 10, - sewageOccur : Math.round(maxSewageOccur * 1000) / 1000 , - underWaterInput : Math.round(maxUnderWaterInput * 1000) / 1000, - }, - { - msrDt : '최소', - realSewageInput : Math.round(minRealSewageInput * 10) / 10, - sewageOccur : Math.round(minSewageOccur * 1000) / 1000 , - underWaterInput : Math.round(minUnderWaterInput * 1000) / 1000, - }, - ...filteredData - ]; - return newFilteredData; - } - // 날짜 필터링 관련 상태 const [copyYearList, setCopyYearList] = useState([]); useEffect(() => { - const filteredYearData = setFilterAfterData(gridListUnderWaterDetail); - setCopyYearList(filteredYearData as UnderWaterInputModalProps[]); + setCopyYearList(gridListUnderWaterDetail); }, [gridListUnderWaterDetail]); useEffect(() => { @@ -115,9 +62,11 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date( setPrevEndYmDate(searchYear+'12'); } }, [searchYear, tabTerm]); + useEffect(()=>{ - unserWaterModal(fcltyName, searchYear); - }, []) + unserWaterModal(fcltyName, searchYear, searchYear+'01', searchYear+'12'); + }, [fcltyName, searchYear, unserWaterModal]); + useEffect(() => { if(endYmDate < startYmDate) { alert('종료일이 시작일보다 작습니다.') @@ -130,16 +79,13 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date( // 유효한 경우 현재 값을 이전 값으로 저장 setPrevStartYmDate(startYmDate); setPrevEndYmDate(endYmDate); - - const filteredData = gridListUnderWaterDetail.filter((item: UnderWaterInputModalProps) => { - // msrDt가 "2024-01" 형태이므로 "202401" 형태로 변환 - const itemDate = item.msrDt.replace('-', ''); - return itemDate >= startYmDate && itemDate <= endYmDate; - }); - const filteredYearData = setFilterAfterData(filteredData); - setCopyYearList(filteredYearData as UnderWaterInputModalProps[]); + }, [startYmDate, endYmDate, gridListUnderWaterDetail, prevStartYmDate, prevEndYmDate]); + useEffect(() => { + unserWaterModal(fcltyName, searchYear, prevStartYmDate, prevEndYmDate); + } , [fcltyName, searchYear, unserWaterModal, prevStartYmDate, prevEndYmDate]); + return ( <> {setTabTerm(val)}}> diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b23006c10..319bbd5cd 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -152,21 +152,21 @@ export interface RainManageExcelType { 강우량: string, 강우조건비율: number | '', 일수: number | '', - 유입유량: number | '', - 시설용량대비: number | '', - 설계유입수질BOD: number | '', - 설계유입수질TOC: number | '', - 설계유입수질SS: number | '', + 유입유량: string | number | '', + 시설용량대비: string |number | '', + 설계유입수질BOD: string | number | '', + 설계유입수질TOC: string | number | '', + 설계유입수질SS: string | number | '', 설계유입수질TN: string | number | '', 설계유입수질TP: string | number | '', - 유입수질BOD: number | '', - 유입수질TOC: number | '', - 유입수질SS: number | '', + 유입수질BOD: string | number | '', + 유입수질TOC: string | number | '', + 유입수질SS: string | number | '', 유입수질TN: string | number | '', 유입수질TP: string | number | '', - 방류수질BOD: number | '', - 방류수질TOC: number | '', - 방류수질SS: number | '', + 방류수질BOD: string | number | '', + 방류수질TOC: string |number | '', + 방류수질SS: string | number | '', 방류수질TN: string | number | '', 방류수질TP: string | number | '', } @@ -1068,21 +1068,21 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) let minDiff=9999999; let minIndex; res.forEach((el:any, idx) => { - if(minDiff>Math.abs(Number(targetYear) - Number(el.yr))){ - minDiff=Math.abs(Number(targetYear) - Number(el.yr)); + if(minDiff>Math.abs(Number(targetYear) - Number(el.planYr))){ + minDiff=Math.abs(Number(targetYear) - Number(el.planYr)); minIndex=idx; } }); const rtnPlanData = res[minIndex]; - planFcltyList.map((el, index) => { planYearList = []; - planYearList.push(rtnPlanData?rtnPlanData.yrDt4.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc1.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc2.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc3.toString():""); - planYearList.push(rtnPlanData?rtnPlanData.yrDc4.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDt4.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYr.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc1.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc2.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc3.toString():""); + planYearList.push(rtnPlanData?rtnPlanData.planYrDc4.toString():""); if(index === 0){ el.provisionalApproval = rtnPlanData?rtnPlanData.planSwageQntSumDt4:''; @@ -1114,14 +1114,13 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 임시시 dataFormSettingPlan(el); - console.log('planFcltyList', planFcltyList); - console.log('rtnPlanData', rtnPlanData); set((state: DashBoardType) => ({ ...state, PlanFclty: { ...state.PlanFclty, planFcltyList: planFcltyList, isLoadingPlanFclty: false, + planYearList: planYearList, }, })); }); @@ -1139,6 +1138,17 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) const res = await fetchOperationStatus(searchYear, fcltyCd); const data = res.data; + let yearMaxSumFlow = 1; + let yearMinSumFlow = 1; + let yearAvgSumFlow = 1; + let summerAll = 1; + let summerThree = 1; + let summerRain = 1; + let winterAll = 1; + let winterSunnyMin = 1; + let winterSunnyAvg = 1; + let winterSunnyMax = 1; + if(data && operationalStatusList){ // 유량 - 유입 if (operationalStatusList?.[0]) { @@ -1171,47 +1181,110 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) operationalStatusList[0].winterSunnyAvg = data.winterSunny === null ? '' : (data.winterSunny.AVG_INFL_AMNT ? data.winterSunny.AVG_INFL_AMNT : 0) + (data.winterSunny.AVG_SUM_FLOW ? data.winterSunny.AVG_SUM_FLOW : 0) + (data.winterSunny.AVG_TP_INFL_WQLT_TP ? data.winterSunny.AVG_TP_INFL_WQLT_TP : 0); operationalStatusList[0].winterSunnyMax = data.winterSunny === null ? '' : (data.winterSunny.MAX_INFL_AMNT ? data.winterSunny.MAX_INFL_AMNT : 0) + (data.winterSunny.MAX_SUM_FLOW ? data.winterSunny.MAX_SUM_FLOW : 0) + (data.winterSunny.MAX_TP_INFL_WQLT_TP ? data.winterSunny.MAX_TP_INFL_WQLT_TP : 0); + // 연계처리수 + let yearDay = 0; + let summerDay = 0; + let winterDay = 0; + let summerRainDay = 0; + let summerChungchunDay = 0; + let winterChungchuDay = 0; + + let yearSumFlow = 0; + let maxYearSumFlow = 0; + let minYearSumFlow = 9999999; + let summerSumFlow = 0; + let summerChungchunSumFlow = 0; + let summerRainDaySumFlow = 0; + let winterSumFlow = 0; + let winterChungchunSumFlow = 0; + let minWinterChungchunSumFlow = 9999999; + let maxWinterChungchunSumFlow = 0; + // 연계처리수,지하수유입량 const bscFctCd = fcltyCd; const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as ApiResponse; - - const calData = calRainEffectDay(res2.data, 'SUNNY'); - let chungcunSumFlow = 0; - - let sumSummerChungcunDay = 0; - let sumSummerChungcunFlow = 0; - - let sumWinterChungcunDay = 0; - let sumWinterChungcunFlow = 0; - - /* let yearSumFlow = 0; - let summerSumFlow = 0; - let winterSumFlow = 0; */ - - calData.forEach((flowItem: FlowDataItem) => { - chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - //yearSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; - - if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){ - sumSummerChungcunDay += 1; - sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - //summerSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; - }else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){ - sumWinterChungcunDay += 1; - sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - // winterSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + yearDay = res2.data?res2.data.length:1; + res2.data.forEach((item: FlowDataItem) => { + yearSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + if(maxYearSumFlow < (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0)) { + maxYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } + if(minYearSumFlow > (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0) || minYearSumFlow === 0) { + minYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } + if(item.msrDt.substring(4,6) === '06' || item.msrDt.substring(4,6) === '07' || item.msrDt.substring(4,6) === '08') { + summerDay += 1; + summerSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } else if(item.msrDt.substring(4,6) === '01' || item.msrDt.substring(4,6) === '02') { + winterDay += 1; + winterSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; } }); - + + const calData = calRainEffectDay(res2.data, 'SUNNY'); + const calRainDate = calRainEffectDay(res2.data, 'RAIN'); + + // 지하수유입량 - 청천시 기준 + let chungcunSumFlow = 0; + let sumSummerChungcunFlow = 0; + let sumWinterChungcunFlow = 0; + + // 하절기, 동절기 청천시 계산 + calData.forEach((flowItem: FlowDataItem) => { + chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + + if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){ + summerChungchunDay += 1; + summerChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + }else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){ + if(minWinterChungchunSumFlow > (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0) || minWinterChungchunSumFlow === 0) { + minWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + if(maxWinterChungchunSumFlow < (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0)) { + maxWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + winterChungchuDay += 1; + winterChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + } + }); + + // 하절기 강우시 계산 + calRainDate.forEach((flowItem: FlowDataItem) => { + if(flowItem.msrDt.substring(4,6) === '06' || flowItem.msrDt.substring(4,6) === '07' || flowItem.msrDt.substring(4,6) === '08') { + summerRainDay += 1; + summerRainDaySumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + }); + + operationalStatusList[0].yearAvg = Number(operationalStatusList[0].yearAvg) + (yearSumFlow&&Number(yearSumFlow) != 0?Number(yearSumFlow / yearDay):0); + operationalStatusList[0].yearMax = Number(operationalStatusList[0].yearMax) + Number(maxYearSumFlow); + operationalStatusList[0].yearMin = Number(operationalStatusList[0].yearMin) + Number(minYearSumFlow); + operationalStatusList[0].summerAll = Number(operationalStatusList[0].summerAll) + (summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0); + operationalStatusList[0].summerThree = Number(operationalStatusList[0].summerThree) + (summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0); + operationalStatusList[0].summerRain = Number(operationalStatusList[0].summerRain) + (summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0); + operationalStatusList[0].winterAll = Number(operationalStatusList[0].winterAll) + (winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0); + operationalStatusList[0].winterSunnyMin = Number(operationalStatusList[0].winterSunnyMin) + Number(minWinterChungchunSumFlow); + operationalStatusList[0].winterSunnyMax = Number(operationalStatusList[0].winterSunnyMax) + (winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?Number(winterChungchunSumFlow / winterChungchuDay):0); + operationalStatusList[0].winterSunnyAvg = Number(operationalStatusList[0].winterSunnyAvg) + Number(maxWinterChungchunSumFlow); + // 연계처리수 - /* const avgYearSumFlow = yearSumFlow / calData.length; - const avgSummerSumFlow = summerSumFlow / calData.length; - const avgWinterSumFlow = winterSumFlow / calData.length; */ + yearAvgSumFlow = Number((yearSumFlow&&Number(yearSumFlow)!=0)?(yearSumFlow / yearDay):''); + yearMaxSumFlow = maxYearSumFlow; + yearMinSumFlow = minYearSumFlow; + summerAll = summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0 + summerThree= summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0; + summerRain = summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0; + winterAll = winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0; + winterSunnyMin = minWinterChungchunSumFlow; + winterSunnyAvg = winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?(winterChungchunSumFlow / winterChungchuDay):0; + winterSunnyMax = maxWinterChungchunSumFlow; // 지하수유입량 const usage = chungcunSumFlow / calData.length; - const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay; - const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay; + const summerUsage = sumSummerChungcunFlow / summerChungchunDay; + const winterUsage = sumWinterChungcunFlow / winterChungchuDay; operationalStatusList[0].groundWaterAvg = Math.round((usage-(usage*0.65*0.8)) * 100) / 100; operationalStatusList[0].groundWaterSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100; @@ -1253,7 +1326,22 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) } } } + + if(operationalStatusList[2]){ + operationalStatusList[2].yearAvg = yearAvgSumFlow; + operationalStatusList[2].yearMax = yearMaxSumFlow; + operationalStatusList[2].yearMin = yearMinSumFlow; + operationalStatusList[2].summerAll = summerAll; + operationalStatusList[2].summerThree = summerThree; + operationalStatusList[2].summerRain = summerRain; + operationalStatusList[2].winterAll = winterAll; + operationalStatusList[2].winterSunnyMin = winterSunnyMin; + operationalStatusList[2].winterSunnyAvg = winterSunnyAvg; + operationalStatusList[2].winterSunnyMax = winterSunnyMax; + dataFormSetting(operationalStatusList[2]); + } } + //const excelDownList: RainManageExcelType[] = []; /* if(isExcel){ res.data.forEach(item => { @@ -1449,7 +1537,31 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) const rainEffectList = calRainEffectDayRainManage(res.data.wqltObjs); // Process the data and create rain management list + + const totItemCnt = rainEffectList?rainEffectList.length : 1; + let totInflAssctBfrWqltBod = 0; + let totInflAssctBfrWqltToc = 0; + let totInflAssctBfrWqltSs = 0; + let totInflAssctBfrWqltTn = 0; + let totInflAssctBfrWqltTp = 0; + let totEfflWqltBod = 0; + let totEfflWqltToc = 0; + let totEfflWqltSs = 0; + let totEfflWqltTn = 0; + let totEfflWqltTp = 0; + rainEffectList.forEach((item: RainManageListProps) => { + totInflAssctBfrWqltBod += item.inflAssctBfrWqltBod ? Number(item.inflAssctBfrWqltBod.toString().trim()) : 0; + totInflAssctBfrWqltToc += item.inflAssctBfrWqltToc ? Number(item.inflAssctBfrWqltToc.toString().trim()) : 0; + totInflAssctBfrWqltSs += item.inflAssctBfrWqltSs ? Number(item.inflAssctBfrWqltSs.toString().trim()) : 0; + totInflAssctBfrWqltTn += item.inflAssctBfrWqltTn ? Number(item.inflAssctBfrWqltTn.toString().trim()) : 0; + totInflAssctBfrWqltTp += item.inflAssctBfrWqltTp ? Number(item.inflAssctBfrWqltTp.toString().trim()) : 0; + totEfflWqltBod += item.efflWqltBod ? Number(item.efflWqltBod.toString().trim()) : 0; + totEfflWqltToc += item.efflWqltToc ? Number(item.efflWqltToc.toString().trim()) : 0; + totEfflWqltSs += item.efflWqltSs ? Number(item.efflWqltSs.toString().trim()) : 0; + totEfflWqltTn += item.efflWqltTn ? Number(item.efflWqltTn.toString().trim()) : 0; + totEfflWqltTp += item.efflWqltTp ? Number(item.efflWqltTp.toString().trim()) : 0; + if(Number(item.infoRnDay) >= 3 && Number(item.infoRnDay) < 10){ rainDate[1] = Number(rainDate[1] || 0) + 1; inflAmtCnt[1] = Number(inflAmtCnt[1] || 0) + 1; @@ -1537,7 +1649,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) inflAssctBfrWqltSsCnt[4] = Number(inflAssctBfrWqltSsCnt[4] || 0) + 1; inflAssctBfrWqltSs[4] = Number(inflAssctBfrWqltSs[4] || 0) + Number(item.inflAssctBfrWqltSs || 0); inflAssctBfrWqltTnCnt[4] = Number(inflAssctBfrWqltTnCnt[4] || 0) + 1; - inflAssctBfrWqltTn[4] = Number(inflAssctBfrWqltTn[5] || 0) + Number(item.inflAssctBfrWqltTn || 0); + inflAssctBfrWqltTn[4] = Number(inflAssctBfrWqltTn[4] || 0) + Number(item.inflAssctBfrWqltTn || 0); inflAssctBfrWqltTpCnt[4] = Number(inflAssctBfrWqltTpCnt[4] || 0) + 1; inflAssctBfrWqltTp[4] = Number(inflAssctBfrWqltTp[4] || 0) + Number(item.inflAssctBfrWqltTp || 0); efflWqltBodCnt[4] = Number(efflWqltBodCnt[4] || 0) + 1; @@ -1546,9 +1658,9 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) efflWqltToc[4] = Number(efflWqltToc[4] || 0) + Number(item.efflWqltToc || 0); efflWqltSsCnt[4] = Number(efflWqltSsCnt[4] || 0) + 1; efflWqltSs[4] = Number(efflWqltSs[4] || 0) + Number(item.efflWqltSs || 0); - efflWqltTnCnt[4] = Number(efflWqltTnCnt[5] || 0) + 1; + efflWqltTnCnt[4] = Number(efflWqltTnCnt[4] || 0) + 1; efflWqltTn[4] = Number(efflWqltTn[4] || 0) + Number(item.efflWqltTn || 0); - efflWqltTpCnt[4] = Number(efflWqltTpCnt[5] || 0) + 1; + efflWqltTpCnt[4] = Number(efflWqltTpCnt[4] || 0) + 1; efflWqltTp[4] = Number(efflWqltTp[4] || 0) + Number(item.efflWqltTp || 0); }else if(Number(item.infoRnDay) >= 40 && Number(item.infoRnDay) < 50){ rainDate[5] = Number(rainDate[5] || 0) + 1; @@ -1683,7 +1795,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 평균 및 합계 계산 const calculateAverage = (value: number, count: number) => { - return count > 0 ? Number((value / count).toFixed(1)) : 0; + return count > 0 ? Number((value / count)) : 0; }; // 데이터 있는 항목만 계산 @@ -1710,44 +1822,44 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) // 합계 계산 (index 0) const calculateTotal = (arr: number[]) => { - return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0)).toFixed(1)); + return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0))); }; inflAmnt[0] = calculateAverage(calculateTotal(inflAmnt), dataIsCount); fcltyCpct[0] = calculateTotal(fcltyCpct); - inflAssctBfrWqltBod[0] = Number((calculateTotal(inflAssctBfrWqltBod)/7).toFixed(1)); - inflAssctBfrWqltToc[0] = Number((calculateTotal(inflAssctBfrWqltToc)/7).toFixed(1)); - inflAssctBfrWqltSs[0] = Number((calculateTotal(inflAssctBfrWqltSs)/7).toFixed(1)); - inflAssctBfrWqltTn[0] = Number((calculateTotal(inflAssctBfrWqltTn)/7).toFixed(3)); - inflAssctBfrWqltTp[0] = Number((calculateTotal(inflAssctBfrWqltTp)/7).toFixed(3)); - efflWqltBod[0] = Number((calculateTotal(efflWqltBod)/7).toFixed(1)); - efflWqltToc[0] = Number((calculateTotal(efflWqltToc)/7).toFixed(1)); - efflWqltSs[0] = Number((calculateTotal(efflWqltSs as number[])/7).toFixed(1)); - efflWqltTn[0] = Number((calculateTotal(efflWqltTn as number[])/7).toFixed(3)); - efflWqltTp[0] = Number((calculateTotal(efflWqltTp as number[])/7).toFixed(3)); + inflAssctBfrWqltBod[0] = Number((Math.round((totInflAssctBfrWqltBod / totItemCnt) * 10) / 10).toFixed(1)); + inflAssctBfrWqltToc[0] = Number((Math.round((totInflAssctBfrWqltToc / totItemCnt) * 10) / 10).toFixed(1)); + inflAssctBfrWqltSs[0] = Number((Math.round((totInflAssctBfrWqltSs / totItemCnt) * 10) / 10).toFixed(1)); + inflAssctBfrWqltTn[0] = Number((Math.round((totInflAssctBfrWqltTn / totItemCnt) * 1000) / 1000).toFixed(3)); + inflAssctBfrWqltTp[0] = Number((Math.round((totInflAssctBfrWqltTp / totItemCnt) * 1000) / 1000).toFixed(3)); + efflWqltBod[0] = Number((Math.round((totEfflWqltBod / totItemCnt) * 10) / 10).toFixed(1)); + efflWqltToc[0] = Number((Math.round((totEfflWqltToc / totItemCnt) * 10) / 10).toFixed(1)); + efflWqltSs[0] = Number((Math.round((totEfflWqltSs / totItemCnt) * 10) / 10).toFixed(1)); + efflWqltTn[0] = Number((Math.round((totEfflWqltTn / totItemCnt) * 1000) / 1000).toFixed(3)); + efflWqltTp[0] = Number((Math.round((totEfflWqltTp / totItemCnt) * 1000) / 1000).toFixed(3)); // 최종 리스트 const filteredData = itemList.map((item, index) => ({ rainItem: item, rainRate: rainRate[index] || '0', rainDay: rainDate[index] ? Number(rainDate[index].toFixed(1)) : '', - inflAmnt: inflAmnt[index] ? Number(inflAmnt[index].toFixed(1)) : '', - fctCpc: inflAmnt[index] ? Number((inflAmnt[index] / fcltyCpcValue).toFixed(1)) : '', - dsInflWqltBod: dsInflWqltBod[index] ? Number(dsInflWqltBod[index].toFixed(1)) : '', - dsInflWqltCod: dsInflWqltCod[index] ? Number(dsInflWqltCod[index].toFixed(1)) : '', - dsInflWqltSs: dsInflWqltSs[index] ? Number(dsInflWqltSs[index].toFixed(1)) : '', - dsInflWqltTn: dsInflWqltTn[index] ? dsInflWqltTn[index].toFixed(3) : '', - dsInflWqltTp: dsInflWqltTp[index] ? dsInflWqltTp[index].toFixed(3) : '', - inflAssctBfrWqltBod: inflAssctBfrWqltBod[index] ? Number(inflAssctBfrWqltBod[index].toFixed(1)) : '', - inflAssctBfrWqltToc: inflAssctBfrWqltToc[index] ? Number(inflAssctBfrWqltToc[index].toFixed(1)) : '', - inflAssctBfrWqltSs: inflAssctBfrWqltSs[index] ? Number(inflAssctBfrWqltSs[index].toFixed(1)) : '', - inflAssctBfrWqltTn: inflAssctBfrWqltTn[index] ? inflAssctBfrWqltTn[index].toFixed(3) : '', - inflAssctBfrWqltTp: inflAssctBfrWqltTp[index] ? inflAssctBfrWqltTp[index].toFixed(3) : '', - efflWqltBod: efflWqltBod[index] ? Number(efflWqltBod[index].toFixed(1)) : '', - efflWqltToc: efflWqltToc[index] ? Number(efflWqltToc[index].toFixed(1)) : '', - efflWqltSs: efflWqltSs[index] ? Number(efflWqltSs[index].toFixed(1)) : '', - efflWqltTn: efflWqltTn[index] ? efflWqltTn[index].toFixed(3) : '', - efflWqltTp: efflWqltTp[index] ? efflWqltTp[index].toFixed(3) : '' + inflAmnt: inflAmnt[index] ? Number((Math.round(inflAmnt[index] * 10) / 10).toFixed(1)) : '', + fctCpc: inflAmnt[index] ? (Math.round((inflAmnt[index] / fcltyCpcValue) * 10) / 10).toFixed(1) : '', + dsInflWqltBod: dsInflWqltBod[index] ? (Math.round(dsInflWqltBod[index] * 10) / 10).toFixed(1) : '', + dsInflWqltCod: dsInflWqltCod[index] ? (Math.round(dsInflWqltCod[index] * 10) / 10).toFixed(1) : '', + dsInflWqltSs: dsInflWqltSs[index] ? (Math.round(dsInflWqltSs[index] * 10) / 10).toFixed(1) : '', + dsInflWqltTn: dsInflWqltTn[index] ? (Math.round(dsInflWqltTn[index] * 1000) / 1000).toFixed(3) : '', + dsInflWqltTp: dsInflWqltTp[index] ? (Math.round(dsInflWqltTp[index] * 1000) / 1000).toFixed(3) : '', + inflAssctBfrWqltBod: inflAssctBfrWqltBod[index] ? (Math.round(inflAssctBfrWqltBod[index] * 10) / 10).toFixed(1) : '', + inflAssctBfrWqltToc: inflAssctBfrWqltToc[index] ? (Math.round(inflAssctBfrWqltToc[index] * 10) / 10).toFixed(1) : '', + inflAssctBfrWqltSs: inflAssctBfrWqltSs[index] ? (Math.round(inflAssctBfrWqltSs[index] * 10) / 10).toFixed(1) : '', + inflAssctBfrWqltTn: inflAssctBfrWqltTn[index] ? (Math.round(inflAssctBfrWqltTn[index] * 1000) / 1000).toFixed(3) : '', + inflAssctBfrWqltTp: inflAssctBfrWqltTp[index] ? (Math.round(inflAssctBfrWqltTp[index] * 1000) / 1000).toFixed(3) : '', + efflWqltBod: efflWqltBod[index] ? (Math.round(efflWqltBod[index] * 10) / 10).toFixed(1): '', + efflWqltToc: efflWqltToc[index] ? (Math.round(efflWqltToc[index] * 10) / 10).toFixed(1) : '', + efflWqltSs: efflWqltSs[index] ? (Math.round(efflWqltSs[index] * 10) / 10).toFixed(1) : '', + efflWqltTn: efflWqltTn[index] ? (Math.round(efflWqltTn[index] * 1000) / 1000).toFixed(3) : '', + efflWqltTp: efflWqltTp[index] ? (Math.round(efflWqltTp[index] * 1000) / 1000).toFixed(3) : '' })); const excelList : RainManageExcelType[] = []; @@ -1757,23 +1869,23 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) 강우량: item.rainItem, 강우조건비율: item.rainRate ? Number(Number(item.rainRate).toFixed(1)) : '', 일수: item.rainDay ? Number(Number(item.rainDay).toFixed(1)) : '', - 유입유량: item.inflAmnt ? Number(Number(item.inflAmnt).toFixed(1)) : '', - 시설용량대비: item.fctCpc ? Number(Number(item.fctCpc).toFixed(1)) : '', - 설계유입수질BOD: item.dsInflWqltBod ? Number(Number(item.dsInflWqltBod).toFixed(1)) : '', - 설계유입수질TOC: item.dsInflWqltCod ? Number(Number(item.dsInflWqltCod).toFixed(1)) : '', - 설계유입수질SS: item.dsInflWqltSs ? Number(Number(item.dsInflWqltSs).toFixed(1)) : '', - 설계유입수질TN: item.dsInflWqltTn ? Number(item.dsInflWqltTn).toFixed(3) : '', - 설계유입수질TP: item.dsInflWqltTp ? Number(item.dsInflWqltTp).toFixed(3) : '', - 유입수질BOD: item.inflAssctBfrWqltBod ? Number(Number(item.inflAssctBfrWqltBod).toFixed(1)) : '', - 유입수질TOC: item.inflAssctBfrWqltToc ? Number(Number(item.inflAssctBfrWqltToc).toFixed(1)) : '', - 유입수질SS: item.inflAssctBfrWqltSs ? Number(Number(item.inflAssctBfrWqltSs).toFixed(1)) : '', - 유입수질TN: item.inflAssctBfrWqltTn ? Number(item.inflAssctBfrWqltTn).toFixed(3) : '', - 유입수질TP: item.inflAssctBfrWqltTp ? Number(item.inflAssctBfrWqltTp).toFixed(3) : '', - 방류수질BOD: item.efflWqltBod ? Number(Number(item.efflWqltBod).toFixed(1)) : '', - 방류수질TOC: item.efflWqltToc ? Number(Number(item.efflWqltToc).toFixed(1)) : '', - 방류수질SS: item.efflWqltSs ? Number(Number(item.efflWqltSs).toFixed(1)) : '', - 방류수질TN: item.efflWqltTn ? Number(item.efflWqltTn).toFixed(3) : '', - 방류수질TP: item.efflWqltTp ? Number(item.efflWqltTp).toFixed(3) : '', + 유입유량: item.inflAmnt ? Number((Math.round(Number(item.inflAmnt) * 10) / 10).toFixed(1)) : '', + 시설용량대비: item.fctCpc ? (Math.round(Number(item.fctCpc) * 10) / 10).toFixed(1) : '', + 설계유입수질BOD: item.dsInflWqltBod ? (Math.round(Number(item.dsInflWqltBod) * 10) / 10).toFixed(1) : '', + 설계유입수질TOC: item.dsInflWqltCod ? (Math.round(Number(item.dsInflWqltCod) * 10) / 10).toFixed(1) : '', + 설계유입수질SS: item.dsInflWqltSs ? (Math.round(Number(item.dsInflWqltSs) * 10) / 10).toFixed(1) : '', + 설계유입수질TN: item.dsInflWqltTn ?(Math.round(Number(item.dsInflWqltTn) * 1000) / 1000).toFixed(3) : '', + 설계유입수질TP: item.dsInflWqltTp ? (Math.round(Number(item.dsInflWqltTp) * 1000) / 1000).toFixed(3) : '', + 유입수질BOD: item.inflAssctBfrWqltBod ? (Math.round(Number(item.inflAssctBfrWqltBod) * 10) / 10).toFixed(1) : '', + 유입수질TOC: item.inflAssctBfrWqltToc ? (Math.round(Number(item.inflAssctBfrWqltToc) * 10) / 10).toFixed(1) : '', + 유입수질SS: item.inflAssctBfrWqltSs ? (Math.round(Number(item.inflAssctBfrWqltSs) * 10) / 10).toFixed(1) : '', + 유입수질TN: item.inflAssctBfrWqltTn ? (Math.round(Number(item.inflAssctBfrWqltTn) * 1000) / 1000).toFixed(3) : '', + 유입수질TP: item.inflAssctBfrWqltTp ? (Math.round(Number(item.inflAssctBfrWqltTp) * 1000) / 1000).toFixed(3) : '', + 방류수질BOD: item.efflWqltBod ? (Math.round(Number(item.efflWqltBod) * 10) / 10).toFixed(1) : '', + 방류수질TOC: item.efflWqltToc ? (Math.round(Number(item.efflWqltToc) * 10) / 10).toFixed(1) : '', + 방류수질SS: item.efflWqltSs ? (Math.round(Number(item.efflWqltSs) * 10) / 10).toFixed(1) : '', + 방류수질TN: item.efflWqltTn ? (Math.round(Number(item.efflWqltTn) * 1000) / 1000).toFixed(3) : '', + 방류수질TP: item.efflWqltTp ? (Math.round(Number(item.efflWqltTp) * 1000) / 1000).toFixed(3) : '', }); }); } @@ -1782,12 +1894,12 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) ...state, RainManage: isExcel ? { ...state.RainManage, - rainManageList: filteredData as RainManageListProps[], + rainManageList: filteredData as any[], excelList: excelList, isLoadingRainManage : false, } : { ...state.RainManage, - rainManageList: filteredData as RainManageListProps[], + rainManageList: filteredData as any[], isLoadingRainManage : false, } })); diff --git a/apps/fo/app/store/facilityWaterQlty/index.tsx b/apps/fo/app/store/facilityWaterQlty/index.tsx index 53e430d47..3c5cd9067 100644 --- a/apps/fo/app/store/facilityWaterQlty/index.tsx +++ b/apps/fo/app/store/facilityWaterQlty/index.tsx @@ -269,7 +269,7 @@ const fetchFacilityWaterQltyTmsList = async (facilityCd: string|undefined) => { }; // 시설정보 수질 리스트 데이터 호출(모달-이력) -const fetchFacilityWaterQltyListHist = async (searchYear: string|undefined, facilityCd: string|undefined): Promise => { +export const fetchFacilityWaterQltyListHist = async (searchYear: string|undefined, facilityCd: string|undefined): Promise => { try {// const res = await getFetch('fo', '/fclt/qlty/hist/' + searchYear + '/' + facilityCd); return res; @@ -623,6 +623,7 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType if(item.efflWqltTn){ item.efflWqltTn = Number(Math.round(Number(item.efflWqltTn) * 1000)/1000).toFixed(3); } + if(item.inflAssctBfrWqltTp){ item.inflAssctBfrWqltTp = Number(Math.round(Number(item.inflAssctBfrWqltTp) * 1000)/1000).toFixed(3); } diff --git a/apps/fo/app/store/processArea/index.tsx b/apps/fo/app/store/processArea/index.tsx index 049341d23..0aa655246 100644 --- a/apps/fo/app/store/processArea/index.tsx +++ b/apps/fo/app/store/processArea/index.tsx @@ -19,12 +19,12 @@ export type ProcessAreaProps = { location : string, fctCpc : number | '', ruse : boolean, - yrDt4 : string, - yr : string, - yrDc1 : string, - yrDc2 : string, - yrDc3 : string, - yrDc4 : string, + planYrDt4 : string, + planYr : string, + planYrDc1 : string, + planYrDc2 : string, + planYrDc3 : string, + planYrDc4 : string, /** * 증설계획 */ @@ -236,17 +236,17 @@ const fetchProcessAreaList = async (pageNo : number, pageSize : number, ctpvNm : res.map(async (item: ProcessAreaProps) => { upHeadList1.forEach((head:TableUpperProps) => { /* if (head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = '현재\n(' + item.yr + '년)'; + head.title = '현재\n(' + item.planYr + '년)'; } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = '1단계\n(' + item.yrDc1 + '년)'; + head.title = '1단계\n(' + item.planYrDc1 + '년)'; } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = '2단계\n(' + item.yrDc2 + '년)'; + head.title = '2단계\n(' + item.planYrDc2 + '년)'; } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = '3단계\n(' + item.yrDc3 + '년)'; + head.title = '3단계\n(' + item.planYrDc3 + '년)'; } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = '4단계\n(' + item.yrDc4 + '년)'; + head.title = '4단계\n(' + item.planYrDc4 + '년)'; } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = '기승인\n4단계(' + item.yrDt4 + '년)'; + head.title = '기승인\n4단계(' + item.planYrDt4 + '년)'; } */ if (head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { head.title = '현재'; @@ -432,51 +432,51 @@ export const processAreaReducer:(set:SetStateFunction)=>ProcessAreaActions=(set: set((state: ProcessAreaType) => { const rtnData = state.ProcessArea.processAreaList.find((item: ProcessAreaProps) => item.swtrmtFcltCd === swtrmtFcltCd); if (rtnData) { - upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => { - if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = rtnData.yr? '현재\n(' + rtnData.yr + '년)':head.title = '현재'; - } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = rtnData.yrDc1? '1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계'; - } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = rtnData.yrDc2? '2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계'; - } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = rtnData.yrDc3? '3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계'; - } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = rtnData.yrDc4? '4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계'; - } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = rtnData.yrDt4? '기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계'; - } - }); + upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => { + if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { + head.title = rtnData.planYr? '현재\n(' + rtnData.planYr + '년)':head.title = '현재'; + } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { + head.title = rtnData.planYrDc1? '1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계'; + } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { + head.title = rtnData.planYrDc2? '2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계'; + } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { + head.title = rtnData.planYrDc3? '3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계'; + } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { + head.title = rtnData.planYrDc4? '4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계'; + } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { + head.title = rtnData.planYrDt4? '기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계'; + } + }); upHeadListProcessAreaPlan.forEach((head:TableUpperProps) => { if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = rtnData.yr? '현재\n(' + rtnData.yr + '년)':head.title = '현재'; + head.title = rtnData.planYr? '현재\n(' + rtnData.planYr + '년)':head.title = '현재'; } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = rtnData.yrDc1?'1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계'; + head.title = rtnData.planYrDc1?'1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계'; } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = rtnData.yrDc2?'2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계'; + head.title = rtnData.planYrDc2?'2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계'; } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = rtnData.yrDc3? '3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계'; + head.title = rtnData.planYrDc3? '3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계'; } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = rtnData.yrDc4?'4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계'; + head.title = rtnData.planYrDc4?'4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계'; } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = rtnData.yrDt4?'기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계'; + head.title = rtnData.planYrDt4?'기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계'; } }); upHeadListProcessPopulation.forEach((head:TableUpperProps) => { if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') { - head.title = rtnData.yr?'현재\n(' + rtnData.yr + '년)':head.title = '현재'; + head.title = rtnData.planYr?'현재\n(' + rtnData.planYr + '년)':head.title = '현재'; } else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') { - head.title = rtnData.yrDc1?'1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계'; + head.title = rtnData.planYrDc1?'1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계'; } else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') { - head.title = rtnData.yrDc2?'2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계'; + head.title = rtnData.planYrDc2?'2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계'; } else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') { - head.title = rtnData.yrDc3?'3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계'; + head.title = rtnData.planYrDc3?'3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계'; } else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') { - head.title = rtnData.yrDc4?'4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계'; + head.title = rtnData.planYrDc4?'4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계'; } else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') { - head.title = rtnData.yrDt4?'기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계'; + head.title = rtnData.planYrDt4?'기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계'; } }); diff --git a/apps/fo/app/store/processFacility/index.tsx b/apps/fo/app/store/processFacility/index.tsx index 022c28c3e..988be1e46 100644 --- a/apps/fo/app/store/processFacility/index.tsx +++ b/apps/fo/app/store/processFacility/index.tsx @@ -676,7 +676,6 @@ export const processFacilityReducer:(set:SetStateFunction)=>ProcessFacilityActio item.plInflWqltBod = item.plInflWqltBod ? Number(item.plInflWqltBod).toFixed(1) : ''; item.dsInflWqltBod = item.dsInflWqltBod ? Number(item.dsInflWqltBod).toFixed(1) : ''; }) */ - console.log(res.data); set((state:ProcessFacilityType) => ({ ...state, ProcessFacilityList: { diff --git a/apps/fo/app/store/rdi/index.tsx b/apps/fo/app/store/rdi/index.tsx index fd9ca52b6..1dd1a6334 100644 --- a/apps/fo/app/store/rdi/index.tsx +++ b/apps/fo/app/store/rdi/index.tsx @@ -1,6 +1,8 @@ +import { getFetch } from "@/app/components/api"; import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; -import { getFetch } from "@/app/components/api"; +import { fetchFacilityWaterQltyListHist } from "../facilityWaterQlty"; +import { calRainEffectDay } from "../underWaterInput"; export type { TableUpperProps }; /**==================================== * Store - 타입 @@ -27,6 +29,7 @@ export type RdiProps = { rvbsn : string, lgbsn : string, mdmbsn : string, + rainEffectDay : number, // 강우영향일 } export interface RdiInterface { @@ -242,6 +245,41 @@ export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunctio } }) + // 청천히 동절기 유입bod를 새로 구하기 위해서 재 호출 + for (const item of rtnData) { + const fcltyCd = item.bscFctCd; + let winterInflBod = 0; + + const res: any = await fetchFacilityWaterQltyListHist(searchYear, fcltyCd); + + if (res?.data) { + const rtnWqltData = res.data.wqltObjs; + rtnWqltData.forEach((dataItem: any) => { + dataItem.rainEffectDay = 0; + }); + + calRainEffectDay(rtnWqltData, 'SUNNY'); + + const rtnWqltWinterData = rtnWqltData.filter((dataItem: any) => + (dataItem.msrDt.substring(4, 6) === '01' || + dataItem.msrDt.substring(4, 6) === '02') && + dataItem.rainEffectDay == 0 + ); + + rtnWqltWinterData.forEach((dataItem: any) => { + winterInflBod += dataItem.inflAssctBfrWqltBod + ? Number(dataItem.inflAssctBfrWqltBod) + : 0; + }); + + if (rtnWqltWinterData.length > 0) { + winterInflBod = winterInflBod / rtnWqltWinterData.length; + } + } + + item.winterAvgBodLowRainfall = winterInflBod; + } + rtnData.forEach((item: RdiProps) => { dataFormSetting(item) }) diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index 7eec53913..6ec97d8ff 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -129,7 +129,6 @@ const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : ''; const url = '/fclt/flow/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr; const res = await getFetch('fo', url); - console.log("res", res.data); return { data: res.data, count: res.count } /* @@ -237,10 +236,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { let sumChungcunDay = 0; let chungcunSumFlow = 0; let totWaterUsage = 0; - - if(bscFctCd === '11200PB001R'){ - console.log('res2.data : ',res2.data); - } + // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일) for(let idx = 0; idx < res2.data.length; idx++) { const item = res2.data[idx]; @@ -281,10 +277,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { } } } - - if(bscFctCd === '11200PB001R'){ - console.log('calData : ',res2.data); - } res2.data.forEach((item: FlowDataItem) => { @@ -312,8 +304,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { 중권역: item.mdmbsn, 환경청: item.rgnNm, 시설명: item.bscFctNm, - 시도: item.sidoNm, // sido ?? 타입에러 나서 수정함 - 시군구: item.sggNm, //sgg ?? + 시도: item.sidoNm, + 시군구: item.sggNm, 주소: item.daddr, 시설용량: item.fctCpc, 물사용량: item.waterUsage, @@ -345,7 +337,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { const monthData: SewageOccurDetailProps[] = []; let tot = 0, cnt= 0; - console.log('startYearMonth : ', startYearMonth, 'endYearMonth : ', endYearMonth); if(startYearMonth) { res.data = res.data.filter((item: FlowDataItem) => { const month = item.msrDt?.substring(0, 6); @@ -373,7 +364,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { tot += Number(item.inflAmnt) cnt++ }) - console.log('tot', tot, cnt, tot/cnt, tot/cnt*0.65); + const tableData:modalTableType[] = [] let maxWaterUsage = 0; diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index 589c35962..1ab331a60 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -1,6 +1,6 @@ +import { getFetch } from "@/app/components/api"; import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; -import { getFetch } from "@/app/components/api"; import type { ExcelType, UnderWaterInputModalProps, UnderWaterProps } from "./types"; export type { TableUpperProps }; @@ -201,7 +201,7 @@ const fetchUnderWaterList = async (pageNo: number, pageSize: number, searchYear: ====================================*/ export type UnderWaterActions = { searchUnderWaterList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void; - unserWaterModal:(bscFctCd:string, searchYear:string)=>void + unserWaterModal:(bscFctCd:string, searchYear:string, startYm:string, endYm:string)=>void } export type UnderWaterType = { @@ -261,7 +261,13 @@ const dataFormSetting=(item : UnderWaterProps)=> { export type UnderWaterStore = UnderWaterType & UnderWaterActions; -export const calRainEffectDay = (data: FlowDataItem[], weather: string) => { +/** + * + * @param data + * @param weather ('ALL' | 'SUNNY' | 'RAINY') + * @returns + */ +export const calRainEffectDay = (data: any, weather: string) => { // 강우영향일 계산 (강우량이 3 이상이면 무조건 강우영향일) for(let idx = 0; idx < data.length; idx++) { const item = data[idx]; @@ -359,6 +365,11 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay; const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay; + if(bscFctCd === '11200PB001R') { + console.log('calData.length : ', calData.length); + console.log('usage : ', usage, 'summerUsage : ', summerUsage, 'winterUsage : ', winterUsage); + } + item.underWaterInputYear = Math.round((usage-(usage*0.65*0.8)) * 100) / 100; item.underWaterInputSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100; item.underWaterInputWinter = Math.round((winterUsage-(winterUsage*0.65*0.8)) * 100) / 100; @@ -412,25 +423,19 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy }, })) }, - unserWaterModal:async (bscFctCd, searchYear)=>{ - console.log('searchYear : ', searchYear); + + unserWaterModal:async (bscFctCd, searchYear, startYm, endYm)=>{ const res = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear); const monthData: SewageOccurDetailProps[] = []; const calData = calRainEffectDay(res.data, 'SUNNY'); - let tot = 0, cnt= 0; - - let tmpTot = 0; - - calData.forEach((item: FlowDataItem) => { - tmpTot += Number(item.inflAmnt); - }) - console.log('tmpTot : ', tmpTot/calData.length); + let tot = 0; + let cnt = 0; calData.forEach((item: FlowDataItem) => { const month = item.msrDt?.substring(4, 6); const monthIdx = month ? Number(month) - 1 : -1; - if (monthIdx >= 0) { + if (monthIdx >= 0 && (monthIdx>=Number(startYm.substring(4,6))-1 && monthIdx <= Number(endYm.substring(4, 6))-1)) { if (typeof monthData[monthIdx] === 'object') { monthData[monthIdx].sum += Number(item.inflAmnt); monthData[monthIdx].cnt++; @@ -438,9 +443,12 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0}; } } - tot += Number(item.inflAmnt) - cnt++ - }) + + if(month >= startYm.substring(4, 6) && month <= endYm.substring(4, 6)){ + cnt++; + tot += item.inflAmnt && item.inflAmnt !== 'x' ? Number(item.inflAmnt.toString().trim()) : 0; + } + }); const tableData:UnderWaterInputModalProps[] = [] let maxWaterUsage = 0; @@ -463,13 +471,16 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy } }); - avgWaterUsage = tot/cnt + console.log('tot', tot, 'calData.length', calData.length); + avgWaterUsage = tot/cnt; + console.log(avgWaterUsage); const newData= [ { msrDt: '평균', realSewageInput:Math.round(avgWaterUsage*100) /100, sewageOccur:Math.round(avgWaterUsage*0.65*0.8 * 100) / 100, - underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100, + underWaterInput: Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100 + //underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100, }, { msrDt: '최대', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b31cf51b..7b5b2f5df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,6 +247,12 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.13 + dotenv: + specifier: ^17.2.1 + version: 17.2.1 + find-up: + specifier: ^7.0.0 + version: 7.0.0 js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -274,9 +280,6 @@ importers: tus-js-client: specifier: ^4.3.1 version: 4.3.1 - yargs: - specifier: ^18.0.0 - version: 18.0.0 zod: specifier: ^3.24.2 version: 3.25.76 @@ -296,6 +299,9 @@ importers: '@types/webpack': specifier: ^5.28.5 version: 5.28.5 + '@types/yargs': + specifier: ^17.0.33 + version: 17.0.33 eslint: specifier: ^9 version: 9.33.0 @@ -4995,28 +5001,14 @@ packages: - webpack-cli dev: true - /@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3): - resolution: {integrity: sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0(eslint@9.33.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.33.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.33.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.25.0 - eslint: 9.33.0 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color + '@types/yargs-parser': 21.0.3 dev: true /@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3): @@ -5089,14 +5081,6 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@8.25.0: - resolution: {integrity: sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/visitor-keys': 8.25.0 - dev: true - /@typescript-eslint/scope-manager@8.39.0: resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5123,23 +5107,6 @@ packages: typescript: 5.9.2 dev: true - /@typescript-eslint/type-utils@8.25.0(eslint@9.33.0)(typescript@5.6.3): - resolution: {integrity: sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - dependencies: - '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.33.0)(typescript@5.6.3) - debug: 4.4.1 - eslint: 9.33.0 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/type-utils@8.39.0(eslint@9.33.0)(typescript@5.6.3): resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5158,35 +5125,11 @@ packages: - supports-color dev: true - /@typescript-eslint/types@8.25.0: - resolution: {integrity: sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true - /@typescript-eslint/types@8.39.0: resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /@typescript-eslint/typescript-estree@8.25.0(typescript@5.6.3): - resolution: {integrity: sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.8.0' - dependencies: - '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/visitor-keys': 8.25.0 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree@8.39.0(typescript@5.6.3): resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5229,23 +5172,6 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@8.25.0(eslint@9.33.0)(typescript@5.6.3): - resolution: {integrity: sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) - '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.6.3) - eslint: 9.33.0 - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/utils@8.39.0(eslint@9.33.0)(typescript@5.6.3): resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5263,14 +5189,6 @@ packages: - supports-color dev: true - /@typescript-eslint/visitor-keys@8.25.0: - resolution: {integrity: sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.25.0 - eslint-visitor-keys: 4.2.1 - dev: true - /@typescript-eslint/visitor-keys@8.39.0: resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6159,15 +6077,6 @@ packages: wrap-ansi: 7.0.0 dev: true - /cliui@9.0.1: - resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} - engines: {node: '>=20'} - dependencies: - string-width: 7.2.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - dev: false - /clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -6651,6 +6560,11 @@ packages: csstype: 3.1.3 dev: false + /dotenv@17.2.1: + resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==} + engines: {node: '>=12'} + dev: false + /dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -6704,10 +6618,6 @@ packages: resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} dev: false - /emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} - dev: false - /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -7006,7 +6916,7 @@ packages: dependencies: '@next/eslint-plugin-next': 15.1.7 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3) '@typescript-eslint/parser': 8.39.0(eslint@9.33.0)(typescript@5.6.3) eslint: 9.33.0 eslint-import-resolver-node: 0.3.9 @@ -7437,6 +7347,15 @@ packages: path-exists: 4.0.0 dev: true + /find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + dev: false + /flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -7571,11 +7490,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} - dev: false - /get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -8396,6 +8310,13 @@ packages: p-locate: 5.0.0 dev: true + /locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: false + /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: true @@ -8921,6 +8842,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.2.1 + dev: false + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -8935,6 +8863,13 @@ packages: p-limit: 3.1.0 dev: true + /p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: false + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -8976,6 +8911,11 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -10236,15 +10176,6 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 - dev: false - /string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -10829,6 +10760,11 @@ packages: /undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: false + /unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -11262,15 +11198,6 @@ packages: string-width: 5.1.2 strip-ansi: 7.1.0 - /wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 - dev: false - /ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -11318,6 +11245,7 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -11346,11 +11274,6 @@ packages: engines: {node: '>=12'} dev: true - /yargs-parser@22.0.0: - resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=23} - dev: false - /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -11381,23 +11304,16 @@ packages: yargs-parser: 21.1.1 dev: true - /yargs@18.0.0: - resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=23} - dependencies: - cliui: 9.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - string-width: 7.2.0 - y18n: 5.0.8 - yargs-parser: 22.0.0 - dev: false - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + /yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + dev: false + /zod-validation-error@3.5.3(zod@3.25.76): resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} engines: {node: '>=18.0.0'}