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, ITestReportService { public TestReportService(SqlSugarRepository repository) : base(repository) { } /// /// 根据 TestRoundId 获取符合条件的测试步骤 /// public async Task>> GetByTestRoundIdAsync(Guid testRoundId) { try { var list = await _repository.Entities .Where(x => x.TestRoundId == testRoundId) .ToListAsync(); return Result>.Success(list); } catch (Exception ex) { return Result>.Error("根据 TestRoundId 查询数据失败", ex); } } /// /// 根据 TestRoundId 分组,获取唯一记录并按分组统计最大与最小时间, /// 支持按日期范围与台架名称筛选。 /// public async Task>> GetFilterList(DateTime? startTime = null, DateTime? endTime = null, string? scope = null) { try { // 使用 SqlSugar 的 GroupBy 查询,聚合最大/最小时间 // 推荐采用这种按组投影的方式,将分组计算交由数据库处理,性能最佳 var query = _repository.Context.Queryable(); // 日期范围筛选 if (startTime.HasValue) query = query.Where(x => x.CreateTime >= startTime.Value); if (endTime.HasValue) query = query.Where(x => x.CreateTime <= endTime.Value); // 台架名称筛选 if (!string.IsNullOrEmpty(scope)) query = query.Where(x => x.Scope == scope); var list = await query .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>.Success(list); } catch (Exception ex) { return Result>.Error("获取分组过滤列表失败", ex); } } /// /// 根据日期和台架名称筛选获取完整的测试步骤实体列表(无分组,用于导出) /// public async Task>> GetEntitiesByFilter(DateTime? startTime = null, DateTime? endTime = null, string? scope = null) { try { var query = _repository.Context.Queryable(); if (startTime.HasValue) query = query.Where(x => x.CreateTime >= startTime.Value); if (endTime.HasValue) query = query.Where(x => x.CreateTime <= endTime.Value); if (!string.IsNullOrEmpty(scope)) query = query.Where(x => x.Scope == scope); var list = await query .OrderBy(x => x.CreateTime) .ToListAsync(); return Result>.Success(list); } catch (Exception ex) { return Result>.Error("获取导出数据失败", ex); } } } }