feat(dal,api): удалены таблицы которые относились к старому JobAutoControl. Добавлена новая таблица JobAutoControl

This commit is contained in:
Mikhail Trubnikov
2025-12-05 14:07:48 +10:00
parent 8541d7495b
commit 54ccd2e8e3
26 changed files with 8446 additions and 725 deletions

View File

@@ -48,7 +48,7 @@
public List<WorkGroupResponse>? WorkGroups { get; set; } public List<WorkGroupResponse>? WorkGroups { get; set; }
public JobAutoControlBaseResponse? AutoControl { get; set; } //public JobAutoControlBaseResponse? AutoControl { get; set; }
} }

View File

@@ -1,62 +0,0 @@
namespace PARR.API.Contracts.V1.Responses
{
public class JobAutoControlBaseResponse
{
/// <summary>
/// Создавать новые РР (из настроке РР)
/// </summary>
public bool CreateNew { get; set; }
/// <summary>
/// Деактивировать не актуальные согласно ЭК (обратные статусы ЭК)
/// </summary>
public bool Deactivate { get; set; }
/// <summary>
/// Активировать РР после смены ЭК (согласно настройкам статусов ЭК)
/// </summary>
public bool Activate { get; set; }
}
public class JobAutoControlResponse : JobAutoControlBaseResponse
{
public Guid Id { get; set; }
public Guid ApplicationInWorkId { get; set; }
/// <summary>
/// Состояние для активированных РР, шаблоны
/// </summary>
public bool OnTemplateIsActive { get; set; }
/// <summary>
/// Состояние для активированных РР, расписания
/// </summary>
public bool OnScheduleIsActive { get; set; }
/// <summary>
/// Состояние для деактивированных РР, шаблоны
/// </summary>
public bool OffTemplateIsActive { get; set; }
/// <summary>
/// Состояние для деактивированных РР, расписания
/// </summary>
public bool OffScheduleIsActive { get; set; }
/// <summary>
/// Маски ЭК
/// </summary>
public List<JobEkMaskResponse>? EkMasks { get; set; }
/// <summary>
/// Статусы ЭК для которых включена генерация РР и активация
/// </summary>
public List<EkStatusResponse>? EnabledEkStatuses { get; set; }
/// <summary>
/// Рабочие группы
/// </summary>
public List<WorkGroupResponse>? WorkGroups { get; set; }
}
}

View File

@@ -1,9 +0,0 @@
namespace PARR.API.Contracts.V1.Responses
{
public class JobEkMaskResponse
{
public Guid Id { get; set; }
public required string Name { get; set; }
}
}

View File

