コード例 #1
0
        /// <summary>
        /// 대시보드 테이블 html 양식을 추가한다.
        /// </summary>
        public bool InsertFormHtmlTemplate(FormHtmlTemplate template)
        {
            template.ThrowIfNull(nameof(template));

            string procCommandName = "up_FormHtmlTemplate_Insert";

            try
            {
                var command = Connection.GetStoredProcCommand(procCommandName);
                Connection.AddInParameter(command, "FormID", DbType.Guid, template.FormId);
                Connection.AddInParameter(command, "HtmlTemplateID", DbType.Guid, template.HtmlTemplateId);
                Connection.AddInParameter(command, "CreatorId", DbType.String, template.CreatorId);
                Connection.AddInParameter(command, "Description", DbType.String, template.Description);
                Connection.AddInParameter(command, "ScriptContent", DbType.String, template.ScriptContent);
                Connection.AddInParameter(command, "HtmlContent", DbType.String, template.HtmlContent);
                Connection.AddInParameter(command, "StyleContent", DbType.String, template.StyleContent);
                Connection.AddInParameter(command, "CreatedDate", DbType.DateTimeOffset, template.CreatedDate);

                return((int)Connection.ExecuteNonQuery(command) > 0);
            }
            catch (Exception ex)
            {
                throw new DataException($"프로시져 실행 중 예기치 못한 에러가 발생했습니다.\r\n 프로시저: \"{procCommandName}\"", ex);
            }
        }
コード例 #2
0
        /// <summary>
        /// 대시보드 테이블 html 양식 리스트를 반환한다.
        /// </summary>
        public IEnumerable <FormHtmlTemplate> SelectFormHtmlTemplateList()
        {
            string procCommandName = "up_FormHtmlTemplate_SelectList";

            try
            {
                var command = Connection.GetStoredProcCommand(procCommandName);

                using (DataSet ds = Connection.ExecuteDataSet(command))
                {
                    ValidateTableCount(ds, 1);

                    var list = new List <FormHtmlTemplate>();

                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var template = FormHtmlTemplate.ParseFrom(dr);
                        list.Add(template);
                    }

                    return(list);
                }
            }
            catch (Exception ex)
            {
                throw new DataException($"프로시져 실행 중 예기치 못한 에러가 발생했습니다.\r\n 프로시저: \"{procCommandName}\"", ex);
            }
        }
コード例 #3
0
        /// <summary>
        /// 대시보드 테이블 html 양식 아이템을 반환한다.
        /// </summary>
        public FormHtmlTemplate SelectFormHtmlTemplate(Guid formId, Guid templateId)
        {
            string procCommandName = "up_FormHtmlTemplate_Select";

            try
            {
                var command = Connection.GetStoredProcCommand(procCommandName);
                Connection.AddInParameter(command, "FormID", DbType.Guid, formId);
                Connection.AddInParameter(command, "HtmlTemplateID", DbType.Guid, templateId);

                using (DataSet ds = Connection.ExecuteDataSet(command))
                {
                    ValidateTableCount(ds, 1);

                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        return(FormHtmlTemplate.ParseFrom(ds.Tables[0].Rows[0]));
                    }

                    return(null);
                }
            }
            catch (Exception ex)
            {
                throw new DataException($"프로시져 실행 중 예기치 못한 에러가 발생했습니다.\r\n 프로시저: \"{procCommandName}\"", ex);
            }
        }
コード例 #4
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);
        }
