feat(api,dal): В группу работ добавлено поле IsGroupByResponsible

This commit is contained in:
Mikhail Trubnikov
2026-03-20 15:50:00 +10:00
parent 42ac353198
commit 630b645267
7 changed files with 4295 additions and 33 deletions

View File

@@ -13,6 +13,8 @@
/// </summary>
public Guid? GroupingUnitFieldId { get; set; }
public bool? IsGroupByResponsible { get; set; }
public required string ShortDescription { get; set; }
public required string FullDescription { get; set; }

View File

@@ -25,10 +25,16 @@
public required JobGroupTypeResponse GroupType { get; set; }
/// <summary>
/// По какому полю грппируется, если используется тип ГРУППИРОВКА
/// По какому полю грппируется, если используется тип ГРУППОВОЙ
/// </summary>
public FieldResponse? GroupingUnitField { get; set; }
/// <summary>
/// Группировать по ответственному за ЭК. (только если тип ГРУППОВОЙ)
/// </summary>
public bool? IsGroupByResponsible { get; set; }
/// <summary>
/// Включено автораспределение
/// </summary>

View File

@@ -178,7 +178,8 @@ namespace PARR.API.Controllers.V1
ScheduleExcludeTypeId = request.ScheduleExcludeTypeId,
ScheduleExcludeTypeCalendarId = request.ScheduleExcludeTypeCalendarId,
IsAutoDistributionEnabled = request.IsAutoDistributionEnabled,
IsResponseAreaTimezone = request.IsWorkGroupTimezone
IsResponseAreaTimezone = request.IsWorkGroupTimezone,
IsGroupByResponsible = request.IsGroupByResponsible
//IsAgent = request.IsAgent,
//AgentName = request.AgentName,
//AgentTimeOutSec = request.AgentTimeOutSec,
@@ -274,6 +275,8 @@ namespace PARR.API.Controllers.V1
orig.ScheduleExcludeTypeCalendarId = request.ScheduleExcludeTypeCalendarId;
orig.IsAutoDistributionEnabled = request.IsAutoDistributionEnabled;
orig.IsResponseAreaTimezone = request.IsWorkGroupTimezone;
// IsGroupByResponsible - может быть значение, только если тип ГРУППОВОЙ
orig.IsGroupByResponsible = await GetIsGroupByResponsibleValue(request);
//orig.IsAgent = request.IsAgent;
//orig.AgentName = request.AgentName;
//orig.AgentTimeOutSec = request.AgentTimeOutSec;
@@ -492,6 +495,33 @@ namespace PARR.API.Controllers.V1
jobGroupResponse.MatchingStatus = await GetMatchingStatusAsync(jobGroupResponse.Id);
}
/// <summary>
/// Получить значение IsGroupByResponsible из реквеста
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
private async Task<bool?> GetIsGroupByResponsibleValue(JobGroupRequest request)
{
// IsGroupByResponsible - может быть значение, только если тип ГРУППОВОЙ
if (!request.IsGroupByResponsible.HasValue)
return null;
// Если есть значение, смотрим, групповой ли тип работ, и если нет, то вернем null
var groupingType = await jobGroupTypeService.Get().FirstAsync(t => t.Code == JobGroupTypesEnum.Group);
if (request.GroupTypeId == groupingType.Id)
{
// это групповой тип работ, все ок
return request.IsGroupByResponsible;
}
else
{
// Это не сгруппированный тип, обнуляем IsGroupByResponsible
logger.LogInformation("При сохраненни JobGroup, был передан IsGroupByResponsible: {IsGroupByResponsible}, но при этом, тип группы не сгруппированный, а GroupTypeId: {GroupTypeId}, обнулил IsGroupByResponsible",
request.IsGroupByResponsible, request.GroupTypeId);
return null;
}
}
/// <summary>
/// Смотрим на тип Группы, и возвращаем GroupingUnitFieldId или обнуляем его
@@ -515,7 +545,8 @@ namespace PARR.API.Controllers.V1
else
{
// Это не сгруппированный тип, обнуляем GroupingUnitFieldId
logger.LogWarning($"При сохраненни JobGroup, был передан {nameof(request.GroupingUnitFieldId)}: {request.GroupingUnitFieldId}, но при этом тип группы был не ГРУППА, а {request.GroupTypeId}. Обнулил request.GroupingUnitFieldId");
logger.LogInformation("При сохраненни JobGroup, был передан GroupingUnitFieldId: {GroupingUnitFieldId}, но при этом, тип группы не сгруппированный, а GroupTypeId: {GroupTypeId}, обнулил GroupingUnitFieldId",
request.GroupingUnitFieldId, request.GroupTypeId);
return null;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class tblJobGroupAddIsGroupByResponsible : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsGroupByResponsible",
schema: "job",
table: "Groups",
type: "boolean",
nullable: true);
migrationBuilder.InsertData(
table: "ParrComponents",
columns: new[] { "Id", "Description", "Name" },
values: new object[] { 13, "Генератор шаблонов", "TemplateTaskGenerator" });
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "ParrComponents",
keyColumn: "Id",
keyValue: 13);
migrationBuilder.DropColumn(
name: "IsGroupByResponsible",
schema: "job",
table: "Groups");
}
}
}

