using QYZH.InteractiveMagazine.Models.Base; using QYZH.InteractiveMagazine.Models.Dto.Journal; using QYZH.InteractiveMagazine.Models.Dto.DotMatrix; using QYZH.InteractiveMagazine.Models.Enum; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; using QYZH.InteractiveMagazine.Infrastructure.OSS; using QYZH.InteractiveMagazine.IService; using QYZH.InteractiveMagazine.Models.Common; using QYZH.InteractiveMagazine.Models.Dto; using QYZH.InteractiveMagazine.Models.Enum; using QYZH.InteractiveMagazine.WebApi.Controllers; using System.ComponentModel.DataAnnotations; using System.Web; namespace QYZH.InteractiveMagazine.WebApi.Controllers { /// /// 期刊管理 /// [ApiExplorerSettings(GroupName = nameof(ApiVersionEnum.Platform))] [Route("api")] public class JournalController( OssService ossService, IJournalCatalogService JournalCatalogService, IJournalService JournalService, IJournalPageService JournalPageService, IJournalPageTaskService JournalPageTaskService, IHttpClientFactory httpClientFactory, Microsoft.Extensions.Configuration.IConfiguration configuration) : BaseController { #region 制书 /// /// 根据ID查询书籍数据 /// /// /// [HttpGet, Route("journal/detail/{id:long}")] public async Task> GetByIdAsync([Required] long id) { var result = await JournalService.GetByExpressionAsync(c => c.Id == id); return BaseResponse.Success(result); } /// /// 分页查询书籍列表 /// /// 查询条件 /// [HttpPost, Route("journal/pagelist")] public async Task>> GetPageListAsync([FromBody] PageQueryModel search) { var result = await JournalService.GetPageListAsync(search); return BaseResponse>.Success(result); } /// /// 查询书籍列表 /// /// /// [HttpPost, Route("journal/list")] public async Task>> GetListAsync([FromQuery] JournalQueryDto dto) { var result = await JournalService.GetListAsync(dto); return BaseResponse>.Success(result); } /// /// 创建杂志 /// /// 创建杂志 /// [HttpPost, Route("journal/add")] public async Task> AddAsync([FromBody] JournalAddDto dto) { var result = await JournalService.AddAsync(dto); return result; } /// /// 编辑书籍 /// /// 书籍对象 /// [HttpPost, Route("journal/update")] public async Task Edit([FromBody] JournalEditDto dto) { var result = await JournalService.EditAsync(dto); return result; } /// /// 批量删除 /// /// /// [HttpPost, Route("journal/delete")] public async Task> DeleteAsync([Required][FromBody] List ids) { var result = await JournalService.DeleteAsync(ids); return BaseResponse.Success(result); } /// /// 书籍起始页 /// /// [HttpPost, Route("journal/startpage")] public async Task> StartPageAsync([FromQuery]long id, [FromQuery] int index) { var data = await JournalService.StartPageAsync(id, index); return BaseResponse.Success(data); } /// /// 书籍归档 /// /// [HttpPost, Route("journal/rchive/{id:long}")] public async Task> Archive(long id) { var data = await JournalService.StatusAsync(id, JournalStatusEnum.Archive); return BaseResponse.Success(data); } /// /// 书籍废弃 /// /// [HttpPost] [HttpPost, Route("journal/abandon/{id:long}")] public async Task> Abandon(long id) { var data = await JournalService.StatusAsync(id, JournalStatusEnum.Abandoned); return BaseResponse.Success(data); } /// /// 书籍铺码 /// /// [HttpPost, Route("journal/printcode/{id:long}")] public async Task> PrintCodeAsync(long id) { var data = await JournalService.PrintCodeAsync(id); return BaseResponse.Success(data); } /// /// 上报铺码结果 /// /// /// /// [HttpPost, Route("journal/resultreport")] public async Task> GenerateAsync([FromBody] DotMatrixNoteJournalReportInput input, [FromForm] IFormFile? file) { if (file != null) { input.FileKey = $"journal/{input.Id}/dotMatrixJournal.pdf"; input.FileUrl = ossService.PutObject(input.FileKey, file.OpenReadStream()); } var data = await JournalService.ResultReportAsync(input); return BaseResponse.Success(data); } /// /// 书籍导入 /// /// /// [HttpPost, Route("journal/import")] public async Task> JournalImport(JournalImportDto input) { var data = await JournalCatalogService.ImportAsync(input); return BaseResponse.Success(data); } /// /// 题库代理请求接口 /// /// [HttpGet, Route("tasklibrary/proxyget")] public async Task GetTaskLibraryData(string apiUrl = "") { var client = httpClientFactory.CreateClient(); var response = await client.GetAsync(configuration["TaskLibraryApi"] + apiUrl); // 确保请求成功(状态码 200) response.EnsureSuccessStatusCode(); string result = await response.Content.ReadAsStringAsync(); return Content(result, "application/json"); } #endregion #region 书籍目录 ///// ///// 书籍目录详情 ///// ///// //[HttpGet, Route("catalog/tree/{JournalId:long}")] //public async Task>> CatalogDetailAsync(long JournalId) //{ // var data = await _JournalCatalogService.DetailAsync(JournalId); // return BaseResponse>.Success(data); //} /// /// 书籍目录详情 /// /// [HttpGet, Route("catalog/tree/{JournalId:long}")] public async Task>> CatalogDetailAsync(long JournalId) { var data = await JournalCatalogService.GetJournalCataloTreeAsync(JournalId); return BaseResponse>.Success(data); } /// /// 获取书分类及页码 /// /// /// [HttpGet, Route("catalog/list")] public async Task>> GetJournalCatelogListAsync(long JournalId) { var data = await JournalCatalogService.GetJournalCatalogListAsync(JournalId); return BaseResponse>.Success(data); } /// /// 下载书籍目录导入模板 /// /// [HttpGet, Route("catalog/template")] [AllowAnonymous] public IActionResult ImportCatalogTemplateExcel() { var result = DownloadImportTemplate(new List() { }, "书籍目录导入模板"); return ExportExcel(result.Item2, result.Item1); } /// /// 书籍目录导出 /// /// /// [HttpGet, Route("catalog/export/{JournalId}")] public async Task CatalogExport(long JournalId) { var list = await JournalCatalogService.GetJournalCatalogListAsync(JournalId); var result = ExportExcelMini(list, "sheet1", "书籍目录导出"); return ExportExcel(result.Item2, result.Item1); } /// /// 书籍目录导入 /// /// file /// file /// [HttpPost, Route("catalog/import/{JournalId}")] public async Task> ImportAsync(long JournalId, [FromForm(Name = "file")] IFormFile file) { List dto = new(); using (var stream = file.OpenReadStream()) { dto = stream.Query().ToList(); } var result = await JournalCatalogService.ImportCatalogAsync(JournalId, dto); return BaseResponse.Success(result); } /// /// 书籍目录新增 /// /// /// [HttpPost, Route("catalog/add")] public async Task> CatalogAdd(JournalCatalogInput input) { var data = await JournalCatalogService.InsertAsync(input); return BaseResponse.Success(data); } /// /// 书籍目录修改 /// /// /// [HttpPost, Route("catalog/update")] public async Task> CatalogUpdate(JournalCatalogUpdateInput input) { var data = await JournalCatalogService.UpdateAsync(input); return BaseResponse.Success(data); } /// /// 书籍目录删除 /// /// /// [HttpPost, Route("catalog/delete/{id:long}")] public async Task> CatalogDelete(long id) { var data = await JournalCatalogService.DeleteAsync(id); return BaseResponse.Success(data); } ///// ///// 书籍目录复制 ///// ///// ///// //[HttpPost, Route("catalog/copy")] //[ProducesResponseType(typeof(BaseResponse), 200)] //public async Task CatalogCopy(CopyInput input) //{ // var data = await _JournalCatalogServices.CopyAsync(input); // return ApiResult(data, "书籍目录删除失败!"); //} /// /// 书籍目录移动 /// /// /// [HttpPost, Route("catalog/move")] public async Task> CatalogMove(MoveInput input) { var data = await JournalCatalogService.MoveAsync(input); return BaseResponse.Success(data); } #endregion #region 书页 /// /// 书页新增 /// /// [HttpPost, Route("page/add")] public async Task> PageAdd(JournalAddV2Input input) { var data = await JournalPageService.InsertAsync(input); return BaseResponse.Success(data); } /// /// 书页修改 /// /// [HttpPost, Route("page/update")] public async Task> PageUpdate(PageLayoutInput input) { var data = await JournalPageService.UpdateAsync(input); return BaseResponse.Success(data); } /// /// 自动铺码 /// /// [HttpPost, Route("page/updatepageno/{JournalId:long}")] public async Task> PageUpdatePageNo([Required(ErrorMessage = "书籍编号不允许为空")] long JournalId) { var data = await JournalPageService.UpdatePageNoAsync(JournalId); return BaseResponse.Success(data); } /// /// 下载书籍页码点阵码PDF文件名称 /// /// [HttpGet, Route("page/downloadJournalpagePdf/{JournalId:long}")] public async Task DownloadJournalPagePdf([Required(ErrorMessage = "书籍编号不允许为空")] long JournalId) { var entity = await JournalService.GetFirstAsync(x => x.Id == JournalId); if (entity == null) throw new BusinessException("书籍不存在"); var downloadUrl = entity.DownloadJournalPagePdfName; if (string.IsNullOrWhiteSpace(downloadUrl)) throw new BusinessException("下载点阵码PDF文件为空,请先铺码"); var stream = await httpClientFactory.CreateClient().GetStreamAsync(downloadUrl); //创建文件流 if (stream == null) throw new BusinessException("下载点阵码PDF文件失败"); Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition"); return File(stream, "application/pdf", HttpUtility.UrlEncode(Path.GetFileName(downloadUrl))); } ///// ///// 打印书页(全部) 暂时废弃这个方,直接使用 Adobe Reader X 软件打印就可以了 ///// ///// //[HttpPost, Route("page/printJournalPage/{JournalId:long}")] //public async Task> PrintJournalPage([Required(ErrorMessage = "书籍编号不允许为空")] long JournalId) //{ // var data = await JournalPageService.PrintJournalPageAsync(JournalId); // return BaseResponse.Success(data); //} ///// ///// 书页删除 ///// ///// //[HttpPost, Route("page/delete/{id:long}")] //[ProducesResponseType(typeof(BaseResponse), 200)] //public async Task PageDelete(long id) //{ // var data = await _JournalPageServices.DeleteAsync(id); // return ApiResult(data, "更新书页失败!"); //} /// /// 书页详情 /// /// [HttpGet, Route("page/detail/{id:long}")] public async Task> PageDetail(long id) { var data = await JournalPageService.DetailAsync(id); return BaseResponse.Success(data); } ///// ///// 不包含有文章的书页 ///// ///// //[HttpGet, Route("page/no-article/{JournalId:long}")] //[ProducesResponseType(typeof(BaseResponse>), 200)] //public async Task PageNoArticleAsync(long JournalId) //{ // var data = await _JournalPageService.PageNoArticleAsync(JournalId); // return BaseResponse>(data, "查询书页失败!"); //} #endregion #region 书页问题 /// /// 书页问题新增 /// /// [HttpPost, Route("page/task/add")] [ProducesResponseType(typeof(BaseResponse), 200)] public async Task> PageTaskAdd(JournalPageTaskAddInput input) { var data = await JournalPageTaskService.InsertAsync(input); return BaseResponse.Success(data.Value); } /// /// 书页问题更新 /// /// [HttpPost, Route("page/task/update")] [ProducesResponseType(typeof(BaseResponse), 200)] public async Task> PageTaskUpdate(JournalPageTaskUpdateInput input) { var data = await JournalPageTaskService.UpdateAsync(input); return BaseResponse.Success(data); } /// /// 书页问题详情 + 题库那边需要用 /// /// [AllowAnonymous] [HttpGet, Route("page/task/detail/{id:long}")] public async Task> PageTaskDetail(long id) { var data = await JournalPageTaskService.DetailAsync(id); return BaseResponse.Success(data); } /// /// 书页问题删除 /// /// [HttpPost, Route("page/task/delete/{id:long}")] public async Task> PageTaskDelete(long id) { var data = await JournalPageTaskService.DeleteAsync(id); return BaseResponse.Success(data); } /// /// 书页问题补充 /// /// [HttpPost, Route("page/task/complement")] public async Task> ComplementAnsync(JournalPageTaskComplementInput input) { var data = await JournalPageTaskService.ComplementAsync(input); return BaseResponse.Success(data); } /// /// 答案新增 /// /// [HttpPost, Route("page/task/answer/add")] public async Task> AnswerAdd(JournalTaskAnswerAddInput input) { var data = await JournalPageTaskService.AddAnswerAsync(input); return BaseResponse.Success(data); } /// /// 答案更新 /// /// [HttpPost, Route("page/task/answer/update")] public async Task> AnswerUpdate(JournalTaskAnswerUpdateInput input) { var data = await JournalPageTaskService.UpdateAnswerAsync(input); return BaseResponse.Success(data); } /// /// 答案删除 /// /// [HttpPost, Route("page/task/answer/delete/{id:long}")] public async Task> AnswerDelete(long id) { var data = await JournalPageTaskService.DeleteAnswerAsync(id); return BaseResponse.Success(data); } #endregion } }