/** * 강우영향일 계산 로직 * * 1.강우영향일 및 강우량을 계산하며 강우량이 3이상이면 강우영향일이며 이후 이틀까지 강우영향일로 포함 * * 2.강우영향일이면서 3mm이하의 강우량일 경우에는 강우영향을 준 날의 강우량을 따름 * @param data * @param weather (default:ALL), SUNNY, ..etc * @author jsyang */ export default function CalcRainEffect(data : any, weather='ALL') { /* console.log("%c Calculate RainEffect !" , "background:blue;color:white"); console.log("%c Data Length :"+data.length+" Weather : "+weather , "background:yellow;color:blue");*/ // 강우영향일 계산 (강우량이 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; } } } } let rtnData : any = []; 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); } return rtnData; }