コード例 #5
0
        /// <summary>
        /// 페이징 처리된 대시보드 테이블 리스트를 반환한다.
        /// </summary>
        public PagedModel <FormTable> SelectFormTablePagedList(PagingOption option)
        {
            string procCommandName = "up_FormTable_SelectPagedList";

            try
            {
                var command = Connection.GetStoredProcCommand(procCommandName);
                Connection.AddInParameter(command, "PageNumber", DbType.Int32, option.PageNumber);
                Connection.AddInParameter(command, "PageCount", DbType.Int32, option.PageCount);
                Connection.AddInParameter(command, "SortBy", DbType.String, option.SortBy);
                Connection.AddInParameter(command, "OrderBy", DbType.String, option.OrderBy.ToEnumMemberString());

                using (DataSet ds = Connection.ExecuteDataSet(command))
                {
                    ValidateTableCount(ds, 2);

                    var result = new PagedModel <FormTable>(option)
                    {
                        PagingOption = option
                    };
                    int totalCount = 0;

                    // 1. 대시보드 테이블 리스트
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var form = FormTable.ParseFrom(dr, out totalCount);
                        result.Items.Add(form);
                    }

                    // 2. 대시보드 테이블 양식 리스트
                    foreach (DataRow dr in ds.Tables[1].Rows)
                    {
                        var template = FormHtmlTemplate.ParseFrom(dr);
                        var forms    = result.Items.FindAll(o => o.FormId == template.FormId && o.HtmlTemplateId == template.HtmlTemplateId);
                        if (forms.Any())
                        {
                            forms.ForEach(o =>
                            {
                                o.HtmlTemplate = template;
                            });
                        }
                    }

                    result.TotalCount = totalCount;

                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw new DataException($"프로시져 실행 중 예기치 못한 에러가 발생했습니다.\r\n 프로시저: \"{procCommandName}\"", ex);
            }
        }
コード例 #6
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);
            }
        }
コード例 #7
0
        /// <summary>
        /// 대시보드 테이블 리스트를 반환한다.
        /// </summary>
        /// <param name="queryUserId">값이 있는 경우, 해당 유저가 접근 가능한 데이터만 반환</param>
        public IEnumerable <FormTable> SelectFormTableList(string queryUserId = null)
        {
            string procCommandName = "up_FormTable_SelectList";

            try
            {
                var command = Connection.GetStoredProcCommand(procCommandName);

                Connection.AddInParameter(command, "QueryUserID", DbType.String, queryUserId);

                using (DataSet ds = Connection.ExecuteDataSet(command))
                {
                    ValidateTableCount(ds, 2);

                    var result = new List <FormTable>();

                    // 1. 대시보드 테이블 리스트
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var form = FormTable.ParseFrom(dr);
                        result.Add(form);
                    }

                    // 2. 대시보드 테이블 양식 리스트
                    foreach (DataRow dr in ds.Tables[1].Rows)
                    {
                        var template = FormHtmlTemplate.ParseFrom(dr);
                        var forms    = result.FindAll(o => o.FormId == template.FormId && o.HtmlTemplateId == template.HtmlTemplateId);
                        if (forms.Any())
                        {
                            forms.ForEach(o =>
                            {
                                o.HtmlTemplate = template;
                            });
                        }
                    }

                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw new DataException($"프로시져 실행 중 예기치 못한 에러가 발생했습니다.\r\n 프로시저: \"{procCommandName}\"", ex);
            }
        }
コード例 #8
0
        /// <summary>
        /// 페이징 처리된 대시보드 테이블 html 양식 리스트를 반환한다.
        /// </summary>
        public PagedModel <FormHtmlTemplate> SelectFormHtmlTemplatePagedList(PagingOption option)
        {
            string procCommandName = "up_FormHtmlTemplate_SelectPagedList";

            try
            {
                var command = Connection.GetStoredProcCommand(procCommandName);
                Connection.AddInParameter(command, "PageNumber", DbType.Int32, option.PageNumber);
                Connection.AddInParameter(command, "PageCount", DbType.Int32, option.PageCount);
                Connection.AddInParameter(command, "SortBy", DbType.String, option.SortBy);
                Connection.AddInParameter(command, "OrderBy", DbType.String, option.OrderBy.ToEnumMemberString());

                using (DataSet ds = Connection.ExecuteDataSet(command))
                {
                    ValidateTableCount(ds, 1);

                    var result = new PagedModel <FormHtmlTemplate>(option)
                    {
                        PagingOption = option
                    };
                    int totalCount = 0;

                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var template = FormHtmlTemplate.ParseFrom(dr, out totalCount);
                        result.Items.Add(template);
                    }

                    result.TotalCount = totalCount;

                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw new DataException($"프로시져 실행 중 예기치 못한 에러가 발생했습니다.\r\n 프로시저: \"{procCommandName}\"", ex);
            }
        }
コード例 #9
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
                }
            }
        }