feat: Add recon state in GUI.

This commit is contained in:
sunwen
2024-05-29 14:29:58 +08:00
parent a0feff11e2
commit 23a747bde4
6 changed files with 89 additions and 23 deletions

View File

@@ -119,8 +119,8 @@ void DeviceManager::initDevice()
controlDrainage(*(QString*)detail);
});
//AutoLocate
connect(EventCenter::Default(), &EventCenter::StartScanProcess, this, &DeviceManager::startAutoLocate);
connect(EventCenter::Default(), &EventCenter::StopScanProcess, this, &DeviceManager::stopAutoLocate);
connect(EventCenter::Default(), &EventCenter::StartScanProcess, this, &DeviceManager::startScanProcess);
connect(EventCenter::Default(), &EventCenter::StopScanProcess, this, &DeviceManager::stopScanProcess);
//Sync action
mGetDeviceStatusAction = new DmsSyncAction(USRV_SCAN, ACT_SCAN_STATUS, this, "responseGetDeviceStatus(const QString&)", this);
@@ -181,7 +181,9 @@ void DeviceManager::initDevice()
QTimer* reconConnectionTimer = new QTimer(this);
reconConnectionTimer->start(CHECK_RECON_CONNECTION_TIME);
ReconManager::getInstance()->moveToThread(mReconHttpThread);
connect(reconConnectionTimer, &QTimer::timeout, ReconManager::getInstance(), &ReconManager::checkReconConnection);
connect(ReconManager::getInstance(), &ReconManager::reconStateResponsed, UsctStateManager::getInstance(), &UsctStateManager::updateReconState);
connect(this, &DeviceManager::checkReconConnection, ReconManager::getInstance(), &ReconManager::checkReconConnection);
connect(reconConnectionTimer, &QTimer::timeout, this, &DeviceManager::prepareCheckReconConnection);
connect(this, &DeviceManager::createEmptyScanToRecon, ReconManager::getInstance(), &ReconManager::createEmptyScan);
connect(this, &DeviceManager::createScanToRecon, ReconManager::getInstance(), &ReconManager::createScan);
connect(ReconManager::getInstance(), &ReconManager::createScanResponsed, this, &DeviceManager::processReconCreateScan);
@@ -306,7 +308,6 @@ void DeviceManager::startScan(const QString& json, bool empty)
{
QString msg = "Start scan...";
TRIGGER_EVENT(GUIEvents::InvokeOperationStart, nullptr, (QObject*)&msg);
AppGlobalValues::setInProcessing(true);
mIsScanning = true;
mIsEmptyScan = empty;
QJsonObject patientInfo = QJsonDocument::fromJson(json.toUtf8()).object()["Patient Info"].toObject();
@@ -376,7 +377,6 @@ void DeviceManager::prepareFinishScan(bool isNormalFinish, const QString& aReaso
killTimer(mScanProgressTimer);
mScanProgressTimer = -1;
}
AppGlobalValues::setInProcessing(false);
mIsScanning = false;
QString message = aReason;
QObject* var = message.isEmpty() ? nullptr : (QObject*)&message;
@@ -1257,6 +1257,27 @@ void DeviceManager::updateReconConnectionState(bool aIsConnected)
EventCenter::Default()->triggerEvent(ReconConnectionUpdated, nullptr, (QObject*)&aIsConnected);
}
void DeviceManager::startScanProcess()
{
if( !UsctStateManager::getInstance()->getState(ReconConnectionState) ||
!UsctStateManager::getInstance()->getState(ReconState) ||
!UsctStateManager::getInstance()->getState(ReconDBState))
{
TRIGGER_EVENT(StopScanProcess, nullptr, nullptr);
QString errorMessage = tr("Recon error, can't start scan process");
THROW_ERROR(errorMessage);
return;
}
AppGlobalValues::setInProcessing(true);
startAutoLocate();
}
void DeviceManager::stopScanProcess()
{
AppGlobalValues::setInProcessing(false);
stopAutoLocate();
}
bool DeviceManager::startAutoLocate()
{
if(ScanProcessSequence::getInstance()->getScanPositionSize() == 0)
@@ -1275,10 +1296,6 @@ bool DeviceManager::startAutoLocate()
mGetAutoLocatePositionTimer = startTimer(1000);
return true;
}
else
{
stopAutoLocate();
}
}
TRIGGER_EVENT(StopScanProcess, nullptr, nullptr);
QString errorMessage = tr("Start auto locate failed");
@@ -1361,3 +1378,12 @@ void DeviceManager::checkDataQuality()
TRIGGER_EVENT(StopScanProcess, nullptr, nullptr);
return;
}
void DeviceManager::prepareCheckReconConnection()
{
if(AppGlobalValues::InProcessing().toBool())
{
return;
}
emit checkReconConnection();
}

View File

