Files
QTradeProgram/Sqbase/qorderprocessor.h

107 lines
3.0 KiB
C
Raw Permalink Normal View History

2025-08-15 15:56:40 +08:00
/*
- 线
-
*/
#ifndef QORDERPROCESSOR_H
#define QORDERPROCESSOR_H
#include <QObject>
#include <QVector>
#include <QThreadPool>
#include <QMutex>
2026-02-25 23:00:16 +08:00
#include <QCache>
2025-08-15 15:56:40 +08:00
#include <QtConcurrent\QtConcurrent>
2026-02-25 23:00:16 +08:00
#include <algorithm>
#include <functional>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
2025-08-15 15:56:40 +08:00
#include "BZStruct.h"
2026-02-25 23:00:16 +08:00
#include "qeventbus.h"
#include "ObjectPool.h"
2025-08-15 15:56:40 +08:00
#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);
2026-02-25 23:00:16 +08:00
// JSON保存线程开关
void setJsonSaveEnabled(bool enabled);
bool isJsonSaveEnabled() const { return m_jsonSaveEnabled; }
2025-08-15 15:56:40 +08:00
//void batchProcess(const QVector<QByteArray>& jsonDataList);
void setreplyCodeQuantity(QMap<QString, float> CodeQuantity)
{
m_replyCodeQuantity = CodeQuantity;
}
2026-02-25 23:00:16 +08:00
// 性能监控接口
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<double>(m_cacheHits) / (m_cacheHits + m_cacheMisses) : 0.0;
}
2025-08-15 15:56:40 +08:00
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<BigOrderInfo> findExtremeOrders(const OrderBookData& data) const;
OrderBookEntry findMaxVolumeItemEx(const QVector<OrderBookEntry>& items, double volumeRatio) const;
QVector<BigOrderInfo> findMaxVolumeItem(const OrderBookData& data) const;
OrderBookEntry findMinPriceItem(const QVector<OrderBookEntry>& items) const;
2026-02-25 23:00:16 +08:00
// 缓存相关方法
bool getCachedResult(const QString& cacheKey, QVector<BigOrderInfo>& result) const;
void cacheResult(const QString& cacheKey, const QVector<BigOrderInfo>& result) const;
double sumQuantity(const QVector<OrderBookEntry>& items) const;
2025-08-15 15:56:40 +08:00
void internalProcess(const OrderBookData& orderData);
2026-02-25 23:00:16 +08:00
// JSON保存相关方法
void saveOrderDataAsJson(const OrderBookData& orderData);
QJsonObject orderBookDataToJson(const OrderBookData& data) const;
2025-08-15 15:56:40 +08:00
QThreadPool m_threadPool;
mutable QMutex m_dataMutex;
bool m_enabled = true;
2026-02-25 23:00:16 +08:00
bool m_jsonSaveEnabled = false; // JSON保存开关
2025-08-15 15:56:40 +08:00
QSet<QString> m_processingCodes;
QMap<QString, float> m_replyCodeQuantity;
2026-02-25 23:00:16 +08:00
// JSON保存线程池
QThreadPool m_jsonSaveThreadPool;
// 性能优化成员 - 手动缓存实现
mutable QMap<QString, QVector<BigOrderInfo>> m_orderCache;
mutable QList<QString> m_cacheKeys;
mutable size_t m_cacheHits = 0;
mutable size_t m_cacheMisses = 0;
mutable QMutex m_cacheMutex;
size_t m_cacheMaxSize = 200;
2025-08-15 15:56:40 +08:00
};
2026-02-25 23:00:16 +08:00
#endif // QORDERPROCESSOR_H