119 lines
4.3 KiB
TypeScript
119 lines
4.3 KiB
TypeScript
/**
|
|
* 강우영향일 계산 로직
|
|
*
|
|
* 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;
|
|
} |