155 lines
5.4 KiB
C#
155 lines
5.4 KiB
C#
// See https://aka.ms/new-console-template for more information
|
|
using JSONParser;
|
|
using JSONParser.Logger;
|
|
using JSONParser.QDocWrapper;
|
|
using Newtonsoft.Json.Linq;
|
|
using RabbitMQ.Client.Events;
|
|
using RabbitMQ.Client;
|
|
using System.Net.Http.Headers;
|
|
using System.Text;
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
public static class Program
|
|
{
|
|
public async static Task Main(string[] args)
|
|
{
|
|
await LaunchConsumer();
|
|
}
|
|
|
|
private static async Task LaunchConsumer()
|
|
{
|
|
var builder = new ConfigurationBuilder()
|
|
.SetBasePath(Directory.GetCurrentDirectory())
|
|
.AddJsonFile("config.json", optional: false);
|
|
IConfiguration config = builder.Build();
|
|
|
|
Console.OutputEncoding = Encoding.UTF8;
|
|
|
|
var odata = new ODataAccess(config);
|
|
var odataClient = odata.Client;
|
|
|
|
//using ILoggerFactory factory = LoggerFactory.Create(builder => builder.AddConsole());
|
|
//ILogger logger = factory.CreateLogger("HRM_MQ");
|
|
|
|
var logger = new Logger("HRM_MQ", @"C:\log");
|
|
|
|
var wrapper = new QDocWrapper(odataClient, logger);
|
|
|
|
var rabbitFactory = new ConnectionFactory
|
|
{
|
|
HostName = config["RabbitSettings:HostName"],
|
|
UserName = config["RabbitSettings:UserName"],
|
|
Password = config["RabbitSettings:Password"],
|
|
VirtualHost = config["RabbitSettings:VirtualHost"]
|
|
};
|
|
|
|
var connection = await rabbitFactory.CreateConnectionAsync();
|
|
var channel = await connection.CreateChannelAsync();
|
|
|
|
await channel.QueueDeclareAsync(
|
|
queue: config["RabbitSettings:ChannelName"],
|
|
durable: false,
|
|
exclusive: false,
|
|
autoDelete: false,
|
|
arguments: null);
|
|
var consumer = new AsyncEventingBasicConsumer(channel);
|
|
consumer.ReceivedAsync += async (model, ea) =>
|
|
{
|
|
var body = ea.Body.ToArray();
|
|
var message = Encoding.UTF8.GetString(body);
|
|
var jarray = JArray.Parse(message);
|
|
await CreateFromJArray(odataClient, logger, wrapper, jarray);
|
|
//Console.WriteLine($" [x] Received {message}");
|
|
await Task.Yield();
|
|
};
|
|
await channel.BasicConsumeAsync(
|
|
queue: config["RabbitSettings:ChannelName"],
|
|
autoAck: true,
|
|
consumer: consumer);
|
|
|
|
while (true)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
static async Task CreateFromJArray(Simple.OData.Client.ODataClient? odataClient, Logger logger, QDocWrapper wrapper, JArray jarray)
|
|
{
|
|
var structure = new JSONStructure(jarray);
|
|
|
|
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.Error($"{employee.Type} - {employee.Sid} - Failed to create");
|
|
}
|
|
}
|
|
|
|
foreach (var businessUnit in structure.BusinessUnits)
|
|
{
|
|
var ceoId = await businessUnit.CreateNCEO(odataClient);
|
|
if (ceoId > 0)
|
|
{
|
|
logger.Info($"{businessUnit.Type} - {businessUnit.Sid} - CEO_Created");
|
|
}
|
|
else
|
|
{
|
|
logger.Warn($"{businessUnit.Type} - {businessUnit.Sid} - CEO_Skip");
|
|
if (businessUnit.NCEO != null && businessUnit.NCEO.Sid != null)
|
|
{
|
|
logger.Warn($"Сотрудники - {businessUnit.NCEO.Sid} - Skipped_CEO_Sid");
|
|
}
|
|
}
|
|
var accountId = await businessUnit.CreateAccount(odataClient);
|
|
if (accountId > 0)
|
|
{
|
|
logger.Info($"{businessUnit.Type} - {businessUnit.Sid} - Account_Created");
|
|
}
|
|
else
|
|
{
|
|
logger.Warn($"{businessUnit.Type} - {businessUnit.Sid} - Account_Skip");
|
|
if (businessUnit.Account != null && businessUnit.Account.Sid != null)
|
|
{
|
|
logger.Warn($"Сотрудники - {businessUnit.Account.Sid} - Skipped_Account_Sid");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |