Olá meus amigos,
primeiramente gostaria de pedir desculpa pelo título do tópico genérico demais, mas eu não achei algo melhor …
Estou desenvolvendo um sistema (struts 2 e hibernate) para controlar radio taxi, cada carro usa um GPS com 3G conectado ao servidor.
Quando a atendente da rádio táxi recebe uma solicitação do cliente, uma nova corrida é gerada, assim o sistema deve calcular qual taxi está mais perto daquele cliente e informar na tela do GPS do taxi que ele deve atender aquele cliente. O taxista tem 15 segundos para clicar em aceitar corrida, caso contrário o sistema deve localizar o proximo taxi e assim por diante. Por fim, caso nenhum taxi seja encontrado ou aceite a corrida dentro do raio maximo configurado no sistema, o operador do sistema pega o rádio e solicita um voluntário, quando este voluntário aparece o operador deve poder direcionar aquela corrida para um taxi em especial.
Cada taxi é identificado pelo seu registro (RT)
O sistema já está cadastrando usuario, cliente, taxi, etc…
O sistema já calcula a distancia a partir de coordenada e informa qual o taxi mais próximo.
Agora estou precisando de dicas de como fazer os outros detalhes que coloquei acima.
Para acessar o sistema entre em sistaxi.dyndns.org usuario: guj senha:guj
no menu tem um botão para fazer download do .war para importar no eclipse, com todos os fontes, etc…
não se assustem com a feiura do sistema, agora estou preocupado em fazer as regras de negócio funcionarem, depois eu enfeito com jquery, etc …
minha maior dúvida é com a classe que faz a regra de negócio, mas se puderem me ajudar tbm com o jsp que deve ter ajax e eu não faço idéia de como usa ajax
package br.com.sistaxi.controle.action;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import br.com.sistaxi.auxiliar.CalculaDistancia;
import br.com.sistaxi.beans.Cliente;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.hibernate.Dao;
public class GeraCorridaAction {
private ArrayList<Cliente> listaCliente = new ArrayList<Cliente>();
private Dao dao = new Dao();
private String mensagem;
private double distancia;
private ArrayList<Taxi> listaTaxi = new ArrayList<Taxi>();
private Taxi taxi = new Taxi();
private double latitude;
private double longitude;
private double menorDistancia;
private Taxi proximoTaxi = new Taxi();
private String menorDistanciaStr;
private String funcao;
private Cliente cliente = new Cliente();
private CalculaDistancia cd = new CalculaDistancia();
private Corrida corrida = new Corrida();
private String corridaObservacao;
private List<Corrida> listaCorrida = new ArrayList<Corrida>();
@Action(value = "/gerarCorrida", results = {
@Result(name = "goListarCliente", location = "/jsp/listarClientePage.jsp"),
@Result(name = "goGeraCorrida", location = "/jsp/geraCorridaPage.jsp"),
@Result(name = "goLogin", location = "/index.jsp") })
public String execute() {
// Função iniciar uma nova corrida
if ("gerarCorrida".equals(funcao)) {
// inicializa variaveis
distancia = 0;
// raio máximo de busca
menorDistancia = 100000000;
// carrega toda lista de taxi
listaTaxi = dao.listaTaxi(taxi);
// converte os dados que vieram da form como string para double
latitude = Double.parseDouble(cliente.getLatitude());
longitude = Double.parseDouble(cliente.getLongitude());
// percorre todos os taxis procurando pelo mais proximo
for (int i = 0; i < listaTaxi.size(); i++) {
// chama a função que calcula a distancia entre o taxi e o
// cliente
distancia = cd.btw(latitude, longitude, listaTaxi.get(i)
.getLatitude(), listaTaxi.get(i).getLongitude());
// coloca os dados do taxi mais proximo e da distancia nas
// variaveis abaixo
if ((menorDistancia > distancia) && ("livre".equals(listaTaxi.get(i).getStatus()))){
menorDistancia = distancia;
proximoTaxi = listaTaxi.get(i);
}
//aqui entra funcao que aguarda o taxista aceitar a corrida e em caso
//de recusa ou timeout procura um novo taxi
//importante, fazer esta função
}
// faz arredondamento da distancia para duas casas decimais
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMinimumFractionDigits(1);
setMenorDistanciaStr(decimalFormat.format(menorDistancia));
//salva ou atualiza o cliente da corrida
mensagem = dao.salva(cliente);
//muda o status do taxi q aceitou para ocupado
proximoTaxi.setStatus("ocupado");
//insere cliente e taxi na corrida
//ainda falta inserir taxista e usuario na corrida para log e relatorio
//importante !!!!
corrida.setCliente(cliente);
corrida.setTaxi(proximoTaxi);
corrida.setObservacao(corridaObservacao);
//tambem deve deixar a corrida como ativa
corrida.setSituacao("ativa");
//salva a nova corrida
mensagem = dao.salva(corrida);
//mensagem de retorno confirmando a nova corrida
mensagem = " O Taxi mais proximo é o RT " + corrida.getTaxi().getRt()
+ " a " + menorDistanciaStr + " KM" + " para o cliente "+ corrida.getCliente().getNome();
}
//se a função for cancelar corrida
if ("cancelarCorrida".equals(funcao))
{
//carrega todos os dados da corrida selecionada pelo id
corrida = (Corrida) dao.getCorridaById(corrida.getId());
//altera o status da corrida para cancelada
corrida.setSituacao("cancelada");
corrida.getTaxi().setStatus("livre");
//faz update na corrida
mensagem = dao.salva(corrida);
}
//ao selecionar um cliente na combobox, pegar todos os dados no banco
if ("clienteSelecionado".equals(funcao))
{
//carrega as informações do cliente selecionado no combobox pelo nome
cliente = (Cliente) dao.getClienteByNome(cliente);
}
//o codigo abaixo roda independentemente do comando que vier do jsp
//gera uma lista com todos os clientes
listaCliente = dao.listarCliente(cliente);
//gera uma lista com as corridas ativas
listaCorrida = dao.getCorridasAtivas();
return "goGeraCorrida";
}
//ggas
}
Muito obrigado a todos que dedicarem seu tempo a me auxiliar nessa …