#ifndef QDATAQUALITY_H #define QDATAQUALITY_H #include #include #include #include #include #include #include "BZStruct.h" // 数据质量指标 struct DataQualityMetrics { double completeness = 100.0; // 完整性百分比 double timeliness = 100.0; // 及时性百分比 double accuracy = 100.0; // 准确性百分比 double consistency = 100.0; // 一致性百分比 double availability = 100.0; // 可用性百分比 int totalPackets = 0; int validPackets = 0; int delayedPackets = 0; int corruptedPackets = 0; int missingPackets = 0; QDateTime lastUpdate; void updateMetrics(int total, int valid, int delayed, int corrupted, int missing) { totalPackets = total; validPackets = valid; delayedPackets = delayed; corruptedPackets = corrupted; missingPackets = missing; completeness = total > 0 ? (static_cast(valid) / total) * 100.0 : 100.0; timeliness = total > 0 ? (static_cast(total - delayed) / total) * 100.0 : 100.0; accuracy = total > 0 ? (static_cast(total - corrupted) / total) * 100.0 : 100.0; consistency = total > 0 ? (static_cast(valid) / total) * 100.0 : 100.0; availability = total > 0 ? (static_cast(total - missing) / total) * 100.0 : 100.0; lastUpdate = QDateTime::currentDateTime(); } }; // 异常类型 enum class ExceptionType { DataDelay, // 数据延迟 DataCorruption, // 数据损坏 DataMissing, // 数据缺失 ConnectionLoss, // 连接丢失 MemoryOverflow, // 内存溢出 ProcessingTimeout, // 处理超时 SystemError // 系统错误 }; // 异常记录 struct ExceptionRecord { ExceptionType type; QString description; QString stockCode; QDateTime timestamp; int severity; // 1-10, 10为最严重 bool resolved = false; QDateTime resolvedTime; ExceptionRecord(ExceptionType t, const QString& desc, const QString& code = "", int sev = 5) : type(t), description(desc), stockCode(code), timestamp(QDateTime::currentDateTime()), severity(sev) {} }; // 告警配置 struct AlertConfig { double completenessThreshold = 95.0; // 完整性阈值 double timelinessThreshold = 98.0; // 及时性阈值 double accuracyThreshold = 99.0; // 准确性阈值 int maxConsecutiveErrors = 5; // 最大连续错误数 int maxExceptionsPerMinute = 10; // 每分钟最大异常数 bool enableEmailAlerts = false; bool enableSoundAlerts = true; bool enableLogAlerts = true; QString emailRecipient; QString smtpServer; }; class QDataQuality : public QObject { Q_OBJECT public: static QDataQuality* instance(); // 配置管理 void setAlertConfig(const AlertConfig& config); AlertConfig getAlertConfig() const; // 数据质量检查 bool validateOrderBookData(const Qot_UpdateOrderBook::Response& data); bool validateQuoteData(const Qot_UpdateBasicQot::Response& data); bool validateTickData(const Qot_UpdateTicker::Response& data); bool validateKLData(const Qot_UpdateKL::Response& data); // 异常检测 void checkDataDelay(const QString& stockCode, const QDateTime& dataTime); void checkDataConsistency(const QString& stockCode, DataPacketType type); void checkSystemHealth(); // 异常管理 void reportException(ExceptionType type, const QString& description, const QString& stockCode = "", int severity = 5); QList getActiveExceptions() const; QList getExceptionHistory(int hours = 24) const; void resolveException(const QString& exceptionId); void resolveAllExceptions(); // 质量指标 DataQualityMetrics getOverallMetrics() const; DataQualityMetrics getMetricsForStock(const QString& stockCode) const; DataQualityMetrics getMetricsForType(DataPacketType type) const; // 告警控制 void enableAlerts(bool enabled); bool areAlertsEnabled() const; void setAlertThresholds(double completeness, double timeliness, double accuracy); signals: void dataQualityAlert(const QString& message, int severity); void exceptionDetected(const ExceptionRecord& exception); void exceptionResolved(const ExceptionRecord& exception); void qualityMetricsUpdated(const DataQualityMetrics& metrics); void systemHealthChanged(bool healthy); private: explicit QDataQuality(QObject *parent = nullptr); ~QDataQuality(); void initializeValidationRules(); bool checkBusinessRules(const Qot_UpdateOrderBook::Response& data); bool checkNumericalBounds(const Qot_UpdateOrderBook::Response& data); bool checkTemporalConsistency(const QString& stockCode, DataPacketType type); void updateMetrics(); void checkAlertConditions(); void sendAlert(const QString& message, int severity); // 数据存储 mutable QMutex m_mutex; QMap m_stockMetrics; QMap m_typeMetrics; DataQualityMetrics m_overallMetrics; // 异常管理 QMap m_activeExceptions; QList m_exceptionHistory; // 配置 AlertConfig m_alertConfig; bool m_alertsEnabled = true; // 统计 QMap m_lastDataTime; QMap m_consecutiveErrors; QMap> m_exceptionTimestamps; // 定时器 QTimer* m_metricsTimer; QTimer* m_healthCheckTimer; }; #endif // QDATAQUALITY_H