From 4cf795d3685c77cc529c9b0c17f19ce068bac41d Mon Sep 17 00:00:00 2001 From: sunwen Date: Thu, 24 Aug 2023 15:10:46 +0800 Subject: [PATCH] Add recon page can search by patient info. --- src/device/DeviceManager.cpp | 1 - src/dialogs/MultyMessageDialogManager.cpp | 1 - src/dialogs/MultyMessageDialogManager.h | 5 +- src/forms/recon/ReconFormWidget.cpp | 88 +++++++++++++++++----- src/forms/recon/ReconFormWidget.h | 7 ++ src/forms/recon/ScanSearchCriteriaForm.cpp | 37 ++++++++- src/forms/recon/ScanSearchCriteriaForm.h | 1 + src/forms/recon/ScanSearchCriteriaForm.ui | 77 ++++++++++--------- src/windows/MainWindow.cpp | 4 +- 9 files changed, 155 insertions(+), 66 deletions(-) diff --git a/src/device/DeviceManager.cpp b/src/device/DeviceManager.cpp index bb210f9..47bc582 100644 --- a/src/device/DeviceManager.cpp +++ b/src/device/DeviceManager.cpp @@ -169,7 +169,6 @@ void DeviceManager::initDevice() } startTransfer(); initEmptyScanMeasurementID(); - updateReconState(); //mGetSoftwareVersionAction->execute(); } diff --git a/src/dialogs/MultyMessageDialogManager.cpp b/src/dialogs/MultyMessageDialogManager.cpp index 7478100..9c0939d 100644 --- a/src/dialogs/MultyMessageDialogManager.cpp +++ b/src/dialogs/MultyMessageDialogManager.cpp @@ -1,5 +1,4 @@ #include "MultyMessageDialogManager.h" -#include "MultyMessageDialog.h" #include diff --git a/src/dialogs/MultyMessageDialogManager.h b/src/dialogs/MultyMessageDialogManager.h index ea2fcf5..aaf5f5a 100644 --- a/src/dialogs/MultyMessageDialogManager.h +++ b/src/dialogs/MultyMessageDialogManager.h @@ -5,8 +5,7 @@ #include #include -class MultyMessageDialog; -enum MessageLevel:unsigned int; +#include "MultyMessageDialog.h" class MultyMessageDialogManager : public QObject { @@ -27,4 +26,4 @@ private: QMutex mMutex; }; -#endif // MULTYMESSAGEDIALOGMANAGER_H \ No newline at end of file +#endif // MULTYMESSAGEDIALOGMANAGER_H diff --git a/src/forms/recon/ReconFormWidget.cpp b/src/forms/recon/ReconFormWidget.cpp index 8453e2e..a40f219 100644 --- a/src/forms/recon/ReconFormWidget.cpp +++ b/src/forms/recon/ReconFormWidget.cpp @@ -5,12 +5,15 @@ #include #include #include +#include #include "components/SlideTableView.h" #include "db/SQLHelper.h" #include "device/DeviceManager.h" #include "ScanSearchCriteriaForm.h" #include "ReconStateDelegate.h" +#include "dialogs/DialogManager.h" +#include "log/UserOperationLog.h" ReconFormWidget::ReconFormWidget(QWidget *parent) : TabFormWidget(parent) @@ -49,6 +52,7 @@ ReconFormWidget::ReconFormWidget(QWidget *parent) connect(mBtnRefresh, &QToolButton::clicked, DeviceManager::Default(), &DeviceManager::updateReconState); connect(DeviceManager::Default(), &DeviceManager::updateReconStateFinished, mModel, &QSqlTableModel::select); connect(mSearchWidget, &ScanSearchCriteriaForm::searchFilterUpdated, this, &ReconFormWidget::updateSearchFilter); + connect(mBtnDelete, &QToolButton::clicked, this, &ReconFormWidget::deleteReconRecord); } @@ -56,7 +60,7 @@ void ReconFormWidget::initTableView(QHBoxLayout *contentLayout) { // TableView for Scan ReconStateDelegate* delegate = new ReconStateDelegate(this); - mScanTable->setItemDelegateForColumn(9, delegate); + mScanTable->setItemDelegateForColumn(getTableColumnIndex("State"), delegate); mScanTable->setAlternatingRowColors(true); mScanTable->setSelectionMode(QAbstractItemView::SingleSelection); mScanTable->setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -70,16 +74,16 @@ void ReconFormWidget::initTableView(QHBoxLayout *contentLayout) mScanTable->setSortingEnabled(true); // enable sortingEnabled mScanTable->setModel(mModel); - mScanTable->hideColumn(0); - mScanTable->hideColumn(1); - mScanTable->hideColumn(5); + mScanTable->hideColumn(getTableColumnIndex("ScanID")); + mScanTable->hideColumn(getTableColumnIndex("ReferenceID")); + mScanTable->hideColumn(getTableColumnIndex("UpdateTime")); - mScanTable->setColumnWidth(2, 200); - mScanTable->setColumnWidth(3, 200); - mScanTable->setColumnWidth(4, 300); - mScanTable->setColumnWidth(6, 200); - mScanTable->setColumnWidth(7, 100); - mScanTable->setColumnWidth(8, 200); + mScanTable->setColumnWidth(getTableColumnIndex("PatientID"), 200); + mScanTable->setColumnWidth(getTableColumnIndex("AccessionNumber"), 200); + mScanTable->setColumnWidth(getTableColumnIndex("ScanDateTime"), 300); + mScanTable->setColumnWidth(getTableColumnIndex("PatientName"), 200); + mScanTable->setColumnWidth(getTableColumnIndex("Laterality"), 100); + mScanTable->setColumnWidth(getTableColumnIndex("OperatorName"), 200); contentLayout->addWidget(mScanTable); //table current row selection changing event @@ -90,16 +94,16 @@ void ReconFormWidget::initDataModel() { //TODO:单独初始化预防SQL错误 mModel = SQLHelper::getTable("Scan"); - mModel->sort(4, Qt::DescendingOrder); + mModel->sort(getTableColumnIndex("ScanDateTime"), Qt::DescendingOrder); updateSearchFilter(); - mModel->setHeaderData(2, Qt::Horizontal, tr("Patient ID")); - mModel->setHeaderData(3, Qt::Horizontal, tr("Accession Number")); - mModel->setHeaderData(6, Qt::Horizontal, tr("Patient Name")); - mModel->setHeaderData(4, Qt::Horizontal, tr("Scan Time")); - mModel->setHeaderData(7, Qt::Horizontal, tr("Laterality")); - mModel->setHeaderData(8, Qt::Horizontal, tr("Operator Name")); - mModel->setHeaderData(9, Qt::Horizontal, tr("State")); + mModel->setHeaderData(getTableColumnIndex("PatientID"), Qt::Horizontal, tr("Patient ID")); + mModel->setHeaderData(getTableColumnIndex("AccessionNumber"), Qt::Horizontal, tr("Accession Number")); + mModel->setHeaderData(getTableColumnIndex("PatientName"), Qt::Horizontal, tr("Patient Name")); + mModel->setHeaderData(getTableColumnIndex("ScanDateTime"), Qt::Horizontal, tr("Scan Time")); + mModel->setHeaderData(getTableColumnIndex("Laterality"), Qt::Horizontal, tr("Laterality")); + mModel->setHeaderData(getTableColumnIndex("OperatorName"), Qt::Horizontal, tr("Operator Name")); + mModel->setHeaderData(getTableColumnIndex("State"), Qt::Horizontal, tr("State")); } void ReconFormWidget::updateSearchFilter() @@ -107,3 +111,51 @@ void ReconFormWidget::updateSearchFilter() mModel->setFilter(mSearchWidget->getSearchFilter()); mModel->select(); } + +void ReconFormWidget::showEvent(QShowEvent *aEvent) +{ + TabFormWidget::showEvent(aEvent); + DeviceManager::Default()->updateReconState(); +} + +void ReconFormWidget::deleteReconRecord() +{ + if(mScanTable->currentIndex().row() < 0) + { + DialogManager::Default()->requestAlertMessage(tr("No data selected."), DialogButtonMode::OkOnly, tr("Alert")); + return; + } + + int currentRowIndex = mScanTable->currentIndex().row(); + int state = mModel->index(currentRowIndex, getTableColumnIndex("State")).data().toInt(); + if(state != 999) + { + DialogManager::Default()->requestAlertMessage(tr("Can not delete this record before pacs succeed."), DialogButtonMode::OkOnly, tr("Alert")); + return; + } + QString patientName = mModel->index(currentRowIndex, getTableColumnIndex("PatientName")).data().toString(); + if (DialogManager::Default()->requestAlertMessage(QString(tr("Delete recon record with patient \"%1\" ?")).arg(patientName),DialogButtonMode::OkAndCancel,tr("Confirm")) != QDialog::Accepted) + { + return; + } + mModel->removeRow(currentRowIndex); + if (mModel->submitAll()) + { + mModel->select(); + if (mModel->rowCount() > 0) + { + mScanTable->selectRow(0); + mModel->selectRow(0); + LOG_USER_OPERATION(DeletePatient) + } + } + else + { + DialogManager::Default()->requestAlertMessage(tr("Can't delete selected record , db error!"), DialogButtonMode::OkOnly, tr("Alert")); + } +} + +int ReconFormWidget::getTableColumnIndex(const QString& aColumnName) +{ + return mModel->record().indexOf(aColumnName); +} diff --git a/src/forms/recon/ReconFormWidget.h b/src/forms/recon/ReconFormWidget.h index c52f4e9..b6676b8 100644 --- a/src/forms/recon/ReconFormWidget.h +++ b/src/forms/recon/ReconFormWidget.h @@ -17,8 +17,15 @@ public: ~ReconFormWidget() override = default; +protected: + void showEvent(QShowEvent *aEvent) override; + private slots: void updateSearchFilter(); + void deleteReconRecord(); + +private: + int getTableColumnIndex(const QString& aColumnName); private: QToolButton* mBtnDiscard; diff --git a/src/forms/recon/ScanSearchCriteriaForm.cpp b/src/forms/recon/ScanSearchCriteriaForm.cpp index 3f10821..a050c88 100644 --- a/src/forms/recon/ScanSearchCriteriaForm.cpp +++ b/src/forms/recon/ScanSearchCriteriaForm.cpp @@ -18,7 +18,8 @@ ScanSearchCriteriaForm::ScanSearchCriteriaForm(QWidget *parent) ui->mLBBeginDate->setVisible(false); ui->mLBBeginDate->deleteLater(); ui->mLBBeginDate=beginBox; - ui->mLBBeginDate->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + ui->mLBBeginDate->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + ui->mLBBeginDate->setFixedWidth(200); ui->mLBBeginDate->setUpdatesEnabled(true); ui->mLBBeginDate->setText(QDate::currentDate().toString("yyyy-MM-dd")); @@ -28,7 +29,8 @@ ScanSearchCriteriaForm::ScanSearchCriteriaForm(QWidget *parent) ui->mLBEndDate->setVisible(false); ui->mLBEndDate->deleteLater(); ui->mLBEndDate=endBox; - ui->mLBEndDate->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + ui->mLBEndDate->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + ui->mLBEndDate->setFixedWidth(200); ui->mLBEndDate->setUpdatesEnabled(true); ui->mLBEndDate->setText(QDate::currentDate().toString("yyyy-MM-dd")); ui->CriteriaTitle->setObjectName("parameterTitle"); @@ -86,7 +88,8 @@ ScanSearchCriteriaForm::ScanSearchCriteriaForm(QWidget *parent) }); connect(ui->mBtnDates, &QPushButton::clicked, this, &ScanSearchCriteriaForm::updateSearchFilter); - + connect(ui->mRetrieveButton, &QPushButton::clicked, this, &ScanSearchCriteriaForm::updateSearchFilter); + connect(ui->mClearButton, &QPushButton::clicked, this, &ScanSearchCriteriaForm::clearCriteria); } ScanSearchCriteriaForm::~ScanSearchCriteriaForm() @@ -96,10 +99,36 @@ ScanSearchCriteriaForm::~ScanSearchCriteriaForm() QString ScanSearchCriteriaForm::getSearchFilter() { - return QString("ScanDateTime >= '%1 00:00:00' And ScanDateTime <= '%2 23:59:59'").arg(ui->mLBBeginDate->text()).arg(ui->mLBEndDate->text()); + QString filter = QString("ScanDateTime >= '%1 00:00:00' And ScanDateTime <= '%2 23:59:59'").arg(ui->mLBBeginDate->text()).arg(ui->mLBEndDate->text()); + + QString patientID = ui->mPatientIDEdit->text(); + if(!patientID.isEmpty()) + { + filter += QString("And PatientID = '%1'").arg(patientID); + } + + QString patientName = ui->mPatientNameEdit->text(); + if(!patientName.isEmpty()) + { + filter += QString("And PatientName = '%1'").arg(patientName); + } + + QString accessionNumber = ui->mAccessionNumberEdit->text(); + if(!accessionNumber.isEmpty()) + { + filter += QString("And AccessionNumber = '%1'").arg(accessionNumber); + } + return filter; } void ScanSearchCriteriaForm::updateSearchFilter() { emit searchFilterUpdated(); } + +void ScanSearchCriteriaForm::clearCriteria() +{ + ui->mPatientIDEdit->clear(); + ui->mPatientNameEdit->clear(); + ui->mAccessionNumberEdit->clear(); +} diff --git a/src/forms/recon/ScanSearchCriteriaForm.h b/src/forms/recon/ScanSearchCriteriaForm.h index 9c6e805..8e9153a 100644 --- a/src/forms/recon/ScanSearchCriteriaForm.h +++ b/src/forms/recon/ScanSearchCriteriaForm.h @@ -19,6 +19,7 @@ public: private slots: void updateSearchFilter(); + void clearCriteria(); signals: void searchFilterUpdated(); diff --git a/src/forms/recon/ScanSearchCriteriaForm.ui b/src/forms/recon/ScanSearchCriteriaForm.ui index 6e8b6ac..7187505 100644 --- a/src/forms/recon/ScanSearchCriteriaForm.ui +++ b/src/forms/recon/ScanSearchCriteriaForm.ui @@ -151,6 +151,12 @@ + + + 0 + 0 + + ... @@ -171,6 +177,12 @@ + + + 0 + 0 + + ... @@ -230,16 +242,10 @@ 0 - - - - - 0 - 0 - - + + - Accession Number + Retrieve @@ -256,21 +262,11 @@ - - - - - 0 - 0 - - - - Scan State - - + + - - + + @@ -285,26 +281,26 @@ - - - - - - - - + + + + + 0 + 0 + + - Clear Fields + Accession Number - - + + - - + + - Query + Clear Fields @@ -326,6 +322,13 @@ + + + ULineEdit + QLineEdit +
components/ULineEdit.h
+
+
diff --git a/src/windows/MainWindow.cpp b/src/windows/MainWindow.cpp index 0627031..b22e167 100644 --- a/src/windows/MainWindow.cpp +++ b/src/windows/MainWindow.cpp @@ -109,14 +109,14 @@ void MainWindow::initializeTabWidget() auto scanForm = new ScanFormWidget(this); mTabWidget->addTab(scanForm, tr("Scan")); auto verifyForm = new ReconFormWidget(this); - mTabWidget->addTab(verifyForm, tr("Verify")); + mTabWidget->addTab(verifyForm, tr("Recon")); mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } void MainWindow::reloadLanguage() { mTabWidget->setTabText(0, tr("Select")); mTabWidget->setTabText(1, tr("Scan")); - mTabWidget->setTabText(2, tr("Verify")); + mTabWidget->setTabText(2, tr("Recon")); mTabWidget->setTabText(3, tr("Settings")); }