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 }