diff --git a/src/device/DeviceManager.cpp b/src/device/DeviceManager.cpp index 1f95afb..72adede 100644 --- a/src/device/DeviceManager.cpp +++ b/src/device/DeviceManager.cpp @@ -1151,18 +1151,26 @@ void DeviceManager::startCreateReconRecord() emit createEmptyScanToRecon(scanid, RECON_TRANSFER_PATH + "/" + scanid); } - sql = "SELECT ScanID, ReferenceID, PatientID FROM Scan WHERE State < 300 And State >= 200 ORDER BY ScanDateTime ASC"; + sql = "SELECT ScanID, ReferenceID, PatientID, AccessionNumber FROM Scan WHERE State < 300 And State >= 200 ORDER BY ScanDateTime ASC"; result = SQLHelper::queryValues(sql); for (const QVariant &variant : result) { QList record = variant.value>(); QString scanID = record[0].toString(); QString referenceID = record[1].toString(); - // QString patientID = record[2].toString();; - //TODO:need StudyUID & MPPS Uid - QString studyUID; - QString mppsUID; - emit createScanToRecon(scanID, studyUID,mppsUID, referenceID, RECON_TRANSFER_PATH + "/" + scanID); + QString patientID = record[2].toString(); + QString AccessionNumber = record[3].toString(); + + QString pat_sql = "SELECT AccessionNumber, StudyUID, Modality, MPPSUID FROM Patient WHERE PatientID=:patID and AccessionNumber=:accno"; + QMap map; + QMap params; + params[":patID"] = patientID; + params[":accno"] = AccessionNumber; + + SQLHelper::QueryFirst(pat_sql, map, params); + QString studyUID = map.contains("StudyUID")?map["StudyUID"].toString():""; + QString mppsUID = map.contains("MPPSUID")?map["MPPSUID"].toString():""; + emit createScanToRecon(scanID, studyUID, mppsUID, referenceID, RECON_TRANSFER_PATH + "/" + scanID); } startTransfer(); } diff --git a/src/forms/scan/ScanFormWidget.cpp b/src/forms/scan/ScanFormWidget.cpp index 57f6a5a..eefd9cc 100644 --- a/src/forms/scan/ScanFormWidget.cpp +++ b/src/forms/scan/ScanFormWidget.cpp @@ -20,18 +20,20 @@ #include "components/CoordinateXYWidget.h" #include "components/CoordinateZWidget.h" #include "utilities/ScanProcessSequence.h" +#include "dicom/MPPSManager.h" #ifdef WIN32 #else #include #endif -namespace{ +namespace +{ const size_t PREVIEW_ROW = 140; const size_t PREVIEW_COL = 140; const float PIXEL_SPACING = 1.5f; const float HALF_ROI_WIDTH = 100.0f; - const unsigned int DRAINAGE_TIME = 180000; //3 minitues + const unsigned int DRAINAGE_TIME = 180000; // 3 minitues } ScanFormWidget::ScanFormWidget(QWidget* parent) @@ -51,13 +53,13 @@ ScanFormWidget::ScanFormWidget(QWidget* parent) auto commandlayout = new QHBoxLayout(ui->commandWidget); initCommandWidget(commandlayout); - + //initScanControlBar(commandlayout); initScanContent(); initEvents(); mDrainageTimer->setSingleShot(true); connect(mDrainageTimer, &QTimer::timeout, this, [this]() - { + { mDrainageButton->click(); }); } @@ -93,7 +95,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) layout->addWidget(mDrainageButton); connect(mDrainageButton, &QToolButton::clicked, [=](bool aSatus) - { + { //Drainage if(aSatus && DialogManager::Default()->requestAlertMessage(tr("Make sure to open the drain valve ?"), DialogButtonMode::OkAndCancel, tr("Confirm Drainage")) == QDialog::Rejected) { @@ -120,7 +122,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) }); connect(DeviceManager::Default(), &DeviceManager::startPumpControlResult, [this](bool aIsSucessful) - { + { mDrainageButton->setEnabled(true); if(!aIsSucessful) { @@ -141,7 +143,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) connect(mAccountButton, &QToolButton::clicked, DialogManager::Default(),&DialogManager::requestEditSelfAccount); connect(mShutdownButton, &QToolButton::clicked, []() - { + { if(DialogManager::Default()->requestAlertMessage(QString(tr("Shut down now ?")), DialogButtonMode::OkAndCancel,tr("Shut Down")) == QDialog::Accepted) { LOG_USER_OPERATION("Shut Down") @@ -150,14 +152,14 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) }); connect(mWorklistButton, &QToolButton::clicked, [&]() - { + { DialogManager::Default()->requestGetWorkList(); }); connect(EventCenter::Default(), &EventCenter::AnonymousModeChanged, this, &ScanFormWidget::updateDataByAnonymousMode); connect(mStartScanButton, &QToolButton::clicked, [this]() - { + { if(mStartScanButton->isChecked()) { EventCenter::Default()->triggerEvent(GUIEvents::StartScanProcess, nullptr, nullptr); @@ -170,7 +172,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) }); connect(DeviceManager::Default(), &DeviceManager::startAutoLocateResult, [this]() - { + { mWorklistButton->setEnabled(false); mAccountButton->setEnabled(false); mDrainageButton->setEnabled(false); @@ -180,7 +182,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) }); connect(EventCenter::Default(), &EventCenter::StopScanProcess, [this]() - { + { mWorklistButton->setEnabled(true); mAccountButton->setEnabled(true); mDrainageButton->setEnabled(true); @@ -196,12 +198,12 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) }); connect(EventCenter::Default(), &EventCenter::RequestPatientScan, [this]() - { + { mScanProcessLabel->setText(tr("Data scanning, please keep the current position and don't move.")); }); connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::fullScanDataExport, [this]() - { + { mScanProcessLabel->setText(tr("Data exporting, patient can leave the holder")); }); @@ -228,7 +230,7 @@ void ScanFormWidget::initScanContent() QWidget* displayWidget = new QWidget(this); scanProcessLayout->addWidget(displayWidget); - + QHBoxLayout* displayLayout = new QHBoxLayout(displayWidget); QWidget* xyWidget = new QWidget(this); @@ -248,39 +250,39 @@ void ScanFormWidget::initScanContent() void ScanFormWidget::initScanControlBar(QHBoxLayout *layout) { -// connect(mBtnEScan, &QToolButton::clicked, [=]() { -// int result = DialogManager::Default()->requestAlertMessage(tr("Please make sure the holder is only contain water!"),DialogButtonMode::OkAndCancel,tr("Confirm Scan")); -// if (result != QDialog::Accepted)return; -// QString patientInf(mPatInf->getCurrentPatientJsonString(true)); -// LOG_USER_OPERATION("Start Empty Scan") -// EventCenter::Default()->triggerEvent(RequestEmptyScan, nullptr, (QObject*)(&patientInf)); -// }); -// connect(mBtnPreview, &QToolButton::clicked, [=]() { -// LOG_USER_OPERATION(QString("Start Preview, ID: %1").arg(mPatInf->getPatientID())) -// EventCenter::Default()->triggerEvent(RequestPreviewScan, nullptr, nullptr); - -// }); + // connect(mBtnEScan, &QToolButton::clicked, [=]() { + // int result = DialogManager::Default()->requestAlertMessage(tr("Please make sure the holder is only contain water!"),DialogButtonMode::OkAndCancel,tr("Confirm Scan")); + // if (result != QDialog::Accepted)return; + // QString patientInf(mPatInf->getCurrentPatientJsonString(true)); + // LOG_USER_OPERATION("Start Empty Scan") + // EventCenter::Default()->triggerEvent(RequestEmptyScan, nullptr, (QObject*)(&patientInf)); + // }); + // connect(mBtnPreview, &QToolButton::clicked, [=]() { + // LOG_USER_OPERATION(QString("Start Preview, ID: %1").arg(mPatInf->getPatientID())) + // EventCenter::Default()->triggerEvent(RequestPreviewScan, nullptr, nullptr); + + // }); -// connect(mBtnScan, &QToolButton::clicked, [=]() { -// if(JsonObject::Instance()->getScanConfirm()) -// { -// int ret = DialogManager::Default()->requestPatientConfirm(mPatInf->getPatientInformation(),mPatInf->getProtocol()); -// if (ret != QDialog::Accepted) return; -// } -// QString patientInf(mPatInf->getCurrentPatientJsonString(false)); -// LOG_USER_OPERATION(QString("Start Scan, ID: %1").arg(mPatInf->getPatientID())) -// if (!DeviceManager::Default()->hasValidEmptyScan()){ -// QString msg(tr("No refresh data exists, please do Refresh operation first.")); -// EventCenter::Default()->triggerEvent(DeviceErrorRaise, nullptr, (QObject*)(&msg)); -// return; -// } -// EventCenter::Default()->triggerEvent(RequestPatientScan, nullptr, (QObject*)(&patientInf)); -// }); -// connect(mBtnStop, &QToolButton::clicked, [=]() { -// LOG_USER_OPERATION("Stop Preview") -// EventCenter::Default()->triggerEvent(RequestPreviewStop, nullptr, nullptr); -// }); + // connect(mBtnScan, &QToolButton::clicked, [=]() { + // if(JsonObject::Instance()->getScanConfirm()) + // { + // int ret = DialogManager::Default()->requestPatientConfirm(mPatInf->getPatientInformation(),mPatInf->getProtocol()); + // if (ret != QDialog::Accepted) return; + // } + // QString patientInf(mPatInf->getCurrentPatientJsonString(false)); + // LOG_USER_OPERATION(QString("Start Scan, ID: %1").arg(mPatInf->getPatientID())) + // if (!DeviceManager::Default()->hasValidEmptyScan()){ + // QString msg(tr("No refresh data exists, please do Refresh operation first.")); + // EventCenter::Default()->triggerEvent(DeviceErrorRaise, nullptr, (QObject*)(&msg)); + // return; + // } + // EventCenter::Default()->triggerEvent(RequestPatientScan, nullptr, (QObject*)(&patientInf)); + // }); + // connect(mBtnStop, &QToolButton::clicked, [=]() { + // LOG_USER_OPERATION("Stop Preview") + // EventCenter::Default()->triggerEvent(RequestPreviewStop, nullptr, nullptr); + // }); } @@ -300,11 +302,11 @@ void ScanFormWidget::prepareStartFullScan() void ScanFormWidget::setPreviewing(bool val) { -// mBtnPreview->setCheckable(val); -// mBtnPreview->setChecked(val); -// mBtnPreview->setEnabled(!val); -// mBtnEScan->setEnabled(!val); -// mBtnScan->setEnabled(!val); + // mBtnPreview->setCheckable(val); + // mBtnPreview->setChecked(val); + // mBtnPreview->setEnabled(!val); + // mBtnEScan->setEnabled(!val); + // mBtnScan->setEnabled(!val); mDrainageButton->setEnabled(!val); } @@ -383,9 +385,14 @@ void ScanFormWidget::initEvents() mPatInf->setPatientInformation(patientInfo->Copy(), protocal); setScanProtocal(protocal); LOG_USER_OPERATION(QString("Select Patient, ID: %1").arg(patientInfo->ID)) + if (JsonObject::Instance()->getMppsOpen() && !patientInfo->SPSID.isEmpty() && patientInfo->MPPSUID.isEmpty()) + { + MPPSManager::getInstance()->setPatientUID(patientInfo->PatientUID); + } mStartScanButton->setEnabled(true); EventCenter::Default()->triggerEvent(SetSelectedPatient, nullptr, patientInfo); mStartScanButton->click(); + } // mBtnScan->setEnabled(true); @@ -431,10 +438,10 @@ QString ScanFormWidget::getAutoLocateMessage() ScanPosition position = ScanProcessSequence::getInstance()->topPosition(); switch (position) { - case ScanPosition::Left: - return tr("Left side scan initiated, auto positioning in progress."); - case ScanPosition::Right: - return tr("Right side scan initiated, auto positioning in progress."); + case ScanPosition::Left: + return tr("Left side scan initiated, auto positioning in progress."); + case ScanPosition::Right: + return tr("Right side scan initiated, auto positioning in progress."); } return QString(""); } @@ -444,22 +451,22 @@ void ScanFormWidget::setScanProtocal(int aProtocal) ScanProcessSequence::getInstance()->clear(); switch (aProtocal) { - case ScanProtocal::LSTAND: - ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Right); - ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Left); - return; - case ScanProtocal::RSTAND: - ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Left); - ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Right); - return; - case ScanProtocal::LONE: - ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Left); - return; - case ScanProtocal::RONE: - ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Right); - return; - default: - return; + case ScanProtocal::LSTAND: + ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Right); + ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Left); + return; + case ScanProtocal::RSTAND: + ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Left); + ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Right); + return; + case ScanProtocal::LONE: + ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Left); + return; + case ScanProtocal::RONE: + ScanProcessSequence::getInstance()->pushPosition(ScanPosition::Right); + return; + default: + return; } } @@ -468,54 +475,54 @@ void ScanFormWidget::keyPressEvent(QKeyEvent* aEvent) { switch (aEvent->key()) { - case Qt::Key_0: - case Qt::Key_1: - case Qt::Key_2: - case Qt::Key_3: - case Qt::Key_4: - case Qt::Key_5: - case Qt::Key_6: - case Qt::Key_7: - case Qt::Key_8: - case Qt::Key_9: - case Qt::Key_A: - case Qt::Key_B: - case Qt::Key_C: - case Qt::Key_D: - case Qt::Key_E: - case Qt::Key_F: - case Qt::Key_G: - case Qt::Key_H: - case Qt::Key_I: - case Qt::Key_J: - case Qt::Key_K: - case Qt::Key_L: - case Qt::Key_M: - case Qt::Key_N: - case Qt::Key_O: - case Qt::Key_P: - case Qt::Key_Q: - case Qt::Key_R: - case Qt::Key_S: - case Qt::Key_T: - case Qt::Key_U: - case Qt::Key_V: - case Qt::Key_W: - case Qt::Key_X: - case Qt::Key_Y: - case Qt::Key_Z: - { - WorkListManager::getInstance()->setSearchString(aEvent->text()); - break; - } - case Qt::Key_Enter: - case Qt::Key_Return: - { - QString text = WorkListManager::getInstance()->getSearchString(); - EventCenter::Default()->triggerEvent(InputWorkListSearchValue, nullptr, (QObject*)&text); - break; - } - default: + case Qt::Key_0: + case Qt::Key_1: + case Qt::Key_2: + case Qt::Key_3: + case Qt::Key_4: + case Qt::Key_5: + case Qt::Key_6: + case Qt::Key_7: + case Qt::Key_8: + case Qt::Key_9: + case Qt::Key_A: + case Qt::Key_B: + case Qt::Key_C: + case Qt::Key_D: + case Qt::Key_E: + case Qt::Key_F: + case Qt::Key_G: + case Qt::Key_H: + case Qt::Key_I: + case Qt::Key_J: + case Qt::Key_K: + case Qt::Key_L: + case Qt::Key_M: + case Qt::Key_N: + case Qt::Key_O: + case Qt::Key_P: + case Qt::Key_Q: + case Qt::Key_R: + case Qt::Key_S: + case Qt::Key_T: + case Qt::Key_U: + case Qt::Key_V: + case Qt::Key_W: + case Qt::Key_X: + case Qt::Key_Y: + case Qt::Key_Z: + { + WorkListManager::getInstance()->setSearchString(aEvent->text()); + break; + } + case Qt::Key_Enter: + case Qt::Key_Return: + { + QString text = WorkListManager::getInstance()->getSearchString(); + EventCenter::Default()->triggerEvent(InputWorkListSearchValue, nullptr, (QObject*)&text); + break; + } + default: break; } QWidget::keyPressEvent(aEvent);