添加项目文件。

This commit is contained in:
“hsc”
2026-07-29 13:12:27 +08:00
parent d6da766e2d
commit 8cf45d36b9
297 changed files with 35814 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
using Model;
using Model.Entity;
using ORM;
using Service.Interface;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Service.Implement
{
public class BaseService<TEntity> : IBaseService<TEntity> where TEntity : BaseEntity, new()
{
protected readonly SqlSugarRepository<TEntity> _repository;
public BaseService(SqlSugarRepository<TEntity> repository)
{
_repository = repository;
}
/// <summary>
/// 查询全部
/// </summary>
public virtual async Task<Result<List<TEntity>>> GetAllAsync()
{
try
{
var list = await _repository.Entities.ToListAsync();
return Result<List<TEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<TEntity>>.Error("查询所有数据失败", ex);
}
}
/// <summary>
/// 根据日期查询全部
/// </summary>
public virtual async Task<Result<List<TEntity>>> GetAllAsyncByDate(DateTime? startDate, DateTime? endDate)
{
try
{
var list = await _repository.Entities.Where(x => x.CreateTime >= startDate && x.CreateTime <= endDate).ToListAsync();
return Result<List<TEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<TEntity>>.Error("查询所有数据失败", ex);
}
}
/// <summary>
/// 分页查询
/// </summary>
public virtual async Task<Result<List<TEntity>>> GetPagedAsync(int pageIndex, int pageSize, RefAsync<int> total)
{
try
{
var list = await _repository.Entities
.OrderBy(d => d.Id)
.ToPageListAsync(pageIndex, pageSize, total);
total.Value = (int)Math.Ceiling((double)total.Value / pageSize);
return Result<List<TEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<TEntity>>.Error("分页查询数据失败", ex);
}
}
/// <summary>
/// 分页查询,并可以根据日期范围进行过滤
/// </summary>
public virtual async Task<Result<List<TEntity>>> GetPagedAsync(int pageIndex, int pageSize, RefAsync<int> total, DateTime? startDate, DateTime? endDate)
{
try
{
var list = await _repository.Entities
.Where(x=>x.CreateTime>=startDate&&x.CreateTime <= endDate)
.OrderBy(d => d.Id)
.ToPageListAsync(pageIndex, pageSize, total);
total.Value = (int)Math.Ceiling((double)total.Value / pageSize);
return Result<List<TEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<TEntity>>.Error("分页查询数据失败", ex);
}
}
/// <summary>
/// 插入单条数据
/// </summary>
public virtual async Task<Result<bool>> InsertAsync(TEntity entity)
{
try
{
var result = await _repository.Context.Insertable(entity).ExecuteCommandAsync();
return Result<bool>.Success(result > 0);
}
catch (Exception ex)
{
return Result<bool>.Error("插入数据失败", ex);
}
}
/// <summary>
/// 删除单条数据(根据 Id
/// </summary>
/// <param name="id">主键 Id</param>
public virtual async Task<Result<bool>> DeleteAsync(long id)
{
if (id <= 0)
return Result<bool>.Error("主键 Id 无效,无法删除");
try
{
// 删除实体
var result = await _repository.Context
.Deleteable<TEntity>()
.Where(x => x.Id == id)
.ExecuteCommandAsync();
return Result<bool>.Success(result > 0);
}
catch (Exception ex)
{
return Result<bool>.Error("删除数据失败", ex);
}
}
}
}

View File

@@ -0,0 +1,71 @@
using Model;
using Model.Entity;
using ORM;
using Service.Interface;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Service.Implement
{
/// <summary>
/// 监测数值记录服务实现
/// </summary>
public class MonitorValueService : BaseService<MonitorValueEntity>, IMonitorValueService
{
// 继承父类构造函数,注入 SqlSugar 仓储
public MonitorValueService(SqlSugarRepository<MonitorValueEntity> repository) : base(repository)
{
}
/// <summary>
/// 批量插入监测数据
/// </summary>
public async Task<Result<bool>> InsertRangeAsync(List<MonitorValueEntity> entities)
{
if (entities == null || entities.Count == 0)
return Result<bool>.Success(true);
try
{
// 使用 SqlSugar 的批量插入,底层会转换为 BulkCopy 或是批量 SQL速度极快
var result = await _repository.Context.Insertable(entities).ExecuteCommandAsync();
return Result<bool>.Success(result > 0);
}
catch (Exception ex)
{
return Result<bool>.Error("批量插入监测数据失败", ex);
}
}
/// <summary>
/// 根据监测通道名称,分页查询历史记录
/// </summary>
public async Task<Result<List<MonitorValueEntity>>> GetPagedByNameAsync(string monitorName, int pageIndex, int pageSize, RefAsync<int> total)
{
try
{
var query = _repository.Entities;
// 如果传了名字则按名字过滤
if (!string.IsNullOrEmpty(monitorName))
{
query = query.Where(x => x.MonitorName == monitorName);
}
var list = await query
.OrderByDescending(d => d.CreateTime) // 监测项通常优先看最新的数据
.ToPageListAsync(pageIndex, pageSize, total);
// 计算总页数
total.Value = (int)Math.Ceiling((double)total.Value / pageSize);
return Result<List<MonitorValueEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<MonitorValueEntity>>.Error($"根据名称 [{monitorName}] 分页查询数据失败", ex);
}
}
}
}

View File

@@ -0,0 +1,109 @@
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(DateTime? startTime = null, DateTime? endTime = null, string? scope = null)
{
try
{
// 使用 SqlSugar 的 GroupBy 查询,聚合最大/最小时间
// 推荐采用这种按组投影的方式,将分组计算交由数据库处理,性能最佳
var query = _repository.Context.Queryable<TestReportEntity>();
// 日期范围筛选
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<IList<TestReportModel>>.Success(list);
}
catch (Exception ex)
{
return Result<IList<TestReportModel>>.Error("获取分组过滤列表失败", ex);
}
}
/// <summary>
/// 根据日期和台架名称筛选获取完整的测试步骤实体列表(无分组,用于导出)
/// </summary>
public async Task<Result<List<TestReportEntity>>> GetEntitiesByFilter(DateTime? startTime = null, DateTime? endTime = null, string? scope = null)
{
try
{
var query = _repository.Context.Queryable<TestReportEntity>();
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<List<TestReportEntity>>.Success(list);
}
catch (Exception ex)
{
return Result<List<TestReportEntity>>.Error("获取导出数据失败", ex);
}
}
}
}