Add recon page can search by patient info.

This commit is contained in:
sunwen
2023-08-24 15:10:46 +08:00
parent 2aa6541085
commit 4cf795d368
9 changed files with 155 additions and 66 deletions

View File

@@ -169,7 +169,6 @@ void DeviceManager::initDevice()
} }
startTransfer(); startTransfer();
initEmptyScanMeasurementID(); initEmptyScanMeasurementID();
updateReconState();
//mGetSoftwareVersionAction->execute(); //mGetSoftwareVersionAction->execute();
} }

View File

@@ -1,5 +1,4 @@
#include "MultyMessageDialogManager.h" #include "MultyMessageDialogManager.h"
#include "MultyMessageDialog.h"
#include <QMutexLocker> #include <QMutexLocker>

View File

@@ -5,8 +5,7 @@
#include <QList> #include <QList>
#include <QMutex> #include <QMutex>
class MultyMessageDialog; #include "MultyMessageDialog.h"
enum MessageLevel:unsigned int;
class MultyMessageDialogManager : public QObject class MultyMessageDialogManager : public QObject
{ {

View File

@@ -5,12 +5,15 @@
#include <QToolButton> #include <QToolButton>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QHeaderView> #include <QHeaderView>
#include <QSqlRecord>
#include "components/SlideTableView.h" #include "components/SlideTableView.h"
#include "db/SQLHelper.h" #include "db/SQLHelper.h"
#include "device/DeviceManager.h" #include "device/DeviceManager.h"
#include "ScanSearchCriteriaForm.h" #include "ScanSearchCriteriaForm.h"
#include "ReconStateDelegate.h" #include "ReconStateDelegate.h"
#include "dialogs/DialogManager.h"
#include "log/UserOperationLog.h"
ReconFormWidget::ReconFormWidget(QWidget *parent) ReconFormWidget::ReconFormWidget(QWidget *parent)
: TabFormWidget(parent) : TabFormWidget(parent)
@@ -49,6 +52,7 @@ ReconFormWidget::ReconFormWidget(QWidget *parent)
connect(mBtnRefresh, &QToolButton::clicked, DeviceManager::Default(), &DeviceManager::updateReconState); connect(mBtnRefresh, &QToolButton::clicked, DeviceManager::Default(), &DeviceManager::updateReconState);
connect(DeviceManager::Default(), &DeviceManager::updateReconStateFinished, mModel, &QSqlTableModel::select); connect(DeviceManager::Default(), &DeviceManager::updateReconStateFinished, mModel, &QSqlTableModel::select);
connect(mSearchWidget, &ScanSearchCriteriaForm::searchFilterUpdated, this, &ReconFormWidget::updateSearchFilter); 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 // TableView for Scan
ReconStateDelegate* delegate = new ReconStateDelegate(this); ReconStateDelegate* delegate = new ReconStateDelegate(this);
mScanTable->setItemDelegateForColumn(9, delegate); mScanTable->setItemDelegateForColumn(getTableColumnIndex("State"), delegate);
mScanTable->setAlternatingRowColors(true); mScanTable->setAlternatingRowColors(true);
mScanTable->setSelectionMode(QAbstractItemView::SingleSelection); mScanTable->setSelectionMode(QAbstractItemView::SingleSelection);
mScanTable->setEditTriggers(QAbstractItemView::NoEditTriggers); mScanTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
@@ -70,16 +74,16 @@ void ReconFormWidget::initTableView(QHBoxLayout *contentLayout)
mScanTable->setSortingEnabled(true); // enable sortingEnabled mScanTable->setSortingEnabled(true); // enable sortingEnabled
mScanTable->setModel(mModel); mScanTable->setModel(mModel);
mScanTable->hideColumn(0); mScanTable->hideColumn(getTableColumnIndex("ScanID"));
mScanTable->hideColumn(1); mScanTable->hideColumn(getTableColumnIndex("ReferenceID"));
mScanTable->hideColumn(5); mScanTable->hideColumn(getTableColumnIndex("UpdateTime"));
mScanTable->setColumnWidth(2, 200); mScanTable->setColumnWidth(getTableColumnIndex("PatientID"), 200);
mScanTable->setColumnWidth(3, 200); mScanTable->setColumnWidth(getTableColumnIndex("AccessionNumber"), 200);
mScanTable->setColumnWidth(4, 300); mScanTable->setColumnWidth(getTableColumnIndex("ScanDateTime"), 300);
mScanTable->setColumnWidth(6, 200); mScanTable->setColumnWidth(getTableColumnIndex("PatientName"), 200);
mScanTable->setColumnWidth(7, 100); mScanTable->setColumnWidth(getTableColumnIndex("Laterality"), 100);
mScanTable->setColumnWidth(8, 200); mScanTable->setColumnWidth(getTableColumnIndex("OperatorName"), 200);
contentLayout->addWidget(mScanTable); contentLayout->addWidget(mScanTable);
//table current row selection changing event //table current row selection changing event
@@ -90,16 +94,16 @@ void ReconFormWidget::initDataModel()
{ {
//TODO:单独初始化预防SQL错误 //TODO:单独初始化预防SQL错误
mModel = SQLHelper::getTable("Scan"); mModel = SQLHelper::getTable("Scan");
mModel->sort(4, Qt::DescendingOrder); mModel->sort(getTableColumnIndex("ScanDateTime"), Qt::DescendingOrder);
updateSearchFilter(); updateSearchFilter();
mModel->setHeaderData(2, Qt::Horizontal, tr("Patient ID")); mModel->setHeaderData(getTableColumnIndex("PatientID"), Qt::Horizontal, tr("Patient ID"));
mModel->setHeaderData(3, Qt::Horizontal, tr("Accession Number")); mModel->setHeaderData(getTableColumnIndex("AccessionNumber"), Qt::Horizontal, tr("Accession Number"));
mModel->setHeaderData(6, Qt::Horizontal, tr("Patient Name")); mModel->setHeaderData(getTableColumnIndex("PatientName"), Qt::Horizontal, tr("Patient Name"));
mModel->setHeaderData(4, Qt::Horizontal, tr("Scan Time")); mModel->setHeaderData(getTableColumnIndex("ScanDateTime"), Qt::Horizontal, tr("Scan Time"));
mModel->setHeaderData(7, Qt::Horizontal, tr("Laterality")); mModel->setHeaderData(getTableColumnIndex("Laterality"), Qt::Horizontal, tr("Laterality"));
mModel->setHeaderData(8, Qt::Horizontal, tr("Operator Name")); mModel->setHeaderData(getTableColumnIndex("OperatorName"), Qt::Horizontal, tr("Operator Name"));
mModel->setHeaderData(9, Qt::Horizontal, tr("State")); mModel->setHeaderData(getTableColumnIndex("State"), Qt::Horizontal, tr("State"));
} }
void ReconFormWidget::updateSearchFilter() void ReconFormWidget::updateSearchFilter()
@@ -107,3 +111,51 @@ void ReconFormWidget::updateSearchFilter()
mModel->setFilter(mSearchWidget->getSearchFilter()); mModel->setFilter(mSearchWidget->getSearchFilter());
mModel->select(); 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);
}

