コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }