Add check recon connection and restart create recon record.

This commit is contained in:
sunwen
2023-09-06 18:01:48 +08:00
parent f9a99925a6
commit 663b8d8f35
9 changed files with 80 additions and 5 deletions

View File

@@ -147,7 +147,10 @@ void DeviceManager::initDevice()
connect(ReconManager::getInstance(), &ReconManager::createEmptyScanResponsed, this, &DeviceManager::processReconCreateEmptyScan);
connect(this, &DeviceManager::queryScanStatusToRecon, ReconManager::getInstance(), &ReconManager::queryReconStatus);
connect(ReconManager::getInstance(), &ReconManager::queryReconStateResponsed, this, &DeviceManager::processReconQueryScanState);
connect(ReconManager::getInstance(), &ReconManager::restartCreatReconRecord, this, &DeviceManager::startCreateReconRecord);
connect(ReconManager::getInstance(), &ReconManager::checkReconConnectionResponsed, this, &DeviceManager::updateReconConnectionState);
mReconHttpThread->start();
QMetaObject::invokeMethod(ReconManager::getInstance(), "checkReconConnection", Qt::QueuedConnection);
//init dms status--------------------make a function future
if(JsonObject::Instance()->isDmsSimulator())
@@ -855,7 +858,10 @@ void DeviceManager::processTransferProgress(const QString& aProgress)
}
emitInfoCallback("Scan data transfer Succeeded!", MessageLevel::Sucess);
emit transferStatusUpdated();
startCreateReconRecord();
if(ReconManager::getInstance()->isConnected())
{
startCreateReconRecord();
}
startTransfer();
break;
}
@@ -973,6 +979,11 @@ void DeviceManager::initEmptyScanMeasurementID()
void DeviceManager::updateReconState()
{
if(!ReconManager::getInstance()->isConnected())
{
emitInfoCallback(tr("Recon disconnected."), MessageLevel::Error);
return;
}
QString sql = "SELECT ScanID FROM Scan WHERE State < 999 And State >= 300";
auto result = SQLHelper::queryValues(sql);
QStringList scanIDs;
@@ -1046,3 +1057,8 @@ void DeviceManager::controlDrainage(const QString& aCode)
QString msg = tr("Open pump failed.");
THROW_ERROR(msg);
}
void DeviceManager::updateReconConnectionState(bool aIsConnected)
{
EventCenter::Default()->triggerEvent(ReconConnectionUpdated, nullptr, (QObject*)&aIsConnected);
}

View File

@@ -92,7 +92,6 @@ private:
void startScan(const QString& json, bool empty = false);
void startPreview();
void shutdown();
void startCreateReconRecord();
//-----------------new
DeviceStatus getDeviceStatus();
@@ -129,6 +128,8 @@ private slots:
void processReconCreateEmptyScan(bool aResult, const QString& aScanID, const QString& aMessage);
void processReconCreateScan(bool aResult, const QString& aScanID, const QString& aMessage);
void processReconQueryScanState(bool aResult, const QVariant& aState);
void startCreateReconRecord();
void updateReconConnectionState(bool aIsConnected);
//GUI
void scanTimeout();

View File

