using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ZhonTai.Admin.Core.Repositories;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Output;
namespace NPP.SmartSchedue.Api.Contracts.Domain.Integration
{
///
/// 智能整合记录仓储接口
///
/// 业务思考:
/// 1. 提供丰富的查询接口,支持多维度的历史数据分析
/// 2. 考虑查询性能,提供必要的分页和索引优化
/// 3. 支持统计分析功能,为业务决策提供数据支持
/// 4. 考虑数据量增长,提供数据归档和清理机制
///
public interface IIntegrationRecordRepository : IRepositoryBase
{
#region 基础查询方法
///
/// 根据批次编码获取整合记录
/// 业务场景:根据批次编码快速定位特定的整合操作
///
/// 批次编码
/// 整合记录,如果不存在返回null
Task GetByBatchCodeAsync(string batchCode);
///
/// 获取指定时间范围内的整合记录
/// 业务场景:时间范围查询,支持日报、周报、月报等业务需求
///
/// 开始时间(包含)
/// 结束时间(包含)
/// 页码(从1开始)
/// 每页大小
/// 整合记录分页列表
Task<(List Records, long Total)> GetByTimeRangeAsync(
DateTime startTime,
DateTime endTime,
int pageIndex = 1,
int pageSize = 20);
///
/// 根据操作人员获取整合记录
/// 业务场景:查看特定操作员的整合历史,用于工作量统计和绩效分析
///
/// 操作员用户ID
/// 页码
/// 每页大小
/// 整合记录分页列表
Task<(List Records, long Total)> GetByOperatorAsync(
long operatorUserId,
int pageIndex = 1,
int pageSize = 20);
///
/// 根据项目编号获取相关整合记录
/// 业务场景:项目维度的整合历史查询和分析
///
/// 项目编号
/// 页码
/// 每页大小
/// 整合记录分页列表
Task<(List Records, long Total)> GetByProjectNumberAsync(
string projectNumber,
int pageIndex = 1,
int pageSize = 20);
#endregion
#region 复合查询方法
///
/// 多维度综合查询整合记录
/// 业务场景:复杂查询场景,支持多个条件的组合查询
///
/// 操作员ID(可选)
/// 项目编号(可选)
/// 整合类型(可选)
/// 开始时间(可选)
/// 结束时间(可选)
/// 最小成功率(可选)
/// 页码
/// 每页大小
/// 整合记录分页列表
Task<(List Records, long Total)> GetByMultipleConditionsAsync(
long? operatorUserId = null,
string? projectNumber = null,
string? integrationType = null,
DateTime? startTime = null,
DateTime? endTime = null,
decimal? minSuccessRate = null,
int pageIndex = 1,
int pageSize = 20);
///
/// 获取包含指定任务的整合记录
/// 业务场景:根据任务ID反向查询相关的整合历史
///
/// 任务ID
/// 包含该任务的整合记录列表
Task> GetRecordsContainingTaskAsync(long taskId);
#endregion
#region 统计分析方法
///
/// 获取指定时间段的整合统计数据
/// 业务场景:生成统计报表,分析整合效果和趋势
///
/// 开始时间
/// 结束时间
/// 统计数据
Task GetIntegrationStatisticsAsync(DateTime startTime, DateTime endTime);
///
/// 获取操作员整合统计数据
/// 业务场景:操作员工作量和效率分析
///
/// 操作员ID
/// 开始时间
/// 结束时间
/// 操作员统计数据
Task GetOperatorStatisticsAsync(
long operatorUserId,
DateTime startTime,
DateTime endTime);
///
/// 获取策略效果分析数据
/// 业务场景:分析不同分配策略的效果,为策略优化提供数据支持
///
/// 开始时间
/// 结束时间
/// 策略效果统计数据
Task> GetStrategyEffectivenessAsync(
DateTime startTime,
DateTime endTime);
///
/// 获取整合性能趋势数据
/// 业务场景:监控系统性能,识别性能瓶颈和优化机会
///
/// 最近天数
/// 性能趋势数据
Task> GetPerformanceTrendAsync(int days = 30);
#endregion
#region 业务专用方法
///
/// 检查批次编码是否已存在
/// 业务场景:防止批次编码重复,确保数据唯一性
///
/// 批次编码
/// 是否存在
Task BatchCodeExistsAsync(string batchCode);
///
/// 获取最近的整合记录
/// 业务场景:快速查看最新的整合状态,支持监控面板显示
///
/// 获取记录数量
/// 最近的整合记录列表
Task> GetRecentRecordsAsync(int count = 10);
///
/// 获取失败率高的整合记录
/// 业务场景:识别问题操作,支持质量改进和问题排查
///
/// 最小失败率阈值(百分比)
/// 开始时间
/// 结束时间
/// 最大返回数量
/// 高失败率的整合记录
Task> GetHighFailureRateRecordsAsync(
decimal minFailureRate,
DateTime startTime,
DateTime endTime,
int count = 50);
///
/// 软删除过期的测试数据
/// 业务场景:定期清理测试数据,保持生产环境数据整洁
///
/// 删除此日期之前的测试数据
/// 删除的记录数量
Task SoftDeleteExpiredTestDataAsync(DateTime beforeDate);
#endregion
}
#region 统计数据模型
///
/// 整合统计数据
///
public class IntegrationStatistics
{
///
/// 统计时间范围开始
///
public DateTime StartTime { get; set; }
///
/// 统计时间范围结束
///
public DateTime EndTime { get; set; }
///
/// 整合操作总次数
///
public int TotalIntegrations { get; set; }
///
/// 涉及任务总数
///
public long TotalTasks { get; set; }
///
/// 成功分配任务数
///
public long SuccessfulTasks { get; set; }
///
/// 失败分配任务数
///
public long FailedTasks { get; set; }
///
/// 平均成功率
///
public decimal AverageSuccessRate { get; set; }
///
/// 平均执行耗时(毫秒)
///
public long AverageElapsedTime { get; set; }
///
/// 平均人员公平性评分
///
public decimal AveragePersonnelFairnessScore { get; set; }
///
/// 平均设备利用率
///
public decimal AverageEquipmentUtilizationRate { get; set; }
///
/// 活跃操作员数量
///
public int ActiveOperatorCount { get; set; }
///
/// 涉及项目数量
///
public int InvolvedProjectCount { get; set; }
}
///
/// 操作员整合统计数据
///
public class OperatorIntegrationStats
{
///
/// 操作员用户ID
///
public long OperatorUserId { get; set; }
///
/// 操作员用户名
///
public string OperatorUserName { get; set; } = string.Empty;
///
/// 操作员真实姓名
///
public string OperatorRealName { get; set; } = string.Empty;
///
/// 执行整合次数
///
public int IntegrationCount { get; set; }
///
/// 处理任务总数
///
public long TotalTasks { get; set; }
///
/// 平均成功率
///
public decimal AverageSuccessRate { get; set; }
///
/// 总耗时(毫秒)
///
public long TotalElapsedTime { get; set; }
///
/// 平均每次整合耗时
///
public long AverageIntegrationTime { get; set; }
///
/// 最后操作时间
///
public DateTime LastOperationTime { get; set; }
}
///
/// 策略效果统计数据
///
public class StrategyEffectivenessStats
{
///
/// 人员分配策略
///
public string PersonnelStrategy { get; set; } = string.Empty;
///
/// 设备分配策略
///
public string EquipmentStrategy { get; set; } = string.Empty;
///
/// 使用次数
///
public int UsageCount { get; set; }
///
/// 平均成功率
///
public decimal AverageSuccessRate { get; set; }
///
/// 平均人员公平性评分
///
public decimal AveragePersonnelFairnessScore { get; set; }
///
/// 平均设备利用率
///
public decimal AverageEquipmentUtilizationRate { get; set; }
///
/// 平均执行耗时
///
public long AverageElapsedTime { get; set; }
}
///
/// 整合性能趋势数据
///
public class IntegrationPerformanceTrend
{
///
/// 日期
///
public DateTime Date { get; set; }
///
/// 当日整合次数
///
public int IntegrationCount { get; set; }
///
/// 当日平均成功率
///
public decimal AverageSuccessRate { get; set; }
///
/// 当日平均耗时(毫秒)
///
public long AverageElapsedTime { get; set; }
///
/// 当日处理任务总数
///
public long TotalTasks { get; set; }
}
#endregion
}