@@ -94,6 +94,8 @@ private:
//-----------------new
DeviceStatus getDeviceStatus();
void startScanProcess();
void stopScanProcess();
bool startFullScan(const QString& aPatientInfo);
void stopFullScan();
void stopPreviewScan();
@@ -138,6 +140,7 @@ private slots:
void processReconQueryScanState(bool aResult, const QVariant& aState);
void startCreateReconRecord();
void updateReconConnectionState(bool aIsConnected);
void prepareCheckReconConnection();
//GUI
void scanTimeout();
@@ -169,6 +172,7 @@ signals:
void createScanToRecon(const QString& aScanID, const QString& aStudyUID,const QString& aMPPSUID, const QString& aReferenceID, const QString& aPath);
void queryScanStatusToRecon(const QStringList& aScanIDs);
void updateReconStateFinished();
void checkReconConnection();
//GUI
void initializeFinished();
void initializeProgress(const QString& aProgress);

View File

@@ -24,19 +24,19 @@ UsctStateManager::UsctStateManager(QObject* aParent)
void UsctStateManager::setState(int aStateCode, bool aState)
{
bool stateTemp = mState[aStateCode];
mState[aStateCode] = aState;
if(stateTemp != aState)
if(aState == mState[aStateCode])
{
bool UsctState = getUsctState();
EventCenter::Default()->triggerEvent(UsctStateUpdated, nullptr, (QObject*)&UsctState);
return;
}
mState[aStateCode] = aState;
bool UsctState = getUsctState();
EventCenter::Default()->triggerEvent(UsctStateUpdated, nullptr, (QObject*)&UsctState);
if(aState)
{
int msg = aStateCode;
EventCenter::Default()->triggerEvent(ErrorStateUnactive, nullptr, (QObject*)&msg);
}
else
{
QPair<int, QString> msg(QPair<int, QString>(aStateCode, getStateErrorMessage(aStateCode)));
EventCenter::Default()->triggerEvent(ErrorStateActive, nullptr, (QObject*)&msg);
@@ -65,6 +65,38 @@ QString UsctStateManager::getStateErrorMessage(int aStateCode)
case ReconPacsState : return "Recon Pacs Connection Error";
case ReconEmptyScanState : return "Recon Empty Scan Data Error";
case ReconDBState : return "Recon Database Connection Error";
case ReconConnectionState : return "Recon Connection Error";
default: return "Unknow Error";
}
}
void UsctStateManager::updateReconState(bool aIsConnected,int aState)
{
setState(ReconConnectionState, aIsConnected);
for (int i = 0; i < 5; ++i)
{
int mask = 1 << i;
bool result = true;
if (aState & mask)
{
result = false;
}
switch(i)
{
case ReconState: setState(ReconState, result); break;
case ReconDBState: setState(ReconDBState, result); break;
case ReconEmptyScanState: setState(ReconEmptyScanState, result); break;
case ReconPacsState: setState(ReconPacsState, result); break;
case ReconMppsState: setState(ReconMppsState, result); break;
default: break;
}
}
}
bool UsctStateManager::getState(UsctState aStateCode)
{
return mState[aStateCode];
}

View File

@@ -6,14 +6,14 @@
enum UsctState
{
DmsState = 0, //Dms是否有致命错误false代表存在致命错误
DmsConnectionState,
ReconState, //Recon是否有致命错误false代表存在致命错误
ReconMppsState,
ReconPacsState,
ReconConnectionState,
ReconState = 0, //Recon是否有致命错误false代表存在致命错误
ReconDBState,
ReconEmptyScanState,
ReconDBState
ReconPacsState,
ReconMppsState,
ReconConnectionState,
DmsState, //Dms是否有致命错误false代表存在致命错误
DmsConnectionState
};
class UsctStateManager : public QObject
@@ -24,11 +24,12 @@ public:
bool getUsctState();
void setState(int aStateCode, bool aState);
void updateReconState(bool aIsConnected,int aState);
bool getState(UsctState aStateCode);
private:
QString getStateErrorMessage(int aStateCode);
private:
UsctStateManager(QObject* aParent = nullptr);
UsctStateManager(const UsctStateManager&);

View File

@@ -110,14 +110,16 @@ void ReconManager::checkReconConnection()
emit restartCreatReconRecord();
}
mIsConnected = response.good();
int state = 0;
if (mIsConnected)
{
cJSON* json = cJSON_Parse(response.message().data());
cJSON* stateProperty = cJSON_GetObjectItem(json, "State");
int state = stateProperty->valueint;
state = stateProperty->valueint;
cJSON_Delete(json);
qDebug()<<"Recon State:"<<state;
}
emit reconStateResponsed(mIsConnected, state);
}
void ReconManager::setPacsSettings(const QString& aClientAETitle, const QString& aServerAETitle, const QString& aServerIP, int aServerPort)

View File

@@ -39,6 +39,7 @@ signals:
void setMppsSettingsResponsed(bool aResult, const QVariant& aMessage);
void checkReconConnectionResponsed(bool aResult);
void getReconVersionResponsed(const QString& aResult);
void reconStateResponsed(bool aIsConnected, int aState);
private:
ReconClient* mReconClient;