fix: 增加添加记录功能(已可上传记录)

master
Laixingyu 2 years ago
parent 7d63d14b68
commit b285416d8f

@ -27,3 +27,13 @@ QList<QList<QString> > BaseDataManager::GetTrends(const TrendsRequestParam& requ
{ {
return QList<QList<QString> >(); return QList<QList<QString> >();
} }
QList<StockBasicInfo> BaseDataManager::GetStocksBasicInfo(const StockRequestParam& requestParam)
{
return QList<StockBasicInfo>();
}
void BaseDataManager::AddTradeRecord(const TradingRequestParam& requestParam)
{
}

@ -16,6 +16,8 @@ public:
virtual QPixmap GetVerificationCode(); virtual QPixmap GetVerificationCode();
virtual UserInfo Login(const QString& userName,const QString& password,const QString& code); virtual UserInfo Login(const QString& userName,const QString& password,const QString& code);
virtual QList<QList<QString> > GetTrends(const TrendsRequestParam& requestParam); virtual QList<QList<QString> > GetTrends(const TrendsRequestParam& requestParam);
virtual QList<StockBasicInfo> GetStocksBasicInfo(const StockRequestParam& requestParam);
virtual void AddTradeRecord(const TradingRequestParam& requestParam);
signals: signals:
//请求结束 ret 返回值 0成功 非0失败 //请求结束 ret 返回值 0成功 非0失败

@ -30,6 +30,14 @@ void MainWindow::SetUserInfo(UserInfo user)
{ {
m_UserInfo = user; m_UserInfo = user;
ui->trendsPage->SetUserInfo(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() void MainWindow::LoadTrendsData()
@ -130,6 +138,8 @@ void MainWindow::on_addTrade_pushButton_clicked()
{ {
AddTradeDialog ad; AddTradeDialog ad;
ad.setWindowTitle("添加记录"); ad.setWindowTitle("添加记录");
ad.SetStockBasicList(m_StockBasicList);
ad.SetToken(m_UserInfo.token);
ad.exec(); ad.exec();
} }

@ -49,6 +49,7 @@ private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
UserInfo m_UserInfo; UserInfo m_UserInfo;
UserData* m_UserData; UserData* m_UserData;
QList<StockBasicInfo> m_StockBasicList;
// TradeTableModel* m_pTradesModel; // TradeTableModel* m_pTradesModel;
QStandardItemModel* m_pTradeStandardModel; QStandardItemModel* m_pTradeStandardModel;

@ -104,6 +104,91 @@ QList<QList<QString> > RuoyiDataManager::GetTrends(const TrendsRequestParam& req
return m_TrendsList; return m_TrendsList;
} }
QList<StockBasicInfo> 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() void RuoyiDataManager::RequestFinished()
{ {
QNetworkReply *reply = dynamic_cast< QNetworkReply* >(sender()); QNetworkReply *reply = dynamic_cast< QNetworkReply* >(sender());
@ -120,6 +205,14 @@ void RuoyiDataManager::RequestFinished()
{ {
ParseTrends(reply); ParseTrends(reply);
} }
else if(type == GETSTOCKBASIC)
{
ParseStockBasic(reply);
}
else if(type == ADDTRADEDATA)
{
ParseAddTradeReply(reply);
}
emit ParseReplyFinished(); 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;
}
}

@ -13,6 +13,8 @@ class RuoyiDataManager : public BaseDataManager
GETVERIFICATIONCODE = 0, GETVERIFICATIONCODE = 0,
LOGIN, LOGIN,
GETTRENDS, GETTRENDS,
GETSTOCKBASIC,
ADDTRADEDATA,
}; };
public: public:
@ -22,6 +24,8 @@ public:
QPixmap GetVerificationCode() override; QPixmap GetVerificationCode() override;
UserInfo Login(const QString& userName,const QString& password,const QString& code) override; UserInfo Login(const QString& userName,const QString& password,const QString& code) override;
QList<QList<QString> > GetTrends(const TrendsRequestParam& requestParam) override; QList<QList<QString> > GetTrends(const TrendsRequestParam& requestParam) override;
QList<StockBasicInfo> GetStocksBasicInfo(const StockRequestParam& requestParam) override;
void AddTradeRecord(const TradingRequestParam& requestParam);
public slots: public slots:
void RequestFinished(); void RequestFinished();
@ -32,12 +36,15 @@ private:
void ParseVerificationCode(QNetworkReply* reply); void ParseVerificationCode(QNetworkReply* reply);
void ParseLogin(QNetworkReply* reply); void ParseLogin(QNetworkReply* reply);
void ParseTrends(QNetworkReply* reply); void ParseTrends(QNetworkReply* reply);
void ParseStockBasic(QNetworkReply* reply);
void ParseAddTradeReply(QNetworkReply* reply);
private: private:
QNetworkAccessManager* m_pNetworkManager; QNetworkAccessManager* m_pNetworkManager;
QString m_sUrl; QString m_sUrl;
QList< QList<QString> > m_TrendsList; QList< QList<QString> > m_TrendsList;
QList<StockBasicInfo> m_StockBasicList;//基础数据
}; };
#endif // RUOYIDATAMANAGER_H #endif // RUOYIDATAMANAGER_H

