Beispiel #1
0
        //Обработка новых заказов, самый фарш тут
        public async Task Invoke()
        {
            //Ищем новые заказы
            var status = _context.Processings
                         .AsNoTracking()
                         .Where(p => p.Status == "new")
                         .ToList();

            if (status.Count > 0)
            {
                //вытаскиваем словарь с системой и методом который должен быть вызван
                Process process    = new Process(_context);
                Type    type       = typeof(Process);
                var     dictionary = _context.Choices
                                     .AsNoTracking()
                                     .ToDictionary(c => c.Key, c => c.Value);

                //Находим в таблице ордеров записи по вытащенным идшникам
                foreach (var processing in status)
                {
                    var item = _context.Orders.AsNoTracking().FirstOrDefault(o => o.Id == processing.OrderId);
                    //Для каждой итерации смотрим название метода в словаре по ключу
                    //через рефлексию находим метод и вызываем его для каждой системы собственный
                    var        method = dictionary.FirstOrDefault(d => d.Key == item.SystemType);
                    MethodInfo info   = type.GetMethod(method.Value);

                    try
                    {
                        //Вызываем найденный метод с json
                        var    obj  = info?.Invoke(process, new object[] { item.SourceOrder });
                        string json = (string)obj;

                        item.ConvertedOrder = json;
                        processing.Status   = StatusOrder.Finish;
                        _context.Orders.Update(item);
                        _context.Processings.Update(processing);
                    }
                    catch (Exception ex)
                    {
                        //Делаем гарантированный запуск задачи в новом
                        //потоке чтобы не прерывал обработку заказов
                        //и передаем управление новой итерации
                        new Thread(async() => await
                                   ErrorService.AlarmaAhtungWarningErrorMethodAsync(ex.Message)).Start();
                        continue;
                    }
                }

                await _context.SaveChangesAsync();
            }
        }
Beispiel #2
0
 public string UberHandlerMethod(string json)
 {
     try
     {
         throw new JsonException("Упс, ошибочка вышла в uber");
     }
     catch (Exception ex)
     {
         new Thread(async() => await
                    ErrorService.AlarmaAhtungWarningErrorMethodAsync($"{ex.Message}")).Start();
         //Будем считать что обработка прошла успешно и возвращаем
         //исходный json который будет сохранен в столбце как обработанный
         //Ибо, раз обработка этого типа заказа заключается в выбрасывании исключения,
         //значит можно считать что она проделана
         return(json);
     }
 }