/* 订单处理类 - 维护一个线程池,用于处理接收到的订单数据 - 检测大单 单笔订单股票数量大于指定阈值,会被认定为大单 */ #ifndef QORDERPROCESSOR_H #define QORDERPROCESSOR_H #include #include #include #include #include #include "BZStruct.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); //void batchProcess(const QVector& jsonDataList); void setreplyCodeQuantity(QMap CodeQuantity) { m_replyCodeQuantity = CodeQuantity; } 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; double QOrderProcessor::sumQuantity(const QVector& items) const; void internalProcess(const OrderBookData& orderData); QThreadPool m_threadPool; mutable QMutex m_dataMutex; bool m_enabled = true; QSet m_processingCodes; QMap m_replyCodeQuantity; }; #endif // QORDERPROCESSOR_H