@@ -21,202 +21,202 @@ namespace PARR.API.Controllers.V1
[Authorize(Roles = ParrRoles.Administrator.Role)] [Authorize(Roles = ParrRoles.Administrator.Role)]
public class JobAutoControlController : BaseApiController public class JobAutoControlController : BaseApiController
{ {
private readonly IJobAutoControlService jobAutoControlService; //private readonly IJobAutoControlService jobAutoControlService;
private readonly IApplicationsInWorkService applicationsInWorkService; //private readonly IApplicationsInWorkService applicationsInWorkService;
private readonly IMapper mapper; //private readonly IMapper mapper;
private readonly IValidator<JobAutoControlRequest> validator; //private readonly IValidator<JobAutoControlRequest> validator;
private readonly IUriService uriService; //private readonly IUriService uriService;
public JobAutoControlController( //public JobAutoControlController(
IJobAutoControlService jobAutoControlService, // IJobAutoControlService jobAutoControlService,
IApplicationsInWorkService applicationsInWorkService, // IApplicationsInWorkService applicationsInWorkService,
IMapper mapper, // IMapper mapper,
IValidator<JobAutoControlRequest> validator, // IValidator<JobAutoControlRequest> validator,
IUriService uriService // IUriService uriService
) // )
{ //{
this.jobAutoControlService = jobAutoControlService; // this.jobAutoControlService = jobAutoControlService;
this.applicationsInWorkService = applicationsInWorkService; // this.applicationsInWorkService = applicationsInWorkService;
this.mapper = mapper; // this.mapper = mapper;
this.validator = validator; // this.validator = validator;
this.uriService = uriService; // this.uriService = uriService;
} //}
/// <summary> ///// <summary>
/// Получить настройки автоматического управления РР ///// Получить настройки автоматического управления РР
/// </summary> ///// </summary>
/// <param name="applicationInWorkId"></param> ///// <param name="applicationInWorkId"></param>
/// <returns></returns> ///// <returns></returns>
[HttpGet(ApiRoutes.JobAutoControl.Get)] //[HttpGet(ApiRoutes.JobAutoControl.Get)]
public async Task<IActionResult> Get([FromRoute] Guid applicationInWorkId) //public async Task<IActionResult> Get([FromRoute] Guid applicationInWorkId)
{ //{
var obj = await jobAutoControlService.Get() // var obj = await jobAutoControlService.Get()
.Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup) // .Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
.Include(t => t.JobEkMasks) // .Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus) // .Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId); // .FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (obj == null) // if (obj == null)
{ // {
// проверим, есть ли вообще такой AppInWork // // проверим, есть ли вообще такой AppInWork
var appInWork = await applicationsInWorkService.GetAsync(applicationInWorkId); // var appInWork = await applicationsInWorkService.GetAsync(applicationInWorkId);
if (appInWork == null) // if (appInWork == null)
return NotFound(); // return NotFound();
return NoContent(); // return NoContent();
} // }
var response = mapper.Map<JobAutoControlResponse>(obj); // var response = mapper.Map<JobAutoControlResponse>(obj);
return Ok(new Response<JobAutoControlResponse>(response, true)); // return Ok(new Response<JobAutoControlResponse>(response, true));
} //}
/// <summary> ///// <summary>
/// Создать настройки автоматического управления РР ///// Создать настройки автоматического управления РР
/// </summary> ///// </summary>
/// <param name="applicationInWorkId"></param> ///// <param name="applicationInWorkId"></param>
/// <param name="request"></param> ///// <param name="request"></param>
/// <returns></returns> ///// <returns></returns>
[HttpPost(ApiRoutes.JobAutoControl.Create)] //[HttpPost(ApiRoutes.JobAutoControl.Create)]
public async Task<IActionResult> Create([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request) //public async Task<IActionResult> Create([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request)
{ //{
var exist = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId); // var exist = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (exist != null) // if (exist != null)
return BadRequest(new Response(false, new List<ErrorModel> { // return BadRequest(new Response(false, new List<ErrorModel> {
new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} уже существует." } // new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} уже существует." }
})); // }));
var resultValidate = await validator.ValidateAsync(request); // var resultValidate = await validator.ValidateAsync(request);
if (!resultValidate.IsValid) // if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors)); // return BadRequest(new Response(resultValidate.Errors));
var newObj = new DAL.Models.JobAutoControl // var newObj = new DAL.Models.JobAutoControl
{ // {
Id = Guid.NewGuid(), // Id = Guid.NewGuid(),
ApplicationInWorkId = applicationInWorkId, // ApplicationInWorkId = applicationInWorkId,
CreateNew = request.CreateNew, // CreateNew = request.CreateNew,
Deactivate = request.Deactivate, // Deactivate = request.Deactivate,
Activate = request.Activate, // Activate = request.Activate,
OnTemplateIsActive = request.OnTemplateIsActive, // OnTemplateIsActive = request.OnTemplateIsActive,
OnScheduleIsActive = request.OnScheduleIsActive, // OnScheduleIsActive = request.OnScheduleIsActive,
OffTemplateIsActive = request.OffTemplateIsActive, // OffTemplateIsActive = request.OffTemplateIsActive,
OffScheduleIsActive = request.OffScheduleIsActive // OffScheduleIsActive = request.OffScheduleIsActive
}; // };
// убираем пробелы и дубли // // убираем пробелы и дубли
request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => newObj.JobEkMasks.Add(new JobEkMask // request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => newObj.JobEkMasks.Add(new JobEkMask
{ // {
Id = Guid.NewGuid(), // Id = Guid.NewGuid(),
DateCreated = DateTimeOffset.UtcNow, // DateCreated = DateTimeOffset.UtcNow,
Name = mask.Trim(), // Name = mask.Trim(),
JobAutoControlId = newObj.Id // JobAutoControlId = newObj.Id
})); // }));
request.EnabledEkStatuses.ForEach(status => newObj.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus // request.EnabledEkStatuses.ForEach(status => newObj.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus
{ // {
EkStatusCode = (int)status, // EkStatusCode = (int)status,
JobAutoControlId = newObj.Id // JobAutoControlId = newObj.Id
})); // }));
if (!await jobAutoControlService.CreateAsync(newObj) || !await jobAutoControlService.CommitAsync()) // if (!await jobAutoControlService.CreateAsync(newObj) || !await jobAutoControlService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при создани записи." } })); // return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при создани записи." } }));
var locationUri = uriService.GetUri(ApiRoutes.JobAutoControl.Get, ApiRoutes.JobAutoControl.appInWorkId, applicationInWorkId); // var locationUri = uriService.GetUri(ApiRoutes.JobAutoControl.Get, ApiRoutes.JobAutoControl.appInWorkId, applicationInWorkId);
var createdObj = await jobAutoControlService.Get() // var createdObj = await jobAutoControlService.Get()
.Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup) // .Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
.Include(t => t.JobEkMasks) // .Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus) // .Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId); // .FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
return Created(locationUri, new Response<JobAutoControlResponse>(mapper.Map<JobAutoControlResponse>(createdObj), true)); // return Created(locationUri, new Response<JobAutoControlResponse>(mapper.Map<JobAutoControlResponse>(createdObj), true));
} //}
/// <summary> ///// <summary>
/// Обновить настройки автоматического управления РР ///// Обновить настройки автоматического управления РР
/// </summary> ///// </summary>
/// <param name="applicationInWorkId"></param> ///// <param name="applicationInWorkId"></param>
/// <param name="request"></param> ///// <param name="request"></param>
/// <returns></returns> ///// <returns></returns>
[HttpPut(ApiRoutes.JobAutoControl.Update)] //[HttpPut(ApiRoutes.JobAutoControl.Update)]
public async Task<IActionResult> Update([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request) //public async Task<IActionResult> Update([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request)
{ //{
var resultValidate = await validator.ValidateAsync(request); // var resultValidate = await validator.ValidateAsync(request);
if (!resultValidate.IsValid) // if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors)); // return BadRequest(new Response(resultValidate.Errors));
var orig = await jobAutoControlService.Get() // var orig = await jobAutoControlService.Get()
.Include(t => t.JobEkMasks) // .Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses) // .Include(t => t.JobAutoControlInEkStatuses)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId); // .FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (orig == null) // if (orig == null)
return BadRequest(new Response(false, new List<ErrorModel> { // return BadRequest(new Response(false, new List<ErrorModel> {
new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} не существует." } // new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} не существует." }
})); // }));
orig.DateModified = DateTimeOffset.UtcNow; // orig.DateModified = DateTimeOffset.UtcNow;
orig.CreateNew = request.CreateNew; // orig.CreateNew = request.CreateNew;
orig.Deactivate = request.Deactivate; // orig.Deactivate = request.Deactivate;
orig.Activate = request.Activate; // orig.Activate = request.Activate;
orig.OnTemplateIsActive = request.OnTemplateIsActive; // orig.OnTemplateIsActive = request.OnTemplateIsActive;
orig.OnScheduleIsActive = request.OnScheduleIsActive; // orig.OnScheduleIsActive = request.OnScheduleIsActive;
orig.OffTemplateIsActive = request.OffTemplateIsActive; // orig.OffTemplateIsActive = request.OffTemplateIsActive;
orig.OffScheduleIsActive = request.OffScheduleIsActive; // orig.OffScheduleIsActive = request.OffScheduleIsActive;
orig.JobEkMasks.Clear(); // orig.JobEkMasks.Clear();
// убираем пробелы и дубли // // убираем пробелы и дубли
request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => orig.JobEkMasks.Add(new JobEkMask // request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => orig.JobEkMasks.Add(new JobEkMask
{ // {
//Id = Guid.NewGuid(), // не пойму почему не нужно это поле. с ним ошибка. // //Id = Guid.NewGuid(), // не пойму почему не нужно это поле. с ним ошибка.
DateCreated = DateTimeOffset.UtcNow, // DateCreated = DateTimeOffset.UtcNow,
Name = mask.Trim(), // Name = mask.Trim(),
JobAutoControlId = orig.Id // JobAutoControlId = orig.Id
})); // }));
orig.JobAutoControlInEkStatuses.Clear(); // orig.JobAutoControlInEkStatuses.Clear();
request.EnabledEkStatuses.ForEach(status => orig.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus // request.EnabledEkStatuses.ForEach(status => orig.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus
{ // {
EkStatusCode = (int)status, // EkStatusCode = (int)status,
JobAutoControlId = orig.Id // JobAutoControlId = orig.Id
})); // }));
if (!await jobAutoControlService.CommitAsync()) // if (!await jobAutoControlService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при изменении записи." } })); // return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при изменении записи." } }));
var updatedObj = await jobAutoControlService.Get() // var updatedObj = await jobAutoControlService.Get()
.Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup) // .Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
.Include(t => t.JobEkMasks) // .Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus) // .Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId); // .FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
return Ok(new Response<JobAutoControlResponse>(mapper.Map<JobAutoControlResponse>(updatedObj), true)); // return Ok(new Response<JobAutoControlResponse>(mapper.Map<JobAutoControlResponse>(updatedObj), true));
} //}
/// <summary> ///// <summary>
/// Удалить настройки автоматического управления РР ///// Удалить настройки автоматического управления РР
/// </summary> ///// </summary>
/// <param name="applicationInWorkId"></param> ///// <param name="applicationInWorkId"></param>
/// <returns></returns> ///// <returns></returns>
[HttpDelete(ApiRoutes.JobAutoControl.Delete)] //[HttpDelete(ApiRoutes.JobAutoControl.Delete)]
public async Task<IActionResult> Delete([FromRoute] Guid applicationInWorkId) //public async Task<IActionResult> Delete([FromRoute] Guid applicationInWorkId)
{ //{
var obj = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId); // var obj = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (obj == null) // if (obj == null)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроект. Не найден настройки с {nameof(applicationInWorkId)}: {applicationInWorkId}" } })); // return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроект. Не найден настройки с {nameof(applicationInWorkId)}: {applicationInWorkId}" } }));
if (!jobAutoControlService.Delete(obj) || !await jobAutoControlService.CommitAsync()) // if (!jobAutoControlService.Delete(obj) || !await jobAutoControlService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроек." } })); // return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроек." } }));
return NoContent(); // return NoContent();
} //}
} }

