using System.Text; using System.Net.Http.Headers; using System.Text.Json; using System.Web; using System.Text.RegularExpressions; using System.IO; public class program { #if DEBUG public const String log_faturas = @"X:\Back\Carteira x.x\4Docs\import.txt"; #else public const String log_faturas = "import.txt"; #endif private static HttpClient httpClient = new HttpClient(); public static async Task Main() { for (int i = 1; i < 3; i++) { for (int j = 1; j < 7; j++) { DirectoryInfo pasta = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs\1 - INDIVIDUAIS"); DirectoryInfo pasta_agrupadas = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs\2 - AGRUPADAS"); if (ler_pasta(pasta, agrupada: false).Result) { await ler_pasta(pasta_agrupadas, agrupada: true); } } } //string? fim = "n"; //while (fim != "s") //{ // Console.WriteLine("Escolha a carteira: (todas - 1.1 - 1.2 - 1.3 - ...)\n"); // string? carteira = Console.ReadLine(); // if (carteira != null & carteira!.Length == 3) // { // DirectoryInfo pasta = new DirectoryInfo(@"X:\Middle\Carteira " + carteira[0] + @"\Carteira " + carteira + @"\Faturas fourdocs"); // DirectoryInfo pasta_agrupadas = new DirectoryInfo(@"X:\Middle\Carteira " + carteira[0] + @"\Carteira " + carteira + @"\Faturas fourdocs\Agrupadas"); // if (ler_pasta(pasta, agrupada: false).Result) // { // if (ler_pasta(pasta_agrupadas, agrupada: true).Result) // { // Console.WriteLine("\nDeseja finalizar? (s/n)\n"); // fim = Console.ReadLine(); // Console.WriteLine("\n"); // } // else // { // Console.WriteLine("\nAgrupadas não localizadas\n"); // } // } // else // { // Console.WriteLine("\nCarteira não encontrada\n"); // } // } // else if (carteira == "todas") // { // for (int i = 1; i < 3; i++) // { // for (int j = 1; j < 7; j++) // { // DirectoryInfo pasta = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs"); // DirectoryInfo pasta_agrupadas = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs\Agrupadas"); // if (ler_pasta(pasta, agrupada: false).Result) // { // if (!ler_pasta(pasta_agrupadas, agrupada: true).Result) // { // Console.WriteLine($"\nCarteira {i}.{j} Agrupada - Erro"); // } // } // else // { // Console.WriteLine($"\nCarteira {i}.{j} - Erro"); // } // } // } // Console.WriteLine("\nDeseja finalizar? (s/n)\n"); // fim = Console.ReadLine(); // Console.WriteLine("\n"); // } // else // { // Console.WriteLine("\nCarteira não encontrada\n"); // } //} //await Task.Delay(1); } public static async Task ler_pasta(DirectoryInfo pasta, bool agrupada) { if (pasta.Exists) { string token = "UFY4VWzqcHYcGNd0gkBOMFL9G5ZThV6gXBQIJ79F5HSqITzavz4Fe7iXvAbJLvZJ"; //token = await req_token(); FileInfo[] faturas = pasta.GetFiles("*.pdf"); StreamWriter sw = new StreamWriter(log_faturas, true); foreach (FileInfo fatura in faturas) { if (!IsFileLocked(fatura)) { HttpResponseMessage response = await send_fatura(token, fatura.FullName, agrupada); if ((int)response.StatusCode == 202) { var ID = JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("requestId"); fatura.MoveTo(fatura.Directory?.Parent?.FullName + $@"\3 - PROCESSANDO\{ID} - " + fatura.Name); sw.Write(ID); sw.Write(","); sw.Write(","); sw.WriteLine(fatura.FullName); } } } sw.Close(); return true; } else { return false; } } public static async Task req_token() { var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/oauth2/token"); var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("smart:vnqtvmesikjzyipc")); request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}"); request.Content = new StringContent("grant_type=client_credentials"); request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); var response = await httpClient.SendAsync(request); return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString(); } public static async Task send_fatura(string token, string fatura, bool agrupada) { var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/parse"); request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {token}"); var multipartContent = new MultipartFormDataContent(); multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(fatura)), @"""file""", @$"""{Path.GetFileName(fatura)}"""); multipartContent.ElementAt(0).Headers.Add("Content-Type", "application/pdf"); string newPath = fatura.Substring(0, fatura.Length - 4) + " Finalizado.pdf"; multipartContent.Add(new StringContent($"{{\"callbackUrl\":\"https://api.4docs.cloud/v2/null\",\"pipelineName\":\"energy\",\"multiple\":{agrupada.ToString().ToLower()},\"clientData\":{{\"fatura_PATH\":\"{newPath}\"}}}}"), "json"); request.Content = multipartContent; return await httpClient.SendAsync(request); } public static bool IsFileLocked(FileInfo file) { try { using (FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None)) { stream.Close(); } } catch (IOException) { //the file is unavailable because it is: //still being written to //or being processed by another thread //or does not exist (has already been processed) return true; } //file is not locked return false; } }