目前有下列一组规则,需要判断是否可用。
有4个参数:
canReserve=true;//是否可用
startday;//入住日期
endday;//离店日期
days;//入住天数
predays//提前入住天数有一组list数据,对象内容为startdate、enddate、CloseToArrival、CloseToArrival、status、MinLOS、MAXLOS、LeadingTime
比对规则为:
1、状态(Status):“O” 或为空表明可用;“C”关闭或者满房。入住期间,如果该供应商、酒店、房型、价格计划下,有一天出现关房状态C,则该产品不可预订。
2、是否对当天入住关闭(CloseToArrival),“O”生效,“C”或为空不再做该检查。即如果入住日期落在了[STARTDATE,ENDDATE]期间,且该字段为”O”,则该供应商、酒店、房型、价格计划不可预订。
3、是否对当天离店关闭(CloseToArrival),“O”生效,“C” 或为空不做该检查。即如果离店日期落在了[STARTDATE,ENDDATE]期间,且该字段为“O”,则该供应商、酒店、房型、价格计划不可预订。
4、最小入住天数(MinLOS)。当大于0时,表明入住日期在[STARTDATE,ENDDATE]期间时,如果入住天数大于等于该值,才能预订。
5、最大入住天数(MAXLOS)。当大于0时,表明入住日期在[STARTDATE,ENDDATE]期间时,如果入住天数小于等于该值,才能预订。
6、提前预订天数(LeadingTime)。当该字段大于0时,表明入住日期在[STARTDATE,ENDDATE]期间时,如果提前预订天数大于等于该值,才能预订。我写的java伪代码为:for(每一个价格计划){
for(everyday){
if(everyday>=startdate and everyday<=enddate){
canReserve=true;
if(Status=="O"){
canReserve=false;//不能预定
break;
canReserve=false;//不能预定
Break;
}else{
//是否对当天入住关闭(CloseToArrival
if(everyday==startday){
if(CloseToArrival=='O' and everyday>=startdate and everday<=enddate){
canReserve=false;
break;
}
//最小入住天数
if(MinLOS>0){
if(everyday>=startdate and everday<=enddate){
if(days>MinLOS)
canReserve=true;
else{
canReserve=false;
break;
}
}else{
canReserve=false;
break;
}
}
//最大入住天数
if(MAXLOS>0){
if(everyday>=startdate and everday<=enddate){
if(days<MAXLOS)
canReserve=true;
else{
canReserve=false;
break;
}
}else{
canReserve=false;
break;
}
}
//提前预定天数
if(LeadingTime>0){
if(everyday>=startdate and everday<=enddate){
if(predays>LeadingTime)
canReserve=true;
else{
canReserve=false;
break;
}
}else{
canReserve=false;
break;
}
}
}
//是否对当天离店关闭(CloseToDeparture
if(everyday==endday){
if(CloseToDeparture=='O' and everyday>=startdate and everday<=enddate){
canReserve=false;
break;
}
}
}else{
canReserve=false;//不能预定
Continue;
}
}
}
觉得自己写的很啰嗦,请问大侠们,有更好的写法吗?