struct&&assiQues

This commit is contained in:
SpecialX
2025-06-20 15:37:39 +08:00
parent f37262d72e
commit d20c051c51
68 changed files with 1927 additions and 2869 deletions

View File

@@ -0,0 +1,163 @@
using System.Xml.Serialization; // 用于 XML 序列化/反序列化
using TechHelper.Client.AI;
using TechHelper.Services;
using Entities.DTO;
using System.Net.Http.Json; // 用于 PostAsJsonAsync
using Newtonsoft.Json;
namespace TechHelper.Client.Services
{
public class ExamService : IExamService
{
private readonly IAIService _aIService; // 遵循命名规范,字段前加下划线
private readonly HttpClient _client; // 直接注入 HttpClient
public ExamService(IAIService aIService, HttpClient client) // 修正点:直接注入 HttpClient
{
_aIService = aIService;
_client = client; // 赋值注入的 HttpClient 实例
}
public ApiResponse ConvertToXML<T>(string xmlContent)
{
string cleanedXml = xmlContent.Trim();
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringReader reader = new StringReader(cleanedXml))
{
try
{
T deserializedObject = (T)serializer.Deserialize(reader);
return ApiResponse.Success(result: deserializedObject, message: "XML 反序列化成功。");
}
catch (InvalidOperationException ex)
{
return ApiResponse.Error(
message: $"XML 反序列化操作错误: {ex.Message}. 内部异常: {ex.InnerException?.Message ?? ""}");
}
catch (Exception ex)
{
return ApiResponse.Error(message: $"处理 XML 反序列化时发生未知错误: {ex.Message}");
}
}
}
public async Task<ApiResponse> DividExam(string examContent)
{
try
{
string? response = await _aIService.CallGLM(examContent, AIConfiguration.BreakQuestions);
if (response != null)
{
return ApiResponse.Success(result: response, message: "试题分割成功。");
}
else
{
return ApiResponse.Error(message: "AI 服务未能返回有效内容,或返回内容为空。");
}
}
catch (Exception ex)
{
// 实际应用中,这里应该加入日志记录
return ApiResponse.Error(message: $"处理试题分割时发生内部错误: {ex.Message}");
}
}
public async Task<ApiResponse> FormatExam(string examContent)
{
try
{
string? response = await _aIService.CallGLM(examContent, AIConfiguration.Format);
if (response != null)
{
return ApiResponse.Success(result: response, message: "试题格式化成功。");
}
else
{
return ApiResponse.Error(message: "AI 服务未能返回有效内容,或返回内容为空。");
}
}
catch (Exception ex)
{
// 实际应用中,这里应该加入日志记录
return ApiResponse.Error(message: $"处理试题格式化时发生内部错误: {ex.Message}");
}
}
public async Task<ApiResponse> GetAllExam(string user)
{
// 直接使用注入的 _client 实例
var response = await _client.GetAsync($"exam/getAllPreview?user={user}");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<List<ExamDto>>(content);
return ApiResponse.Success(result: result);
}
else
{
// 读取错误信息,并返回 ApiResponse
var errorContent = await response.Content.ReadAsStringAsync();
return ApiResponse.Error(message: $"获取所有试题失败: {response.StatusCode} - {errorContent}");
}
}
public async Task<ApiResponse> GetExam(Guid guid)
{
var response = await _client.GetAsync($"exam/get?id={guid}");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var exam = JsonConvert.DeserializeObject<ExamDto>(content);
return ApiResponse.Success(result: exam);
}
else
{
var errorContent = await response.Content.ReadAsStringAsync();
return ApiResponse.Error(message: $"获取试题失败: {response.StatusCode} - {errorContent}");
}
}
public async Task<ApiResponse> ParseSingleQuestionGroup(string examContent)
{
try
{
string? response = await _aIService.CallGLM(examContent, AIConfiguration.ParseSignelQuestion2);
if (response != null)
{
return ApiResponse.Success(result: response, message: "试题解析成功。");
}
else
{
return ApiResponse.Error(message: "AI 服务未能返回有效内容,或返回内容为空。");
}
}
catch (Exception ex)
{
// 实际应用中,这里应该加入日志记录
return ApiResponse.Error(message: $"处理试题解析时发生内部错误: {ex.Message}");
}
}
public async Task<ApiResponse> SaveParsedExam(AssignmentDto assiDto)
{
// 直接使用注入的 _client 实例
var response = await _client.PostAsJsonAsync("exam/add", assiDto);
if (response.IsSuccessStatusCode) // 检查是否是成功的状态码,例如 200 OK, 201 Created 等
{
return ApiResponse.Success(message: "试题保存成功。");
}
else
{
var errorContent = await response.Content.ReadAsStringAsync();
return ApiResponse.Error(message: $"保存试题失败: {response.StatusCode} - {errorContent}");
}
}
}
}