View File

@@ -51,7 +51,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TemplateId");
b.ToTable("AgentHistories", (string)null);
b.ToTable("AgentHistories");
});
modelBuilder.Entity("PARR.DAL.Models.AgentHistoryLevel", b =>
@@ -72,7 +72,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
b.ToTable("AgentHistoryLevels", (string)null);
b.ToTable("AgentHistoryLevels");
b.HasData(
new
@@ -101,7 +101,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("WorkGroupId");
b.ToTable("AppInWorkInWorkGroups", (string)null);
b.ToTable("AppInWorkInWorkGroups");
});
modelBuilder.Entity("PARR.DAL.Models.Application", b =>
@@ -130,7 +130,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name", "ApplicationTypeId")
.IsUnique();
b.ToTable("Applications", (string)null);
b.ToTable("Applications");
});
modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b =>
@@ -157,7 +157,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("HostId");
b.ToTable("ApplicationsInHost", (string)null);
b.ToTable("ApplicationsInHost");
});
modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b =>
@@ -181,7 +181,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
b.ToTable("ApplicationTypes", (string)null);
b.ToTable("ApplicationTypes");
b.HasData(
new
@@ -294,7 +294,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("WorkId", "ApplicationId")
.IsUnique();
b.ToTable("ApplicationsInWorks", (string)null);
b.ToTable("ApplicationsInWorks");
});
modelBuilder.Entity("PARR.DAL.Models.DistributionPeriod", b =>
@@ -397,7 +397,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
b.ToTable("EkStatuses", (string)null);
b.ToTable("EkStatuses");
b.HasData(
new
@@ -1516,7 +1516,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("WorkGroupId");
b.ToTable("Hosts", (string)null);
b.ToTable("Hosts");
});
modelBuilder.Entity("PARR.DAL.Models.Job.Job", b =>
@@ -1678,6 +1678,9 @@ namespace PARR.DAL.Migrations
b.Property<bool>("IsAutoDistributionEnabled")
.HasColumnType("boolean");
b.Property<bool?>("IsGroupByResponsible")
.HasColumnType("boolean");
b.Property<bool>("IsResponseAreaTimezone")
.HasColumnType("boolean");
@@ -1909,7 +1912,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TemplateId");
b.ToTable("Orders", (string)null);
b.ToTable("Orders");
});
modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b =>
@@ -1930,7 +1933,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
b.ToTable("OrderStatuses", (string)null);
b.ToTable("OrderStatuses");
b.HasData(
new
@@ -1983,7 +1986,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name")
.IsUnique();
b.ToTable("ParrComponents", (string)null);
b.ToTable("ParrComponents");
b.HasData(
new
@@ -2063,6 +2066,12 @@ namespace PARR.DAL.Migrations
Id = 12,
Description = "Автораспределение РР",
Name = "TemplateDistributor"
},
new
{
Id = 13,
Description = "Генератор шаблонов",
Name = "TemplateTaskGenerator"
});
});
@@ -2090,7 +2099,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("EsppId")
.IsUnique();
b.ToTable("Processes", (string)null);
b.ToTable("Processes");
});
modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b =>
@@ -2107,7 +2116,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
b.ToTable("ResponseAreas", (string)null);
b.ToTable("ResponseAreas");
b.HasData(
new
@@ -2233,7 +2242,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name")
.IsUnique();
b.ToTable("Robots", (string)null);
b.ToTable("Robots");
b.HasData(
new
@@ -2292,7 +2301,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TemplateId", "TaskStatusCode");
b.ToTable("RobotConfigurations", (string)null);
b.ToTable("RobotConfigurations");
});
modelBuilder.Entity("PARR.DAL.Models.RobotHistory", b =>
@@ -2330,7 +2339,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TaskStatusCode");
b.ToTable("RobotHistories", (string)null);
b.ToTable("RobotHistories");
});
modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b =>
@@ -2351,7 +2360,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Level");
b.ToTable("RobotHistoryLevels", (string)null);
b.ToTable("RobotHistoryLevels");
b.HasData(
new
@@ -2398,7 +2407,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
b.ToTable("RobotStatuses", (string)null);
b.ToTable("RobotStatuses");
b.HasData(
new
@@ -2446,7 +2455,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
b.ToTable("Roles", (string)null);
b.ToTable("Roles");
b.HasData(
new
@@ -2615,7 +2624,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Name");
b.ToTable("Settings", (string)null);
b.ToTable("Settings");
b.HasData(
new
@@ -2739,7 +2748,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ProcessId");
b.ToTable("Subprocesses", (string)null);
b.ToTable("Subprocesses");
});
modelBuilder.Entity("PARR.DAL.Models.TaskStatus", b =>
@@ -2760,7 +2769,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code");
b.ToTable("TaskStatuses", (string)null);
b.ToTable("TaskStatuses");
b.HasData(
new
@@ -2846,7 +2855,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name", "Index")
.IsUnique();
b.ToTable("Templates", (string)null);
b.ToTable("Templates");
});
modelBuilder.Entity("PARR.DAL.Models.TemplateHistory", b =>
@@ -2899,7 +2908,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ParentId");
b.ToTable("TemplateHistories", (string)null);
b.ToTable("TemplateHistories");
});
modelBuilder.Entity("PARR.DAL.Models.TemplateStatusType", b =>
@@ -2917,7 +2926,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id");
b.ToTable("TemplateStatusTypes", null, t =>
b.ToTable("TemplateStatusTypes", t =>
{
t.HasComment("Таблица описания критериев выборки аттрибутов ЭК");
});
@@ -2978,7 +2987,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("SubprocessId");
b.ToTable("Tnks", (string)null);
b.ToTable("Tnks");
});
modelBuilder.Entity("PARR.DAL.Models.Unit.Unit", b =>
@@ -3244,7 +3253,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("Ip")
.IsUnique();
b.ToTable("Users", (string)null);
b.ToTable("Users");
});
modelBuilder.Entity("PARR.DAL.Models.UsersInRole", b =>
@@ -3259,7 +3268,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("UserId");
b.ToTable("UsersInRoles", (string)null);
b.ToTable("UsersInRoles");
});
modelBuilder.Entity("PARR.DAL.Models.WeekendDay", b =>
@@ -3299,7 +3308,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ResponseAreaCode");
b.ToTable("WorkGroups", (string)null);
b.ToTable("WorkGroups");
});
modelBuilder.Entity("PARR.DAL.Models.AgentHistory", b =>

View File

@@ -151,6 +151,14 @@ namespace PARR.DAL.Models.Job
public Guid? GroupingUnitFieldId { get; set; }
/// <summary>
/// Группировать по ответственному за ЭК.
/// Если тип группы - "Сгруппированный", то можно менять значение этого поля, в иных случаях - null
/// TODO: По хорошему вынести это в другую таблицу, так как это касается только групповых работ
/// </summary>
public bool? IsGroupByResponsible { get; set; }
/// <summary>
/// Расписание регламентной работы - Тип исключения
/// </summary>