/** * Haoliang.Core.Services - 核心业务服务接口层 * * 本文件定义CNC机床数据采集分析系统的所有核心业务服务接口。 * 采用依赖注入模式,确保各层解耦和可测试性。 * * 接口设计原则: * 1. 每个接口职责单一,便于实现和测试 * 2. 方法命名清晰,体现业务语义 * 3. 支持异步操作,提升系统吞吐量 * 4. 返回类型明确,便于调用方处理 * * 修订历史: * - 2024-01-01: 初始版本,定义系统核心服务接口 */ using System; using System.Collections.Generic; using System.Threading.Tasks; using Haoliang.Models.User; using Haoliang.Models.Device; using Haoliang.Models.Production; using Haoliang.Models.System; using Haoliang.Models.Template; using Haoliang.Models.DataCollection; namespace Haoliang.Core.Services { #region ========== 用户与认证服务 ========== /// /// 认证服务接口 /// /// 负责用户登录、登出、令牌刷新等认证相关业务逻辑。 /// 支持JWT令牌认证机制,提供安全的会话管理。 /// public interface IAuthService { /// /// 用户登录 /// /// 登录请求,包含用户名和密码 /// 认证结果,包含令牌和用户信息 Task LoginAsync(LoginRequest request); /// /// 用户登出 /// /// 用户ID /// 登出是否成功 Task LogoutAsync(int userId); /// /// 刷新访问令牌 /// /// 刷新令牌 /// 新的认证结果 Task RefreshTokenAsync(string refreshToken); /// /// 检查用户名是否存在 /// /// 用户名 /// 是否存在 Task UsernameExistsAsync(string username); /// /// 检查邮箱是否存在 /// /// 邮箱地址 /// 是否存在 Task EmailExistsAsync(string email); /// /// 根据ID获取用户 /// /// 用户ID /// 用户信息 Task GetUserByIdAsync(int userId); } /// /// 用户服务接口 /// /// 负责用户 CRUD 操作、密码管理、用户状态维护等。 /// 与认证服务配合完成完整的用户管理功能。 /// public interface IUserService { /// /// 创建用户 /// /// 用户实体 /// 创建的用户视图模型 Task CreateUserAsync(User user); /// /// 根据ID获取用户 /// /// 用户ID /// 用户视图模型,不存在返回null Task GetUserByIdAsync(int userId); /// /// 获取所有用户 /// /// 用户列表 Task> GetAllUsersAsync(); /// /// 更新用户信息 /// /// 用户ID /// 用户更新数据 /// 更新后的用户视图模型 Task UpdateUserAsync(int userId, User user); /// /// 修改密码 /// /// 用户ID /// 旧密码 /// 新密码 /// 修改是否成功 Task ChangePasswordAsync(int userId, string oldPassword, string newPassword); /// /// 激活用户 /// /// 用户ID /// 操作是否成功 Task ActivateUserAsync(int userId); /// /// 停用用户 /// /// 用户ID /// 操作是否成功 Task DeactivateUserAsync(int userId); } /// /// 权限服务接口 /// /// 负责权限和角色的管理、用户权限分配、权限验证等。 /// 支持基于角色的访问控制(RBAC)和基于权限的访问控制。 /// public interface IPermissionService { /// /// 获取用户的权限列表 /// /// 用户ID /// 权限标识列表 Task> GetUserPermissionsAsync(int userId); /// /// 检查用户是否拥有指定权限 /// /// 用户ID /// 权限标识 /// 是否拥有权限 Task HasPermissionAsync(int userId, string permission); /// /// 分配权限给用户 /// /// 用户ID /// 权限列表 Task AssignPermissionsToUserAsync(int userId, IEnumerable permissions); /// /// 移除用户的所有权限 /// /// 用户ID Task RemoveAllPermissionsFromUserAsync(int userId); } #endregion #region ========== 日志与缓存服务 ========== /// /// 日志服务接口 /// /// 提供结构化日志记录功能,支持多级别日志、日志查询和归档。 /// 日志级别:Debug、Info、Warning、Error、Critical /// public interface ILoggingService { /// /// 记录信息日志 /// /// 日志消息 Task LogInformationAsync(string message); /// /// 记录警告日志 /// /// 日志消息 Task LogWarningAsync(string message); /// /// 记录错误日志 /// /// 日志消息 /// 异常对象 Task LogErrorAsync(string message, Exception? exception = null); /// /// 获取日志列表 /// /// 日志级别过滤 /// 开始日期 /// 结束日期 /// 日志类别 /// 日志条目列表 Task> GetLogsAsync(Haoliang.Models.System.LogLevel? logLevel, DateTime? startDate, DateTime? endDate, string? category = null); /// /// 获取错误日志 /// /// 开始日期 /// 结束日期 /// 错误日志列表 Task> GetErrorLogsAsync(DateTime? startDate = null, DateTime? endDate = null); /// /// 获取日志数量 /// /// 日志级别过滤 /// 开始日期 /// 结束日期 /// 日志数量 Task GetLogCountAsync(Haoliang.Models.System.LogLevel? logLevel = null, DateTime? startDate = null, DateTime? endDate = null); /// /// 归档日志 /// /// 保留天数 Task ArchiveLogsAsync(int daysToKeep = 90); /// /// 清除所有日志 /// Task ClearLogsAsync(); /// /// 记录信息日志 (LogInfoAsync的别名) /// /// 日志消息 Task LogInfoAsync(string message); } /// /// 缓存服务接口 /// /// 提供内存缓存和分布式缓存支持,用于提升系统性能。 /// 支持缓存过期、缓存失效、缓存统计等功能。 /// public interface ICacheService { /// /// 获取缓存值 /// /// 缓存值类型 /// 缓存键 /// 缓存值,不存在返回null T? Get(string key) where T : class; /// /// 设置缓存值 /// /// 缓存值类型 /// 缓存键 /// 缓存值 /// 过期时间 void Set(string key, T value, TimeSpan? expiration = null) where T : class; /// /// 移除缓存 /// /// 缓存键 /// 是否成功移除 bool Remove(string key); /// /// 检查缓存是否存在 /// /// 缓存键 /// 是否存在 bool Exists(string key); /// /// 获取或设置缓存 /// /// 缓存值类型 /// 缓存键 /// 缓存不存在时的工厂方法 /// 过期时间 /// 缓存值 T GetOrSet(string key, Func factory, TimeSpan? expiration = null) where T : class; /// /// 清除所有缓存 /// void Clear(); /// /// 获取缓存统计信息 /// /// 缓存统计 CacheStats GetStatistics(); } /// /// 缓存统计信息 /// public class CacheStats { public long TotalItems { get; set; } public long HitCount { get; set; } public long MissCount { get; set; } public double HitRate => HitCount + MissCount > 0 ? (double)HitCount / (HitCount + MissCount) : 0; public long MemoryUsageBytes { get; set; } public DateTime LastCleared { get; set; } } #endregion #region ========== 设备与采集服务 ========== /// /// 设备采集服务接口 /// /// 负责CNC设备的添加、删除、更新、查询, /// 以及设备数据采集的启动、停止、状态监控等功能。 /// 支持多品牌CNC设备(发那科、三菱、西门子等)的统一采集。 /// public interface IDeviceCollectionService { /// /// 获取所有设备 /// /// 设备列表 Task> GetAllDevicesAsync(); /// /// 根据ID获取设备 /// /// 设备ID /// 设备信息,不存在返回null Task GetDeviceByIdAsync(int deviceId); /// /// 创建设备 /// /// 设备信息 /// 创建的设备 Task CreateDeviceAsync(CNCDevice device); /// /// 更新设备信息 /// /// 设备信息 /// 更新后的设备,不存在返回null Task UpdateDeviceAsync(CNCDevice device); /// /// 删除设备 /// /// 设备ID /// 是否删除成功 Task DeleteDeviceAsync(int deviceId); /// /// 采集指定设备数据 /// /// 设备ID Task CollectDeviceAsync(int deviceId); /// /// 采集所有设备数据 /// Task CollectAllDevicesAsync(); /// /// 获取设备状态 /// /// 设备ID /// 设备状态信息 Task GetDeviceStatusAsync(int deviceId); /// /// 获取设备健康状态 /// /// 设备ID /// 健康状态信息 Task GetDeviceHealthAsync(int deviceId); /// /// 获取设备当前状态 /// /// 设备ID /// 设备当前状态信息 Task GetDeviceCurrentStatusAsync(int deviceId); } /// /// 设备状态机服务接口 /// /// 管理和维护设备状态转换逻辑,包括: /// - 在线/离线状态 /// - 运行/空闲/报警状态 /// - 状态转换规则和事件触发 /// /// 采用状态模式实现,支持自定义状态转换规则。 /// public interface IDeviceStateMachine { /// /// 获取设备当前状态 /// /// 设备ID /// 设备状态 DeviceStatus GetCurrentState(int deviceId); /// /// 触发状态转换 /// /// 设备ID /// 新状态 /// 转换是否成功 bool TransitionTo(int deviceId, DeviceStatus newState); /// /// 注册状态变更监听器 /// /// 设备ID /// 回调函数 void RegisterStateChangeHandler(int deviceId, Action callback); /// /// 获取设备状态历史 /// /// 设备ID /// 开始时间 /// 结束时间 /// 状态历史记录 IEnumerable GetStateHistory(int deviceId, DateTime fromTime, DateTime toTime); } /// /// Ping服务接口 /// /// 提供设备网络连通性检测功能,用于判断设备是否在线。 /// 支持批量Ping和异步Ping操作。 /// public interface IPingService { /// /// Ping指定设备 /// /// 设备ID /// IP地址 /// Ping结果 Task PingAsync(int deviceId, string ipAddress); /// /// 批量Ping设备 /// /// 设备列表(ID和IP) /// Ping结果列表 Task> PingAllAsync(IEnumerable<(int DeviceId, string IpAddress)> devices); /// /// 检查设备是否可达 /// /// IP地址 /// 超时时间 /// 是否可达 Task IsReachableAsync(string ipAddress, TimeSpan? timeout = null); } /// /// Ping结果 /// public class PingResult { public int DeviceId { get; set; } public string IpAddress { get; set; } = string.Empty; public bool Success { get; set; } public long RoundtripTime { get; set; } public string? ErrorMessage { get; set; } public DateTime Timestamp { get; set; } } /// /// 设备状态变更记录 /// public class DeviceStatusChange { public int DeviceId { get; set; } public DeviceStatus? FromState { get; set; } public DeviceStatus? ToState { get; set; } public DateTime Timestamp { get; set; } public string? Reason { get; set; } } /// /// 设备健康状态 /// public class DeviceHealth { public int DeviceId { get; set; } public bool IsHealthy { get; set; } public double CpuUsage { get; set; } public double MemoryUsage { get; set; } public double DiskUsage { get; set; } public int ActiveAlerts { get; set; } public DateTime LastCheck { get; set; } public List? Issues { get; set; } } /// /// 健康问题 /// public class HealthIssue { public string? Type { get; set; } public string? Description { get; set; } public string? Severity { get; set; } } /// /// 设备状态 /// public class DeviceStatus { public int DeviceId { get; set; } public string? DeviceName { get; set; } public string? Status { get; set; } public DateTime Timestamp { get; set; } public string? OperatingMode { get; set; } public string? RunState { get; set; } public string? CurrentProgram { get; set; } public string? Runtime { get; set; } } #endregion #region ========== 生产与统计服务 ========== /// /// 生产服务接口 /// /// 负责生产数据的查询、计算、导出等功能。 /// 支持按设备、程序、日期等多维度统计。 /// 采用差分计算逻辑处理累计值,详见设计文档。 /// public interface IProductionService { /// /// 获取生产汇总 /// /// 日期 /// 生产汇总 Task GetProductionSummaryAsync(DateTime date); /// /// 获取生产统计 /// /// 日期 /// 统计结果 Task GetProductionStatisticsAsync(DateTime date); /// /// 获取指定设备的今日生产数据 /// /// 设备ID /// 生产数据 Task GetTodayProductionAsync(int deviceId); /// /// 获取指定设备的生产统计 /// /// 设备ID /// 日期 /// 统计结果 Task GetProductionStatisticsAsync(int deviceId, DateTime date); /// /// 获取质量率 /// /// 设备ID /// 日期 /// 质量率百分比 Task GetQualityRateAsync(int deviceId, DateTime date); /// /// 计算所有设备的生产数据 /// Task CalculateAllProductionAsync(); /// /// 计算指定设备的生产数据 /// /// 设备ID Task CalculateProductionAsync(int deviceId); /// /// 获取生产程序列表 /// /// 日期 /// 程序列表 Task> GetProductionProgramsAsync(DateTime date); /// /// 获取指定程序的生产数据 /// /// 程序名 /// 日期 /// 程序生产数据 Task GetProgramProductionAsync(string programName, DateTime date); /// /// 导出生产数据 /// /// 开始日期 /// 结束日期 /// CSV文件字节数组 Task ExportProductionDataAsync(DateTime startDate, DateTime endDate); /// /// 归档生产数据 /// /// 保留天数 Task ArchiveProductionDataAsync(int daysToKeep = 90); /// /// 获取设备指定日期的生产数据 /// /// 设备ID /// 日期 /// 生产数据 Task GetDeviceProductionForDateAsync(int deviceId, DateTime date); } /// /// 生产计算器接口 /// /// 负责根据采集的原始数据计算生产数量。 /// 实现差分计算逻辑,处理程序切换、跨天等情况。 /// public interface IProductionCalculator { /// /// 计算单个设备的生产增量 /// /// 设备ID /// 当前累计值 /// 当前程序名 /// 时间戳 /// 生产增量 Task CalculateProductionIncrementAsync(int deviceId, decimal currentValue, string programName, DateTime timestamp); /// /// 重置设备的生产状态 /// /// 设备ID void ResetDeviceProductionState(int deviceId); /// /// 验证生产数据的有效性 /// /// 设备ID /// 累计值 /// 是否有效 bool ValidateProductionValue(int deviceId, decimal value); } /// /// 生产调度器接口 /// /// 负责生产统计任务的调度执行, /// 包括定时计算、数据归档、报表生成等。 /// public interface IProductionScheduler { /// /// 启动调度器 /// Task StartAsync(); /// /// 停止调度器 /// Task StopAsync(); /// /// 注册定时任务 /// /// 任务ID /// 调度表达式 /// 任务动作 void RegisterTask(string taskId, string schedule, Func action); /// /// 移除定时任务 /// /// 任务ID void RemoveTask(string taskId); /// /// 获取调度器状态 /// /// 是否运行中 bool IsRunning { get; } } /// /// 生产统计服务接口 /// /// 提供高级生产分析功能,包括: /// - 生产趋势分析 /// - OEE计算 /// - 效率指标 /// - 质量分析 /// - 预测分析 /// - 异常检测 /// public interface IProductionStatisticsService { /// /// 计算生产趋势 /// /// 设备ID /// 开始日期 /// 结束日期 /// 趋势分析结果 Task CalculateProductionTrendsAsync(int deviceId, DateTime startDate, DateTime endDate); /// /// 生成生产报表 /// /// 报表过滤条件 /// 生产报表 Task GenerateProductionReportAsync(ReportFilter filter); /// /// 计算效率指标 /// /// 过滤条件 /// 效率指标 Task CalculateEfficiencyMetricsAsync(EfficiencyFilter filter); /// /// 执行质量分析 /// /// 过滤条件 /// 质量分析结果 Task PerformQualityAnalysisAsync(QualityFilter filter); /// /// 获取仪表盘汇总 /// /// 过滤条件 /// 仪表盘数据 Task GetDashboardSummaryAsync(DashboardFilter filter); /// /// 计算OEE /// /// 设备ID /// 日期 /// OEE指标 Task CalculateOeeAsync(int deviceId, DateTime date); /// /// 生成生产预测 /// /// 预测过滤条件 /// 预测结果 Task GenerateProductionForecastAsync(ForecastFilter filter); /// /// 检测生产异常 /// /// 过滤条件 /// 异常分析结果 Task DetectProductionAnomaliesAsync(AnomalyFilter filter); } #endregion #region ========== 告警服务 ========== /// /// 告警服务接口 /// /// 负责告警的创建、查询、更新、解决等功能。 /// 支持多种告警类型:设备故障、产量异常、运行异常等。 /// public interface IAlarmService { /// /// 获取所有告警 /// /// 告警列表 Task> GetAllAlarmsAsync(); /// /// 根据类型获取告警 /// /// 告警类型 /// 告警列表 Task> GetAlarmsByTypeAsync(AlarmType type); /// /// 获取活跃告警 /// /// 活跃告警列表 Task> GetActiveAlarmsAsync(); /// /// 根据ID获取告警 /// /// 告警ID /// 告警信息 Task GetAlarmByIdAsync(int alarmId); /// /// 创建告警 /// /// 告警信息 /// 创建的告警 Task CreateAlarmAsync(Alarm alarm); /// /// 更新告警 /// /// 告警ID /// 告警信息 /// 更新后的告警 Task UpdateAlarmAsync(int alarmId, Alarm alarm); /// /// 删除告警 /// /// 告警ID /// 是否删除成功 Task DeleteAlarmAsync(int alarmId); /// /// 解决告警 /// /// 告警ID /// 解决备注 /// 是否成功 Task ResolveAlarmAsync(int alarmId, string? resolutionNote); /// /// 确认告警 /// /// 告警ID /// 确认备注 /// 是否成功 Task AcknowledgeAlarmAsync(int alarmId, string? acknowledgeNote); /// /// 获取设备的告警 /// /// 设备ID /// 查询天数 /// 告警列表 Task> GetDeviceAlarmsAsync(int deviceId, int days = 7); /// /// 获取严重告警 /// /// 严重告警列表 Task> GetCriticalAlarmsAsync(); /// /// 获取告警统计 /// /// 日期 /// 统计结果 Task GetAlarmStatisticsAsync(DateTime date); /// /// 按日期范围获取告警 /// /// 开始日期 /// 结束日期 /// 告警列表 Task> GetAlarmsByDateRangeAsync(DateTime startDate, DateTime endDate); } /// /// 告警规则服务接口 /// /// 负责告警规则的CRUD和规则测试。 /// 支持自定义告警条件和触发阈值。 /// public interface IAlarmRuleService { /// /// 获取所有告警规则 /// /// 规则列表 Task> GetAllAlarmRulesAsync(); /// /// 根据ID获取告警规则 /// /// 规则ID /// 规则信息 Task GetAlarmRuleByIdAsync(int ruleId); /// /// 创建告警规则 /// /// 规则信息 /// 创建的规则 Task CreateAlarmRuleAsync(AlarmRule rule); /// /// 更新告警规则 /// /// 规则ID /// 规则信息 /// 更新后的规则 Task UpdateAlarmRuleAsync(int ruleId, AlarmRule rule); /// /// 删除告警规则 /// /// 规则ID /// 是否删除成功 Task DeleteAlarmRuleAsync(int ruleId); /// /// 测试告警规则 /// /// 规则ID Task TestAlarmRuleAsync(int ruleId); /// /// 启用/禁用告警规则 /// /// 规则ID /// 是否启用 Task SetAlarmRuleEnabledAsync(int ruleId, bool enabled); } /// /// 告警通知服务接口 /// /// 负责告警通知的发送和跟踪。 /// 支持多种通知渠道:邮件、短信、微信、Webhook等。 /// public interface IAlarmNotificationService { /// /// 发送告警通知 /// /// 通知信息 Task SendAlarmNotificationAsync(AlarmNotification notification); /// /// 发送告警通知到多个渠道 /// /// 告警信息 /// 通知渠道列表 Task SendAlarmNotificationToChannelsAsync(Alarm alarm, IEnumerable channels); /// /// 获取通知状态 /// /// 通知ID /// 通知状态 Task GetNotificationStatusAsync(int notificationId); /// /// 重试失败的通知 /// /// 通知ID Task RetryNotificationAsync(int notificationId); /// /// 取消通知 /// /// 通知ID Task CancelNotificationAsync(int notificationId); } #endregion #region ========== 模板服务 ========== /// /// 模板服务接口 /// /// 负责CNC品牌模板的CRUD、验证、克隆等功能。 /// 支持多品牌(发那科、三菱、西门子等)的字段映射配置。 /// public interface ITemplateService { /// /// 获取所有模板 /// /// 模板列表 Task> GetAllTemplatesAsync(); /// /// 根据ID获取模板 /// /// 模板ID /// 模板信息 Task GetTemplateByIdAsync(int templateId); /// /// 创建模板 /// /// 模板信息 /// 创建的模板 Task CreateTemplateAsync(CNCBrandTemplate template); /// /// 更新模板 /// /// 模板ID /// 模板信息 /// 更新后的模板 Task UpdateTemplateAsync(int templateId, CNCBrandTemplate template); /// /// 删除模板 /// /// 模板ID /// 是否删除成功 Task DeleteTemplateAsync(int templateId); /// /// 启用模板 /// /// 模板ID /// 是否成功 Task EnableTemplateAsync(int templateId); /// /// 禁用模板 /// /// 模板ID /// 是否成功 Task DisableTemplateAsync(int templateId); /// /// 克隆模板 /// /// 源模板ID /// 新模板名称 /// 克隆的模板 Task CloneTemplateAsync(int templateId, string newName); /// /// 测试模板 /// /// 模板ID Task TestTemplateAsync(int templateId); /// /// 根据品牌获取模板 /// /// 品牌名称 /// 模板列表 Task> GetTemplatesByBrandAsync(string brandName); /// /// 获取启用的模板 /// /// 启用状态的模板列表 Task> GetActiveTemplatesAsync(); /// /// 验证模板 /// /// 模板信息 /// 是否有效 Task ValidateTemplateAsync(CNCBrandTemplate template); } /// /// 标签映射服务接口 /// /// 负责CNC设备标签与系统标准字段的映射配置管理。 /// 将不同品牌的原始标签映射为系统统一字段。 /// public interface ITagMappingService { /// /// 获取模板的标签映射 /// /// 模板ID /// 映射列表 Task> GetMappingsByTemplateAsync(int templateId); /// /// 创建标签映射 /// /// 映射信息 /// 创建的映射 Task CreateTagMappingAsync(TagMapping mapping); /// /// 批量创建标签映射 /// /// 模板ID /// 映射列表 Task CreateTagMappingsAsync(int templateId, IEnumerable mappings); /// /// 更新标签映射 /// /// 映射ID /// 映射信息 /// 更新的映射 Task UpdateTagMappingAsync(int mappingId, TagMapping mapping); /// /// 删除标签映射 /// /// 映射ID /// 是否删除成功 Task DeleteTagMappingAsync(int mappingId); /// /// 映射设备标签 /// /// 设备原始标签 /// 模板ID /// 映射后的标签数据 Task> MapDeviceTagsAsync(IEnumerable deviceTags, int templateId); /// /// 根据系统字段ID获取映射 /// /// 模板ID /// 系统字段ID /// 映射信息 Task GetMappingBySystemFieldAsync(int templateId, string systemFieldId); } /// /// 模板验证服务接口 /// /// 负责模板的验证、迁移分析和兼容性检查。 /// 支持跨品牌模板迁移的可行性分析。 /// public interface ITemplateValidationService { /// /// 验证模板对指定设备的适用性 /// /// 模板ID /// 设备ID /// 验证错误列表,无错误返回空列表 Task> ValidateTemplateForDeviceAsync(int templateId, int deviceId); /// /// 生成迁移报告 /// /// 源模板 /// 目标品牌 /// 迁移报告 Task GenerateMigrationReportAsync(CNCBrandTemplate template, string targetBrand); /// /// 检查模板完整性 /// /// 模板信息 /// 完整性检查结果 Task ValidateTemplateCompletenessAsync(CNCBrandTemplate template); } /// /// 模板迁移服务接口 /// /// 负责模板的跨品牌迁移转换。 /// 将一个品牌的模板转换为另一个品牌的模板。 /// public interface ITemplateMigrationService { /// /// 执行模板迁移 /// /// 源模板ID /// 目标品牌 /// 迁移后的模板 Task MigrateTemplateAsync(int sourceTemplateId, string targetBrand); /// /// 验证迁移可行性 /// /// 源模板ID /// 目标品牌 /// 是否可行 Task CanMigrateAsync(int sourceTemplateId, string targetBrand); /// /// 获取迁移映射建议 /// /// 源模板ID /// 目标品牌 /// 映射建议列表 Task> GetMigrationMappingSuggestionsAsync(int sourceTemplateId, string targetBrand); } /// /// 模板迁移报告 /// public class TemplateMigrationReport { public bool CanMigrate { get; set; } public List? Issues { get; set; } public List? Warnings { get; set; } public List? MappedFields { get; set; } public List? UnmappedFields { get; set; } } /// /// 模板验证结果 /// public class TemplateValidationResult { public bool IsValid { get; set; } public List? Errors { get; set; } public List? Warnings { get; set; } } /// /// 标签映射建议 /// public class TagMappingSuggestion { public string? SourceField { get; set; } public string? SuggestedTargetField { get; set; } public double Confidence { get; set; } } #endregion #region ========== 系统与配置服务 ========== /// /// 系统服务接口 /// /// 提供系统级别的操作和管理功能, /// 包括系统状态、健康检查、调度器管理等。 /// public interface ISystemService { /// /// 获取系统状态 /// /// 系统状态信息 Task GetSystemStatusAsync(); /// /// 执行健康检查 /// /// 健康检查结果 Task PerformHealthCheckAsync(); /// /// 获取系统指标 /// /// 系统指标数据 Task GetSystemMetricsAsync(); /// /// 重启系统服务 /// Task RestartAsync(); } /// /// 系统配置服务接口 /// /// 提供系统配置项的CRUD和缓存管理。 /// 支持配置的分类查询和动态更新。 /// public interface ISystemConfigService { /// /// 获取所有配置 /// /// 配置列表 Task> GetAllConfigsAsync(); /// /// 获取指定配置 /// /// 配置键 /// 配置值 Task GetConfigAsync(string key); /// /// 设置配置 /// /// 配置键 /// 配置值 /// 设置后的配置 Task SetConfigAsync(string key, string value); /// /// 删除配置 /// /// 配置键 /// 是否删除成功 Task DeleteConfigAsync(string key); /// /// 检查配置是否存在 /// /// 配置键 /// 是否存在 Task ConfigExistsAsync(string key); /// /// 按分类获取配置 /// /// 分类名称 /// 配置列表 Task> GetConfigsByCategoryAsync(string category); /// /// 刷新配置缓存 /// Task RefreshConfigCacheAsync(); /// /// 获取系统配置 /// Task GetSystemConfigurationAsync(); /// /// 更新系统配置 /// Task UpdateSystemConfigurationAsync(object configuration); /// /// 验证配置 /// Task ValidateConfigurationAsync(object configuration); /// /// 获取生产目标配置 /// Task> GetProductionTargetsAsync(); /// /// 更新生产目标配置 /// Task UpdateProductionTargetsAsync(IEnumerable targets); /// /// 获取工作小时配置 /// Task GetWorkingHoursConfigAsync(); /// /// 更新工作小时配置 /// Task UpdateWorkingHoursConfigAsync(object config); /// /// 获取告警配置 /// Task GetAlertConfigurationAsync(); /// /// 更新告警配置 /// Task UpdateAlertConfigurationAsync(object config); /// /// 获取通知配置 /// Task GetNotificationConfigAsync(); /// /// 更新通知配置 /// Task UpdateNotificationConfigAsync(object config); /// /// 获取导出配置 /// Task GetExportConfigAsync(); /// /// 更新导出配置 /// Task UpdateExportConfigAsync(object config); /// /// 获取数据保留配置 /// Task GetDataRetentionConfigAsync(); /// /// 更新数据保留配置 /// Task UpdateDataRetentionConfigAsync(object config); /// /// 获取仪表盘配置 /// Task GetDashboardConfigAsync(); /// /// 更新仪表盘配置 /// Task UpdateDashboardConfigAsync(object config); /// /// 获取采集配置 /// Task GetCollectionConfigAsync(); /// /// 更新采集配置 /// Task UpdateCollectionConfigAsync(object config); /// /// 导入配置 /// Task ImportConfigurationAsync(string configuration); /// /// 重置为默认配置 /// Task ResetToDefaultConfigurationAsync(); /// /// 获取配置变更历史 /// Task> GetConfigurationChangeHistoryAsync(DateTime? startDate = null, DateTime? endDate = null); } /// /// 调度器服务接口 /// /// 提供后台任务调度功能, /// 支持定时任务、周期任务和一次性任务。 /// public interface ISchedulerService { /// /// 获取所有调度任务 /// /// 任务列表 Task> GetAllScheduledTasksAsync(); /// /// 根据ID获取任务 /// /// 任务ID /// 任务信息 Task GetTaskByIdAsync(string taskId); /// /// 调度任务 /// /// 任务信息 Task ScheduleTaskAsync(ScheduledTask task); /// /// 执行任务 /// /// 任务ID Task ExecuteTaskAsync(string taskId); /// /// 移除任务 /// /// 任务ID /// 是否成功 Task RemoveTaskAsync(string taskId); /// /// 启动调度器 /// Task StartSchedulerAsync(); /// /// 停止调度器 /// Task StopSchedulerAsync(); } #endregion #region ========== 实时与数据处理服务 ========== /// /// 实时服务接口 /// /// 提供WebSocket实时通信功能, /// 支持设备状态推送、生产数据推送、告警通知等。 /// public interface IRealTimeService { /// /// 获取已连接客户端数量 /// /// 客户端数量 Task GetConnectedClientsCountAsync(); /// /// 按类型获取已连接客户端 /// /// 客户端类型 /// 客户端信息列表 Task> GetConnectedClientsByTypeAsync(string clientType); /// /// 获取设备监控状态 /// /// 设备ID /// 监控状态 Task GetDeviceMonitoringStatusAsync(int deviceId); /// /// 启动设备流 /// /// 设备ID /// 推送间隔(毫秒) Task StartDeviceStreamingAsync(int deviceId, int intervalMs = 1000); /// /// 停止设备流 /// /// 设备ID Task StopDeviceStreamingAsync(int deviceId); /// /// 获取活跃流设备 /// /// 设备ID列表 Task> GetActiveStreamingDevicesAsync(); /// /// 广播设备状态 /// /// 状态更新 Task BroadcastDeviceStatusAsync(DeviceStatusUpdate statusUpdate); /// /// 广播生产更新 /// /// 生产更新 Task BroadcastProductionUpdateAsync(ProductionUpdate productionUpdate); /// /// 广播告警 /// /// 告警更新 Task BroadcastAlertAsync(AlertUpdate alertUpdate); /// /// 发送系统通知 /// /// 系统通知 Task SendSystemNotificationAsync(SystemNotification notification); /// /// 发送仪表盘更新 /// /// 仪表盘更新 Task SendDashboardUpdateAsync(DashboardUpdate dashboardUpdate); /// /// 发送命令到客户端 /// /// 连接ID /// 命令 Task SendCommandToClientAsync(string connectionId, RealTimeCommand command); /// /// 广播命令到所有客户端 /// /// 命令 Task BroadcastCommandAsync(RealTimeCommand command); } /// /// 客户端信息 /// public class ClientInfo { public string? ConnectionId { get; set; } public string? ClientType { get; set; } public string? IpAddress { get; set; } public DateTime ConnectedAt { get; set; } public Dictionary? Metadata { get; set; } } /// /// 设备监控状态 /// public class DeviceMonitoringStatus { public int DeviceId { get; set; } public bool IsStreaming { get; set; } public int ConnectedClients { get; set; } public DateTime LastUpdate { get; set; } } /// /// 设备状态更新 /// public class DeviceStatusUpdate { public int DeviceId { get; set; } public string? Status { get; set; } public DateTime Timestamp { get; set; } public Dictionary? Data { get; set; } } /// /// 生产更新 /// public class ProductionUpdate { public int DeviceId { get; set; } public decimal Quantity { get; set; } public string? ProgramName { get; set; } public DateTime Timestamp { get; set; } } /// /// 告警更新 /// public class AlertUpdate { public int AlarmId { get; set; } public AlarmType Type { get; set; } public string? Message { get; set; } public DateTime Timestamp { get; set; } } /// /// 系统通知 /// public class SystemNotification { public string? Title { get; set; } public string? Message { get; set; } public NotificationSeverity Severity { get; set; } public DateTime Timestamp { get; set; } } /// /// 通知严重程度 /// public enum NotificationSeverity { Info, Warning, Error, Critical } /// /// 仪表盘更新 /// public class DashboardUpdate { public string? DashboardId { get; set; } public Dictionary? Data { get; set; } public DateTime Timestamp { get; set; } } /// /// 实时命令 /// public class RealTimeCommand { public string? CommandId { get; set; } public string? CommandType { get; set; } public Dictionary? Parameters { get; set; } public DateTime Timestamp { get; set; } } /// /// WebSocket测试结果 /// public class TestResult { public string TestId { get; set; } = string.Empty; public DateTime Timestamp { get; set; } public int ConnectedClients { get; set; } public List ActiveStreamingDevices { get; set; } = new List(); public string Status { get; set; } = string.Empty; } /// /// WebSocket统计信息 /// public class WebSocketStatistics { public DateTime Timestamp { get; set; } public int ConnectedClients { get; set; } public int ActiveStreamingDevices { get; set; } public int TotalSessions { get; set; } public long MessageCount { get; set; } public long BytesTransferred { get; set; } } #endregion #region ========== 规则服务 ========== /// /// 规则服务接口 /// /// 提供业务规则的管理和执行功能。 /// 支持规则配置、规则执行历史记录。 /// public interface IRulesService { /// /// 获取所有规则 /// /// 规则列表 Task> GetAllRulesAsync(); /// /// 根据ID获取规则 /// /// 规则ID /// 规则信息 Task GetRuleByIdAsync(int ruleId); /// /// 创建规则 /// /// 规则信息 /// 创建的规则 Task CreateRuleAsync(BusinessRule rule); /// /// 更新规则 /// /// 规则ID /// 规则信息 /// 更新的规则 Task UpdateRuleAsync(int ruleId, BusinessRule rule); /// /// 删除规则 /// /// 规则ID /// 是否删除成功 Task DeleteRuleAsync(int ruleId); /// /// 执行规则 /// /// 规则ID /// 执行上下文 /// 执行结果 Task ExecuteRuleAsync(int ruleId, Dictionary context); /// /// 测试规则 /// /// 规则ID /// 测试数据 /// 测试结果 Task TestRuleAsync(int ruleId, Dictionary testData); /// /// 获取规则执行历史 /// /// 规则ID /// 开始时间 /// 结束时间 /// 执行历史 Task> GetRuleExecutionHistoryAsync(int ruleId, DateTime fromTime, DateTime toTime); /// /// 创建或更新规则 /// Task CreateOrUpdateRuleAsync(BusinessRule rule); /// /// 获取统计规则 /// Task> GetStatisticsRulesAsync(); /// /// 更新统计规则 /// Task UpdateStatisticsRulesAsync(IEnumerable rules); } /// /// 业务规则 (与 Haoliang.Models.System.BusinessRuleConfig 同结构) /// public class BusinessRule { public int RuleId { get; set; } public string? RuleName { get; set; } public string? RuleType { get; set; } public string? Category { get; set; } public bool IsEnabled { get; set; } public string? Configuration { get; set; } public DateTime CreatedAt { get; set; } public DateTime UpdatedAt { get; set; } } /// /// 规则执行结果 /// public class RuleExecutionResult { public bool Success { get; set; } public bool Result { get; set; } public string? Message { get; set; } public TimeSpan ExecutionTime { get; set; } } /// /// 规则测试结果 /// public class RuleTestResult { public bool Success { get; set; } public bool Result { get; set; } public List? Errors { get; set; } public Dictionary? Output { get; set; } } /// /// 规则执行历史 /// public class RuleExecutionHistory { public int ExecutionId { get; set; } public int RuleId { get; set; } public string? RuleName { get; set; } public bool Success { get; set; } public string? Result { get; set; } public TimeSpan ExecutionTime { get; set; } public DateTime ExecutionTimeUtc { get; set; } } #endregion #region ========== 数据处理服务 ========== /// /// 数据解析服务接口 /// /// 负责解析CNC设备返回的原始JSON数据, /// 将其转换为系统标准格式。 /// public interface IDataParserService { /// /// 解析设备原始数据 /// /// 原始JSON数据 /// 模板ID /// 解析后的数据 Task ParseRawDataAsync(string rawData, int templateId); /// /// 解析多设备数据 /// /// 原始JSON数据(数组) /// 模板ID /// 解析后的数据列表 Task> ParseMultiDeviceDataAsync(string rawData, int templateId); /// /// 验证数据格式 /// /// 原始数据 /// 是否有效 bool ValidateDataFormat(string rawData); } /// /// 数据存储服务接口 /// /// 负责将解析后的数据存储到数据库。 /// 支持批量存储和事务处理。 /// public interface IDataStorageService { /// /// 存储设备数据 /// /// 解析后的数据 Task StoreDeviceDataAsync(ParsedDeviceData data); /// /// 批量存储设备数据 /// /// 数据列表 Task StoreDeviceDataBatchAsync(IEnumerable dataList); /// /// 存储生产记录 /// /// 生产记录 Task StoreProductionRecordAsync(ProductionRecord record); /// /// 更新设备状态 /// /// 设备ID /// 状态信息 Task UpdateDeviceStatusAsync(int deviceId, DeviceStatus status); } /// /// 重试服务接口 /// /// 提供失败操作的重试机制, /// 支持指数退避和最大重试次数限制。 /// public interface IRetryService { /// /// 执行带重试的操作 /// /// 返回类型 /// 操作 /// 最大重试次数 /// 重试延迟 /// 操作结果 Task ExecuteWithRetryAsync(Func> operation, int maxRetries = 3, TimeSpan? delay = null); /// /// 执行带重试的操作(无返回) /// /// 操作 /// 最大重试次数 /// 重试延迟 Task ExecuteWithRetryAsync(Func operation, int maxRetries = 3, TimeSpan? delay = null); } /// /// 解析后的设备数据 /// public class ParsedDeviceData { public int DeviceId { get; set; } public string? DeviceName { get; set; } public DateTime Timestamp { get; set; } public Dictionary? Tags { get; set; } public string? RawJson { get; set; } } /// /// 标签值 /// public class TagValue { public string? Id { get; set; } public string? Description { get; set; } public object? Value { get; set; } public string? Quality { get; set; } public DateTime Timestamp { get; set; } } #endregion #region ========== 数据模型(用于接口返回) ========== /// /// 系统状态信息 /// public class SystemStatusInfo { public DateTime Timestamp { get; set; } public TimeSpan Uptime { get; set; } public double MemoryUsage { get; set; } public double CpuUsage { get; set; } public int DatabaseConnections { get; set; } public int ActiveConnections { get; set; } public DateTime? LastBackupTime { get; set; } public string? SystemVersion { get; set; } public bool IsHealthy { get; set; } } /// /// 健康检查结果 /// public class HealthCheckResult { public bool IsHealthy { get; set; } public List? Checks { get; set; } public DateTime Timestamp { get; set; } } /// /// 健康检查项 /// public class HealthCheckItem { public string? Name { get; set; } public string? Status { get; set; } public string? Message { get; set; } } /// /// 系统指标 /// public class SystemMetrics { public double CpuUsage { get; set; } public double MemoryUsage { get; set; } public double DiskUsage { get; set; } public int ThreadCount { get; set; } public int HandleCount { get; set; } public long WorkingSet { get; set; } } /// /// 系统配置 /// public class SystemConfig { public string? Key { get; set; } public string? Value { get; set; } public string? Category { get; set; } public string? Description { get; set; } public DateTime UpdatedAt { get; set; } } /// /// 定时任务 /// public class ScheduledTask { public string? TaskId { get; set; } public string? Name { get; set; } public string? Description { get; set; } public string? Schedule { get; set; } public TaskType Type { get; set; } public bool IsEnabled { get; set; } public DateTime? LastRunTime { get; set; } public DateTime? NextRunTime { get; set; } public TaskStatus LastRunStatus { get; set; } } /// /// 任务类型 /// public enum TaskType { Once, Periodic, Cron } /// /// 任务状态 /// public enum TaskStatus { Pending, Running, Completed, Failed } #endregion #region ========== 统计相关模型 ========== /// /// 报表过滤条件 /// public class ReportFilter { public List? DeviceIds { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public GroupBy GroupBy { get; set; } } /// /// 分组方式 /// public enum GroupBy { Date, Hour, Device, Program } /// /// 效率过滤条件 /// public class EfficiencyFilter { public List? DeviceIds { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public EfficiencyMetric Metrics { get; set; } } /// /// 效率指标类型 /// [Flags] public enum EfficiencyMetric { Availability = 1, Performance = 2, Quality = 4, Oee = 8 } /// /// 质量过滤条件 /// public class QualityFilter { public List? DeviceIds { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } } /// /// 仪表盘过滤条件 /// public class DashboardFilter { public List? DeviceIds { get; set; } public DateTime Date { get; set; } public bool IncludeAlerts { get; set; } } /// /// 预测过滤条件 /// public class ForecastFilter { public int DeviceId { get; set; } public int DaysToForecast { get; set; } public DateTime StartDate { get; set; } } /// /// 异常过滤条件 /// public class AnomalyFilter { public int DeviceId { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public double Sensitivity { get; set; } } /// /// 生产趋势分析 /// public class ProductionTrendAnalysis { public int DeviceId { get; set; } public List? DataPoints { get; set; } public decimal AverageQuantity { get; set; } public decimal MaxQuantity { get; set; } public decimal MinQuantity { get; set; } public string? TrendDirection { get; set; } } /// /// 趋势数据点 /// public class TrendDataPoint { public DateTime Date { get; set; } public decimal Quantity { get; set; } public decimal TargetQuantity { get; set; } } /// /// 生产报表 /// public class ProductionReport { public ReportFilter? Filter { get; set; } public List? SummaryItems { get; set; } public decimal TotalQuantity { get; set; } public decimal AverageQualityRate { get; set; } } /// /// 报表汇总项 /// public class ReportSummaryItem { public DateTime Date { get; set; } public int? Hour { get; set; } public int? DeviceId { get; set; } public string? ProgramName { get; set; } public decimal Quantity { get; set; } public decimal TargetQuantity { get; set; } public decimal Efficiency { get; set; } } /// /// 效率指标 /// public class EfficiencyMetrics { public decimal Availability { get; set; } public decimal Performance { get; set; } public decimal Quality { get; set; } public decimal Oee { get; set; } public List? HourlyData { get; set; } } /// /// 每小时效率数据 /// public class HourlyEfficiencyData { public DateTime Hour { get; set; } public decimal Availability { get; set; } public decimal Performance { get; set; } public decimal Quality { get; set; } public decimal Oee { get; set; } } /// /// 质量分析 /// public class QualityAnalysis { public decimal OverallQualityRate { get; set; } public int TotalProduced { get; set; } public int Qualified { get; set; } public int Defective { get; set; } public List? DefectsByCategory { get; set; } } /// /// 缺陷类别 /// public class DefectCategory { public string? Category { get; set; } public int Count { get; set; } public decimal Rate { get; set; } } /// /// 仪表盘汇总 /// public class DashboardSummary { public DateTime GeneratedAt { get; set; } public int TotalDevices { get; set; } public int ActiveDevices { get; set; } public int OfflineDevices { get; set; } public decimal TotalProductionToday { get; set; } public decimal TotalProductionThisWeek { get; set; } public decimal TotalProductionThisMonth { get; set; } public decimal OverallEfficiency { get; set; } public decimal QualityRate { get; set; } public List? DeviceSummaries { get; set; } } /// /// 设备汇总 /// public class DeviceSummary { public int DeviceId { get; set; } public string? DeviceName { get; set; } public string? Status { get; set; } public decimal TodayProduction { get; set; } public decimal Efficiency { get; set; } public int ActiveAlerts { get; set; } } /// /// OEE指标 /// public class OeeMetrics { public int DeviceId { get; set; } public DateTime Date { get; set; } public decimal Availability { get; set; } public decimal Performance { get; set; } public decimal Quality { get; set; } public decimal Oee { get; set; } public TimeSpan PlannedProductionTime { get; set; } public TimeSpan ActualProductionTime { get; set; } public TimeSpan DownTime { get; set; } } /// /// 生产预测 /// public class ProductionForecast { public int DeviceId { get; set; } public DateTime StartDate { get; set; } public int DaysForecasted { get; set; } public List? DataPoints { get; set; } public decimal PredictedTotal { get; set; } public decimal Confidence { get; set; } } /// /// 预测数据点 /// public class ForecastDataPoint { public DateTime Date { get; set; } public decimal PredictedQuantity { get; set; } public decimal LowerBound { get; set; } public decimal UpperBound { get; set; } } /// /// 异常分析 /// public class AnomalyAnalysis { public int DeviceId { get; set; } public List? Anomalies { get; set; } public int TotalAnomalies { get; set; } public string? MostCommonType { get; set; } } /// /// 异常数据点 /// public class AnomalyDataPoint { public DateTime Timestamp { get; set; } public string? Type { get; set; } public decimal Value { get; set; } public decimal ExpectedValue { get; set; } public decimal Deviation { get; set; } } #endregion }