Beispiel #1
0
 //Сообщение об ошибке, возникшей в результате построения общего отчета
 public static void MailGeneralReportErr(GeneralReport report, Exception ex)
 {
     if (report != null)
     {
         var subject = "Ошибка при запуске отчетa для ";
         if (report.Payer != null)
         {
             subject += report.Payer.Name;
         }
         Mail(Settings.Default.ErrorFrom, Settings.Default.ErrorReportMail, subject,
              $"Код отчета : {report.Id}\r\nОшибка : {ex}");
     }
     else
     {
         MailGlobalErr(ex);
     }
 }
        public static bool ProcessReport(int generalReportId, bool manual, bool interval, DateTime dtFrom, DateTime dtTo)
        {
            var           result    = false;
            var           reportLog = new ReportExecuteLog();
            GeneralReport report    = null;

            using (var session = GeneralReport.Factory.OpenSession())
                using (var mc = new MySqlConnection(ConnectionHelper.GetConnectionString())) {
                    mc.Open();
                    try {
                        var timeout = ConfigurationManager.AppSettings["MySqlTimeout"];
                        if (!String.IsNullOrEmpty(timeout))
                        {
                            mc.Execute($"set interactive_timeout={timeout};set wait_timeout={timeout};");
                        }
                        using (var trx = session.BeginTransaction()) {
                            reportLog.GeneralReportCode = generalReportId;
                            reportLog.StartTime         = DateTime.Now;
                            session.Save(reportLog);
                            trx.Commit();
                        }

                        report = session.Get <GeneralReport>((uint)generalReportId);
                        if (report == null)
                        {
                            throw new Exception($"Отчет с кодом {generalReportId} не существует.");
                        }
                        if (!report.Enabled && !manual)
                        {
                            throw new ReportException("Невозможно выполнить отчет, т.к. отчет выключен.");
                        }

                        _log.DebugFormat("Запуск отчета {0}", report.Id);
                        report.ProcessReports(reportLog, mc, interval, dtFrom, dtTo);
                        _log.DebugFormat("Отчет {0} выполнился успешно", report.Id);

                        using (var trx = session.BeginTransaction()) {
                            reportLog.EndTime = DateTime.Now;
                            trx.Commit();
                        }
                        result = true;
                    }
                    catch (Exception e) {
                        if (e is ReportException)
                        {
                            _log.Warn($"Ошибка при выполнении отчета {report}", e);
                        }
                        else
                        {
                            _log.Error($"Ошибка при выполнении отчета {report}", e);
                        }

                        try {
                            using (var trx = session.BeginTransaction()) {
                                reportLog.EndError = true;
                                session.Save(reportLog);
                                trx.Commit();
                            }
                        }
                        catch (Exception ex) {
                            _log.Error("Не удалось запротоколировать ошибку", ex);
                        }

                        var reportEx = e as ReportException;
                        if (reportEx != null)
                        {
                            Mailer.MailReportErr(reportEx.ToString(), reportEx.Payer, report.Id, reportEx.SubreportCode, reportEx.ReportCaption);
                            result = true;
                        }
                        else
                        {
                            Mailer.MailGeneralReportErr(report, e);
                        }
                    } finally {
                        //не уверен почему так но восстанавливаем состояние задачи только если отчет не выключен
                        //этого требует тест ProgramTest но логика мне не понятна
                        //подозрительно тк раньше это работало тк переменная была null и блок валился с исключением
                        if (report != null && report.Enabled)
                        {
                            ScheduleHelper.SetTaskAction(report.Id, "/gr:" + report.Id);
                            ScheduleHelper.SetTaskEnableStatus(report.Id, report.Enabled, "GR");
                            var taskService   = ScheduleHelper.GetService();
                            var reportsFolder = ScheduleHelper.GetReportsFolder(taskService);
                            ScheduleHelper.DeleteTask(reportsFolder, report.Id, "temp_");
                        }
                    }
                    return(result);
                }
        }
Beispiel #3
0
 public static void MailReportNotify(GeneralReport report, BaseReport page, string msg)
 {
     Mail(Settings.Default.ErrorFrom, Settings.Default.ErrorReportMail, "Уведомление о событии при формировании отчета для " + report.Payer?.Name,
          $"Код отчета : {report.Id}\r\nКод подотчета: {page.ReportCode}\r\nУведомление : {msg}");
 }