代码拉取完成,页面将自动刷新
#include "datadisplay.h"
#include "ui_datadisplay.h"
#include "qfile.h"
#include "qstandarditemmodel.h"
#include "QJsonParseError"
#include "qjsonarray.h"
#include "qjsonobject.h"
#include "qtextcodec.h"
#include "qtextstream.h"
#include "qdebug.h"
#include "qmessagebox.h"
#include "dbmanager.h"
#include "qscrollbar.h"
#include "qjsondocument.h"
#include "util.h"
#include "const_def.h"
//#include "recovery.h"
datadisplay::datadisplay(QWidget *parent) :
QWidget(parent),
ui(new Ui::datadisplay)
{
ui->setupUi(this);
this->moveToThread(&dataDealThd);
dataDealThd.start();
initTableView( QDir::currentPath()+RECORDS_VIEW_JSON );
qDebug()<<__FUNCTION__<<QDir::currentPath();
initItemChooseOptions();
initTableViewParams();
connect(&utilTimer,&QTimer::timeout,this ,[=]{
get_coefficients();
});
utilTimer.setSingleShot(true);
utilTimer.start(2000);
connect(&tableExportor,&XlsxExportor::sig_print_excel_finish,this,&datadisplay::on_sig_print_excel_finish);
// QXlsx::Document xlsx;
// xlsx.write("A1", "Hello");
// xlsx.write("B1", "World");
// QXlsx::CellRange myRange(1,1,1,6);
// xlsx.mergeCells(myRange);
// xlsx.saveAs("tmpXlsPath1.xlsx");
}
datadisplay::~datadisplay()
{
dataDealThd.terminate();
dataDealThd.wait();
delete ui;
}
void datadisplay::initItemChooseOptions()
{
QDate tmpDate=QDate::currentDate();
QDateTime tmpDateTStart=QDateTime::fromMSecsSinceEpoch(QDateTime::currentDateTime().toMSecsSinceEpoch()-7*24*60*60*1000);
QDate tmpDateS=QDate::fromString(tmpDateTStart.toString(QStringLiteral("dd.MM.yyyy")),QStringLiteral("dd.MM.yyyy"));
ui->dateEdit_start->setDate(tmpDateS);
ui->dateEdit_start->setCalendarPopup(true);
ui->dateEdit_stop->setDate(tmpDate);
ui->dateEdit_stop->setCalendarPopup(true);
}
void datadisplay::initTableView(const QString &viewfile)
{
QFile jsonfile( viewfile );
if ( !jsonfile.open( QFile::ReadOnly ) )
{
qDebug() << "error : open view file failed! " + viewfile;
return;
}
QByteArray data = jsonfile.readAll();
QJsonParseError err;
QJsonDocument viewJsonDoc = QJsonDocument::fromJson( data, &err );
if ( viewJsonDoc.isNull() )
{
qDebug() << "err: parse json file " << viewfile << " failed, " << "err=" << err.errorString();
return;
}
QStringList headerlist;
QList< int > widthlist;
QJsonArray headerArray = viewJsonDoc.array();
for ( int i = 0; i < headerArray.count(); i++ )
{
QJsonObject header = headerArray.at( i ).toObject();
headerlist.append( header[ "name" ].toString() );
widthlist.append( header[ "columewidth" ].toInt() );
}
QTableView *pTableView = ui->tableView;
pTableView->setAlternatingRowColors(true);
QStandardItemModel * model = new QStandardItemModel( pTableView );
model->setHorizontalHeaderLabels( headerlist );
pTableView->setModel( model );
pTableView->horizontalHeader()->setDefaultAlignment( Qt::AlignLeft | Qt::AlignVCenter );
for ( int i = 0; i < widthlist.count() - 1; i++ )
{
pTableView->setColumnWidth( i, widthlist.at( i ) );
}
pTableView->horizontalHeader()->setStretchLastSection( true );
pTableView->verticalScrollBar()->setStyleSheet( "" );
pTableView->setEditTriggers( QAbstractItemView::NoEditTriggers );
}
void datadisplay::store_one_experment_record(qint16 id,QJsonObject expermentRecod)
{
qDebug()<<__func__<<id;
if(expermentRecod.contains("type")){
if(expermentRecod.value("type").toString()=="1")
add_one_waterlevel_record(id,expermentRecod);
}
else
add_one_shentou_record(id,expermentRecod);
}
void datadisplay::add_one_waterlevel_record(qint16 id,QJsonObject pressureRecod)
{
qDebug()<<__FUNCTION__;
// return;
QString db_tablename = DBManager::GetInstance()->get_db_tablename((DATABASE)(id+1));
if(db_tablename.isEmpty())
return;
QList<QString> coulmnname;
coulmnname.append( DBManager::GetInstance()->get_db_column(db_tablename) );
if(coulmnname.isEmpty())
return;
QHash<QString, QString> sqlcolumn;
if(coulmnname.count() < 4)
return;
QJsonObject tmpObj=pressureRecod;
sqlcolumn[coulmnname.at(1)] = tmpObj.value(QStringLiteral("val")).toString();
sqlcolumn[coulmnname.at(2)] = tmpObj.value(QStringLiteral("level")).toString(); //暂时不在流程中完成冻存管信息录入
sqlcolumn[coulmnname.at(3)] = tmpObj.value(QStringLiteral("time")).toString();
DBManager::GetInstance()->insert_datas(db_tablename, "insert", sqlcolumn);
}
void datadisplay::add_one_shentou_record(qint16 id,QJsonObject expermentRecod)
{
qDebug()<<__FUNCTION__<<id<<expermentRecod;
// return;
QString db_tablename = DBManager::GetInstance()->get_db_tablename(experment_record);
if(db_tablename.isEmpty())
return;
QList<QString> coulmnname;
coulmnname.append( DBManager::GetInstance()->get_db_column(db_tablename) );
if(coulmnname.isEmpty())
return;
QHash<QString, QString> sqlcolumn;
if(coulmnname.count() < EXPERMENT_RECORD)
return;
QJsonObject tmpObj=expermentRecod;
sqlcolumn[coulmnname.at(1)] = QString::number(tmpObj.value(QStringLiteral("RealWaterH")).toString().toFloat(),'f',2);
sqlcolumn[coulmnname.at(2)] = QString::number(tmpObj.value(QStringLiteral("RealWaterL")).toString().toFloat(),'f',2); //暂时不在流程中完成冻存管信息录入
sqlcolumn[coulmnname.at(3)] = tmpObj.value(QStringLiteral("pipe_area")).toString();
sqlcolumn[coulmnname.at(4)] = tmpObj.value(QStringLiteral("earth_height")).toString();
sqlcolumn[coulmnname.at(5)] = tmpObj.value(QStringLiteral("earth_area")).toString();
sqlcolumn[coulmnname.at(6)] = tmpObj.value(QStringLiteral("result")).toString();
sqlcolumn[coulmnname.at(7)] = tmpObj.value(QStringLiteral("result20")).toString();
sqlcolumn[coulmnname.at(8)] = tmpObj.value(QStringLiteral("start_time")).toString();
sqlcolumn[coulmnname.at(9)] = tmpObj.value(QStringLiteral("stop_time")).toString();
sqlcolumn[coulmnname.at(10)] = tmpObj.value(QStringLiteral("totaltimeused")).toString();
sqlcolumn[coulmnname.at(11)] = tmpObj.value(QStringLiteral("droptimeused")).toString();
sqlcolumn[coulmnname.at(12)] = tmpObj.value(QStringLiteral("temperature")).toString();
sqlcolumn[coulmnname.at(13)] = QString::number(id);
sqlcolumn[coulmnname.at(15)] = tmpObj.value(QStringLiteral("status")).toString();
sqlcolumn[coulmnname.at(16)] = tmpObj.value(QStringLiteral("water_start_time")).toString();
sqlcolumn[coulmnname.at(17)] = tmpObj.value(QStringLiteral("water_stop_time")).toString();
sqlcolumn[coulmnname.at(18)] = tmpObj.value(QStringLiteral("23al")).toString();
sqlcolumn[coulmnname.at(19)] = tmpObj.value(QStringLiteral("log")).toString();
sqlcolumn[coulmnname.at(20)] = tmpObj.value(QStringLiteral("coefficient_ratio")).toString();
DBManager::GetInstance()->insert_datas(db_tablename, "insert", sqlcolumn);
}
QList<QStringList> datadisplay::get_record_msg( QString startDate,QString stopDate )
{
QString db_tablename = DBManager::GetInstance()->get_db_tablename( experment_record );
QList<QString> coulmnname;
coulmnname.append( DBManager::GetInstance()->get_db_column( db_tablename ) );
QList<QStringList> result;
if( coulmnname.count() == EXPERMENT_RECORD )
{
startDate=startDate+QString(" 00:00:00");
stopDate=stopDate+QString(" 23:59:59");
QString sqlWhere = QString("where %1 between '%2' and '%3'").arg(coulmnname.at(8)).arg(startDate).arg(stopDate);
DBManager::GetInstance()->select_datas(db_tablename, "select", result, sqlWhere);
}
return result;
}
QList<QStringList> datadisplay::get_coefficients(void)
{
QString db_tablename = DBManager::GetInstance()->get_db_tablename( water_coefficient );
QList<QString> coulmnname;
coulmnname.append( DBManager::GetInstance()->get_db_column( db_tablename ) );
QList<QStringList> result;
if( coulmnname.count() == WATER_COEFFICIENT )
{
QString sqlWhere = "";
DBManager::GetInstance()->select_datas(db_tablename, "select", result, sqlWhere);
}
// qDebug()<<result;
QJsonObject tmpCoefficient;
QString tmpVals;
for(int i=0;i<result.count();++i){
tmpVals=result.at(i).join("-");
tmpCoefficient.insert(result.at(i).at(0),tmpVals);
}
// Util::save_json_obj()
QString efficients=QDir::currentPath()+ COEFFICIENTS ;
QFile tmpFil1(efficients);
if(tmpFil1.open(QIODevice::ReadWrite)){
tmpFil1.resize(0);
tmpFil1.close();
Util::save_json_obj(efficients,tmpCoefficient);
}
return result;
}
void datadisplay::calTotlePage(void)
{
if(dataRecords.count()%VOLUME_EVERY_PAGE!=0)
{
totlePages=dataRecords.count()/VOLUME_EVERY_PAGE+1;
}
else
{
totlePages=dataRecords.count()/VOLUME_EVERY_PAGE;
}
if(totlePages==0)
{
qDebug()<<__FUNCTION__<<QStringLiteral("无数据记录!");
QTableView *pTableView=ui->tableView;
QStandardItemModel *model=(QStandardItemModel *)pTableView->model();
model->removeRows(0,model->rowCount());
currentPage=0;
ui->label->setText(QStringLiteral("0"));
ui->label_4->setText(QString::number(totlePages));
return;
}
currentPage=1;
ui->label->setText(QStringLiteral("1"));
ui->label_4->setText(QString::number(totlePages));
}
void datadisplay::initTableViewParams(void)
{
refreshTotalRecord();
goToPageX(1); //显示第一页
}
void datadisplay::refreshTotalRecord(void)
{
QDate date = ui->dateEdit_stop->date();
if( date < ui->dateEdit_start->date() )
{
qDebug()<<__func__<<QStringLiteral("结束日期小于起始日期,请重新输入!");
QMessageBox msgWarn(QMessageBox::Warning,qAppName(),QStringLiteral("结束日期小于起始日期,请重新输入!"),QMessageBox::Ok);
msgWarn.setButtonText(QMessageBox::Ok,QStringLiteral("确认"));
msgWarn.exec();
return ;
}
QString strDateStart,strDateStop;
strDateStart=ui->dateEdit_start->date().toString("yyyy-MM-dd");
strDateStop=ui->dateEdit_stop->date().toString("yyyy-MM-dd");
qDebug()<<__func__<<strDateStart<<strDateStop;
dataRecords.clear();
dataRecords = get_record_msg(strDateStart,strDateStop);
}
void datadisplay::goToPageX(int pageNo)
{
QTableView *pTableView=ui->tableView;
QStandardItemModel *model=(QStandardItemModel *)pTableView->model();
if(!model)return;
if(dataRecords.count()%VOLUME_EVERY_PAGE!=0)
{
totlePages=dataRecords.count()/VOLUME_EVERY_PAGE+1;
}
else
{
totlePages=dataRecords.count()/VOLUME_EVERY_PAGE;
}
qDebug()<<__FUNCTION__<<totlePages;
if(totlePages==0)
{
qDebug()<<__FUNCTION__<<QStringLiteral("无数据记录!");
return;
}
currentPage=pageNo;
ui->label->setText(QString::number(currentPage));
ui->label_4->setText(QString::number(totlePages));
int showNum=0;
if(currentPage<totlePages)
{
showNum=VOLUME_EVERY_PAGE;
}
else if(currentPage==totlePages)
{
showNum=dataRecords.count()-(currentPage-1)*VOLUME_EVERY_PAGE;
}
model->removeRows(0,model->rowCount());
int rowIndex=0;
for(int row=VOLUME_EVERY_PAGE*(currentPage-1);row<(VOLUME_EVERY_PAGE*(currentPage-1)+VOLUME_EVERY_PAGE);row++)
{
QList<QStandardItem *>items;
for(int col=0;col<model->columnCount();col++)
{
QStandardItem * itm;
if(rowIndex<showNum)
{
itm = new QStandardItem(" " + dataRecords.at(row).at(col+1) );
}
else
{
itm = new QStandardItem(" ");
}
itm->setTextAlignment( Qt::AlignLeft | Qt::AlignVCenter );
items.push_back( itm );
}
model->appendRow(items);
pTableView->setRowHeight(rowIndex,48);
rowIndex++;
}
}
void datadisplay::on_pushButton_2_clicked()
{
if(totlePages==0)
{
qDebug()<<__FUNCTION__<<QStringLiteral("无数据记录!");
return;
}
currentPage=ui->label->text().toInt();
currentPage++;
if(currentPage>totlePages)
{
currentPage=1;
}
goToPageX(currentPage);
ui->label->setText(QString::number(currentPage));
}
void datadisplay::on_pushButton_clicked()
{
if(totlePages==0)
{
qDebug()<<__FUNCTION__<<QStringLiteral("无数据记录!");
return;
}
currentPage=ui->label->text().toInt();
currentPage--;
if(currentPage<1)
{
currentPage=totlePages;
qDebug()<<__FUNCTION__<<totlePages;
}
goToPageX(currentPage);
ui->label->setText(QString::number(currentPage));
}
void datadisplay::on_pushButton_3_clicked()
{
int tmpPageNo=ui->lineEdit->text().toInt();
if((tmpPageNo>ui->label_4->text().toInt())||(tmpPageNo<1))
{
QMessageBox msgWarn(QMessageBox::Warning,qAppName(),QString("输入错误,请重新输入!"),QMessageBox::Ok);
msgWarn.setButtonText(QMessageBox::Ok,QString("确认"));
msgWarn.exec();
return ;
}
currentPage=tmpPageNo;
goToPageX(currentPage);
ui->label->setText(QString::number(currentPage));
}
void datadisplay::on_pushButton_4_clicked()
{
refreshTotalRecord();
calTotlePage();
if(ui->lineEdit->text()!=""&&ui->lineEdit->text().toInt()<=totlePages&&ui->lineEdit->text().toInt()>0){
goToPageX(ui->lineEdit->text().toInt());
}
else{
if(ui->label->text().toInt()>0)
goToPageX(ui->label->text().toInt());
}
qDebug()<<__FUNCTION__<<ui->tableView->geometry().width()<<ui->tableView->height();
}
//void datadisplay::on_pushButton_5_clicked()
//{
// tableExportor.set_ui_controls(0);
// if(tableExportor.isVisible()){
// tableExportor.close();
// tableExportor.show();
// }
// else
// tableExportor.show();
//}
void datadisplay::on_pushButton_5_clicked()
{
if(ui->tableView->currentIndex().row()==-1)
{
QMessageBox::warning(this,QString("警告"),QString("未选中,请重试!"),QString("确定"));
return ;
}
QStandardItemModel * model =(QStandardItemModel *)ui->tableView->model();
QModelIndex idIndex,startTimerIndex,stopTimeIndex,resIndex,temperatureIndex;
idIndex=model->index(ui->tableView->currentIndex().row(),0,QModelIndex());
startTimerIndex=model->index(ui->tableView->currentIndex().row(),8,QModelIndex());
stopTimeIndex=model->index(ui->tableView->currentIndex().row(),9,QModelIndex());
resIndex=model->index(ui->tableView->currentIndex().row(),7,QModelIndex());
temperatureIndex=model->index(ui->tableView->currentIndex().row(),12,QModelIndex());
QString idStr = model->data(idIndex,Qt::DisplayRole).toString();
QString startTStr = model->data(startTimerIndex,Qt::DisplayRole).toString();
QString stopTStr = model->data(stopTimeIndex,Qt::DisplayRole).toString();
QString resStr = model->data(resIndex,Qt::DisplayRole).toString();
QString temperStr = model->data(temperatureIndex,Qt::DisplayRole).toString();
if("-1"==resStr&&temperStr<=0){
QMessageBox::warning(this,QString("警告"),QString("该实验无效!"),QString("确定"));
return ;
}
QList<QStringList> pressureLevelDtas=get_press_water_data(idStr,startTStr,stopTStr);
if(pressureLevelDtas.isEmpty()){
QMessageBox::warning(this,QString("警告"),QString("数据为空!"),QString("确定"));
return ;
}
tableExportor.calculate_reses(temperStr,idStr,pressureLevelDtas);
tableExportor.set_ui_controls(2);
if(tableExportor.isVisible()){
tableExportor.close();
tableExportor.show();
}
else
tableExportor.show();
}
QList<QStringList> datadisplay::get_press_water_data(QString devId, QString startDate,QString stopDate )
{
int devid=devId.trimmed().toInt()+1;
QString db_tablename = DBManager::GetInstance()->get_db_tablename( (DATABASE)devid );
QList<QString> coulmnname;
coulmnname.append( DBManager::GetInstance()->get_db_column( db_tablename ) );
QList<QStringList> result;
if( coulmnname.count() == PRESSURE_VAL1 )
{
// startDate=startDate+QString(" 00:00:00");
// stopDate=stopDate+QString(" 23:59:59");
QString sqlWhere = QString("where %1 between '%2' and '%3'").arg(coulmnname.at(3)).arg(startDate).arg(stopDate);
DBManager::GetInstance()->select_datas(db_tablename, "select", result, sqlWhere);
}
return result;
}
void datadisplay::on_pushButton_6_clicked()
{
tableExportor.set_ui_controls(1);
if(tableExportor.isVisible()){
tableExportor.close();
tableExportor.show();
}
else
tableExportor.show();
}
void datadisplay::on_sig_print_excel_finish()
{
if(tableExportor.isVisible()){
this->stackUnder(&tableExportor);
}
}
void datadisplay::on_pushButton_7_clicked()
{
if(ui->tableView->currentIndex().row()==-1)
{
QMessageBox::warning(this,QString("警告"),QString("未选中,请重试!"),QString("确定"));
return ;
}
QStandardItemModel * model =(QStandardItemModel *)ui->tableView->model();
QModelIndex idIndex,startTimerIndex,stopTimeIndex,resIndex,temperatureIndex;
idIndex=model->index(ui->tableView->currentIndex().row(),0,QModelIndex());
startTimerIndex=model->index(ui->tableView->currentIndex().row(),8,QModelIndex());
stopTimeIndex=model->index(ui->tableView->currentIndex().row(),9,QModelIndex());
resIndex=model->index(ui->tableView->currentIndex().row(),7,QModelIndex());
temperatureIndex=model->index(ui->tableView->currentIndex().row(),12,QModelIndex());
QString idStr = model->data(idIndex,Qt::DisplayRole).toString();
QString startTStr = model->data(startTimerIndex,Qt::DisplayRole).toString();
QString stopTStr = model->data(stopTimeIndex,Qt::DisplayRole).toString();
QString resStr = model->data(resIndex,Qt::DisplayRole).toString();
QString temperStr = model->data(temperatureIndex,Qt::DisplayRole).toString();
if("-1"==resStr&&temperStr<=0){
QMessageBox::warning(this,QString("警告"),QString("该实验无效!"),QString("确定"));
return ;
}
QList<QStringList> pressureLevelDtas=get_press_water_data(idStr,startTStr,stopTStr);
if(pressureLevelDtas.isEmpty()){
QMessageBox::warning(this,QString("警告"),QString("数据为空!"),QString("确定"));
return ;
}
tableExportor.calculate_reses(temperStr,idStr,pressureLevelDtas);
resDisp.goToPageX(idStr,tableExportor.resCaculatedForExp);
if(resDisp.isVisible()){
resDisp.close();
resDisp.show();
}
else
resDisp.show();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。