Exemplo n.º 1
0
        private static void WriteMessages(decimal slCost)
        {
            DateTime calcDate    = DateTime.Now.Date.AddSeconds(-1);
            string   clientsPath = Path.Combine(_settings.Report.Path,
                                                $"01_client_transport_{calcDate.ToString("ddMMyyyy_HHmmss")}.xml");
            string walletsPath = Path.Combine(_settings.Report.Path,
                                              $"02_wallet_transport_{calcDate.ToString("ddMMyyyy_HHmmss")}.xml");
            string opHistPath = Path.Combine(_settings.Report.Path,
                                             $"03_ophist_transport_{calcDate.ToString("ddMMyyyy_HHmmss")}.xml");

            WriteLog(
                $"Вызываем расчет сообщений на дату {calcDate.ToString("dd.MM.yyyy HH:mm:ss")}. Проезд по серии SL стоит: {slCost}");
            OracleTransaction tran = _connection.BeginTransaction();

            try
            {
                OracleParameter pDate = new OracleParameter()
                {
                    ParameterName = "pDate",
                    OracleDbType  = OracleDbType.Date,
                    Value         = calcDate
                };
                DatabaseUtils.CallProcedure(_connection, "pkg$xftp_messages.createmessages",
                                            new OracleParameter[]
                {
                    pDate,
                    new OracleParameter()
                    {
                        ParameterName = "pSLTravelCost", OracleDbType = OracleDbType.Decimal, Value = slCost
                    }
                });

                OracleParameter pXml = new OracleParameter()
                {
                    ParameterName = "pXml",
                    OracleDbType  = OracleDbType.Clob,
                    Direction     = ParameterDirection.Output
                };

                DatabaseUtils.CallProcedure(_connection, "pkg$xftp_messages.getClients",
                                            new OracleParameter[] { pDate, pXml });
                WriteXml(clientsPath, pXml.Value);

                DatabaseUtils.CallProcedure(_connection, "pkg$xftp_messages.getWallets",
                                            new OracleParameter[] { pDate, pXml });
                WriteXml(walletsPath, pXml.Value);

                DatabaseUtils.CallProcedure(_connection, "pkg$xftp_messages.getOperationHistory",
                                            new OracleParameter[] { pDate, pXml });
                WriteXml(opHistPath, pXml.Value);

                WriteFtp(_settings.Ftp.Path, _settings.Ftp.Login, _settings.Ftp.Password, clientsPath);
                WriteFtp(_settings.Ftp.Path, _settings.Ftp.Login, _settings.Ftp.Password, walletsPath);
                WriteFtp(_settings.Ftp.Path, _settings.Ftp.Login, _settings.Ftp.Password, opHistPath);
                tran.Commit();
            }
            catch (Exception e)
            {
                tran.Rollback();
                throw new Exception($"При формировании сообщения произошла ошибка:\r\n{e.Message}");
            }
        }