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 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)]
public class JobAutoControlController : BaseApiController
{
private readonly IJobAutoControlService jobAutoControlService;
private readonly IApplicationsInWorkService applicationsInWorkService;
private readonly IMapper mapper;
private readonly IValidator<JobAutoControlRequest> validator;
private readonly IUriService uriService;
//private readonly IJobAutoControlService jobAutoControlService;
//private readonly IApplicationsInWorkService applicationsInWorkService;
//private readonly IMapper mapper;
//private readonly IValidator<JobAutoControlRequest> validator;
//private readonly IUriService uriService;
public JobAutoControlController(
IJobAutoControlService jobAutoControlService,
IApplicationsInWorkService applicationsInWorkService,
IMapper mapper,
IValidator<JobAutoControlRequest> validator,
IUriService uriService
)
{
this.jobAutoControlService = jobAutoControlService;
this.applicationsInWorkService = applicationsInWorkService;
this.mapper = mapper;
this.validator = validator;
this.uriService = uriService;
}
//public JobAutoControlController(
// IJobAutoControlService jobAutoControlService,
// IApplicationsInWorkService applicationsInWorkService,
// IMapper mapper,
// IValidator<JobAutoControlRequest> validator,
// IUriService uriService
// )
//{
// this.jobAutoControlService = jobAutoControlService;
// this.applicationsInWorkService = applicationsInWorkService;
// this.mapper = mapper;
// this.validator = validator;
// this.uriService = uriService;
//}
/// <summary>
/// Получить настройки автоматического управления РР
/// </summary>
/// <param name="applicationInWorkId"></param>
/// <returns></returns>
[HttpGet(ApiRoutes.JobAutoControl.Get)]
public async Task<IActionResult> Get([FromRoute] Guid applicationInWorkId)
{
var obj = await jobAutoControlService.Get()
.Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
.Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
///// <summary>
///// Получить настройки автоматического управления РР
///// </summary>
///// <param name="applicationInWorkId"></param>
///// <returns></returns>
//[HttpGet(ApiRoutes.JobAutoControl.Get)]
//public async Task<IActionResult> Get([FromRoute] Guid applicationInWorkId)
//{
// var obj = await jobAutoControlService.Get()
// .Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
// .FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (obj == null)
{
// проверим, есть ли вообще такой AppInWork
var appInWork = await applicationsInWorkService.GetAsync(applicationInWorkId);
if (appInWork == null)
return NotFound();
// if (obj == null)
// {
// // проверим, есть ли вообще такой AppInWork
// var appInWork = await applicationsInWorkService.GetAsync(applicationInWorkId);
// if (appInWork == null)
// 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>
/// <param name="applicationInWorkId"></param>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost(ApiRoutes.JobAutoControl.Create)]
public async Task<IActionResult> Create([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request)
{
var exist = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (exist != null)
return BadRequest(new Response(false, new List<ErrorModel> {
new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} уже существует." }
}));
///// <summary>
///// Создать настройки автоматического управления РР
///// </summary>
///// <param name="applicationInWorkId"></param>
///// <param name="request"></param>
///// <returns></returns>
//[HttpPost(ApiRoutes.JobAutoControl.Create)]
//public async Task<IActionResult> Create([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request)
//{
// var exist = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
// if (exist != null)
// return BadRequest(new Response(false, new List<ErrorModel> {
// new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} уже существует." }
// }));
var resultValidate = await validator.ValidateAsync(request);
if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors));
// var resultValidate = await validator.ValidateAsync(request);
// if (!resultValidate.IsValid)
// return BadRequest(new Response(resultValidate.Errors));
var newObj = new DAL.Models.JobAutoControl
{
Id = Guid.NewGuid(),
ApplicationInWorkId = applicationInWorkId,
CreateNew = request.CreateNew,
Deactivate = request.Deactivate,
Activate = request.Activate,
OnTemplateIsActive = request.OnTemplateIsActive,
OnScheduleIsActive = request.OnScheduleIsActive,
OffTemplateIsActive = request.OffTemplateIsActive,
OffScheduleIsActive = request.OffScheduleIsActive
};
// var newObj = new DAL.Models.JobAutoControl
// {
// Id = Guid.NewGuid(),
// ApplicationInWorkId = applicationInWorkId,
// CreateNew = request.CreateNew,
// Deactivate = request.Deactivate,
// Activate = request.Activate,
// OnTemplateIsActive = request.OnTemplateIsActive,
// OnScheduleIsActive = request.OnScheduleIsActive,
// OffTemplateIsActive = request.OffTemplateIsActive,
// OffScheduleIsActive = request.OffScheduleIsActive
// };
// убираем пробелы и дубли
request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => newObj.JobEkMasks.Add(new JobEkMask
{
Id = Guid.NewGuid(),
DateCreated = DateTimeOffset.UtcNow,
Name = mask.Trim(),
JobAutoControlId = newObj.Id
}));
// // убираем пробелы и дубли
// request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => newObj.JobEkMasks.Add(new JobEkMask
// {
// Id = Guid.NewGuid(),
// DateCreated = DateTimeOffset.UtcNow,
// Name = mask.Trim(),
// JobAutoControlId = newObj.Id
// }));
request.EnabledEkStatuses.ForEach(status => newObj.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus
{
EkStatusCode = (int)status,
JobAutoControlId = newObj.Id
}));
// request.EnabledEkStatuses.ForEach(status => newObj.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus
// {
// EkStatusCode = (int)status,
// JobAutoControlId = newObj.Id
// }));
if (!await jobAutoControlService.CreateAsync(newObj) || !await jobAutoControlService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при создани записи." } }));
// if (!await jobAutoControlService.CreateAsync(newObj) || !await jobAutoControlService.CommitAsync())
// 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()
.Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
.Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
// var createdObj = await jobAutoControlService.Get()
// .Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
// .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>
/// <param name="applicationInWorkId"></param>
/// <param name="request"></param>
/// <returns></returns>
[HttpPut(ApiRoutes.JobAutoControl.Update)]
public async Task<IActionResult> Update([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request)
{
var resultValidate = await validator.ValidateAsync(request);
if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors));
///// <summary>
///// Обновить настройки автоматического управления РР
///// </summary>
///// <param name="applicationInWorkId"></param>
///// <param name="request"></param>
///// <returns></returns>
//[HttpPut(ApiRoutes.JobAutoControl.Update)]
//public async Task<IActionResult> Update([FromRoute] Guid applicationInWorkId, [FromBody] JobAutoControlRequest request)
//{
// var resultValidate = await validator.ValidateAsync(request);
// if (!resultValidate.IsValid)
// return BadRequest(new Response(resultValidate.Errors));
var orig = await jobAutoControlService.Get()
.Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
// var orig = await jobAutoControlService.Get()
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses)
// .FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (orig == null)
return BadRequest(new Response(false, new List<ErrorModel> {
new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} не существует." }
}));
// if (orig == null)
// return BadRequest(new Response(false, new List<ErrorModel> {
// new ErrorModel { FieldName = nameof(applicationInWorkId), Message = $"Запись с {nameof(applicationInWorkId)}: {applicationInWorkId} не существует." }
// }));
orig.DateModified = DateTimeOffset.UtcNow;
orig.CreateNew = request.CreateNew;
orig.Deactivate = request.Deactivate;
orig.Activate = request.Activate;
orig.OnTemplateIsActive = request.OnTemplateIsActive;
orig.OnScheduleIsActive = request.OnScheduleIsActive;
orig.OffTemplateIsActive = request.OffTemplateIsActive;
orig.OffScheduleIsActive = request.OffScheduleIsActive;
// orig.DateModified = DateTimeOffset.UtcNow;
// orig.CreateNew = request.CreateNew;
// orig.Deactivate = request.Deactivate;
// orig.Activate = request.Activate;
// orig.OnTemplateIsActive = request.OnTemplateIsActive;
// orig.OnScheduleIsActive = request.OnScheduleIsActive;
// orig.OffTemplateIsActive = request.OffTemplateIsActive;
// orig.OffScheduleIsActive = request.OffScheduleIsActive;
orig.JobEkMasks.Clear();
// убираем пробелы и дубли
request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => orig.JobEkMasks.Add(new JobEkMask
{
//Id = Guid.NewGuid(), // не пойму почему не нужно это поле. с ним ошибка.
DateCreated = DateTimeOffset.UtcNow,
Name = mask.Trim(),
JobAutoControlId = orig.Id
}));
// orig.JobEkMasks.Clear();
// // убираем пробелы и дубли
// request.EkMasks.Where(t => t.Trim() != string.Empty).Distinct().ToList().ForEach(mask => orig.JobEkMasks.Add(new JobEkMask
// {
// //Id = Guid.NewGuid(), // не пойму почему не нужно это поле. с ним ошибка.
// DateCreated = DateTimeOffset.UtcNow,
// Name = mask.Trim(),
// JobAutoControlId = orig.Id
// }));
orig.JobAutoControlInEkStatuses.Clear();
request.EnabledEkStatuses.ForEach(status => orig.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus
{
EkStatusCode = (int)status,
JobAutoControlId = orig.Id
}));
// orig.JobAutoControlInEkStatuses.Clear();
// request.EnabledEkStatuses.ForEach(status => orig.JobAutoControlInEkStatuses.Add(new JobAutoControlInEkStatus
// {
// EkStatusCode = (int)status,
// JobAutoControlId = orig.Id
// }));
if (!await jobAutoControlService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при изменении записи." } }));
// if (!await jobAutoControlService.CommitAsync())
// return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при изменении записи." } }));
var updatedObj = await jobAutoControlService.Get()
.Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
.Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
.FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
// var updatedObj = await jobAutoControlService.Get()
// .Include(t => t.ApplicationsInWork).ThenInclude(t => t.WorkGroups).ThenInclude(t => t.WorkGroup)
// .Include(t => t.JobEkMasks)
// .Include(t => t.JobAutoControlInEkStatuses).ThenInclude(t => t.EkStatus)
// .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>
/// <param name="applicationInWorkId"></param>
/// <returns></returns>
[HttpDelete(ApiRoutes.JobAutoControl.Delete)]
public async Task<IActionResult> Delete([FromRoute] Guid applicationInWorkId)
{
var obj = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
///// <summary>
///// Удалить настройки автоматического управления РР
///// </summary>
///// <param name="applicationInWorkId"></param>
///// <returns></returns>
//[HttpDelete(ApiRoutes.JobAutoControl.Delete)]
//public async Task<IActionResult> Delete([FromRoute] Guid applicationInWorkId)
//{
// var obj = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.ApplicationInWorkId == applicationInWorkId);
if (obj == null)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроект. Не найден настройки с {nameof(applicationInWorkId)}: {applicationInWorkId}" } }));
// if (obj == null)
// return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроект. Не найден настройки с {nameof(applicationInWorkId)}: {applicationInWorkId}" } }));
if (!jobAutoControlService.Delete(obj) || !await jobAutoControlService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при удалении настроек." } }));
// if (!jobAutoControlService.Delete(obj) || !await jobAutoControlService.CommitAsync())
// 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
CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>()
.Include<ApplicationsInWork, ApplicationInWorkResponse>()
.ForMember(d => d.Application, o => o.MapFrom(s => s.Application));
//CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>()
// .Include<ApplicationsInWork, ApplicationInWorkResponse>()
// .ForMember(d => d.Application, o => o.MapFrom(s => s.Application));
CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>();
//CreateMap<ApplicationsInWork, ApplicationInWorkBaseResponse>();
CreateMap<ApplicationsInWork, ApplicationInWorkResponse>()
.ForMember(d => d.Work, o => o.MapFrom(s => s.Work))
//.ForMember(d => d.TemplatesCount, o => o.MapFrom(s => s.Templates.Count()))
.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.AutoControl, o => o.MapFrom(s => s.JobAutoControl));
//CreateMap<ApplicationsInWork, ApplicationInWorkResponse>()
// .ForMember(d => d.Work, o => o.MapFrom(s => s.Work))
// //.ForMember(d => d.TemplatesCount, o => o.MapFrom(s => s.Templates.Count()))
// .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.AutoControl, o => o.MapFrom(s => s.JobAutoControl));
#endregion
@@ -375,24 +375,24 @@ namespace PARR.API.MappingProfiles
#endregion
#region JobAutoControl
//#region JobAutoControl
CreateMap<JobAutoControl, JobAutoControlBaseResponse>()
.Include<JobAutoControl, JobAutoControlResponse>();
//CreateMap<JobAutoControl, JobAutoControlBaseResponse>()
// .Include<JobAutoControl, JobAutoControlResponse>();
CreateMap<JobAutoControl, JobAutoControlResponse>()
.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.WorkGroups, o => o.MapFrom(s => s.ApplicationsInWork!.WorkGroups.Select(t => t.WorkGroup).OrderBy(t => t.Name)));
//CreateMap<JobAutoControl, JobAutoControlResponse>()
// .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.WorkGroups, o => o.MapFrom(s => s.ApplicationsInWork!.WorkGroups.Select(t => t.WorkGroup).OrderBy(t => t.Name)));
#endregion
//#endregion
#region ResponseArea
CreateMap<ResponseArea, ResponseAreaResponse>();
#endregion
CreateMap<JobEkMask, JobEkMaskResponse>();
//CreateMap<JobEkMask, JobEkMaskResponse>();
CreateMap<EkStatus, EkStatusResponse>();