/* 订单处理类 - 维护一个线程池,用于处理接收到的订单数据 - 检测大单 单笔订单股票数量大于指定阈值,会被认定为大单 */ #ifndef QORDERPROCESSOR_H #define QORDERPROCESSOR_H #include #include #include #include #include #include #include #include #include #include #include #include "BZStruct.h" #include "qeventbus.h" #include "ObjectPool.h" #include "tool.h" #include "..\Sqbase\OrderBookParser.h" class QOrderProcessor : public QObject { Q_OBJECT public: explicit QOrderProcessor(QObject *parent = nullptr); ~QOrderProcessor(); void setProcessingEnabled(bool enabled); void processOrderBook(const Qot_UpdateOrderBook::Response &stRsp); // JSON保存线程开关 void setJsonSaveEnabled(bool enabled); bool isJsonSaveEnabled() const { return m_jsonSaveEnabled; } //void batchProcess(const QVector& jsonDataList); void setreplyCodeQuantity(QMap CodeQuantity) { m_replyCodeQuantity = CodeQuantity; } // 性能监控接口 size_t getCacheHitRate() const { return m_cacheHits; } size_t getCacheMissRate() const { return m_cacheMisses; } double getCacheHitRatio() const { return (m_cacheHits + m_cacheMisses) > 0 ? static_cast(m_cacheHits) / (m_cacheHits + m_cacheMisses) : 0.0; } public: OrderBookParser parser; signals: // 基础信号 void maxOrderReady(BigOrderInfo bigOrderInfo); // 状态信号 void processingStarted(const QString& code); void processingFinished(const QString& code); void errorOccurred(const QString& code, const QString& error); private: QVector findExtremeOrders(const OrderBookData& data) const; OrderBookEntry findMaxVolumeItemEx(const QVector& items, double volumeRatio) const; QVector findMaxVolumeItem(const OrderBookData& data) const; OrderBookEntry findMinPriceItem(const QVector& items) const; // 缓存相关方法 bool getCachedResult(const QString& cacheKey, QVector& result) const; void cacheResult(const QString& cacheKey, const QVector& result) const; double sumQuantity(const QVector& items) const; void internalProcess(const OrderBookData& orderData); // JSON保存相关方法 void saveOrderDataAsJson(const OrderBookData& orderData); QJsonObject orderBookDataToJson(const OrderBookData& data) const; QThreadPool m_threadPool; mutable QMutex m_dataMutex; bool m_enabled = true; bool m_jsonSaveEnabled = false; // JSON保存开关 QSet m_processingCodes; QMap m_replyCodeQuantity; // JSON保存线程池 QThreadPool m_jsonSaveThreadPool; // 性能优化成员 - 手动缓存实现 mutable QMap> m_orderCache; mutable QList m_cacheKeys; mutable size_t m_cacheHits = 0; mutable size_t m_cacheMisses = 0; mutable QMutex m_cacheMutex; size_t m_cacheMaxSize = 200; }; #endif // QORDERPROCESSOR_H