Пример #1
0
        /// <summary>
        /// 대시보드 테이블을 추가한다.
        /// </summary>
        public bool AddFormTable(FormTable formTable)
        {
            using (var repo = new FormTableRepository())
            {
                if (!formTable.HasHtmlTemplate)
                {
                    throw new ArgumentNullException($"대시보드에 해당하는 HTML양식을 찾을 수 없습니다. 대시보드: {formTable.Name}"
                                                    + $"\r\n"
                                                    + $"대시보드 ID: {formTable.FormId}");
                }

                repo.BeginTransaction();

                try
                {
                    if (repo.InsertFormTable(formTable))
                    {
                        if (repo.InsertFormHtmlTemplate(formTable.HtmlTemplate))
                        {
                            repo.CommitTransaction();

                            logger.Info($"새 대시보드를 추가하였습니다. 대시보드: \"{formTable.Name}\""
                                        + $"\r\n\r\n"
                                        + $"{formTable}");

                            return(true);
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"대시보드 추가 중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{formTable.Name}\""
                                 + $"\r\n\r\n"
                                 + $"{formTable}");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"대시보드 추가 함수에서 롤백 실행중 치명적인 에러가 발생했습니다. 대시보드: \"{formTable.Name}\""
                                     + $"\r\n\r\n"
                                     + $"{formTable}");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(false); // not reached
                }

                return(false);
            }
        }
Пример #2
0
        /// <summary>
        /// 대시보드의 특정 날짜 데이터 파일을 모두 확인 처리 한다.
        /// </summary>
        private bool ConfirmFormTableDataInternal(DashboardRepository repo, FormTable form, DateTimeOffset sourceDate)
        {
            // 날짜 범위에 해당하는 데이터를 모두 조회하기 위해 날짜 계산
            var dateRange = form.GetDateRangeByUploadInterval(sourceDate);

            var list = repo.SelectDataFileSourceListBySourceDateRange(form.FormId, dateRange.BeginDate, dateRange.EndDate)
                       .Where(o => !o.IsConfirmed)
                       .ToList();

            if (list.Any())
            {
                Guid htmlTemplateId = form.HtmlTemplateId;

                // 1. 대시보드 양식 html 사본을 생성한다.
                if (AppSettings.AppSetting <bool>("FormHtmlTemplate.CopyIfConfirmed"))
                {
                    htmlTemplateId = Guid.NewGuid();

                    using (var formRepo = new FormTableRepository())
                    {
                        var htmlTemplate = FormHtmlTemplate.CopyFrom(form.HtmlTemplate, htmlTemplateId);
                        formRepo.InsertFormHtmlTemplate(htmlTemplate);

                        logger.Info($"대상 대시보드의 양식이 사본 처리되었습니다. 대시보드: \"{form.Name}\""
                                    + $"\r\n\r\n"
                                    + $"대시보드 정보:"
                                    + $"{form}"
                                    + $"\r\n\r\n"
                                    + $"이전 양식 정보:"
                                    + $"{form.HtmlTemplate}"
                                    + $"\r\n\r\n"
                                    + $"신규 양식 정보:"
                                    + $"{htmlTemplate}");
                    }
                }

                // 2. 데이터 파일 소스 컨펌 처리
                foreach (var fileSource in list)
                {
                    repo.UpdateDataFileSourceAsConfirmed(form.FormId, fileSource.FileSourceId, htmlTemplateId, CurrentUser.UserId, DateTimeOffset.Now, fileSource.SourceDate);
                }

                logger.Info($"대상 대시보드의 실적 데이터 파일들을 확인 처리했습니다. 대시보드: \"{form.Name}\", 실적 기준일: \"{sourceDate.ToString("yyyy-MM-dd")}\""
                            + $"\r\n\r\n"
                            + $"대상 데이터 파일({list.Count}개): [\r\n"
                            + string.Join("\r\n", list.Select(o => "\t" + o.ToString()))
                            + $"\r\n"
                            + $"]");

                return(true);
            }

            return(false);
        }
Пример #3
0
        /// <summary>
        /// 대시보드 테이블 html 양식을 추가한다.
        /// </summary>
        public bool AddFormHtmlTemplate(FormHtmlTemplate template)
        {
            using (var repo = new FormTableRepository())
            {
                if (repo.InsertFormHtmlTemplate(template))
                {
                    logger.Info($"새 대시보드 테이블 양식을 추가하였습니다. 대시보드: \"{template.FormName}\""
                                + $"\r\n\r\n"
                                + $"{template}");

                    return(true);
                }

                return(false);
            }
        }
Пример #4
0
        /// <summary>
        /// 대상 대시보드의 양식 HTML을 사본처리한다.
        /// </summary>
        public FormHtmlTemplate CopyFormHtmlTemplate(Guid formId, Guid templateId)
        {
            var newTemplateId = Guid.NewGuid();

            using (var repo = new FormTableRepository())
            {
                var form = repo.SelectFormTable(formId);
                if (form == null || form.IsDeleted)
                {
                    throw new ObjectNotFoundException($"사본 처리 할 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                }

                var old = repo.SelectFormHtmlTemplate(formId, templateId);
                if (old == null)
                {
                    throw new ObjectNotFoundException($"사본 처리 할 대시보드 양식을 찾을 수 없습니다.\r\n양식 ID: \"{templateId}\"");
                }

                repo.BeginTransaction();

                try
                {
                    // 1. 새 HTML 사본 레코드를 DB에 추가
                    var htmlTemplate = FormHtmlTemplate.CopyFrom(old, newTemplateId);
                    if (repo.InsertFormHtmlTemplate(htmlTemplate))
                    {
                        // 2. 대시보드가 참조하고 있는 HTML 양식 ID를 업데이트
                        form.HtmlTemplateId = newTemplateId;
                        form.HtmlTemplate   = htmlTemplate;
                        repo.UpdateFormTable(form);

                        repo.CommitTransaction();

                        logger.Info($"대시보드 양식이 사본 처리되었습니다. 대시보드: \"{old.FormName}\""
                                    + $"\r\n새 양식 ID: \"{newTemplateId}\", 사본 처리된 양식 ID: \"{templateId}\""
                                    + $"\r\n\r\n"
                                    + $"새 양식 정보: \r\n"
                                    + $"{htmlTemplate}");

                        return(htmlTemplate);
                    }

                    throw new InvalidOperationException($"대상 대시보드의 새 양식을 DB에 등록하지 못했습니다.\r\n대시보드: \"{form.Name}({formId})\""
                                                        + $"\r\n새 양식 ID: \"{newTemplateId}\", 사본 처리된 양식 ID: \"{templateId}\"");
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"대시보드 양식을 사본 처리하는 도중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{form.Name}({formId})\"");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"대시보드 양식을 사본 처리하는 함수에서 롤백 실행 중 치명적인 에러가 발생했습니다. 대시보드: \"{form.Name}({formId})\"");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(null); // not reached
                }
            }
        }