diff --git a/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/OrderLogic.cs b/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/OrderLogic.cs index f44c7d0..922c166 100644 --- a/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/OrderLogic.cs @@ -63,7 +63,7 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics model.Status = newStatus; - if (model.Status == OrderStatus.Выдан) + if (model.Status == OrderStatus.Готов) model.DateImplement = DateTime.Now; if (viewModel.ImplementerId.HasValue) diff --git a/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/WorkModeling.cs b/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/WorkModeling.cs index 9ac90ff..24de305 100644 --- a/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/SoftwareInstallation/SoftwareInstallationBusinessLogic/BusinessLogics/WorkModeling.cs @@ -22,14 +22,13 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics _logger = logger; _rnd = new Random(1000); } - public void DoWork(IImplementerLogic implementerLogic, IOrderLogic - orderLogic) + public void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic) { _orderLogic = orderLogic; var implementers = implementerLogic.ReadList(null); if (implementers == null) { - _logger.LogWarning("DoWork. Implementers is null"); + _logger.LogWarning("DoWork. Исполнитель равен null"); return; } var orders = _orderLogic.ReadList(new OrderSearchModel @@ -47,22 +46,25 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics Task.Run(() => WorkerWorkAsync(implementer, orders)); } } + /// /// Иммитация работы исполнителя + /// + /// + /// private async Task WorkerWorkAsync(ImplementerViewModel implementer, List orders) { if (_orderLogic == null || implementer == null) { return; } - + await RunOrderInWork(implementer); await Task.Run(() => { foreach (var order in orders) { 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 { @@ -70,15 +72,14 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics ImplementerId = implementer.Id }); // делаем работу - Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); - _logger.LogDebug("DoWork. Worker {Id} finish order { Order}", implementer.Id, order.Id); - + Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 10000) * order.Count); + _logger.LogDebug("DoWork. Worker {Id} finish order {Order} ", implementer.Id, order.Id); _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) @@ -94,7 +95,11 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics } }); } + /// /// Ищем заказ, которые уже в работе (вдруг исполнителя прервали) + /// + /// + /// private async Task RunOrderInWork(ImplementerViewModel implementer) { if (_orderLogic == null || implementer == null) @@ -103,8 +108,7 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics } try { - var runOrder = await Task.Run(() => _orderLogic.ReadElement(new - OrderSearchModel + var runOrder = await Task.Run(() => _orderLogic.ReadElement(new OrderSearchModel { ImplementerId = implementer.Id, Statuses = new() { OrderStatus.Выполняется } @@ -115,8 +119,7 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogics } _logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id); // доделываем работу - Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * - runOrder.Count); + Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id); _orderLogic.FinishOrder(new OrderBindingModel { diff --git a/SoftwareInstallation/SoftwareInstallationView/FormImplementers.Designer.cs b/SoftwareInstallation/SoftwareInstallationView/FormImplementers.Designer.cs index b59943a..0281b39 100644 --- a/SoftwareInstallation/SoftwareInstallationView/FormImplementers.Designer.cs +++ b/SoftwareInstallation/SoftwareInstallationView/FormImplementers.Designer.cs @@ -96,6 +96,7 @@ Controls.Add(dataGridView); Name = "FormImplementers"; Text = "Исполнители"; + Load += FormImplementers_Load; ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ResumeLayout(false); }