Tenho que fazer um método para ler uma tabela ‘encomenda’ no banco de dados. Eis as especificações:
1.O sistema busca o total de encomendas com status = “aberto”, agrupados por data, excluindo-se o dia atual.
2.O sistema verifica a primeira data disponível da lista, onde o número de encomendas seja inferior a seis.
3.O sistema retorna a data disponível no item 2, como a data prevista de entrega
Fluxo Alternativo
- Nenhuma data disponível
Se não houver nenhuma data disponível dentro da lista recebida, o sistema deve calcular a data prevista de entrega como sendo a maior data da lista acrescida de um dia. Se a data prevista cair sábado ou domingo, deve ser incrementada até a segunda-feira. - Nenhuma encomenda cadastrada
Se não houver nenhuma encomenda cadastrada, o sistema deve calcular a data prevista de entrega como sendo a data da encomenda acrescida de um dia. Se a data prevista cair sábado ou domingo, deve ser incrementada até a segunda-feira.
Meu método:
public Date getEncomendasAbertas() throws SQLException{
Date date = new Date();
PreparedStatement stat = connection.prepareStatement(
"SELECT dataEntrega, count(numero) as nEnc FROM encomenda"
+ " WHERE status = ? OR status = ?"
+ " GROUP BY dataEntrega DESC"
+ " HAVING dataEntrega>?;");
stat.setString(1, "aberto");
stat.setString(2, "Aberto");
stat.setDate(3, new java.sql.Date(date.getTime()));
ResultSet res = stat.executeQuery();
int cont2 = 0;
while(res.next()){
int cont = res.getInt("nEnc");
cont2++;
if(cont<6){
date = new java.util.Date(res.getDate("dataEntrega").getTime());
break;
}
else if(res.next()==false){
date = new java.util.Date(res.getDate("dataEntrega").getTime()+1);
}
}
Date date2 = new Date();
if(cont2==0){
date.setDate(date.getDate()+1);
}
else if(date.getDate()<=date2.getDate()){
date2.setDate(date2.getDate()+1);
date = date2;
}
PreparedStatement stat2 = connection.prepareStatement(
"SELECT count(numero) as nEnc FROM encomenda"
+ " WHERE dataEntrega = ?;");
stat2.setDate(1, new java.sql.Date(date.getTime()));
ResultSet r = stat2.executeQuery();
while(r.next()){
int conta = r.getInt("nEnc");
if(conta==6){
date.setDate(date.getDate()+1);
}
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
int diaDaSemana = gc.get(GregorianCalendar.DAY_OF_WEEK);
if(diaDaSemana==1){
date.setDate(date.getDate()+1);
}
else if(diaDaSemana==7){
date.setDate(date.getDate()+2);
}
return date;
}
Como devo dizer, não está funcionando como eu esperava. Sou iniciante em java pra dizer a verdade, alguém pode me dizer onde está o erro? As datas não são incrementadas como está especificado no código.