예제 #1
0
        private static void Validate(int codigoPrestador)
        {
            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

            Console.WriteLine($"{ sw.Elapsed } Capturando dados...");

            var claims2 = new List<Claim>();

            using (var db = new IntegracaoGestaoPlanosContext())
            {
                var client = new RestClient("http://35.198.48.120:8081/kie-server/services/rest/server/containers/instances/ExpertSystem");
                client.Timeout = 5000;

                ControleDrools controleDrools = new ControleDrools { maxRegras = 3 };

                for (int i = 1; i <= 3; i++)
                {
                    Console.WriteLine($"{ sw.Elapsed } Processando mês { i }...");

                    if (!Directory.Exists(@"C:\Users\ricar\Downloads\transacoes-completo\PRESTADOR " + codigoPrestador + @"\TRANSACOES_PAGAS\MES " + i + @"\"))
                        Directory.CreateDirectory(@"C:\Users\ricar\Downloads\transacoes-completo\PRESTADOR " + codigoPrestador + @"\TRANSACOES_PAGAS\MES " + i + @"\");

                    var dataIni = new DateTime(2018, i, 1);
                    var dataFim = dataIni.AddMonths(1).AddSeconds(-1);

                    List<TransacaoBeneficiario> lst = db.Transacoes.FromSql("[DATABASE].[SP_TRANSACOES_EXP] @Id_Prestador = {0}, @Dt_inicio = {1}, @Dt_fim = {2}",
                    codigoPrestador, dataIni, dataFim).ToList();

                    CancellationTokenSource cts = new CancellationTokenSource();

                    ParallelOptions po = new ParallelOptions
                    {
                        MaxDegreeOfParallelism = 1,
                        CancellationToken = cts.Token
                    };

                    Parallel.ForEach(lst.GroupBy(x => x.NumeroGuia), po, transacao =>
                    {
                        //if (transacao.FirstOrDefault(s => s.CodigoTabela == 22) == null)
                        //    return;

                        if (transacao.Count() == 1 || transacao.Count() > 50)
                            return;

                        //if (transacao.All(s => s.CodigoTabela == 22))
                        //    return;

                        Console.WriteLine($"{ sw.Elapsed } Processando transação { transacao.Key }...");

                        BatchExecution batchExecution = new BatchExecution
                        {
                            inserts = new List<InsertCommand>(),
                            queryDrools = new QueryDrools
                            {
                                name = "queryValidacao",
                                outIdentifier = "validacoes"
                            }
                        };

                        GuiaDrools guiaDrools = new GuiaDrools
                        {
                            id = transacao.Key,
                            CodigoPrestador = codigoPrestador,
                            Movimentos = new List<MovimentoDrools>()
                        };

                        foreach (var servico in transacao)
                        {
                            guiaDrools.Movimentos.Add(new MovimentoDrools
                            {
                                codigoMovimento = servico.CodigoProcedimento,
                                codigoTabela = servico.CodigoTabela.ToString(),
                                dataExecucaoFormatado = servico.DataExecucao,
                                descricao = servico.DescricaoProcedimento,
                                valorUnitario = servico.ValorUnitario
                            });
                        }

                        batchExecution.inserts.Add(new InsertCommand { command = guiaDrools });
                        batchExecution.inserts.Add(new InsertCommand { command = controleDrools });

                        var request = new RestRequest(Method.POST);
                        request.AddHeader("postman-token", "91102cb1-394d-7619-49ab-bf50f217a8ae");
                        request.AddHeader("cache-control", "no-cache");
                        request.AddHeader("x-kie-contenttype", "XSTREAM");
                        request.AddHeader("authorization", "Basic YWRtaW46YWRtaW4=");
                        request.AddHeader("content-type", "application/xml");

                        var body = SerializeToXML(batchExecution, codigoPrestador, transacao.Key, i);
                        request.AddParameter("application/xml", body, ParameterType.RequestBody);


                        IRestResponse response = client.Execute(request);

                        Console.WriteLine($"{ sw.Elapsed } Retorno transação { transacao.Key }: {  response.StatusCode }");

                        if (response.StatusCode != System.Net.HttpStatusCode.OK)
                        {
                            //Console.WriteLine($"{ sw.Elapsed } BODY ERRO: { body }");
                            Console.WriteLine($"{ sw.Elapsed } RETORNO ERRO: { response.StatusCode }");

                            using (TextWriter txtWriter = new StreamWriter(@"C:\Users\ricar\Downloads\transacoes-completo\PRESTADOR " + codigoPrestador + @"\TRANSACOES_PAGAS\MES " + i + @"\" + transacao.Key + "_ERRO.txt"))
                            {
                                txtWriter.Write(response.StatusCode);
                                txtWriter.Close();
                            }
                            Thread.Sleep(5000);
                            //cts.Cancel();                            
                        }

                        //po.CancellationToken.ThrowIfCancellationRequested();

                        if (!response.Content.Contains("com.ops.expertsystem.analise.ResultadoItem"))
                            return;

                        using (TextWriter txtWriter = new StreamWriter(@"C:\Users\ricar\Downloads\transacoes-completo\PRESTADOR " + codigoPrestador + @"\TRANSACOES_PAGAS\MES " + i + @"\" + transacao.Key + "_RESPONSE.xml"))
                        {
                            txtWriter.Write(response.Content);
                            txtWriter.Close();

                            XmlDocument xmlDoc = new XmlDocument();
                            xmlDoc.LoadXml(response.Content);

                            var descriptions = xmlDoc.GetElementsByTagName("descricao");

                            if (descriptions.Count > 0)
                            {
                                var claimYear = transacao.Key.Substring(0, 4);
                                var claimNumber = transacao.Key.Substring(4);

                                List<ClaimItem> claimItems = null;
                                using (SqlConnection connectionBD = new SqlConnection(@"Data Source=""))
                                {
                                    claimItems = connectionBD.Query<ClaimItem>(
                                        "USP_GUIA_INSUMOS_SEL",
                                        new { anoGuia = claimYear, numeroGuia = claimNumber },
                                        commandTimeout: 360,
                                        commandType: CommandType.StoredProcedure).ToList();

                                    //claimItems.RemoveAll(x => x.vl_real_pago == x.vl_cobrado);
                                    claimItems = claimItems.Where(x => x.vl_real_pago != x.vl_cobrado).ToList();

                                    if (claimItems.Count > 0)
                                    {
                                        HashSet<int> itensChecked = new HashSet<int>();

                                        foreach (XmlNode description in descriptions)
                                        {
                                            if (description.InnerText.Contains("a partir"))
                                            {
                                                var startIndex = description.InnerText.IndexOf('{');
                                                var endIndex = description.InnerText.IndexOf('}');

                                                var itensRules = description.InnerText.Substring(startIndex + 1, endIndex - startIndex - 1).Split(new[] { ',' }).ToList();

                                                var intItensRules = itensRules.Select(x => Convert.ToInt32(x)).ToList();

                                                foreach (var item in claimItems)
                                                {
                                                    if (!intItensRules.Contains(item.cd_insumo))
                                                    {
                                                        itensChecked.Add(item.cd_insumo);
                                                    }
                                                }
                                            }
                                        }

                                        if (itensChecked.Count > 0)
                                        {
                                            using (TextWriter txtWriter2 = new StreamWriter(@"C:\Users\ricar\Downloads\transacoes-completo\PRESTADOR " + codigoPrestador + @"\TRANSACOES_PAGAS\MES " + i + @"\glosados.txt", true))
                                            {
                                                txtWriter2.Write(transacao.Key);
                                                txtWriter2.Write(" ");
                                                foreach (var item in itensChecked)
                                                {
                                                    txtWriter2.Write(item + " ");
                                                }
                                                txtWriter2.WriteLine();
                                            }
                                        }                                        
                                    }
                                }
                            }
                        }
예제 #2
0
        static void Main(string[] args)
        {
            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

            Console.WriteLine($"{ sw.Elapsed } Capturando dados...");

            var claims2 = new List <Claim>();

            using (var db = new IntegracaoGestaoPlanosContext())
            {
                for (int i = 1; i <= 12; i++)
                {
                    var dataIni = new DateTime(2017, i, 1);
                    var dataFim = dataIni.AddMonths(1).AddSeconds(-1);

                    List <TransacaoBeneficiario> lst = db.Transacoes.FromSql("[SP_TRANSACOES_EXP] @Id_Prestador = {0}, @Dt_inicio = {1}, @Dt_fim = {2}",
                                                                             2, dataIni, dataFim).ToList();

                    foreach (var transacao in lst.GroupBy(x => x.NumeroGuia))
                    {
                        if (transacao.FirstOrDefault(s => s.CodigoTabela == 22) == null)
                        {
                            continue;
                        }

                        if (transacao.Count() == 1 || transacao.Count() > 50)
                        {
                            continue;
                        }

                        if (transacao.All(s => s.CodigoTabela == 22))
                        {
                            continue;
                        }

                        foreach (var servico in transacao)
                        {
                            Claim claim        = null;
                            var   claimService = new ClaimService {
                                ProcedureCode = servico.CodigoProcedimento, TableCode = servico.CodigoTabela.ToString(), UnitCost = servico.ValorUnitario
                            };

                            if ((claim = claims2.FirstOrDefault(c => c.AuthorizationId == transacao.Key)) != null)
                            {
                                if (!claim.Services.Any(s => s.Key == claimService.Key))
                                {
                                    claim.Services.Add(claimService);
                                }
                            }
                            else
                            {
                                claims2.Add(new Claim
                                {
                                    AuthorizationId = transacao.Key,
                                    Services        = new HashSet <ClaimService> {
                                        claimService
                                    }
                                });
                            }
                        }
                    }

                    var export = new AssociationRuleExport(@"c:\temp\transacoes\Prestador 2\", i, false, null); // TMO
                    export.WriteToTransactionFile(claims2, out int total);

                    Console.WriteLine($"Guias: { claims2.Count }, Serviços: { total }");
                    claims2 = new List <Claim>();
                }
            }

            Console.ReadLine();
        }