From 5a5fa5ab4c4f1af0d1aea6f4f09e7a1bb165bad4 Mon Sep 17 00:00:00 2001
From: wumu <mayi@mayi.com>
Date: 星期三, 06 八月 2025 23:34:13 +0800
Subject: [PATCH] 250806

---
 separateanalysis.ui  |   98 ++++++++++++++++
 clientmainwindow.h   |    2 
 clientmainwindow.cpp |    4 
 getstocklist.cpp     |    4 
 separateanalysis.cpp |  144 ++++++++++++++++++++++++
 separateanalysis.h   |   34 +++++
 historydata.cpp      |   12 +
 stock_plan.pro       |    9 +
 8 files changed, 297 insertions(+), 10 deletions(-)

diff --git a/clientmainwindow.cpp b/clientmainwindow.cpp
index 0cd291c..2388166 100644
--- a/clientmainwindow.cpp
+++ b/clientmainwindow.cpp
@@ -48,6 +48,9 @@
     m_agileStrategy = new AgileStrategy(this);
     ui->tabWidget->addTab(m_agileStrategy,"鐏靛姩绛栫暐");
 
+    m_separateAnalysis = new SeparateAnalysis(this);
+    ui->tabWidget->addTab(m_separateAnalysis,"涓偂鍒嗘瀽");
+
 
     // 鍏宠仈涓�涓�2涓晫闈㈢殑淇″彿鍜屾Ы锛岀敤鏉ヤ紶閫掑浘琛ㄦ墍闇�鐨勬暟鎹強灞曠ず
     connect(m_getStockList,SIGNAL(sendChartData(QLineSeries*)),m_stockPolicy,SLOT(showNewStockData(QLineSeries*)));
@@ -63,4 +66,5 @@
     connect(m_history,SIGNAL(sendHistoryModel(QVector<QVector<QString>> &)),m_getStockList,SLOT(showHistoryModelData(QVector<QVector<QString>> &)));
     connect(m_history,SIGNAL(sendHistoryModel(QStandardItemModel*)),m_getStockList,SLOT(showHistoryModelData(QStandardItemModel*)));
 
+    //connect(m_getStockList,SIGNAL(sendCodeNames(QMap<QString,QString>&)),m_separateAnalysis,SLOT(setNamesToCombo(QMap<QString,QString>&)));
 }
diff --git a/clientmainwindow.h b/clientmainwindow.h
index b820070..d305686 100644
--- a/clientmainwindow.h
+++ b/clientmainwindow.h
@@ -10,6 +10,7 @@
 #include "historydata.h"
 #include "deepseekmainwindow.h"
 #include "agilestrategy.h" // 鐏靛姩绛栫暐
+#include "separateanalysis.h"
 
 
 namespace Ui {
@@ -36,6 +37,7 @@
     HistoryData *m_history; // 鍘嗗彶鐩稿叧
     DeepSeekMainWindow *m_deepSeek; // 涓偂娣辨悳
     AgileStrategy *m_agileStrategy; // 鐏靛姩绛栫暐
+    SeparateAnalysis *m_separateAnalysis; // 涓偂鍒嗘瀽 鍗曠嫭鍒嗘瀽
 
 
 };
diff --git a/getstocklist.cpp b/getstocklist.cpp
index 8bc6012..4350c64 100644
--- a/getstocklist.cpp
+++ b/getstocklist.cpp
@@ -45,9 +45,9 @@
 
     // 妯″瀷鍙婅〃鏍艰鍥�
     m_model = new QStandardItemModel(this);
-    m_model->setColumnCount(10); // 璁剧疆10鍒�
+    m_model->setColumnCount(11); // 璁剧疆11鍒�
     QStringList labels;
-    labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鎬诲競鍊�(浜�)"<<"娴侀�氬競鍊�(浜�)"<<"娑ㄨ穼骞�(%)"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�(鎵�)"<<"鎹㈡墜鐜�(%)"<<"甯傜泩鐜�";
+    labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鎬诲競鍊�(浜�)"<<"娴侀�氬競鍊�(浜�)"<<"娑ㄨ穼骞�(%)"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�(鎵�)"<<"鎹㈡墜鐜�(%)"<<"甯傜泩鐜�"<<"浜ゆ槗棰濇帓鍚�";
     m_model->setHorizontalHeaderLabels(labels); // 璁剧疆妯″瀷鐨勫垪鏍囩鍚�
     m_customModel = new CustomSortProxyModel;
     m_customModel->setSourceModel(m_model); // 璁剧疆婧愭ā鍨�
diff --git a/historydata.cpp b/historydata.cpp
index b2c83c2..719f8aa 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
@@ -320,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(); // 娓呯┖鏁扮粍涓殑鏁版嵁
@@ -341,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));
@@ -366,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++;
         }
@@ -537,8 +539,8 @@
 
     QString time_trade = "2025-06-01";
     if(log_days.size() > 1){
-        //time_trade = log_days.at(log_days.size() - 2); // 鏈熬鍊掓暟绗簩涓洿鏂�
-        time_trade = log_days.first(); // 浠庣涓�涓紑濮嬫洿鏂�
+        time_trade = log_days.at(log_days.size() - 2); // 鏈熬鍊掓暟绗簩涓洿鏂�
+        //time_trade = log_days.first(); // 浠庣涓�涓紑濮嬫洿鏂�
     }
     qDebug()<<"time_trade:"<<time_trade;
 
diff --git a/separateanalysis.cpp b/separateanalysis.cpp
new file mode 100644
index 0000000..c1f749a
--- /dev/null
+++ b/separateanalysis.cpp
@@ -0,0 +1,144 @@
+锘�#include "separateanalysis.h"
+#include "ui_separateanalysis.h"
+
+#include <QDateTime>
+#include <QMessageBox>
+#include <QSqlQuery>
+#include <QDebug>
+#include <QSqlError>
+
+SeparateAnalysis::SeparateAnalysis(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::SeparateAnalysis)
+{
+    ui->setupUi(this);
+
+    m_model = new QStandardItemModel(this);
+    m_model->setColumnCount(11); // 璁剧疆10鍒�
+    QStringList labels;
+    labels<<"鑲$エ鍚嶅瓧"<<"鑲$エ浠e彿"<<"鎬诲競鍊�(浜�)"<<"娑ㄨ穼骞�(%)"<<"鏀剁洏浠�"<<"鎴愪氦棰�(浜�)"<<"鎴愪氦閲�(鎵�)"<<"鎹㈡墜鐜�(%)"<<"甯傜泩鐜�"<<"浜ゆ槗棰濇帓鍚�"<<"浜ゆ槗鏃堕棿"<<"鎺掑悕瓒嬪娍鍙樺寲";
+    m_model->setHorizontalHeaderLabels(labels); // 璁剧疆妯″瀷鐨勫垪鏍囩鍚�
+    ui->tableView->setModel(m_model);
+
+    initMySQL(); // 鍒濆鍖栨暟鎹簱
+}
+
+SeparateAnalysis::~SeparateAnalysis()
+{
+    delete ui;
+}
+
+void SeparateAnalysis::calcRankChange()
+{
+
+}
+
+void SeparateAnalysis::initMySQL()
+{
+    //娣诲姞涓�涓暟鎹簱
+      db=QSqlDatabase::addDatabase("QMYSQL");    //鎷彿鍐呰鍐欏嚭鏁版嵁搴撶殑绫诲瀷
+      //璁剧疆鏁版嵁搴�
+      db.setHostName("127.0.0.1"); //璁剧疆鏁版嵁搴撶殑涓绘満ip
+      //璁剧疆鏁版嵁搴撶殑鐢ㄦ埛鍚�
+      db.setUserName("root");
+      //璁剧疆鏁版嵁搴撶殑瀵嗙爜
+      db.setPassword("root");    //杩欎釜灏辨槸瀹夎MySQL鏃惰缃殑瀵嗙爜
+      //璁剧疆鏁版嵁搴撶殑鍚嶅瓧
+      db.setDatabaseName("stock_plan");
+      //鎵撳紑鏁版嵁搴擄紙宸茬粡瀹夎杩噈ysql椹卞姩浜嗭級
+      if(db.open()==false){
+          QMessageBox::warning(this,"waring",db.lastError().text());
+      }else{
+          qDebug()<<"SeparateAnalysis mysql conn ok";
+      }
+}
+void SeparateAnalysis::on_pushButton_search_clicked()
+{
+    ui->label_status->setText("姝e湪鏌ヨ,璇风◢绛�...");
+    qint64 tt = QDateTime::currentMSecsSinceEpoch();
+    QString name = ui->comboBox_name->currentText();
+    QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank,time_trade from stock_day_info where name = '%1'").arg(name);
+
+    QSqlQuery que(db);
+    int rows = 0;
+    if(que.exec(sql)){
+        qDebug()<<"select ok";
+        m_model->setRowCount(0); // 閲嶇疆妯″瀷琛屾暟
+        //int rows = 0;
+        int rank_val = 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();
+            QString amount_rank = que.value(9).toString();
+            QString time_trade = que.value(10).toString();
+
+            //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));
+            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));
+            items.append(new QStandardItem(amount_rank));
+            items.append(new QStandardItem(time_trade));
+            if(rank_val != 0){
+                double rank_rate = 1 - (amount_rank.toDouble()/rank_val);
+                //items.append(new QStandardItem(QString::number(rank_rate)));
+                rank_val = amount_rank.toInt();
+                QStandardItem * amount_rank_item = new QStandardItem(QString::number(rank_rate));
+                if(rank_rate > 0.9){
+                    amount_rank_item->setData(QColor("red"),Qt::BackgroundColorRole);
+                }
+                items.append(amount_rank_item);
+
+            }
+            if(rank_val == 0 && amount_rank.toInt() != 0){
+                rank_val = amount_rank.toInt();
+            }
+            m_model->appendRow(items);
+            rows++;
+        }
+        qDebug()<<"鏌ヨ鍒拌鏁�:"<<rows;
+
+    }else{
+        qDebug()<<"select fail"<<que.lastError().text();
+    }
+
+    qint64 need = QDateTime::currentMSecsSinceEpoch()-tt;
+    ui->label_status->setText(QString("鑰楁椂:%1 姣,鏌ヨ瀹屾垚.鏉℃暟: %2").arg(QString::number(need)).arg(QString::number(rows)));
+    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
+
+}
+
+void SeparateAnalysis::setNamesToCombo(QMap<QString, QString> &names)
+{
+    // 浼氬崱椤匡紝闇�瑕佺爺绌朵竴涓�
+    ui->comboBox_name->clear();
+    for(auto key:names.values()){
+        ui->comboBox_name->addItem(key);
+    }
+}
diff --git a/separateanalysis.h b/separateanalysis.h
new file mode 100644
index 0000000..0b4e324
--- /dev/null
+++ b/separateanalysis.h
@@ -0,0 +1,34 @@
+锘�#ifndef SEPARATEANALYSIS_H
+#define SEPARATEANALYSIS_H
+
+#include <QMainWindow>
+#include <QSqlDatabase>
+#include <QStandardItemModel>
+
+namespace Ui {
+class SeparateAnalysis;
+}
+
+class SeparateAnalysis : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit SeparateAnalysis(QWidget *parent = 0);
+    ~SeparateAnalysis();
+
+    void calcRankChange(); // 缁熻鎺掑悕鍙樺寲鎯呭喌锛屼富瑕佺粺璁″綋澶╂瘮鍓嶄竴澶╃殑鍙樺寲鎯呭喌锛屽拰1鐨勫樊鍊硷紝杈惧埌0.90+ 璇存槑鍙互涔板叆瑙傚療浜�
+private slots:
+    void on_pushButton_search_clicked();
+    void setNamesToCombo(QMap<QString,QString> &names);
+
+private:
+    Ui::SeparateAnalysis *ui;
+    void initMySQL();
+    QSqlDatabase db;
+
+    QStandardItemModel *m_model;
+
+};
+
+#endif // SEPARATEANALYSIS_H
diff --git a/separateanalysis.ui b/separateanalysis.ui
new file mode 100644
index 0000000..b981af3
--- /dev/null
+++ b/separateanalysis.ui
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SeparateAnalysis</class>
+ <widget class="QMainWindow" name="SeparateAnalysis">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout_2">
+    <item row="0" column="0">
+     <widget class="QGroupBox" name="groupBox">
+      <property name="title">
+       <string>鏌ヨ鏉′欢</string>
+      </property>
+      <layout class="QGridLayout" name="gridLayout">
+       <item row="0" column="0">
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <item>
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>涓偂鍒楄〃:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QComboBox" name="comboBox_name">
+           <property name="editable">
+            <bool>true</bool>
+           </property>
+           <item>
+            <property name="text">
+             <string>闀挎睙鐢靛姏</string>
+            </property>
+           </item>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_search">
+           <property name="text">
+            <string>鏌ヨ</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_status">
+           <property name="text">
+            <string>鏌ヨ鎯呭喌</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="0">
+     <widget class="QTableView" name="tableView"/>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/stock_plan.pro b/stock_plan.pro
index a66bbbe..2e9b583 100644
--- a/stock_plan.pro
+++ b/stock_plan.pro
@@ -36,7 +36,8 @@
     historydata.cpp \
     deepseekmainwindow.cpp \
     bargraphics.cpp \
-    agilestrategy.cpp
+    agilestrategy.cpp \
+    separateanalysis.cpp
 
 HEADERS += \
         clientmainwindow.h \
@@ -50,7 +51,8 @@
     historydata.h \
     deepseekmainwindow.h \
     bargraphics.h \
-    agilestrategy.h
+    agilestrategy.h \
+    separateanalysis.h
 
 FORMS += \
         clientmainwindow.ui \
@@ -61,4 +63,5 @@
     regularinvestment.ui \
     historydata.ui \
     deepseekmainwindow.ui \
-    agilestrategy.ui
+    agilestrategy.ui \
+    separateanalysis.ui

--
Gitblit v1.8.0