HRM_RabbitMQ_Consumer/JSONParser/Program.cs
2024-12-05 09:14:37 +05:00

132 lines
4.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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\2024_11_20\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<JArray> 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;
}