View File

@@ -322,18 +322,18 @@ namespace PARR.API.MappingProfiles
#region ApplicationInWork #region ApplicationInWork
CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>() //CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>()
.Include<ApplicationsInWork, ApplicationInWorkResponse>() // .Include<ApplicationsInWork, ApplicationInWorkResponse>()
.ForMember(d => d.Application, o => o.MapFrom(s => s.Application)); // .ForMember(d => d.Application, o => o.MapFrom(s => s.Application));
CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>(); //CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>();
CreateMap<ApplicationsInWork, ApplicationInWorkResponse>() //CreateMap<ApplicationsInWork, ApplicationInWorkResponse>()
.ForMember(d => d.Work, o => o.MapFrom(s => s.Work)) // .ForMember(d => d.Work, o => o.MapFrom(s => s.Work))
//.ForMember(d => d.TemplatesCount, o => o.MapFrom(s => s.Templates.Count())) // //.ForMember(d => d.TemplatesCount, o => o.MapFrom(s => s.Templates.Count()))
.ForMember(d => d.Schedule, o => o.MapFrom<ApplicationInWorkScheduleResolver>()) // .ForMember(d => d.Schedule, o => o.MapFrom<ApplicationInWorkScheduleResolver>())
.ForMember(d => d.WorkGroups, o => o.MapFrom(s => s.WorkGroups.OrderBy(t => t.WorkGroup!.Name).Select(t => t.WorkGroup))) // .ForMember(d => d.WorkGroups, o => o.MapFrom(s => s.WorkGroups.OrderBy(t => t.WorkGroup!.Name).Select(t => t.WorkGroup)))
.ForMember(d => d.AutoControl, o => o.MapFrom(s => s.JobAutoControl)); // .ForMember(d => d.AutoControl, o => o.MapFrom(s => s.JobAutoControl));
#endregion #endregion
@@ -375,24 +375,24 @@ namespace PARR.API.MappingProfiles
#endregion #endregion
#region JobAutoControl //#region JobAutoControl
CreateMap<JobAutoControl, JobAutoControlBaseResponse>() //CreateMap<JobAutoControl, JobAutoControlBaseResponse>()
.Include<JobAutoControl, JobAutoControlResponse>(); // .Include<JobAutoControl, JobAutoControlResponse>();
CreateMap<JobAutoControl, JobAutoControlResponse>() //CreateMap<JobAutoControl, JobAutoControlResponse>()
.ForMember(d => d.EkMasks, o => o.MapFrom(s => s.JobEkMasks.OrderBy(t => t.Name))) // .ForMember(d => d.EkMasks, o => o.MapFrom(s => s.JobEkMasks.OrderBy(t => t.Name)))
.ForMember(d => d.EnabledEkStatuses, o => o.MapFrom(s => s.JobAutoControlInEkStatuses.Select(t => t.EkStatus).OrderBy(t => t.Name))) // .ForMember(d => d.EnabledEkStatuses, o => o.MapFrom(s => s.JobAutoControlInEkStatuses.Select(t => t.EkStatus).OrderBy(t => t.Name)))
.ForMember(d => d.WorkGroups, o => o.MapFrom(s => s.ApplicationsInWork!.WorkGroups.Select(t => t.WorkGroup).OrderBy(t => t.Name))); // .ForMember(d => d.WorkGroups, o => o.MapFrom(s => s.ApplicationsInWork!.WorkGroups.Select(t => t.WorkGroup).OrderBy(t => t.Name)));
#endregion //#endregion
#region ResponseArea #region ResponseArea
CreateMap<ResponseArea, ResponseAreaResponse>(); CreateMap<ResponseArea, ResponseAreaResponse>();
#endregion #endregion
CreateMap<JobEkMask, JobEkMaskResponse>(); //CreateMap<JobEkMask, JobEkMaskResponse>();
CreateMap<EkStatus, EkStatusResponse>(); CreateMap<EkStatus, EkStatusResponse>();

View File

