// See https://aka.ms/new-console-template for more information using JSONParser; using JSONParser.Logger; using JSONParser.QDocWrapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; using System.Net.Http.Headers; using System.Text; Console.OutputEncoding = Encoding.UTF8; var odata = new ODataAccess(); var odataClient = odata.Client; //var cnt = await odataClient // .For("IEmployees") // .Expand("Department/BusinessUnit") // .Filter("Department/BusinessUnit/Name eq 'Бакырчикское горнодобывающее предприятие ТОО' and Status eq 'Active'") // .FindEntriesAsync(); //var responsePath = @"C:\ОШС_logs_backup\2025_01_22\2025_01_22_03_03_08_response.json"; //var resp = File.ReadAllText(responsePath); //var arr = JArray.Parse(resp); var logFolderPath = $@"C:\ОШС_logs\{DateTime.Now:yyyy_MM_dd}"; Directory.CreateDirectory(logFolderPath); using (StreamWriter logFileWriter = new($@"{logFolderPath}\{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}_log.log", append: true)) { ILoggerFactory loggerFactory = LoggerFactory.Create(builder => { builder.AddSimpleConsole(options => { options.IncludeScopes = true; options.SingleLine = true; options.TimestampFormat = "HH:mm:ss"; }); builder.AddProvider(new CustomFileLoggerProvider(logFileWriter)); }); ILogger logger = loggerFactory.CreateLogger("ОШС"); var wrapper = new QDocWrapper(odataClient, logger); Console.WriteLine("Получение данных из сервиса 1С"); var jarray = await GetArrayFromService(); //var jarray = arr; File.WriteAllText($@"{logFolderPath}\{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}_response.json", jarray.ToString()); Console.WriteLine("Данные получены"); Console.WriteLine("Парсинг..."); var structure = new JSONStructure(jarray); Console.WriteLine("Данные структурированы. Создание записей в QDoc."); foreach (var businessUnit in structure.BusinessUnits) { var id = await wrapper.CreateBusinessUnit(businessUnit); } foreach (var department in structure.Departments) { var id = await wrapper.CreateDepartment(department); } foreach (var jobTitle in structure.JobTitles) { var id = await wrapper.CreateJobTitle(jobTitle); } foreach (var employee in structure.Employees) { try { var id = await wrapper.CreateEmployee(employee); } catch (Exception) { logger.LogError($"{employee.Type} - {employee.Sid} - Failed to create"); } } foreach (var businessUnit in structure.BusinessUnits) { var ceoId = await businessUnit.CreateNCEO(odataClient); if (ceoId > 0) { logger.LogInformation($"{businessUnit.Type} - {businessUnit.Sid} - CEO_Created"); } else { logger.LogWarning($"{businessUnit.Type} - {businessUnit.Sid} - CEO_Skip"); if (businessUnit.NCEO != null && businessUnit.NCEO.Sid != null) { logger.LogWarning($"Сотрудники - {businessUnit.NCEO.Sid} - Skipped_CEO_Sid"); } } var accountId = await businessUnit.CreateAccount(odataClient); if (accountId > 0) { logger.LogInformation($"{businessUnit.Type} - {businessUnit.Sid} - Account_Created"); } else { logger.LogWarning($"{businessUnit.Type} - {businessUnit.Sid} - Account_Skip"); if (businessUnit.Account != null && businessUnit.Account.Sid != null) { logger.LogWarning($"Сотрудники - {businessUnit.Account.Sid} - Skipped_Account_Sid"); } } } } //var serialized = JsonConvert.SerializeObject(notValid); //Console.ReadLine(); static async Task GetArrayFromService() { JArray array = []; using (var client = new HttpClient()) { var byteArray = Encoding.ASCII.GetBytes("QDoc:Xe3xihuz"); client.Timeout = new TimeSpan(0, 10, 0); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync("http://ast1c/HRMkz31/hs/qdoc/staff"); await client.DeleteAsync("http://ast1c/HRMkz31/hs/qdoc/staff"); string responseBody = await response.Content.ReadAsStringAsync(); array = JArray.Parse(responseBody); } return array; }