/// <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); } }
/// <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(); } } } }
/// <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(); } } } }