@@ -34,9 +34,6 @@ namespace PARR.DAL.Context
public DbSet<Work> Works { get; set; } public DbSet<Work> Works { get; set; }
public DbSet<ApplicationsInWork> ApplicationsInWorks { get; set; } public DbSet<ApplicationsInWork> ApplicationsInWorks { get; set; }
public DbSet<JobAutoControl> JobAutoControls { get; set; }
public DbSet<JobEkMask> JobEkMasks { get; set; }
public DbSet<JobAutoControlInEkStatus> JobAutoControlInEkStatuses { get; set; }
public DbSet<Models.Setting> Setting { get; set; } public DbSet<Models.Setting> Setting { get; set; }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,116 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class remOldJobAutoControl : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "JobAutoControlInEkStatus");
migrationBuilder.DropTable(
name: "JobEkMasks");
migrationBuilder.DropTable(
name: "JobAutoControls");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "JobAutoControls",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
ApplicationInWorkId = table.Column<Guid>(type: "uuid", nullable: false),
Activate = table.Column<bool>(type: "boolean", nullable: false),
CreateNew = table.Column<bool>(type: "boolean", nullable: false),
DateCreated = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false),
DateModified = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true),
Deactivate = table.Column<bool>(type: "boolean", nullable: false),
OffScheduleIsActive = table.Column<bool>(type: "boolean", nullable: false),
OffTemplateIsActive = table.Column<bool>(type: "boolean", nullable: false),
OnScheduleIsActive = table.Column<bool>(type: "boolean", nullable: false),
OnTemplateIsActive = table.Column<bool>(type: "boolean", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_JobAutoControls", x => x.Id);
table.ForeignKey(
name: "FK_JobAutoControls_ApplicationsInWorks_ApplicationInWorkId",
column: x => x.ApplicationInWorkId,
principalTable: "ApplicationsInWorks",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "JobAutoControlInEkStatus",
columns: table => new
{
JobAutoControlId = table.Column<Guid>(type: "uuid", nullable: false),
EkStatusCode = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_JobAutoControlInEkStatus", x => new { x.JobAutoControlId, x.EkStatusCode });
table.ForeignKey(
name: "FK_JobAutoControlInEkStatus_EkStatuses_EkStatusCode",
column: x => x.EkStatusCode,
principalTable: "EkStatuses",
principalColumn: "Code",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_JobAutoControlInEkStatus_JobAutoControls_JobAutoControlId",
column: x => x.JobAutoControlId,
principalTable: "JobAutoControls",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "JobEkMasks",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
JobAutoControlId = table.Column<Guid>(type: "uuid", nullable: false),
DateCreated = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false),
Name = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_JobEkMasks", x => x.Id);
table.ForeignKey(
name: "FK_JobEkMasks_JobAutoControls_JobAutoControlId",
column: x => x.JobAutoControlId,
principalTable: "JobAutoControls",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_JobAutoControlInEkStatus_EkStatusCode",
table: "JobAutoControlInEkStatus",
column: "EkStatusCode");
migrationBuilder.CreateIndex(
name: "IX_JobAutoControls_ApplicationInWorkId",
table: "JobAutoControls",
column: "ApplicationInWorkId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_JobEkMasks_JobAutoControlId_Name",
table: "JobEkMasks",
columns: new[] { "JobAutoControlId", "Name" },
unique: true);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,48 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class tbjJobAutoControl : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "AutoControls",
schema: "job",
columns: table => new
{
JobId = table.Column<Guid>(type: "uuid", nullable: false),
IsEnable = table.Column<bool>(type: "boolean", nullable: false),
SyncIsActiveTemplate = table.Column<bool>(type: "boolean", nullable: false),
SyncIsActiveSchedule = table.Column<bool>(type: "boolean", nullable: false),
UpdateIsActiveTemplate = table.Column<bool>(type: "boolean", nullable: false),
UpdateIsActiveSchedule = table.Column<bool>(type: "boolean", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AutoControls", x => x.JobId);
table.ForeignKey(
name: "FK_AutoControls_Jobs_JobId",
column: x => x.JobId,
principalSchema: "job",
principalTable: "Jobs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
},
comment: "Таблица управления автоконтролем для работ");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AutoControls",
schema: "job");
}
}
}

View File