@ -10,7 +10,7 @@ enum ManagerType
MySql MySql
}; };
//用户基本信 //用户基本信
typedef struct tagUserInfo typedef struct tagUserInfo
{ {
QString userName; // 用户名 QString userName; // 用户名
@ -19,6 +19,17 @@ typedef struct tagUserInfo
QPixmap codePix; QPixmap codePix;
}UserInfo; }UserInfo;
//基础数据结构
typedef struct tagStockBasicInfo
{
QString code;
QString name;
QString blemind2;
QString blemind3;
QString listdate;
}StockBasicInfo;
//请求数据结构
typedef struct tagTrendsRequstParam typedef struct tagTrendsRequstParam
{ {
QString period;//"1","3","5","10","15","20,"30",查询周期 QString period;//"1","3","5","10","15","20,"30",查询周期
@ -37,4 +48,71 @@ typedef struct tagTrendsRequstParam
} }
}TrendsRequestParam; }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 #endif // STRUCTS_H

@ -62,7 +62,18 @@ QList<QList<QString> > UserData::GetTrends(const TrendsRequestParam& requestPara
return QList<QList<QString> >(); return QList<QList<QString> >();
} }
void UserData::AddTradeRecord() QList<StockBasicInfo> UserData::GetStocksBasicInfo(const StockRequestParam &requestParam)
{ {
if(m_pDataManager != nullptr)
return m_pDataManager->GetStocksBasicInfo(requestParam);
return QList<StockBasicInfo>();
}
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);
} }

@ -18,8 +18,10 @@ public:
UserInfo Login(const QString& userName,const QString& password,const QString& code); UserInfo Login(const QString& userName,const QString& password,const QString& code);
//获取trends //获取trends
QList<QList<QString> > GetTrends(const TrendsRequestParam& requestParam); QList<QList<QString> > GetTrends(const TrendsRequestParam& requestParam);
//获取基础数据
QList<StockBasicInfo> GetStocksBasicInfo(const StockRequestParam& requestParam);
//添加交易记录 //添加交易记录
void AddTradeRecord(); void AddTradeRecord(const TradingRequestParam& requestParam);
private: private:
UserData(); UserData();

@ -3,6 +3,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QDebug> #include <QDebug>
#include "userdata.h" #include "userdata.h"
#include <QCompleter>
AddTradeDialog::AddTradeDialog(QWidget *parent) : AddTradeDialog::AddTradeDialog(QWidget *parent) :
QDialog(parent), QDialog(parent),
@ -16,9 +17,106 @@ AddTradeDialog::~AddTradeDialog()
delete ui; delete ui;
} }
void AddTradeDialog::SetStockBasicList(const QList<StockBasicInfo> &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<const QString &>::of(&QCompleter::activated),
[=](const QString &text){
on_code_Activated(text);
});
QCompleter* nameCompleter = new QCompleter(nameList, ui->name);
ui->name->setCompleter(nameCompleter);
connect(nameCompleter, QOverload<const QString &>::of(&QCompleter::activated),
[=](const QString &text){
on_name_Activated(text);
});}
void AddTradeDialog::on_pushButton_OK_clicked() 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(); 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;
}
}
}

