Ejemplo n.º 1
0
        /// <summary>
        /// 해당 날짜가 포함된 대상 대시보드 테이블의 데이터를 반환한다.
        /// </summary>
        public FormTableData GetFormTableData(Guid formId, DateTimeOffset date)
        {
            formId.ThrowIfEmpty(nameof(formId));

            using (var formService = new FormTableService(CurrentUser))
                using (var repo = new DashboardRepository())
                {
                    var form = formService.GetFormTable(formId);
                    if (form == null)
                    {
                        throw new ObjectNotFoundException($"대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                    }

                    var dateRange = form.GetDateRangeByUploadInterval(date);

                    string queryUserId = null;
                    if (!CurrentUser.HasPermission(UserPermission.DataReview))
                    {
                        queryUserId = CurrentUser.UserId;
                    }

                    bool onlyConfirmed = CurrentUser.HasPermission(UserPermission.DataConfirm) ? false : true;
                    if (onlyConfirmed)
                    {
                        if (CurrentUser.GroupType == UserPermissionGroupType.Uploader)
                        {
                            onlyConfirmed = false; // 본인이 업로드 한 데이터를 볼 수 있어야 함.
                        }
                    }

                    var formData = new FormTableData
                    {
                        DataTerm = new DataDateRange(dateRange)
                        {
                            UploadInterval = form.UploadInterval,
                            SourceDate     = date
                        },
                        Data         = repo.SelectDataFileCellValueList(formId, dateRange.BeginDate, dateRange.EndDate, onlyConfirmed, queryUserId),
                        HtmlTemplate = form.HtmlTemplate
                    };

                    if (formData.Data.Any())
                    {
                        var fileSource = formData.Data.First().Value.FileSource;
                        if (fileSource != null && fileSource.HtmlTemplateId.Value != form.HtmlTemplateId)
                        {
                            var htmlTemplateCopy = formService.GetFormHtmlTemplate(formId, fileSource.HtmlTemplateId.Value);
                            formData.HtmlTemplate = htmlTemplateCopy;
                        }
                        else
                        {
                            // TODO(jhlee): 로그
                        }
                    }

                    return(formData);
                }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 해당 날짜의 실적 데이터를 컨펌 처리한다.
        /// </summary>
        public void ConfirmFormTableData(Guid formId, DateTimeOffset date)
        {
            using (var formService = new FormTableService(CurrentUser))
            {
                var form = formService.GetFormTable(formId);
                if (form == null)
                {
                    throw new ObjectNotFoundException($"컨펌 처리할 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                }

                using (var repo = new DashboardRepository())
                {
                    repo.BeginTransaction();

                    try
                    {
                        ConfirmFormTableDataInternal(repo, form, date);

                        repo.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex, $"데이터 확인 중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{form.Name}\""
                                     + $"\r\n\r\n"
                                     + $"{form}");

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

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

                        ExceptionDispatchInfo.Capture(ex).Throw();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 처리된 실적 데이터를 취소 처리한다.
        /// </summary>
        public void CancelConfirmFormTableData(Guid formId, DateTimeOffset date)
        {
            using (var formService = new FormTableService(CurrentUser))
            {
                var form = formService.GetFormTable(formId);
                if (form == null)
                {
                    throw new ObjectNotFoundException($"데이터 확인을 취소할 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                }

                using (var repo = new DashboardRepository())
                {
                    var dateRange = form.GetDateRangeByUploadInterval(date);

                    var list = repo.SelectDataFileSourceListBySourceDateRange(formId, dateRange.BeginDate, dateRange.EndDate)
                               .ToList();

                    if (!list.Any())
                    {
                        logger.Warn($"기간 내 대시보드에 업로드된 데이터 파일이 없습니다. 대시보드: \"{form.Name}\", 실적 기준일: \"{date.ToString("yyyy-MM-dd")}\""
                                    + $"\r\n\r\n"
                                    + $"{form}");

                        return;
                    }

                    try
                    {
                        foreach (var fileSource in list)
                        {
                            repo.UpdateDataFileSourceAsCanceled(formId, fileSource.FileSourceId);
                        }

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

                        repo.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex, $"데이터 확인 취소 중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{form.Name}\""
                                     + $"\r\n\r\n"
                                     + $"{form}");

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

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

                        ExceptionDispatchInfo.Capture(ex).Throw();
                    }
                }
            }
        }