@@ -1597,6 +1597,34 @@ namespace PARR.DAL.Migrations
}); });
}); });
modelBuilder.Entity("PARR.DAL.Models.Job.JobAutoControl", b =>
{
b.Property<Guid>("JobId")
.HasColumnType("uuid");
b.Property<bool>("IsEnable")
.HasColumnType("boolean");
b.Property<bool>("SyncIsActiveSchedule")
.HasColumnType("boolean");
b.Property<bool>("SyncIsActiveTemplate")
.HasColumnType("boolean");
b.Property<bool>("UpdateIsActiveSchedule")
.HasColumnType("boolean");
b.Property<bool>("UpdateIsActiveTemplate")
.HasColumnType("boolean");
b.HasKey("JobId");
b.ToTable("AutoControls", "job", t =>
{
t.HasComment("Таблица управления автоконтролем для работ");
});
});
modelBuilder.Entity("PARR.DAL.Models.Job.JobFieldFilter", b => modelBuilder.Entity("PARR.DAL.Models.Job.JobFieldFilter", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
@@ -1808,89 +1836,6 @@ namespace PARR.DAL.Migrations
}); });
}); });
modelBuilder.Entity("PARR.DAL.Models.JobAutoControl", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<bool>("Activate")
.HasColumnType("boolean");
b.Property<Guid>("ApplicationInWorkId")
.HasColumnType("uuid");
b.Property<bool>("CreateNew")
.HasColumnType("boolean");
b.Property<DateTimeOffset>("DateCreated")
.HasColumnType("timestamp with time zone");
b.Property<DateTimeOffset?>("DateModified")
.HasColumnType("timestamp with time zone");
b.Property<bool>("Deactivate")
.HasColumnType("boolean");
b.Property<bool>("OffScheduleIsActive")
.HasColumnType("boolean");
b.Property<bool>("OffTemplateIsActive")
.HasColumnType("boolean");
b.Property<bool>("OnScheduleIsActive")
.HasColumnType("boolean");
b.Property<bool>("OnTemplateIsActive")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("ApplicationInWorkId")
.IsUnique();
b.ToTable("JobAutoControls");
});
modelBuilder.Entity("PARR.DAL.Models.JobAutoControlInEkStatus", b =>
{
b.Property<Guid>("JobAutoControlId")
.HasColumnType("uuid");
b.Property<int>("EkStatusCode")
.HasColumnType("integer");
b.HasKey("JobAutoControlId", "EkStatusCode");
b.HasIndex("EkStatusCode");
b.ToTable("JobAutoControlInEkStatus");
});
modelBuilder.Entity("PARR.DAL.Models.JobEkMask", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTimeOffset>("DateCreated")
.HasColumnType("timestamp with time zone");
b.Property<Guid>("JobAutoControlId")
.HasColumnType("uuid");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("JobAutoControlId", "Name")
.IsUnique();
b.ToTable("JobEkMasks");
});
modelBuilder.Entity("PARR.DAL.Models.Order", b => modelBuilder.Entity("PARR.DAL.Models.Order", b =>
{ {
b.Property<Guid>("Id") b.Property<Guid>("Id")
@@ -3399,6 +3344,17 @@ namespace PARR.DAL.Migrations
b.Navigation("Tnk"); b.Navigation("Tnk");
}); });
modelBuilder.Entity("PARR.DAL.Models.Job.JobAutoControl", b =>
{
b.HasOne("PARR.DAL.Models.Job.Job", "Job")
.WithOne("AutoControl")
.HasForeignKey("PARR.DAL.Models.Job.JobAutoControl", "JobId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Job");
});
modelBuilder.Entity("PARR.DAL.Models.Job.JobFieldFilter", b => modelBuilder.Entity("PARR.DAL.Models.Job.JobFieldFilter", b =>
{ {
b.HasOne("PARR.DAL.Models.Unit.UnitField", "UnitField") b.HasOne("PARR.DAL.Models.Unit.UnitField", "UnitField")
@@ -3459,47 +3415,6 @@ namespace PARR.DAL.Migrations
b.Navigation("Job"); b.Navigation("Job");
}); });
modelBuilder.Entity("PARR.DAL.Models.JobAutoControl", b =>
{
b.HasOne("PARR.DAL.Models.ApplicationsInWork", "ApplicationsInWork")
.WithOne("JobAutoControl")
.HasForeignKey("PARR.DAL.Models.JobAutoControl", "ApplicationInWorkId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ApplicationsInWork");
});
modelBuilder.Entity("PARR.DAL.Models.JobAutoControlInEkStatus", b =>
{
b.HasOne("PARR.DAL.Models.EkStatus", "EkStatus")
.WithMany("JobAutoControlInEkStatuses")
.HasForeignKey("EkStatusCode")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PARR.DAL.Models.JobAutoControl", "JobAutoControl")
.WithMany("JobAutoControlInEkStatuses")
.HasForeignKey("JobAutoControlId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("EkStatus");
b.Navigation("JobAutoControl");
});
modelBuilder.Entity("PARR.DAL.Models.JobEkMask", b =>
{
b.HasOne("PARR.DAL.Models.JobAutoControl", "JobAutoControl")
.WithMany("JobEkMasks")
.HasForeignKey("JobAutoControlId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("JobAutoControl");
});
modelBuilder.Entity("PARR.DAL.Models.Order", b => modelBuilder.Entity("PARR.DAL.Models.Order", b =>
{ {
b.HasOne("PARR.DAL.Models.OrderStatus", "NextStatus") b.HasOne("PARR.DAL.Models.OrderStatus", "NextStatus")
@@ -3808,8 +3723,6 @@ namespace PARR.DAL.Migrations
modelBuilder.Entity("PARR.DAL.Models.ApplicationsInWork", b => modelBuilder.Entity("PARR.DAL.Models.ApplicationsInWork", b =>
{ {
b.Navigation("JobAutoControl");
b.Navigation("WorkGroups"); b.Navigation("WorkGroups");
}); });
@@ -3826,8 +3739,6 @@ namespace PARR.DAL.Migrations
modelBuilder.Entity("PARR.DAL.Models.EkStatus", b => modelBuilder.Entity("PARR.DAL.Models.EkStatus", b =>
{ {
b.Navigation("Hosts"); b.Navigation("Hosts");
b.Navigation("JobAutoControlInEkStatuses");
}); });
modelBuilder.Entity("PARR.DAL.Models.EsppSchType", b => modelBuilder.Entity("PARR.DAL.Models.EsppSchType", b =>
@@ -3859,6 +3770,8 @@ namespace PARR.DAL.Migrations
modelBuilder.Entity("PARR.DAL.Models.Job.Job", b => modelBuilder.Entity("PARR.DAL.Models.Job.Job", b =>
{ {
b.Navigation("AutoControl");
b.Navigation("Templates"); b.Navigation("Templates");
b.Navigation("UnitFilters"); b.Navigation("UnitFilters");
@@ -3883,13 +3796,6 @@ namespace PARR.DAL.Migrations
b.Navigation("RelationshipFilters"); b.Navigation("RelationshipFilters");
}); });
modelBuilder.Entity("PARR.DAL.Models.JobAutoControl", b =>
{
b.Navigation("JobAutoControlInEkStatuses");
b.Navigation("JobEkMasks");
});
modelBuilder.Entity("PARR.DAL.Models.Order", b => modelBuilder.Entity("PARR.DAL.Models.Order", b =>
{ {
b.Navigation("AgentHistories"); b.Navigation("AgentHistories");

View File

@@ -117,6 +117,6 @@ namespace PARR.DAL.Models
public ICollection<AppInWorkInWorkGroup> WorkGroups { get; set; } = new HashSet<AppInWorkInWorkGroup>(); public ICollection<AppInWorkInWorkGroup> WorkGroups { get; set; } = new HashSet<AppInWorkInWorkGroup>();
public JobAutoControl? JobAutoControl { get; set; } //public JobAutoControl? JobAutoControl { get; set; }
} }
} }

View File

@@ -14,6 +14,6 @@ namespace PARR.DAL.Models
public ICollection<Host> Hosts { get; set; } = new HashSet<Host>(); public ICollection<Host> Hosts { get; set; } = new HashSet<Host>();
public ICollection<JobAutoControlInEkStatus> JobAutoControlInEkStatuses { get; set; } = new HashSet<JobAutoControlInEkStatus>(); //public ICollection<JobAutoControlInEkStatus> JobAutoControlInEkStatuses { get; set; } = new HashSet<JobAutoControlInEkStatus>();
} }
} }

View File

@@ -71,5 +71,8 @@ namespace PARR.DAL.Models.Job
public ICollection<JobUnitFilter> UnitFilters { get; set; } = new HashSet<JobUnitFilter>(); public ICollection<JobUnitFilter> UnitFilters { get; set; } = new HashSet<JobUnitFilter>();
public ICollection<Template> Templates { get; set; } = new HashSet<Template>(); public ICollection<Template> Templates { get; set; } = new HashSet<Template>();
public JobAutoControl? AutoControl { get; set; }
} }
} }