View File

@@ -17,8 +17,15 @@ public:
~ReconFormWidget() override = default; ~ReconFormWidget() override = default;
protected:
void showEvent(QShowEvent *aEvent) override;
private slots: private slots:
void updateSearchFilter(); void updateSearchFilter();
void deleteReconRecord();
private:
int getTableColumnIndex(const QString& aColumnName);
private: private:
QToolButton* mBtnDiscard; QToolButton* mBtnDiscard;

View File

@@ -18,7 +18,8 @@ ScanSearchCriteriaForm::ScanSearchCriteriaForm(QWidget *parent)
ui->mLBBeginDate->setVisible(false); ui->mLBBeginDate->setVisible(false);
ui->mLBBeginDate->deleteLater(); ui->mLBBeginDate->deleteLater();
ui->mLBBeginDate=beginBox; 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->setUpdatesEnabled(true);
ui->mLBBeginDate->setText(QDate::currentDate().toString("yyyy-MM-dd")); ui->mLBBeginDate->setText(QDate::currentDate().toString("yyyy-MM-dd"));
@@ -28,7 +29,8 @@ ScanSearchCriteriaForm::ScanSearchCriteriaForm(QWidget *parent)
ui->mLBEndDate->setVisible(false); ui->mLBEndDate->setVisible(false);
ui->mLBEndDate->deleteLater(); ui->mLBEndDate->deleteLater();
ui->mLBEndDate=endBox; 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->setUpdatesEnabled(true);
ui->mLBEndDate->setText(QDate::currentDate().toString("yyyy-MM-dd")); ui->mLBEndDate->setText(QDate::currentDate().toString("yyyy-MM-dd"));
ui->CriteriaTitle->setObjectName("parameterTitle"); ui->CriteriaTitle->setObjectName("parameterTitle");
@@ -86,7 +88,8 @@ ScanSearchCriteriaForm::ScanSearchCriteriaForm(QWidget *parent)
}); });
connect(ui->mBtnDates, &QPushButton::clicked, this, &ScanSearchCriteriaForm::updateSearchFilter); 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() ScanSearchCriteriaForm::~ScanSearchCriteriaForm()
@@ -96,10 +99,36 @@ ScanSearchCriteriaForm::~ScanSearchCriteriaForm()
QString ScanSearchCriteriaForm::getSearchFilter() 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() void ScanSearchCriteriaForm::updateSearchFilter()
{ {
emit searchFilterUpdated(); emit searchFilterUpdated();
} }
void ScanSearchCriteriaForm::clearCriteria()
{
ui->mPatientIDEdit->clear();
ui->mPatientNameEdit->clear();
ui->mAccessionNumberEdit->clear();
}

