internal static void MarcarItemFilaTerminado(OracleConnection conn, int id, bool sucesso, string resultado) { var schema = CarUtils.GetEsquemaInstitucional(); try { using ( var cmd = new OracleCommand( "UPDATE " + schema + ".TAB_SCHEDULER_FILA SET data_conclusao = CURRENT_TIMESTAMP, sucesso = :sucesso, resultado = :resultado WHERE id=:id", conn)) { cmd.Parameters.Add(new OracleParameter("sucesso", ((sucesso) ? "verdadeiro" : "falso"))); cmd.Parameters.Add(new OracleParameter("resultado", resultado)); cmd.Parameters.Add(new OracleParameter("id", id)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } }
internal static string PegarResultadoItemFilaPorRequisitante(OracleConnection conn, int id, string tipo) { var schema = CarUtils.GetEsquemaInstitucional(); var item = new ItemFila(); try { using ( var cmd = new OracleCommand( "SELECT * FROM " + schema + ".TAB_SCHEDULER_FILA WHERE requisitante = :id and tipo = :tipo", conn)) { cmd.Parameters.Add(new OracleParameter("id", id)); cmd.Parameters.Add(new OracleParameter("tipo", tipo)); using (var dr = cmd.ExecuteReader()) { if (dr.Read()) { return(Convert.ToString(dr["resultado"])); } } } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } return(string.Empty); }
internal static void MarcarItemFilaTerminado(OracleConnection conn, int id, bool sucesso, String resultado) { var schema = CarUtils.GetEsquemaInstitucional(); try { using ( var cmd = new OracleCommand( "UPDATE " + schema + ".TAB_SCHEDULER_FILA SET data_conclusao = CURRENT_TIMESTAMP, sucesso = :sucesso, resultado = :resultado WHERE id=:id", conn)) { cmd.Parameters.Add(new OracleParameter("sucesso", ((sucesso) ? "verdadeiro" : "falso"))); cmd.Parameters.Add(new OracleParameter("resultado", (String.IsNullOrWhiteSpace(resultado) || resultado.Length < 4000) ? resultado : resultado.Substring(0, 4000))); cmd.Parameters.Add(new OracleParameter("id", id)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("MarcarItemFilaTerminado <> -- <> RESULTADO ::: " + resultado + " <<>> Erro ao conectar ao Banco de dados:" + exception.Message, exception); throw new System.ArgumentException("Erro de conexão com o SICAR, será feita uma nova tentativa ;", "resultado"); } }
internal static void AdicionarItemFila(OracleConnection conn, string tipo, int requisitante, string requisicao, int empreendimento) { var schema = CarUtils.GetEsquemaInstitucional(); try { using ( var cmd = new OracleCommand( "INSERT INTO " + schema + ".TAB_SCHEDULER_FILA (id, tipo, requisitante, requisicao, empreendimento) values (" + schema + ".SEQ_TAB_SCHEDULER_FILA.nextval, :tipo, :requisitante, :requisicao, :empreendimento)", conn)) { cmd.Parameters.Add(new OracleParameter("tipo", tipo)); cmd.Parameters.Add(new OracleParameter("requisitante", requisitante)); cmd.Parameters.Add(new OracleParameter("requisicao", requisicao)); cmd.Parameters.Add(new OracleParameter("empreendimento", empreendimento)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } }
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); } } }
public Origem() { tipo = Origem.TipoEstadual; status = Origem.StatusInscrito; var agora = DateTime.Now; dataProtocolo = agora; codigoProtocolo = CarUtils.GerarCodigoProtocolo(agora); }
internal static void ResetarFila() { using (var conn = new OracleConnection(CarUtils.GetBancoInstitucional())) { conn.Open(); var schema = CarUtils.GetEsquemaInstitucional(); using (var cmd = new OracleCommand("UPDATE " + schema + ".TAB_SCHEDULER_FILA SET data_criacao = null WHERE data_conclusao is null", conn)) { cmd.ExecuteNonQuery(); } } }
public static int InserirControleSICAR(OracleConnection conn, ItemFila itemFila, string arquivoCar) { var schema = CarUtils.GetEsquemaInstitucional(); var requisicao = JsonConvert.DeserializeObject <RequisicaoJobCar>(itemFila.Requisicao); var tid = Blocos.Data.GerenciadorTransacao.ObterIDAtual(); var sqlBuilder = new StringBuilder(); sqlBuilder.Append("INSERT INTO " + schema + ".TAB_CONTROLE_SICAR "); sqlBuilder.Append("(id,tid,empreendimento,empreendimento_tid,solicitacao_car,solicitacao_car_tid,situacao_envio,"); sqlBuilder.Append("data_gerado,arquivo,solicitacao_car_esquema)"); sqlBuilder.Append(" VALUES "); sqlBuilder.Append("(" + schema + ".SEQ_TAB_CONTROLE_SICAR.nextval,:tid,:empreendimento,:empreendimento_tid,"); sqlBuilder.Append( ":solicitacao_car,:solicitacao_car_tid,:situacao_envio,CURRENT_TIMESTAMP,:arquivo,:solicitacao_car_esquema) RETURNING id INTO :novo_id"); var novoId = 0; try { using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { cmd.Parameters.Add(new OracleParameter("tid", tid)); cmd.Parameters.Add(new OracleParameter("empreendimento", requisicao.empreendimento)); cmd.Parameters.Add(new OracleParameter("empreendimento_tid", requisicao.empreendimento_tid)); cmd.Parameters.Add(new OracleParameter("solicitacao_car", requisicao.solicitacao_car)); cmd.Parameters.Add(new OracleParameter("solicitacao_car_tid", requisicao.solicitacao_car_tid)); cmd.Parameters.Add(new OracleParameter("situacao_envio", SITUACAO_ENVIO_ARQUIVO_GERADO)); cmd.Parameters.Add(new OracleParameter("arquivo", arquivoCar)); cmd.Parameters.Add(new OracleParameter("solicitacao_car_esquema", ((requisicao.origem == RequisicaoJobCar.INSTITUCIONAL ? 1 : 2)))); cmd.Parameters.Add(new OracleParameter("novo_id", OracleDbType.Decimal, ParameterDirection.ReturnValue)); cmd.ExecuteNonQuery(); novoId = Convert.ToInt32(cmd.Parameters["novo_id"].Value.ToString()); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } //Inserir no Histórico InserirHistoricoControleCar(conn, requisicao, tid, null); return(novoId); }
public void Execute(IJobExecutionContext context) { try { Log.Info($"COMECOU O REENVIO - {DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss.fff")}"); using (var conn = new OracleConnection(CarUtils.GetBancoInstitucional())) { conn.Open(); using (var cmd = new OracleCommand(@" UPDATE TAB_CAR_SOLICITACAO CS SET PASSIVO_ENVIADO = NULL WHERE CS.ID IN ( SELECT SOLICITACAO_CAR FROM TAB_CONTROLE_SICAR SI WHERE SI.MENSAGEM_RESPOSTA LIKE '%sending the request%' AND SOLICITACAO_CAR_ESQUEMA = 1 AND SITUACAO_ENVIO = 4 UNION SELECT SOLICITACAO_CAR FROM TAB_CONTROLE_SICAR SI WHERE SI.MENSAGEM_RESPOSTA LIKE '%Unexpected character%' AND SOLICITACAO_CAR_ESQUEMA = 1 AND SITUACAO_ENVIO = 4 UNION SELECT SOLICITACAO_CAR FROM TAB_CONTROLE_SICAR SI WHERE SI.MENSAGEM_RESPOSTA LIKE '%A task was canceled%' AND SOLICITACAO_CAR_ESQUEMA = 1 AND SITUACAO_ENVIO = 4 )" , conn)) { cmd.ExecuteNonQuery(); cmd.CommandText = @" UPDATE IDAFCREDENCIADO.TAB_CAR_SOLICITACAO CS SET PASSIVO_ENVIADO = NULL WHERE CS.ID IN ( SELECT SOLICITACAO_CAR FROM TAB_CONTROLE_SICAR SI WHERE SI.MENSAGEM_RESPOSTA LIKE '%sending the request%' AND SOLICITACAO_CAR_ESQUEMA = 1 AND SITUACAO_ENVIO = 4 UNION SELECT SOLICITACAO_CAR FROM TAB_CONTROLE_SICAR SI WHERE SI.MENSAGEM_RESPOSTA LIKE '%Unexpected character%' AND SOLICITACAO_CAR_ESQUEMA = 1 AND SITUACAO_ENVIO = 4 UNION SELECT SOLICITACAO_CAR FROM TAB_CONTROLE_SICAR SI WHERE SI.MENSAGEM_RESPOSTA LIKE '%A task was canceled%' AND SOLICITACAO_CAR_ESQUEMA = 1 AND SITUACAO_ENVIO = 4 ) " ; cmd.ExecuteNonQuery(); } conn.Close(); } Log.Info($"TERMINOU O REENVIO - {DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss.fff")}"); } catch (Exception ex) { Log.Error($@"CATCH REENVIO: \n Mensagem: {ex.Message} \n ___ex____: {ex} " ); } }
private static void InserirHistoricoControleCar(OracleConnection conn, RequisicaoJobCar requisicao, string tid) { var schema = CarUtils.GetEsquemaInstitucional(); var item = ObterItemControleCar(conn, requisicao); var sqlBuilder = new StringBuilder(); sqlBuilder.Append("INSERT INTO " + schema + ".HST_CONTROLE_SICAR "); sqlBuilder.Append("(id,tid,empreendimento,empreendimento_tid,solicitacao_car,solicitacao_car_tid,situacao_envio,"); sqlBuilder.Append("chave_protocolo,data_gerado,data_envio,arquivo,pendencias,codigo_imovel,"); sqlBuilder.Append("url_recibo,status_sicar,condicao,solicitacao_car_esquema,data_execucao)"); sqlBuilder.Append(" values "); sqlBuilder.Append("(" + schema + ".SEQ_HST_CONTROLE_SICAR.nextval,:tid,:empreendimento,:empreendimento_tid,"); sqlBuilder.Append(":solicitacao_car,:solicitacao_car_tid,:situacao_envio,:chave_protocolo,"); sqlBuilder.Append(":data_gerado,:data_envio,:arquivo,:pendencias,:codigo_imovel,"); sqlBuilder.Append(":url_recibo,:status_sicar,:condicao,:solicitacao_car_esquema,CURRENT_TIMESTAMP)"); try { using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { cmd.Parameters.Add(new OracleParameter("tid", tid)); cmd.Parameters.Add(new OracleParameter("empreendimento", item.empreendimento)); cmd.Parameters.Add(new OracleParameter("empreendimento_tid", item.empreendimento_tid)); cmd.Parameters.Add(new OracleParameter("solicitacao_car", item.solicitacao_car)); cmd.Parameters.Add(new OracleParameter("solicitacao_car_tid", tid)); //item.solicitacao_car_tid)); cmd.Parameters.Add(new OracleParameter("situacao_envio", item.situacao_envio)); cmd.Parameters.Add(new OracleParameter("chave_protocolo", item.chave_protocolo)); cmd.Parameters.Add(new OracleParameter("data_gerado", item.data_gerado)); cmd.Parameters.Add(new OracleParameter("data_envio", item.data_envio)); cmd.Parameters.Add(new OracleParameter("arquivo", item.arquivo)); cmd.Parameters.Add(new OracleParameter("pendencias", item.pendencias)); cmd.Parameters.Add(new OracleParameter("codigo_imovel", item.codigo_imovel)); cmd.Parameters.Add(new OracleParameter("url_recibo", item.url_recibo)); cmd.Parameters.Add(new OracleParameter("status_sicar", item.status_sicar)); cmd.Parameters.Add(new OracleParameter("condicao", item.condicao)); cmd.Parameters.Add(new OracleParameter("solicitacao_car_esquema", item.solicitacao_car_esquema)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } }
internal static ItemFila PegarProximoItemFila(OracleConnection conn, string tipo) { lock (lockObject) { var schema = CarUtils.GetEsquemaInstitucional(); ItemFila item = null; try { using ( var cmd = new OracleCommand(@"update " + schema + @".tab_scheduler_fila set data_criacao = current_timestamp where id = (select min(id) from " + schema + @".tab_scheduler_fila where tipo = :tipo and data_criacao is null) returning id, requisitante, requisicao, empreendimento into :id, :requisitante, :requisicao, :empreendimento" , conn)) { cmd.Parameters.Add(new OracleParameter("tipo", tipo)); OracleParameter paramId = cmd.Parameters.Add(new OracleParameter("id", OracleDbType.Int32, System.Data.ParameterDirection.Output)); OracleParameter paramRequisitante = cmd.Parameters.Add(new OracleParameter("requisitante", OracleDbType.Int32, System.Data.ParameterDirection.Output)); OracleParameter paramRequisicao = cmd.Parameters.Add(new OracleParameter("requisicao", OracleDbType.Varchar2, 500) { Direction = System.Data.ParameterDirection.Output }); OracleParameter paramEmpreendimento = cmd.Parameters.Add(new OracleParameter("empreendimento", OracleDbType.Int32, System.Data.ParameterDirection.Output)); if (cmd.ExecuteNonQuery() > 0) { item = new ItemFila(); item.Id = Convert.ToInt32(paramId.Value.ToString()); item.Requisitante = Convert.ToInt32(paramRequisitante.Value.ToString()); item.Empreendimento = Convert.ToInt32(paramEmpreendimento.Value.ToString()); item.Requisicao = paramRequisicao.Value.ToString(); } } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } return(item); } }
public void Execute(IJobExecutionContext context) { //logging var jobKey = context.JobDetail.Key; Log.InfoFormat("BEGIN {0} executing at {1}", jobKey, DateTime.Now.ToString("r")); using (var conn = new OracleConnection(CarUtils.GetBancoInstitucional())) { conn.Open(); //Veja se var nextItem = LocalDB.PegarProximoItemFila(conn, "consultar-dua"); while (nextItem != null) { //Update item as Started LocalDB.MarcarItemFilaIniciado(conn, nextItem.Id); try { //Buscar senha do certificado A3 var senha = BuscarSenha(conn); //Consultar DUA var resultado = ConsultarDUA(nextItem.Requisicao, senha); //Marcar como processado LocalDB.MarcarItemFilaTerminado(conn, nextItem.Id, true, resultado); } catch (Exception ex) { //Marcar como processado registrando a mensagem de erro LocalDB.MarcarItemFilaTerminado(conn, nextItem.Id, false, ex.Message); } nextItem = LocalDB.PegarProximoItemFila(conn, "consultar-dua"); } } Log.InfoFormat("ENDING {0} executing at {1}", jobKey, DateTime.Now.ToString("r")); }
public void Execute(IJobExecutionContext context) { //INSTITUCIONAL int origem = 1; using (var connInst = new OracleConnection(CarUtils.GetBancoInstitucional())) { connInst.Open(); ChamadaEnviarCarInterno(origem, connInst); connInst.Close(); } //CREDENCIADO origem = 2; using (var connCre = new OracleConnection(CarUtils.GetBancoCredenciado())) { connCre.Open(); ChamadaEnviarCarInterno(origem, connCre); connCre.Close(); } }
internal static void MarcarItemFilaIniciado(OracleConnection conn, int id) { var schema = CarUtils.GetEsquemaInstitucional(); try { using ( var cmd = new OracleCommand( "UPDATE " + schema + ".TAB_SCHEDULER_FILA SET data_criacao = CURRENT_TIMESTAMP WHERE id=:id", conn)) { cmd.Parameters.Add(new OracleParameter("id", id)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } }
internal static ItemFila PegarItemFilaPorId(OracleConnection conn, int id) { var schema = CarUtils.GetEsquemaInstitucional(); var item = new ItemFila(); try { using ( var cmd = new OracleCommand( "SELECT * FROM " + schema + ".TAB_SCHEDULER_FILA WHERE id = :id", conn)) { cmd.Parameters.Add(new OracleParameter("id", id)); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { item = new ItemFila { Id = Convert.ToInt32(dr["id"]), Requisitante = Convert.ToInt32(dr["requisitante"]), Empreendimento = Convert.ToInt32(dr["empreendimento"]), Requisicao = Convert.ToString(dr["requisicao"]) }; } } } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } return(item); }
private static void InserirHistoricoControleCar(OracleConnection conn, RequisicaoJobCar requisicao, string tid, MensagemRetorno resultado) { var schema = CarUtils.GetEsquemaInstitucional(); var item = ObterItemControleCar(conn, requisicao); var sqlBuilder = new StringBuilder(); sqlBuilder.Append("INSERT INTO " + schema + ".HST_CONTROLE_SICAR "); sqlBuilder.Append("(id,tid,empreendimento,empreendimento_tid,solicitacao_car,solicitacao_car_tid,situacao_envio,"); sqlBuilder.Append("chave_protocolo,data_gerado,data_envio,arquivo,pendencias,codigo_imovel,"); sqlBuilder.Append("url_recibo,status_sicar,condicao,solicitacao_car_esquema,data_execucao,"); sqlBuilder.Append("CODIGO_RESPOSTA, CODIGO_IMOVEL_MASC, MENSAGEM_RESPOSTA)"); sqlBuilder.Append(" values "); sqlBuilder.Append("(" + schema + ".SEQ_HST_CONTROLE_SICAR.nextval,:tid,:empreendimento,:empreendimento_tid,"); sqlBuilder.Append(":solicitacao_car,:solicitacao_car_tid,:situacao_envio,:chave_protocolo,"); sqlBuilder.Append(":data_gerado,:data_envio,:arquivo,:pendencias,:codigo_imovel,"); sqlBuilder.Append(":url_recibo,:status_sicar,:condicao,:solicitacao_car_esquema,CURRENT_TIMESTAMP, :CODIGO_RESPOSTA, :CODIGO_IMOVEL_MASC, :MENSAGEM_RESPOSTA)"); var mensagensDeResposta = String.Empty; if (resultado.mensagensResposta == null) { mensagensDeResposta = "Erro de conexão com o SICAR, será feita uma nova tentativa ; "; //situacaoEnvio = SITUACAO_ENVIO_ARQUIVO_REPROVADO; } else { foreach (var men in resultado.mensagensResposta) { mensagensDeResposta = String.Concat(mensagensDeResposta, men); mensagensDeResposta = String.Concat(mensagensDeResposta, " ; "); } } try { if (item == null) { throw new Exception("ITEM NULO !!!"); } using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { cmd.Parameters.Add(new OracleParameter("tid", tid)); cmd.Parameters.Add(new OracleParameter("empreendimento", item.empreendimento)); cmd.Parameters.Add(new OracleParameter("empreendimento_tid", item.empreendimento_tid)); cmd.Parameters.Add(new OracleParameter("solicitacao_car", item.solicitacao_car)); cmd.Parameters.Add(new OracleParameter("solicitacao_car_tid", tid)); //item.solicitacao_car_tid)); cmd.Parameters.Add(new OracleParameter("situacao_envio", item.situacao_envio)); cmd.Parameters.Add(new OracleParameter("chave_protocolo", item.chave_protocolo)); cmd.Parameters.Add(new OracleParameter("data_gerado", item.data_gerado)); cmd.Parameters.Add(new OracleParameter("data_envio", item.data_envio)); cmd.Parameters.Add(new OracleParameter("arquivo", item.arquivo)); cmd.Parameters.Add(new OracleParameter("pendencias", item.pendencias)); cmd.Parameters.Add(new OracleParameter("codigo_imovel", item.codigo_imovel)); cmd.Parameters.Add(new OracleParameter("url_recibo", item.url_recibo)); cmd.Parameters.Add(new OracleParameter("status_sicar", item.status_sicar)); cmd.Parameters.Add(new OracleParameter("condicao", item.condicao)); cmd.Parameters.Add(new OracleParameter("solicitacao_car_esquema", item.solicitacao_car_esquema)); cmd.Parameters.Add(new OracleParameter("codigo_resposta", resultado.codigoResposta)); cmd.Parameters.Add(new OracleParameter("codigo_imovel_masc", resultado.codigoImovelComMascara)); cmd.Parameters.Add(new OracleParameter("mensagem_resposta", mensagensDeResposta)); //cmd.Parameters.Add(new OracleParameter("mensagem_resposta", resultado.mensagensResposta)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Requisicao: " + (requisicao != null ? JsonConvert.SerializeObject(requisicao) : " IS NULL"), exception); } }
public static int AtualizarControleSICarRetificacao(OracleConnection conn, MensagemRetorno resultado, ItemControleCar item, int situacaoEnvio, int solicitacaoRetificadora, string tid, string arquivoCar = "", string tipo = "") { var schema = CarUtils.GetEsquemaInstitucional(); var pendencias = " Solicitação retificada pela solicitação : " + solicitacaoRetificadora; var condicao = "Aguardando Análise"; var mensagensDeResposta = pendencias; var sqlBuilder = new StringBuilder(); sqlBuilder.Append("UPDATE " + schema + ".TAB_CONTROLE_SICAR SET "); //sqlBuilder.Append("tid = :tid,"); sqlBuilder.Append("situacao_envio = :situacao_envio,"); sqlBuilder.Append("chave_protocolo = :chave_protocolo,"); if (tipo.Equals("gerar-car")) { sqlBuilder.Append("data_gerado = CURRENT_TIMESTAMP,"); } //if (situacaoEnvio == SITUACAO_ENVIO_ARQUIVO_ENTREGUE) else { sqlBuilder.Append("data_envio = CURRENT_TIMESTAMP,"); } if (arquivoCar != "") { sqlBuilder.Append("arquivo = '" + arquivoCar + "',"); } sqlBuilder.Append("pendencias = :pendencias,"); if (!String.IsNullOrWhiteSpace(resultado.codigoImovel)) { sqlBuilder.Append("codigo_imovel = :codigo_imovel,"); } if (!String.IsNullOrWhiteSpace(resultado.urlReciboInscricao)) { sqlBuilder.Append("url_recibo = :url_recibo,"); } sqlBuilder.Append("status_sicar = :status_sicar,"); sqlBuilder.Append("condicao = :condicao,"); sqlBuilder.Append("CODIGO_RESPOSTA = :codigo_resposta, "); sqlBuilder.Append("CODIGO_IMOVEL_MASC = :codigo_imovel_masc, "); sqlBuilder.Append("MENSAGEM_RESPOSTA = :mensagem_resposta "); sqlBuilder.Append(" WHERE solicitacao_car = :id"); try { using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { //cmd.Parameters.Add(new OracleParameter("tid", item.solicitacao_car_anterior_tid)); cmd.Parameters.Add(new OracleParameter("situacao_envio", SITUACAO_ENVIO_ARQUIVO_RETIFICADO)); cmd.Parameters.Add(new OracleParameter("chave_protocolo", resultado.protocoloImovel)); cmd.Parameters.Add(new OracleParameter("pendencias", pendencias)); if (!String.IsNullOrWhiteSpace(resultado.codigoImovel)) { cmd.Parameters.Add(new OracleParameter("codigo_imovel", resultado.codigoImovel)); } if (!String.IsNullOrWhiteSpace(resultado.urlReciboInscricao)) { cmd.Parameters.Add(new OracleParameter("url_recibo", resultado.urlReciboInscricao)); } cmd.Parameters.Add(new OracleParameter("status_sicar", "IN")); cmd.Parameters.Add(new OracleParameter("condicao", condicao)); cmd.Parameters.Add(new OracleParameter("codigo_resposta", resultado.codigoResposta)); cmd.Parameters.Add(new OracleParameter("codigo_imovel_masc", resultado.codigoImovelComMascara)); cmd.Parameters.Add(new OracleParameter("mensagem_resposta", mensagensDeResposta)); //cmd.Parameters.Add(new OracleParameter("mensagem_resposta", resultado.mensagensResposta)); cmd.Parameters.Add(new OracleParameter("solicitacao_car", item.solicitacao_car_anterior)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } RequisicaoJobCar requisicao = new RequisicaoJobCar(); requisicao.empreendimento = item.empreendimento; requisicao.empreendimento_tid = item.empreendimento_tid; requisicao.solicitacao_car = item.solicitacao_car_anterior; requisicao.solicitacao_car_tid = item.solicitacao_car_anterior_tid; //Inserir no Histórico InserirHistoricoControleCar(conn, requisicao, tid, resultado); if (item == null) { return(0); } return(item.id); }
public static int AtualizarControleSICAR(OracleConnection conn, MensagemRetorno resultado, RequisicaoJobCar requisicao, int situacaoEnvio, string tid, string arquivoCar = "") { var schema = CarUtils.GetEsquemaInstitucional(); var item = ObterItemControleCar(conn, requisicao); var pendencias = ""; var condicao = "Aguardando Análise"; if (resultado == null) { resultado = new MensagemRetorno { mensagensResposta = new List <string>() }; } else { if (resultado.codigoResposta != MensagemRetorno.CodigoRespostaSucesso) { if (resultado.mensagensResposta.Count > 0) { pendencias = resultado.mensagensResposta.Aggregate("", (current, resposta) => current + (resposta + ";")); situacaoEnvio = SITUACAO_ENVIO_ARQUIVO_REPROVADO; } else { situacaoEnvio = SITUACAO_ENVIO_ARQUIVO_ENTREGUE; } //pendencias = pendencias.Replace("O arquivo especificado contém informações inválidas.;", ""); } } var sqlBuilder = new StringBuilder(); sqlBuilder.Append("UPDATE " + schema + ".TAB_CONTROLE_SICAR SET "); sqlBuilder.Append("tid = :tid,"); sqlBuilder.Append("situacao_envio = :situacao_envio,"); sqlBuilder.Append("chave_protocolo = :chave_protocolo,"); if (situacaoEnvio == SITUACAO_ENVIO_ARQUIVO_ENTREGUE) { sqlBuilder.Append("data_envio = CURRENT_TIMESTAMP,"); } if (arquivoCar != "") { sqlBuilder.Append("arquivo = '" + arquivoCar + "',"); } sqlBuilder.Append("pendencias = :pendencias,"); sqlBuilder.Append("codigo_imovel = :codigo_imovel,"); sqlBuilder.Append("url_recibo = :url_recibo,"); sqlBuilder.Append("status_sicar = :status_sicar,"); sqlBuilder.Append("condicao = :condicao"); sqlBuilder.Append(" WHERE id = :id"); try { using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { cmd.Parameters.Add(new OracleParameter("tid", tid)); cmd.Parameters.Add(new OracleParameter("situacao_envio", situacaoEnvio)); cmd.Parameters.Add(new OracleParameter("chave_protocolo", resultado.protocoloImovel)); cmd.Parameters.Add(new OracleParameter("pendencias", pendencias)); cmd.Parameters.Add(new OracleParameter("codigo_imovel", resultado.codigoImovel)); cmd.Parameters.Add(new OracleParameter("url_recibo", resultado.urlReciboInscricao)); cmd.Parameters.Add(new OracleParameter("status_sicar", "IN")); cmd.Parameters.Add(new OracleParameter("condicao", condicao)); cmd.Parameters.Add(new OracleParameter("id", item.id)); cmd.ExecuteNonQuery(); } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } //Inserir no Histórico InserirHistoricoControleCar(conn, requisicao, tid); return(item.id); }
/// <summary> /// Called by the <see cref="T:Quartz.IScheduler" /> when a <see cref="T:Quartz.ITrigger" /> /// fires that is associated with the <see cref="T:Quartz.IJob" />. /// </summary> /// <param name="context">The execution context.</param> /// <remarks> /// The implementation may wish to set a result object on the /// JobExecutionContext before this method exits. The result itself /// is meaningless to Quartz, but may be informative to /// <see cref="T:Quartz.IJobListener" />s or /// <see cref="T:Quartz.ITriggerListener" />s that are watching the job's /// execution. /// </remarks> public async void Execute(IJobExecutionContext context) { //logging var jobKey = context.JobDetail.Key; Log.InfoFormat("BEGIN {0} executing at {1}", jobKey, DateTime.Now.ToString("r")); using (var conn = new OracleConnection(CarUtils.GetBancoInstitucional())) { conn.Open(); string tid = string.Empty; var pathArquivoTemporario = new ArquivoManager().BuscarDiretorioArquivoTemporario(conn); if (!pathArquivoTemporario.EndsWith("\\")) { pathArquivoTemporario += "\\"; } pathArquivoTemporario += "SICAR\\"; //Veja se var nextItem = LocalDB.PegarProximoItemFila(conn, "enviar-car"); while (nextItem != null) { //Update item as Started //LocalDB.MarcarItemFilaIniciado(conn, nextItem.Id); var item = LocalDB.PegarItemFilaPorId(conn, nextItem.Requisitante); var requisicao = JsonConvert.DeserializeObject <RequisicaoJobCar>(item.Requisicao); tid = Blocos.Data.GerenciadorTransacao.ObterIDAtual(); string resultado = ""; try { //Atualizar controle de envio do SICAR ControleCarDB.AtualizarControleSICAR(conn, null, requisicao, ControleCarDB.SITUACAO_ENVIO_ENVIANDO, tid); var controleCar = ControleCarDB.ObterItemControleCar(conn, requisicao); var dataCadastroEstadual = ControleCarDB.ObterDataSolicitacao(conn, requisicao.solicitacao_car, requisicao.origem); resultado = await EnviarArquivoCAR(pathArquivoTemporario + nextItem.Requisicao, dataCadastroEstadual); var resultadoEnvio = JsonConvert.DeserializeObject <MensagemRetorno>(resultado); if (resultadoEnvio.codigoResposta == MensagemRetorno.CodigoRespostaErro) { resultado = await EnviarArquivoCAR(pathArquivoTemporario + nextItem.Requisicao, dataCadastroEstadual); resultadoEnvio = JsonConvert.DeserializeObject <MensagemRetorno>(resultado); } //Salvar no diretorio de arquivos do SIMLAM Institucional string arquivoFinal; using (var stream = File.Open(pathArquivoTemporario + nextItem.Requisicao, FileMode.Open, FileAccess.Read, FileShare.Read)) { var arquivoManager = new ArquivoManager(); arquivoFinal = arquivoManager.Salvar(nextItem.Requisicao, stream, conn); } if (resultadoEnvio.codigoResposta == MensagemRetorno.CodigoRespostaErro || (resultadoEnvio.codigoResposta == MensagemRetorno.CodigoRespostaInconformidade && resultadoEnvio.mensagensResposta.Any(r => r.Equals("Foi encontrada sobreposição de 100,00% com outro imóvel já inscrito no CAR que possui os mesmos documentos (CPF e/ou CNPJ).", StringComparison.CurrentCultureIgnoreCase)))) { LocalDB.AdicionarItemFila(conn, "revisar-resposta-car", item.Id, nextItem.Requisicao.Substring(0, nextItem.Requisicao.Length - 4), requisicao.empreendimento); } else { //Atualiza a Solicitacao do CAR 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, nextItem.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, nextItem.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); } System.Threading.Thread.Sleep(TimeSpan.FromSeconds(30)); nextItem = LocalDB.PegarProximoItemFila(conn, "enviar-car"); //Apagar arquivo do diretorio temporário //TODO:NÃO VAI //try //{ // File.Delete(pathArquivoTemporario + nextItem.Requisicao); //} //catch (Exception) { /*ignored*/ } } } Log.InfoFormat("ENDING {0} executing at {1}", jobKey, DateTime.Now.ToString("r")); }
public void callProcedures(int origem, OracleConnection conn) { /* * Função que chamaria as procedures para gerar as APP Calculadas e APP escadinha dos passivos, mas foram geradas via script */ var listEmpreendimento = GetEmpreendimento(origem, conn); foreach (int solicitacaoEmp in listEmpreendimento) { try { #region Carga das tabelas APP Caculada e APP Escadinha var qtdModuloFiscal = 0.0; string buildSQL = "SELECT ATP_QTD_MODULO_FISCAL FROM CRT_CAD_AMBIENTAL_RURAL WHERE EMPREENDIMENTO = :empreendimentoID"; using (OracleCommand command = new OracleCommand(buildSQL, conn)) { command.Parameters.Add(new OracleParameter("empreendimentoID", solicitacaoEmp)); using (var reader = command.ExecuteReader()) { while (reader.Read()) { qtdModuloFiscal = Convert.ToDouble(reader["ATP_QTD_MODULO_FISCAL"]); } reader.Close(); } } if (origem == 1) { #region Chamada Procedure using (var connInst = new OracleConnection(CarUtils.GetBancoInstitucionalGeo())) { connInst.Open(); OracleCommand command = connInst.CreateCommand(); OracleTransaction transaction; // Start a local transaction transaction = connInst.BeginTransaction(IsolationLevel.Serializable); // Assign transaction object for a pending local transaction command.Transaction = transaction; command.CommandText = "BEGIN OPERACOESPROCESSAMENTOGEO.CalcularAppClassificadaCAR(:emp); END;"; command.Parameters.Add(new OracleParameter("emp", solicitacaoEmp)); command.ExecuteNonQuery(); transaction.Commit(); connInst.Close(); } using (var connInst = new OracleConnection(CarUtils.GetBancoInstitucionalGeo())) { connInst.Open(); OracleCommand command = connInst.CreateCommand(); OracleTransaction transaction; // Start a local transaction transaction = connInst.BeginTransaction(IsolationLevel.Serializable); // Assign transaction object for a pending local transaction command.Transaction = transaction; command.CommandText = "BEGIN OPERACOESPROCESSAMENTOGEO.CalcularEscadinhaCAR(:emp, :moduloFiscal); END;"; command.Parameters.Add(new OracleParameter("emp", solicitacaoEmp)); command.Parameters.Add(new OracleParameter("moduloFiscal", qtdModuloFiscal)); command.ExecuteNonQuery(); transaction.Commit(); connInst.Close(); } #endregion } else { #region Chamada Procedure using (var connCred = new OracleConnection(CarUtils.GetEsquemaCredenciadoGeo())) { connCred.Open(); OracleCommand command = connCred.CreateCommand(); OracleTransaction transaction; // Start a local transaction transaction = connCred.BeginTransaction(IsolationLevel.Serializable); // Assign transaction object for a pending local transaction command.Transaction = transaction; //connInst.BeginTransaction(); command.CommandText = "BEGIN OPERACOESPROCESSAMENTOGEO.CalcularAppClassificadaCAR(:emp); END;"; //using (OracleCommand command = new OracleCommand(sql, conn)) //{ command.Parameters.Add(new OracleParameter("emp", solicitacaoEmp)); command.ExecuteNonQuery(); transaction.Commit(); //bancoDeDados.Commit(); //} command.Transaction = transaction; //connInst.BeginTransaction(); command.CommandText = "BEGIN OPERACOESPROCESSAMENTOGEO.CalcularEscadinhaCAR(:emp, :moduloFiscal); END;"; //using (OracleCommand command = new OracleCommand(sql, conn)) //{ command.Parameters.Add(new OracleParameter("emp", solicitacaoEmp)); command.Parameters.Add(new OracleParameter("moduloFiscal", qtdModuloFiscal)); command.ExecuteNonQuery(); transaction.Commit(); //} connCred.Close(); } #endregion } #endregion }catch (Exception ex) { string excecao = ex.Message; } } }
public static ItemControleCar ObterItemControleCar(OracleConnection conn, RequisicaoJobCar requisicao) { var schema = CarUtils.GetEsquemaInstitucional(); var item = new ItemControleCar(); var sqlBuilder = new StringBuilder(); sqlBuilder.Append("SELECT T.ID, T.TID, T.EMPREENDIMENTO, T.EMPREENDIMENTO_TID,T.SOLICITACAO_CAR, T.SOLICITACAO_CAR_TID, "); sqlBuilder.Append("T.SITUACAO_ENVIO, T.CHAVE_PROTOCOLO,T.DATA_GERADO,T.DATA_ENVIO,T.PENDENCIAS,T.CODIGO_IMOVEL, "); sqlBuilder.Append("T.URL_RECIBO,T.STATUS_SICAR,T.CONDICAO,T.SOLICITACAO_CAR_ESQUEMA,NVL(T.SOLICITACAO_PASSIVO, 0)SOLICITACAO_PASSIVO, "); sqlBuilder.Append("NVL(T.SOLICITACAO_SITUACAO_APROVADO, 2)SOLICITACAO_SITUACAO_APROVADO FROM " + schema + ".TAB_CONTROLE_SICAR t WHERE "); sqlBuilder.Append("t.empreendimento = :empreendimento /*AND t.empreendimento_tid = :empreendimento_tid */"); sqlBuilder.Append("AND t.solicitacao_car = :solicitacao_car /*AND t.solicitacao_car_tid = :solicitacao_car_tid */"); sqlBuilder.Append("AND rownum = 1 ORDER BY id DESC"); try { if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { Log.Error("ObterItemControleCar: Conexão fechada ou quebrada."); } using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { cmd.Parameters.Add(new OracleParameter("empreendimento", requisicao.empreendimento)); //cmd.Parameters.Add(new OracleParameter("empreendimento_tid", requisicao.empreendimento_tid)); cmd.Parameters.Add(new OracleParameter("solicitacao_car", requisicao.solicitacao_car)); //cmd.Parameters.Add(new OracleParameter("solicitacao_car_tid", requisicao.solicitacao_car_tid)); using (var dr = cmd.ExecuteReader()) { if (!dr.Read()) { if (dr.IsClosed) { Log.Error(String.Concat("ObterItemControleCar: dr is closed. ", " - Estado da conexão: ", conn.State.ToString())); } else if (!dr.HasRows) { Log.Error(String.Concat("ObterItemControleCar: consulta não retornou resultado. empreendimento: ", requisicao.empreendimento, " - solicitacao_car: ", requisicao.solicitacao_car, " - Estado da conexão: ", conn.State.ToString())); } else { Log.Error(String.Concat("ObterItemControleCar: não foi possível ler a consulta. ", " - Estado da conexão: ", conn.State.ToString())); } return(null); } item = new ItemControleCar() { id = dr.GetValue <Int32>("id"), tid = dr.GetValue <string>("tid"), empreendimento = dr.GetValue <Int32>("empreendimento"), empreendimento_tid = dr.GetValue <string>("empreendimento_tid"), solicitacao_car = dr.GetValue <Int32>("solicitacao_car"), solicitacao_car_tid = dr.GetValue <string>("solicitacao_car_tid"), situacao_envio = dr.GetValue <int>("situacao_envio"), chave_protocolo = dr.GetValue <string>("chave_protocolo"), data_gerado = dr.GetValue <DateTime>("data_gerado"), data_envio = dr.GetValue <DateTime>("data_envio"), pendencias = dr.GetValue <string>("pendencias"), codigo_imovel = dr.GetValue <string>("codigo_imovel"), url_recibo = dr.GetValue <string>("url_recibo"), status_sicar = dr.GetValue <string>("status_sicar"), condicao = dr.GetValue <string>("condicao"), solicitacao_car_esquema = dr.GetValue <int>("solicitacao_car_esquema"), solicitacao_passivo = Convert.ToInt32(dr["solicitacao_passivo"]), solicitacao_situacao_aprovado = Convert.ToInt32(dr["solicitacao_situacao_aprovado"]), }; } } } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } return(item); }
public static int AtualizarControleSICAR(OracleConnection conn, MensagemRetorno resultado, RequisicaoJobCar requisicao, int situacaoEnvio, string tid, string arquivoCar = "", string tipo = "", bool catchEnviar = false, string codigoProtocolo = "") { var schema = CarUtils.GetEsquemaInstitucional(); var item = ObterItemControleCar(conn, requisicao); var pendencias = ""; var condicao = "Aguardando Análise"; var mensagensDeResposta = String.Empty; var mensagemErro = ""; if (resultado == null) { resultado = new MensagemRetorno { mensagensResposta = new List <string>() }; } else { if (resultado.mensagensResposta == null) { mensagensDeResposta = "Erro de conexão com o SICAR, será feita uma nova tentativa ; "; situacaoEnvio = SITUACAO_ENVIO_ARQUIVO_REPROVADO; } else { if (resultado.codigoResposta != MensagemRetorno.CodigoRespostaSucesso) { if (resultado.mensagensResposta.Count > 1 || (tipo.Equals("gerar-car") && resultado.mensagensResposta.Count >= 1) || resultado.codigoResposta == 400 || resultado.codigoResposta == 500) { resultado.mensagensResposta = TratandoMensagens(conn, resultado.mensagensResposta); pendencias = resultado.mensagensResposta.Aggregate("", (current, resposta) => current + (resposta + " ; ")); situacaoEnvio = SITUACAO_ENVIO_ARQUIVO_REPROVADO; } else { situacaoEnvio = SITUACAO_ENVIO_ARQUIVO_ENTREGUE; } //pendencias = pendencias.Replace("O arquivo especificado contém informações inválidas.;", ""); } foreach (var men in resultado.mensagensResposta) { mensagensDeResposta = String.Concat(mensagensDeResposta, men); mensagensDeResposta = String.Concat(mensagensDeResposta, " ; "); if (men.Contains("sobreposição") && men.Contains("100")) { mensagemErro = men; } } } } var sqlBuilder = new StringBuilder(); sqlBuilder.Append("UPDATE " + schema + ".TAB_CONTROLE_SICAR SET "); sqlBuilder.Append("tid = :tid,"); sqlBuilder.Append("situacao_envio = :situacao_envio,"); sqlBuilder.Append("chave_protocolo = :chave_protocolo,"); if (tipo.Equals("gerar-car")) { sqlBuilder.Append("data_gerado = CURRENT_TIMESTAMP,"); } //if (situacaoEnvio == SITUACAO_ENVIO_ARQUIVO_ENTREGUE) else { sqlBuilder.Append("data_envio = CURRENT_TIMESTAMP,"); } if (arquivoCar != "") { sqlBuilder.Append("arquivo = '" + arquivoCar + "',"); } sqlBuilder.Append("pendencias = :pendencias,"); if (!String.IsNullOrWhiteSpace(resultado.codigoImovel)) { sqlBuilder.Append("codigo_imovel = :codigo_imovel,"); } if (!String.IsNullOrWhiteSpace(resultado.urlReciboInscricao)) { sqlBuilder.Append("url_recibo = :url_recibo,"); } sqlBuilder.Append("status_sicar = :status_sicar,"); sqlBuilder.Append("condicao = :condicao,"); if (!String.IsNullOrWhiteSpace(codigoProtocolo)) { sqlBuilder.Append("chave_protocolo_enviado = :chave_protocolo_enviado,"); } sqlBuilder.Append("CODIGO_RESPOSTA = :codigo_resposta, "); sqlBuilder.Append("CODIGO_IMOVEL_MASC = :codigo_imovel_masc, "); sqlBuilder.Append("MENSAGEM_RESPOSTA = :mensagem_resposta "); sqlBuilder.Append(" WHERE id = :id"); try { using (var cmd = new OracleCommand(sqlBuilder.ToString(), conn)) { cmd.Parameters.Add(new OracleParameter("tid", tid)); cmd.Parameters.Add(new OracleParameter("situacao_envio", situacaoEnvio)); cmd.Parameters.Add(new OracleParameter("chave_protocolo", resultado.protocoloImovel)); if (catchEnviar) { string pendencia = "Falha na integração, comunique o administrador do sistema"; cmd.Parameters.Add(new OracleParameter("pendencias", pendencia)); } else { cmd.Parameters.Add(new OracleParameter("pendencias", mensagensDeResposta)); } if (!String.IsNullOrWhiteSpace(resultado.codigoImovel)) { cmd.Parameters.Add(new OracleParameter("codigo_imovel", resultado.codigoImovel)); } if (!String.IsNullOrWhiteSpace(resultado.urlReciboInscricao)) { cmd.Parameters.Add(new OracleParameter("url_recibo", resultado.urlReciboInscricao)); } cmd.Parameters.Add(new OracleParameter("status_sicar", "IN")); cmd.Parameters.Add(new OracleParameter("condicao", condicao)); if (!String.IsNullOrWhiteSpace(codigoProtocolo)) { cmd.Parameters.Add(new OracleParameter("chave_protocolo_enviado", codigoProtocolo)); } cmd.Parameters.Add(new OracleParameter("codigo_resposta", resultado.codigoResposta)); cmd.Parameters.Add(new OracleParameter("codigo_imovel_masc", resultado.codigoImovelComMascara)); cmd.Parameters.Add(new OracleParameter("mensagem_resposta", mensagensDeResposta)); cmd.Parameters.Add(new OracleParameter("id", item?.id)); cmd.ExecuteNonQuery(); } //Inserir no Histórico InserirHistoricoControleCar(conn, requisicao, tid, resultado); //if (!String.IsNullOrWhiteSpace(mensagemErro) && item != null) // VerificarListaCodigoImovel(conn, schema, mensagemErro, item.solicitacao_car, item.empreendimento, requisicao.origem, requisicao, tid); } catch (Exception exception) { Log.Error("Erro ao conectar ao Banco de dados:" + exception.Message, exception); } if (item == null) { return(0); } return(item.id); }
/// <summary> /// Called by the <see cref="T:Quartz.IScheduler" /> when a <see cref="T:Quartz.ITrigger" /> /// fires that is associated with the <see cref="T:Quartz.IJob" />. /// </summary> /// <param name="context">The execution context.</param> /// <remarks> /// The implementation may wish to set a result object on the /// JobExecutionContext before this method exits. The result itself /// is meaningless to Quartz, but may be informative to /// <see cref="T:Quartz.IJobListener" />s or /// <see cref="T:Quartz.ITriggerListener" />s that are watching the job's /// execution. /// </remarks> public async void Execute(IJobExecutionContext context) { //logging var jobKey = context.JobDetail.Key; Log.InfoFormat("BEGIN {0} executing at {1}", jobKey, DateTime.Now.ToString("r")); using (var conn = new OracleConnection(CarUtils.GetBancoInstitucional())) { conn.Open(); string tid = string.Empty; var pathArquivoTemporario = new ArquivoManager().BuscarDiretorioArquivoTemporario(conn); if (!pathArquivoTemporario.EndsWith("\\")) { pathArquivoTemporario += "\\"; } pathArquivoTemporario += "SICAR\\"; //Veja se var nextItem = LocalDB.PegarProximoItemFila(conn, "enviar-car"); while (nextItem != null) { //Update item as Started LocalDB.MarcarItemFilaIniciado(conn, nextItem.Id); var item = LocalDB.PegarItemFilaPorId(conn, nextItem.Requisitante); if (String.IsNullOrEmpty(item.Requisicao)) { nextItem = LocalDB.PegarProximoItemFila(conn, "enviar-car"); continue; } var requisicao = JsonConvert.DeserializeObject <RequisicaoJobCar>(item.Requisicao); tid = Blocos.Data.GerenciadorTransacao.ObterIDAtual(); if (ControleCarDB.VerificarCarValido(conn, requisicao.solicitacao_car)) { nextItem = LocalDB.PegarProximoItemFila(conn, "enviar-car"); continue; } string resultado = ""; try { //Atualizar controle de envio do SICAR ControleCarDB.AtualizarSolicitacaoCar(conn, requisicao.origem, requisicao.solicitacao_car, ControleCarDB.SITUACAO_ENVIO_AGUARDANDO_ENVIO, tid); ControleCarDB.AtualizarControleSICAR(conn, null, requisicao, ControleCarDB.SITUACAO_ENVIO_ENVIANDO, tid); //var controleCar = ControleCarDB.ObterItemControleCar(conn, requisicao); var dataCadastroEstadual = ControleCarDB.ObterDataSolicitacao(conn, requisicao.solicitacao_car, requisicao.origem); resultado = await EnviarArquivoCAR(pathArquivoTemporario + nextItem.Requisicao, dataCadastroEstadual, requisicao.solicitacao_car); if (String.IsNullOrWhiteSpace(resultado) || resultado.Contains("task was canceled")) { throw new System.ArgumentException("Erro de conexão com o SICAR, será feita uma nova tentativa ;", "resultado"); } var resultadoEnvio = JsonConvert.DeserializeObject <MensagemRetorno>(resultado); //Salvar no diretorio de arquivos do SIMLAM Institucional string arquivoFinal; using (var stream = File.Open(pathArquivoTemporario + nextItem.Requisicao, FileMode.Open, FileAccess.Read, FileShare.Read)) { var arquivoManager = new ArquivoManager(); arquivoFinal = arquivoManager.Salvar(nextItem.Requisicao, stream, conn); } //Retificação ItemControleCar itemSicar = ControleCarDB.ObterItemControleCarRetificacao(conn, requisicao); if (itemSicar != null) { if (itemSicar.solicitacao_car_anterior > 0 && resultadoEnvio.codigoResposta == MensagemRetorno.CodigoRespostaSucesso) { ControleCarDB.AtualizarSolicitacaoCarRetificacao(conn, itemSicar.solicitacao_car_anterior_esquema, itemSicar.solicitacao_car_anterior, itemSicar.solicitacao_car_anterior_tid); ControleCarDB.AtualizarControleSICarRetificacao(conn, resultadoEnvio, itemSicar, ControleCarDB.SITUACAO_ENVIO_ARQUIVO_ENTREGUE, requisicao.solicitacao_car, tid, arquivoFinal); } } //Atualiza a Solicitacao do CAR 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, arquivoCar: arquivoFinal); //} //Marcar como processado LocalDB.MarcarItemFilaTerminado(conn, nextItem.Id, true, resultado); } catch (Exception ex) { //Marcar como processado registrando a mensagem de erro var msg = " +++---+++ RESULTADO :::: " + (resultado ?? "noMessage ++++ 00----000 " + ex.Message + Environment.NewLine + Environment.NewLine); LocalDB.MarcarItemFilaTerminado(conn, nextItem.Id, false, msg); ControleCarDB.AtualizarSolicitacaoCar(conn, requisicao.origem, requisicao.solicitacao_car, ControleCarDB.SITUACAO_SOLICITACAO_PENDENTE, tid); ControleCarDB.AtualizarControleSICAR(conn, new MensagemRetorno() { mensagensResposta = new List <string> { ex.Message, ex.ToString(), resultado ?? "" } }, requisicao, ControleCarDB.SITUACAO_ENVIO_ARQUIVO_REPROVADO, tid, catchEnviar: true); Log.Error("CATCH:" + nextItem.Requisicao + " ===== ++ " + ex.Message, ex); } System.Threading.Thread.Sleep(TimeSpan.FromSeconds(30)); nextItem = LocalDB.PegarProximoItemFila(conn, "enviar-car"); //Apagar arquivo do diretorio temporário //TODO:NÃO VAI //try //{ // File.Delete(pathArquivoTemporario + nextItem.Requisicao); //} //catch (Exception) { /*ignored*/ } } //using (var cmd = new OracleCommand(@"UPDATE IDAF.TAB_SCHEDULER_FILA SET DATA_CRIACAO = null // WHERE resultado like '%Não está na hora especificada para o sincronismo do seu sistema. %'", conn)) //{ // cmd.ExecuteNonQuery(); //} //using (var cmd = new OracleCommand(@"UPDATE IDAF.TAB_SCHEDULER_FILA SET DATA_CRIACAO = null // WHERE resultado like '%Value cannot be null.%'", conn)) //{ // cmd.ExecuteNonQuery(); //} //using (var cmd = new OracleCommand(@"UPDATE IDAF.TAB_SCHEDULER_FILA SET DATA_CRIACAO = null // WHERE resultado like '%TCP%'", conn)) //{ // cmd.ExecuteNonQuery(); //} //using (var cmd = new OracleCommand(@"UPDATE IDAF.TAB_SCHEDULER_FILA SET DATA_CRIACAO = null // WHERE resultado like '%Object reference%' AND TIPO = 'enviar-car'", conn)) //{ // cmd.ExecuteNonQuery(); //} //using (var cmd = new OracleCommand(@"UPDATE IDAF.TAB_SCHEDULER_FILA SET DATA_CRIACAO = null // WHERE resultado like '%Houve um problema%'", conn)) //{ // cmd.ExecuteNonQuery(); //} //using (var cmd = new OracleCommand(@"UPDATE IDAF.TAB_SCHEDULER_FILA SET DATA_CRIACAO = null // WHERE resultado like '%Erro de conexão com o SICAR%'", conn)) //{ // cmd.ExecuteNonQuery(); //} conn.Close(); } Log.InfoFormat("ENDING {0} executing at {1}", jobKey, DateTime.Now.ToString("r")); }