feat(master): Подкготовка расписания
This commit is contained in:
2661
PARR.DAL/Migrations/20231024020909_TblOrderAddNextStatusCode.Designer.cs
generated
Normal file
2661
PARR.DAL/Migrations/20231024020909_TblOrderAddNextStatusCode.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,92 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace PARR.DAL.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class TblOrderAddNextStatusCode : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "FK_Orders_OrderStatuses_OrderStatusCode",
|
||||||
|
table: "Orders");
|
||||||
|
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "OrderStatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
newName: "StatusCode");
|
||||||
|
|
||||||
|
migrationBuilder.RenameIndex(
|
||||||
|
name: "IX_Orders_OrderStatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
newName: "IX_Orders_StatusCode");
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "NextStatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
type: "integer",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Orders_NextStatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
column: "NextStatusCode");
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "FK_Orders_OrderStatuses_NextStatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
column: "NextStatusCode",
|
||||||
|
principalTable: "OrderStatuses",
|
||||||
|
principalColumn: "Code");
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "FK_Orders_OrderStatuses_StatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
column: "StatusCode",
|
||||||
|
principalTable: "OrderStatuses",
|
||||||
|
principalColumn: "Code",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "FK_Orders_OrderStatuses_NextStatusCode",
|
||||||
|
table: "Orders");
|
||||||
|
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "FK_Orders_OrderStatuses_StatusCode",
|
||||||
|
table: "Orders");
|
||||||
|
|
||||||
|
migrationBuilder.DropIndex(
|
||||||
|
name: "IX_Orders_NextStatusCode",
|
||||||
|
table: "Orders");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "NextStatusCode",
|
||||||
|
table: "Orders");
|
||||||
|
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "StatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
newName: "OrderStatusCode");
|
||||||
|
|
||||||
|
migrationBuilder.RenameIndex(
|
||||||
|
name: "IX_Orders_StatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
newName: "IX_Orders_OrderStatusCode");
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "FK_Orders_OrderStatuses_OrderStatusCode",
|
||||||
|
table: "Orders",
|
||||||
|
column: "OrderStatusCode",
|
||||||
|
principalTable: "OrderStatuses",
|
||||||
|
principalColumn: "Code",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1564,17 +1564,20 @@ namespace PARR.DAL.Migrations
|
|||||||
b.Property<DateTimeOffset?>("DateModified")
|
b.Property<DateTimeOffset?>("DateModified")
|
||||||
.HasColumnType("timestamp with time zone");
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.Property<int?>("NextStatusCode")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.Property<string>("Number")
|
b.Property<string>("Number")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("text");
|
.HasColumnType("text");
|
||||||
|
|
||||||
b.Property<int>("OrderStatusCode")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<string>("ShortName")
|
b.Property<string>("ShortName")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("text");
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int>("StatusCode")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.Property<Guid?>("TemplateId")
|
b.Property<Guid?>("TemplateId")
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
@@ -1583,7 +1586,9 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("OrderStatusCode");
|
b.HasIndex("NextStatusCode");
|
||||||
|
|
||||||
|
b.HasIndex("StatusCode");
|
||||||
|
|
||||||
b.HasIndex("TemplateId");
|
b.HasIndex("TemplateId");
|
||||||
|
|
||||||
@@ -2382,9 +2387,13 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Order", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Order", b =>
|
||||||
{
|
{
|
||||||
|
b.HasOne("PARR.DAL.Models.OrderStatus", "NextStatus")
|
||||||
|
.WithMany("OrdersNext")
|
||||||
|
.HasForeignKey("NextStatusCode");
|
||||||
|
|
||||||
b.HasOne("PARR.DAL.Models.OrderStatus", "OrderStatus")
|
b.HasOne("PARR.DAL.Models.OrderStatus", "OrderStatus")
|
||||||
.WithMany("Orders")
|
.WithMany("Orders")
|
||||||
.HasForeignKey("OrderStatusCode")
|
.HasForeignKey("StatusCode")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
@@ -2392,6 +2401,8 @@ namespace PARR.DAL.Migrations
|
|||||||
.WithMany("Orders")
|
.WithMany("Orders")
|
||||||
.HasForeignKey("TemplateId");
|
.HasForeignKey("TemplateId");
|
||||||
|
|
||||||
|
b.Navigation("NextStatus");
|
||||||
|
|
||||||
b.Navigation("OrderStatus");
|
b.Navigation("OrderStatus");
|
||||||
|
|
||||||
b.Navigation("Template");
|
b.Navigation("Template");
|
||||||
@@ -2577,6 +2588,8 @@ namespace PARR.DAL.Migrations
|
|||||||
modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b =>
|
modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("Orders");
|
b.Navigation("Orders");
|
||||||
|
|
||||||
|
b.Navigation("OrdersNext");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Process", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Process", b =>
|
||||||
|
|||||||
@@ -25,14 +25,25 @@ namespace PARR.DAL.Models
|
|||||||
|
|
||||||
public Guid? TemplateId { get; set; }
|
public Guid? TemplateId { get; set; }
|
||||||
|
|
||||||
public int OrderStatusCode { get; set; }
|
/// <summary>
|
||||||
|
/// Статус в ЕСПП
|
||||||
|
/// </summary>
|
||||||
|
public int StatusCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Статус который должен быть в ЕСПП
|
||||||
|
/// </summary>
|
||||||
|
public int? NextStatusCode { get; set; }
|
||||||
|
|
||||||
[ForeignKey(nameof(TemplateId))]
|
[ForeignKey(nameof(TemplateId))]
|
||||||
public Template? Template { get; set; }
|
public Template? Template { get; set; }
|
||||||
|
|
||||||
[ForeignKey(nameof(OrderStatusCode))]
|
[ForeignKey(nameof(StatusCode))]
|
||||||
public OrderStatus? OrderStatus { get; set; }
|
public OrderStatus? OrderStatus { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey(nameof(NextStatusCode))]
|
||||||
|
public OrderStatus? NextStatus { get; set; }
|
||||||
|
|
||||||
public ICollection<AgentHistory> AgentHistories { get; set; } = new HashSet<AgentHistory>();
|
public ICollection<AgentHistory> AgentHistories { get; set; } = new HashSet<AgentHistory>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ namespace PARR.DAL.Models
|
|||||||
|
|
||||||
public required string Description { get; set; }
|
public required string Description { get; set; }
|
||||||
|
|
||||||
|
[InverseProperty(nameof(Order.OrderStatus))]
|
||||||
public ICollection<Order> Orders { get; set; } = new HashSet<Order>();
|
public ICollection<Order> Orders { get; set; } = new HashSet<Order>();
|
||||||
|
|
||||||
|
[InverseProperty(nameof(Order.NextStatus))]
|
||||||
|
public ICollection<Order> OrdersNext { get; set; } = new HashSet<Order>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace PARR.EsppOrderLoader.Services
|
|||||||
WorkGroup = esppOrder.WorkGroup,
|
WorkGroup = esppOrder.WorkGroup,
|
||||||
ShortName = esppOrder.ShortName,
|
ShortName = esppOrder.ShortName,
|
||||||
TemplateId = template?.Id,
|
TemplateId = template?.Id,
|
||||||
OrderStatusCode = (int)orderStatusService.GetOrderStatusByName(esppOrder.Status)
|
StatusCode = (int)orderStatusService.GetOrderStatusByName(esppOrder.Status)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!await orderService.CreateAsync(newOrder) || !await orderService.CommitAsync())
|
if (!await orderService.CreateAsync(newOrder) || !await orderService.CommitAsync())
|
||||||
|
|||||||
7
PARR.Master/IMaster.cs
Normal file
7
PARR.Master/IMaster.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace PARR.Master
|
||||||
|
{
|
||||||
|
public interface IMaster
|
||||||
|
{
|
||||||
|
Task StartAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
45
PARR.Master/Master.cs
Normal file
45
PARR.Master/Master.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using PARR.Master.Settings;
|
||||||
|
|
||||||
|
namespace PARR.Master
|
||||||
|
{
|
||||||
|
internal class Master : IMaster
|
||||||
|
{
|
||||||
|
private readonly WorkerSettings settings;
|
||||||
|
private readonly ILogger<Master> logger;
|
||||||
|
|
||||||
|
public Master(
|
||||||
|
WorkerSettings settings,
|
||||||
|
ILogger<Master> logger
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.settings = settings;
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task StartAsync()
|
||||||
|
{
|
||||||
|
logger.LogInformation("Запуск сервиса.");
|
||||||
|
|
||||||
|
var nextStart = DateTime.Now;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
|
||||||
|
{
|
||||||
|
logger.LogInformation("Запуск по расписанию.");
|
||||||
|
|
||||||
|
//todo:
|
||||||
|
// await Tratata();
|
||||||
|
|
||||||
|
nextStart = DateTime.Now.Add(settings.RepeatEvery);
|
||||||
|
logger.LogInformation($"Следующая дата запуска: {nextStart}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Каждую минуту
|
||||||
|
await Task.Delay(60 * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,4 +11,8 @@
|
|||||||
<ProjectReference Include="..\PARR.DAL\PARR.DAL.csproj" />
|
<ProjectReference Include="..\PARR.DAL\PARR.DAL.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Services\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using PARR.BLL;
|
using PARR.BLL;
|
||||||
using PARR.DAL;
|
using PARR.DAL;
|
||||||
|
using PARR.Master.Settings;
|
||||||
|
|
||||||
namespace PARR.Master
|
namespace PARR.Master
|
||||||
{
|
{
|
||||||
@@ -12,14 +13,16 @@ namespace PARR.Master
|
|||||||
services.InstallBllServices(configuration);
|
services.InstallBllServices(configuration);
|
||||||
services.InstallDalServices(configuration);
|
services.InstallDalServices(configuration);
|
||||||
|
|
||||||
// settings
|
var settings = new WorkerSettings();
|
||||||
//SettingsFromDb configuration
|
configuration.GetSection(nameof(WorkerSettings)).Bind(settings);
|
||||||
//var settingsFromDb = new SettingsFromDb();
|
services.AddSingleton(settings);
|
||||||
//configuration.GetSection(nameof(SettingsFromDb)).Bind(settingsFromDb);
|
|
||||||
//services.AddSingleton(settingsFromDb);
|
var mqSettings = new MqSettings();
|
||||||
|
configuration.GetSection(nameof(MqSettings)).Bind(mqSettings);
|
||||||
|
services.AddSingleton(mqSettings);
|
||||||
|
|
||||||
//add other services
|
//add other services
|
||||||
//services.AddTransient<IEsppApiService, EsppApiService>();
|
services.AddTransient<IMaster, Master>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IConfigurationBuilder AddMasterConfigurations(this IConfigurationBuilder builder, IServiceCollection services)
|
public static IConfigurationBuilder AddMasterConfigurations(this IConfigurationBuilder builder, IServiceCollection services)
|
||||||
|
|||||||
12
PARR.Master/Settings/MqSettings.cs
Normal file
12
PARR.Master/Settings/MqSettings.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using PARR.BLL.Contracts.Interfaces;
|
||||||
|
|
||||||
|
namespace PARR.Master.Settings
|
||||||
|
{
|
||||||
|
internal class MqSettings : IMqSettings
|
||||||
|
{
|
||||||
|
public string HostName { get; set; } = string.Empty;
|
||||||
|
public string QueueName { get; set; } = string.Empty;
|
||||||
|
public string User { get; set; } = string.Empty;
|
||||||
|
public string Password { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
7
PARR.Master/Settings/WorkerSettings.cs
Normal file
7
PARR.Master/Settings/WorkerSettings.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace PARR.Master.Settings
|
||||||
|
{
|
||||||
|
internal class WorkerSettings
|
||||||
|
{
|
||||||
|
public TimeSpan RepeatEvery { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,23 +1,21 @@
|
|||||||
|
using PARR.Master;
|
||||||
|
|
||||||
namespace PARR.MasterWorker
|
namespace PARR.MasterWorker
|
||||||
{
|
{
|
||||||
public class Worker : BackgroundService
|
public class Worker : BackgroundService
|
||||||
{
|
{
|
||||||
private readonly ILogger<Worker> _logger;
|
private readonly ILogger<Worker> _logger;
|
||||||
|
private readonly IMaster master;
|
||||||
|
|
||||||
public Worker(ILogger<Worker> logger)
|
public Worker(ILogger<Worker> logger, IMaster master)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
this.master = master;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
await master.StartAsync();
|
||||||
|
|
||||||
//while (!stoppingToken.IsCancellationRequested)
|
|
||||||
//{
|
|
||||||
// _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
|
||||||
// await Task.Delay(1000, stoppingToken);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -31,5 +31,8 @@
|
|||||||
"QueueName": "parr-orders",
|
"QueueName": "parr-orders",
|
||||||
"User": "espp_orders_master",
|
"User": "espp_orders_master",
|
||||||
"Password": "Fjhgsdf*^%9sdfsd2"
|
"Password": "Fjhgsdf*^%9sdfsd2"
|
||||||
|
},
|
||||||
|
"WorkerSettings": {
|
||||||
|
"RepeatEvery": "0:30:00"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user