Files
parr_api/PARR.Test/Worker.cs

277 lines
12 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.

using Elastic.CommonSchema;
using Microsoft.EntityFrameworkCore;
using PARR.BLL.Services.Interfaces;
using PARR.Constants;
using PARR.DAL.DomainServices;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
using PARR.DAL.Services.Interfaces.Unit;
using PARR.EsppApi;
using PARR.EsppApi.Constants;
using PARR.EsppApi.Models.Query;
using System.Net.WebSockets;
namespace PARR.Test
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IEsppApiService esppApiService;
private readonly IIntervalService intervalService;
private readonly ICalendarService calendarService;
private readonly IServiceProvider serviceProvider;
public Worker(
ILogger<Worker> logger,
IEsppApiService esppApiService,
IIntervalService intervalService,
ICalendarService calendarService,
IServiceProvider serviceProvider
)
{
_logger = logger;
this.esppApiService = esppApiService;
this.intervalService = intervalService;
this.calendarService = calendarService;
this.serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
#region test
using (var scope = serviceProvider.CreateScope())
{
var unitService = scope.ServiceProvider.GetService<IUnitService>();
var unitsQuery = unitService!.Get()
.Include(t => t.UnitValues)
.ThenInclude(t => t.Field)
.Include(t => t.UnitValues)
.ThenInclude(t => t.Value)
.Where(t => /*EF.Functions.Like(t.Name, "%-ГВЦ") &&*/
t.UnitValues.Any(v =>
v.Field!.AihitName == ОДКАТЕГОРИЯ_ЭК" && v.Value!.Value == "система хранения данных (схд)")
&& t.UnitValues.Any(v =>
v.Field!.AihitName == "ТИП_ЭК" && v.Value!.Value == "коммутатор")
//&& t.UnitValues.Any(v =>
// v.Field!.AihitName == "АКТИВЕН" && v.Value!.Value == "1")
&& t.UnitValues.Any(v =>
v.Field!.AihitName == "НЕУНИКАЛЬНЫЙ_ЭК" && v.Value!.Value == "0")
&& !t.UnitValues.Any(v =>
v.Field!.AihitName == "СТАТУС" && v.Value!.Value == "6-Выведен из эксплуатации")
);
var v1 = await unitsQuery
.Include(t => t.ParentUnits)
.ThenInclude(t => t.ParentUnit)
.ThenInclude(t => t.UnitValues)
.ThenInclude(t => t.Field)
.Include(t => t.ParentUnits)
.ThenInclude(t => t.ParentUnit)
.ThenInclude(t => t.UnitValues)
.ThenInclude(t => t.Value)
.ToListAsync();
var res = v1
.Where(t => (t.ParentUnits == null || t.ParentUnits.Count == 0) || !t.ParentUnits!.Any(a => a.ParentUnit != null && a.ParentUnit!.BaseFields!.NotUnique == "1"))
.OrderBy(t => t.Name).ToList();
var service = scope.ServiceProvider.GetService<ITemplateNameGeneratorService>();
foreach (var item in res)
{
var name = await service!.GetTemplateNameAsync(Guid.Parse("926793f7-c6d3-4f08-b5ce-517ce1a1ac37"), item.Id);
}
/*var service = scope.ServiceProvider.GetService<ITemplateNameGeneratorService>();
var ttt = await service.GetTemplateNameAsync(Guid.Parse("ba05948b-b040-48cc-ab77-0accc9c223a0"), Guid.Parse("d4a86f24-6975-4614-98ab-431f26e3eb69"));*/
//var service = scope.ServiceProvider.GetService<ITemplateService>();
//var templates = await service.Get()
// .Include(t => t.ApplicationsInWork)
// .ThenInclude(t=>t.Work)
// //.Select(s => new { s.Id, s.Host, s.HostId, s.JobId, s.UnitId })
// .Where(t => t.JobId == Guid.Parse("ba05948b-b040-48cc-ab77-0accc9c223a0")
// ).ToListAsync();
//var workNames = templates.Select(t=>t.ApplicationsInWork!.Work!.TemplateSuffix).Distinct();
//var jobService = scope.ServiceProvider.GetService<IJobService>();
//var jobs = await jobService!.Get().Where(t => workNames.Any(tt => tt == t.Name)).ToListAsync();
////var hostsName = templates.Select(t => t.Host!.Ek);
////var unitService = scope.ServiceProvider.GetService<IUnitService>();
////var units = await unitService.Get()
//// //.Select(s => new { s.Id, s.Name })
//// .Where(t => hostsName.Any(tt => tt == t.Name))
//// .ToListAsync();
//foreach (var t in templates) {
// var workName = t.ApplicationsInWork!.Work!.TemplateSuffix;
// //var unitId = units.FirstOrDefault(u => u.Name == hostName);
// var jobId = jobs.FirstOrDefault(t => t.Name == workName);
// if (jobId != null)
// t.JobId = jobId.Id;
//}
//await service.CommitAsync();
}
//var tName = "ДВС-ЭИТИ-ПТК-ПАРР__ВРТ-VCD-02-ДВС__ПРОЧЕЕ(РАБОТЫ)";
//var prefix = "ЭИТИ-ПТК-ПАРР";
////templateName.Contains(settingsFromDb.TemplatePrefixWithoutVariable, StringComparison.CurrentCultureIgnoreCase)
//var res = tName.Contains(prefix);
#endregion
#region unit
//using (var scope = serviceProvider.CreateScope())
//{
// var service = scope.ServiceProvider.GetService<IUnitService>();
// var unit = await service.Get().Include(t => t.Parents).Include(t => t.Childs).FirstOrDefaultAsync(t => t.Id == Guid.Parse("0f89e2ec-0e4d-4de6-b990-c55e8308accf"));
// var parent = unit?.Parents;
//}
#endregion
#region Calendar
//var testCalendar = new BLL.Services.Implementations.Test(calendarService);
//testCalendar.Ttt() ;
//using (var scope = serviceProvider.CreateScope())
//{
// var weekendDayService = scope.ServiceProvider.GetService<IWeekendDayService>();
// var workDays = calendarService.GetWorkDatesForPeriod(new DateOnly(2024, 07, 01), TimeSpan.Parse("30:00:00:00"), weekendDayService!.GetWeekends);
//}
//IDistributionPeriodService
//using (var scope = serviceProvider.CreateScope())
//{
// var service = scope.ServiceProvider.GetService<ICalendarService>();
// var weekEndService = scope.ServiceProvider.GetService<IWeekendDayService>();
// var aa = service!.GetWorkDatesForPeriod(new DateOnly(2024, 07, 01), DistributionPeriodTypeEnum.Year, "1", weekEndService!.GetWeekends);
// //var aaa = await service!.Get().ToListAsync();
// //foreach (var aaaItem in aaa)
// //{
// // var bbbb = aaaItem.AddDate;
// // var now = DateTimeOffset.UtcNow;
// // var newwww = now.AddMicroseconds(bbbb.);
// //}
//}
#endregion
////test interval
//await intervalService.IntervalInitAsync(async () =>
//{
// _logger.LogInformation("---Выполняю метод---");
// await Task.Delay(29*1000);
// _logger.LogInformation("===Выполнил метод===");
//}, new TimeSpan(0, 0, 30));
//await TestEsppApi();
//await StopDiscontinuedOrdersInEspp();
}
private async Task TestEsppApi()
{
//var result = await esppApiService.FindOrdersAsync(new FindOrdersQuery { DescriptionContains = "Полное", GenerateDateStart = new DateTime(2023, 10, 10) , GenerateDateEnd = new DateTime(2023, 10, 24) });
var recordId = "НАР24-00009262";
var result = await esppApiService.FindOrderByRecordIdAsync(recordId);
if (result.IsSuccess && (result.Data != null && result.Data.Number.Any()))
{
//var orders = result.Data;
//в работу
var inWorkResult = await esppApiService.SetStatusInWorkAsync(recordId, "Регламентные работы в автоматическом режиме созданы и выполнены;"); //"Решение...\nС новой строки"
if (!inWorkResult.IsSuccess)
{
_logger.LogError(inWorkResult.Exception, $"Не удалось взять в работу наряд {recordId}");
return;
}
var tnk = new AddMtnkQuery { RecordId = recordId, JobOperation = "Не учтена в перечне ТНК", Time = "00:05" };
var addMtnkResult = await esppApiService.AddMTnkAsync(tnk);
if (!addMtnkResult.IsSuccess)
{
_logger.LogError(addMtnkResult.Exception, $"Не удалось списать трудозатраты наряда {recordId}");
return;
}
//выполнить
var resFinish = await esppApiService.SetStatusIsDoneAsync(recordId, "Регламентные работы в автоматическом режиме созданы и выполнены;", EsppOrderClosingCodeEnum.Auto);
if (!resFinish.IsSuccess)
{
_logger.LogError(resFinish.Exception, $"Не удалось обновить статус наряда {recordId}");
return;
}
}
else
{
_logger.LogWarning($"не найден наряд {recordId}");
}
}
private async Task StopDiscontinuedOrdersInEspp()
{
const string ResultMsg = "Сформирован ошибочно";
var searchQuery = new FindOrdersQuery
{
DescriptionContains = "ЭИТИ-ПТК-ПАРР",
StatusIs = "1-Направлен в группу",
GenerateDateStart = new DateTime(2024, 02, 26, 0, 0, 0),
GenerateDateEnd = new DateTime(2024, 02, 29, 0, 0, 0)
};
var result = await esppApiService.FindOrdersAsync(searchQuery);
if (result.IsSuccess && result.Data != null)
{
foreach (var item in result.Data)
{
if (item.StatusEnum == OrderStatusEnum.New)
{
await esppApiService.SetStatusInWorkAsync(item.Number, ResultMsg);
}
var newItem = await esppApiService.FindOrderByRecordIdAsync(item.Number);
if (newItem.IsSuccess && newItem.Data != null && newItem.Data.StatusEnum == OrderStatusEnum.InWork)
{
var tnk = new AddMtnkQuery { RecordId = newItem.Data.Number, JobOperation = "Прочее(наряды)", Time = "00:01" };
await esppApiService.AddMTnkAsync(tnk);
await esppApiService.SetStatusIsDoneAsync(newItem.Data.Number, ResultMsg, EsppOrderClosingCodeEnum.Breake);
}
}
}
}
}
}