From 5f8a4c8d12855caa8d06cfcc5caa5a0601563710 Mon Sep 17 00:00:00 2001
From: wumu <mayi@mayi.com>
Date: 星期四, 30 十月 2025 00:12:13 +0800
Subject: [PATCH] 251030

---
 positionmanagement.cpp |  267 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 265 insertions(+), 2 deletions(-)

diff --git a/positionmanagement.cpp b/positionmanagement.cpp
index 3b76da8..cf69af3 100644
--- a/positionmanagement.cpp
+++ b/positionmanagement.cpp
@@ -1,5 +1,13 @@
 锘�#include "positionmanagement.h"
 #include "ui_positionmanagement.h"
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QComboBox>
+#include <QDebug>
+#include <QMessageBox>
+#include <QDateTime>
+#include <QMessageBox>
 
 PositionManagement::PositionManagement(QWidget *parent):
     QMainWindow(parent),
@@ -12,8 +20,9 @@
     m_modelMid = new QStandardItemModel(this);
     m_modelLong = new QStandardItemModel(this);
 
-    QStringList labels;
-    labels<<"id"<<"鑲$エ"<<"code"<<"鍏ユ睜鏃堕棿"<<"鍏ユ睜浠锋牸"<<"璐拱鏃堕棿"<<"璐拱浠锋牸"<<"鍏ユ睜鏀剁泭"<<"璐拱鏀剁泭"<<"绫诲瀷";
+    QStringList labels; // 14鍒�
+    labels<<"id"<<"鑲$エ"<<"code"<<"鍏ユ睜鏃堕棿"<<"鍏ユ睜浠锋牸"<<"璐拱鏃堕棿"<<"璐拱浠锋牸"
+         <<"鍗栧嚭鏃堕棿"<<"鍗栧嚭浠锋牸"<<"鍏ユ睜鏀剁泭"<<"涔板叆鏀剁泭"<<"鍗栧嚭鏀剁泭"<<"绫诲瀷"<<"鐘舵��"<<"褰撳墠浠锋牸";
 
     m_modelAll->setHorizontalHeaderLabels(labels);
     m_modelShort->setHorizontalHeaderLabels(labels);
@@ -24,9 +33,263 @@
     ui->tableView_short->setModel(m_modelShort);
     ui->tableView_mid->setModel(m_modelMid);
     ui->tableView_long->setModel(m_modelLong);
