diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index 76303811..a142816c 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -56,6 +56,7 @@
{
public const string GetAll = Base + "/templates/";
public const string Get = Base + "/templates/" + getParam;
+ public const string ChangeState = Base + "/templates/" + getParam + "/change-state";
//public const string SetOkStatus = Base + "/templates/" + getParam + "/status/ok";
//public const string GetByStatusCode = Base + "/templates/status/{statusCode}";
diff --git a/PARR.API/Contracts/V1/Requests/TemplateChangeStateRequest.cs b/PARR.API/Contracts/V1/Requests/TemplateChangeStateRequest.cs
new file mode 100644
index 00000000..121695af
--- /dev/null
+++ b/PARR.API/Contracts/V1/Requests/TemplateChangeStateRequest.cs
@@ -0,0 +1,15 @@
+namespace PARR.API.Contracts.V1.Requests
+{
+ public class TemplateChangeStateRequest
+ {
+ ///
+ /// Активировать шаблон
+ ///
+ public bool IsActiveTemplate { get; set; }
+
+ ///
+ /// Активировать расписание
+ ///
+ public bool IsActiveSchedule { get; set; }
+ }
+}
diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs
index 7e49b66b..94a4a38a 100644
--- a/PARR.API/Controllers/V1/TemplateController.cs
+++ b/PARR.API/Controllers/V1/TemplateController.cs
@@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1;
+using PARR.API.Contracts.V1.Requests;
using PARR.API.Contracts.V1.Requests.Queries;
using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base;
@@ -20,16 +21,19 @@ namespace PARR.API.Controllers.V1
private readonly IMapper mapper;
private readonly ITemplateService templateService;
private readonly SettingsFromDb settingsFromDb;
+ private readonly IRobotConfigurationService robotConfigurationService;
public TemplateController(
IMapper mapper,
ITemplateService templateService,
- SettingsFromDb settingsFromDb
+ SettingsFromDb settingsFromDb,
+ IRobotConfigurationService robotConfigurationService
)
{
this.mapper = mapper;
this.templateService = templateService;
this.settingsFromDb = settingsFromDb;
+ this.robotConfigurationService = robotConfigurationService;
}
@@ -44,7 +48,7 @@ namespace PARR.API.Controllers.V1
var paginationFilter = mapper.Map(paginationQuery);
IQueryable query = templateService.GetWithIncludes()
- .Include(t => t.RobotConfigurations).ThenInclude(t=>t.Robot)
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
.Include(t => t.RobotConfigurations).ThenInclude(t => t.TaskStatus)
.Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
.OrderBy(t => t.Name)
@@ -88,6 +92,56 @@ namespace PARR.API.Controllers.V1
return Ok(new Response(response, true));
}
+
+ ///
+ /// Изменить статус у шаблона по ИД (активировать/деактивировать)
+ ///
+ ///
+ ///
+ [HttpPut(ApiRoutes.Template.ChangeState)]
+ public async Task ChangeState([FromRoute] Guid id, [FromBody] TemplateChangeStateRequest request)
+ {
+ var template = await templateService.GetWithIncludes()
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.TaskStatus)
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
+ .AsSplitQuery()
+ .FirstOrDefaultAsync(t => t.Id == id);
+
+ if (template == null)
+ return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Не найден шаблона с id: {id}" } }));
+
+ if (template.IsActiveTemplate != request.IsActiveTemplate)
+ {
+ template.IsActiveTemplate = request.IsActiveTemplate;
+ //необходимо обновить шаблон
+ var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template);
+ robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
+ }
+
+ if (template.IsActiveSchedule != request.IsActiveSchedule)
+ {
+ template.IsActiveSchedule = request.IsActiveSchedule;
+ //необходимо обновить расписание
+ var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, ref template);
+ robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
+ }
+
+ if (!await templateService.CommitAsync())
+ return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при изменении шаблона." } }));
+
+ var templateToResponse = await templateService.GetWithIncludes()
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.TaskStatus)
+ .Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
+ .AsSplitQuery()
+ .FirstOrDefaultAsync(t => t.Id == id);
+
+ var response = mapper.Map(templateToResponse);
+
+ return Ok(new Response(response, true));
+ }
+
///
/// Получить один шаблон по заданному статусу
///
diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
index 694b4bb2..02cb8700 100644
--- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs
+++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
@@ -115,6 +115,7 @@ namespace PARR.API.MappingProfiles
.ForMember(d => d.RepeatRange, o => o.MapFrom())
.ForMember(d => d.GenerationTime, o => o.MapFrom(s => s.Template!.ApplicationsInWork!.ScheduleGenerationTime))
.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetFirstStart(s.Template!.ApplicationsInWork!.ScheduleStartDate, s.Template!.ApplicationsInWork!.ScheduleGenerationTime)))
+ //.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextScheduleStart(s.Template!.NextScheduleStart)))
.ForMember(d => d.ScheduleType, o => o.MapFrom(s =>
s.Template!.ApplicationsInWork!.EsppSchValues!.First()!.EsppSchTypeConfig!.EsppSchTypeSchedule!.Description))
.ForMember(d => d.ScheduleTypeCode, o => o.MapFrom(s =>
diff --git a/PARR.BLL/Helpers/EsppScheduleHelpers.cs b/PARR.BLL/Helpers/EsppScheduleHelpers.cs
index b2682420..f7cd80da 100644
--- a/PARR.BLL/Helpers/EsppScheduleHelpers.cs
+++ b/PARR.BLL/Helpers/EsppScheduleHelpers.cs
@@ -16,5 +16,15 @@ namespace PARR.BLL.Helpers
return date.ToString("dd/MM/yy HH:mm:ss", CultureInfo.InvariantCulture);
}
+
+ /////
+ ///// Получить дату следующего старта в формате для ЕСПП
+ /////
+ /////
+ /////
+ //public static string GetNextScheduleStart(DateTimeOffset date)
+ //{
+ // return date.ToString("dd/MM/yy HH:mm:ss", CultureInfo.InvariantCulture);
+ //}
}
}
diff --git a/PARR.DAL/Contracts/TaskStatusEnum.cs b/PARR.DAL/Contracts/TaskStatusEnum.cs
index 0726a58f..c5c64bb3 100644
--- a/PARR.DAL/Contracts/TaskStatusEnum.cs
+++ b/PARR.DAL/Contracts/TaskStatusEnum.cs
@@ -1,5 +1,8 @@
namespace PARR.DAL.Contracts
{
+ ///
+ /// Статус задания на синхронизацию
+ ///
public enum TaskStatusEnum
{
Creating = 10,
diff --git a/PARR.DAL/Migrations/DataContextModelSnapshot.cs b/PARR.DAL/Migrations/DataContextModelSnapshot.cs
index e165b1dd..6a859028 100644
--- a/PARR.DAL/Migrations/DataContextModelSnapshot.cs
+++ b/PARR.DAL/Migrations/DataContextModelSnapshot.cs
@@ -392,7 +392,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ApplicationTypeId");
- b.ToTable("Applications");
+ b.ToTable("Applications", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b =>
@@ -419,7 +419,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("HostId");
- b.ToTable("ApplicationsInHost");
+ b.ToTable("ApplicationsInHost", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b =>
@@ -443,7 +443,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("ApplicationTypes");
+ b.ToTable("ApplicationTypes", (string)null);
b.HasData(
new
@@ -516,7 +516,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("WorkId", "ApplicationId")
.IsUnique();
- b.ToTable("ApplicationsInWorks");
+ b.ToTable("ApplicationsInWorks", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.EkStatus", b =>
@@ -533,7 +533,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
- b.ToTable("EkStatuses");
+ b.ToTable("EkStatuses", (string)null);
b.HasData(
new
@@ -596,7 +596,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("EsppSchTypes");
+ b.ToTable("EsppSchTypes", (string)null);
b.HasData(
new
@@ -665,7 +665,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TypeScheduleId", "TypeId")
.IsUnique();
- b.ToTable("EsppSchTypeConfigs");
+ b.ToTable("EsppSchTypeConfigs", (string)null);
b.HasData(
new
@@ -768,7 +768,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("EsppSchTypeSchedules");
+ b.ToTable("EsppSchTypeSchedules", (string)null);
b.HasData(
new
@@ -829,7 +829,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TypeId");
- b.ToTable("EsppSchTypeValues");
+ b.ToTable("EsppSchTypeValues", (string)null);
b.HasData(
new
@@ -1432,7 +1432,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TypeValueId");
- b.ToTable("EsppSchValues");
+ b.ToTable("EsppSchValues", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.Host", b =>
@@ -1470,7 +1470,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ResponseAreaCode");
- b.ToTable("Hosts");
+ b.ToTable("Hosts", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.Process", b =>
@@ -1494,7 +1494,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("Processes");
+ b.ToTable("Processes", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b =>
@@ -1511,7 +1511,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
- b.ToTable("ResponseAreas");
+ b.ToTable("ResponseAreas", (string)null);
b.HasData(
new
@@ -1622,7 +1622,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name")
.IsUnique();
- b.ToTable("Robots");
+ b.ToTable("Robots", (string)null);
b.HasData(
new
@@ -1677,7 +1677,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TemplateId", "RobotCode")
.IsUnique();
- b.ToTable("RobotConfigurations");
+ b.ToTable("RobotConfigurations", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.RobotHistory", b =>
@@ -1712,7 +1712,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TaskStatusCode");
- b.ToTable("RobotHistories");
+ b.ToTable("RobotHistories", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b =>
@@ -1733,7 +1733,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Level");
- b.ToTable("RobotHistoryLevels");
+ b.ToTable("RobotHistoryLevels", (string)null);
b.HasData(
new
@@ -1780,7 +1780,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
- b.ToTable("RobotStatuses");
+ b.ToTable("RobotStatuses", (string)null);
b.HasData(
new
@@ -1824,7 +1824,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Name");
- b.ToTable("Settings");
+ b.ToTable("Settings", (string)null);
b.HasData(
new
@@ -1909,7 +1909,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ProcessId");
- b.ToTable("Subprocesses");
+ b.ToTable("Subprocesses", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.TaskStatus", b =>
@@ -1930,7 +1930,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
- b.ToTable("TaskStatuses");
+ b.ToTable("TaskStatuses", (string)null);
b.HasData(
new
@@ -1993,7 +1993,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name")
.IsUnique();
- b.ToTable("Templates");
+ b.ToTable("Templates", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
@@ -2022,7 +2022,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("SubprocessId");
- b.ToTable("Tnks");
+ b.ToTable("Tnks", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Application", b =>
@@ -2048,7 +2048,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ApplicationTypeId");
- b.ToTable("V1_Applications");
+ b.ToTable("V1_Applications", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_ApplicationInHost", b =>
@@ -2080,7 +2080,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("V1_ApplicationId");
- b.ToTable("V1_ApplicationsInHost");
+ b.ToTable("V1_ApplicationsInHost", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_ApplicationType", b =>
@@ -2109,7 +2109,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("V1_ApplicationTypeId");
- b.ToTable("V1_ApplicationTypes");
+ b.ToTable("V1_ApplicationTypes", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Host", b =>
@@ -2148,7 +2148,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("V1_Hosts");
+ b.ToTable("V1_Hosts", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Job", b =>
@@ -2202,7 +2202,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("JobTypeId");
- b.ToTable("V1_Jobs");
+ b.ToTable("V1_Jobs", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobCategory", b =>
@@ -2226,7 +2226,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("V1_JobCategorys");
+ b.ToTable("V1_JobCategorys", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobJournal", b =>
@@ -2270,7 +2270,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("JobStatusId");
- b.ToTable("V1_JobJournals");
+ b.ToTable("V1_JobJournals", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobMode", b =>
@@ -2291,7 +2291,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("V1_JobModes");
+ b.ToTable("V1_JobModes", (string)null);
b.HasData(
new
@@ -2329,7 +2329,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("V1_JobStatuses");
+ b.ToTable("V1_JobStatuses", (string)null);
b.HasData(
new
@@ -2369,7 +2369,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
- b.ToTable("V1_JobTypes");
+ b.ToTable("V1_JobTypes", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.Work", b =>
@@ -2398,7 +2398,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TnkId");
- b.ToTable("Works");
+ b.ToTable("Works", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.Application", b =>
diff --git a/PARR.DAL/Models/ApplicationsInWork.cs b/PARR.DAL/Models/ApplicationsInWork.cs
index d24eaa83..db444432 100644
--- a/PARR.DAL/Models/ApplicationsInWork.cs
+++ b/PARR.DAL/Models/ApplicationsInWork.cs
@@ -28,13 +28,28 @@ namespace PARR.DAL.Models
public required string Solution { get; set; }
+ /////
+ ///// Выполняется автоматически агентом на сервере, скриптами
+ /////
+ //public bool? IsAutomatic { get; set; }
+
+ /////
+ ///// Скрипт для автоматического выполнения
+ /////
+ //public string AgentScript { get; set; } = string.Empty;
+
+ /////
+ ///// Какое-то имя которое мы передаем агенту, пока непонятно что это такое.
+ /////
+ //public string AgentName { get; set; } = string.Empty;
+
///
- /// Расписание: Время создания наряда (чч:мм:сс)
+ /// Расписание: Время создания наряда и выполнения скрипта (чч:мм:сс)
///
public TimeSpan ScheduleGenerationTime { get; set; }
///
- /// Расписание: Следующее срабатывание
+ /// Расписание: Первое срабатывание
///
public DateOnly ScheduleStartDate { get; set; }
diff --git a/PARR.DAL/Models/Template.cs b/PARR.DAL/Models/Template.cs
index b6a14505..63f2dc8d 100644
--- a/PARR.DAL/Models/Template.cs
+++ b/PARR.DAL/Models/Template.cs
@@ -27,6 +27,17 @@ namespace PARR.DAL.Models
///
public string? ScheduleEsppId { get; set; }
+
+ /////
+ ///// Следующая дата срабатываения генерации наряда
+ /////
+ //public DateTimeOffset NextScheduleStart { get; set; }
+
+ /////
+ ///// Следующа дата выполнения скрипта агентом. Может быть нулл если шаблон не автоматический (не выполняется скриптом)
+ /////
+ //public DateTimeOffset? NextScriptStart { get; set; }
+
public Guid ApplicationInWorkId { get; set; }
[ForeignKey(nameof(ApplicationInWorkId))]
diff --git a/PARR.GeneratorTemplates/GeneratorTemplate.cs b/PARR.GeneratorTemplates/GeneratorTemplate.cs
index 0e5fd9be..84cff5d8 100644
--- a/PARR.GeneratorTemplates/GeneratorTemplate.cs
+++ b/PARR.GeneratorTemplates/GeneratorTemplate.cs
@@ -6,8 +6,6 @@ using PARR.BLL.Services.Interfaces;
using PARR.DAL.Models;
using PARR.GeneratorTemplates.Services;
using PARR.GeneratorTemplates.Settings;
-using System.Text;
-using System.Text.Json;
namespace PARR.GeneratorTemplates
{