/** * 강우영향일 계산 로직 * * 1.강우영향일 및 강우량을 계산하며 강우량이 3이상이면 강우영향일이며 이후 이틀까지 강우영향일로 포함 * * 2.강우영향일이면서 3mm이하의 강우량일 경우에는 강우영향을 준 날의 강우량을 따름 * @param data * @param weather (default:ALL), SUNNY, ..etc * @author jsyang */ export default function CalcRainEffect(data: any, weather = 'ALL') { const rtnDataAll: any = []; const rtnDataSunny: any = []; const rtnDataRain: any = []; let rtnData: any = []; let rainEffectStd = 0; for (let idx = 0; idx < data.length; idx++) { const item = data[idx]; if (item.infoRnDay == null || item.infoRnDay == 'x' || item.infoRnDay == '') item.infoRnDay = 0; if (Number(item.infoRnDay) >= 3) { // 강우일 rainEffectStd = 2; item.toBeInfoRnDay = item.infoRnDay; } else { rainEffectStd--; } if (rainEffectStd < 0) { // 청천일 item.rainEffectDay = 0; rtnDataSunny.push(item); } else if (rainEffectStd >= 0) { // 강우일 + 강우영향일 item.rainEffectDay = 1; if (idx > 2) { // 전전날 비가 왔고 오늘 강우량 3미만인 경우 전전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전전날 강우량으로 설정 if (data[idx - 2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx - 2]?.infoRnDay.toString().trim()) >= 3) { data[idx]!.toBeInfoRnDay = data[idx - 2]!.infoRnDay; } } if (idx > 1) { // 전날 비가 왔고 오늘 강우량 3미만인 경우 전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전날 강우량으로 설정 if (data[idx - 1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx - 1]?.infoRnDay.toString().trim()) >= 3) { data[idx]!.toBeInfoRnDay = data[idx - 1]!.infoRnDay; } } rtnDataRain.push(item); } rtnDataAll.push(item); } // // 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일) // for(let idx = 0; idx < data.length; idx++) { // const item = data[idx]; // if(item){ // if(item.infoRnDay && Number(item.infoRnDay) >= 3) { // 강우량이 3 이상인 경우 // item.rainEffectDay = 1; // } else { // item.rainEffectDay = 0; // } // if(item.infoRnDay == 'x'){ // item.infoRnDay = '0.0'; // item.toBeInfoRnDay = '0.0'; // }else{ // item.infoRnDay = Number(item.infoRnDay).toFixed(1); // item.toBeInfoRnDay = Number(item.infoRnDay).toFixed(1); // } // } // } // // 이틀 전, 하루 전이 강우영향일(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){ // // 전날 비가 왔고 오늘 강우량 3미만인 경우 전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전날 강우량으로 설정 // if(data[idx-1]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-1]?.infoRnDay.toString().trim()) >= 3) { // data[idx]!.toBeInfoRnDay = data[idx-1]!.infoRnDay; // } // } // if(idx > 2){ // // 전전날 비가 왔고 오늘 강우량 3미만인 경우 전전날 강우량이 3이상이면 오늘 toBeInfoRnDay을 전전날 강우량으로 설정 // if(data[idx-2]?.infoRnDay && Number(data[idx]?.infoRnDay) < 3 && Number(data[idx-2]?.infoRnDay.toString().trim()) >= 3) { // data[idx]!.toBeInfoRnDay = data[idx-2]!.infoRnDay; // } // } // } // } // if (weather === 'ALL') { // rtnData = data; // } else if (weather === 'SUNNY') { // rtnData = data.filter((item: any) => item.rainEffectDay === 0); // } else { // rtnData = data.filter((item: any) => item.rainEffectDay === 1); // } if (weather === 'ALL') { rtnData = rtnDataAll; } else if (weather === 'SUNNY') { rtnData = rtnDataSunny; } else { rtnData = rtnDataRain; } return rtnData; }