diff --git a/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx b/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx index 92e81f61d..e5622ed30 100644 --- a/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/flowRate/modal/page.tsx @@ -74,6 +74,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st let avgefflAmnt = 0; let avginfoRnDay = 0; + console.log('filteredData', filteredData); filteredData.forEach((item: FlowRateModalInterface) => { const totInflAmnt = parseNumber(item.totInflAmnt); const inflAmnt = parseNumber(item.inflAmnt); @@ -103,6 +104,10 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st avginfoRnDay += infoRnDay; }); + console.log('maxtotInflAmnt', maxtotInflAmnt, 'maxinflAmnt', maxinflAmnt, 'maxsumFlow', maxsumFlow, 'maxreturnAmnt', maxreturnAmnt, 'maxefflAmnt', maxefflAmnt, 'maxinfoRnDay', maxinfoRnDay); + console.log('mintotInflAmnt', mintotInflAmnt, 'mininflAmnt', mininflAmnt, 'minsumFlow', minsumFlow, 'minreturnAmnt', minreturnAmnt, 'minefflAmnt', minefflAmnt, 'mininfoRnDay', mininfoRnDay); + console.log('avgtotInflAmnt', avgtotInflAmnt, 'avginflAmnt', avginflAmnt, 'avgsumFlow', avgsumFlow, 'avgreturnAmnt', avgreturnAmnt, 'avgefflAmnt', avgefflAmnt, 'avginfoRnDay', avginfoRnDay); + const newFilteredData = [ { msrDt: '평균', diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index b526195ff..6f3fd6f04 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -980,6 +980,13 @@ const searchWaterUsage = async (searchYear: string, fcltyCd: string) => { return waterUsage; } +// 쉼표가 포함된 문자열을 숫자로 변환하는 함수 +const parseNumber = (value: string | number | null | undefined): number => { + if (value === null || value === undefined || value === '') return 0; + if (typeof value === 'number') return value; + return Number(value.replace(/,/g, '')); +}; + // 강우영향일 계산 및 강우량 덮어씌우기 export const calRainEffectDayRainManage = (data: RainManageListProps[]) => { @@ -1138,6 +1145,17 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) const res = await fetchOperationStatus(searchYear, fcltyCd); const data = res.data; + let yearMaxSumFlow = 1; + let yearMinSumFlow = 1; + let yearAvgSumFlow = 1; + let summerAll = 1; + let summerThree = 1; + let summerRain = 1; + let winterAll = 1; + let winterSunnyMin = 1; + let winterSunnyAvg = 1; + let winterSunnyMax = 1; + if(data && operationalStatusList){ // 유량 - 유입 if (operationalStatusList?.[0]) { @@ -1170,47 +1188,111 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) operationalStatusList[0].winterSunnyAvg = data.winterSunny === null ? '' : (data.winterSunny.AVG_INFL_AMNT ? data.winterSunny.AVG_INFL_AMNT : 0) + (data.winterSunny.AVG_SUM_FLOW ? data.winterSunny.AVG_SUM_FLOW : 0) + (data.winterSunny.AVG_TP_INFL_WQLT_TP ? data.winterSunny.AVG_TP_INFL_WQLT_TP : 0); operationalStatusList[0].winterSunnyMax = data.winterSunny === null ? '' : (data.winterSunny.MAX_INFL_AMNT ? data.winterSunny.MAX_INFL_AMNT : 0) + (data.winterSunny.MAX_SUM_FLOW ? data.winterSunny.MAX_SUM_FLOW : 0) + (data.winterSunny.MAX_TP_INFL_WQLT_TP ? data.winterSunny.MAX_TP_INFL_WQLT_TP : 0); + // 연계처리수 + let yearDay = 0; + let summerDay = 0; + let winterDay = 0; + let summerRainDay = 0; + let summerChungchunDay = 0; + let winterChungchuDay = 0; + + let yearSumFlow = 0; + let maxYearSumFlow = 0; + let minYearSumFlow = 9999999; + let summerSumFlow = 0; + let summerChungchunSumFlow = 0; + let summerRainDaySumFlow = 0; + let winterSumFlow = 0; + let winterChungchunSumFlow = 0; + let minWinterChungchunSumFlow = 9999999; + let maxWinterChungchunSumFlow = 0; + // 연계처리수,지하수유입량 const bscFctCd = fcltyCd; const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as ApiResponse; - - const calData = calRainEffectDay(res2.data, 'SUNNY'); - let chungcunSumFlow = 0; - - let sumSummerChungcunDay = 0; - let sumSummerChungcunFlow = 0; - - let sumWinterChungcunDay = 0; - let sumWinterChungcunFlow = 0; - - /* let yearSumFlow = 0; - let summerSumFlow = 0; - let winterSumFlow = 0; */ - - calData.forEach((flowItem: FlowDataItem) => { - chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - //yearSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; - - if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){ - sumSummerChungcunDay += 1; - sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - //summerSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; - }else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){ - sumWinterChungcunDay += 1; - sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; - // winterSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + console.log('res2', res2); + yearDay = res2.data?res2.data.length:1; + res2.data.forEach((item: FlowDataItem) => { + yearSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + if(maxYearSumFlow < (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0)) { + maxYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } + if(minYearSumFlow > (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0) || minYearSumFlow === 0) { + minYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } + if(item.msrDt.substring(4,6) === '06' || item.msrDt.substring(4,6) === '07' || item.msrDt.substring(4,6) === '08') { + summerDay += 1; + summerSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; + } else if(item.msrDt.substring(4,6) === '01' || item.msrDt.substring(4,6) === '02') { + winterDay += 1; + winterSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0; } }); - + + const calData = calRainEffectDay(res2.data, 'SUNNY'); + const calRainDate = calRainEffectDay(res2.data, 'RAIN'); + + // 지하수유입량 - 청천시 기준 + let chungcunSumFlow = 0; + let sumSummerChungcunFlow = 0; + let sumWinterChungcunFlow = 0; + + // 하절기, 동절기 청천시 계산 + calData.forEach((flowItem: FlowDataItem) => { + chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + + if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){ + summerChungchunDay += 1; + summerChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + }else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){ + if(minWinterChungchunSumFlow > (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0) || minWinterChungchunSumFlow === 0) { + minWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + if(maxWinterChungchunSumFlow < (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0)) { + maxWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + winterChungchuDay += 1; + winterChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; + } + }); + + // 하절기 강우시 계산 + calRainDate.forEach((flowItem: FlowDataItem) => { + if(flowItem.msrDt.substring(4,6) === '06' || flowItem.msrDt.substring(4,6) === '07' || flowItem.msrDt.substring(4,6) === '08') { + summerRainDay += 1; + summerRainDaySumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0; + } + }); + + operationalStatusList[0].yearAvg = Number(operationalStatusList[0].yearAvg) + (yearSumFlow&&Number(yearSumFlow) != 0?Number(yearSumFlow / yearDay):0); + operationalStatusList[0].yearMax = Number(operationalStatusList[0].yearMax) + Number(maxYearSumFlow); + operationalStatusList[0].yearMin = Number(operationalStatusList[0].yearMin) + Number(minYearSumFlow); + operationalStatusList[0].summerAll = Number(operationalStatusList[0].summerAll) + (summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0); + operationalStatusList[0].summerThree = Number(operationalStatusList[0].summerThree) + (summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0); + operationalStatusList[0].summerRain = Number(operationalStatusList[0].summerRain) + (summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0); + operationalStatusList[0].winterAll = Number(operationalStatusList[0].winterAll) + (winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0); + operationalStatusList[0].winterSunnyMin = Number(operationalStatusList[0].winterSunnyMin) + Number(minWinterChungchunSumFlow); + operationalStatusList[0].winterSunnyMax = Number(operationalStatusList[0].winterSunnyMax) + (winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?Number(winterChungchunSumFlow / winterChungchuDay):0); + operationalStatusList[0].winterSunnyAvg = Number(operationalStatusList[0].winterSunnyAvg) + Number(maxWinterChungchunSumFlow); + // 연계처리수 - /* const avgYearSumFlow = yearSumFlow / calData.length; - const avgSummerSumFlow = summerSumFlow / calData.length; - const avgWinterSumFlow = winterSumFlow / calData.length; */ + yearAvgSumFlow = Number((yearSumFlow&&Number(yearSumFlow)!=0)?(yearSumFlow / yearDay):''); + yearMaxSumFlow = maxYearSumFlow; + yearMinSumFlow = minYearSumFlow; + summerAll = summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0 + summerThree= summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0; + summerRain = summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0; + winterAll = winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0; + winterSunnyMin = minWinterChungchunSumFlow; + winterSunnyAvg = winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?(winterChungchunSumFlow / winterChungchuDay):0; + winterSunnyMax = maxWinterChungchunSumFlow; // 지하수유입량 const usage = chungcunSumFlow / calData.length; - const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay; - const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay; + const summerUsage = sumSummerChungcunFlow / summerChungchunDay; + const winterUsage = sumWinterChungcunFlow / winterChungchuDay; operationalStatusList[0].groundWaterAvg = Math.round((usage-(usage*0.65*0.8)) * 100) / 100; operationalStatusList[0].groundWaterSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100; @@ -1252,7 +1334,23 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) } } } + + if(operationalStatusList[2]){ + operationalStatusList[2].yearAvg = yearAvgSumFlow; + operationalStatusList[2].yearMax = yearMaxSumFlow; + operationalStatusList[2].yearMin = yearMinSumFlow; + operationalStatusList[2].summerAll = summerAll; + operationalStatusList[2].summerThree = summerThree; + operationalStatusList[2].summerRain = summerRain; + operationalStatusList[2].winterAll = winterAll; + operationalStatusList[2].winterSunnyMin = winterSunnyMin; + operationalStatusList[2].winterSunnyAvg = winterSunnyAvg; + operationalStatusList[2].winterSunnyMax = winterSunnyMax; + dataFormSetting(operationalStatusList[2]); + } } + + console.log('operationalStatusList', operationalStatusList); //const excelDownList: RainManageExcelType[] = []; /* if(isExcel){ res.data.forEach(item => {