1 Star 0 Fork 0

glm-001/shenntoufromgithub

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
datadisplay.cpp.bak 18.82 KB
一键复制 编辑 原始数据 按行查看 历史
glm-001 提交于 2024-09-13 10:35 +08:00 . resetcodes
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
#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();
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/glm-001/permeatefromgithub.git
git@gitee.com:glm-001/permeatefromgithub.git
glm-001
permeatefromgithub
shenntoufromgithub
main

搜索帮助