From f7dd8173db8f3c2eb5beefa960d86a2bc2144f9f Mon Sep 17 00:00:00 2001 From: wumu <mayi@mayi.com> Date: 星期日, 02 三月 2025 23:58:44 +0800 Subject: [PATCH] 250302 --- historydata.cpp | 485 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 482 insertions(+), 3 deletions(-) diff --git a/historydata.cpp b/historydata.cpp index 970ddd8..2513297 100644 --- a/historydata.cpp +++ b/historydata.cpp @@ -3,12 +3,88 @@ #include <QMessageBox> #include <QDebug> +#include <QDateTime> +#include <QNetworkCookie> +#include <QNetworkReply> +#include <QJsonDocument> +#include <QJsonObject> +#include <QJsonArray> +#include <QDateTime> + +#pragma execution_character_set("utf-8") HistoryData::HistoryData(QWidget *parent) : QMainWindow(parent), ui(new Ui::HistoryData) { ui->setupUi(this); + + // 娉ㄥ唽鍏冪被鍨� + qRegisterMetaType<QVector<QVector<QString>>>("QVector<QVector<QString>>"); + qRegisterMetaType<QVector<QVector<QString>>>("QVector<QVector<QString>> &"); + + // ui鐩稿叧 + ui->dateEdit->setDate(QDate::currentDate()); + ui->dateEdit_2->setDate(QDate::currentDate()); + + m_model = new QStandardItemModel(1,9,this); + + m_customModel = new CustomSortProxyModel; // 鍙嚜瀹氫箟鎺掑簭鐨勬ā鍨� + m_customModel->setSourceModel(m_model); // 璁剧疆婧愭ā鍨� + + //ui->tableView->setModel(m_model); + ui->tableView->setModel(m_customModel); + // 琛ㄦ牸鍒楁帓搴� + ui->tableView->setSortingEnabled(true); + + QStringList labels; + labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"甯傚��(浜�)"<<"娑ㄨ穼骞�"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�"<<"鎹㈡墜鐜�"<<"PE_TTM"; + m_model->setHorizontalHeaderLabels(labels); + + initMySQL(); // 鍒濆鍖朚ySQL + + // 澶勭悊鏁版嵁鐖彇鐨勬搷浣� + // 妯℃嫙娴忚鍣ㄧ殑鍙傛暟 + QString userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"; + m_cookie = "__utma=1.731742638.1647403301.1699341909.1700229030.32; device_id=196eef62baf016c7d95a22752d9bdbab; smidV2=20240414233939e95389ecf7ecd2f4d08524ce770aacd500753aa68e9640320; s=c611de27gr; cookiesu=651726298794778; xq_a_token=220b0abef0fac476d076c9f7a3938b7edac35f48; xqat=220b0abef0fac476d076c9f7a3938b7edac35f48; xq_r_token=1d46f0ed628506486164e5055a4993f9b54b2f4c; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcyOTIxMjc4NCwiY3RtIjoxNzI3NDkwOTU3MjA0LCJjaWQiOiJkOWQwbjRBWnVwIn0.C_GmKEhTaaioDMLWkgZyMXDl4duYEVmsdJHsTi7gbcNz0Tohc-uxHsaw0yBT5k-qmbrJ_RaLMCSxy06v14-R3dwL-MsiKRHxHa5qvQZN4BjEgvPRkqqvPgE_fkPLte8qQOEgd5iVkhr-4mjip0-9WCeXYiH7DygxFOBXGlgoPtpPzAtOTm5TWJmXh0ipDsIZxfNOl8jipXYaIdkv_kqLul5gqiBi5qqnwONDa24Zx-Kvpm8ySWiPFBLzZBqTuRBs4oKAMpSdOiYGLVL7dcSDDZyWqAexmrN4f19hkmd6gBHL4dCczRMDGYc1e98sQtlbZ5lgeEuuM24jjcuwCxsxXQ; u=651726298794778; Hm_lvt_1db88642e346389874251b5a1eded6e3=1727099939,1727251802,1727488707,1727491020; HMACCOUNT=1628106D67895387; acw_tc=2760828017275244258732552e9880f861be6db0c40facbdd5f223490decc2; acw_sc__v2=66f7ee8290dc3f63112948801ef331b8c97ccb35; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1727524485; .thumbcache_f24b8bbe5a5934237bbc0eda20c1b6e7=t00N841S/BEpxTGOoJrbm0blWik12om0ew/whcq/V2DNtyEA8um7J+yzeGOli+6iP/TrvrH0YKH2kHlsmDb5EQ%3D%3D; ssxmod_itna=YqAOBKYve+x0ODfxBcDB4DKM7RtAA4454DkDIEC+GAqGNK3DZDiqAPGhDC8RzeL4Ko7+e2aeQvSeopd5pYDk0Ge5TB0PIjaIDB3DEx06TCCQxiiSDCeDIDWeDiDG4Gm4qGtDpxG=DjDytZ9TtDm4GWGqDmDGYBWqDgDYQDGwIXD7QDIqtW07tQDDNQKpAKDiYeHlL5uMRMtOrK7DtDjdTD/3+kZCbCcPwVFeFO=nPcDB6wxBjZRq00Un+g4mNqLYf4IDAxQuYKtgheYYoAfDhTKhhLSGx4tGY4+GDKSiMS2DDAIvdKeD; ssxmod_itna2=YqAOBKYve+x0ODfxBcDB4DKM7RtAA4454DkDIEC+GDA69mqD/YttDFhxMltFKApT7bCMH+bytp7GQQyCbBWukeAF3+jxeN2wLjbQAFcdwbeNeoohjQ4qtEnLg4TKyX2LqVL=CGaV=GqZZqbDby8DFnFbgWiZEH8zoBzBCbzqWeqwoPq7/TpL=gIRY8sVhEpnWWHQU8sz+S8=+8oRerHq0wtQnSzyQDK7Dmvr3a+VY7fezRmxKF=bDeqexYUbuuzw2eR3In9evW6tzHbQY6vp=AIOUc9l6vc0vOl9plD6D07zGGQ41uxpii2Y5s7KvYQDWGYExD7=DYKKeD=="; + QByteArray cookieByte = m_cookie.toUtf8(); + QList<QNetworkCookie> list; + list.push_back(QNetworkCookie(cookieByte)); + + QVariant var; + var.setValue(list); + // 璁剧疆瑕佽闂殑缃戝潃 + m_request.setUrl(QUrl("https://xueqiu.com/?md5__1038=QqGxcDnDyiitnD05o4%2Br%3Di%3De0KDtYqCDRWOoD")); + // 璁剧疆璇锋眰澶达紝鐢ㄦ埛浠g悊锛岀敤鏉ユā鎷熸祻瑙堝櫒 + m_request.setHeader(QNetworkRequest::UserAgentHeader,userAgent); + // 璁剧疆cookie + //m_request.setHeader(QNetworkRequest::CookieHeader, var); + + // 鏌ョ湅manager閮芥敮鎸佸摢浜涘崗璁� + qDebug()<<"鍘嗗彶鍒嗘瀽--鏀寔鐨勫崗璁�:"<<m_manager.supportedSchemes(); + // 鍏宠仈淇″彿妲斤紝褰撹姹傜鐞嗗璞″畬鍏ㄦ墦寮�缃戦〉涔嬪悗锛屼細灏嗘暟鎹粰妲藉嚱鏁板鐞� + connect(&m_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(showAplyData(QNetworkReply*))); + + // 鍘昏姹傞椤� + m_manager.get(m_request); + + // 鑲$エ姹犵浉鍏� + m_poolModel = new QStandardItemModel(1,9,this); + + QStringList poolLabel; + poolLabel<<"id"<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鐩戞帶涔板叆浠锋牸"<<"鐩戞帶璁板綍鏃堕棿"<<"褰撳墠浠锋牸"<<"鐩堜簭鐧惧垎姣�"<<"鐩戞帶鍗栧嚭浠锋牸"<<"鐩戞帶鍗栧嚭鏃堕棿"<<"绛栫暐鍛ㄦ湡"; + m_poolModel->setHorizontalHeaderLabels(poolLabel); + ui->tableView_2->setModel(m_poolModel); + + + // 鑲$エ姹犲畾鏃跺埛鏂� + 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() @@ -16,11 +92,10 @@ delete ui; } -void HistoryData::on_pushButton_clicked() +void HistoryData::initMySQL() { - //娣诲姞涓�涓暟鎹簱 - QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL"); //鎷彿鍐呰鍐欏嚭鏁版嵁搴撶殑绫诲瀷 + db=QSqlDatabase::addDatabase("QMYSQL"); //鎷彿鍐呰鍐欏嚭鏁版嵁搴撶殑绫诲瀷 //璁剧疆鏁版嵁搴� db.setHostName("127.0.0.1"); //璁剧疆鏁版嵁搴撶殑涓绘満ip //璁剧疆鏁版嵁搴撶殑鐢ㄦ埛鍚� @@ -36,3 +111,407 @@ qDebug()<<"mysql conn ok"; } } + +void HistoryData::on_pushButton_clicked() +{ + + QSqlQuery que(db); + QString sql = "select * from stock_day_info"; + if(que.exec(sql)){ + qDebug()<<"select ok"; + }else{ + qDebug()<<"select fail"<<que.lastError().text(); + } +} + +void HistoryData::on_pushButton_update_clicked() +{ + // 鎶�5000鏀偂绁ㄦ尐涓幏鍙栧埌锛岀劧鍚庤繘琛屾暟鎹繚瀛橈紝瀛樺埌琛ㄦ牸涓� + // 鏇存柊鐨勬椂鍊欙紝榛樿鏀寔10骞寸殑鏁版嵁鏌ヨ + if(m_days <= 0) return; + + QString time_tar=QString::number(QDateTime::currentMSecsSinceEpoch()); + QString dayCnt=QString::number(m_days); + QString type = "day"; // day week month + for(auto code:m_codeNames.keys()){ + QString url = QString("https://stock.xueqiu.com/v5/stock/chart/kline.json?symbol=%1&begin=%2&period=%3&type=before&count=-%4&indicator=kline,pe,market_capital,ma").arg(code) + .arg(time_tar).arg(type).arg(dayCnt); + //qDebug()<<"url:"<<url; + // 鍙戣捣璇锋眰 鐖彇鏁版嵁 + m_request.setUrl(QUrl(url)); + m_manager.get(m_request); + //break; // 娴嬭瘯鐢� + + } + // 鏇存柊鏃堕棿 + QString curDate = QDate::currentDate().toString("yyyy-MM-dd"); + QString sql = QString("insert into days_info (log_time) values ('%1')").arg(curDate); + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"update log time ok:"<<curDate; + }else{ + qDebug()<<"update log time fail:"<<curDate; + } + +} + +void HistoryData::putCodeNames(QMap<QString, QString> &codeNames) +{ + m_codeNames = codeNames; + qDebug()<<"size:"<<m_codeNames.size(); +} + +void HistoryData::showAplyData(QNetworkReply *reply) +{ + qDebug()<<"history鏀跺埌鍝嶅簲"; + // 灏嗗搷搴旂殑鏁版嵁锛屼竴鎶婅鍙栧畬锛屾斁鍒板瓧鑺傛暟缁勯噷闈㈡潵澶勭悊 + QByteArray buffer = reply->readAll(); + + // 灏嗘暟鎹啓鍒版枃浠朵腑锛屾柟渚胯瀵熸暟鎹唴瀹� +// QFile file("data_history.txt"); +// file.open(QIODevice::ReadWrite | QIODevice::Text); +// QTextStream out(&file); +// out << buffer << endl; +// file.close(); + + // 涓嬮潰浣跨敤JSON杩涜鏁版嵁澶勭悊 + if(reply->url().toString().indexOf("https://xueqiu.com/") != -1){ + qDebug()<<"鍙戠幇棣栭〉url"; + qDebug()<<buffer; + + }else if(reply->url().toString().indexOf("https://stock.xueqiu.com/v5/stock/chart/kline.json") != -1){ + qDebug()<<"鏌ョ湅涓偂鎯呭喌:"; + getOneStock(buffer); + + }else if(reply->url().toString().indexOf("https://hqm.stock.sohu.com/getqjson") != -1){ + qDebug()<<"鑾峰彇鑲$エ姹犱釜鑲′环鏍�"; + getPoolStock(buffer); + } +} + +/* +{"data":{"symbol":"SZ301633","column": +["timestamp","volume","open","high","low","close","chg","percent","turnoverrate","amount","volume_post","amount_post","ma5","ma10","ma20","ma30","pe","market_capital"], +"item":[[1730908800000,10787401,187.0,187.0,133.1,137.13,99.19,261.44,77.5,1.608757505E9,1300,178269.0,null,null,null,null,67.0447,7.6353984E9], +[1730995200000,8348116,145.8,158.5,130.06,132.9,-4.23,-3.08,59.97,1.19303472E9,1000,132900.0,null,null,null,null,64.9765,7.399872E9], +*/ +void HistoryData::getOneStock(QByteArray &buffer) +{ + + QJsonDocument jd = QJsonDocument::fromJson(buffer); + if(jd.isObject()){ + QJsonObject jObject = jd.object(); + QJsonArray jArr = jObject.value("data").toObject().value("item").toArray(); // 閫氳繃閿�煎鍙栧�� + int cnt = jArr.count(); + qDebug()<<"鏁扮粍size:"<<cnt; + QString symbol = jObject.value("data").toObject().value("symbol").toString(); + QString code = symbol; // 鑲$エ浠e彿 + QString name = m_codeNames[code]; + qDebug()<<"鍘嗗彶:"<<code<<symbol; + + // 浠ユ壒閲忓啓鍏ョ殑鏂瑰紡鏉ヨ幏鍙栧骞存暟鎹� + QString sql = "insert into stock_day_info (name,code,market_capital,percent,open,high,low,close,amount,volume,turnover_rate,pe_ttm,time_trade) values "; + //qDebug()<<"sql 1:"<<sql; + for(int i=0;i<cnt;++i){ + qint64 timestamp = jArr.at(i).toArray().at(0).toVariant().toLongLong(); + double open = jArr.at(i).toArray().at(2).toVariant().toDouble(); + double high = jArr.at(i).toArray().at(3).toVariant().toDouble(); + double low = jArr.at(i).toArray().at(4).toVariant().toDouble(); + double close = jArr.at(i).toArray().at(5).toVariant().toDouble(); + double percent = jArr.at(i).toArray().at(7).toVariant().toDouble(); + double turnoverrate = jArr.at(i).toArray().at(8).toVariant().toDouble(); + double amount = jArr.at(i).toArray().at(9).toVariant().toDouble(); + double pe_ttm = jArr.at(i).toArray().at(16).toVariant().toDouble(); + double market_capital = jArr.at(i).toArray().at(17).toVariant().toDouble(); + long long volume = jArr.at(i).toArray().at(1).toVariant().toLongLong()/100; + + //long long amount = jArr.at(i).toArray().at(9).toVariant().toLongLong()/100000000; // 浜� + QString curDateTime = QDateTime::fromMSecsSinceEpoch(timestamp).toString("yyyy-MM-dd"); + //qDebug()<<curDateTime<<close<<volume<<amount; + + // 澶勭悊鏁版嵁淇濆瓨鍒版ā鍨嬩腑 + QString vals = QString("('%1','%2',%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,'%13')").arg(name).arg(code).arg(QString::number(market_capital)) + .arg(QString::number(percent)).arg(QString::number(open)).arg(QString::number(high)).arg(QString::number(low)). + arg(QString::number(close)).arg(QString::number(amount)).arg(QString::number(volume)).arg(QString::number(turnoverrate)) + .arg(QString::number(pe_ttm)).arg(curDateTime); + if(i != cnt - 1){ + vals.append(","); + } + sql.append(vals); + //qDebug()<<"sql 3:"<<sql; + + } + qDebug()<<"over:"<<sql.size(); + //qDebug()<<"sql 2:"<<sql; // 澶ぇ浜� 鏄剧ず涓嶅嚭鏉� + + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"insert ok"; + }else{ + qDebug()<<"insert fail"<<que.lastError().text(); + } + } + +} + +/* + * {"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() +{ + // 鎻愮ず鏌ヨ绛夊緟 + ui->statusbar->showMessage("鏌ヨ涓�...璇疯�愬績绛夊緟缁撴灉..."); + + 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); + qDebug()<<"sql:"<<sql; + + m_modelDatas.clear(); // 娓呯┖鏁扮粍涓殑鏁版嵁 + + qint64 tt = QDateTime::currentMSecsSinceEpoch(); + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"select ok"; + m_model->setRowCount(0); // 閲嶇疆妯″瀷琛屾暟 + int rows = 0; + while (que.next()) { + QString name = que.value(0).toString(); + QString code = que.value(1).toString(); + QString market_capital = QString::number(que.value(2).toDouble()/100000000); + QString percent = que.value(3).toString(); + QString close = que.value(4).toString(); + QString amount = QString::number(que.value(5).toDouble()/100000000); + QString volume = que.value(6).toString(); + QString turnover_rate = que.value(7).toString(); + QString pe_ttm = que.value(8).toString(); + + m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm}); + + QList<QStandardItem*> items; + items.append(new QStandardItem(name)); + items.append(new QStandardItem(code)); + items.append(new QStandardItem(market_capital)); + //items.append(new QStandardItem(percent)); + QStandardItem *percentItem = new QStandardItem(percent); + if(percent.toDouble() > 0){ + percentItem->setData(QColor("red"),Qt::DecorationRole); // 娣诲姞涓�涓楗扮殑棰滆壊涓虹孩鑹� + percentItem->setData(QColor("red"),Qt::TextColorRole); // 灏嗗瓧浣撻鑹茶缃负绾㈣壊 + items.at(0)->setData(QColor("red"),Qt::TextColorRole); // 灏嗚偂绁ㄥ悕瀛楄缃负绾㈣壊 + } + else if(percent.toDouble() < 0){ + percentItem->setData(QColor("green"),Qt::BackgroundColorRole); + items.at(0)->setData(QColor("green"),Qt::TextColorRole); + } + items.append(percentItem); + + items.append(new QStandardItem(close)); + items.append(new QStandardItem(amount)); + items.append(new QStandardItem(volume)); + items.append(new QStandardItem(turnover_rate)); + items.append(new QStandardItem(pe_ttm)); + m_model->appendRow(items); + rows++; + } + qDebug()<<"鏌ヨ鍒拌鏁�:"<<rows; + + }else{ + qDebug()<<"select fail"<<que.lastError().text(); + } + // 鏈�鍚庢彁绀哄畬鎴� + qint64 need = QDateTime::currentMSecsSinceEpoch()-tt; + ui->statusbar->showMessage(QString("鑰楁椂:%1 姣,鏌ヨ瀹屾垚.").arg(QString::number(need)),10*1000); + ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + //emit sendHistoryModel(m_modelDatas); // 缁欎俊鎭睍绀哄彂妯″瀷 + + ui->textBrowser->append(QString("鏌ヨ鏃ユ湡:%1 鑰楁椂: %2 姣 鏌ュ埌鏉℃暟:%3").arg(searchTime).arg(QString::number(need)).arg(QString::number(m_model->rowCount()))); +} + +void HistoryData::on_pushButton_2_clicked() +{ + //emit sendHistoryModel(m_modelDatas); // 缁欎俊鎭睍绀哄彂妯″瀷 + emit sendHistoryModel(m_model); +} + +void HistoryData::on_pushButton_addStock_clicked() +{ + QString name = ui->lineEdit->text(); + QString code = ui->lineEdit_2->text(); + QString price = ui->lineEdit_3->text(); + QString in_date = ui->dateEdit_2->text(); + 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,type) values('%1','%2',%3,'%4','%5')").arg(name).arg(code).arg(price).arg(in_date).arg(type); + qDebug()<<"sql:"<<sql; + + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"insert ok"; + poolTimerSlot(); // 绔嬮┈鍒锋柊鑲$エ姹犵殑妯″瀷锛屽埛鏂拌鍥� + }else{ + qDebug()<<"insert fail"; + } +} + +void HistoryData::poolTimerSlot() +{ + QString sql = "select * from stock_pool where state=1"; + QSqlQuery que(db); + if(que.exec(sql)){ + qDebug()<<"select ok:"<<QDateTime::currentDateTime(); + m_poolModel->setRowCount(0); + while (que.next()) { + QList<QStandardItem*> items; + for(int i=0;i<10;++i){ + QString item = que.value(i).toString(); + QStandardItem *it = new QStandardItem(item); + if(i==6){ + if(item.toDouble() > 0){ + it->setData(QColor("red"),Qt::DecorationRole); // 娣诲姞涓�涓楗扮殑棰滆壊涓虹孩鑹� + it->setData(QColor("red"),Qt::TextColorRole); // 灏嗗瓧浣撻鑹茶缃负绾㈣壊 + items.at(1)->setData(QColor("red"),Qt::TextColorRole); // 灏嗚偂绁ㄥ悕瀛楄缃负绾㈣壊 + }else if(item.toDouble() < 0){ + it->setData(QColor("green"),Qt::BackgroundColorRole); + items.at(1)->setData(QColor("green"),Qt::TextColorRole); + } + } + items.append(it); + } + m_poolModel->appendRow(items); // 鏁磋娣诲姞 鏁堢巼鏇撮珮 + + } + }else{ + qDebug()<<"select fail"; + } + m_poolTimer->setInterval(60*1000); +} + +void HistoryData::on_checkBox_clicked() +{ + QString dt = "2025-02-10"; + QString sql = "select log_time from days_info order by log_time desc"; + QSqlQuery que(db); + if(que.exec(sql)){ + if (que.next()) { + dt = que.value(0).toString(); + }else{ + qDebug()<<"鏌ヨ缁撴灉闆嗕负绌�"; + return; + } + }else{ + qDebug()<<"鏌ヨ澶辫触"; + return ; + } + + if(ui->checkBox->isChecked()){ + ui->pushButton_update->setEnabled(true); + }else{ + ui->pushButton_update->setEnabled(false); + } + + + + QDate d1 = QDate::fromString(dt,"yyyy-MM-dd"); + QDate d2 = QDate::currentDate(); + int days = 0; // 缁忚繃浜嗗灏戜釜鍛ㄥ唴鐨勫ぉ鏁� + for(QDate begin = d1.addDays(1);begin <= d2;begin = begin.addDays(1)){ + if(begin.dayOfWeek() != Qt::Saturday && begin.dayOfWeek() != Qt::Sunday){ + days++; + } + } + 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(); + } +} -- Gitblit v1.8.0