wumu
5 天以前 7a29ce102ca45e5b7888e898073d7c1342a7d9e3
historydata.cpp
@@ -38,7 +38,7 @@
    ui->tableView->setSortingEnabled(true);
    QStringList labels;
    labels<<"股票名字"<<"股票代号"<<"市值(亿)"<<"涨跌幅"<<"收盘价"<<"成交额(亿)"<<"成交量"<<"换手率"<<"PE_TTM";
    labels<<"股票名字"<<"股票代号"<<"市值(亿)"<<"涨跌幅"<<"收盘价"<<"成交额(亿)"<<"成交量"<<"换手率"<<"PE_TTM"<<"交易额排名";
    m_model->setHorizontalHeaderLabels(labels);
    initMySQL(); // 初始化MySQL
@@ -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"));
    // 设置请求头,用户代理,用来模拟浏览器
    m_request.setHeader(QNetworkRequest::UserAgentHeader,userAgent);
    // 设置cookie
@@ -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++;
        }
@@ -515,3 +517,59 @@
        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()<<"更新排名完成了";
}