internal void CalculateOrderById(int orderId) { var timer = new Stopwatch(); timer.Start(); Logger.Log($"Расчет заказа id: {orderId} начат.", LogLevel.Info); Logger.Log($"Получение заказа из базы...", LogLevel.Info); var order = _dbManager.GetOrderById(orderId); Logger.Log($"Заказ загружен из базы. Id: {order.Id}, название: {order.Name}, описание: {order.Description}.", LogLevel.Info); Logger.Log($"Обновление состояния заказа...", LogLevel.Info); _dbManager.SetOrderState(order.Id, OrderState.InProcess); Logger.Log($"Состояние заказа в базе обновлено. Текущее состояние: в процессе.", LogLevel.Info); var assemblingTime = new AssemblingTime(_dbManager); Logger.Log($"Начат расчет времен сборок партий изделий на конвейере для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); assemblingTime.CalculateAssemblingTimes(order); Logger.Log($"Закончен расчет времен сборок партий изделий на конвейере для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); var grouping = new GroupingDetails(_dbManager); //Сортировка операций согласно маршруту и группировка по цехам grouping.SetWorkshopSequenceForDetails(order); Logger.Log($"Начато группирование деталей по маршрутам их следования для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); grouping.GroupDetails(order); Logger.Log($"Закончено группирование деталей по маршрутам их следования для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); var determiningDetailsOrder = new DeterminingDetailsOrder(_dbManager); Logger.Log($"Начато определение порядка обработки деталей на станках для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); determiningDetailsOrder.DetermineDetailsOrderInGroups(order); Logger.Log($"Закончено определение порядка обработки деталей на станках для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); var transports = _dbManager.GetAvailableTransport(); var determiningGroupsOrder = new DeterminingGroupsOrder(_dbManager, transports); Logger.Log($"Начато определение порядка обработки групп для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); determiningGroupsOrder.DetermineGroupsOrder(order); Logger.Log($"Закончено определение порядка обработки групп для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); Logger.Log($"Начат подсчет времен для части заказов (партий изделий) для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); OrderQuantumsTiming.CountTimeForOrderQuantums(order); Logger.Log($"Закончен подсчет времен для части заказов (партий изделий) для заказа: id = {order.Id}, название = '{order.Name}'.", LogLevel.Info); _dbManager.SetOrderState(order.Id, OrderState.Ready); timer.Stop(); Logger.Log($"Расчет заказа завершен. Занятое время: {timer.Elapsed}.", LogLevel.Info); Logger.Log($"Начато формирование отчета.", LogLevel.Info); var reporting = new Reporting(_dbManager); var report = reporting.GenerateReport(order); Logger.Log($"Закончено формирование отчета.", LogLevel.Info); _dbManager.CreateReport(report); Logger.Log($"Отчет сохранен в базу.", LogLevel.Info); Logger.Log($"Начато формирование отчета в виде файла CSV.", LogLevel.Info); var csvExporter = new CsvExporter(_dbManager); csvExporter.GenerateCsvExportFile(order); Logger.Log($"Закончено формирование отчета в виде файла CSV.", LogLevel.Info); }
public DetailsTiming(DbManager dbManager) { _dbManager = dbManager; _groupingDetails = new GroupingDetails(_dbManager); }