using BLL; using System; using System.Web.Http; namespace WebAPI.Controllers.HSSE { /// /// PDF 书籍模块接口(对应 PC 页面 HSSE/PDFDOC/PdfBookView.aspx 的完整功能:多级章节目录 + 富文本正文维护)。 /// 数据表:Sys_PdfBook / Sys_PdfChapter(目录层级 ParentChapterId+Level,正文为 UMeditor 富文本 HTML)。 /// 路由:api/PdfBook/{action},响应统一包装 Model.ResponeData(code:1正常 0异常)。 /// 鉴权:只读接口(getBooks/getChapterTree/getChapter/searchChapter)已加入权限过滤白名单,免登录; /// 维护接口(add*/edit*/delete*/save*)需登录(请求头 token=用户/人员Id 或 FormsAuth 会话)。 /// public class PdfBookController : ApiController { #region 只读接口 /// 获取书籍列表(含章节数,按登记时间升序)。 public Model.ResponeData getBooks() { var responeData = new Model.ResponeData(); try { responeData.data = APIPdfBookService.GetBooks(); } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 获取某本书的多级章节目录树(嵌套 Children)。 /// 书籍主键,必填。 public Model.ResponeData getChapterTree(string bookId) { var responeData = new Model.ResponeData(); try { responeData.data = APIPdfBookService.GetChapterTree(bookId); } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 获取章节正文详情(含富文本 HTML 与纯文本)。 /// 章节主键,必填。 public Model.ResponeData getChapter(string chapterId) { var responeData = new Model.ResponeData(); try { var detail = APIPdfBookService.GetChapterDetail(chapterId); if (detail == null) { responeData.code = 0; responeData.message = "章节不存在或已被删除"; } else { responeData.data = detail; } } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 章节关键词检索(正文 HTML 先转纯文本再匹配,返回命中片段)。 [HttpPost] public Model.ResponeData searchChapter([FromBody] SearchRequest request) { var responeData = new Model.ResponeData(); try { if (request == null) throw new Exception("请求参数不能为空"); responeData.data = APIPdfBookService.SearchChapter(request.keyword, request.bookId); } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 维护接口(需登录) /// 新增书籍,返回新书籍 BookId。 [HttpPost] public Model.ResponeData addBook([FromBody] AddBookRequest request) { var responeData = new Model.ResponeData(); try { if (request == null) throw new Exception("请求参数不能为空"); responeData.data = new { bookId = APIPdfBookService.AddBook(request.title, request.createUser) }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 新增章节(parentChapterId 为空=顶级章节),返回新章节 ChapterId。 [HttpPost] public Model.ResponeData addChapter([FromBody] AddChapterRequest request) { var responeData = new Model.ResponeData(); try { if (request == null) throw new Exception("请求参数不能为空"); responeData.data = new { chapterId = APIPdfBookService.AddChapter(request.bookId, request.parentChapterId, request.chapterTitle, request.createUser) }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 编辑章节名称。 [HttpPost] public Model.ResponeData editChapter([FromBody] EditChapterRequest request) { var responeData = new Model.ResponeData(); try { if (request == null) throw new Exception("请求参数不能为空"); APIPdfBookService.EditChapter(request.chapterId, request.chapterTitle); responeData.data = true; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 删除章节及其全部子章节,data 返回删除的章节总数。 [HttpPost] public Model.ResponeData deleteChapter([FromBody] DeleteChapterRequest request) { var responeData = new Model.ResponeData(); try { if (request == null) throw new Exception("请求参数不能为空"); responeData.data = new { deletedCount = APIPdfBookService.DeleteChapter(request.chapterId) }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } /// 保存章节正文(富文本 HTML,同页面"保存内容")。 [HttpPost] public Model.ResponeData saveContent([FromBody] SaveContentRequest request) { var responeData = new Model.ResponeData(); try { if (request == null) throw new Exception("请求参数不能为空"); APIPdfBookService.SaveContent(request.chapterId, request.content); responeData.data = true; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 请求模型 /// 章节关键词检索请求。 public class SearchRequest { /// 检索关键词,必填。 public string keyword { get; set; } /// 书籍主键;不传/为空则全库检索。 public string bookId { get; set; } } /// 新增书籍请求。 public class AddBookRequest { /// 书名,必填。 public string title { get; set; } /// 登记人(缺省 "api")。 public string createUser { get; set; } } /// 新增章节请求。 public class AddChapterRequest { /// 所属书籍主键,必填。 public string bookId { get; set; } /// 父章节主键;为空=顶级章节。 public string parentChapterId { get; set; } /// 章节名称,必填。 public string chapterTitle { get; set; } /// 登记人(预留)。 public string createUser { get; set; } } /// 编辑章节请求。 public class EditChapterRequest { /// 章节主键,必填。 public string chapterId { get; set; } /// 新章节名称,必填。 public string chapterTitle { get; set; } } /// 删除章节请求。 public class DeleteChapterRequest { /// 章节主键,必填(连同全部子章节一并删除)。 public string chapterId { get; set; } } /// 保存章节正文请求。 public class SaveContentRequest { /// 章节主键,必填。 public string chapterId { get; set; } /// 正文内容(UMeditor 富文本 HTML),可为空串。 public string content { get; set; } } #endregion } }