сдала 6

This commit is contained in:
Казначеева Елизавета 2024-05-08 10:56:30 +04:00
parent 04a846ad63
commit 6a575720f1
3 changed files with 21 additions and 17 deletions

View File

@ -63,7 +63,7 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
model.Status = newStatus; model.Status = newStatus;
if (model.Status == OrderStatus.Выдан) if (model.Status == OrderStatus.Готов)
model.DateImplement = DateTime.Now; model.DateImplement = DateTime.Now;
if (viewModel.ImplementerId.HasValue) if (viewModel.ImplementerId.HasValue)

View File

@ -22,14 +22,13 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
_logger = logger; _logger = logger;
_rnd = new Random(1000); _rnd = new Random(1000);
} }
public void DoWork(IImplementerLogic implementerLogic, IOrderLogic public void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic)
orderLogic)
{ {
_orderLogic = orderLogic; _orderLogic = orderLogic;
var implementers = implementerLogic.ReadList(null); var implementers = implementerLogic.ReadList(null);
if (implementers == null) if (implementers == null)
{ {
_logger.LogWarning("DoWork. Implementers is null"); _logger.LogWarning("DoWork. Исполнитель равен null");
return; return;
} }
var orders = _orderLogic.ReadList(new OrderSearchModel var orders = _orderLogic.ReadList(new OrderSearchModel
@ -47,21 +46,24 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
Task.Run(() => WorkerWorkAsync(implementer, orders)); Task.Run(() => WorkerWorkAsync(implementer, orders));
} }
} }
/// <summary>
/// Иммитация работы исполнителя /// Иммитация работы исполнителя
/// </summary>
/// <param name="implementer"></param>
/// <param name="orders"></param>
private async Task WorkerWorkAsync(ImplementerViewModel implementer, List<OrderViewModel> orders) private async Task WorkerWorkAsync(ImplementerViewModel implementer, List<OrderViewModel> orders)
{ {
if (_orderLogic == null || implementer == null) if (_orderLogic == null || implementer == null)
{ {
return; return;
} }
await RunOrderInWork(implementer);
await Task.Run(() => await Task.Run(() =>
{ {
foreach (var order in orders) foreach (var order in orders)
{ {
try try
{ {
RunOrderInWork(implementer);
_logger.LogDebug("DoWork. Worker {Id} try get order {Order} ", implementer.Id, order.Id); _logger.LogDebug("DoWork. Worker {Id} try get order {Order} ", implementer.Id, order.Id);
// пытаемся назначить заказ на исполнителя // пытаемся назначить заказ на исполнителя
_orderLogic.TakeOrderInWork(new OrderBindingModel _orderLogic.TakeOrderInWork(new OrderBindingModel
@ -70,15 +72,14 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
ImplementerId = implementer.Id ImplementerId = implementer.Id
}); });
// делаем работу // делаем работу
Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 10000) * order.Count);
_logger.LogDebug("DoWork. Worker {Id} finish order {Order} ", implementer.Id, order.Id); _logger.LogDebug("DoWork. Worker {Id} finish order {Order} ", implementer.Id, order.Id);
_orderLogic.FinishOrder(new OrderBindingModel _orderLogic.FinishOrder(new OrderBindingModel
{ {
Id = order.Id Id = order.Id,
}); });
// отдыхаем
Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); Thread.Sleep(implementer.Qualification * _rnd.Next(10, 50));
} }
// кто-то мог уже перехватить заказ, игнорируем ошибку // кто-то мог уже перехватить заказ, игнорируем ошибку
catch (InvalidOperationException ex) catch (InvalidOperationException ex)
@ -94,7 +95,11 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
} }
}); });
} }
/// <summary>
/// Ищем заказ, которые уже в работе (вдруг исполнителя прервали) /// Ищем заказ, которые уже в работе (вдруг исполнителя прервали)
/// </summary>
/// <param name="implementer"></param>
/// <returns></returns>
private async Task RunOrderInWork(ImplementerViewModel implementer) private async Task RunOrderInWork(ImplementerViewModel implementer)
{ {
if (_orderLogic == null || implementer == null) if (_orderLogic == null || implementer == null)
@ -103,8 +108,7 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
} }
try try
{ {
var runOrder = await Task.Run(() => _orderLogic.ReadElement(new var runOrder = await Task.Run(() => _orderLogic.ReadElement(new OrderSearchModel
OrderSearchModel
{ {
ImplementerId = implementer.Id, ImplementerId = implementer.Id,
Statuses = new() { OrderStatus.Выполняется } Statuses = new() { OrderStatus.Выполняется }
@ -115,8 +119,7 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics
} }
_logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id); _logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id);
// доделываем работу // доделываем работу
Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count);
runOrder.Count);
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id);
_orderLogic.FinishOrder(new OrderBindingModel _orderLogic.FinishOrder(new OrderBindingModel
{ {

View File

@ -96,6 +96,7 @@
Controls.Add(dataGridView); Controls.Add(dataGridView);
Name = "FormImplementers"; Name = "FormImplementers";
Text = "Исполнители"; Text = "Исполнители";
Load += FormImplementers_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false); ResumeLayout(false);
} }