277 lines
12 KiB
C#
277 lines
12 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|