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); } }
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)); } }
public string Enviar(ItemFila objModel) { return(String.Empty); }