View File

@@ -19,6 +19,7 @@ public:
private slots: private slots:
void updateSearchFilter(); void updateSearchFilter();
void clearCriteria();
signals: signals:
void searchFilterUpdated(); void searchFilterUpdated();

View File

@@ -151,6 +151,12 @@
</item> </item>
<item> <item>
<widget class="QToolButton" name="mLBBeginDate"> <widget class="QToolButton" name="mLBBeginDate">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
</property> </property>
@@ -171,6 +177,12 @@
</item> </item>
<item> <item>
<widget class="QToolButton" name="mLBEndDate"> <widget class="QToolButton" name="mLBEndDate">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
</property> </property>
@@ -230,16 +242,10 @@
<property name="bottomMargin"> <property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item row="4" column="0"> <item row="7" column="1">
<widget class="QLabel" name="label_7"> <widget class="QPushButton" name="mRetrieveButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Accession Number</string> <string>Retrieve</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -256,21 +262,11 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="6" column="0">
<widget class="QLabel" name="label_8"> <widget class="ULineEdit" name="mAccessionNumberEdit"/>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Scan State</string>
</property>
</widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="1">
<widget class="QLineEdit" name="lineEdit"/> <widget class="ULineEdit" name="mPatientIDEdit"/>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
@@ -285,26 +281,26 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="4" column="0">
<widget class="QLineEdit" name="lineEdit_2"/> <widget class="QLabel" name="label_7">
</item> <property name="sizePolicy">
<item row="6" column="0"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<widget class="QLineEdit" name="lineEdit_3"/> <horstretch>0</horstretch>
</item> <verstretch>0</verstretch>
<item row="7" column="0"> </sizepolicy>
<widget class="QPushButton" name="pushButton"> </property>
<property name="text"> <property name="text">
<string>Clear Fields</string> <string>Accession Number</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="3" column="0">
<widget class="QComboBox" name="comboBox"/> <widget class="ULineEdit" name="mPatientNameEdit"/>
</item> </item>
<item row="7" column="1"> <item row="7" column="0">
<widget class="QPushButton" name="pushButton_2"> <widget class="QPushButton" name="mClearButton">
<property name="text"> <property name="text">
<string>Query</string> <string>Clear Fields</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -326,6 +322,13 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<customwidgets>
<customwidget>
<class>ULineEdit</class>
<extends>QLineEdit</extends>
<header>components/ULineEdit.h</header>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>

View File

@@ -109,14 +109,14 @@ void MainWindow::initializeTabWidget()
auto scanForm = new ScanFormWidget(this); auto scanForm = new ScanFormWidget(this);
mTabWidget->addTab(scanForm, tr("Scan")); mTabWidget->addTab(scanForm, tr("Scan"));
auto verifyForm = new ReconFormWidget(this); auto verifyForm = new ReconFormWidget(this);
mTabWidget->addTab(verifyForm, tr("Verify")); mTabWidget->addTab(verifyForm, tr("Recon"));
mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
} }
void MainWindow::reloadLanguage() { void MainWindow::reloadLanguage() {
mTabWidget->setTabText(0, tr("Select")); mTabWidget->setTabText(0, tr("Select"));
mTabWidget->setTabText(1, tr("Scan")); mTabWidget->setTabText(1, tr("Scan"));
mTabWidget->setTabText(2, tr("Verify")); mTabWidget->setTabText(2, tr("Recon"));
mTabWidget->setTabText(3, tr("Settings")); mTabWidget->setTabText(3, tr("Settings"));
} }