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

@ -78,6 +78,7 @@ public class AiBasePromptService(
Description = entity.Description,
Priority = entity.Priority,
IsDefault = entity.IsDefault,
Status = entity.Status,
CreatedBy = entity.CreatedBy,
CreatedAt = entity.CreatedAt,
UpdatedBy = entity.UpdatedBy,
@ -148,6 +149,7 @@ public class AiBasePromptService(
Description = entity.Description,
Priority = entity.Priority,
IsDefault = entity.IsDefault,
Status = entity.Status,
CreatedBy = entity.CreatedBy,
CreatedAt = entity.CreatedAt,
UpdatedBy = entity.UpdatedBy,
@ -202,6 +204,7 @@ public class AiBasePromptService(
Description = entity.Description,
Priority = entity.Priority,
IsDefault = entity.IsDefault,
Status = entity.Status,
CreatedBy = entity.CreatedBy,
CreatedAt = entity.CreatedAt,
UpdatedBy = entity.UpdatedBy,
@ -243,6 +246,7 @@ public class AiBasePromptService(
Description = p.Description,
Priority = p.Priority,
IsDefault = p.IsDefault,
Status = p.Status,
CreatedBy = p.CreatedBy,
CreatedAt = p.CreatedAt,
UpdatedBy = p.UpdatedBy,
@ -251,4 +255,61 @@ public class AiBasePromptService(
return new PageListModel<AiBasePromptOutput>(result, input.PageIndex, input.PageSize, totalNumber);
}
/// <summary>
/// 获取全部Prompt配置无分页
/// </summary>
public async Task<List<AiBasePromptOutput>> GetAllAsync()
{
logger.LogInformation("正在查询全部Prompt配置");
var list = await promptRepository.Queryable()
.OrderBy(p => p.Priority)
.OrderByDescending(p => p.CreatedAt)
.ToListAsync();
return list.Select(p => new AiBasePromptOutput
{
Id = p.Id,
PromptKey = p.PromptKey,
PromptName = p.PromptName,
PromptTemplate = p.PromptTemplate,
Description = p.Description,
Priority = p.Priority,
IsDefault = p.IsDefault,
Status = p.Status,
CreatedBy = p.CreatedBy,
CreatedAt = p.CreatedAt,
UpdatedBy = p.UpdatedBy,
UpdatedAt = p.UpdatedAt
}).ToList();
}
/// <summary>
/// 切换Prompt启用/禁用状态
/// </summary>
public async Task ToggleStatusAsync(long id)
{
logger.LogInformation("正在切换Prompt配置状态ID: {Id}", id);
var entity = await promptRepository.GetByIdAsync(id);
if (entity == null)
{
logger.LogWarning("未找到要切换状态的Prompt配置ID: {Id}", id);
throw new BusinessException("Prompt配置不存在", 404);
}
entity.Status = entity.Status == 1 ? 0 : 1;
entity.UpdatedBy = "System";
entity.UpdatedAt = DateTime.Now;
var result = await promptRepository.UpdateAsync(entity);
if (!result)
{
logger.LogError("Prompt配置状态切换失败ID: {Id}", id);
throw new BusinessException("切换Prompt状态失败", 500);
}
logger.LogInformation("Prompt配置状态切换成功ID: {Id}, Status: {Status}", id, entity.Status);
}
}

View File

@ -63,7 +63,7 @@ public class JournalCatalogService : BaseRepository<JournalCatalog>, IJournalCat
Sort = sort,
PageNum = sort < input.Index ? 0 : sort - (input.Index - 1)
};
var key = $"Journal/{input.JournalId}/{JournalPage.Id}/page.{s.Url.ToExtension()}";
var key = $"journal/{input.JournalId}/{JournalPage.Id}/page.{s.Url.ToExtension()}";
_ossService.CopyObject(s.Url.RemoveDomain(), key);
JournalPage.Url = key;
@ -84,7 +84,7 @@ public class JournalCatalogService : BaseRepository<JournalCatalog>, IJournalCat
var JournalPages = result.Select(x => x.JournalPage).ToList();
await _JournalPageRepository.InsertRangeAsync(JournalPages);
var key = $"Journal/{input.JournalId}/Journal.pdf";
var key = $"journal/{input.JournalId}/Journal.pdf";
_ossService.CopyObject(input.PdfUrl.RemoveDomain(), key);
await Updateable<Journal>().SetColumns(s => s.PdfUrl, key)

View File

@ -20,7 +20,8 @@ public class JournalPageService(BaseRepository<Journal> JournalRepository,
IHttpClientFactory httpClientFactory,
IConfiguration configuration,
IRabbitMQService rabbitMqService,
BaseRepository<JournalPageTask> JournalPageTaskRepository) : BaseRepository<JournalPage>, IJournalPageService
BaseRepository<JournalPageTask> JournalPageTaskRepository,
BaseRepository<JournalPageTaskAnswer> JournalPageTaskAnswerRepository) : BaseRepository<JournalPage>, IJournalPageService
{
public async Task<long> InsertAsync(JournalAddV2Input input)
@ -91,7 +92,7 @@ public class JournalPageService(BaseRepository<Journal> JournalRepository,
input.TasksImages?.ForEach(it =>
{
var key = $"Journal/{Journal.Id}/{input.Id}/{it.TaskId}/qustion.{it.Url.ToExtension()}";
var key = $"journal/{Journal.Id}/{input.Id}/{it.TaskId}/qustion.{it.Url.ToExtension()}";
ossService.CopyObject(it.Url.RemoveDomain(), key);
JournalPageTaskRepository.Updateable().SetColumns(s => s.TaskUrl, key).Where(w => w.Id == it.TaskId).ExecuteCommand();
});
@ -142,17 +143,18 @@ public class JournalPageService(BaseRepository<Journal> JournalRepository,
if (output != null)
{
output.Tasks = await JournalPageTaskRepository.Queryable()//.Select<IcrJournalAssignTask>()
.Where(a => a.JournalPageId == output.JournalPageId)
.Select(a => new JournalPageTaskV2Output
output.Tasks = await JournalPageTaskRepository.Queryable()
.LeftJoin<JournalPageTaskAnswer>((a, ans) => ans.JournalPageTaskId == a.Id)
.Where((a, ans) => a.JournalPageId == output.JournalPageId)
.Select((a, ans) => new JournalPageTaskV2Output
{
Id = a.Id,
GroupId = a.GroupId,
No = a.No,
Type = (TaskBankTypeEnum)a.Type,
Options = a.Options,
Answers = a.Answer,
Analysis = a.Analysis,
//Assign = SqlFunc.Subqueryable<IcrJournalAssignTask>().Where(m => a.Id == m.JournalPageTaskId).Any()
Answers = ans.Answer,
Analysis = ans.Analysis,
})
.ToListAsync();
}

View File

@ -13,7 +13,7 @@ using Yitter.IdGenerator;
namespace QYZH.InteractiveMagazine.Service;
public class JournalPageTaskService(BaseRepository<Journal> journalRepository, OssService ossService) : BaseRepository<JournalPageTask>, IJournalPageTaskService
public class JournalPageTaskService(BaseRepository<Journal> journalRepository, OssService ossService, BaseRepository<JournalPageTaskAnswer> answerRepository) : BaseRepository<JournalPageTask>, IJournalPageTaskService
{
public async Task<long?> InsertAsync(JournalPageTaskAddInput input)
{
@ -30,12 +30,40 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
var groupTask = await Queryable().Where(w => w.No == startNo && w.JournalId == input.JournalId).FirstAsync();
BusinessException.ThrowIf(groupTask.IsNull(), "未找到关联跨页的第一部分");
map.GroupId = groupTask.GroupId;
map.Score = groupTask.Score;
map.AnswerTime = groupTask.AnswerTime;
map.Type = groupTask.Type;
}
var data = await base.InsertAsync(map);
// 创建默认答案记录
var answer = new JournalPageTaskAnswer
{
JournalPageTaskId = map.Id,
CreatedBy = "System",
UpdatedBy = "System",
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsDeleted = false
};
// 如果是关联跨页题目,从第一部分的 Answer 复制 Score 和 AnswerTime
if (no.Last() >= 2)
{
var startNo = $"{no[0]}-{no[1]}-{no[2]}-1";
var firstTask = await Queryable().Where(w => w.No == startNo && w.JournalId == input.JournalId).FirstAsync();
if (firstTask != null)
{
var firstAnswer = await answerRepository.Queryable().Where(a => a.JournalPageTaskId == firstTask.Id).FirstAsync();
if (firstAnswer != null)
{
answer.Score = firstAnswer.Score;
answer.AnswerTime = firstAnswer.AnswerTime;
}
}
}
await answerRepository.InsertAsync(answer);
return map?.Id;
}
@ -48,41 +76,18 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
var task = await base.Queryable().Where(w => w.Id == input.Id).FirstAsync();
BusinessException.ThrowIf(task.IsNull(), "未找到关联的题号");
var sameTask = await base.Queryable().Where(w => w.No == input.No && w.JournalId == input.JournalId).FirstAsync();
var sameTask = await base.Queryable().Where(w => w.No == input.No && w.JournalId == input.JournalId && w.Id != input.Id).FirstAsync();
BusinessException.ThrowIf(sameTask.IsNotEmpty(), "已经存在相同题号题目");
var key = $"Journal/{task.JournalId}/{task.JournalPageId}/{task.GroupId}";
//if (task.AnswerUrl != input.AnswerUrl && input.AnswerUrl.NotNull())
//{
// ossService.CopyObject(input.AnswerUrl.RemoveDomain(), $"{key}/answer.{input.AnswerUrl.ToExtension()}");
// input.AnswerUrl = $"{key}/answer.{input.AnswerUrl.ToExtension()}";
//}
//if (task.AnalysisUrl != input.AnalysisUrl && input.AnalysisUrl.NotNull())
//{
// ossService.CopyObject(input.AnalysisUrl.RemoveDomain(), $"{key}/analysis.{input.AnalysisUrl.ToExtension()}");
// input.AnalysisUrl = $"{key}/analysis.{input.AnalysisUrl.ToExtension()}";
//}
//if (task.VideoUrl != input.VideoUrl && input.VideoUrl.NotNull())
//{
// ossService.CopyObject(input.VideoUrl.RemoveDomain(), $"{key}/video.{input.VideoUrl.ToExtension()}");
// input.VideoUrl = $"{key}/video.{input.VideoUrl.ToExtension()}";
//}
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.GroupId}";
// 题目侧字段处理
input.Task = Deal(task.Task, input.Task, key, "task");
input.Answer = Deal(task.Answer, input.Answer, key, "answer");
input.Analysis = Deal(task.Analysis, input.Analysis, key, "analysis");
task.Type = input.Type;
task.Task = input.Task;
task.Options = input.Options;
task.Answer = input.Answer;
//task.AnswerUrl = input.AnswerUrl;
task.Analysis = input.Analysis;
//task.AnalysisUrl = input.AnalysisUrl;
task.Score = input.Score;
task.AnswerTime = input.AnswerTime;
// task.VideoUrl = input.VideoUrl;
task.No = input.No;
var no = input.No.Split('-').Select(int.Parse).ToArray();
if (no.Last() >= 2)
@ -91,27 +96,92 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
var groupTask = await Queryable().Where(w => w.No == startNo && w.JournalId == input.JournalId).FirstAsync();
BusinessException.ThrowIf(groupTask.IsNull(), "未找到关联跨页的第一部分");
task.GroupId = groupTask.GroupId;
task.Score = groupTask.Score;
task.AnswerTime = groupTask.AnswerTime;
task.Type = groupTask.Type;
}
//task.JournalId = input.JournalId;
//task.JournalPageId = input.JournalPageId;
// 这里不能直接用Set,因为jsonmap无法赋值 不知道为啥
return await base.Updateable(task).ExecuteCommandAsync() > 0;
var taskResult = await base.Updateable(task).ExecuteCommandAsync() > 0;
// 答案侧字段处理
var answer = await answerRepository.Queryable().Where(a => a.JournalPageTaskId == task.Id).FirstAsync();
if (answer == null)
{
// 兼容旧数据:如果 Answer 记录不存在则创建
answer = new JournalPageTaskAnswer
{
JournalPageTaskId = task.Id,
CreatedBy = "System",
CreatedAt = DateTime.Now,
IsDeleted = false
};
}
// 答案/解析内容处理
answer.Answer = Deal(answer.Answer, input.Answer, key, "answer");
answer.Analysis = Deal(answer.Analysis, input.Analysis, key, "analysis");
answer.Score = input.Score;
answer.AnswerTime = input.AnswerTime;
answer.UpdatedBy = "System";
answer.UpdatedAt = DateTime.Now;
if (no.Last() >= 2)
{
var startNo = $"{no[0]}-{no[1]}-{no[2]}-1";
var firstTask = await Queryable().Where(w => w.No == startNo && w.JournalId == input.JournalId).FirstAsync();
if (firstTask != null)
{
var firstAnswer = await answerRepository.Queryable().Where(a => a.JournalPageTaskId == firstTask.Id).FirstAsync();
if (firstAnswer != null)
{
answer.Score = firstAnswer.Score;
answer.AnswerTime = firstAnswer.AnswerTime;
}
}
}
if (answer.Id == 0)
{
await answerRepository.InsertAsync(answer);
}
else
{
await answerRepository.UpdateAsync(answer);
}
return taskResult;
}
public async Task<bool> KeywordAnalysisAsync(JournalPageTaskKeywordAnalysis input)
{
return await base.Updateable().SetColumns(s => s.KeywordAnalysis, input.KeywordAnalysis).Where(w => w.GroupId == input.Id).ExecuteCommandAsync() > 0;
// KeywordAnalysis 已移至 Answer 表,通过 GroupId 关联的 Task 找到对应的 Answer 记录进行更新
var taskIds = await Queryable().Where(w => w.GroupId == input.Id).Select(w => w.Id).ToListAsync();
if (taskIds.Count == 0) return false;
return await answerRepository.Updateable()
.SetColumns(s => s.KeywordAnalysis, input.KeywordAnalysis)
.Where(a => taskIds.Contains(a.JournalPageTaskId))
.ExecuteCommandAsync() > 0;
}
public async Task<JournalPageTaskOutput> DetailAsync(long id)
{
var data = await base.Queryable()
.Where(w => w.Id == id)
.Select(w => new JournalPageTaskOutput()
, true).FirstAsync();
.InnerJoin<JournalPageTaskAnswer>((w, a) => a.JournalPageTaskId == w.Id)
.Where((w, a) => w.Id == id)
.Select((w, a) => new JournalPageTaskOutput()
{
Id = w.Id,
JournalId = w.JournalId,
JournalPageId = w.JournalPageId,
No = w.No,
Type = (TaskBankTypeEnum)w.Type,
Task = w.Task,
Options = w.Options,
Answer = a.Answer,
Analysis = a.Analysis,
Score = a.Score,
AnswerTime = a.AnswerTime,
KeywordAnalysis = a.KeywordAnalysis
}, true).FirstAsync();
return data;
}
@ -121,7 +191,10 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
var task = await base.Queryable().Where(w => w.Id == id).FirstAsync();
BusinessException.ThrowIf(task.IsNull(), "问题不存在");
var key = $"Journal/{task.JournalId}/{task.JournalPageId}/{id}";
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{id}";
// 同时删除关联的答案记录
await answerRepository.DeleteAsync(a => a.JournalPageTaskId == id);
ossService.DeleteObject(key);
@ -135,13 +208,13 @@ public class JournalPageTaskService(BaseRepository<Journal> journalRepository, O
if (input.AudioUrl.NotNull())
{
var key = $"Journal/{task.JournalId}/{task.JournalPageId}/{task.Id}/audio.{input.AudioUrl.ToExtension()}";
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.Id}/audio.{input.AudioUrl.ToExtension()}";
ossService.CopyObject(input.AudioUrl, key);
input.AudioUrl = key;
}
if (input.PointsUrl.NotNull())
{
var key = $"Journal/{task.JournalId}/{task.JournalPageId}/{task.Id}/points.json";
var key = $"journal/{task.JournalId}/{task.JournalPageId}/{task.Id}/points.json";
ossService.CopyObject(input.PointsUrl, key);
input.PointsUrl = key;
}

View File

@ -59,6 +59,65 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
return new PageListModel<JournalDto>(dataList, search.PageIndex, search.PageSize, totalNumber);
}
/// <summary>
/// 创建杂志
/// </summary>
/// <param name="input">杂志信息</param>
/// <returns>新杂志ID</returns>
public async Task<BaseResponse<long>> AddAsync(JournalAddDto input)
{
BusinessException.ThrowIf(string.IsNullOrWhiteSpace(input.Name), "书籍名称不能为空");
var journal = new Journal
{
Name = input.Name.Trim(),
Title = input.Title,
TotalPage = input.TotalPage,
Status = (int)JournalStatusEnum.Created,
PdfUrl = input.PdfUrl?.RemoveDomain(),
Width = input.Width,
Height = input.Height,
Cover = input.Cover?.RemoveDomain(),
BackCover = input.BackCover?.RemoveDomain(),
PdfPreviewUrl = input.PdfPreviewUrl?.RemoveDomain(),
CreatedBy = "System",
UpdatedBy = "System",
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsDeleted = false
};
// Id 已由 YitIdHelper 预生成,先搬运文件到正式目录,再一次性插入
if (!string.IsNullOrWhiteSpace(input.Cover))
{
var coverKey = $"journal/{journal.Id}/cover.{input.Cover.ToExtension()}";
ossService.CopyObject(input.Cover.RemoveDomain(), coverKey);
journal.Cover = coverKey;
}
if (!string.IsNullOrWhiteSpace(input.BackCover))
{
var backCoverKey = $"journal/{journal.Id}/backCover.{input.BackCover.ToExtension()}";
ossService.CopyObject(input.BackCover.RemoveDomain(), backCoverKey);
journal.BackCover = backCoverKey;
}
if (!string.IsNullOrWhiteSpace(input.PdfUrl))
{
var pdfKey = $"journal/{journal.Id}/Journal.{input.PdfUrl.ToExtension()}";
ossService.CopyObject(input.PdfUrl.RemoveDomain(), pdfKey);
journal.PdfUrl = pdfKey;
}
var res = await base.InsertAsync(journal);
if (!res)
{
new BusinessException("创建失败");
}
logger.LogInformation("杂志创建成功ID: {Id}, 名称: {Name}", journal.Id, input.Name);
return BaseResponse<long>.Success(journal.Id);
}
/// <summary>
/// 编辑
/// </summary>
@ -76,7 +135,7 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
}
else if (input.Cover.RemoveDomain() != Journal.Cover)
{
var key = $"Journal/{Journal.Id}/cover.{input.Cover.ToExtension()}";
var key = $"journal/{Journal.Id}/cover.{input.Cover.ToExtension()}";
ossService.CopyObject(input.Cover.RemoveDomain(), key);
Journal.Cover = key;
}
@ -87,7 +146,7 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
}
else if (input.BackCover.RemoveDomain() != Journal.BackCover)
{
var backCoverkey = $"Journal/{Journal.Id}/backCover.{input.BackCover.ToExtension()}";
var backCoverkey = $"journal/{Journal.Id}/backCover.{input.BackCover.ToExtension()}";
ossService.CopyObject(input.BackCover.RemoveDomain(), backCoverkey);
Journal.BackCover = backCoverkey;
}
@ -98,13 +157,14 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
}
else if (input.PdfUrl.RemoveDomain() != Journal.PdfUrl)
{
var pdfUrlkey = $"Journal/{Journal.Id}/Journal.{input.PdfUrl.ToExtension()}";
var pdfUrlkey = $"journal/{Journal.Id}/Journal.{input.PdfUrl.ToExtension()}";
ossService.CopyObject(input.PdfUrl.RemoveDomain(), pdfUrlkey);
Journal.PdfUrl = pdfUrlkey;
}
Journal.Width = input.Width;
Journal.Height = input.Height;
Journal.Name = input.Name;
Journal.Title = input.Title;
var res = await UseTranAsync(async () =>
{
@ -152,12 +212,12 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
return true;
});
//删除OSS上的Journal/{JournalId}文件夹
//删除OSS上的journal/{JournalId}文件夹
if (result)
{
foreach (var JournalId in ids)
{
var prefix = $"Journal/{JournalId}/";
var prefix = $"journal/{JournalId}/";
var keys = ossService.ListObjects(prefix);
if (keys?.Count > 0)
{
@ -219,72 +279,6 @@ public class JournalService(BaseRepository<JournalPage> JournalPageRepository,
PdfUrl = Journal.PdfUrl
};
//铺码业务后续调整
//var exist = pages.All(c => c.PageNo.IsNull());
//if (!exist)
//{
// var dotIds = pages.Select(s => s.DotId).Distinct();
// var dots = await dotFileRepository.Queryable().Where(w => dotIds.Contains(w.Id)).ToListAsync();
// output.DotMatrixs = dots.Select(s => new DotMatrixMqOutput() { DotId = s.Id, FileAddress = s.FileAddress }).ToList();
// foreach (var page in pages)
// {
// var find = output.DotMatrixs.Find(f => f.DotId == page.DotId);
// find!.Pages.Add(new DotMatrixPageDto()
// {
// PageNo = page.PageNo,
// PageNum = 1
// });
// }
// var ok = await producingService.SendAsync(new RabbitMQSendParam() { Exchange = "icr.direct", RoutingKey = "mq.dotmatrix", Data = output });
// BusinessException.ThrowIf(!ok, "消息发送失败,生成失败");
// await base.Updateable().SetColumns(s => s.Status, JournalStatusEnum.Codeing).Where(w => w.Id == id).ExecuteCommandAsync();
//}
//else
//{
// //var first = await dotFileDetailRepository.Queryable().Where(w => w.IsUse == false).GroupBy(g => g.DotId).Having(h => h.Count() >= pages.Count).FirstAsync(a => new { DotId = a.Key, Count = a.Count() });
// var first = await dotFileDetailRepository.Queryable().Where(w => w.IsUse == false).GroupBy(g => g.DotId).Having(h => SqlFunc.AggregateCount(h.Id) >= pages.Count).Select(a => new { DotId = a.DotId, Count = SqlFunc.AggregateCount(a.Id) }).FirstAsync();
// BusinessException.ThrowIf(first.IsNull(), "点阵页码不足,生成失败");
// var dotFile = await dotFileRepository.Queryable().Where(w => w.Id == first.DotId).FirstAsync();
// if (dotFile != null)
// dotFile.Details = dotFileDetailRepository.Queryable().Where(w => !w.IsUse && w.DotId == dotFile.Id).Take(pages.Count()).ToList();
// var dotMatrix = new DotMatrixMqOutput()
// {
// DotId = dotFile.Id,
// FileAddress = dotFile.FileAddress,
// };
// output.DotMatrixs.Add(dotMatrix);
// foreach (var item in dotFile.Details)
// {
// var index = dotFile.Details.IndexOf(item);
// pages[index].PageNo = item.PageName;
// pages[index].DotId = dotFile.Id;
// dotMatrix.Pages.Add(new DotMatrixPageDto()
// {
// PageNo = item.PageName,
// PageNum = 1
// });
// }
// await UseTranAsync(async () =>
// {
// // 更新使用数量
// //await dotFileRepository.Updateable().SetColumns(s => s.TotalUse, dotFile.TotalUse + pages.Count).Where(w => w.Id == dotFile.Id).ExecuteCommandAsync();
// // 更新使用
// await dotFileDetailRepository.Updateable().SetColumns(s => s.IsUse, true).Where(w => dotFile.Details.Select(s => s.Id).Contains(w.Id)).ExecuteCommandAsync();
// // 更新页码
// await dotMatrixPageRepository.UpdateRangeAsync(pages);
// await Updateable().SetColumns(s => s.Status, JournalStatusEnum.CodeSuccess).Where(w => w.Id == id).ExecuteCommandAsync();
// //发送消息
// //var ok = await producingService.SendAsync(new RabbitMQSendParam() { Exchange = "icr.direct", RoutingKey = "mq.dotmatrix", Data = output });
// //BusinessException.ThrowIf(!ok, "消息发送失败,生成失败");
// });
//}
return output;
}