From 7c4fe576e5fc20267d5e1d5287cbb2ec77e64c3a Mon Sep 17 00:00:00 2001 From: wumu <mayi@mayi.com> Date: 星期二, 19 八月 2025 23:40:18 +0800 Subject: [PATCH] redis --- historydata.cpp | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 166 insertions(+), 8 deletions(-) diff --git a/historydata.cpp b/historydata.cpp index e066017..06b11f9 100644 --- a/historydata.cpp +++ b/historydata.cpp @@ -38,7 +38,7 @@ ui->tableView->setSortingEnabled(true); QStringList labels; - labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"甯傚��(浜�)"<<"娑ㄨ穼骞�"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�"<<"鎹㈡墜鐜�"<<"PE_TTM"; + labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"甯傚��(浜�)"<<"娑ㄨ穼骞�"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�"<<"鎹㈡墜鐜�"<<"PE_TTM"<<"浜ゆ槗棰濇帓鍚�"; m_model->setHorizontalHeaderLabels(labels); initMySQL(); // 鍒濆鍖朚ySQL @@ -54,7 +54,7 @@ QVariant var; var.setValue(list); // 璁剧疆瑕佽闂殑缃戝潃 - m_request.setUrl(QUrl("https://xueqiu.com/?md5__1038=QqGxcDnDyiitnD05o4%2Br%3Di%3De0KDtYqCDRWOoD")); + m_request.setUrl(QUrl("https://xueqiu.com/S/SZ002466")); // 璁剧疆璇锋眰澶达紝鐢ㄦ埛浠g悊锛岀敤鏉ユā鎷熸祻瑙堝櫒 m_request.setHeader(QNetworkRequest::UserAgentHeader,userAgent); // 璁剧疆cookie @@ -72,7 +72,7 @@ m_poolModel = new QStandardItemModel(1,9,this); QStringList poolLabel; - poolLabel<<"id"<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鐩戞帶璁板綍鏃堕棿"<<"鐩戞帶涔板叆浠锋牸"<<"褰撳墠浠锋牸"<<"鐩堜簭鐧惧垎姣�"<<"鐩戞帶鍗栧嚭浠锋牸"<<"鐩戞帶鍗栧嚭鏃堕棿"; + poolLabel<<"id"<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鐩戞帶涔板叆浠锋牸"<<"鐩戞帶璁板綍鏃堕棿"<<"褰撳墠浠锋牸"<<"鐩堜簭鐧惧垎姣�"<<"鐩戞帶鍗栧嚭浠锋牸"<<"鐩戞帶鍗栧嚭鏃堕棿"<<"绛栫暐鍛ㄦ湡"; m_poolModel->setHorizontalHeaderLabels(poolLabel); ui->tableView_2->setModel(m_poolModel); @@ -81,6 +81,10 @@ m_poolTimer = new QTimer(this); connect(m_poolTimer,SIGNAL(timeout()),this,SLOT(poolTimerSlot())); m_poolTimer->start(10*1000); + + m_getPoolCloseTimer = new QTimer(this); // 鍒锋柊鑲$エ姹犳渶鏂颁环鏍� + connect(m_getPoolCloseTimer,SIGNAL(timeout()),this,SLOT(getLastCloseSlot())); + } HistoryData::~HistoryData() @@ -179,6 +183,9 @@ qDebug()<<"鏌ョ湅涓偂鎯呭喌:"; getOneStock(buffer); + }else if(reply->url().toString().indexOf("https://hqm.stock.sohu.com/getqjson") != -1){ + qDebug()<<"鑾峰彇鑲$エ姹犱釜鑲′环鏍�"; + getPoolStock(buffer); } } @@ -247,6 +254,65 @@ } +/* + * {"cn_000032":["cn_000032","娣辨杈撅肌","26.33","-9.98%","-2.92","1102599","3473","306282","17.10%","2.38","29.87","26.33","0.00","29.25","29.25","\/cn\/000032\/index.shtml","169.77","2025-02-28 15:00:54","\/t\/cn\/032\/000032.html"], + * "cn_603729":["cn_603729","榫欓煹鑲′唤","15.50","-4.79%","-0.78","52294","1220","8268","5.60%","0.57","16.27","15.46","407.89","16.28","16.20","\/cn\/603729\/index.shtml","14.47","2025-02-28 15:00:57","\/t\/cn\/729\/603729.html"], + * "cn_300253":["cn_300253","鍗畞鍋ュ悍","11.03","-7.08%","-0.84","1667417","11","189099","8.96%","3.64","11.86","10.97","116.11","11.87","11.70","\/cn\/300253\/index.shtml","205.36","2025-02-28 15:30:57","\/t\/cn\/253\/300253.html"], + * "cn_300454":["cn_300454","娣变俊鏈� ","102.06","-7.13%","-7.84","173684","1","181338","6.29%","2.29","109.90","101.00","0.00","109.90","107.14","\/cn\/300454\/index.shtml","281.95","2025-02-28 15:30:57","\/t\/cn\/454\/300454.html"], + * "cn_688055":["cn_688055","榫欒吘鍏夌數","3.88","-4.67%","-0.19","98688","1418","3898","0.30%","1.01","4.08","3.87","0.00","4.07","4.07","\/cn\/688055\/index.shtml","129.33","2025-02-28 15:30:56","\/t\/cn\/055\/688055.html"], + * "cn_000818":["cn_000818","鑸敠绉戞妧","31.45","-3.82%","-1.25","982520","16510","316446","14.50%","5.41","33.40","30.98","393.13","32.70","32.30","\/cn\/000818\/index.shtml","213.03","2025-02-28 15:00:54","\/t\/cn\/818\/000818.html"]} + * +*/ +void HistoryData::getPoolStock(QByteArray &buffer){ + // 閫氳繃鎼滅嫄鑲$エ琛屾儏涓績鏉ユ壒閲忚幏鍙栦环鏍兼儏鍐碉紝https://hqm.stock.sohu.com/getqjson?code=cn_603729,cn_688055,cn_000032,cn_000818,cn_300454,cn_300253 + qDebug()<<buffer; + qDebug()<<buffer.left(buffer.size()-1); + QJsonDocument jd = QJsonDocument::fromJson(buffer.left(buffer.size()-1)); + qDebug()<<jd.isObject()<<jd.toJson(); + + if(jd.isObject()){ + QJsonObject jObject = jd.object(); + //QJsonArray jArr = jObject.keys(); // 閫氳繃閿�煎鍙栧�� + int cnt = jObject.keys().size(); + qDebug()<<"鏁扮粍size:"<<cnt; + for(auto it = jObject.begin();it != jObject.end();++it){ + qDebug()<<it.key()<<it.value().toArray().at(1)<<it.value().toArray().at(2); + } + }else{ + // 褰撳瓧绗︿覆澶勭悊 + QList<QByteArray> tmp = buffer.split('['); + //qDebug()<<"[ tmp size:"<<tmp.size(); + for(int i=0;i<tmp.size();++i){ + //qDebug()<<i<<tmp.at(i); + QList<QByteArray> row = tmp.at(i).split(','); + if(row.size() > 2){ + QString code = QString::fromLocal8Bit(row.at(0).mid(1,row.at(0).size()-2)).trimmed().split('_').at(1); + QString name = QString::fromLocal8Bit(row.at(1).mid(1,row.at(1).size()-2)).trimmed(); + double close = row.at(2).mid(1,row.at(2).size()-2).toDouble(); + //qDebug()<<name<<close<<code; + QString sql = QString("update stock_pool set cur_price=%1 where code like '%%2%' and state=1").arg(close).arg(code); + qDebug()<<sql; + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"sql update ok"; + }else{ + qDebug()<<"sql update fail"; + } + + } + } + + // 鏈�鍚庢洿鏂颁竴涓嬭〃鏍肩殑鐧惧垎姣旀儏鍐� + QString sql = "update stock_pool set percent = (cur_price/in_price - 1)*100 where cur_price > 0 and in_price > 0 and state=1"; + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"sql update percent ok"; + }else{ + qDebug()<<"sql update percent fail"; + } + } +} + void HistoryData::on_pushButton_search_clicked() { // 鎻愮ず鏌ヨ绛夊緟 @@ -254,7 +320,7 @@ QString searchTime = ui->dateEdit->text(); qDebug()<<"鏌ヨ鐨勬椂闂�:"<<searchTime; - QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm from stock_day_info where time_trade = '%1'").arg(searchTime); + QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank from stock_day_info where time_trade = '%1'").arg(searchTime); qDebug()<<"sql:"<<sql; m_modelDatas.clear(); // 娓呯┖鏁扮粍涓殑鏁版嵁 @@ -275,8 +341,9 @@ QString volume = que.value(6).toString(); QString turnover_rate = que.value(7).toString(); QString pe_ttm = que.value(8).toString(); + QString amount_rank = que.value(9).toString(); - m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm}); + m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank}); QList<QStandardItem*> items; items.append(new QStandardItem(name)); @@ -300,6 +367,7 @@ items.append(new QStandardItem(volume)); items.append(new QStandardItem(turnover_rate)); items.append(new QStandardItem(pe_ttm)); + items.append(new QStandardItem(amount_rank)); m_model->appendRow(items); rows++; } @@ -329,9 +397,10 @@ QString code = ui->lineEdit_2->text(); QString price = ui->lineEdit_3->text(); QString in_date = ui->dateEdit_2->text(); - qDebug()<<name<<code<<price<<in_date; + QString type = ui->comboBox->currentText(); + qDebug()<<name<<code<<price<<in_date<<type; - QString sql = QString("insert into stock_pool (name,code,in_price,in_time) values('%1','%2',%3,'%4')").arg(name).arg(code).arg(price).arg(in_date); + QString sql = QString("insert into stock_pool (name,code,in_price,in_time,type) values('%1','%2',%3,'%4','%5')").arg(name).arg(code).arg(price).arg(in_date).arg(type); qDebug()<<"sql:"<<sql; QSqlQuery que(db); @@ -352,7 +421,7 @@ m_poolModel->setRowCount(0); while (que.next()) { QList<QStandardItem*> items; - for(int i=0;i<9;++i){ + for(int i=0;i<10;++i){ QString item = que.value(i).toString(); QStandardItem *it = new QStandardItem(item); if(i==6){ @@ -412,6 +481,95 @@ qDebug()<<"days:"<<days; m_days = days; // 鍒锋柊鏃堕棿 + getLastCloseSlot(); +} + +void HistoryData::getLastCloseSlot() +{ + // 鑾峰彇鑲$エ姹犳瘡鍙偂绁ㄦ渶鏂颁环鏍� + QString url = "https://hqm.stock.sohu.com/getqjson?code="; + for(int i=0;i<m_poolModel->rowCount();++i){ + if(m_poolModel->item(i,2)){ + QString code="cn_"; + if(i > 0) code = ",cn_"; + code += m_poolModel->item(i,2)->text().mid(2); + // qDebug()<<"code:"<<code; + url+=code; + //qDebug()<<"url:"<<url; + } + + + } + qDebug()<<QDateTime::currentDateTime()<<"url:"<<url; + + m_request.setUrl(QUrl(url)); + m_manager.get(m_request); + + +} + +void HistoryData::on_checkBox_updatePoolClose_clicked() +{ + if(ui->checkBox_updatePoolClose->isChecked()){ + m_getPoolCloseTimer->start(3*60*1000); // 3鍒嗛挓鏇存柊涓�娆� + }else{ + m_getPoolCloseTimer->stop(); + } +} + +void HistoryData::on_pushButton_updateRank_clicked() +{ + // 鍏堣幏鍙栨渶鏂扮殑鏃ユ湡鏇存柊琛紝鎵惧�掓暟绗簩涓棩鏈� + // 閫氳繃鍊掓暟绗簩涓棩鏈燂紝鎵惧埌鎵�鏈夎褰曞ぇ浜庤鏃ユ湡鐨勬棩鏈� + // 鏍规嵁鎵惧埌鐨勬墍鏈夊ぇ浜庣殑鏃ユ湡锛屾尐涓繘琛屾帓鍚嶅鐞� + + QVector<QString> log_days; + QString sql = "select * from days_info"; + QSqlQuery que(db); + if(que.exec(sql)){ + while (que.next()) { + log_days.append(que.value(1).toString()); + } + }else{ + qDebug()<<"鏌ヨ澶辫触"; + return ; + } + qDebug()<<log_days.size()<<log_days.back(); + + QString time_trade = "2019-01-01"; + if(log_days.size() > 1){ + time_trade = log_days.at(log_days.size() - 2); // 鏈熬鍊掓暟绗簩涓洿鏂� + //time_trade = log_days.first(); // 浠庣涓�涓紑濮嬫洿鏂� + } + qDebug()<<"time_trade:"<<time_trade; + + // 閫氳繃鍊掓暟绗簩涓棩鏈燂紝鎵惧埌鎵�鏈夎褰曞ぇ浜庤鏃ユ湡鐨勬棩鏈� + sql = QString("SELECT DISTINCT time_trade FROM stock_day_info WHERE time_trade IS NOT NULL AND time_trade >= '%1' ORDER BY time_trade;").arg(time_trade); + qDebug()<<"sql:"<<sql; + QVector<QString> rank_days; // 瑕佹帓鍚嶇殑鏃ユ湡 + //QSqlQuery que(db); + if(que.exec(sql)){ + while (que.next()) { + rank_days.append(que.value(0).toString()); + } + }else{ + qDebug()<<"鏌ヨ澶辫触"; + return ; + } + qDebug()<<"rank_days size:"<<rank_days.size()<<rank_days.first()<<rank_days.back(); + + // 鏍规嵁鎵惧埌鐨勬墍鏈夊ぇ浜庣殑鏃ユ湡锛屾尐涓繘琛屾帓鍚嶅鐞� + for(int i=0;i<rank_days.size();++i){ + sql = QString("SET @rank := 0; SET @trade_date := '%1'; UPDATE stock_day_info c JOIN ( SELECT id, @rank := @rank + 1 AS rank FROM stock_day_info WHERE time_trade = @trade_date ORDER BY amount DESC ) d ON c.id = d.id SET c.amount_rank = d.rank WHERE c.time_trade = @trade_date;").arg(rank_days.at(i)); + qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")<<sql; + if(que.exec(sql)){ + qDebug()<<"sql update ok"<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"); + }else{ + qDebug()<<"鏌ヨ澶辫触"; + break ; + } + } + qDebug()<<"鏇存柊鎺掑悕瀹屾垚浜�"; } -- Gitblit v1.8.0