Fila de atendimento com peso

intentintent Entry Level
edited June 2013 in Desenvolvimento
Preciso de ajuda com um problema que levantei no blog, segue:

24/06/2013 às 10:36 am
Bom dia!

Estou precisando e um help dos desenvolvedores.
Sou desenvolvedor mas não programo em php, muito menos neste framework que foi desenvolvido o novosga, até tentei fazer a alteração que estou precisando mas não obtive sucesso. Preciso alterar a ordem da fila de espera para que haja um balanceamento entre as prioridades, e o tempo de espera para aqueles que é atendimento normal. Para isso vi que posso alterar a SQL que gera a fila que esta em; modules/sga/atendimento/AtendimentoControle.php, a sql é a seguinte:

[code]
$query = $this->em()->createQuery(”
SELECT
e
FROM
\core\model\Atendimento e
JOIN e.prioridadeSenha p
JOIN e.servicoUnidade su
JOIN su.servico s
WHERE
e.status = :status AND
su.unidade = :unidade AND
s.id IN (:servicos) $cond
ORDER BY
p.peso DESC,
e.numeroSenha ASC
“);
Preciso alterar no order by para o segunte:
ORDER BY
(p.peso+1)*(now()-dataChegada) DESC,
e.numeroSenha ASC
[/code]

p.peso -> peso da senha para atendimento.
now()-> furnção do postgre que pega data hora atual.
datachegada -> quarda dt_cheg, data hora que que chegou. Mas pelo que parece esta com string.

Tentei usar a função strtotime e pesquisar sobre o framework mas ainda não obtive exito!

Preciso alterar isso porque aqui esta dando confusão aqui no atendimento da prefeitura, pois eu tenho muitos idosos que chegam aqui, e tem prioridade. Quem não tem prioridade espera muito tempo na fila e fica irritado querendo bater nas atendentes.

Agradeço a ajuda.

Adriano
24/06/2013 às 1:23 pm
Crie um guichê para atendimento preferencial , configure uma fila chamada preferencial, e coloque esse guichê para atender a fila preferenciais primeiro, essa é a melhor forma de resolver.

Gilmar
24/06/2013 às 3:13 pm
Essa opção não me atende. Eu já tinha conhecimento dela, mas infelizmente não posso utiliza-la.

Comments

  • daminellidaminelli Entry Level
    Sobre o forum o Rogerio me respondeu...


    " O envio de e-mail não estava configurado direito então por enquanto o cadastro de usuário está liberado sem que haja a necessidade de confirmação (tente acessar aí)."

    Abraço,

    Diniz Alexandre Daminelli
  • intent,

    Você pode fazer uma consulta nativa também:

    [code]
    $conn = $this->em()->getConnection();
    $conn->beginTransaction();
    $stmt = $conn->prepare(' o seu SQL com balanceador aqui ');

    // $stmt->bindValue('nome_var', $valor);

    $stmt->execute();
    $atendimentos = $stmt->fetchAll();

    [/code]
  • daminellidaminelli Entry Level
    Ola Intent,

    tenho uma sugestão...

    que tal colocar todos os guiches como "atendimento convencional", deixando apenas um guiche como "atendendo tudo",
    desta forma você direciona os atendimentos prioritarios para este guiche que atende tudo, e quando acabar a fila de prioritarios, o guiche começa a fazer atendimento convencional.

    Estou para colocar o meu sistema em pratica e acho que vou fazer desta forma.
  • intentintent Entry Level
    Agradeço a sugestão, mas esta opção não me atende porque tenho mais de um serviço e não tenho uma funcionaria que ate a todos, para separa-la em um guiche exclusivo.

    [quote="daminelli"]Ola Intent,

    tenho uma sugestão...

    que tal colocar todos os guiches como "atendimento convencional", deixando apenas um guiche como "atendendo tudo",
    desta forma você direciona os atendimentos prioritarios para este guiche que atende tudo, e quando acabar a fila de prioritarios, o guiche começa a fazer atendimento convencional.

    Estou para colocar o meu sistema em pratica e acho que vou fazer desta forma.[/quote]
  • intentintent Entry Level
    Alguém sabe como faço para visualizar a sql que esta sendo gerada pelo doctrine, preciso disso para debugar e achar o porque esta gerando erro.
  • [quote="intent"]Alguém sabe como faço para visualizar a sql que esta sendo gerada pelo doctrine, preciso disso para debugar e achar o porque esta gerando erro.[/quote]

    [code]
    echo $query->getSQL();
    exit();
    [/code]
  • intentintent Entry Level
    Obrigado a todos pela força!
    Depois de muito apanha e passar muita raiva, consegui fazer o que eu queria após algumas pesquisas sobre este Doctrine. Fiz alguns testes aqui e parece que vai funcionar perfeito, do jeito que eu queria.
    Segue alteração caso alguém necessite!:
    [code]
    $t="current_timestamp()-e.dataChegada";
    $query = $this->em()->createQuery("
    SELECT
    e
    FROM
    \core\model\Atendimento e
    JOIN e.prioridadeSenha p
    JOIN e.servicoUnidade su
    JOIN su.servico s
    WHERE
    e.status = :status AND
    su.unidade = :unidade AND
    s.id IN (:servicos) $cond
    ORDER BY
    ((p.peso+1)*(".$t.")) DESC,
    e.numeroSenha ASC
    ");
    [/code]

    A alteração leva balancia a fila levando em conta o tempo que a pessoa esta esperando.
    Caso alguém necessite de uma explicação é só perguntar.

    Obrigado!
This discussion has been closed.