+
+    // 鍒濆鍖栨暟鎹簱
+    initMySQL();
+
+    // 娣诲姞鑲$エ淇℃伅鐩稿叧
+    m_addDlg = new QDialog(this);
+    m_addDlg->setWindowTitle("娣诲姞鑲$エ鍒颁粨浣嶆睜");
+    QVBoxLayout *vb = new QVBoxLayout(m_addDlg);
+    QStringList placetext;
+    placetext<<"杈撳叆鑲$エ鍚嶅瓧"<<"杈撳叆鑲$エ浠e彿"<<"杈撳叆浠锋牸";
+    for(int i=0;i<3;++i){
+        QLineEdit *lt = new QLineEdit(this);
+        lt->setPlaceholderText(placetext.at(i));
+        vb->addWidget(lt);
+        m_lineEdits.append(lt);
+    }
+
+    QComboBox *comBox = new QComboBox(this);
+    comBox->addItem("鐭嚎");
+    comBox->addItem("涓嚎");
+    comBox->addItem("闀跨嚎");
+    vb->addWidget(comBox);
+
+    QPushButton *addBtn = new QPushButton("娣诲姞",this);
+    vb->addWidget(addBtn);
+
+    // 浣跨敤鍖垮悕鍑芥暟鏉ュ疄鐜版Ы
+    connect(addBtn,&QPushButton::clicked,this,[=]{
+        QString name = m_lineEdits.at(0)->text();
+        QString code = m_lineEdits.at(1)->text();
+        QString price = m_lineEdits.at(2)->text();
+        QString type = comBox->currentText();
+        qDebug()<<name<<code<<price<<type;
+        QString cur_time = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+
+        QString sql = QString("insert into position_pool (name,code,time_in,price_in,type,cur_price) values ('%1','%2','%3',%4,'%5',%6)")
+                .arg(name).arg(code).arg(cur_time).arg(price).arg(type).arg(price);
+        qDebug()<<"娣诲姞鑲$エ鐨剆ql:"<<sql;
+
+        QSqlQuery que(db);
+
+        if(que.exec(sql)){
+            qDebug()<<"insert ok";
+            QMessageBox::information(m_addDlg,"娣诲姞鎴愬姛",name+" "+price);
+
+        }else{
+            qDebug()<<"insert fail"<<que.lastError().text();
+            QMessageBox::information(m_addDlg,"娣诲姞澶辫触",name+" "+que.lastError().text());
+        }
+
+    });
+
+    // 鍙冲嚮鑿滃崟: 鍑嗗濂借彍鍗�--缁欑洰鏍囧璞¤缃彍鍗曠瓥鐣ヤ负鑷畾涔変笂涓嬫枃鑿滃崟--杩炴帴淇″彿妲�
+    m_menu = new QMenu(this);
+    m_menu->addAction("鏌ヨ鏈�鏂颁环鏍�");
+    m_menu->addAction("涔板叆褰撳墠鑲$エ");
+    m_menu->addAction("鍗栧嚭褰撳墠鑲$エ");
+
+    // 杩炴帴鑿滃崟鍔ㄤ綔鍜屾Ы
+    connect(m_menu->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(searchPriceAction()));
+    connect(m_menu->actions().at(1),SIGNAL(triggered(bool)),this,SLOT(buyStockAction()));
+    connect(m_menu->actions().at(2),SIGNAL(triggered(bool)),this,SLOT(saleStockAction()));
+
+
+    this->setContextMenuPolicy(Qt::CustomContextMenu); // 璁惧畾鑿滃崟绛栫暐
+    ui->tableView_all->setContextMenuPolicy(Qt::CustomContextMenu);
+    ui->tableView_short->setContextMenuPolicy(Qt::CustomContextMenu);
+    ui->tableView_mid->setContextMenuPolicy(Qt::CustomContextMenu);
+    ui->tableView_long->setContextMenuPolicy(Qt::CustomContextMenu);
+
+    // 鍜岀獥鍙h繛鎺ワ紝鍦ㄦ暣涓獥鍙d腑閮藉彲浠ュ彸鍑绘樉绀鸿彍鍗�
+//    connect(this,&PositionManagement::customContextMenuRequested,this,[=](QPoint p){
+//        //m_menu->exec(QCursor::pos()); // 鏂瑰紡1
+//        //m_menu->exec(this->mapToGlobal(p)); // 鏂瑰紡2,濡傛灉鏄瓙閮ㄤ欢锛屽鏄撳潗鏍囧亸绉�
+//        m_menu->popup(QCursor::pos()); // 鎹竴涓柟寮�3 涔熷彲浠�
+//    });
+
+    // 鍜屾瘡涓鍥捐繛鎺ワ紝鍙湪瑙嗗浘涓樉绀鸿彍鍗�
+    connect(ui->tableView_all,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint)));
+    connect(ui->tableView_short,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint)));
+    connect(ui->tableView_mid,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint)));
+    connect(ui->tableView_long,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint)));
+
+
+
 }
 
 PositionManagement::~PositionManagement()
 {
     delete ui;
 }
