Files
ADP/Service/Implement/TestReportService.cs

69 lines
2.4 KiB
C#

using Model;
using Model.Entity;
using Model.Models;
using ORM;
using Service.Interface;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static System.Formats.Asn1.AsnWriter;
namespace Service.Implement
{
public class TestReportService : BaseService<TestReportEntity>, ITestReportService
{
public TestReportService(SqlSugarRepository<TestReportEntity> repository) : base(repository)
{
}
/// <summary>
/// 根据 TestRoundId 获取符合条件的测试步骤
/// </summary>
public async Task<Result<List<TestReportEntity>>> GetByTestRoundIdAsync(Guid testRoundId)
{
try
{
var list = await _repository.Entities
.Where(x => x.TestRoundId == testRoundId)
.ToListAsync();
return Result<List<TestReportEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<TestReportEntity>>.Error("根据 TestRoundId 查询数据失败", ex);
}
}
/// <summary>
/// 根据 TestRoundId 分组,获取唯一记录并按分组统计最大与最小时间
/// </summary>
public async Task<Result<IList<TestReportModel>>> GetFilterList()
{
try
{
// 使用 SqlSugar 的 GroupBy 查询,聚合最大/最小时间
// 推荐采用这种按组投影的方式,将分组计算交由数据库处理,性能最佳
var list = await _repository.Context.Queryable<TestReportEntity>()
.GroupBy(x => x.TestRoundId)
.Select(x => new TestReportModel
{
TestRoundId = x.TestRoundId,
StartTime = SqlFunc.AggregateMin(x.CreateTime),
EndTime = SqlFunc.AggregateMax(x.CreateTime),
Scope=x.Scope,
FileName = x.FileName,
})
.ToListAsync();
return Result<IList<TestReportModel>>.Success(list);
}
catch (Exception ex)
{
return Result<IList<TestReportModel>>.Error("获取分组过滤列表失败", ex);
}
}
}
}