From b285416d8fd0db716cba4f44276acab8b9f820a5 Mon Sep 17 00:00:00 2001 From: Laixingyu Date: Mon, 1 Jan 2024 17:46:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=8A=9F=E8=83=BD=EF=BC=88=E5=B7=B2=E5=8F=AF?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=AE=B0=E5=BD=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basedatamanager.cpp | 10 +++ basedatamanager.h | 2 + mainwindow.cpp | 10 +++ mainwindow.h | 1 + ruoyi/ruoyidatamanager.cpp | 177 +++++++++++++++++++++++++++++++++++++ ruoyi/ruoyidatamanager.h | 7 ++ structs.h | 80 ++++++++++++++++- userdata.cpp | 13 ++- userdata.h | 4 +- widget/addtradedialog.cpp | 100 ++++++++++++++++++++- widget/addtradedialog.h | 17 ++++ widget/addtradedialog.ui | 31 ++++--- 12 files changed, 438 insertions(+), 14 deletions(-) diff --git a/basedatamanager.cpp b/basedatamanager.cpp index 10cae2b..9618cae 100644 --- a/basedatamanager.cpp +++ b/basedatamanager.cpp @@ -27,3 +27,13 @@ QList > BaseDataManager::GetTrends(const TrendsRequestParam& requ { return QList >(); } + +QList BaseDataManager::GetStocksBasicInfo(const StockRequestParam& requestParam) +{ + return QList(); +} + +void BaseDataManager::AddTradeRecord(const TradingRequestParam& requestParam) +{ + +} diff --git a/basedatamanager.h b/basedatamanager.h index e037b53..a28d4db 100644 --- a/basedatamanager.h +++ b/basedatamanager.h @@ -16,6 +16,8 @@ public: virtual QPixmap GetVerificationCode(); virtual UserInfo Login(const QString& userName,const QString& password,const QString& code); virtual QList > GetTrends(const TrendsRequestParam& requestParam); + virtual QList GetStocksBasicInfo(const StockRequestParam& requestParam); + virtual void AddTradeRecord(const TradingRequestParam& requestParam); signals: //请求结束 ret 返回值 0成功 非0失败 diff --git a/mainwindow.cpp b/mainwindow.cpp index a3c0fa6..0bf60a2 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -30,6 +30,14 @@ void MainWindow::SetUserInfo(UserInfo user) { m_UserInfo = user; ui->trendsPage->SetUserInfo(user); + + StockRequestParam param; + param.token = m_UserInfo.token; + param.period = "20"; + param.tradeDay = "2023-12-29"; + param.pageNum = 1;//页码 + param.pageSize = 10;//页数量 + m_StockBasicList = m_UserData->GetStocksBasicInfo(param); } void MainWindow::LoadTrendsData() @@ -130,6 +138,8 @@ void MainWindow::on_addTrade_pushButton_clicked() { AddTradeDialog ad; ad.setWindowTitle("添加记录"); + ad.SetStockBasicList(m_StockBasicList); + ad.SetToken(m_UserInfo.token); ad.exec(); } diff --git a/mainwindow.h b/mainwindow.h index 134362c..d810d49 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -49,6 +49,7 @@ private: Ui::MainWindow *ui; UserInfo m_UserInfo; UserData* m_UserData; + QList m_StockBasicList; // TradeTableModel* m_pTradesModel; QStandardItemModel* m_pTradeStandardModel; diff --git a/ruoyi/ruoyidatamanager.cpp b/ruoyi/ruoyidatamanager.cpp index b160db5..b3b0051 100644 --- a/ruoyi/ruoyidatamanager.cpp +++ b/ruoyi/ruoyidatamanager.cpp @@ -104,6 +104,91 @@ QList > RuoyiDataManager::GetTrends(const TrendsRequestParam& req return m_TrendsList; } +QList RuoyiDataManager::GetStocksBasicInfo(const StockRequestParam &requestParam) +{ + if(!m_StockBasicList.isEmpty()) + return m_StockBasicList; + QNetworkRequest request; + QString urlStr(m_sUrl + "/prod-api/stocksystem/stockbasic/list"); + + QUrl url = QUrl(urlStr); + + QUrlQuery query; + query.addQueryItem("Token", requestParam.token.toUtf8()); + query.addQueryItem("pageNum", requestParam.pageNum); + query.addQueryItem("pageSize", requestParam.pageSize); + query.addQueryItem("tradeDay", requestParam.tradeDay); + query.addQueryItem("type", requestParam.period); + url.setQuery(query); + + request.setUrl(url); + request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json;charset=UTF-8"); + request.setRawHeader("Authorization",QString("Bearer %1").arg(requestParam.token).toLocal8Bit()); + qDebug() << __FUNCTION__ << " rawHeader: " << QString("Bearer %1").arg(requestParam.token).toLocal8Bit(); + + QNetworkReply *reply = m_pNetworkManager->get(request); + reply->setProperty("msgType",QVariant(int(GETSTOCKBASIC))); + connect(reply,&QNetworkReply::finished,this,&RuoyiDataManager::RequestFinished); + + QEventLoop loop; + connect(this, SIGNAL(ParseReplyFinished()), &loop, SLOT(quit())); + loop.exec(); + + return m_StockBasicList; +} + +void RuoyiDataManager::AddTradeRecord(const TradingRequestParam &requestParam) +{ + // 创建一个 JSON 对象 + QJsonObject jsonObj; + jsonObj["code"] = requestParam.code; + jsonObj["name"] = requestParam.name; + jsonObj["tradeDay"] = requestParam.tradeDay; + jsonObj["weekDay"] = requestParam.weekDay; + jsonObj["operate"] = requestParam.operate; + jsonObj["dealPrice"] = requestParam.dealPrice; + jsonObj["volumn"] = requestParam.volumn; + jsonObj["amount"] = requestParam.amount; + jsonObj["tax"] = requestParam.tax; + jsonObj["fee"] = requestParam.fee; + jsonObj["other"] = requestParam.fee; + jsonObj["operateDiff"] = requestParam.operateDiff; + jsonObj["preId"] = requestParam.preId; + jsonObj["userId"] = requestParam.userId; + jsonObj["dealLogic"] = requestParam.dealLogic; + jsonObj["bz"] = requestParam.bz; + + // 创建一个 JSON 文档 + QJsonDocument jsonDoc(jsonObj); + + // 将 JSON 文档转换为字符串 + QString jsonString = jsonDoc.toJson(QJsonDocument::Compact); + qDebug() << "JSON String:" << jsonString; + + + QNetworkRequest request; + QString urlStr(m_sUrl + "/prod-api/booksystem/operations"); + + QUrl url = QUrl(urlStr); + + QUrlQuery query; + query.addQueryItem("Token", requestParam.token.toUtf8()); + url.setQuery(query); + + request.setUrl(url); + request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json;charset=UTF-8"); + request.setRawHeader("Authorization",QString("Bearer %1").arg(requestParam.token).toLocal8Bit()); + qDebug() << __FUNCTION__ << " rawHeader: " << QString("Bearer %1").arg(requestParam.token).toLocal8Bit(); + + QNetworkReply *reply = m_pNetworkManager->post(request,jsonString.toUtf8()); + reply->setProperty("msgType",QVariant(int(ADDTRADEDATA))); + connect(reply,&QNetworkReply::finished,this,&RuoyiDataManager::RequestFinished); + + QEventLoop loop; + connect(this, SIGNAL(ParseReplyFinished()), &loop, SLOT(quit())); + loop.exec(); +} + void RuoyiDataManager::RequestFinished() { QNetworkReply *reply = dynamic_cast< QNetworkReply* >(sender()); @@ -120,6 +205,14 @@ void RuoyiDataManager::RequestFinished() { ParseTrends(reply); } + else if(type == GETSTOCKBASIC) + { + ParseStockBasic(reply); + } + else if(type == ADDTRADEDATA) + { + ParseAddTradeReply(reply); + } emit ParseReplyFinished(); } @@ -268,3 +361,87 @@ void RuoyiDataManager::ParseTrends(QNetworkReply *reply) } } +void RuoyiDataManager::ParseStockBasic(QNetworkReply *reply) +{ + QByteArray readAllArray; + QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + if(statusCode.isValid()) + { + qDebug() << "status code=" << statusCode.toInt(); + } + + QNetworkReply::NetworkError err = reply->error(); + if(err != QNetworkReply::NoError) + { + qDebug() << "Failed: " << reply->errorString(); + } + else + { + readAllArray = reply->readAll(); + QJsonParseError jsonError; + QJsonDocument document = QJsonDocument::fromJson(readAllArray,&jsonError); + if(jsonError.error == QJsonParseError::NoError && !document.isNull()) + { + int rowCounts = 0; + QJsonObject root = document.object(); + if(root.contains("rows")) + { + m_StockBasicList.clear(); + QJsonArray rows = root["rows"].toArray(); + rowCounts = rows.count(); + for(int i = 0 ; i < rowCounts; i++) + { + StockBasicInfo info; + QJsonObject obj = rows[i].toObject(); + if(obj.contains("name")) + { + info.name = obj["name"].toString(); + } + if(obj.contains("code")) + { + info.code = obj["code"].toString(); + } + if(obj.contains("blemind2")) + { + info.blemind2 = obj["blemind2"].toString(); + } + if(obj.contains("blemind3")) + { + info.blemind3 = obj["blemind3"].toString(); + } + if(obj.contains("listdate")) + { + info.listdate = obj["listdate"].toString(); + } + m_StockBasicList.append(info); + } + } + } + else + { + qDebug() << __FUNCTION__ << __LINE__ << jsonError.errorString(); + } + } +} + +void RuoyiDataManager::ParseAddTradeReply(QNetworkReply *reply) +{ + QByteArray readAllArray; + QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + if(statusCode.isValid()) + { + qDebug() << "status code=" << statusCode.toInt(); + } + + QNetworkReply::NetworkError err = reply->error(); + if(err != QNetworkReply::NoError) + { + qDebug() << "Failed: " << reply->errorString(); + } + else + { + readAllArray = reply->readAll(); + qDebug() << __FUNCTION__ << readAllArray; + } +} + diff --git a/ruoyi/ruoyidatamanager.h b/ruoyi/ruoyidatamanager.h index 73f6446..1656aef 100644 --- a/ruoyi/ruoyidatamanager.h +++ b/ruoyi/ruoyidatamanager.h @@ -13,6 +13,8 @@ class RuoyiDataManager : public BaseDataManager GETVERIFICATIONCODE = 0, LOGIN, GETTRENDS, + GETSTOCKBASIC, + ADDTRADEDATA, }; public: @@ -22,6 +24,8 @@ public: QPixmap GetVerificationCode() override; UserInfo Login(const QString& userName,const QString& password,const QString& code) override; QList > GetTrends(const TrendsRequestParam& requestParam) override; + QList GetStocksBasicInfo(const StockRequestParam& requestParam) override; + void AddTradeRecord(const TradingRequestParam& requestParam); public slots: void RequestFinished(); @@ -32,12 +36,15 @@ private: void ParseVerificationCode(QNetworkReply* reply); void ParseLogin(QNetworkReply* reply); void ParseTrends(QNetworkReply* reply); + void ParseStockBasic(QNetworkReply* reply); + void ParseAddTradeReply(QNetworkReply* reply); private: QNetworkAccessManager* m_pNetworkManager; QString m_sUrl; QList< QList > m_TrendsList; + QList m_StockBasicList;//基础数据 }; #endif // RUOYIDATAMANAGER_H diff --git a/structs.h b/structs.h index 393b8c0..a41ea63 100644 --- a/structs.h +++ b/structs.h @@ -10,7 +10,7 @@ enum ManagerType MySql }; -//用户基本信心 +//用户基本信息 typedef struct tagUserInfo { QString userName; // 用户名 @@ -19,6 +19,17 @@ typedef struct tagUserInfo QPixmap codePix; }UserInfo; +//基础数据结构 +typedef struct tagStockBasicInfo +{ + QString code; + QString name; + QString blemind2; + QString blemind3; + QString listdate; +}StockBasicInfo; + +//请求数据结构 typedef struct tagTrendsRequstParam { QString period;//"1","3","5","10","15","20,"30",查询周期 @@ -37,4 +48,71 @@ typedef struct tagTrendsRequstParam } }TrendsRequestParam; +//股票数据请求结构 +typedef struct tagStockRequestParam +{ + QString period;//"1","3","5","10","15","20,"30",查询周期 + QString tradeDay;//交易日 + QString token; + QString pageNum;//页码 + QString pageSize;//页数量 + + tagStockRequestParam() + { + period = ""; + tradeDay = "2023-12-01"; + token = ""; + pageNum = "1"; + pageSize = "10"; + } +}StockRequestParam; + +//交易记录请求结构 +typedef struct tagTradingRequestParam +{ + /** + * {"id":null,"code":"001002.SH","name":"平安银行","tradeDay":"2023-12-29", + * "weekDay":"2024-01-01","operate":"买入", + * "dealPrice":"12","volumn":"12","amount":"12","tax":"12","fee":"12","other":"12","operateDiff":"12", + * "preId":null,"userId":null,"dealLogic":"as扥as扥as等发生","bz":"a色发生扥as扥as扥"} +*/ + QString token; + QString code; + QString name; + QString tradeDay; + QString weekDay; + QString operate; + QString dealPrice; + QString volumn; + QString amount; + QString tax; + QString fee; + QString other; + QString operateDiff; + QString preId; + QString userId; + QString dealLogic; + QString bz; + + tagTradingRequestParam(){ + token = ""; + code = ""; + name = ""; + tradeDay = ""; + weekDay = "2023-12-29"; + operate = "Buy"; + dealPrice = "10"; + volumn = "100"; + amount = "1000"; + tax = "10000"; + fee = " 10000"; + other = "10000"; + operateDiff = "100"; + preId = ""; + userId = ""; + dealLogic = "aasdfasdfasdfsadfasfasdf"; + bz = "adfasdfasdfqetrqwetrq3twqet4rqwetgrqwefqwef"; + } +}TradingRequestParam; + #endif // STRUCTS_H diff --git a/userdata.cpp b/userdata.cpp index 829d98b..896598e 100644 --- a/userdata.cpp +++ b/userdata.cpp @@ -62,7 +62,18 @@ QList > UserData::GetTrends(const TrendsRequestParam& requestPara return QList >(); } -void UserData::AddTradeRecord() +QList UserData::GetStocksBasicInfo(const StockRequestParam &requestParam) { + if(m_pDataManager != nullptr) + return m_pDataManager->GetStocksBasicInfo(requestParam); + return QList(); +} +void UserData::AddTradeRecord(const TradingRequestParam& requestParam) +{ + /** + * {"id":null,"code":"001002.SH","name":"平安银行","tradeDay":"2023-12-29","weekDay":"2024-01-01","operate":"买入","dealPrice":"12","volumn":"12","amount":"12","tax":"12","fee":"12","other":"12","operateDiff":"12","preId":null,"userId":null,"dealLogic":"as扥as扥as等发生","bz":"a色发生扥as扥as扥"} +*/ + if(m_pDataManager != nullptr) + return m_pDataManager->AddTradeRecord(requestParam); } diff --git a/userdata.h b/userdata.h index f147f16..d7529b0 100644 --- a/userdata.h +++ b/userdata.h @@ -18,8 +18,10 @@ public: UserInfo Login(const QString& userName,const QString& password,const QString& code); //获取trends QList > GetTrends(const TrendsRequestParam& requestParam); + //获取基础数据 + QList GetStocksBasicInfo(const StockRequestParam& requestParam); //添加交易记录 - void AddTradeRecord(); + void AddTradeRecord(const TradingRequestParam& requestParam); private: UserData(); diff --git a/widget/addtradedialog.cpp b/widget/addtradedialog.cpp index 60f88ac..0141e76 100644 --- a/widget/addtradedialog.cpp +++ b/widget/addtradedialog.cpp @@ -3,6 +3,7 @@ #include #include #include "userdata.h" +#include AddTradeDialog::AddTradeDialog(QWidget *parent) : QDialog(parent), @@ -16,9 +17,106 @@ AddTradeDialog::~AddTradeDialog() delete ui; } +void AddTradeDialog::SetStockBasicList(const QList &stockBasicList) +{ + int count = stockBasicList.count(); + QStringList codeList,nameList; + for(int i = 0 ; i < count; i++) + { + codeList.append(stockBasicList[i].code); + nameList.append(stockBasicList[i].name); + } + m_StockBasicList = stockBasicList; + InitLineEdit(codeList,nameList); +} + +void AddTradeDialog::SetToken(const QString &token) +{ + m_Token = token; +} + +void AddTradeDialog::InitLineEdit(const QStringList& codeList,const QStringList& nameList) +{ + QCompleter* codeCompleter = new QCompleter(codeList, ui->code); + ui->code->setCompleter(codeCompleter); + connect(codeCompleter, QOverload::of(&QCompleter::activated), + [=](const QString &text){ + on_code_Activated(text); + }); + + QCompleter* nameCompleter = new QCompleter(nameList, ui->name); + ui->name->setCompleter(nameCompleter); + connect(nameCompleter, QOverload::of(&QCompleter::activated), + [=](const QString &text){ + on_name_Activated(text); + });} + void AddTradeDialog::on_pushButton_OK_clicked() { - UserData::Instanse()->AddTradeRecord(); + TradingRequestParam requestParam; + requestParam.code = ui->code->text(); + requestParam.name = ui->name->text(); + requestParam.tradeDay = "2023-12-29"; + requestParam.token = m_Token; + UserData::Instanse()->AddTradeRecord(requestParam); this->accept(); } +void AddTradeDialog::on_name_Activated(const QString &text) +{ + qDebug() << "You selected:" << text; + QString name = text; + int count = m_StockBasicList.count(); + for(int i = 0 ; i < count; i++) + { + if(m_StockBasicList[i].name == name) + { + ui->code->setText(m_StockBasicList[i].code); + break; + } + } +} + +void AddTradeDialog::on_code_Activated(const QString &text) +{ + QString code = text; + int count = m_StockBasicList.count(); + for(int i = 0 ; i < count; i++) + { + if(m_StockBasicList[i].code == code) + { + ui->name->setText(m_StockBasicList[i].name); + break; + } + } +} + +void AddTradeDialog::on_name_editingFinished() +{ + QString name = ui->name->text(); + int count = m_StockBasicList.count(); + for(int i = 0 ; i < count; i++) + { + if(m_StockBasicList[i].name == name) + { + ui->code->setText(m_StockBasicList[i].code); + break; + } + } +} + + +void AddTradeDialog::on_code_editingFinished() +{ + QString code = ui->code->text(); + int count = m_StockBasicList.count(); + for(int i = 0 ; i < count; i++) + { + if(m_StockBasicList[i].code == code) + { + ui->name->setText(m_StockBasicList[i].name); + break; + } + } +} + diff --git a/widget/addtradedialog.h b/widget/addtradedialog.h index 38620ef..5523b61 100644 --- a/widget/addtradedialog.h +++ b/widget/addtradedialog.h @@ -2,6 +2,8 @@ #define ADDTRADEDIALOG_H #include +#include "userdata.h" +#include namespace Ui { class AddTradeDialog; @@ -15,11 +17,26 @@ public: explicit AddTradeDialog(QWidget *parent = nullptr); ~AddTradeDialog(); + void SetStockBasicList(const QList& stockBasicList); + void SetToken(const QString& token); + private slots: void on_pushButton_OK_clicked(); + void on_name_editingFinished(); + + void on_code_editingFinished(); + + void on_name_Activated(const QString &text); + + void on_code_Activated(const QString &text); + +private: + void InitLineEdit(const QStringList& codeList,const QStringList& nameList); private: Ui::AddTradeDialog *ui; + QList m_StockBasicList; + QString m_Token; }; #endif // ADDTRADEDIALOG_H diff --git a/widget/addtradedialog.ui b/widget/addtradedialog.ui index af301e6..54c8e16 100644 --- a/widget/addtradedialog.ui +++ b/widget/addtradedialog.ui @@ -32,7 +32,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -161,7 +161,18 @@ - + + + + buy + + + + + sell + + + @@ -171,7 +182,7 @@ - + @@ -180,9 +191,6 @@ - - - @@ -191,7 +199,7 @@ - + @@ -200,8 +208,11 @@ + + + - +