@@ -35,7 +35,8 @@ ADD_EVENT_VALUE(ReloadLanguage)\
ADD_EVENT_VALUE(WarnStateFlagChange)\
ADD_EVENT_VALUE(GUIErrorRaise)\
ADD_EVENT_VALUE(DeviceInfoRaise)\
ADD_EVENT_VALUE(RequestScreenSaver)
ADD_EVENT_VALUE(RequestScreenSaver)\
ADD_EVENT_VALUE(ReconConnectionUpdated)
enum GUIEvents {
#define ADD_EVENT_VALUE(val) val,

View File

@@ -43,6 +43,14 @@ TopBarWidget::TopBarWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent,
nowDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
auto linkIcon = new QLabel(this);
linkIcon->setObjectName("link");
QPixmap pixmap(":/icons/link_r.png");
linkIcon->setPixmap(pixmap);
connect(EventCenter::Default(), &EventCenter::ReconConnectionUpdated,[linkIcon](QObject*, QObject* msg)
{
bool* isConnected = (bool*)msg;
QPixmap pixmap(*isConnected ? ":/icons/link_g.png" : ":/icons/link_r.png");
linkIcon->setPixmap(QPixmap(pixmap));
});
auto readyIcon = new QLabel(this);
readyIcon->setObjectName("ready");
auto lockIcon = new QLabel(this);

View File

@@ -6,6 +6,7 @@
#include <string>
namespace {
const char* CREATE_URL = "/Scan/Create/";
const char* CHECK_URL = "/v/";
const char* QUERY_SCAN_URL = "/Scan/Query/";
const char* QUERY_VERSION_URL = "/Version/";
const char* QUERY_RECON_URL = "/Task/Query/";
@@ -31,6 +32,21 @@ namespace Recon {
mHost = aHost;
}
RequestResult ReconClient::CheckActive(){
std::string content;
content.append("1");
auto resp = mRequest.post(mHost+CHECK_URL,content,mHeaders);
if (resp->httpCode() == 200){
delete resp;
return RequestResult::Success();
}
else{
mErrorMessage = resp->getContent();
delete resp;
return RequestResult::Fail(mErrorMessage);
}
}
RequestResult ReconClient::Create( const Scan& aScan)
{
cJSON * obj = cJSON_CreateObject();

View File

@@ -11,6 +11,7 @@ namespace Recon {
ReconClient(std::string aCerPath, std::string aKeyPath);
~ReconClient();
void SetHost(const std::string& aHost);
RequestResult CheckActive();
RequestResult Create(const Scan& aScan);
RequestResult QueryScan(const std::string& aScanID, int& state);
RequestResult QueryReconID(const std::string& aScanID, std::string& aReconID);

View File

@@ -2,12 +2,14 @@
#include "ReconClient.h"
#include "json/jsonobject.h"
#include <QTimer>
#include "QDebug"
namespace
{
const std::string CRT_FILE = "./cfgs/client.crt";
const std::string KEY_FILE = "./cfgs/client.key";
const int CHECK_RECON_CONNECTION_TIME = 30000;
std::string toReconServerAddress(const QString& aIp, const QString& aPort)
{
@@ -24,8 +26,12 @@ ReconManager* ReconManager::getInstance()
ReconManager::ReconManager(QObject* aParent)
: QObject(aParent)
, mReconClient(new Recon::ReconClient(CRT_FILE, KEY_FILE))
, mTimer(new QTimer(this))
, mIsConnected(false)
{
init();
connect(mTimer, &QTimer::timeout, this, &ReconManager::checkReconConnection);
mTimer->start(CHECK_RECON_CONNECTION_TIME);
}
ReconManager::~ReconManager()
@@ -95,6 +101,20 @@ void ReconManager::queryReconStatus(const QStringList& aScanIDs)
emit queryReconStateResponsed(true, QVariant::fromValue(result));
}
void ReconManager::checkReconConnection()
{
auto response = mReconClient->CheckActive();
if(mIsConnected != response.good())
{
emit checkReconConnectionResponsed(response.good());
}
if(mIsConnected == false && response.good())
{
emit restartCreatReconRecord();
}
mIsConnected = response.good();
}
void ReconManager::setPacsSettings(const QString& aClientAETitle, const QString& aServerAETitle, const QString& aServerIP, int aServerPort)
{
PACSSetting settings = {aClientAETitle.toStdString(), aServerAETitle.toStdString(), aServerIP.toStdString(), aServerPort};
@@ -109,3 +129,8 @@ void ReconManager::setPacsSettings(const QString& aClientAETitle, const QString&
emit setPacsSettingsResponsed(true, QVariant::fromValue(QString("Set PACS settings succeed.")));
}
bool ReconManager::isConnected()
{
return mIsConnected;
}

View File

@@ -3,6 +3,8 @@
#include <QObject>
class QTimer;
namespace Recon
{
class ReconClient;
@@ -18,24 +20,30 @@ public:
public:
void setReconIpAndPort(const QString& aIp, const QString& aPort);
bool isConnected();
public slots:
void createEmptyScan(const QString& aScanID, const QString& aPath);
void createScan(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID, const QString& aPath);
void queryReconStatus(const QStringList& aScanIDs);
void setPacsSettings(const QString& aClientAETitle, const QString& aServerAETitle, const QString& aServerIP, int aServerPort);
void checkReconConnection();
private:
void init();
signals:
void restartCreatReconRecord();
void createEmptyScanResponsed(bool aResult, const QString& aScanID, const QString& aMessage = "");
void createScanResponsed(bool aResult, const QString& aScanID, const QString& aMessage = "");
void queryReconStateResponsed(bool aResult, const QVariant& aData);
void setPacsSettingsResponsed(bool aResult, const QVariant& aMessage);
void checkReconConnectionResponsed(bool aResult);
private:
Recon::ReconClient* mReconClient;
QTimer* mTimer;
bool mIsConnected;
};
#endif // RECONMANAGER_H

View File

@@ -350,7 +350,6 @@ QLabel#link {
max-width: 28px;
min-height: 28px;
max-height: 28px;
qproperty-pixmap:url(":/icons/link_g.png");
qproperty-scaledContents:true;
}