feat: 完成多模块功能迭代与代码重构

本次提交包含多方面更新:
1. 新增消息类型枚举、杂志标题字段与AI提示词状态管理
2. 重构杂志服务,新增创建杂志接口并统一OSS路径命名规范
3. 调整题库任务结构,将答案解析迁移至独立表并优化关联查询
4. 新增AI提示词无分页查询与状态切换接口
5. 精简任务添加输入DTO,移除冗余字段
6. 修复控制器路由命名大小写不一致问题
This commit is contained in:
glz
2026-06-16 16:54:02 +08:00
parent dbf77c7d50
commit f2f7ec9100
17 changed files with 493 additions and 366 deletions

View File

@ -40,7 +40,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet, Route("Journal/detail/{id:long}")]
[HttpGet, Route("journal/detail/{id:long}")]
public async Task<BaseResponse<JournalDto>> GetByIdAsync([Required] long id)
{
var result = await JournalService.GetByExpressionAsync<JournalDto>(c => c.Id == id);
@ -52,7 +52,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// </summary>
/// <param name="search">查询条件</param>
/// <returns></returns>
[HttpPost, Route("Journal/pagelist")]
[HttpPost, Route("journal/pagelist")]
public async Task<BaseResponse<PageListModel<JournalDto>>> GetPageListAsync([FromBody] PageQueryModel<JournalQueryDto> search)
{
var result = await JournalService.GetPageListAsync(search);
@ -64,31 +64,31 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost, Route("Journal/list")]
[HttpPost, Route("journal/list")]
public async Task<BaseResponse<List<JournalDto>>> GetListAsync([FromQuery] JournalQueryDto dto)
{
var result = await JournalService.GetListAsync(dto);
return BaseResponse<List<JournalDto>>.Success(result);
}
///// <summary>
///// 创建书籍
///// </summary>
///// <param name="dto">书籍对象</param>
///// <returns></returns>
//[HttpPost, Route("Journal/add")]
//public async Task<BaseResponse<long>> AddAsync([FromBody] JournalEditDto dto)
//{
// var result = await JournalService.AddAsync(dto);
// return result;
//}
/// <summary>
/// 创建杂志
/// </summary>
/// <param name="dto">创建杂志</param>
/// <returns></returns>
[HttpPost, Route("journal/add")]
public async Task<BaseResponse<long>> AddAsync([FromBody] JournalAddDto dto)
{
var result = await JournalService.AddAsync(dto);
return result;
}
/// <summary>
/// 编辑书籍
/// </summary>
/// <param name="dto">书籍对象</param>
/// <returns></returns>
[HttpPost, Route("Journal/update")]
[HttpPost, Route("journal/update")]
public async Task<BaseResponse> Edit([FromBody] JournalEditDto dto)
{
var result = await JournalService.EditAsync(dto);
@ -100,7 +100,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost, Route("Journal/delete")]
[HttpPost, Route("journal/delete")]
public async Task<BaseResponse<bool>> DeleteAsync([Required][FromBody] List<long> ids)
{
var result = await JournalService.DeleteAsync(ids);
@ -111,7 +111,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// 书籍起始页
/// </summary>
/// <returns></returns>
[HttpPost, Route("Journal/startpage")]
[HttpPost, Route("journal/startpage")]
public async Task<BaseResponse<bool>> StartPageAsync([FromQuery]long id, [FromQuery] int index)
{
var data = await JournalService.StartPageAsync(id, index);
@ -122,7 +122,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// 书籍归档
/// </summary>
/// <returns></returns>
[HttpPost, Route("Journal/rchive/{id:long}")]
[HttpPost, Route("journal/rchive/{id:long}")]
public async Task<BaseResponse<bool>> Archive(long id)
{
var data = await JournalService.StatusAsync(id, JournalStatusEnum.Archive);
@ -134,7 +134,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// </summary>
/// <returns></returns>
[HttpPost]
[HttpPost, Route("Journal/abandon/{id:long}")]
[HttpPost, Route("journal/abandon/{id:long}")]
public async Task<BaseResponse<bool>> Abandon(long id)
{
var data = await JournalService.StatusAsync(id, JournalStatusEnum.Abandoned);
@ -145,7 +145,7 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// 书籍铺码
/// </summary>
/// <returns></returns>
[HttpPost, Route("Journal/printcode/{id:long}")]
[HttpPost, Route("journal/printcode/{id:long}")]
public async Task<BaseResponse<DotMatrixOutput>> PrintCodeAsync(long id)
{
var data = await JournalService.PrintCodeAsync(id);
@ -157,12 +157,12 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// <param name="input"></param>
/// <param name="file"></param>
/// <returns></returns>
[HttpPost, Route("Journal/resultreport")]
[HttpPost, Route("journal/resultreport")]
public async Task<BaseResponse<bool>> GenerateAsync([FromBody] DotMatrixNoteJournalReportInput input, [FromForm] IFormFile? file)
{
if (file != null)
{
input.FileKey = $"Journal/{input.Id}/dotMatrixJournal.pdf";
input.FileKey = $"journal/{input.Id}/dotMatrixJournal.pdf";
input.FileUrl = ossService.PutObject(input.FileKey, file.OpenReadStream());
}
var data = await JournalService.ResultReportAsync(input);
@ -174,49 +174,13 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost, Route("Journal/import")]
[HttpPost, Route("journal/import")]
public async Task<BaseResponse<long>> JournalImport(JournalImportDto input)
{
var data = await JournalCatalogService.ImportAsync(input);
return BaseResponse<long>.Success(data);
}
///// <summary>
///// 工单分页列表
///// </summary>
///// <param name="search"></param>
///// <returns></returns>
//[HttpPost, Route("tasklibrary/workorder/pagelist")]
//public async Task<BaseResponse<PageListModel<IcrJournalWorkOrderDto>>> WorkOrderPageListAsync([FromBody] PageQueryModel<IcrWorkOrderQueryDto> search)
//{
// var data = await JournalWorkOrderService.WorkOrderPageListAsync(search);
// return BaseResponse<PageListModel<IcrJournalWorkOrderDto>>.Success(data);
//}
/// <summary>
/// 书籍发起工单
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
//[HttpPost, Route("tasklibrary/workorder/create")]
//public async Task<BaseResponse<bool>> CreateWorkOrderAsync([FromBody] IcrWorkOrderCreateDto dto)
//{
// var result = await JournalWorkOrderService.CreateWorkOrderAsync(dto);
// return result;
//}
///// <summary>
///// 更新工单状态
///// </summary>
///// <param name="JournalId"></param>
///// <returns></returns>
//[HttpPost, Route("tasklibrary/workorder/setstatus/{JournalId:long}")]
//public async Task<BaseResponse<int>> UpdateWorkOrderAsync(long JournalId)
//{
// var result = await JournalWorkOrderService.UpdateWorkOrderAsync(JournalId);
// return BaseResponse<int>.Success(result);
//}
/// <summary>
/// 题库代理请求接口
/// </summary>