/// <summary> /// Получить список плавок в очереди /// </summary> /// <returns></returns> private async Task <List <LandingData> > GetLandingOrder() { // 1. Получить список плавок // 2. Для каждой плавки из списка получить количество возвратов // 3. Для каждой плавки из списка получить количество браков // 4. Для каждой плавки из списка получить количество заготовок на поде печи // 5. Для каждой плавки из списка получить количество заготовок, выданных из печи // 6. Для каждой плавки из списка получить количество прокатанных заготвок List <LandingData> result = Db.GetLandingOrder(); // Получение данных по каждой плавке foreach (LandingData item in result) { // Количество взвешенных заготовок WeightedIngotsCount weighted = Db.GetWeightedIngotsCount(item.LandingId); item.WeightedIngots = weighted.WeightedCount; // Количество возвратов List <ReturningData> returns = Db.GetReturns(item.MeltNumber); if (returns.Count > 0) { foreach (ReturningData t in returns) { item.IngotsReturned += t.IngotsCount; } } await Task.Delay(200); } // Разнесение плавко по разным окнам _window1 = new List <LandingData>(); _window2 = new List <LandingData>(); _window3 = new List <LandingData>(); foreach (LandingData item in _landed) { if (item.WeightedIngots == 0) { _window1.Add(item); } else if (item.Weighted == 0) { _window2.Add(item); } else { _window3.Add(item); } } return(result); }
/// <summary> /// Получить список плавок в очереди /// </summary> /// <param name="testDb">Запрос к тестовой базе</param> /// <param name="permanent">Немедленный запрос</param> /// <returns></returns> private List <LandingData> GetLandingOrder(bool testDb = false, bool permanent = false) { DateTime now = DateTime.Now; List <LandingData> result = new List <LandingData>(); // Проверка времени последнего запроса if (_lastQueryTime == DateTime.MinValue) { _lastQueryTime = now; } else { if ((now - _lastQueryTime <= _workInterval) || permanent) { result = Db.GetLandingOrder("", 0, testDb); // Проверка на наличие возвожности удаления плавки foreach (LandingData item in result) { int testUid = Db.GetTestLandingId(item.LandingId); WeightedIngotsCount weighted = Db.GetWeightedIngotsCount(testUid); item.WeightedIngots = weighted.WeightedCount; if (item.Weighted == 0 && item.WeightedIngots == 0) { item.CanBeDeleted = true; } } } else { // АРМ проработал один час или более, требуется пауза в 1 минуту // _logger.Warn($"Работаем слишком долго [с {_lastQueryTime:G} {_workInterval:c}], требуется пауза"); if (_lastPausedTime == DateTime.MinValue) { _lastPausedTime = now; } if (now - _lastPausedTime >= _pauseInterval) { _lastQueryTime = now; } result = _landed; } } return(result); }