private void Mark(Action<FbExecutor, IDbCommand> setParamsAction)
        {
            if (_mode == Mode.OperationsLog || _mode == Mode.Current)
                // в этих режимах нет данных, которые можно пометить как загруженные
                return;

            using (var executor = new FbExecutor())
            {
                executor.Executor = (connection, transaction) =>
                {
                    // создаем команду
                    using (var command = connection.CreateCommand())
                    {
                        command.Transaction = transaction;
                        // формируем ее текст
                        command.CommandText = GetCommandText();
                        // инициализируем параметры
                        if (setParamsAction != null)
                            setParamsAction(executor, command);

                        lock (_writeSync)
                        {
                            // выполняем команду
                            _eventLink.Post(ConstHelper.EventSource,
                                String.Format(_recordsMarked, command.ExecuteNonQuery()));
                        }
                    }
                };
                executor.Execute();
            }
        }
Example #2
0
 private TableUpdater(Mode mode, ICashDataReader reader, IEventLink eventLink,
     TableMapper mapper, IProgressReporter reporter)
 {
     _mode = mode;
     _reader = reader;
     _eventLink = eventLink;
     _mapper = mapper;
     _reporter = reporter;
     _executor = new FbExecutor { Executor = Execute };
 }
Example #3
0
        private void MarkDelayedUpdateAsHandled(Int64 updateId)
        {
            using (var dbExecutor = new FbExecutor())
            {
                dbExecutor.Executor = (connection, transaction) =>
                {
                    lock (_writeSync)
                    {
                        using (var command = connection.CreateCommand())
                        {
                            command.Transaction = transaction;
                            command.CommandText = _sqlMarkAsHandled;

                            dbExecutor.NewParameter(command, "@id", updateId);

                            command.ExecuteNonQuery();
                        }
                    }
                };
                dbExecutor.Execute();
            }

            _eventLink.Post(ConstHelper.EventSource, String.Format(_delayedUpdateHandled, updateId));
        }
Example #4
0
        private void ProcessPrice(String priceListId)
        {
            using (var fbExecutor = new FbExecutor())
            {
                fbExecutor.Executor = (connection, transaction) => 
                {
                    // создаем команду для обновления цен
                    using (var updateCommand = connection.CreateCommand())
                    {
                        updateCommand.Transaction = transaction;
                        updateCommand.CommandText = _sqlInsPrices;

                        // создаем параметры команды
                        updateCommand.AddParameter("@price_category");
                        updateCommand.AddParameter("@articul");
                        updateCommand.AddParameter("@series_id");
                        updateCommand.AddParameter("@price");
                        updateCommand.AddParameter("@update_mode", (Int32)Mode.Update);

                        updateCommand.Prepare();

                        // читаем содержимое прайс-листа
                        using (var fbReader = new FbReader())
                        {
                            fbReader.Text = _sqlGetPriceBody;
                            fbReader.NewParameter("@price_list_id", priceListId);

                            using (var reader = fbReader.ReadMany())
                            {
                                var readerHelper = new FbReaderHelper(reader);
                                var recordCount = 0;

                                while (reader.Read())
                                {
                                    // устанавливаем значения параметров команды
                                    updateCommand.SetParameter("@price_category", 
                                        readerHelper.GetString(1));
                                    updateCommand.SetParameter("@articul", 
                                        readerHelper.GetString(2));
                                    updateCommand.SetParameter("@series_id",
                                        reader.GetValue(3));
                                    updateCommand.SetParameter("@price",
                                        readerHelper.GetDecimal(4));

                                    // выполняем команду
                                    updateCommand.ExecuteNonQuery();
                                    recordCount++;
                                }

                                _eventLink.Post(ConstHelper.EventSource,
                                    String.Format(_priceProcessed, priceListId, recordCount));
                            }
                        }
                    }

                    // помечаем прайс, как обработанный
                    MarkPriceAsHandled(connection, transaction, priceListId);
                };
                fbExecutor.Execute();
            }
        }
Example #5
0
 public void Dispose()
 {
     if (_executor != null)
     {
         _executor.Dispose();
         _executor = null;
     }
 }
Example #6
0
        private void DelayedUpload(ERPService.CashDe.Upload.Mode mode)
        {
            _handlerParams.EventLink.Post(ConstHelper.EventSource, _delayedUploadRequest);

            // дата применения отложенной выгрузки 
            var applyAt = ToDateTime("apply_at");
            if (applyAt < DateTime.Now)
                throw new InvalidOperationException(String.Format(_delayedUploadDateLessThanNow, applyAt));

            using (var dbExecutor = new FbExecutor())
            {
                dbExecutor.Executor = (connection, transaction) =>
                {
                    // получаем очередной номер отложенного обновления
                    var updateId = GetDelayedUpdateId(connection, transaction);

                    // формируем имя файла для отложенного обновления
                    var fileName = ERPService.CashDe.Upload.DelayedQueueHelper
                        .GetDelayedUpdateFileName(_handlerParams.WorkingDirectory, updateId);

                    // сохраняем контент запроса в файл
                    SaveContentToFile(fileName);

                    // ставим задание в очередь отложенных обновлений
                    lock (_handlerParams.WriteSync)
                    {
                        using (var command = connection.CreateCommand())
                        {
                            command.Transaction = transaction;
                            command.CommandText =
                                "INSERT INTO DELAYED_UPDATES VALUES(@ID, @UPDATE_MODE, @APPLY_AT, 0)";

                            dbExecutor.NewParameter(command, "@ID", updateId);
                            dbExecutor.NewParameter(command, "@UPDATE_MODE", (Int32)mode);
                            dbExecutor.NewParameter(command, "@APPLY_AT", applyAt);

                            command.ExecuteNonQuery();
                        }
                    }
                };
                dbExecutor.Execute();
            }

            _handlerParams.EventLink.Post(ConstHelper.EventSource, 
                String.Format(_taskQueuedAndDelayed, applyAt));
        }