View File

@@ -0,0 +1,43 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Job
{
[Table("AutoControls", Schema = DataContextSettings.Job)]
[Comment("Таблица управления автоконтролем для работ")]
public class JobAutoControl
{
[Key]
public Guid JobId { get; set; }
/// <summary>
/// Включен автоконтроль
/// </summary>
public bool IsEnable { get; set; } = false;
/// <summary>
/// Значение при синхронизации, статус шаблона
/// </summary>
public bool SyncIsActiveTemplate { get; set; } = false;
/// <summary>
/// Значение при синхронизации, статус расписания
/// </summary>
public bool SyncIsActiveSchedule { get; set; } = false;
/// <summary>
/// Значение при обновлении, статус шаблона
/// </summary>
public bool UpdateIsActiveTemplate { get; set; } = false;
/// <summary>
/// Значение при обновлении, статус расписания
/// </summary>
public bool UpdateIsActiveSchedule { get; set; } = false;
[ForeignKey(nameof(JobId))]
public Job? Job { get; set; }
}
}

View File

@@ -1,71 +0,0 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Models.Base;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
[Table("JobAutoControls")]
[Index(nameof(ApplicationInWorkId), IsUnique = true)]
public class JobAutoControl : IBase
{
[Key]
public Guid Id { get; set; }
public DateTimeOffset DateCreated { get; set; }
public DateTimeOffset? DateModified { get; set; }
public Guid ApplicationInWorkId { get; set; }
[ForeignKey(nameof(ApplicationInWorkId))]
public ApplicationsInWork? ApplicationsInWork { get; set; }
/// <summary>
/// Создавать новые РР (из настроке РР)
/// </summary>
public bool CreateNew { get; set; }
/// <summary>
/// Деактивировать не актуальные согласно ЭК (обратные статусы ЭК)
/// </summary>
public bool Deactivate { get; set; }
/// <summary>
/// Активировать РР после смены ЭК (согласно настройкам статусов ЭК)
/// </summary>
public bool Activate { get; set; }
/// <summary>
/// Состояние для активированных РР, шаблоны
/// </summary>
public bool OnTemplateIsActive { get; set; }
/// <summary>
/// Состояние для активированных РР, расписания
/// </summary>
public bool OnScheduleIsActive { get; set; }
/// <summary>
/// Состояние для деактивированных РР, шаблоны
/// </summary>
public bool OffTemplateIsActive { get; set; }
/// <summary>
/// Состояние для деактивированных РР, расписания
/// </summary>
public bool OffScheduleIsActive { get; set; }
/// <summary>
/// Список масок ЭК, или ЭК
/// </summary>
public ICollection<JobEkMask> JobEkMasks { get; set; } = new HashSet<JobEkMask>();
/// <summary>
/// Список статусов ЭК для которых создавать/активировать шаблоны/расписания
/// </summary>
public ICollection<JobAutoControlInEkStatus> JobAutoControlInEkStatuses { get; set; } = new HashSet<JobAutoControlInEkStatus>();
}
}

View File

@@ -1,20 +0,0 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
[Table("JobAutoControlInEkStatus")]
[PrimaryKey(nameof(JobAutoControlId), nameof(EkStatusCode))]
public class JobAutoControlInEkStatus
{
public Guid JobAutoControlId { get; set; }
public int EkStatusCode { get; set; }
[ForeignKey(nameof(EkStatusCode))]
public EkStatus? EkStatus { get; set; }
[ForeignKey(nameof(JobAutoControlId))]
public JobAutoControl? JobAutoControl { get; set; }
}
}

View File

@@ -1,27 +0,0 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Models.Base;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
[Table("JobEkMasks")]
[Index(nameof(JobAutoControlId), nameof(Name), IsUnique = true)]
public class JobEkMask : IBase
{
[Key]
public Guid Id { get; set; }
public DateTimeOffset DateCreated { get; set; }
[NotMapped]
public DateTimeOffset? DateModified { get; set; }
public required string Name { get; set; }
public Guid JobAutoControlId { get; set; }
[ForeignKey(nameof(JobAutoControlId))]
public JobAutoControl? JobAutoControl { get; set; }
}
}

View File

@@ -90,8 +90,6 @@ namespace PARR.DAL
services.AddTransient<IDistributionPeriodService, DistributionPeriodService>(); services.AddTransient<IDistributionPeriodService, DistributionPeriodService>();
services.AddTransient<IEsppSchTypeValueService, EsppSchTypeValueService>(); services.AddTransient<IEsppSchTypeValueService, EsppSchTypeValueService>();
services.AddTransient<IResponseAreaService, ResponseAreaService>(); services.AddTransient<IResponseAreaService, ResponseAreaService>();
services.AddTransient<IJobAutoControlService, JobAutoControlService>();
services.AddTransient<IJobEkMaskService, JobEkMaskService>();
services.AddTransient<ITemplateHistoryService, TemplateHistoryService>(); services.AddTransient<ITemplateHistoryService, TemplateHistoryService>();
services.AddTransient<IParrComponentService, ParrComponentService>(); services.AddTransient<IParrComponentService, ParrComponentService>();
services.AddTransient<ITemplateStatusTypeService, TemplateStatusTypeService>(); services.AddTransient<ITemplateStatusTypeService, TemplateStatusTypeService>();

View File

@@ -18,5 +18,31 @@ namespace PARR.DAL.Services.Implementations.Job
protected override DbSet<Models.Job.Job> EntitySet => dataContext.Jobs; protected override DbSet<Models.Job.Job> EntitySet => dataContext.Jobs;
protected override DataContext EntitiContext => dataContext; protected override DataContext EntitiContext => dataContext;
public override Task<bool> CreateAsync(Models.Job.Job obj)
{
if (obj.AutoControl == null)
obj.AutoControl = new Models.Job.JobAutoControl
{
JobId = obj.Id
};
return base.CreateAsync(obj);
}
public override Task<bool> AddRangeAsync(List<Models.Job.Job> objs)
{
objs.ForEach(job =>
{
if (job.AutoControl == null)
job.AutoControl = new Models.Job.JobAutoControl
{
JobId = job.Id
};
});
return base.AddRangeAsync(objs);
}
} }
} }

