diff --git a/apps/fo/app/components/common/CalcRainEffect.tsx b/apps/fo/app/components/common/CalcRainEffect.tsx index b31470850..bd6e39185 100644 --- a/apps/fo/app/components/common/CalcRainEffect.tsx +++ b/apps/fo/app/components/common/CalcRainEffect.tsx @@ -5,11 +5,12 @@ * * 2.강우영향일이면서 3mm이하의 강우량일 경우에는 강우영향을 준 날의 강우량을 따름 * @param data - * @param weather (default:ALL) + * @param weather (default:ALL), SUNNY, ..etc + * @param chagePart (default:ALL), RAIN_DAY, RAIN_AMNT * @author jsyang */ -export default function CalcRainEffect(data : any, weather='ALL') { +export default function CalcRainEffect(data : any, weather='ALL', changePart='ALL') { console.log("%c Calculate RainEffect !" , "background:blue;color:white"); console.log("%c Data Length :"+data.length+" Weather : "+weather , "background:yellow;color:blue"); // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일) @@ -30,30 +31,34 @@ export default function CalcRainEffect(data : any, weather='ALL') { } } - // 이틀 전, 하루 전이 강우영향일(3 이상)인 경우 해당 날도 강우영향일로 설정 - for(let idx = 0; idx < data.length; idx++) { - if(data[idx]) { - // 하루 전이 강우영향일(3 이상)인 경우 - if(idx > 0 && data[idx-1]?.infoRnDay && Number(data[idx-1]?.infoRnDay) >= 3) { - data[idx]!.rainEffectDay = 1; - } - // 이틀 전이 강우영향일(3 이상)인 경우 - if(idx > 1 && data[idx-2]?.infoRnDay && Number(data[idx-2]?.infoRnDay) >= 3) { - data[idx]!.rainEffectDay = 1; + if(['ALL', 'RAIN_DAY'].includes(changePart)) { + // 이틀 전, 하루 전이 강우영향일(3 이상)인 경우 해당 날도 강우영향일로 설정 + for(let idx = 0; idx < data.length; idx++) { + if(data[idx]) { + // 하루 전이 강우영향일(3 이상)인 경우 + if(idx > 0 && data[idx-1]?.infoRnDay && Number(data[idx-1]?.infoRnDay) >= 3) { + data[idx]!.rainEffectDay = 1; + } + // 이틀 전이 강우영향일(3 이상)인 경우 + if(idx > 1 && data[idx-2]?.infoRnDay && Number(data[idx-2]?.infoRnDay) >= 3) { + data[idx]!.rainEffectDay = 1; + } } } } - for(let idx = 0; idx < data.length; idx++) { - if(data[idx] && data[idx]?.rainEffectDay === 1) { - if(idx > 1){ - if(data[idx-1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-1]?.infoRnDay.toString().trim()) >= 3) { - data[idx]!.infoRnDay = data[idx-1]!.infoRnDay; + if(['ALL', 'RAIN_AMNT'].includes(changePart)){ + for(let idx = 0; idx < data.length; idx++) { + if(data[idx] && data[idx]?.rainEffectDay === 1) { + if(idx > 1){ + if(data[idx-1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-1]?.infoRnDay.toString().trim()) >= 3) { + data[idx]!.infoRnDay = data[idx-1]!.infoRnDay; + } } - } - if(idx > 2){ - if(data[idx-2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-2]?.infoRnDay.toString().trim()) >= 3) { - data[idx]!.infoRnDay = data[idx-2]!.infoRnDay; + if(idx > 2){ + if(data[idx-2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-2]?.infoRnDay.toString().trim()) >= 3) { + data[idx]!.infoRnDay = data[idx-2]!.infoRnDay; + } } } } diff --git a/apps/fo/app/pages/(with-layout)/facilityPrecipitation/modal/page.tsx b/apps/fo/app/pages/(with-layout)/facilityPrecipitation/modal/page.tsx index 0b4ef5830..e7659f672 100644 --- a/apps/fo/app/pages/(with-layout)/facilityPrecipitation/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/facilityPrecipitation/modal/page.tsx @@ -122,7 +122,7 @@ export default function PrecipitationModal(props: PrecipitationModalProps) { const filteredList = props.detailList .map(i => ({ ...i })) // ← 얕은 복제 .filter((item) => props.facilityCd === item.bscFctCd); - const calcData = CalcRainEffect(filteredList); + const calcData = CalcRainEffect(filteredList, 'ALL', 'RAIN_DAY'); setFilteredDetailList(calcData); setCopyDetailList(calcData); diff --git a/apps/fo/app/store/common/index.tsx b/apps/fo/app/store/common/index.tsx index 5646ea126..d88c621e8 100644 --- a/apps/fo/app/store/common/index.tsx +++ b/apps/fo/app/store/common/index.tsx @@ -201,6 +201,9 @@ const selectMiddleRegionData: SelectDataType[] = [ { text: "전체", val: '0' } ]; +// 오수전환율 +export const OSU_PERCENT = 0.9; + /** * 반올림 함수 * @param value : 대상 숫자 diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index ea751542f..26e7a26eb 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -4,7 +4,7 @@ import { getFetch } from "@/app/components/api"; import DataForm from "@/app/components/common/DataForm"; -import { fetchPlanInfo, roundUp } from "../common"; +import { fetchPlanInfo, OSU_PERCENT, roundUp } from "../common"; import type { FacilityWaterQltyProps } from "../facilityWaterQlty"; import { type ApiResponse, type FlowDataItem } from "../underWaterInput"; import CalcRainEffect from "@/app/components/common/CalcRainEffect"; @@ -1287,9 +1287,9 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) 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; - operationalStatusList[0].groundWaterWinter = Math.round((winterUsage-(winterUsage*0.65*0.8)) * 100) / 100; + operationalStatusList[0].groundWaterAvg = Math.round((usage-(usage*0.65*OSU_PERCENT)) * 100) / 100; + operationalStatusList[0].groundWaterSummer = Math.round((summerUsage-(summerUsage*0.65*OSU_PERCENT)) * 100) / 100; + operationalStatusList[0].groundWaterWinter = Math.round((winterUsage-(winterUsage*0.65*OSU_PERCENT)) * 100) / 100; //operationalStatusList[0].groundWaterAvg = calData.length === 0 ? '' : Number(calData[0].inflAmnt) - (Number(calData[0].inflAmnt)*0.65*0.8); //operationalStatusList[0].groundWaterSummer = calData.length === 0 ? '' : Number(calData[0].inflAmnt) - (Number(calData[0].inflAmnt)*0.65*0.8); diff --git a/apps/fo/app/store/sewageOccur/index.tsx b/apps/fo/app/store/sewageOccur/index.tsx index 5645c89bc..d72718736 100644 --- a/apps/fo/app/store/sewageOccur/index.tsx +++ b/apps/fo/app/store/sewageOccur/index.tsx @@ -2,6 +2,7 @@ import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; import { getFetch } from "@/app/components/api"; import CalcRainEffect from "@/app/components/common/CalcRainEffect"; +import { OSU_PERCENT } from "../common"; export type { TableUpperProps }; /**==================================== * Store - 타입 @@ -345,8 +346,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => { tableData.push({ msrDt: item.yr+'-'+(index+1>=10?String(index+1):'0'+(index+1)), waterUsage: Math.round(item.usege*1) /1, - swageChangePercent: (Math.round((item.usege/item.usege*0.9) * 100) / 100) * 100, - estimationSewage: Math.round(item.usege*0.9 * 1) / 1 + swageChangePercent: (Math.round((item.usege/item.usege*OSU_PERCENT) * 100) / 100) * 100, + estimationSewage: Math.round(item.usege*OSU_PERCENT * 1) / 1 }) if (item.usege > maxWaterUsage) { maxWaterUsage = item.usege; diff --git a/apps/fo/app/store/underWaterInput/index.tsx b/apps/fo/app/store/underWaterInput/index.tsx index 1587d6933..569919615 100644 --- a/apps/fo/app/store/underWaterInput/index.tsx +++ b/apps/fo/app/store/underWaterInput/index.tsx @@ -3,6 +3,7 @@ import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; import type { ExcelType, UnderWaterInputModalProps, UnderWaterProps } from "./types"; import CalcRainEffect from "@/app/components/common/CalcRainEffect"; +import { OSU_PERCENT } from "../common"; export type { TableUpperProps }; // SewageOccurDetailProps 타입을 여기에 정의 @@ -306,20 +307,20 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0; } }); - const usage = chungcunSumFlow / calData.length; const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay; const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay; - if(bscFctCd === '11200PB001R') { + //bscFctCd === '11200PB001R') 중랑 - 테스트할 때 코드넣고 해야 보기편해요~ + /* 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.9)) * 1) / 1; - item.underWaterInputSummer = Math.round((summerUsage-(summerUsage*0.65*0.9)) * 1) / 1; - item.underWaterInputWinter = Math.round((winterUsage-(winterUsage*0.65*0.9)) * 1) / 1; - item.properYn = Math.round( (Number(usage-(usage*0.65*0.9)) / Number(item.inflAmnt)) * 100 * 1 ) / 1 > 20?'초과유입':'적정'; + item.underWaterInputYear = Math.round((usage-(usage*0.65*OSU_PERCENT)) * 1) / 1; + item.underWaterInputSummer = Math.round((summerUsage-(summerUsage*0.65*OSU_PERCENT)) * 1) / 1; + item.underWaterInputWinter = Math.round((winterUsage-(winterUsage*0.65*OSU_PERCENT)) * 1) / 1; + item.properYn = Math.round( (Number(usage-(usage*0.65*OSU_PERCENT)) / Number(item.inflAmnt)) * 100 * 1 ) / 1 > 20?'초과유입':'적정'; return item; })); @@ -406,8 +407,8 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy tableData.push({ msrDt: item.yr+'-'+(index+1>=10?String(index+1):'0'+(index+1)), realSewageInput:Math.round(item.usege*1) /1, - sewageOccur:Math.round(item.usege*0.65*0.9 * 1) / 1, - underWaterInput:Math.round((item.usege-(item.usege*0.65*0.9)) * 1) / 1, + sewageOccur:Math.round(item.usege*0.65*OSU_PERCENT * 1) / 1, + underWaterInput:Math.round((item.usege-(item.usege*0.65*OSU_PERCENT)) * 1) / 1, }) if (item.usege > maxWaterUsage) { maxWaterUsage = item.usege; @@ -432,21 +433,21 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy { msrDt: '평균', realSewageInput:Math.round(avgWaterUsage*1) /1, - sewageOccur:Math.round(avgWaterUsage*0.65*0.9 * 1) / 1, - underWaterInput: Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.9)) * 1) / 1 + sewageOccur:Math.round(avgWaterUsage*0.65*OSU_PERCENT * 1) / 1, + underWaterInput: Math.round((avgWaterUsage-(avgWaterUsage*0.65*OSU_PERCENT)) * 1) / 1 //underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100, }, { msrDt: '최대', realSewageInput: Math.round(maxWaterUsage*1) /1, - sewageOccur: Math.round(maxWaterUsage*0.65*0.9 * 1) / 1, - underWaterInput: Math.round((maxWaterUsage-(maxWaterUsage*0.65*0.9)) * 1) / 1, + sewageOccur: Math.round(maxWaterUsage*0.65*OSU_PERCENT * 1) / 1, + underWaterInput: Math.round((maxWaterUsage-(maxWaterUsage*0.65*OSU_PERCENT)) * 1) / 1, }, { msrDt: '최소', realSewageInput: Math.round(minWaterUsage*1) /1, - sewageOccur: Math.round(minWaterUsage*0.65*0.9 * 1) / 1, - underWaterInput: Math.round((minWaterUsage-(minWaterUsage*0.65*0.9)) * 1) / 1, + sewageOccur: Math.round(minWaterUsage*0.65*OSU_PERCENT * 1) / 1, + underWaterInput: Math.round((minWaterUsage-(minWaterUsage*0.65*OSU_PERCENT)) * 1) / 1, }, ...tableData ]