сдала 6
This commit is contained in:
parent
04a846ad63
commit
6a575720f1
@ -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)
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user