강우량 현황 팝업수정진행중

This commit is contained in:
2025-08-20 10:53:30 +09:00
parent 715d5ab433
commit 03f87c2042
7 changed files with 80 additions and 45 deletions
@@ -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;
}
@@ -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<Date | null>(null);
const [endDate, setEndDate] = useState<Date | null>(null);
const didInit = useRef(false);
const [filteredDetailList, setFilteredDetailList] = useState<PrecipitationPropsDetailProps[]>([]);
const [copyDetailList, setCopyDetailList] = useState<PrecipitationPropsDetailProps[]>([]);
@@ -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(filteredList);
setCopyDetailList(filteredList);
setFilteredDetailList(calcData);
setCopyDetailList(calcData);
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);
@@ -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':
@@ -132,7 +132,7 @@ export default function ProcessFacilityInfoModal(props: ModalType) {
</div>
</ListDiv>
<div className="overflow-y-auto">
<div className="!h-[600px]">
<div className="h-[550px]">
<ListDiv className="">
<UITab tabList={tabList} defaultValue="common_info">
<TabsContent value="common_info">
@@ -184,8 +184,8 @@ export default function ProcessFacilityInfoModal(props: ModalType) {
<TabsContent value="history_info">
<ListDiv>
<div className="h-[270px] w-full overflow-y-auto overflow-x-hidden">
<div className="h-[130%]">
<div className="h-[250px] w-full overflow-y-auto overflow-x-hidden">
<div className="h-[120%]">
<UiTable headName={"시설 이력관리"} tableData={gridListFcltyHistInfo} headlist={upHeadListFcltyHistInfo} pageSize={0} total={0} cellClick={undefined} onPageChange={()=>{}}>
{upHeadListFcltyHistInfoChange}
</UiTable>
@@ -193,8 +193,8 @@ export default function ProcessFacilityInfoModal(props: ModalType) {
</div>
</ListDiv>
<ListDiv>
<div className="h-[270px] w-full overflow-y-auto overflow-x-hidden">
<div className="h-[130%]">
<div className="h-[250px] w-full overflow-y-auto overflow-x-hidden">
<div className="h-[120%]">
<UiTable headName={"시설 수질정보"} tableData={gridListFcltyWaterQltyInfo} headlist={upHeadListFcltyWaterQltyInfo} pageSize={0} total={0} cellClick={undefined} onPageChange={()=>{}}>
{upHeadListFcltyWaterQltyInfoChange}
</UiTable>
+1 -1
View File
@@ -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{
@@ -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 };
}
+1 -1
View File
@@ -209,7 +209,7 @@ const dataFormSetting=(item : RdiProps)=> {
DataForm({ type: 'float0', column: 'fctCpc', item: item as unknown as Record<string, unknown> });
DataForm({ type: 'float1', column: 'summerMinBodValue', item: item as unknown as Record<string, unknown>});
DataForm({ type: 'float1', column: 'winterAvgBodLowRainfall', item: item as unknown as Record<string, unknown>});
DataForm({ type: 'float1', column: 'rdiiValue', item: item as unknown as Record<string, unknown>});
DataForm({ type: 'float0', column: 'rdiiValue', item: item as unknown as Record<string, unknown>});
DataForm({ type: 'float1', column: 'infoRnDay', item: item as unknown as Record<string, unknown>});
DataForm({ type: 'float0', column: 'inflAmnt', item: item as unknown as Record<string, unknown>});
}