diff --git a/apps/fo/app/components/common/CalcRainEffect.tsx b/apps/fo/app/components/common/CalcRainEffect.tsx new file mode 100644 index 000000000..bc989b264 --- /dev/null +++ b/apps/fo/app/components/common/CalcRainEffect.tsx @@ -0,0 +1,54 @@ +/** + * 강우영향일 계산 로직 + * + * 1.강우영향일 및 강우량을 계산하며 강우량이 3이상이면 강우영향일이며 이후 이틀까지 강우영향일로 포함 + * + * 2.강우영향일이면서 3mm이하의 강우량일 경우에는 강우영향을 준 날의 강우량을 따름 + * @param data + * @author jsyang + */ + +export default function CalcRainEffect(data : any) { + console.log("%c Calculate RainEffect ! ", "background:blue;color:white"); + // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일) + for(let idx = 0; idx < data.length; idx++) { + const item = data[idx]; + if(item){ + if(item.infoRnDay && Number(item.infoRnDay) >= 3) { + item.rainEffectDay = 1; + } else { + item.rainEffectDay = 0; + } + } + } + + // 이틀 전, 하루 전이 강우영향일(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(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; + } + } + } + } + return data; +} \ No newline at end of file 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 5a8e77dcd..904db73e2 100644 --- a/apps/fo/app/pages/(with-layout)/facilityPrecipitation/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/facilityPrecipitation/modal/page.tsx @@ -1,4 +1,5 @@ "use client" +import CalcRainEffect from "@/app/components/common/CalcRainEffect"; import { useFoStore } from "@/app/store"; import type { PrecipitationPropsDetailProps } from "@/app/store/facilityPrecipitation"; import { DatePickerRange, UiTable } from "@common/business_components/ui"; @@ -29,6 +30,7 @@ export default function PrecipitationModal(props: PrecipitationModalProps) { // States const [startDate, setStartDate] = useState(null); const [endDate, setEndDate] = useState(null); + const didInit = useRef(false); const [filteredDetailList, setFilteredDetailList] = useState([]); const [copyDetailList, setCopyDetailList] = useState([]); @@ -113,17 +115,21 @@ export default function PrecipitationModal(props: PrecipitationModalProps) { }; useEffect(() => { + if(didInit.current) return; + if (props.detailList.length > 0) { - const filteredList = props.detailList.filter((item) => - props.facilityCd === item.bscFctCd - ); + didInit.current = true; + const filteredList = props.detailList + .map(i => ({ ...i })) // ← 얕은 복제 + .filter((item) => props.facilityCd === item.bscFctCd); + const calcData = CalcRainEffect(filteredList); + + setFilteredDetailList(calcData); + setCopyDetailList(calcData); - setFilteredDetailList(filteredList); - setCopyDetailList(filteredList); - - if (filteredList.length > 0) { - const firstDateStr = filteredList[0]?.rainDt; - const lastDateStr = filteredList[filteredList.length - 1]?.rainDt; + if (calcData.length > 0) { + const firstDateStr = calcData[0]?.rainDt; + const lastDateStr = calcData[filteredList.length - 1]?.rainDt; if (firstDateStr) { const firstDate = new Date(firstDateStr); diff --git a/apps/fo/app/pages/(with-layout)/facilityPrecipitation/page.tsx b/apps/fo/app/pages/(with-layout)/facilityPrecipitation/page.tsx index 8cd81ba51..c36386507 100644 --- a/apps/fo/app/pages/(with-layout)/facilityPrecipitation/page.tsx +++ b/apps/fo/app/pages/(with-layout)/facilityPrecipitation/page.tsx @@ -153,14 +153,6 @@ export default function FacilityPrecipitation() { */ // 조회 const searchFacilityPrecipitation = useCallback(({ partValue, regionValue, unitWaterShedValue, middleRegionValue, envPartValue, sidoValue, sigunValue }: ReturnType, pageNo: number, pageCnt:number=20) => { - console.log('partValue : ', partValue); - console.log('regionValue : ', regionValue); - console.log('unitWaterShedValue : ', unitWaterShedValue); - console.log('middleRegionValue : ', middleRegionValue); - console.log('envPartValue : ', envPartValue); - console.log('sidoValue : ', sidoValue); - console.log('sigunValue : ', sigunValue); - let nameCd, partStr switch (partValue) { case 'R': diff --git a/apps/fo/app/pages/(with-layout)/processFacility/modal/page.tsx b/apps/fo/app/pages/(with-layout)/processFacility/modal/page.tsx index 3afed1166..5764cb5ae 100644 --- a/apps/fo/app/pages/(with-layout)/processFacility/modal/page.tsx +++ b/apps/fo/app/pages/(with-layout)/processFacility/modal/page.tsx @@ -132,7 +132,7 @@ export default function ProcessFacilityInfoModal(props: ModalType) {
-
+
@@ -184,8 +184,8 @@ export default function ProcessFacilityInfoModal(props: ModalType) { -
-
+
+
{}}> {upHeadListFcltyHistInfoChange} @@ -193,8 +193,8 @@ export default function ProcessFacilityInfoModal(props: ModalType) {
-
-
+
+
{}}> {upHeadListFcltyWaterQltyInfoChange} diff --git a/apps/fo/app/store/dashboard/index.tsx b/apps/fo/app/store/dashboard/index.tsx index 8ad56e070..94d848ae9 100644 --- a/apps/fo/app/store/dashboard/index.tsx +++ b/apps/fo/app/store/dashboard/index.tsx @@ -1131,7 +1131,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType) el.provisionalApproval = rtnPlanData?rtnPlanData.ugwtUseSum:''; } - if(index == 0 || index === 2){ + if(index === 2){ dataFormSettingPlan(el, 1); }else if(index == 4){ }else{ diff --git a/apps/fo/app/store/facilityPrecipitation/index.tsx b/apps/fo/app/store/facilityPrecipitation/index.tsx index 66727122d..47e9a1a1e 100644 --- a/apps/fo/app/store/facilityPrecipitation/index.tsx +++ b/apps/fo/app/store/facilityPrecipitation/index.tsx @@ -135,7 +135,6 @@ const gridListPrecipitationDetail:PrecipitationPropsDetailProps[] = [ const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { const tailStr = '/'+pageNo + '/' + pageSize + '/' + searchYear + (part?'/' + part:'' ) + (nameCd?'/' + nameCd:'' ) + (fcltCpct?'/' + fcltCpct:'' ) + (operationValue?'/' + operationValue:'' ) + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') ; - console.log('tailStr', tailStr); const url = '/fclt/rain' + tailStr; const res = await getFetch('fo', url); const tmpData:PrecipitationPropsDetailProps[] = []; @@ -146,31 +145,13 @@ const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, const rainDt = res.data[idx].rainyDayObjList[idx2].rainDt; const infoRnDay = res.data[idx].rainyDayObjList[idx2].infoRnDay; const rainDay = res.data[idx].rainyDayObjList[idx2].infoRnDay>=3?1:0; - let rainEffectDay = 0; - if(idx2 < res.data[idx].rainyDayObjList.length-2){ - if(rainDay==1){ - rainEffectDay = 1; - } else { - if(idx2 >= 2){ - if(res.data[idx].rainyDayObjList[idx2-1].infoRnDay>=3 || res.data[idx].rainyDayObjList[idx2-2].infoRnDay>=3){ - rainEffectDay = 1; - } - } - } - } else if(idx2 < res.data[idx].rainyDayObjList.length-1){ - if(rainDay==1 || res.data[idx].rainyDayObjList[idx2+1].infoRnDay>=3){ - rainEffectDay = 1; - } - } else { - rainEffectDay = rainDay; - } tmpData.push({ bscFctCd : bscFctCd, rainDt : rainDt, infoRnDay : infoRnDay, rainDay : rainDay, - rainEffectDay : rainEffectDay + rainEffectDay : rainDay }) } } @@ -183,8 +164,10 @@ const fetchFacilityPrecipitationList = async (pageNo: number, pageSize: number, item.rainEffectDay = filteredList.reduce((acc, curr) => acc + curr.rainEffectDay, 0); item.totalYearRain = filteredList.reduce((acc, curr) => acc + curr.infoRnDay, 0); item.infoRnDay = filteredList.reduce((acc, curr) => acc + curr.rainDay, 0); - }) + }); + } + return { data: res.data, count: res.count, detailData: tmpData }; } diff --git a/apps/fo/app/store/rdi/index.tsx b/apps/fo/app/store/rdi/index.tsx index 6fe400ce9..a739cd05e 100644 --- a/apps/fo/app/store/rdi/index.tsx +++ b/apps/fo/app/store/rdi/index.tsx @@ -209,7 +209,7 @@ const dataFormSetting=(item : RdiProps)=> { DataForm({ type: 'float0', column: 'fctCpc', item: item as unknown as Record }); DataForm({ type: 'float1', column: 'summerMinBodValue', item: item as unknown as Record}); DataForm({ type: 'float1', column: 'winterAvgBodLowRainfall', item: item as unknown as Record}); - DataForm({ type: 'float1', column: 'rdiiValue', item: item as unknown as Record}); + DataForm({ type: 'float0', column: 'rdiiValue', item: item as unknown as Record}); DataForm({ type: 'float1', column: 'infoRnDay', item: item as unknown as Record}); DataForm({ type: 'float0', column: 'inflAmnt', item: item as unknown as Record}); }