+
+void PositionManagement::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()<<"mysql conn ok";
+    }
+}
+
+void PositionManagement::on_pushButton_add_clicked()
+{
+    m_addDlg->show();
+}
+
+void PositionManagement::on_pushButton_refresh_clicked()
+{
+    m_modelAll->setRowCount(0);
+    m_modelShort->setRowCount(0);
+    m_modelMid->setRowCount(0);
+    m_modelLong->setRowCount(0);
+
+
+    QString sql = "select * from position_pool";
+    QSqlQuery que(db);
+    if(que.exec(sql)){
+        qDebug()<<"鏌ヨ鎴愬姛";
+
+        qDebug()<<"size:"<<que.size();
+        while (que.next()) {
+            QList<QStandardItem*> items;
+            QList<QStandardItem*> items_short;
+            QList<QStandardItem*> items_mid;
+            QList<QStandardItem*> items_long;
+            for(int i=0;i<15;++i){
+                qDebug()<<i<<que.value(i).toString();
+                items.append(new QStandardItem(que.value(i).toString()));
+                items_short.append(new QStandardItem(que.value(i).toString()));
+                items_mid.append(new QStandardItem(que.value(i).toString()));
+                items_long.append(new QStandardItem(que.value(i).toString()));
+
+            }
+            m_modelAll->appendRow(items);
+            if(items.at(12)->text() == "鐭嚎"){
+                m_modelShort->appendRow(items_short);
+            }else if(items.at(12)->text() == "涓嚎"){
+                m_modelMid->appendRow(items_mid);
+            }else{
+                m_modelLong->appendRow(items_long);
+            }
+        }
+
+    }else{
+        qDebug()<<"鏌ヨ澶辫触";
+    }
+}
+
+void PositionManagement::showMenu(QPoint p)
+{
+    m_curPoint = p;  // 璁板綍褰撳墠鍧愭爣--瀛愰儴浠跺唴鐨勫潗鏍囷紝鍒氬ソ鍙敤锛屼笉鐢ㄥ啀杞崲浜�
+    m_curView = (QTableView*)sender(); // 璁板綍琚偣鍑荤殑瑙嗗浘锛岀敤鏉ュ彇绱㈠紩--妯″瀷--鏁版嵁
+//    qDebug()<<sender()<<p;
+//    qDebug()<<"鏄剧ず鍙冲嚮鑿滃崟";
+//    m_menu->exec(this->mapFromGlobal(p)); // 鏂瑰紡1,瀹规槗鍧愭爣璺戝亸锛岀壒鍒槸瀛愰儴浠舵樉绀鸿彍鍗曟椂
+    m_menu->exec(QCursor::pos());
+
+
+
+}
+
+void PositionManagement::searchPriceAction()
+{
+    qDebug()<<"鏌ヨ鏈�鏂颁环鏍�"<<sender();
+
+}
+
+void PositionManagement::buyStockAction()
+{
+    qDebug()<<"涔板叆褰撳墠鑲$エ";
+    // 鍒ゆ柇褰撳墠浣嶇疆鏄惁涓洪�変腑鐨勬湁鏁堝唴瀹硅锛岀劧鍚庢寜褰撳墠浠锋牸涔板叆鍗冲彲锛屽簲璇ユ嬁鍒版渶鏂颁环涔板崠
+    // 涓�瀹氳鍏堝垽鏂姸鎬佹槸鍚︿负瑙傚療锛氳瀵熺殑璇�--褰撳墠琛屼拱鍏ワ紝淇敼璁板綍鍗冲彲锛涘鏋滄槸宸茬粡涔板叆鎴栧崠鍑虹殑鐘舵�侊紝鍐嶆坊鍔犱竴鏉℃柊鐨勪拱鍏ヨ褰�
+
+    QModelIndex index = m_curView->indexAt(m_curPoint);
+    if(index.row() == -1) return; // 闃叉寮傚父
+
+    QStandardItemModel * curModel = (QStandardItemModel*)index.model();
+    int row = index.row();
+    QString id = curModel->item(row,0)->text();
+    QString name = curModel->item(row,1)->text();
+    QString code = curModel->item(row,2)->text();
+    QString price = curModel->item(row,14)->text();
+    QString state = curModel->item(row,13)->text();
+    qDebug()<<id<<name<<code<<price<<"state:"<<state;
+
+    if(state.toInt() == 1){
+        // 鏇存柊褰撳墠鍗冲彲,閫氳繃id鏉ュ姣斿鐞嗗嵆鍙洿鏂�
+        QString buy_time = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+        QString sql = QString("update position_pool set time_buy='%1',price_buy=%2,state=%4 where id=%3")
+                .arg(buy_time).arg(price).arg(id).arg("2");
+
+        qDebug()<<"buy sql:"<<sql;
+
+        QSqlQuery que(db);
+        if(que.exec(sql)){
+            qDebug()<<"buy 鎴愬姛:"<<name<<price;
+            on_pushButton_refresh_clicked(); // 鍒锋柊鑲$エ姹�
+        }else{
+            qDebug()<<"buy 澶辫触:"<<name<<price;
+        }
+
+    }else{
+        // 鍒涘缓鏂扮殑璁板綍锛屾妸褰撳墠浠锋牸鍜屾椂闂磋缃负鍏ユ睜銆佷拱鍏ョ浉搴旂殑浠锋牸鍜屾椂闂�
+    }
+
+}
+
+void PositionManagement::saleStockAction()
+{
+    qDebug()<<"鍗栧嚭褰撳墠鑲$エ";
+    // 鍒ゆ柇褰撳墠浣嶇疆鏄惁涓洪�変腑鐨勬湁鏁堝唴瀹硅锛岀劧鍚庢寜褰撳墠浠锋牸鍗栧嚭鍗冲彲锛屽簲璇ユ嬁鍒版渶鏂颁环涔板崠
+    // 涓�瀹氳鍏堝垽鏂嚭鐩墠鏄拱鍏ユ寔浠撶殑鐘舵�侊紝鍚﹀垯鍗栧嚭澶辫触
+
+    QModelIndex index = m_curView->indexAt(m_curPoint);
+    if(index.row() == -1) return; // 闃叉寮傚父
+
+    QStandardItemModel * curModel = (QStandardItemModel*)index.model();
+    int row = index.row();
+    QString id = curModel->item(row,0)->text();
+    QString name = curModel->item(row,1)->text();
+    QString code = curModel->item(row,2)->text();
+    QString price = curModel->item(row,14)->text();
+    QString state = curModel->item(row,13)->text();
+    QString buy_price = curModel->item(row,6)->text();
+    qDebug()<<id<<name<<code<<price<<"state:"<<state;
+
+    if(state.toInt() == 2){
+        // 鏇存柊褰撳墠鍗冲彲,閫氳繃id鏉ュ姣斿鐞嗗嵆鍙洿鏂�
+        QString sell_time = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+        double rate = (price.toDouble() / buy_price.toDouble() - 1.0)*100; // 璁$畻鍗栧嚭鐩堝埄姣�
+        QString sql = QString("update position_pool set time_sale='%1',price_sale=%2,state=%4,rate_sale=%7 where id=%3")
+                .arg(sell_time).arg(price).arg(id).arg("3").arg(QString::number(rate));
+
+        qDebug()<<"sell sql:"<<sql;
+
+        QSqlQuery que(db);
+        if(que.exec(sql)){
+            qDebug()<<"sell 鎴愬姛:"<<name<<price;
+            on_pushButton_refresh_clicked(); // 鍒锋柊鑲$エ姹�
+            QMessageBox::information(this,"鍗栧嚭鎴愬姛",name+" 鐩堝埄鐧惧垎姣�:"+QString::number(rate));
+        }else{
+            qDebug()<<"sell 澶辫触:"<<name<<price;
+        }
+
+    }else{
+        qDebug()<<"涓嶉�傚悎鍗栧嚭,娌℃湁鎸佷粨";
+        QMessageBox::information(this,"鍗栧嚭澶辫触","鏃犳寔浠擄紝涓嶈兘鍗栧嚭");
+    }
+}

--
Gitblit v1.8.0