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);
}
///
/// 回调接口-自动铺码, 书页铺码后回调接口,更新书页的点阵码
///
///
///
[HttpPost, Route("page/callbackupdatepageno")]
[AllowAnonymous]
public async Task> CallbackPageUpdatePageNo([FromBody] JournalPagePrintDto journalPagePrintDto)
{
var data = await JournalPageService.CallbackPageUpdatePageNo(journalPagePrintDto);
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
}
}