diff --git a/cfgs/usct-product.json b/cfgs/usct-product.json index 11c4242..3a2f131 100644 --- a/cfgs/usct-product.json +++ b/cfgs/usct-product.json @@ -28,7 +28,7 @@ "AnonymousMode": false }, "protocol": { - "default": "0", + "default": "1", "lists": "0;1;2;3" }, "storagepolicy": { @@ -42,12 +42,12 @@ "lastlogin": { "password": "", "remember": "false", - "usercode": "" + "usercode": "usct" }, "worklist": { "ae": "WORKLIST", "ip": "192.168.1.6", - "localAE": "gui2", + "localAE": "gui", "port": "11112" }, "pacs": { @@ -58,14 +58,14 @@ }, "recon": { "ae": "server9D", - "ip": "192.168.1.153", + "ip": "192.168.1.2", "localAE": "3D recon", "port": "5003", - "transferPath": "", - "scancanwithoutrecon": false + "transferPath": "/home/krad/Storage/Raw", + "scancanwithoutrecon": true }, "mpps": { - "open": true, + "open": false, "ae": "WORKLIST", "ip": "192.168.1.6", "localAE": "gui2", @@ -101,8 +101,10 @@ }] }, "worklistfilter": { - "modality": "US", - "date": "0" + "default": "Recent3Days", + "lists": "Today;Recent3Days;ThisWeek;ThisMonth", + "date": "-1", + "modality": "" }, "screensaver": { "open": false, @@ -119,5 +121,9 @@ }, "reconlist": { "expire": "30" + }, + "filter": { + "usage": "0", + "maximumusage": "100" } } diff --git a/src/forms/scan/ScanFormWidget.cpp b/src/forms/scan/ScanFormWidget.cpp index 69260ce..1df48f7 100644 --- a/src/forms/scan/ScanFormWidget.cpp +++ b/src/forms/scan/ScanFormWidget.cpp @@ -22,6 +22,7 @@ #include "components/WaveWidget.h" #include "components/ZFlashWidget.h" #include "utilities/ScanProcessSequence.h" +#include "utilities/FilterUsageCalculator.h" #include "dicom/MPPSManager.h" #ifdef WIN32 @@ -127,7 +128,9 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) connect(mWaterfloodButton, &QToolButton::clicked, [this](bool aStatus) { - if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if water injection is required ?"), DialogButtonMode::OkAndCancel, tr("Confirm Water Injection")) == QDialog::Rejected) + QString filterMessage = FilterUsageCalculator::getCurrentFilterUsage() > FilterUsageCalculator::getMaximumFilterUsage() ? + tr("\n(The filter element has expired, please pay attention to replacing the filter element)"):""; + if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if water injection is required ?") + filterMessage, DialogButtonMode::OkAndCancel, tr("Confirm Water Injection")) == QDialog::Rejected) { mWaterfloodButton->setChecked(!aStatus); return; @@ -169,7 +172,9 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) connect(mCleanButton, &QToolButton::clicked, [this](bool aStatus) { - if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if cleaning and disinfection are required. ?"), DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Rejected) + QString filterMessage = FilterUsageCalculator::getCurrentFilterUsage() > FilterUsageCalculator::getMaximumFilterUsage() ? + tr("\n(The filter element has expired, please pay attention to replacing the filter element)"):""; + if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if cleaning and disinfection are required ?") + filterMessage, DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Rejected) { mCleanButton->setChecked(!aStatus); return; @@ -279,6 +284,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) switch (mWaterProcessMode) { case WaterFloodMode: + FilterUsageCalculator::addFilterUsageByWaterFloodMode(); message = tr("Waterflood finished."); DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm Water Injection")); break; @@ -392,6 +398,7 @@ void ScanFormWidget::processWaterCleanResult() switch (mWaterCleanStep) { case FirstWaterClean: + FilterUsageCalculator::addFilterUsageByCleanMode(); message = tr("Please click the confirm button for cleaning after disinfection."); if(DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Accepted) { @@ -399,6 +406,7 @@ void ScanFormWidget::processWaterCleanResult() } break; case SecondWaterClean: + FilterUsageCalculator::addFilterUsageByCleanMode(); message = tr("cleanning finished."); DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm cleaning")); break; diff --git a/src/forms/settings/GeneralForm.cpp b/src/forms/settings/GeneralForm.cpp index 9b0c3af..a707847 100644 --- a/src/forms/settings/GeneralForm.cpp +++ b/src/forms/settings/GeneralForm.cpp @@ -23,6 +23,7 @@ #include "utilities/GetLockScreenTimeHelper.h" #include "utilities/GetProtocalHelper.h" #include "utilities/WorklistFilterHelper.h" +#include "utilities/FilterUsageCalculator.h" GeneralForm::GeneralForm(QWidget* aParent) : QWidget(aParent) @@ -119,6 +120,19 @@ GeneralForm::GeneralForm(QWidget* aParent) worklistFilterDateHeaderLayout->addWidget(worklistFilterDateButton); worklistFilterDateHeaderLayout->addSpacerItem(new QSpacerItem(1000, 20, QSizePolicy::Fixed)); + //Filter Usage Reset + QWidget* filterUsageHeader = new QWidget(this); + mLayout->addWidget(filterUsageHeader); + QHBoxLayout* filterUsageLayout = new QHBoxLayout(filterUsageHeader); + QLabel* filterUsageLabel = new QLabel(tr("Filter Usage Reset"), this); + filterUsageLayout->addWidget(filterUsageLabel); + filterUsageLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); + QPushButton* filterUsageResetButton = new QPushButton(filterUsageHeader); + filterUsageResetButton->setFixedWidth(180); + filterUsageResetButton->setText(tr("Reset")); + filterUsageLayout->addWidget(filterUsageResetButton); + filterUsageLayout->addSpacerItem(new QSpacerItem(1000, 20, QSizePolicy::Fixed)); + //Complete Notify QWidget* scanCompleteHeader = new QWidget(this); mLayout->addWidget(scanCompleteHeader); @@ -304,6 +318,14 @@ GeneralForm::GeneralForm(QWidget* aParent) } }); + connect(filterUsageResetButton, &QPushButton::clicked, []() + { + if (DialogManager::Default()->requestAlertMessage(tr("Please confirm if the filter usage reset is required?"),DialogButtonMode::OkAndCancel) == QDialog::Accepted) + { + FilterUsageCalculator::clearFilterUsage(); + } + }); + connect(scanCompleteButton, &ImageSwitch::clicked, [=]() { bool isOpen = scanCompleteButton->getChecked(); diff --git a/src/json/jsonobject.cpp b/src/json/jsonobject.cpp index f08eccc..b82a284 100644 --- a/src/json/jsonobject.cpp +++ b/src/json/jsonobject.cpp @@ -14,6 +14,7 @@ namespace const char* strProductFileName = "./cfgs/usct-product.json"; const char* strProductFileNameDefault = "./cfgs/usct-product"; const QString DEFAULT_RECON_TRANSFER_PATH = "/home/eq9/Tools/ReconTest/storage/Raw"; + const int DEFAULT_MAXIMUM_FILTER_USAGE = 100; } JsonObject::JsonObject() @@ -74,6 +75,9 @@ void JsonObject::init() mOperationLogExpireDays = QString(getJsonString("operatorlog", "expire")).toInt(); mPatientListExpireDays = QString(getJsonString("patientlist", "expire")).toInt(); mScanListExpireDays = QString(getJsonString("reconlist", "expire")).toInt(); + mFilterUsage = QString(getJsonString("filter","usage")).toInt(); + int maximumFilterUsage = QString(getJsonString("filter","maximumusage")).toInt(); + mMaximumFilterUsage = maximumFilterUsage <=0? DEFAULT_MAXIMUM_FILTER_USAGE : maximumFilterUsage; mWorklistHost.ae = QString(getJsonString("worklist", "ae")); mWorklistHost.ip = QString(getJsonString("worklist", "ip")); @@ -695,3 +699,20 @@ void JsonObject::setWorklistFilterDate(const QString& aDate) mWorklistFilterDays = aDate; setJsonString("worklistfilter","date", aDate.toStdString().c_str()); } + +int JsonObject::getFilterUsage() +{ + return mFilterUsage; +} + +void JsonObject::setFilterUsage(int aUsage) +{ + mFilterUsage = aUsage; + setJsonString("filter", "usage", QString::number(mFilterUsage).toStdString().c_str()); +} + +int JsonObject::getFilterMaximumUsage() +{ + return mMaximumFilterUsage; +} + diff --git a/src/json/jsonobject.h b/src/json/jsonobject.h index eab439d..5a3c7e4 100644 --- a/src/json/jsonobject.h +++ b/src/json/jsonobject.h @@ -135,6 +135,10 @@ public: QString getWorklistFilterDate(); void setWorklistFilterDate(const QString& aDate); + int getFilterUsage(); + void setFilterUsage(int aUsage); + int getFilterMaximumUsage(); + private: void setJsonString(const char* catergory, const char* stringName, const char* stringValue, bool save = true); @@ -182,6 +186,9 @@ private: int mOperationLogExpireDays; int mPatientListExpireDays; int mScanListExpireDays; + int mFilterUsage; + int mMaximumFilterUsage; + host mWorklistHost; host mPacsHost; diff --git a/src/translations/en_US.ts b/src/translations/en_US.ts index 988ebfe..f21845f 100644 --- a/src/translations/en_US.ts +++ b/src/translations/en_US.ts @@ -654,6 +654,18 @@ After lying down, click the confirm buttonto start scanning on the next side.Worklist Date Filter + + Filter Usage Reset + + + + Reset + + + + Please confirm if the filter usage reset is required? + + GetAdminPsw @@ -1600,10 +1612,6 @@ The emergency button has been pushed. Please reset it before other operations.Please confirm if drainage is required ? - - Please confirm if cleaning and disinfection are required. ? - - Confirm cleaning @@ -1660,6 +1668,15 @@ The emergency button has been pushed. Please reset it before other operations.Drainage finished. Please do the disinfection in next step. + + +(The filter element has expired, please pay attention to replacing the filter element) + + + + Please confirm if cleaning and disinfection are required ? + + ScanSearchCriteriaForm diff --git a/src/translations/zh_CN.ts b/src/translations/zh_CN.ts index ed9930e..9ac6430 100644 --- a/src/translations/zh_CN.ts +++ b/src/translations/zh_CN.ts @@ -468,89 +468,89 @@ DeviceManager - - - - + + + + DMS connection error DMS失去连接 - - + + progress:%1% 进度:%1% - + Patient can leave. progress:%1% 检查对象可以起身 进度:%1% - + Data quality assessment in progress progress:99% 数据质量判断中 进度:99% - - - + + + Initialize Failed. 初始化失败 - + Fail to connect to DB!Reboot device to try! 数据库连接失败,请重启设备后再试! - + Device is not ready, start scan operation failed! 设备状态错误,无法开始检查流程 - + Device is not ready, start empty scan operation failed! 设备状态错误,无法开始空水扫查 - + Scan completed! Please prepare for the next scan. After lying down, click the confirm buttonto start scanning on the next side. 扫查结束,请准备下一侧扫查。 请在趴好后再点击确认按钮! - + Scan completed! 扫查结束 - + Error: 错误: - + Start scan failed. Reason:time out. 扫查启动失败,原因:超时 - + Start scan failed. Reason:%1 扫查启动失败,原因:%1 - + Start CE Scan Failed. CE扫查启动失败 - + Shut down failed, please push emergency button to shutdown. 关机失败,请按紧急按钮进行关机。 @@ -559,55 +559,55 @@ After lying down, click the confirm buttonto start scanning on the next side.扫查数据上传失败 - + Create empty scan data failed 空水数据新增失败 - + Create scan data failed 扫查数据新增失败 - + Recon disconnected. 重建服务器已断开连接 - - + + Open pump failed. 排水阀打开失败 - - + + Water injection failed. 注水启动失败 - - + + Cleaning failed. 清洁启动失败 - + Recon error, can't start scan process 重建服务器错误,无法开始检查流程 - + Start auto locate failed 自动化定位启动失败 - + The data quality is low, please restart the data scan. 扫查数据质量较低,请重新开始检查流程 - + Device reset failed, please contact maintenance person 设备复位失败,请联系维修人员 @@ -872,62 +872,72 @@ After lying down, click the confirm buttonto start scanning on the next side. GeneralForm - - + + Language 语言 - + Institution Name 机构名称 - - - + + + Institution Addr 机构地址 - - + + Lock Screen 锁屏时间 - - + + Scan Protocol 默认检查协议 - - + + Worklist Modality Filter Worklist模态过滤器 - - + + Worklist Date Filter Worklist时间过滤器 - - + + Filter Usage Reset + 重置滤芯使用量 + + + + Reset + 重置 + + + + Anonymous Mode 匿名模式 - - + + Screen Saver 屏保 - - + + Complete Notify 检查结束确认 @@ -936,8 +946,8 @@ After lying down, click the confirm buttonto start scanning on the next side.Worklist过滤器 - - + + Disk Storage 磁盘存储 @@ -946,22 +956,27 @@ After lying down, click the confirm buttonto start scanning on the next side.中文 - + Used: %1G - + Total: %1G - + Get disk used size fail! 磁盘使用空间获取失败! - + + Please confirm if the filter usage reset is required? + 请确认是否重置滤芯用量? + + + Get disk total size fail! 磁盘总空间获取失败! @@ -2247,7 +2262,7 @@ The emergency button has been pushed. Please reset it before other operations.PACS设置成功 - + Can't connect to Recon server @@ -2375,39 +2390,39 @@ The emergency button has been pushed. Please reset it before other operations.空扫 - - - - - - + + + + + + Drainage 排水 - - + + Account 账户 - + Drainage time out 排水运行超时 - + Waterflood time out 注水运行超时 - + Clean time out 清洁运行超时 - - + + ShutDown 关机 @@ -2416,155 +2431,163 @@ The emergency button has been pushed. Please reset it before other operations.录入检查对象 - - + + Start Scan 开始检查流程 - - - - + + + + Waterflood 注水 - - - - + + + + Clean 清洁 - + Please confirm if water injection is required ? 请确认是否进行注水? - - + + Confirm Water Injection 注水确认 - - + + Waterflooding 注水中 - - + + Confirm Drainage 排水确认 - + Please confirm if drainage is required ? 请确认是否进行排水? - - + + Drainaging 排水中 - - Please confirm if cleaning and disinfection are required. ? - 请确认是否进行清洁消毒? - - - - + + Confirm cleaning 清洁确认 - - - - + + + + Cleaning 清洁中 - + exit failed. 退出失败 - + Waterflood finished. 注水完成 - + Please click the confirm button for cleaning after disinfection. 请消毒完成后,再点击确认按钮进行清洁 - + Waterflood failed. 注水失败 - + + + +(The filter element has expired, please pay attention to replacing the filter element) + +(滤芯到期,请注意更换滤芯) + + + + Please confirm if cleaning and disinfection are required ? + 请确认是否进行清洁消毒? + + + Drainage finished. Please do the disinfection in next step. 排水完成,请下一步进行清洁消毒 - + Drainage failed. 排水失败 - + Clean failed. 清洁失败 - + Shut down now ? 是否需要进行设备关机操作,请确认? - + Shut Down 关机 - - - + + + Please confirm checking patient information to start the process 请确定检查对象信息开始流程 - + Data scanning, please keep the current position and don't move. 数据扫查中,请检查对象保持当前姿势,不要移动 - + Data exporting, patient can leave the holder 数据导出中,检查对象可以离开检查仓 - + cleanning finished. 清洁完成 - + Left side scan initiated, auto positioning in progress. 左侧扫查启动,自动定位中 - + Right side scan initiated, auto positioning in progress. 右侧扫查启动,自动定位中 @@ -3234,29 +3257,29 @@ parameters WarningMessageWidget - + System is working properly. - + No message. - - + + System Status - - + + System Notifications - + Clear diff --git a/src/utilities/FilterUsageCalculator.cpp b/src/utilities/FilterUsageCalculator.cpp new file mode 100644 index 0000000..8cc0ee6 --- /dev/null +++ b/src/utilities/FilterUsageCalculator.cpp @@ -0,0 +1,32 @@ +#include "FilterUsageCalculator.h" + +#include "json/jsonobject.h" + +void FilterUsageCalculator::clearFilterUsage() +{ + JsonObject::Instance()->setFilterUsage(0); +} + +void FilterUsageCalculator::addFilterUsageByCleanMode() +{ + int filterUsage = JsonObject::Instance()->getFilterUsage(); + filterUsage +=1; + JsonObject::Instance()->setFilterUsage(filterUsage); +} + +void FilterUsageCalculator::addFilterUsageByWaterFloodMode() +{ + int filterUsage = JsonObject::Instance()->getFilterUsage(); + filterUsage +=2; + JsonObject::Instance()->setFilterUsage(filterUsage); +} + +int FilterUsageCalculator::getCurrentFilterUsage() +{ + return JsonObject::Instance()->getFilterUsage(); +} + +int FilterUsageCalculator::getMaximumFilterUsage() +{ + return JsonObject::Instance()->getFilterMaximumUsage(); +} diff --git a/src/utilities/FilterUsageCalculator.h b/src/utilities/FilterUsageCalculator.h new file mode 100644 index 0000000..bb565ca --- /dev/null +++ b/src/utilities/FilterUsageCalculator.h @@ -0,0 +1,16 @@ +#ifndef FILTERUSAGECALCULATOR_H +#define FILTERUSAGECALCULATOR_H + + +class FilterUsageCalculator +{ +public: + FilterUsageCalculator() = delete; + static void clearFilterUsage(); + static void addFilterUsageByCleanMode(); + static void addFilterUsageByWaterFloodMode(); + static int getCurrentFilterUsage(); + static int getMaximumFilterUsage(); +}; + +#endif // FILTERUSAGECALCULATOR_H