View File

@@ -1,23 +0,0 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using PARR.DAL.Context;
using PARR.DAL.Models;
using PARR.DAL.Services.Abstracts;
using PARR.DAL.Services.Interfaces;
namespace PARR.DAL.Services.Implementations
{
internal class JobAutoControlService : BaseService<JobAutoControl>, IJobAutoControlService
{
private readonly DataContext dataContext;
protected override DbSet<JobAutoControl> EntitySet => dataContext.JobAutoControls;
protected override DataContext EntitiContext => dataContext;
public JobAutoControlService(DataContext dataContext, ILogger<JobAutoControlService> logger) : base(logger)
{
this.dataContext = dataContext;
}
}
}

View File

@@ -1,23 +0,0 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using PARR.DAL.Context;
using PARR.DAL.Models;
using PARR.DAL.Services.Abstracts;
using PARR.DAL.Services.Interfaces;
namespace PARR.DAL.Services.Implementations
{
internal class JobEkMaskService : BaseService<JobEkMask>, IJobEkMaskService
{
private readonly DataContext dataContext;
protected override DbSet<JobEkMask> EntitySet => dataContext.JobEkMasks;
protected override DataContext EntitiContext => dataContext;
public JobEkMaskService(DataContext dataContext, ILogger<JobEkMaskService> logger) : base(logger)
{
this.dataContext = dataContext;
}
}
}

View File

@@ -1,9 +0,0 @@
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces.Base;
namespace PARR.DAL.Services.Interfaces
{
public interface IJobAutoControlService : IBaseService<JobAutoControl>
{
}
}

View File

@@ -1,9 +0,0 @@
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces.Base;
namespace PARR.DAL.Services.Interfaces
{
public interface IJobEkMaskService : IBaseService<JobEkMask>
{
}
}

View File

