示例#1
0
        public static void SaveDiagMessage(SqlServer sqlServer, DiagOptions o, string message, ILogger logger)
        {
            if (o <= 0 || sqlServer == null || string.IsNullOrEmpty(message))
            {
                return;
            }

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    conn.Open();
                    using (SqlCommand cmd = sqlServer.GetSpCommand("admin.DiagMessage_Save", conn))
                    {
                        cmd.AddIntParam("@Options", (int)o);
                        cmd.AddNVarCharMaxParam("@Message", message);
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                if (logger != null)
                {
                    logger.LogError(ex, "Ошибка при добавлении диагностического сообщения");
                }
            }
        }
示例#2
0
        private async Task <bool> ConvertPayment(OperationHistoryRequest.Operation o, string paymentJson, SqlConnection conn, SqlTransaction tx)
        {
            Payment       payment;
            Exception     exception;
            ConvertResult result;

            (result, payment, exception) = await this.ConvertPayment2(o, paymentJson, conn, tx);

            DiagOptions options = DiagOptions.Tech;
            string      message;

            if (result == ConvertResult.CantConvert)
            {
                message = "ModApi: Конвертер не найден: " + paymentJson;
            }
            else if (result == ConvertResult.NoNeedToConvert)
            {
                message = "ModApi: Платёж не подлежит обработке: " + paymentJson;
            }
            else if (result == ConvertResult.Fail)
            {
                message = "ModApi: Ошибка \"" + exception.Message + "\" при проведении платежа: " + paymentJson;
            }
            else if (result == ConvertResult.Duplicate)
            {
                message = "ModApi: Платёж уже обработан: " + paymentJson;
            }
            else
            {
                options = DiagOptions.Biz | DiagOptions.Tech;
                if (payment.Status == PaymentStatus.Approved)
                {
                    message = "ModApi: Платёж " + payment.Id.ToString() + " ожидает подтверждения: " + paymentJson;
                }
                else
                {
                    message = "ModApi: Платёж " + payment.Id.ToString() + " успешно проведён: " + paymentJson;
                }
            }

            Helper.SaveDiagMessage(this._sqlServer, options, message, this._logger);

            return(result.IsAny(ConvertResult.Success, ConvertResult.NoNeedToConvert, ConvertResult.Duplicate));
        }
示例#3
0
        private async Task ProcessRequest(PaymentRequest request, SqlConnection conn)
        {
            CreatePaymentResult result;

            Share.Payment payment   = null;
            Exception     exception = null;

            using (SqlTransaction tx = conn.BeginTransaction())
            {
                (result, payment, exception) = await this.CreatePayment(request, conn, tx);

                if (result == CreatePaymentResult.Success)
                {
                    await CompleteRequest(request, conn, tx);
                }
                else if (result == CreatePaymentResult.Fail)
                {
                    await FailedToCompleteRequest(request, conn, tx);
                }

                tx.Commit();
            }

            DiagOptions o = DiagOptions.Tech;
            string      message;

            if (result == CreatePaymentResult.Success)
            {
                o       = DiagOptions.Tech | DiagOptions.Biz;
                message = "SbAcq: Платёж " + payment.Id.ToString() + (payment.Status == Share.PaymentStatus.Approved ? " успешно проведён" : " ожидает подтверждения") + ": " + payment.RawData;
            }
            else if (result == CreatePaymentResult.Duplicate)
            {
                message = "SbAcq: Платёж уже обработан: " + payment.RawData;
            }
            else
            {
                message = "SbAcq: Ошибка \"" + exception.Message + "\" при проведении платежа: " + payment.RawData;
            }

            Helper.SaveDiagMessage(_sqlServer, o, message, _logger);
        }
示例#4
0
        private async Task ProcessCsvFile(SqlConnection conn)
        {
            CsvLineReader csv = new CsvLineReader(this._fileReader);

            for (int i = 1; ; i++)
            {
                CsvReadRecordResult result = csv.Read();
                if (result.LineResult != CsvReadLineResult.Success)
                {
                    break;
                }

                if (result.Fields.Count == 12)
                {
                    CreatePaymentResult cpr;
                    Payment             payment   = null;
                    Exception           exception = null;
                    using (SqlTransaction tx = conn.BeginTransaction())
                    {
                        (cpr, payment, exception) = await this.ProcessPayment(result.Fields, conn, tx);

                        tx.Commit();
                    }

                    DiagOptions o = DiagOptions.Tech;
                    string      message;
                    if (cpr == CreatePaymentResult.Success)
                    {
                        o       = DiagOptions.Tech | DiagOptions.Biz;
                        message = "SbReg (" + _sourceFileName + "): Платёж " + payment.Id.ToString() +
                                  (payment.Status == Share.PaymentStatus.Approved ? " успешно проведён" : " ожидает подтверждения") + ": " + payment.RawData;
                    }
                    else if (cpr == CreatePaymentResult.Duplicate)
                    {
                        message = "SbReg (" + _sourceFileName + "): Платёж уже обработан: " + payment.RawData;
                        await this._logger.WriteLine(i, "Платёж \"" + result.Fields[3] + "; " + result.Fields[4] + "\" уже создан");
                    }
                    else
                    {
                        message = "SbReg (" + _sourceFileName + "): Ошибка \"" + exception.Message + "\" при проведении платежа: " + payment.RawData;
                        await this._logger.WriteLine(i, exception.ToString());
                    }

                    Helper.SaveDiagMessage(_sqlServer, o, message, null);
                }
                else if (result.Fields.Count == 6)
                {
                    try
                    {
                        await this.ProcessTotal(result.Fields);
                    }
                    catch (Exception ex)
                    {
                        await this._logger.Write("Ошибка при обработке итоговой строки: " + ex.ToString(), true);
                    }
                }
                else
                {
                    await this._logger.WriteLine(i, "Строка неопознанного формата");
                }
            }
        }