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
}
}