@ -2,6 +2,8 @@
#define ADDTRADEDIALOG_H #define ADDTRADEDIALOG_H
#include <QDialog> #include <QDialog>
#include "userdata.h"
#include <QMap>
namespace Ui { namespace Ui {
class AddTradeDialog; class AddTradeDialog;
@ -15,11 +17,26 @@ public:
explicit AddTradeDialog(QWidget *parent = nullptr); explicit AddTradeDialog(QWidget *parent = nullptr);
~AddTradeDialog(); ~AddTradeDialog();
void SetStockBasicList(const QList<StockBasicInfo>& stockBasicList);
void SetToken(const QString& token);
private slots: private slots:
void on_pushButton_OK_clicked(); 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: private:
Ui::AddTradeDialog *ui; Ui::AddTradeDialog *ui;
QList<StockBasicInfo> m_StockBasicList;
QString m_Token;
}; };
#endif // ADDTRADEDIALOG_H #endif // ADDTRADEDIALOG_H

@ -32,7 +32,7 @@
</widget> </widget>
</item> </item>
<item row="2" column="5" colspan="2"> <item row="2" column="5" colspan="2">
<widget class="QLineEdit" name="lineEdit"/> <widget class="QLineEdit" name="volumn"/>
</item> </item>
<item row="3" column="0" colspan="2"> <item row="3" column="0" colspan="2">
<widget class="QLabel" name="label_7"> <widget class="QLabel" name="label_7">
@ -42,7 +42,7 @@
</widget> </widget>
</item> </item>
<item row="3" column="2" colspan="2"> <item row="3" column="2" colspan="2">
<widget class="QLineEdit" name="lineEdit_3"/> <widget class="QLineEdit" name="price"/>
</item> </item>
<item row="3" column="4"> <item row="3" column="4">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
@ -52,7 +52,7 @@
</widget> </widget>
</item> </item>
<item row="3" column="5" colspan="2"> <item row="3" column="5" colspan="2">
<widget class="QLineEdit" name="lineEdit_6"/> <widget class="QLineEdit" name="amount"/>
</item> </item>
<item row="3" column="7"> <item row="3" column="7">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
@ -161,7 +161,18 @@
</widget> </widget>
</item> </item>
<item row="2" column="2" colspan="2"> <item row="2" column="2" colspan="2">
<widget class="QComboBox" name="comboBox_3"/> <widget class="QComboBox" name="type">
<item>
<property name="text">
<string>buy</string>
</property>
</item>
<item>
<property name="text">
<string>sell</string>
</property>
</item>
</widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="1" column="0" colspan="2">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
@ -171,7 +182,7 @@
</widget> </widget>
</item> </item>
<item row="1" column="2" colspan="2"> <item row="1" column="2" colspan="2">
<widget class="QDateEdit" name="dateEdit"/> <widget class="QDateEdit" name="tradeDay"/>
</item> </item>
<item row="1" column="4"> <item row="1" column="4">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
@ -180,9 +191,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="5" colspan="2">
<widget class="QComboBox" name="comboBox"/>
</item>
<item row="2" column="7"> <item row="2" column="7">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="text"> <property name="text">
@ -191,7 +199,7 @@
</widget> </widget>
</item> </item>
<item row="2" column="8" colspan="2"> <item row="2" column="8" colspan="2">
<widget class="QLineEdit" name="lineEdit_2"/> <widget class="QLineEdit" name="remainder"/>
</item> </item>
<item row="1" column="7"> <item row="1" column="7">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
@ -200,8 +208,11 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="5" colspan="2">
<widget class="QLineEdit" name="name"/>
</item>
<item row="1" column="8" colspan="2"> <item row="1" column="8" colspan="2">
<widget class="QComboBox" name="comboBox_2"/> <widget class="QLineEdit" name="code"/>
</item> </item>
</layout> </layout>
</widget> </widget>

Loading…
Cancel
Save