public async void Execute(IJobExecutionContext context)
        {
            using (var conn = new OracleConnection(CarUtils.GetBancoInstitucional()))
            {
                string   strResposta = string.Empty;
                ItemFila nextItem    = null;
                var      tid         = Blocos.Data.GerenciadorTransacao.ObterIDAtual();
                try
                {
                    conn.Open();

                    nextItem = LocalDB.PegarProximoItemFila(conn, "revisar-resposta-car");

                    while (nextItem != null)
                    {
                        strResposta = await ConsultarStatusSicar(nextItem.Requisicao);

                        var resposta = JsonConvert.DeserializeObject <ConsultaSicarResposta>(strResposta);

                        var resultado = GerarMensagemRetorno(resposta);

                        if (resultado.codigoResposta == 500)
                        {
                            var strResultadoEnviarCar = LocalDB.PegarResultadoItemFilaPorRequisitante(conn, nextItem.Requisitante, "enviar-car");
                            var resultadoEnviarCar    = JsonConvert.DeserializeObject <MensagemRetorno>(strResultadoEnviarCar);
                            if (resultadoEnviarCar.codigoResposta != 500)
                            {
                                resultado = resultadoEnviarCar;
                            }
                        }

                        AtualizarRegistros(conn, tid, nextItem, resultado);

                        nextItem = LocalDB.PegarProximoItemFila(conn, "revisar-resposta-car");
                    }
                }
                catch (Exception ex)
                {
                    //Marcar como processado registrando a mensagem de erro
                    var msg = ex.Message +
                              Environment.NewLine +
                              Environment.NewLine +
                              strResposta;

                    if (nextItem != null)
                    {
                        var item       = LocalDB.PegarItemFilaPorId(conn, nextItem.Requisitante);
                        var requisicao = JsonConvert.DeserializeObject <RequisicaoJobCar>(item.Requisicao);


                        ControleCarDB.AtualizarSolicitacaoCar(conn, requisicao.origem, requisicao.solicitacao_car, ControleCarDB.SITUACAO_SOLICITACAO_PENDENTE, tid);
                        ControleCarDB.AtualizarControleSICAR(conn, null, requisicao, ControleCarDB.SITUACAO_ENVIO_ARQUIVO_REPROVADO, tid);
                    }

                    LocalDB.MarcarItemFilaTerminado(conn, nextItem.Id, false, msg);
                }
            }
        }
        private void AtualizarRegistros(OracleConnection conn, string tid, ItemFila itemFila, MensagemRetorno resultadoEnvio)
        {
            string           resultado  = string.Empty;
            RequisicaoJobCar requisicao = null;

            try
            {
                //LocalDB.MarcarItemFilaIniciado(conn, itemFila.Id);

                resultado = JsonConvert.SerializeObject(resultadoEnvio);
                var item = LocalDB.PegarItemFilaPorId(conn, itemFila.Requisitante);
                requisicao = JsonConvert.DeserializeObject <RequisicaoJobCar>(item.Requisicao);

                var pathArquivoTemporario = new ArquivoManager().BuscarDiretorioArquivoTemporario(conn);

                if (!pathArquivoTemporario.EndsWith("\\"))
                {
                    pathArquivoTemporario += "\\";
                }
                pathArquivoTemporario += "SICAR\\";

                //Salvar no diretorio de arquivos do SIMLAM Institucional
                string arquivoFinal;
                using (var stream = File.Open(pathArquivoTemporario + itemFila.Requisicao + ".car", FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var arquivoManager = new ArquivoManager();
                    arquivoFinal = arquivoManager.Salvar(itemFila.Requisicao, stream, conn);
                }



                var situacaoSolicitacao = (resultadoEnvio.codigoResposta == MensagemRetorno.CodigoRespostaSucesso) ? ControleCarDB.SITUACAO_SOLICITACAO_VALIDO : ControleCarDB.SITUACAO_SOLICITACAO_PENDENTE;
                ControleCarDB.AtualizarSolicitacaoCar(conn, requisicao, situacaoSolicitacao, tid);

                //Atualizar controle de envio do SICAR
                ControleCarDB.AtualizarControleSICAR(conn, resultadoEnvio, requisicao, ControleCarDB.SITUACAO_ENVIO_ARQUIVO_ENTREGUE, tid, arquivoFinal);

                //Marcar como processado
                LocalDB.MarcarItemFilaTerminado(conn, itemFila.Id, true, resultado);
            }
            catch (Exception ex)
            {
                //Marcar como processado registrando a mensagem de erro
                var msg = ex.Message +
                          Environment.NewLine +
                          Environment.NewLine +
                          resultado;

                LocalDB.MarcarItemFilaTerminado(conn, itemFila.Id, false, msg);
                ControleCarDB.AtualizarSolicitacaoCar(conn, requisicao.origem, requisicao.solicitacao_car, ControleCarDB.SITUACAO_SOLICITACAO_PENDENTE, tid);
                ControleCarDB.AtualizarControleSICAR(conn, null, requisicao, ControleCarDB.SITUACAO_ENVIO_ARQUIVO_REPROVADO, tid);
            }
        }
Exemplo n.º 3
0
        public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario)
        {
            var xml = this.CarregarMensagem <Pollux.MSG0169>(mensagem);

            try
            {
                Validacao(xml);

                Guid itemFilaGuid;
                if (!String.IsNullOrEmpty(xml.CodigoItemFila) && !Guid.TryParse(xml.CodigoItemFila, out itemFilaGuid))
                {
                    throw new ArgumentException("(CRM) Código item fila em formato inválido.");
                }

                Guid contatoGuid;
                if (!Guid.TryParse(xml.CodigoContato, out contatoGuid))
                {
                    throw new ArgumentException("(CRM) Guid do código do contato em formato inválido.");
                }

                Contato contato = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline).BuscaContato(contatoGuid);

                if (contato == null)
                {
                    throw new ArgumentException("(CRM) Contato não encontrado.");
                }

                Fila fila = new Intelbras.CRM2013.Domain.Servicos.FilaServices(this.Organizacao, this.IsOffline).BuscaFilaPorNome(xml.NomeFilaAtendimento);

                if (fila == null)
                {
                    throw new ArgumentException("(CRM) Fila de atendimento não encontrada.");
                }

                Guid referenteA;

                if (xml.Referente == SDKore.Crm.Util.Utility.GetEntityName <Pedido>())
                {
                    Pedido pedido = new Intelbras.CRM2013.Domain.Servicos.PedidoService(this.Organizacao, this.IsOffline).BuscaPedidoEMS(xml.NumeroPedido);

                    if (pedido == null)
                    {
                        throw new ArgumentException("(CRM) Pedido não encontrado.");
                    }

                    referenteA = pedido.ID.Value;
                }
                else
                {
                    if (!Guid.TryParse(xml.CodigoObjeto, out referenteA))
                    {
                        throw new ArgumentException("(CRM) Não foi possível conversa o campo 'CodigoObjeto'.");
                    }
                }


                Email email = new Email(this.Organizacao, this.IsOffline);

                email.De         = new Lookup[1];
                email.De[0]      = new Lookup(contato.ID.Value, "contact");
                email.Para       = new Lookup[1];
                email.Para[0]    = new Lookup(fila.ID.Value, "queue");
                email.Assunto    = xml.Assunto;
                email.Mensagem   = xml.DescricaoEmail;
                email.ReferenteA = new Lookup(referenteA, xml.Referente);
                email.Direcao    = xml.Direcao.Value == 1;

                email.ID = new RepositoryService().Email.Create(email);

                new RepositoryService().Email.AlterarStatus(email.ID.Value, xml.StatusEmail.Value);

                ItemFila itemFila = new ItemFila(this.Organizacao, this.IsOffline);
                itemFila.Fila        = new Lookup(fila.ID.Value, "queue");
                itemFila.Objeto      = new Lookup(email.ID.Value, "email");
                itemFila.RazaoStatus = 1;


                itemFila.ID = new RepositoryService().ItemFila.Create(itemFila);

                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Integração realizada com sucesso!";
                retorno.Add("CodigoItemFila", itemFila.ID.Value.ToString());
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0169R1>(numeroMensagem, retorno));
            }
            catch (Exception e)
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = SDKore.Helper.Error.Handler(e);
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0169R1>(numeroMensagem, retorno));
            }
        }
Exemplo n.º 4
0
 public string Enviar(ItemFila objModel)
 {
     return(String.Empty);
 }