refactor(work-service,print-worker): 优化代码结构与错误处理

1. 提取评分prompt构建逻辑减少重复代码
2. 移除冗余的参考答案图片循环逻辑
3. 重构打印服务的错误回调逻辑,统一失败处理流程
4. 新增打印服务的任务取消处理逻辑
This commit is contained in:
glz
2026-07-08 17:07:41 +08:00
parent 195792ec66
commit de9a0c2978
3 changed files with 45 additions and 37 deletions

View File

@ -233,13 +233,14 @@ public class JournalTaskReceiveConsumer(
{
throw new InvalidOperationException("AI聊天服务配置不完整请检查 AiChat 配置节点");
}
var answerMapPrompt = BuildScorePrompt(scoreUnit, referenceAnswerMap);
logger.LogInformation(answerMapPrompt);
var content = new List<object>
{
new
{
type = "text",
text = BuildScorePrompt(scoreUnit, referenceAnswerMap)
text = answerMapPrompt
}
};
@ -251,7 +252,7 @@ public class JournalTaskReceiveConsumer(
content.Add(new
{
type = "text",
text = $"以下为任务 {context.Task.Id} 的学生作答图片,共 {answerImages.Count} 张。"
text = $"以下学生作答图片,共 {answerImages.Count} 张。"
});
foreach (var answerImage in answerImages)
@ -269,31 +270,6 @@ public class JournalTaskReceiveConsumer(
throw new InvalidOperationException($"评分单元 {scoreUnit.GroupId} 缺少答案图片");
}
foreach (var context in scoreUnit.Questions)
{
referenceAnswerMap.TryGetValue(context.Task.Id, out var referenceAnswers);
var referenceAnswerImages = await BuildReferenceAnswerImageContentsAsync(context.Task.Id, referenceAnswers ?? [], cancellationToken);
if (referenceAnswerImages.Count == 0)
{
continue;
}
content.Add(new
{
type = "text",
text = $"以下为任务 {context.Task.Id} 的参考答案图片,共 {referenceAnswerImages.Count} 张。参考答案不是必有评分时以题目Prompt和学生答案为主。"
});
foreach (var referenceAnswerImage in referenceAnswerImages)
{
content.Add(new
{
type = "image_url",
image_url = new { url = referenceAnswerImage.DataUrl }
});
}
}
var requestBody = new
{
model,
@ -403,6 +379,7 @@ public class JournalTaskReceiveConsumer(
prompt.AppendLine(" \"Completion\": 100,");
prompt.AppendLine(" \"Result\": \"50字内的中文评语\"");
prompt.AppendLine("}");
return prompt.ToString();
}