132 lines
4.7 KiB
C#
132 lines
4.7 KiB
C#
// 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:\Users\anboevdd\Desktop\other\test_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;
|
||
} |