From f7dd8173db8f3c2eb5beefa960d86a2bc2144f9f Mon Sep 17 00:00:00 2001 From: wumu <mayi@mayi.com> Date: 星期日, 02 三月 2025 23:58:44 +0800 Subject: [PATCH] 250302 --- stock_plan_250302_no_data.sql | 67 +++++++++++++ stock_plan_250302_2_datas.sql | 68 +++++++++++++ historydata.h | 6 + historydata.cpp | 108 ++++++++++++++++++++ historydata.ui | 36 +++++++ 5 files changed, 281 insertions(+), 4 deletions(-) diff --git a/historydata.cpp b/historydata.cpp index e066017..2513297 100644 --- a/historydata.cpp +++ b/historydata.cpp @@ -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); } } @@ -245,6 +252,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() @@ -329,9 +395,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 +419,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 +479,39 @@ 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(); + } } diff --git a/historydata.h b/historydata.h index cda1807..fbc7551 100644 --- a/historydata.h +++ b/historydata.h @@ -26,6 +26,7 @@ void initMySQL(); + void getPoolStock(QByteArray &buffer); signals: void sendHistoryModel(QVector<QVector<QString>> &); // 灏嗘ā鍨嬪彂缁欎俊鎭睍绀� void sendHistoryModel(QStandardItemModel *); // 灏嗘ā鍨嬪彂缁欎俊鎭睍绀� @@ -50,6 +51,10 @@ void on_checkBox_clicked(); + void getLastCloseSlot(); + + void on_checkBox_updatePoolClose_clicked(); + private: Ui::HistoryData *ui; @@ -68,6 +73,7 @@ QVector<QVector<QString>> m_modelDatas; // 琛屽垪瀛樺偍 QTimer *m_poolTimer; // 鍒锋柊鑲$エ姹犵殑瀹氭椂鍣� + QTimer *m_getPoolCloseTimer; // 鑾峰彇鑲$エ姹犳渶鏂颁环鏍肩殑瀹氭椂鍣� int m_days=0; // 涓婃鏇存柊鍒扮幇鍦ㄧ粡杩囩殑澶╂暟 }; diff --git a/historydata.ui b/historydata.ui index 04be64a..a8c781c 100644 --- a/historydata.ui +++ b/historydata.ui @@ -47,6 +47,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="checkBox_updatePoolClose"> + <property name="text"> + <string>鏇存柊鑲$エ姹犱环鏍�</string> + </property> + </widget> + </item> </layout> </item> <item row="1" column="0"> @@ -134,6 +141,35 @@ </widget> </item> <item> + <widget class="QComboBox" name="comboBox"> + <item> + <property name="text"> + <string>week</string> + </property> + </item> + <item> + <property name="text"> + <string>month</string> + </property> + </item> + <item> + <property name="text"> + <string>day</string> + </property> + </item> + <item> + <property name="text"> + <string>quarter</string> + </property> + </item> + <item> + <property name="text"> + <string>year</string> + </property> + </item> + </widget> + </item> + <item> <widget class="QPushButton" name="pushButton_addStock"> <property name="text"> <string>娣诲姞</string> diff --git a/stock_plan_250302_2_datas.sql b/stock_plan_250302_2_datas.sql new file mode 100644 index 0000000..c0d09d3 --- /dev/null +++ b/stock_plan_250302_2_datas.sql @@ -0,0 +1,68 @@ +-- -------------------------------------------------------- +-- 涓绘満: 127.0.0.1 +-- 鏈嶅姟鍣ㄧ増鏈�: 5.6.35-log - MySQL Community Server (GPL) +-- 鏈嶅姟鍣ㄦ搷浣滅郴缁�: Win64 +-- HeidiSQL 鐗堟湰: 9.5.0.5196 +-- -------------------------------------------------------- + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET NAMES utf8 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; + + +-- 瀵煎嚭 stock_plan 鐨勬暟鎹簱缁撴瀯 +CREATE DATABASE IF NOT EXISTS `stock_plan` /*!40100 DEFAULT CHARACTER SET utf8 */; +USE `stock_plan`; + +-- 瀵煎嚭 琛� stock_plan.days_info 缁撴瀯 +CREATE TABLE IF NOT EXISTS `days_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `log_time` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='璁板綍姣忔鏇存柊鐨勬椂闂磋妭鐐癸紝涓昏鏄负浜嗘柟渚垮悗缁殑鑺傜偣'; + +-- 姝e湪瀵煎嚭琛� stock_plan.days_info 鐨勬暟鎹細~6 rows (澶х害) +/*!40000 ALTER TABLE `days_info` DISABLE KEYS */; +INSERT INTO `days_info` (`id`, `log_time`) VALUES + (1, '2025-02-12'), + (2, '2025-02-10'), + (3, '2025-02-09'), + (4, '2025-02-08'), + (5, '2025-02-11'), + (6, '2025-02-26'), + (7, '2025-02-27'), + (8, '2025-02-28'); +/*!40000 ALTER TABLE `days_info` ENABLE KEYS */; + +-- 瀵煎嚭 琛� stock_plan.stock_pool 缁撴瀯 +CREATE TABLE IF NOT EXISTS `stock_pool` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL COMMENT '鑲$エ鍚�', + `code` varchar(50) DEFAULT NULL COMMENT '鑲$エ浠e彿', + `in_price` double DEFAULT NULL COMMENT '鍒楀叆鐩戞帶鐨勪环鏍�', + `in_time` varchar(50) DEFAULT NULL COMMENT '鍒楀叆鐩戞帶鐨勬椂闂�', + `cur_price` double DEFAULT NULL COMMENT '褰撳墠鏀剁洏浠�', + `percent` double DEFAULT NULL COMMENT '鐩堜簭鐧惧垎姣�', + `out_price` double DEFAULT NULL COMMENT '鍗栧嚭鐨勪环鏍�', + `out_time` varchar(50) DEFAULT NULL COMMENT '鍗栧嚭鐨勬椂闂�', + `type` varchar(50) NOT NULL DEFAULT 'week' COMMENT '鍛ㄦ湡绫诲瀷锛宒ay锛寃eek,month,quarter,year', + `state` int(11) NOT NULL DEFAULT '1' COMMENT '鐘舵�� 1=鐩戞祴涓紝2=鐩戞祴缁撴潫', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='鑲$エ姹狅紝鐢ㄤ簬鐩戝惉'; + +-- 姝e湪瀵煎嚭琛� stock_plan.stock_pool 鐨勬暟鎹細~6 rows (澶х害) +/*!40000 ALTER TABLE `stock_pool` DISABLE KEYS */; +INSERT INTO `stock_pool` (`id`, `name`, `code`, `in_price`, `in_time`, `cur_price`, `percent`, `out_price`, `out_time`, `type`, `state`) VALUES + (1, '榫欓煹鑲′唤', 'SH603729', 15.91, '2000-01-01', 15.5, -2.5769956002514194, NULL, NULL, 'week', 1), + (2, '榫欒吘鍏夌數', 'SH688055', 3.78, '2025-02-26', 3.88, 2.645502645502651, 3.88, '2025-02-26', 'month', 1), + (3, '娣辨杈続', 'SZ000032', 29.25, '2025-02-27', 26.33, -9.982905982905987, NULL, NULL, 'month', 1), + (4, '鑸敠绉戞妧', 'SZ000818', 32.7, '2025-02-27', 31.45, -3.822629969418967, NULL, NULL, 'month', 1), + (5, '娣变俊鏈�', 'SZ300454', 109.9, '2025-02-27', 102.06, -7.133757961783438, NULL, NULL, 'month', 1), + (6, '鍗畞鍋ュ悍', 'SZ300253', 11.87, '2025-02-27', 11.03, -7.076663858466725, NULL, NULL, 'month', 1); +/*!40000 ALTER TABLE `stock_pool` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; diff --git a/stock_plan_250302_no_data.sql b/stock_plan_250302_no_data.sql new file mode 100644 index 0000000..57ba59f --- /dev/null +++ b/stock_plan_250302_no_data.sql @@ -0,0 +1,67 @@ +-- -------------------------------------------------------- +-- 涓绘満: 127.0.0.1 +-- 鏈嶅姟鍣ㄧ増鏈�: 5.6.35-log - MySQL Community Server (GPL) +-- 鏈嶅姟鍣ㄦ搷浣滅郴缁�: Win64 +-- HeidiSQL 鐗堟湰: 9.5.0.5196 +-- -------------------------------------------------------- + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET NAMES utf8 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; + + +-- 瀵煎嚭 stock_plan 鐨勬暟鎹簱缁撴瀯 +CREATE DATABASE IF NOT EXISTS `stock_plan` /*!40100 DEFAULT CHARACTER SET utf8 */; +USE `stock_plan`; + +-- 瀵煎嚭 琛� stock_plan.days_info 缁撴瀯 +CREATE TABLE IF NOT EXISTS `days_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `log_time` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='璁板綍姣忔鏇存柊鐨勬椂闂磋妭鐐癸紝涓昏鏄负浜嗘柟渚垮悗缁殑鑺傜偣'; + +-- 鏁版嵁瀵煎嚭琚彇娑堥�夋嫨銆� +-- 瀵煎嚭 琛� stock_plan.stock_day_info 缁撴瀯 +CREATE TABLE IF NOT EXISTS `stock_day_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL COMMENT '鑲$エ鍚嶅瓧', + `code` varchar(50) DEFAULT NULL COMMENT '鑲$エ浠e彿', + `market_capital` double DEFAULT NULL COMMENT '鎬诲競鍊�', + `market_capital_float` double DEFAULT NULL COMMENT '娴侀�氬競鍊�', + `percent` double DEFAULT NULL COMMENT '娑ㄨ穼骞�', + `open` double DEFAULT NULL COMMENT '寮�鐩樹环', + `high` double DEFAULT NULL COMMENT '鏈�楂樹环', + `low` double DEFAULT NULL COMMENT '鏈�浣庝环', + `close` double DEFAULT NULL COMMENT '鏀剁洏浠�', + `amount` bigint(20) DEFAULT NULL COMMENT '鎴愪氦棰�', + `volume` bigint(20) DEFAULT NULL COMMENT '鎴愪氦閲�', + `turnover_rate` double DEFAULT NULL COMMENT '鎹㈡墜鐜�', + `pe_ttm` double DEFAULT NULL COMMENT '甯傜泩鐜�', + `time_trade` varchar(50) DEFAULT NULL COMMENT '浜ゆ槗鏃堕棿', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10368475 DEFAULT CHARSET=utf8 COMMENT='姣忔棩琛屾儏淇℃伅,鐢ㄤ簬澶勭悊姣忓ぉ浜ゆ槗鎺掑悕鐨�'; + +-- 鏁版嵁瀵煎嚭琚彇娑堥�夋嫨銆� +-- 瀵煎嚭 琛� stock_plan.stock_pool 缁撴瀯 +CREATE TABLE IF NOT EXISTS `stock_pool` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) DEFAULT NULL COMMENT '鑲$エ鍚�', + `code` varchar(50) DEFAULT NULL COMMENT '鑲$エ浠e彿', + `in_price` double DEFAULT NULL COMMENT '鍒楀叆鐩戞帶鐨勪环鏍�', + `in_time` varchar(50) DEFAULT NULL COMMENT '鍒楀叆鐩戞帶鐨勬椂闂�', + `cur_price` double DEFAULT NULL COMMENT '褰撳墠鏀剁洏浠�', + `percent` double DEFAULT NULL COMMENT '鐩堜簭鐧惧垎姣�', + `out_price` double DEFAULT NULL COMMENT '鍗栧嚭鐨勪环鏍�', + `out_time` varchar(50) DEFAULT NULL COMMENT '鍗栧嚭鐨勬椂闂�', + `type` varchar(50) NOT NULL DEFAULT 'week' COMMENT '鍛ㄦ湡绫诲瀷锛宒ay锛寃eek,month,quarter,year', + `state` int(11) NOT NULL DEFAULT '1' COMMENT '鐘舵�� 1=鐩戞祴涓紝2=鐩戞祴缁撴潫', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='鑲$エ姹狅紝鐢ㄤ簬鐩戝惉'; + +-- 鏁版嵁瀵煎嚭琚彇娑堥�夋嫨銆� +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -- Gitblit v1.8.0