@@ -36,166 +36,166 @@ namespace PARR.JobAutoControl
public async Task StartAsync() public async Task StartAsync()
{ {
logger.LogInformation("Запуск сервиса управления авто-контролем РР (JobAutoControl)"); //logger.LogInformation("Запуск сервиса управления авто-контролем РР (JobAutoControl)");
await intervalService.IntervalInitAsync(async () => //await intervalService.IntervalInitAsync(async () =>
{
using (var scope = serviceProvider.CreateScope())
{
var jobAutoControlService = scope.ServiceProvider.GetService<IJobAutoControlService>();
var mqService = scope.ServiceProvider.GetService<IMqService>();
if (jobAutoControlService == null || mqService == null)
throw new Exception($"Не смог получить серивс {nameof(IJobAutoControlService)} или {nameof(IMqService)}");
await HandlerAsync(jobAutoControlService, mqService);
}
}, workerSettings.RepeatEvery);
}
private async Task HandlerAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{
await GenerateAsync(jobAutoControlService, mqService);
await DeactivateAsync(jobAutoControlService, mqService);
await ActivateAsync(jobAutoControlService, mqService);
}
/// <summary>
/// Генерировать новые РР
/// </summary>
/// <param name="jobAutoControlService"></param>
/// <param name="mqService"></param>
/// <returns></returns>
private async Task GenerateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{
var jobsToGenerate = await jobAutoControlService.Get()
.Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses)
.Include(t => t.ApplicationsInWork)
.Where(t => t.CreateNew && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
.ToListAsync();
logger.LogInformation($"Найдено РР с включенным авто-контролем для генерации шаблонов и расписаний: {jobsToGenerate.Count()} шт.");
if (!jobsToGenerate.Any())
return;
jobsToGenerate.ForEach(job =>
{
job.JobEkMasks.ToList().ForEach(ek =>
{
//todo: проверить, нормально ли отрабатывает async в Foreach
job.JobAutoControlInEkStatuses.ToList().ForEach(async ekStatus =>
{
var request = new GeneratorTemplateMq
{
Action = "create",
ApplicationId = job.ApplicationsInWork!.ApplicationId,
Ek = ek.Name,
WorkId = job.ApplicationsInWork!.WorkId,
StatusEk = ekStatus.EkStatusCode,
IsActiveTemplate = job.OnTemplateIsActive,
IsActiveSchedule = job.OnScheduleIsActive,
HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на генерацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
};
var msg = JsonSerializer.Serialize(request);
var result = await mqService.SendAsync(mqSettings.Generator, new[] { msg });
if (result.IsSuccess)
logger.LogInformation($"Отправлен запрос на генерацию: {msg}");
else
logger.LogError($"Ошибка при отправке запроса на генерацию: {msg}");
});
});
});
}
/// <summary>
/// Деактивировать РР
/// </summary>
/// <param name="jobAutoControlService"></param>
/// <param name="mqService"></param>
/// <returns></returns>
private async Task DeactivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{
//var jobsToDeactivate = await jobAutoControlService.Get()
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses)
// .Where(t => t.Deactivate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
// .Select(t => t.ApplicationInWorkId)
// .ToListAsync();
//logger.LogInformation($"Найдено РР с включенным авто-контролем для деактивации шаблонов и расписаний: {jobsToDeactivate.Count()} шт.");
//if (!jobsToDeactivate.Any())
// return;
////todo: проверить, нормально ли отрабатывает async в foreach
//jobsToDeactivate.ForEach(async applicationInWorkId =>
//{ //{
// var request = new TemplateActivatorMq // using (var scope = serviceProvider.CreateScope())
// { // {
// Action = TemplateActivatorActionsEnum.DeactivateAllForAutoControl, // var jobAutoControlService = scope.ServiceProvider.GetService<IJobAutoControlService>();
// JobId = applicationInWorkId, // var mqService = scope.ServiceProvider.GetService<IMqService>();
// HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на деактивацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
// };
// var msg = JsonSerializer.Serialize(request); // if (jobAutoControlService == null || mqService == null)
// throw new Exception($"Не смог получить серивс {nameof(IJobAutoControlService)} или {nameof(IMqService)}");
// var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg }); // await HandlerAsync(jobAutoControlService, mqService);
// }
// if (result.IsSuccess) //}, workerSettings.RepeatEvery);
// logger.LogInformation($"Отправлен запрос на деактивацию: {msg}");
// else
// logger.LogError($"Ошибка при отправке запроса на деактивацию: {msg}");
//});
} }
/// <summary> //private async Task HandlerAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
/// Активировать РР //{
/// </summary> // await GenerateAsync(jobAutoControlService, mqService);
/// <param name="jobAutoControlService"></param> // await DeactivateAsync(jobAutoControlService, mqService);
/// <param name="mqService"></param> // await ActivateAsync(jobAutoControlService, mqService);
/// <returns></returns> //}
private async Task ActivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{
// var jobsToActivate = await jobAutoControlService.Get()
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses)
// .Where(t => t.Activate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
// .Select(t => t.ApplicationInWorkId)
// .ToListAsync();
// if (!jobsToActivate.Any())
// return;
// //todo: проверить, нормально ли отрабатывает async в foreach ///// <summary>
// jobsToActivate.ForEach(async applicationInWorkId => ///// Генерировать новые РР
// { ///// </summary>
// var request = new TemplateActivatorMq ///// <param name="jobAutoControlService"></param>
// { ///// <param name="mqService"></param>
// Action = TemplateActivatorActionsEnum.ActivateAllForAutoControl, ///// <returns></returns>
// JobId = applicationInWorkId, //private async Task GenerateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
// HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на активацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl } //{
// }; // var jobsToGenerate = await jobAutoControlService.Get()
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses)
// .Include(t => t.ApplicationsInWork)
// .Where(t => t.CreateNew && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
// .ToListAsync();
// var msg = JsonSerializer.Serialize(request); // logger.LogInformation($"Найдено РР с включенным авто-контролем для генерации шаблонов и расписаний: {jobsToGenerate.Count()} шт.");
// var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg }); // if (!jobsToGenerate.Any())
// return;
// if (result.IsSuccess)
// logger.LogInformation($"Отправлен запрос на активацию: {msg}"); // jobsToGenerate.ForEach(job =>
// else // {
// logger.LogError($"Ошибка при отправке запроса на активацию: {msg}"); // job.JobEkMasks.ToList().ForEach(ek =>
// }); // {
} // //todo: проверить, нормально ли отрабатывает async в Foreach
// job.JobAutoControlInEkStatuses.ToList().ForEach(async ekStatus =>
// {
// var request = new GeneratorTemplateMq
// {
// Action = "create",
// ApplicationId = job.ApplicationsInWork!.ApplicationId,
// Ek = ek.Name,
// WorkId = job.ApplicationsInWork!.WorkId,
// StatusEk = ekStatus.EkStatusCode,
// IsActiveTemplate = job.OnTemplateIsActive,
// IsActiveSchedule = job.OnScheduleIsActive,
// HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на генерацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
// };
// var msg = JsonSerializer.Serialize(request);
// var result = await mqService.SendAsync(mqSettings.Generator, new[] { msg });
// if (result.IsSuccess)
// logger.LogInformation($"Отправлен запрос на генерацию: {msg}");
// else
// logger.LogError($"Ошибка при отправке запроса на генерацию: {msg}");
// });
// });
// });
//}
///// <summary>
///// Деактивировать РР
///// </summary>
///// <param name="jobAutoControlService"></param>
///// <param name="mqService"></param>
///// <returns></returns>
//private async Task DeactivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
//{
// //var jobsToDeactivate = await jobAutoControlService.Get()
// // .Include(t => t.JobEkMasks)
// // .Include(t => t.JobAutoControlInEkStatuses)
// // .Where(t => t.Deactivate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
// // .Select(t => t.ApplicationInWorkId)
// // .ToListAsync();
// //logger.LogInformation($"Найдено РР с включенным авто-контролем для деактивации шаблонов и расписаний: {jobsToDeactivate.Count()} шт.");
// //if (!jobsToDeactivate.Any())
// // return;
// ////todo: проверить, нормально ли отрабатывает async в foreach
// //jobsToDeactivate.ForEach(async applicationInWorkId =>
// //{
// // var request = new TemplateActivatorMq
// // {
// // Action = TemplateActivatorActionsEnum.DeactivateAllForAutoControl,
// // JobId = applicationInWorkId,
// // HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на деактивацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
// // };
// // var msg = JsonSerializer.Serialize(request);
// // var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg });
// // if (result.IsSuccess)
// // logger.LogInformation($"Отправлен запрос на деактивацию: {msg}");
// // else
// // logger.LogError($"Ошибка при отправке запроса на деактивацию: {msg}");
// //});
//}
///// <summary>
///// Активировать РР
///// </summary>
///// <param name="jobAutoControlService"></param>
///// <param name="mqService"></param>
///// <returns></returns>
//private async Task ActivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
//{
// // var jobsToActivate = await jobAutoControlService.Get()
// // .Include(t => t.JobEkMasks)
// // .Include(t => t.JobAutoControlInEkStatuses)
// // .Where(t => t.Activate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
// // .Select(t => t.ApplicationInWorkId)
// // .ToListAsync();
// // if (!jobsToActivate.Any())
// // return;
// // //todo: проверить, нормально ли отрабатывает async в foreach
// // jobsToActivate.ForEach(async applicationInWorkId =>
// // {
// // var request = new TemplateActivatorMq
// // {
// // Action = TemplateActivatorActionsEnum.ActivateAllForAutoControl,
// // JobId = applicationInWorkId,
// // HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на активацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
// // };
// // var msg = JsonSerializer.Serialize(request);
// // var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg });
// // if (result.IsSuccess)
// // logger.LogInformation($"Отправлен запрос на активацию: {msg}");
// // else
// // logger.LogError($"Ошибка при отправке запроса на активацию: {msg}");
// // });
//}
} }
} }

View File

@@ -32,7 +32,9 @@ namespace PARR.TemplateTaskGenerator
public async Task GenerateTemplateTaskAsync(Guid jobId) public async Task GenerateTemplateTaskAsync(Guid jobId)
{ {
var unitIdsToCreateTemplate = await unitFilterService.GetUnitsIdByJobFilterWithTemplateStatusAsync(jobId,false); //var unitIdsToCreateTemplate = await unitFilterService.GetUnitsIdByJobFilterWithTemplateStatusAsync(jobId, false);
//todo: !!!!!!!! исправить в этом месте !!!!!!!!
IEnumerable<Guid>? unitIdsToCreateTemplate = null;
if (unitIdsToCreateTemplate == null || !unitIdsToCreateTemplate.Any()) if (unitIdsToCreateTemplate == null || !unitIdsToCreateTemplate.Any())
return; return;