/**
* 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);
}
///
/// 用户服务接口
///
/// 负责用户 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();
}
///
/// 缓存服务接口
///
/// 提供内存缓存和分布式缓存支持,用于提升系统性能。
/// 支持缓存过期、缓存失效、缓存统计等功能。
///
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);
}
///
/// 设备状态机服务接口
///
/// 管理和维护设备状态转换逻辑,包括:
/// - 在线/离线状态
/// - 运行/空闲/报警状态
/// - 状态转换规则和事件触发
///
/// 采用状态模式实现,支持自定义状态转换规则。
///
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? Status { get; set; }
public DateTime Timestamp { get; set; }
public string? OperatingMode { get; set; }
public string? RunState { 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);
}
///
/// 生产计算器接口
///
/// 负责根据采集的原始数据计算生产数量。
/// 实现差分计算逻辑,处理程序切换、跨天等情况。
///
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();
}
///
/// 调度器服务接口
///
/// 提供后台任务调度功能,
/// 支持定时任务、周期任务和一次性任务。
///
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);
}
///
/// 业务规则
///
public class BusinessRule
{
public int RuleId { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Category { get; set; }
public string? Expression { get; set; }
public bool IsEnabled { 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
}