SVG5/sdatabase.cpp.old
2025-10-12 13:55:56 +09:00

2404 lines
100 KiB
C++

#include "sdatabase.h"
#include <QDebug>
#include <QDateTime>
#include "mainwindow.h"
using namespace SUTIL;
SDatabase::SDatabase(QObject *parent) : QObject(parent)
{
m_pResult = new QList<QStringList*>;
m_bExecute = false;
OpenDatabase("/home/birdhead/test.db");
}
SDatabase::~SDatabase()
{
Clear();
SAFE_DELETE(m_pResult);
CloseDatabase();
}
int SDatabase::OpenDatabase(QString strFilename)
{
int rv = 0;
rv = sqlite3_open_v2(strFilename.toStdString().c_str(), &m_pSqliteDB, SQLITE_OPEN_READWRITE, NULL);
if(rv!=SQLITE_OK)
{
if(rv==14)
{
rv = sqlite3_open_v2(strFilename.toStdString().c_str(), &m_pSqliteDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
}
if(rv!=SQLITE_OK)
{
return rv;
}
if(rv==SQLITE_OK)
{
MakeTableDataInfo();
MakeAcquisitionTempTable();
QString strInitConnectionInfo = "insert into ConnectionInfo (WorklistPort) values (0);";
Execute(strInitConnectionInfo);
QString strInitAdvancedSetting = "insert into AdvancedSetting (EnableNetworkShare) values ('Disabled');";
Execute(strInitAdvancedSetting);
QString strInitLoginUser = "insert into LoginUser (LoginID, LoginPassword) values ('admin', 'smartquadra')";
Execute(strInitLoginUser);
}
MakeViewTable();
sqlite3_exec(m_pSqliteDB, "PRAGMA synchronous = FULL;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA page_size = 4096;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA cache_size = 16384;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA temp_store = MEMORY;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA journal_mode = OFF;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA locking_mode = EXCLUSIVE;", 0, 0, 0);
return 1;
}
else
{
sqlite3_exec(m_pSqliteDB, "VACUUM;", 0, 0, 0);
//PRAGMA synchronous = OFF
//PRAGMA page_size = 4096
//PRAGMA cache_size = 16384
//PRAGMA temp_store = MEMORY
//PRAGMA journal_mode = OFF
//PRAGMA locking_mode = EXCLUSIVE
sqlite3_exec(m_pSqliteDB, "PRAGMA synchronous = FULL;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA page_size = 4096;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA cache_size = 16384;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA temp_store = MEMORY;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA journal_mode = OFF;", 0, 0, 0);
sqlite3_exec(m_pSqliteDB, "PRAGMA locking_mode = EXCLUSIVE;", 0, 0, 0);
}
int nSqlite3_ThreadSafe = sqlite3_threadsafe();
CheckAdavancedTable();
CheckLoginTable();
MakeAcquisitionTempTable();
QString strQuery;
QList<QStringList*>* pResult = NULL;
strQuery = "select * from SReserveTable;";
ExecuteQuery(strQuery);
pResult = GetResult();
if(pResult->size()==0)
{
MakeTableReserved();
QString strInitAdvancedSetting = "insert into SReserveTable (Reserve1) values ('');";
Execute(strInitAdvancedSetting);
}
MakeViewTable();
return 0;
}
void SDatabase::CloseDatabase()
{
sqlite3_close(m_pSqliteDB);
}
int SDatabase::ExecuteFindQuery(QString strQuery)
{
int nFind = -1;
if(m_pSqliteDB==NULL)
{
return -1;
}
int rst = SQLITE_OK;
sqlite3* pSqLite3 = NULL;
int nLength = 0;
sqlite3_stmt* pSTMT = NULL;
char* szErrMsg = NULL;
int nCount = 0;
char* pStrQuery = (char*) strQuery.toStdString().c_str();
nLength = strlen(pStrQuery);
rst = sqlite3_prepare(m_pSqliteDB, pStrQuery, nLength, &pSTMT, NULL);
if(rst==SQLITE_OK)
{
int nTotalCount = 0;
while ( sqlite3_step(pSTMT) == SQLITE_ROW && nTotalCount<100)
{
nCount = sqlite3_data_count(pSTMT);
int i=0;
for ( i=0; i < nCount; i++ )
{
char* pColumnData = (char*)sqlite3_column_text(pSTMT, i);
nFind = atoi(pColumnData);
break;
}
nTotalCount++;
}
sqlite3_finalize(pSTMT);
}
else
{
}
if(szErrMsg!=NULL)
{
sqlite3_free(szErrMsg);
szErrMsg = NULL;
}
return nFind;
}
int SDatabase::ExecuteQuery(QString strQuery, QList<QStringList*>* pResultRef, int nReturnMaxCount)
{
int nLockTry = 10;
int i=0;
bool bLock = false;
while(i<nLockTry && bLock==false)
{
if(m_Lock.tryLock(100)==true)
{
bLock = true;
break;
}
i++;
QThread::usleep(100);
}
if(bLock==false)
{
return -11;
}
m_bExecute = true;
int nFind = -1;
if(m_pSqliteDB==NULL)
{
m_Lock.unlock();
return -1;
}
QList<QStringList*>* pResult = NULL;
pResult = pResultRef;
Clear();
if(pResultRef==NULL)
{
pResult = m_pResult;
}
int rst = SQLITE_OK;
sqlite3* pSqLite3 = NULL;
int nLength = 0;
sqlite3_stmt* pSTMT = NULL;
char* szErrMsg = NULL;
int nCount = 0;
std::string stringData = strQuery.toStdString();
//qDebug() << stringData.c_str();
nLength = stringData.length();
char* pStrQuery = new char[nLength+1];
memcpy(pStrQuery, stringData.c_str() , nLength);
pStrQuery[nLength] = '\0';
//qDebug() << (const char*)pStrQuery;
rst = sqlite3_prepare_v2(m_pSqliteDB, strQuery.toUtf8().data(), nLength, &pSTMT, NULL);
//sqlite3_exec(m_pSqliteDB, "VACUUM;", 0, 0, 0);
delete[] pStrQuery;
if(rst==SQLITE_OK)
{
int nTotalCount = 0;
while ( sqlite3_step(pSTMT) == SQLITE_ROW && nTotalCount<nReturnMaxCount)
{
nCount = sqlite3_data_count(pSTMT);
QStringList* pDataList = new QStringList;
pResult->push_back(pDataList);
for ( i=0; i < nCount; i++ )
{
char* pColumnData = (char*)sqlite3_column_text(pSTMT, i);
pDataList->push_back(pColumnData);
}
nTotalCount++;
}
sqlite3_finalize(pSTMT);
}
else
{
}
if(szErrMsg!=NULL)
{
MainWindow::GetCommonData()->WriteLog(szErrMsg);
sqlite3_free(szErrMsg);
szErrMsg = NULL;
}
m_bExecute = false;
m_Lock.unlock();
return nFind;
}
int SDatabase::Execute(QString strExecuteQuery)
{
int nLockTry = 10;
int i=0;
bool bLock = false;
while(i<nLockTry && bLock==false)
{
if(m_Lock.tryLock(100)==true)
{
bLock = true;
break;
}
i++;
QThread::usleep(100);
}
if(bLock==false)
{
return -11;
}
m_bExecute = true;
int rst = SQLITE_OK;
int nLength = 0;
sqlite3_stmt* pSTMT = NULL;
char* szErrMsg = NULL;
std::string stringData = strExecuteQuery.toStdString();
//qDebug() << stringData.c_str();
nLength = stringData.length();
char* pStrQuery = new char[nLength+1];
memcpy(pStrQuery, stringData.c_str() , nLength);
pStrQuery[nLength] = '\0';
//qDebug() << (const char*)pStrQuery;
rst = sqlite3_exec(m_pSqliteDB, pStrQuery, NULL, 0, &szErrMsg);
delete[] pStrQuery;
if(rst!=0)
{
}
m_bExecute = false;
m_Lock.unlock();
if(rst!=SQLITE_OK)
{
if(szErrMsg!=NULL)
{
qDebug() << "Database Execute Error: " << szErrMsg;
MainWindow::GetCommonData()->WriteLog(szErrMsg);
sqlite3_free(szErrMsg);
szErrMsg = NULL;
return -1;
}
}
return 0;
}
void SDatabase::MakeTableUser()
{
Execute("DROP TABLE IF EXISTS LoginUser; \
CREATE TABLE LoginUser (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`ModifyDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`LoginID` varchar(32) DEFAULT '',\
`LoginPassword` varchar(32) DEFAULT '',\
`ConnectionInfoIndex` int(10) DEFAULT '1',\
`AdvancedSettingIndex` int(10) DEFAULT '1');");
}
void SDatabase::MakeAcquisitionTempTable()
{
Execute( /*"DROP TABLE IF EXISTS AcquisitionTemp; \*/
"CREATE TABLE IF NOT EXISTS AcquisitionTemp (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`StudyIndex` int DEFAULT 0,\
`SeriesIndex` int DEFAULT 0,\
`ImageNumber` int DEFAULT 0,\
`ImageDelete` int DEFAULT 0,\
`ImageStorage` int DEFAULT 0,\
`ImageSend` int DEFAULT 0,\
`FileType` int DEFAULT 0,\
`ImageInstanceUID` varchar(256) DEFAULT '' UNIQUE,\
`FileLocation` varchar(512) DEFAULT '', \
`ImageType` varchar(10) DEFAULT '0', \
`AcquisitionDate` varchar(10) DEFAULT '', \
`AcquisitionTime` varchar(16) DEFAULT '', \
`ContentDate` varchar(10) DEFAULT '', \
`ContentTime` varchar(16) DEFAULT '', \
`AcquisitionNumber` int DEFAULT 0, \
`InstanceNumber` int DEFAULT 0, \
`PatientOrientation` varchar(8) DEFAULT '', \
`ImageLaterality` varchar(2) DEFAULT '', \
`ImageComments` varchar(512) DEFAULT '');");
}
void SDatabase::MakeTableAdvancedSetting()
{
Execute("DROP TABLE IF EXISTS AdvancedSetting; \
CREATE TABLE AdvancedSetting (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`ModifyDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`AutoCaptureSendDICOM` INTEGER DEFAULT '0',\
`AutoCloseSendFinish` INTEGER DEFAULT '0',\
`AutoExitCaptureSendDICOM` INTEGER DEFAULT '0',\
`AutoLogin` INTEGER DEFAULT '1',\
`DICOMCharacterSet` varchar(16) DEFAULT 'EUC-KR',\
`AutoVideoCapture` INTEGER DEFAULT '0',\
`DICOMCompress` INTEGER DEFAULT '0',\
`VideoMode` INTEGER DEFAULT '0',\
`CropMode` INTEGER DEFAULT '0',\
`ScreenSaverTime` INTEGER DEFAULT '0',\
`UseFixWidthLevel` INTEGER DEFAULT '0',\
`UseLogLevel` INTEGER DEFAULT '0',\
`EnableNetworkShare` varchar(10) DEFAULT 'Disabled',\
`NetworkAutoSend` varchar(10) DEFAULT 'Disabled',\
`NetworkShareIP` varchar(32) DEFAULT '127.0.0.1',\
`NetworkShareFolder` varchar(256) DEFAULT 'Share Folder',\
`NetworkSMBVersion` varchar(10) DEFAULT 'SMB Version',\
`NetworkShareID` varchar(256) DEFAULT 'Share ID',\
`NetworkSharePassword` varchar(256) DEFAULT 'Share Password');");
}
void SDatabase::MakeTableReserved()
{
Execute("DROP TABLE IF EXISTS SReserveTable; \
CREATE TABLE SReserveTable (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`Reserve1` varchar(10) DEFAULT '',\
`Reserve2` varchar(10) DEFAULT '',\
`Reserve3` varchar(10) DEFAULT '',\
`Reserve4` varchar(10) DEFAULT '',\
`Reserve5` varchar(10) DEFAULT '',\
`Reserve6` varchar(10) DEFAULT '',\
`Reserve7` varchar(10) DEFAULT '',\
`Reserve8` varchar(10) DEFAULT '',\
`Reserve9` varchar(10) DEFAULT '',\
`Reserve10` varchar(10) DEFAULT '',\
`Reserve11` varchar(10) DEFAULT '',\
`Reserve12` varchar(10) DEFAULT '',\
`Reserve13` varchar(10) DEFAULT '',\
`Reserve14` varchar(10) DEFAULT '',\
`Reserve15` varchar(10) DEFAULT '',\
`Reserve16` varchar(10) DEFAULT '',\
`Reserve17` varchar(10) DEFAULT '',\
`Reserve18` varchar(10) DEFAULT '',\
`Reserve19` varchar(10) DEFAULT '',\
`Reserve20` varchar(10) DEFAULT '');");
}
void SDatabase::MakeTableDataInfo()
{
Execute("DROP TABLE IF EXISTS ConnectionInfo; \
CREATE TABLE ConnectionInfo (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`ModifyDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`WorklistServerIP` varchar(15) DEFAULT '',\
`WorklistPort` int(10) DEFAULT '0',\
`WorklistServerTitle` varchar(64) DEFAULT '',\
`WorklistClientTitle` varchar(64) DEFAULT '',\
`StorageServerIP` varchar(15) DEFAULT '',\
`StoragePort` int(10) DEFAULT '0',\
`StorageServerTitle` varchar(64) DEFAULT '',\
`StorageClientTitle` varchar(64) DEFAULT '',\
`Modality` varchar(10) DEFAULT 'ES',\
`HospitalName` varchar(64) DEFAULT '',\
`StationName` varchar(64) DEFAULT '',\
`EnableLog` varchar(10) DEFAULT 'Disabled',\
`LocalImageFolder` varchar(256) DEFAULT '/work/test/storage',\
`LocalLogFolder` varchar(256) DEFAULT '/work/test',\
`LocalHistoryFolder` varchar(256) DEFAULT '/work/test');");
Execute("DROP TABLE IF EXISTS Patient; \
CREATE TABLE Patient (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`PatientName` varchar(32) DEFAULT '',\
`PatientAge` varchar(16) DEFAULT '',\
`PatientID` varchar(32) DEFAULT '', \
`PatientSex` varchar(8) DEFAULT '', \
`PatientBirthDate` varchar(10) DEFAULT '', \
`PatientBirthTime` varchar(16) DEFAULT '', \
`PatientWeight` varchar(8) DEFAULT '', \
`PatientComments` varchar(16) DEFAULT '');");
Execute("DROP TABLE IF EXISTS Study; \
CREATE TABLE Study (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`StudyInstanceUID` varchar(256) DEFAULT '' UNIQUE,\
`PatientIndex` int DEFAULT 0,\
`PatientLocation` varchar(8) DEFAULT '', \
`StudyDate` varchar(10) DEFAULT '', \
`StudyTime` varchar(16) DEFAULT '', \
`StudyCodeValue` varchar(64) DEFAULT '', \
`AccessionNumber` varchar(64) DEFAULT '', \
`StudyDescription` varchar(256) DEFAULT '', \
`ReferringPhysiciansName` varchar(32) DEFAULT '');");
Execute("DROP TABLE IF EXISTS Series; \
CREATE TABLE Series (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`StudyIndex` int DEFAULT 0,\
`SeriesDate` varchar(10) DEFAULT '', \
`SeriesTime` varchar(16) DEFAULT '', \
`SeriesNumber` int DEFAULT 0,\
`SeriesInstanceUID` varchar(256) DEFAULT '' UNIQUE,\
`Modality` varchar(8) DEFAULT '', \
`BodyPartExamined` varchar(32) DEFAULT '', \
`SeriesDescription` varchar(256) DEFAULT '', \
`OperatorsName` varchar(64) DEFAULT '');");
Execute("DROP TABLE IF EXISTS Image; \
CREATE TABLE Image (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`StudyIndex` int DEFAULT 0,\
`SeriesIndex` int DEFAULT 0,\
`ImageNumber` int DEFAULT 0,\
`ImageDelete` int DEFAULT 0,\
`ImageStorage` int DEFAULT 0,\
`ImageSend` int DEFAULT 0,\
`FileType` int DEFAULT 0,\
`ImageInstanceUID` varchar(256) DEFAULT '' UNIQUE,\
`FileLocation` varchar(512) DEFAULT '', \
`ImageType` varchar(10) DEFAULT '0', \
`AcquisitionDate` varchar(10) DEFAULT '', \
`AcquisitionTime` varchar(16) DEFAULT '', \
`ContentDate` varchar(10) DEFAULT '', \
`ContentTime` varchar(16) DEFAULT '', \
`AcquisitionNumber` int DEFAULT 0, \
`InstanceNumber` int DEFAULT 0, \
`PatientOrientation` varchar(8) DEFAULT '', \
`ImageLaterality` varchar(2) DEFAULT '', \
`ImageComments` varchar(512) DEFAULT '');");
Execute("DROP TABLE IF EXISTS WorklistTableHeader; \
CREATE TABLE WorklistTableHeader (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`DefaultIndex` int DEFAULT 0,\
`DisplayIndex` int DEFAULT 0,\
`DisplayWidth` int DEFAULT 120,\
`ValueString` varchar(64) DEFAULT '',\
`Visible` int DEFAULT 0);");
Execute("DROP TABLE IF EXISTS HistoryTableHeader; \
CREATE TABLE HistoryTableHeader (\
`ID` INTEGER Primary Key AutoIncrement UNIQUE,\
`CreateDateTime` DateTime DEFAULT (datetime('now','localtime')),\
`DefaultIndex` int DEFAULT 0,\
`DisplayIndex` int DEFAULT 0,\
`DisplayWidth` int DEFAULT 120,\
`ValueString` int DEFAULT 0,\
`Visible` int DEFAULT 0);");
Execute("DROP VIEW IF EXISTS Storage;"
"CREATE VIEW Storage as select d2.SeriesNumber, d3.ID as ImageIndex, d1.ID as StudyIndex, d2.ID as SeriesIndex, d1.PatientIndex, d2.Modality, d1.StudyDate, d1.StudyTime, d3.FileLocation, d1.StudyInstanceUID, d2.SeriesInstanceUID, d3.ImageInstanceUID, d3.CreateDateTime, d3.ImageDelete, d3.ImageSend, d3.FileType, d3.AcquisitionDate, d3.AcquisitionTime, d3.AcquisitionNumber, d3.ImageStorage from Study as d1 join (Series as d2 join Image as d3 on d3.seriesIndex=d2.id) on d1.id=d2.studyindex;");
Execute("DROP VIEW IF EXISTS StorageInfo;"
"CREATE VIEW StorageInfo as select d1.*, d3.PatientID, d3.PatientName, d3.PatientAge, d3.PatientSex, (select count(*) from Storage as d2 where d1.StudyInstanceUID=d2.StudyInstanceUID) as TotalImageCount from Storage as d1 join Patient as d3 on (d1.PatientIndex=d3.ID)");
//Execute("DROP VIEW IF EXISTS HistoryStudy;"
//"CREATE VIEW HistoryStudy as select d4.ID, d4.PatientIndex, d5.PatientID, d5.PatientName, d5.PatientAge, d5.PatientSex, d5.PatientBirthDate, d5.PatientWeight, d4.CreateDateTime, d4.StudyDate, d4.StudyTime, d4.StudyCodeValue, d4.PatientLocation, d4.AccessionNumber, d4.ReferringPhysiciansName, d4.StudyInstanceUID, d4.SeriesInstanceUID, d4.StudyDescription, d4.SeriesDescription, d4.OperatorsName, d4.ImageCount, d4.ImageSend, d4.Modality, d4.SeriesDate, d4.SeriesTime, d4.SeriesNumber from (select *, (select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.ImageDelete=0) as ImageCount, (select sum(ImageSend) from Image as d3 where d3.StudyIndex=d1.ID and d3.ImageDelete=0) as ImageSend from Study as d1 join Series as d2 on (d2.StudyIndex=d1.ID)) as d4 join Patient as d5 on (d4.PatientIndex=d5.ID)");
/*
Execute("DROP VIEW IF EXISTS HistoryStudy;"
"CREATE VIEW HistoryStudy as "
"select d4.StudyIndex, d4.PatientIndex, d5.PatientID, d5.PatientName, d5.PatientAge, d5.PatientSex, d5.PatientBirthDate, d5.PatientWeight, d4.CreateDateTime, d4.StudyDate, d4.StudyTime, d4.StudyCodeValue, d4.PatientLocation, d4.AccessionNumber, d4.ReferringPhysiciansName, d4.StudyInstanceUID, d4.SeriesInstanceUID, d4.StudyDescription, d4.SeriesDescription, d4.OperatorsName, d4.ImageCount, d4.ImageSend, d4.Modality, d4.SeriesDate, d4.SeriesTime, max(d4.SeriesNumber), d4.VideoCount "
"from (select *, (select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=1 and d3.ImageDelete=0) as ImageCount, "
"(select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=2 and d3.ImageDelete=0) as VideoCount, "
"(select sum(ImageSend) from Image as d3 where d3.StudyIndex=d1.ID) as ImageSend "
"from Study as d1 join Series as d2 on (d2.StudyIndex=d1.ID)) as d4 join Patient as d5 on (d4.PatientIndex=d5.ID)");
Execute("DROP VIEW IF EXISTS HistoryStudyWithDelete;"
"CREATE VIEW HistoryStudyWithDelete as "
"select d4.StudyIndex, d4.PatientIndex, d5.PatientID, d5.PatientName, d5.PatientAge, d5.PatientSex, d5.PatientBirthDate, d5.PatientWeight, d4.CreateDateTime, d4.StudyDate, d4.StudyTime, d4.StudyCodeValue, d4.PatientLocation, d4.AccessionNumber, d4.ReferringPhysiciansName, d4.StudyInstanceUID, d4.SeriesInstanceUID, d4.StudyDescription, d4.SeriesDescription, d4.OperatorsName, d4.ImageCount, d4.ImageSend, d4.Modality, d4.SeriesDate, d4.SeriesTime, max(d4.SeriesNumber), d4.VideoCount "
"from (select *, (select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=1) as ImageCount, "
"(select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=2) as VideoCount, "
"(select sum(ImageSend) from Image as d3 where d3.StudyIndex=d1.ID) as ImageSend "
"from Study as d1 join Series as d2 on (d2.StudyIndex=d1.ID)) as d4 join Patient as d5 on (d4.PatientIndex=d5.ID)");
*/
Execute("DROP VIEW IF EXISTS HistoryStudy;"
"CREATE VIEW HistoryStudy as "
"select StudyIndex, PatientIndex, PatientID, PatientName, PatientAge, PatientSex, PatientBirthDate, PatientWeight, CreateDateTime, StudyDate, StudyTime, StudyCodeValue, PatientLocation, AccessionNumber, ReferringPhysiciansName, StudyInstanceUID, SeriesInstanceUID, StudyDescription, SeriesDescription, OperatorsName, ImageCount, ImageSendCount, Modality, SeriesDate, SeriesTime, SeriesNumber, VideoCount from (select DISTINCT(d1.ID), d3.StudyIndex, d1.PatientIndex, d4.PatientID, d4.PatientName, d4.PatientAge, d4.PatientSex, d4.PatientBirthDate, d4.PatientWeight, d4.CreateDateTime, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, d1.ReferringPhysiciansName, d1.StudyInstanceUID, d2.SeriesInstanceUID, d1.StudyDescription, d2.SeriesDescription, d2.OperatorsName, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageDelete=0 and Image.ImageSend=1) as ImageSendCount, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageDelete=0) as ImageCount, d2.Modality, d2.SeriesDate, d2.SeriesTime, d2.SeriesNumber, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=1 and Image.ImageDelete=0) as VideoCount from Study as d1 join Series as d2 on (d1.ID=d2.StudyIndex) join Image as d3 on(d2.ID=d3.SeriesIndex and d2.SeriesNumber=1) join Patient as d4 on (d4.ID=d1.PatientIndex))");
Execute("DROP VIEW IF EXISTS HistoryStudyWithDelete;"
"CREATE VIEW HistoryStudyWithDelete as "
"select StudyIndex, PatientIndex, PatientID, PatientName, PatientAge, PatientSex, PatientBirthDate, PatientWeight, CreateDateTime, StudyDate, StudyTime, StudyCodeValue, PatientLocation, AccessionNumber, ReferringPhysiciansName, StudyInstanceUID, SeriesInstanceUID, StudyDescription, SeriesDescription, OperatorsName, ImageCount, ImageSend, Modality, SeriesDate, SeriesTime, SeriesNumber, VideoCount from (select DISTINCT(d1.ID), d3.StudyIndex, d1.PatientIndex, d4.PatientID, d4.PatientName, d4.PatientAge, d4.PatientSex, d4.PatientBirthDate, d4.PatientWeight, d4.CreateDateTime, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, d1.ReferringPhysiciansName, d1.StudyInstanceUID, d2.SeriesInstanceUID, d1.StudyDescription, d2.SeriesDescription, d2.OperatorsName, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 ) as ImageCount, d3.ImageSend, d2.Modality, d2.SeriesDate, d2.SeriesTime, d2.SeriesNumber, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=1) as VideoCount from Study as d1 join Series as d2 on (d1.ID=d2.StudyIndex) join Image as d3 on(d2.ID=d3.SeriesIndex and d2.SeriesNumber=1) join Patient as d4 on (d4.ID=d1.PatientIndex))");
MakeTableAdvancedSetting();
MakeTableUser();
MakeViewTable();
int i=0;
QStringList strList;
strList << "ID" << "Name" << "Sex" << "Weight" << "BirthDate" << "Age" << "Patient Location" << "Study Instance UID" << "Study Description" << "Study Date" << "Study Time" << "Study Create Date" << "Refer Doctor" << "Series Instance UID" << "Operator" << "Modality" << "Bodypart" << "Series Description" << "Instance UID" << "Instance Create Date" << "Instance Create Time" << "Scheduled Date" << "Scheduled Time" << "Procedure Step ID" << "Procedure ID" << "Requested Comments" << "Index" << "Image Count" << "Send Count" << "Movie Count" << "Total Count" << "Accession Number" << "Performing Physician" << "CodeValue";
QString strQuery;
for(i=0 ; i<SDI_TOTAL ; i++)
{
strQuery = QString("insert into WorklistTableHeader(`DefaultIndex`, `DisplayIndex`, `ValueString`, `Visible`) values ('%1', '%2', '%3', '%4'); ").arg(i).arg(i).arg(strList[i]).arg(1);
Execute(strQuery);
strQuery = QString("insert into HistoryTableHeader(`DefaultIndex`, `DisplayIndex`, `ValueString`, `Visible`) values ('%1', '%2', '%3', '%4'); ").arg(i).arg(i).arg(strList[i]).arg(1);
Execute(strQuery);
}
}
QList<QStringList*>* SDatabase::QueryWorklistTableHeader()
{
QString strQuery;
strQuery = QString("select DefaultIndex, DisplayIndex, ValueString, Visible, DisplayWidth from WorklistTableHeader order by DisplayIndex asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
QList<QStringList*>* SDatabase::QueryWorklistTableHeaderVisible()
{
QString strQuery;
strQuery = QString("select DefaultIndex, DisplayIndex, ValueString, DisplayWidth from WorklistTableHeader where Visible=1 order by DisplayIndex asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
QList<QStringList*>* SDatabase::QueryWorklistTableHeaderInvisible()
{
QString strQuery;
strQuery = QString("select DefaultIndex, DisplayIndex, ValueString, DisplayWidth from WorklistTableHeader where Visible=0 order by DisplayIndex asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
QList<QStringList*>* SDatabase::QueryHistoryTableHeader()
{
QString strQuery;
strQuery = QString("select DefaultIndex, DisplayIndex, ValueString, Visible, DisplayWidth from HistoryTableHeader order by DisplayIndex asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
QList<QStringList*>* SDatabase::QueryHistoryTableHeaderVisible()
{
QString strQuery;
strQuery = QString("select DefaultIndex, DisplayIndex, ValueString, DisplayWidth from HistoryTableHeader where Visible=1 order by DisplayIndex asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
QList<QStringList*>* SDatabase::QueryHistoryTableHeaderInvisible()
{
QString strQuery;
strQuery = QString("select DefaultIndex, DisplayIndex, ValueString, DisplayWidth from HistoryTableHeader where Visible=0 order by DisplayIndex asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
void SDatabase::Clear()
{
QList<QStringList*>::iterator it;
for(it=m_pResult->begin() ; it!=m_pResult->end() ; ++it)
{
QStringList* pDataList = *it;
if(pDataList!=NULL)
{
pDataList->clear();
delete pDataList;
}
}
m_pResult->clear();
}
int SDatabase::InsertPatient(ACQUISITION_INFO *pAcquisitionInfo)
{
int nPatientIndex = 0;
QString strPatientID;
QString strPatientName;
QString strPatientAge;
QString strPatientSex;
QString strPatientBirthDate;
QString strPatientBirthTime;
QString strPatientWeight;
QString strPatientComments;
strPatientID = pAcquisitionInfo->GetPatientInfo()->strPatientID.c_str();
strPatientName = pAcquisitionInfo->GetPatientInfo()->strPatientName.c_str();
strPatientAge = pAcquisitionInfo->GetPatientInfo()->strPatientAge.c_str();
strPatientSex = pAcquisitionInfo->GetPatientInfo()->strPatientSex.c_str();
strPatientBirthDate = pAcquisitionInfo->GetPatientInfo()->strPatientBirthDate.c_str();
strPatientBirthTime = pAcquisitionInfo->GetPatientInfo()->strPatientBirthTime.c_str();
strPatientWeight = pAcquisitionInfo->GetPatientInfo()->strPatientWeight.c_str();
strPatientComments = pAcquisitionInfo->GetPatientInfo()->strPatientComments.c_str();
QString strQuery;
strQuery = QString("select ID from Patient where PatientID='%1' and PatientName='%2';").arg(strPatientID).arg(strPatientName);
QList<QStringList*> listResponse;
ExecuteQuery(strQuery, &listResponse);
if(listResponse.size()==0)
{
SDatabase::DeleteListReponse(listResponse);
strQuery = QString("insert into Patient(`PatientID`, `PatientName`, `PatientAge`, `PatientSex`, `PatientBirthDate`, `PatientBirthTime`, `PatientWeight`, `PatientComments`) values ('%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8'); ").arg(strPatientID).arg(strPatientName).arg(strPatientAge).arg(strPatientSex).arg(strPatientBirthDate).arg(strPatientBirthTime).arg(strPatientWeight).arg(strPatientComments);
Execute(strQuery);
strQuery = QString("select ID from Patient where PatientID='%1' and PatientName='%2';").arg(strPatientID).arg(strPatientName);
ExecuteQuery(strQuery, &listResponse);
}
if(listResponse.size()>0)
{
QString strIndex;
QStringList* pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strIndex = pDataList->at(0);
}
nPatientIndex = strIndex.toInt();
pAcquisitionInfo->m_nIndexPatient = nPatientIndex;
pAcquisitionInfo->GetStudyInfo()->nPatientIndex = nPatientIndex;
}
SDatabase::DeleteListReponse(listResponse);
return nPatientIndex;
}
int SDatabase::InsertStudy(ACQUISITION_INFO *pAcquisitionInfo)
{
int nIndexStudy = 0;
int nIndexPatient = pAcquisitionInfo->m_nIndexPatient;
QDateTime dt = QDateTime::currentDateTime();
QString strDate;
QString strTime;
QString strStudyInstanceUID;
QString strAccessionNumber;
QString strPatientLocation;
QString strStudyDescription;
QString strReferringPhysiciansName;
QString strStudyCodeValue;
QString strQuery;
QDate nDate = dt.date();
QTime nTime = dt.time();
strPatientLocation = pAcquisitionInfo->GetPatientInfo()->strPatientLocation.c_str();
strAccessionNumber = pAcquisitionInfo->GetStudyInfo()->strAccessionNumber.c_str();
strStudyDescription = pAcquisitionInfo->GetStudyInfo()->strStudyDescription.c_str();
strReferringPhysiciansName = pAcquisitionInfo->GetStudyInfo()->strReferringPhysiciansName.c_str();
strStudyCodeValue = pAcquisitionInfo->GetScheduledDataInfo()->strScheduledCodeValue.c_str();
if(pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID.size()==0)
{
strStudyInstanceUID = QString("1111.2222.3333.%1%2%3%4%5%6").arg(nDate.year(), 4, 10, QChar('0')).arg(nDate.month(), 2, 10, QChar('0')).arg(nDate.day(), 2, 10, QChar('0')).arg(nTime.hour(), 2, 10, QChar('0')).arg(nTime.minute(), 2, 10, QChar('0')).arg(nTime.second(), 2, 10, QChar('0'));
}
else
{
strStudyInstanceUID = pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID.c_str();
}
QList<QStringList*> listResponse;
strQuery = QString("select ID, StudyDate, StudyTime from Study where StudyInstanceUID='%1';").arg(strStudyInstanceUID);
ExecuteQuery(strQuery, &listResponse);
if(listResponse.size()==0)
{
SDatabase::DeleteListReponse(listResponse);
strDate = QString("%1%2%3").arg(nDate.year(), 4, 10, QChar('0')).arg(nDate.month(), 2, 10, QChar('0')).arg(nDate.day(), 2, 10, QChar('0'));
strTime = QString("%1%2%3").arg(nTime.hour(), 2, 10, QChar('0')).arg(nTime.minute(), 2, 10, QChar('0')).arg(nTime.second(), 2, 10, QChar('0'));
strQuery = QString("insert into Study(`StudyInstanceUID`, `PatientIndex`, `StudyDate`, `StudyTime`, `StudyCodeValue`, `AccessionNumber`, `PatientLocation`, `StudyDescription`, `ReferringPhysiciansname`) values ('%1', %2, '%3', '%4', '%5', '%6', '%7', '%8', '%9'); ")
.arg(strStudyInstanceUID).arg(nIndexPatient).arg(strDate).arg(strTime).arg(strStudyCodeValue).arg(strAccessionNumber).arg(strPatientLocation).arg(strStudyDescription).arg(strReferringPhysiciansName);
Execute(strQuery);
strQuery = QString("select ID, StudyDate, StudyTime from Study where StudyInstanceUID='%1';").arg(strStudyInstanceUID);
ExecuteQuery(strQuery, &listResponse);
}
if(listResponse.size()>0)
{
QString strIndex;
QStringList* pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strIndex = (*pDataList)[0];
strDate = (*pDataList)[1];
strTime = (*pDataList)[2];
strDate = strDate.remove('/');
strTime = strTime.remove(':');
}
nIndexStudy = strIndex.toInt();
pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID = strStudyInstanceUID.toStdString().c_str();
pAcquisitionInfo->m_nIndexStudy = nIndexStudy;
pAcquisitionInfo->GetStudyInfo()->strStudyDate = strDate.toStdString().c_str();
pAcquisitionInfo->GetStudyInfo()->strStudyTime = strTime.toStdString().c_str();
pAcquisitionInfo->GetSeriesInfo()->nStudyIndex = nIndexStudy;
}
SDatabase::DeleteListReponse(listResponse);
return nIndexStudy;
}
int SDatabase::InsertSeriesImage(ACQUISITION_INFO *pAcquisitionInfo)
{
QString strQuery;
QString strStudyInstanceUID;
QString strSeriesInstanceUID;
QString strModality;
QString strBodyPartExamined;
QString strSeriesDescription;
QString strOperatorsName;
int nStudyIndex = 0;
int nSeriesNumber = 0;
int nSeriesIndex = 0;
QDateTime dt = QDateTime::currentDateTime();
QDate nDate = dt.date();
QTime nTime = dt.time();
strStudyInstanceUID = pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID.c_str();
strModality = pAcquisitionInfo->GetSeriesInfo()->strModality.c_str();
strBodyPartExamined = pAcquisitionInfo->GetSeriesInfo()->strBodyPartExamined.c_str();
strSeriesDescription = pAcquisitionInfo->GetSeriesInfo()->strSeriesDescription.c_str();
strOperatorsName = pAcquisitionInfo->GetSeriesInfo()->strOperatorsName.c_str();
nStudyIndex = pAcquisitionInfo->m_nIndexStudy;
nSeriesNumber = 0;
if(strModality.size()==0)
{
CommonData* pCommonData = MainWindow::GetCommonData();
strModality = pCommonData->GetModality();
pAcquisitionInfo->GetSeriesInfo()->strModality = strModality.toStdString().c_str();
}
QList<QStringList*> listResponse;
//strQuery = QString("select max(SeriesNumber), ID, SeriesInstanceUID, SeriesDate, SeriesTime from series where StudyIndex=%1;").arg(nStudyIndex);
strQuery = QString("select SeriesNumber, ID, SeriesInstanceUID, SeriesDate, SeriesTime from series where StudyIndex=%1 and SeriesNumber=1;").arg(nStudyIndex);
ExecuteQuery(strQuery, &listResponse);
QStringList* pDataList = NULL;
QString strSeriesNumber;
QString strDate;
QString strTime;
if(listResponse.size()==1)
{
pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesNumber = (*pDataList)[0];
nSeriesNumber = strSeriesNumber.toInt();
}
}
if(nSeriesNumber==0)
{
nSeriesNumber = 1;
strSeriesInstanceUID = QString("%1.%2").arg(strStudyInstanceUID).arg(QString::number(nSeriesNumber));
strDate = QString("%1%2%3").arg(nDate.year(), 4, 10, QChar('0')).arg(nDate.month(), 2, 10, QChar('0')).arg(nDate.day(), 2, 10, QChar('0'));
strTime = QString("%1%2%3").arg(nTime.hour(), 2, 10, QChar('0')).arg(nTime.minute(), 2, 10, QChar('0')).arg(nTime.second(), 2, 10, QChar('0'));
strQuery = QString("insert into series(`StudyIndex`, `SeriesNumber`, `SeriesInstanceUID`, `Modality`, `BodyPartExamined`, `SeriesDescription`, `OperatorsName`, `SeriesDate`, `SeriesTime`) values (%1, %2, '%3', '%4', '%5', '%6', '%7', '%8', '%9'); ").
arg(nStudyIndex).arg(nSeriesNumber).arg(strSeriesInstanceUID).arg(strModality).arg(strBodyPartExamined).arg(strSeriesDescription).arg(strOperatorsName).arg(strDate).arg(strTime);
Execute(strQuery);
pAcquisitionInfo->m_nAcquisitionImageMax = 0;
}
else
{
QString strSeriesNumber;
QString strSeriesIndex;
pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesNumber = (*pDataList)[0];
strSeriesIndex = (*pDataList)[1];
nSeriesNumber = strSeriesNumber.toInt();
strDate = (*pDataList)[3];
strTime = (*pDataList)[4];
if(strDate.length()==0)
{
strDate = QString("%1%2%3").arg(nDate.year(), 4, 10, QChar('0')).arg(nDate.month(), 2, 10, QChar('0')).arg(nDate.day(), 2, 10, QChar('0'));
}
if(strTime.length()==0)
{
strTime = QString("%1%2%3").arg(nTime.hour(), 2, 10, QChar('0')).arg(nTime.minute(), 2, 10, QChar('0')).arg(nTime.second(), 2, 10, QChar('0'));
}
}
pAcquisitionInfo->m_nAcquisitionImageMax = GetImageMaxAcquisitionNumber(strSeriesIndex);
}
SDatabase::DeleteListReponse(listResponse);
strQuery = QString("select SeriesNumber, ID, SeriesInstanceUID from series where StudyIndex=%1 and SeriesNumber=1;").arg(nStudyIndex);
ExecuteQuery(strQuery, &listResponse);
if(listResponse.size()>0)
{
QString strSeriesNumber;
QString strSeriesIndex;
pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesNumber = pDataList->at(0);
strSeriesIndex = pDataList->at(1);
strSeriesInstanceUID = pDataList->at(2);
nSeriesNumber = strSeriesNumber.toInt();
nSeriesIndex = strSeriesIndex.toInt();
}
pAcquisitionInfo->GetSeriesInfo()->strSeriesInstanceUID = strSeriesInstanceUID.toStdString().c_str();
pAcquisitionInfo->GetSeriesInfo()->nSeriesNumber = nSeriesNumber;
pAcquisitionInfo->GetSeriesInfo()->nStudyIndex = nStudyIndex;
pAcquisitionInfo->m_nIndexSeries_Image = nSeriesIndex;
pAcquisitionInfo->m_nSeriesNumber = nSeriesNumber;
strDate = strDate.remove('/');
strTime = strTime.remove(':');
pAcquisitionInfo->GetSeriesInfo()->strSeriesDate = strDate.toStdString().c_str();
pAcquisitionInfo->GetSeriesInfo()->strSeriesTime = strTime.toStdString().c_str();
pAcquisitionInfo->GetImageInfo()->nSeriesIndex = nSeriesIndex;
}
SDatabase::DeleteListReponse(listResponse);
return nSeriesIndex;
}
int SDatabase::InsertSeriesMovie(ACQUISITION_INFO *pAcquisitionInfo)
{
QString strQuery;
QString strStudyInstanceUID;
QString strSeriesInstanceUID;
QString strModality;
QString strBodyPartExamined;
QString strSeriesDescription;
QString strOperatorsName;
int nStudyIndex = 0;
int nSeriesNumber = 0;
int nSeriesIndex = 0;
QDateTime dt = QDateTime::currentDateTime();
QDate nDate = dt.date();
QTime nTime = dt.time();
strStudyInstanceUID = pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID.c_str();
strModality = pAcquisitionInfo->GetSeriesInfo()->strModality.c_str();
strBodyPartExamined = pAcquisitionInfo->GetSeriesInfo()->strBodyPartExamined.c_str();
strSeriesDescription = pAcquisitionInfo->GetSeriesInfo()->strSeriesDescription.c_str();
strOperatorsName = pAcquisitionInfo->GetSeriesInfo()->strOperatorsName.c_str();
nStudyIndex = pAcquisitionInfo->m_nIndexStudy;
nSeriesNumber = 0;
if(strModality.size()==0)
{
CommonData* pCommonData = MainWindow::GetCommonData();
strModality = pCommonData->GetModality();
pAcquisitionInfo->GetSeriesInfo()->strModality = strModality.toStdString().c_str();
}
QList<QStringList*> listResponse;
//strQuery = QString("select max(SeriesNumber), ID, SeriesInstanceUID, SeriesDate, SeriesTime from series where StudyIndex=%1;").arg(nStudyIndex);
strQuery = QString("select SeriesNumber, ID, SeriesInstanceUID, SeriesDate, SeriesTime from series where StudyIndex=%1 and SeriesNumber=2;").arg(nStudyIndex);
ExecuteQuery(strQuery, &listResponse);
QStringList* pDataList = NULL;
QString strSeriesNumber;
QString strDate;
QString strTime;
if(listResponse.size()==1)
{
pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesNumber = (*pDataList)[0];
nSeriesNumber = strSeriesNumber.toInt();
}
}
if(nSeriesNumber==0)
{
nSeriesNumber = 2;
strSeriesInstanceUID = QString("%1.%2").arg(strStudyInstanceUID).arg(QString::number(nSeriesNumber));
strDate = QString("%1%2%3").arg(nDate.year(), 4, 10, QChar('0')).arg(nDate.month(), 2, 10, QChar('0')).arg(nDate.day(), 2, 10, QChar('0'));
strTime = QString("%1%2%3").arg(nTime.hour(), 2, 10, QChar('0')).arg(nTime.minute(), 2, 10, QChar('0')).arg(nTime.second(), 2, 10, QChar('0'));
strQuery = QString("insert into series(`StudyIndex`, `SeriesNumber`, `SeriesInstanceUID`, `Modality`, `BodyPartExamined`, `SeriesDescription`, `OperatorsName`, `SeriesDate`, `SeriesTime`) values (%1, %2, '%3', '%4', '%5', '%6', '%7', '%8', '%9'); ").
arg(nStudyIndex).arg(nSeriesNumber).arg(strSeriesInstanceUID).arg(strModality).arg(strBodyPartExamined).arg(strSeriesDescription).arg(strOperatorsName).arg(strDate).arg(strTime);
Execute(strQuery);
pAcquisitionInfo->m_nAcquisitionMovieMax = 0;
}
else
{
QString strSeriesNumber;
QString strSeriesIndex;
pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesNumber = (*pDataList)[0];
strSeriesIndex = (*pDataList)[1];
nSeriesNumber = strSeriesNumber.toInt();
strDate = (*pDataList)[3];
strTime = (*pDataList)[4];
if(strDate.length()==0)
{
strDate = QString("%1%2%3").arg(nDate.year(), 4, 10, QChar('0')).arg(nDate.month(), 2, 10, QChar('0')).arg(nDate.day(), 2, 10, QChar('0'));
}
if(strTime.length()==0)
{
strTime = QString("%1%2%3").arg(nTime.hour(), 2, 10, QChar('0')).arg(nTime.minute(), 2, 10, QChar('0')).arg(nTime.second(), 2, 10, QChar('0'));
}
}
pAcquisitionInfo->m_nAcquisitionMovieMax = GetVideoMaxAcquisitionNumber(strSeriesIndex);
}
SDatabase::DeleteListReponse(listResponse);
strQuery = QString("select SeriesNumber, ID, SeriesInstanceUID from series where StudyIndex=%1 and SeriesNumber=2;").arg(nStudyIndex);
ExecuteQuery(strQuery, &listResponse);
if(listResponse.size()>0)
{
QString strSeriesNumber;
QString strSeriesIndex;
pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesNumber = pDataList->at(0);
strSeriesIndex = pDataList->at(1);
strSeriesInstanceUID = pDataList->at(2);
nSeriesNumber = strSeriesNumber.toInt();
nSeriesIndex = strSeriesIndex.toInt();
}
pAcquisitionInfo->GetSeriesInfo()->strSeriesInstanceUID = strSeriesInstanceUID.toStdString().c_str();
pAcquisitionInfo->GetSeriesInfo()->nSeriesNumber = nSeriesNumber;
pAcquisitionInfo->GetSeriesInfo()->nStudyIndex = nStudyIndex;
pAcquisitionInfo->m_nIndexSeries_Movie = nSeriesIndex;
pAcquisitionInfo->m_nSeriesNumber = nSeriesNumber;
strDate = strDate.remove('/');
strTime = strTime.remove(':');
pAcquisitionInfo->GetSeriesInfo()->strSeriesDate = strDate.toStdString().c_str();
pAcquisitionInfo->GetSeriesInfo()->strSeriesTime = strTime.toStdString().c_str();
pAcquisitionInfo->GetImageInfo()->nSeriesIndex = nSeriesIndex;
}
SDatabase::DeleteListReponse(listResponse);
return nSeriesIndex;
}
int SDatabase::InsertImage(ACQUISITION_INFO *pAcquisitionInfo)
{
if(pAcquisitionInfo->GetSeriesInfo()->strSeriesInstanceUID.size()==0)
{
//InsertSeriesImage(pAcquisitionInfo);
}
if(pAcquisitionInfo->m_nIndexSeries_Image==0)
{
return -1;
}
QDateTime dt = QDateTime::currentDateTime();
int nYear = dt.date().year();
int nMonth = dt.date().month();
int nDay = dt.date().day();
int nHour = dt.time().hour();
int nMinute = dt.time().minute();
int nSecond = dt.time().second();
QString strQuery;
QString strImageInstanceUID;
int nImageNumberMax = 0;
int nStudyIndex = 0;
QString strAcquisitionDate = QString("%1%2%3").arg(nYear, 4, 10, QChar('0')).arg(nMonth, 2, 10, QChar('0')).arg(nDay, 2, 10, QChar('0'));
QString strAcquisitionTime = QString("%1%2%3").arg(nHour, 2, 10, QChar('0')).arg(nMinute, 2, 10, QChar('0')).arg(nSecond, 2, 10, QChar('0'));
QString strContentDate = strAcquisitionDate;
QString strContentTime = strAcquisitionTime;
QString strPatientOrientation;
QString strImageLaterality;
QString strImageComments;
strPatientOrientation = pAcquisitionInfo->GetImageInfo()->strPatientOrientation.c_str();
strImageLaterality = pAcquisitionInfo->GetImageInfo()->strImageLaterality.c_str();
strImageComments = pAcquisitionInfo->GetImageInfo()->strImageComments.c_str();
pAcquisitionInfo->GetImageInfo()->strAcquisitionDate = strAcquisitionDate.toStdString().c_str();
pAcquisitionInfo->GetImageInfo()->strAcquisitionTime = strAcquisitionTime.toStdString().c_str();
pAcquisitionInfo->GetImageInfo()->strContentDate = pAcquisitionInfo->GetImageInfo()->strAcquisitionDate;
pAcquisitionInfo->GetImageInfo()->strContentTime = pAcquisitionInfo->GetImageInfo()->strAcquisitionTime;
nStudyIndex = pAcquisitionInfo->m_nIndexStudy;
nImageNumberMax = 0;
nImageNumberMax = pAcquisitionInfo->m_nAcquisitionImageMax;
nImageNumberMax++;
pAcquisitionInfo->m_nAcquisitionImageMax = nImageNumberMax;
int nAcquisitionNumber = nImageNumberMax;
int nInstanceNumber = nImageNumberMax;
QString strStudyInstanceUID = pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID.c_str();
QString strSeriesInstanceUID = QString("%1.1").arg(strStudyInstanceUID);
strImageInstanceUID = QString("%1.%2").arg(strSeriesInstanceUID).arg(nImageNumberMax);
strQuery = QString("insert into AcquisitionTemp(`SeriesIndex`, `ImageNumber`, `ImageInstanceUID`, `FileLocation`, `StudyIndex` \
, `AcquisitionDate`, `AcquisitionTime`, `ContentDate`, `ContentTime`, `AcquisitionNumber`, `InstanceNumber`, `PatientOrientation`, `ImageLaterality`, `ImageComments`, `FileType`) \
values (%1, %2, '%3', '%4', %5, '%6', '%7', '%8', '%9', %10, %11, '%12', '%13', '%14', 0);").arg(pAcquisitionInfo->m_nIndexSeries_Image).arg(nImageNumberMax).arg(strImageInstanceUID).arg(pAcquisitionInfo->m_strImageFilename).arg(nStudyIndex).arg(strAcquisitionDate).arg(strAcquisitionTime).arg(strContentDate).arg(strContentTime).arg(nAcquisitionNumber).arg(nInstanceNumber).arg(strPatientOrientation).arg(strImageLaterality).arg(strImageComments);
pAcquisitionInfo->GetImageInfo()->nAcquisitionNumber = nImageNumberMax;
pAcquisitionInfo->GetImageInfo()->nImageNumber = nImageNumberMax;
pAcquisitionInfo->GetImageInfo()->nInstanceNumber = nImageNumberMax;
Execute(strQuery);
QList<QStringList*> listResponse;
strQuery = QString("select ID from AcquisitionTemp where FileLocation='%1';").arg(pAcquisitionInfo->m_strImageFilename);
ExecuteQuery(strQuery, &listResponse);
int nRet = listResponse.size();
if(listResponse.size()>0)
{
QStringList* pListData = listResponse[0];
QString strTmp = (*pListData)[0];
nRet = strTmp.toInt();
}
SDatabase::DeleteListReponse(listResponse);
//sqlite3_db_cacheflush(m_pSqliteDB);
//QProcess::execute("sync");
return nRet;
}
int SDatabase::InsertVideo(ACQUISITION_INFO *pAcquisitionInfo)
{
if(pAcquisitionInfo->GetSeriesInfo()->strSeriesInstanceUID.size()==0)
{
//InsertSeriesImage(pAcquisitionInfo);
}
if(pAcquisitionInfo->m_nIndexSeries_Movie==0)
{
return -1;
}
QDateTime dt = QDateTime::currentDateTime();
int nYear = dt.date().year();
int nMonth = dt.date().month();
int nDay = dt.date().day();
int nHour = dt.time().hour();
int nMinute = dt.time().minute();
int nSecond = dt.time().second();
QString strQuery;
QString strImageInstanceUID;
int nImageNumberMax = 0;
int nStudyIndex = 0;
QString strAcquisitionDate = QString("%1%2%3").arg(nYear, 4, 10, QChar('0')).arg(nMonth, 2, 10, QChar('0')).arg(nDay, 2, 10, QChar('0'));
QString strAcquisitionTime = QString("%1%2%3").arg(nHour, 2, 10, QChar('0')).arg(nMinute, 2, 10, QChar('0')).arg(nSecond, 2, 10, QChar('0'));
QString strContentDate = strAcquisitionDate;
QString strContentTime = strAcquisitionTime;
QString strPatientOrientation;
QString strImageLaterality;
QString strImageComments;
strPatientOrientation = pAcquisitionInfo->GetImageInfo()->strPatientOrientation.c_str();
strImageLaterality = pAcquisitionInfo->GetImageInfo()->strImageLaterality.c_str();
strImageComments = pAcquisitionInfo->GetImageInfo()->strImageComments.c_str();
pAcquisitionInfo->GetImageInfo()->strAcquisitionDate = strAcquisitionDate.toStdString().c_str();
pAcquisitionInfo->GetImageInfo()->strAcquisitionTime = strAcquisitionTime.toStdString().c_str();
pAcquisitionInfo->GetImageInfo()->strContentDate = pAcquisitionInfo->GetImageInfo()->strAcquisitionDate;
pAcquisitionInfo->GetImageInfo()->strContentTime = pAcquisitionInfo->GetImageInfo()->strAcquisitionTime;
nStudyIndex = pAcquisitionInfo->m_nIndexStudy;
nImageNumberMax = 0;
nImageNumberMax = pAcquisitionInfo->m_nAcquisitionMovieMax;
nImageNumberMax++;
pAcquisitionInfo->m_nAcquisitionMovieMax = nImageNumberMax;
int nAcquisitionNumber = nImageNumberMax;
int nInstanceNumber = nImageNumberMax;
QString strStudyInstanceUID = pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID.c_str();
QString strSeriesInstanceUID = QString("%1.2").arg(strStudyInstanceUID);
strImageInstanceUID = QString("%1.%2").arg(strSeriesInstanceUID).arg(nImageNumberMax);
strQuery = QString("insert into AcquisitionTemp(`SeriesIndex`, `ImageNumber`, `ImageInstanceUID`, `FileLocation`, `StudyIndex` \
, `AcquisitionDate`, `AcquisitionTime`, `ContentDate`, `ContentTime`, `AcquisitionNumber`, `InstanceNumber`, `PatientOrientation`, `ImageLaterality`, `ImageComments`, `FileType`) \
values (%1, %2, '%3', '%4', %5, '%6', '%7', '%8', '%9', %10, %11, '%12', '%13', '%14', 1);").arg(pAcquisitionInfo->m_nIndexSeries_Movie).arg(nImageNumberMax).arg(strImageInstanceUID).arg(pAcquisitionInfo->m_strVideoFilename).arg(nStudyIndex).arg(strAcquisitionDate).arg(strAcquisitionTime).arg(strContentDate).arg(strContentTime).arg(nAcquisitionNumber).arg(nInstanceNumber).arg(strPatientOrientation).arg(strImageLaterality).arg(strImageComments);
pAcquisitionInfo->GetImageInfo()->nAcquisitionNumber = nImageNumberMax;
pAcquisitionInfo->GetImageInfo()->nImageNumber = nImageNumberMax;
pAcquisitionInfo->GetImageInfo()->nInstanceNumber = nImageNumberMax;
Execute(strQuery);
QList<QStringList*> listResponse;
strQuery = QString("select ID from AcquisitionTemp where FileLocation='%1';").arg(pAcquisitionInfo->m_strVideoFilename);
ExecuteQuery(strQuery, &listResponse);
int nRet = listResponse.size();
if(listResponse.size()>0)
{
QStringList* pListData = listResponse[0];
QString strTmp = (*pListData)[0];
nRet = strTmp.toInt();
}
SDatabase::DeleteListReponse(listResponse);
//QProcess::execute("sync");
return nRet;
}
QList<QStringList*>* SDatabase::GetResult()
{
return m_pResult;
}
int SDatabase::GetHistory(SEARCH_ITEM* pSearchItem)
{
QString strSearchDate = pSearchItem->m_strStudyDate;
QString strSearchName = pSearchItem->m_strPatientName;
QString strDateStart = strSearchDate.mid(0, 10);
QString strDateEnd = strSearchDate.mid(11, 10);
QString strQuery;
QList<QStringList*> listResponse;
strQuery = QString("select * from StorageInfo where StudyDate<='%1' and StudyDate>='%2' and ImageDelete=0 group by PatientIndex;").arg(strDateEnd).arg(strDateStart);
ExecuteQuery(strQuery, &listResponse);
int nRet = 0;
nRet = listResponse.size();
SDatabase::DeleteListReponse(listResponse);
return nRet;
}
int SDatabase::GetHistoryStudy(SEARCH_ITEM* pSearchItem, bool bWithDelete)
{
QString strSearchDate = pSearchItem->m_strStudyDate;
QString strSearchName = pSearchItem->m_strPatientName;
QString strSearchID = pSearchItem->m_strPatientID;
QString strDateStart = strSearchDate.mid(0, 10);
QString strDateEnd = strSearchDate.mid(11, 10);
strSearchName = QString("%%1%").arg(pSearchItem->m_strPatientName);
strSearchID = QString("%%1%").arg(pSearchItem->m_strPatientID);
strDateStart.remove('/');
strDateEnd.remove('/');
QString strQuery;
if(bWithDelete==true)
{
strQuery = QString("select * from HistoryStudyWithDelete where StudyDate<='%1' and StudyDate>='%2' and PatientName like '%%3%' order by CreateDateTime desc;").arg(strDateEnd).arg(strDateStart).arg(strSearchName);
}
else
{
//strQuery = QString("select * from HistoryStudy where StudyDate<='%1' and StudyDate>='%2' and PatientName like '%3' and PatientID like '%4' order by CreateDateTime desc;").arg(strDateEnd).arg(strDateStart).arg(strSearchName.toStdString()).arg(strSearchID.toStdString());
strQuery.sprintf("select * from HistoryStudy where StudyDate<='%s' and StudyDate>='%s' and PatientName like '%s' and PatientID like '%s' order by CreateDateTime desc;", strDateEnd.toStdString().c_str(), strDateStart.toStdString().c_str(), strSearchName.toStdString().c_str(), strSearchID.toStdString().c_str());
//strQuery.sprintf("select * from HistoryStudy where StudyDate<='%s' and StudyDate>='%s' and PatientName like '%s' and PatientID like '%s' order by CreateDateTime desc;", "123", "456", strSearchName.toStdString().c_str(), strSearchID.toStdString().c_str());
}
//qDebug() << strQuery;
ExecuteQuery(strQuery, m_pResult, 999999);
int nRet = m_pResult->size();
return nRet;
}
int SDatabase::ImageDeleteFromImage(QString strFile, bool bDelete)
{
QString strQuery;
int nDelete = 0;
if(bDelete==true)
{
nDelete = 1;
}
strQuery = QString("update Image SET ImageDelete='%1' where FileLocation='%2';").arg(nDelete).arg(strFile);
int nRet = Execute(strQuery);
//QProcess::execute("sync");
return nRet;
}
int SDatabase::ImageDeleteFromAcqusitionTemp(QString strFile, bool bDelete)
{
QString strQuery;
int nDelete = 0;
if(bDelete==true)
{
nDelete = 1;
}
strQuery = QString("update AcquisitionTemp SET ImageDelete='%1' where FileLocation='%2';").arg(nDelete).arg(strFile);
int nRet = Execute(strQuery);
//QProcess::execute("sync");
return nRet;
}
int SDatabase::GetImageWithStudyIndex(int nIndex, QList<QStringList*>& listResponse)
{
QString strQuery;
strQuery = QString("select * from StorageInfo where StudyIndex=%1 and ImageDelete=0 order by ImageIndex desc;").arg(nIndex);
ExecuteQuery(strQuery, &listResponse);
int nRet = listResponse.size();
return nRet;
}
int SDatabase::GetImageWithStudyIndexASC(int nIndex, QList<QStringList*>& listResponse)
{
QString strQuery;
strQuery = QString("select * from StorageInfo where StudyIndex=%1 and ImageDelete=0 order by ImageIndex asc;").arg(nIndex);
ExecuteQuery(strQuery, &listResponse);
int nRet = listResponse.size();
return nRet;
}
int SDatabase::GetAcquisitionNumber(QString strFile)
{
QString strQuery;
int nAcquisitionNumber = 0;
bool bFinish = false;
int i=0;
//for(i=0 ; i<10 && bFinish==false ; i++)
{
strQuery = QString("select `AcquisitionNumber` from StorageInfo where `FileLocation`='%1';").arg(strFile);
QList<QStringList*> listResponse;
ExecuteQuery(strQuery, &listResponse);
if(listResponse.size()>0)
{
QString strAcquisitionNumber;
QStringList* pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strAcquisitionNumber = pDataList->at(0);
nAcquisitionNumber = strAcquisitionNumber.toInt();
bFinish = true;
}
else
{
bFinish = false;
}
}
SDatabase::DeleteListReponse(listResponse);
}
return nAcquisitionNumber;
}
int SDatabase::GetSeriesImageIndexWithInstanceUID(QString* pStrStudyInstanceUID)
{
QString strQuery;
//strQuery = QString("select `ID` from Series where `SeriesInstanceUID`='%1';").arg(*pStrInstanceUID);
strQuery = QString("select `ID` from Series where `StudyIndex`=(select `ID` from Study where StudyInstanceUID='%1') and SeriesNumber='1';").arg(*pStrStudyInstanceUID);
QList<QStringList*> listResponse;
ExecuteQuery(strQuery, &listResponse);
int nSeriesIndexID = 0;
if(listResponse.size()>0)
{
QString strSeriesIndexID;
QStringList* pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesIndexID = pDataList->at(0);
}
nSeriesIndexID = strSeriesIndexID.toInt();
}
SDatabase::DeleteListReponse(listResponse);
return nSeriesIndexID;
}
int SDatabase::GetSeriesMovieIndexWithInstanceUID(QString* pStrStudyInstanceUID)
{
QString strQuery;
strQuery = QString("select `ID` from Series where `StudyIndex`=(select `ID` from Study where StudyInstanceUID='%1') and SeriesNumber='2';").arg(*pStrStudyInstanceUID);
QList<QStringList*> listResponse;
ExecuteQuery(strQuery, &listResponse);
int nSeriesIndexID = 0;
if(listResponse.size()>0)
{
QString strSeriesIndexID;
QStringList* pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strSeriesIndexID = pDataList->at(0);
}
nSeriesIndexID = strSeriesIndexID.toInt();
}
SDatabase::DeleteListReponse(listResponse);
return nSeriesIndexID;
}
vector<QString> SDatabase::GetImageListWithStudy(QString* pStrStudyDate, QString* pStrPatientID)
{
vector<QString> list;
QString strQuery;
strQuery = QString("select FileLocation from StorageInfo where StudyDate='%1' and PatientID='%2' and ImageDelete=0 and FileType=0 order by ImageIndex desc").arg(*pStrStudyDate).arg(*pStrPatientID);
QList<QStringList*> listResponse;
ExecuteQuery(strQuery, &listResponse);
int i=0;
for(i=0 ; i<listResponse.size() ; i++)
{
QStringList* pListData = listResponse[i];
QString strData;
strData = (*pListData)[0];
list.push_back(strData);
}
SDatabase::DeleteListReponse(listResponse);
return list;
}
vector<QString> SDatabase::GetVideoListWithStudy(QString* pStrStudyDate, QString* pStrPatientID)
{
vector<QString> list;
QString strQuery;
strQuery = QString("select FileLocation from StorageInfo where StudyDate='%1' and PatientID='%2' and ImageDelete=0 and FileType=1 order by ImageIndex desc").arg(*pStrStudyDate).arg(*pStrPatientID);
QList<QStringList*> listResponse;
ExecuteQuery(strQuery, &listResponse);
int i=0;
for(i=0 ; i<listResponse.size() ; i++)
{
QStringList* pListData = listResponse[i];
QString strData;
strData = (*pListData)[0];
list.push_back(strData);
}
SDatabase::DeleteListReponse(listResponse);
return list;
}
void SDatabase::SendUpdate(QString strFilename)
{
QString strQuery;
strQuery = QString("update Image set ImageSend=1 where FileLocation='%1';").arg(strFilename);
Execute(strQuery);
//QString strLog = QString("Send File: %1\n").arg(strFilename);
//WRITE_FUNCTION_LOG_PARAM(strFilename);
//MainWindow::GetCommonData()->WriteLog(strLog);
}
void SDatabase::SendUpdateAcquisitionTemp(QString strFilename)
{
QString strQuery;
strQuery = QString("update AcquisitionTemp SET ImageSend=1 where FileLocation='%1';").arg(strFilename);
Execute(strQuery);
//QString strLog = QString("Send File: %1\n").arg(strFilename);
//WRITE_FUNCTION_LOG_PARAM(strFilename);
//MainWindow::GetCommonData()->WriteLog(strLog);
}
QList<QStringList*>* SDatabase::GetScheduledDeleteFileList()
{
QDate date = QDate::currentDate();
date = date.addDays(-60);
int nYear = date.year();
int nMonth = date.month();
int nDay = date.day();
QString strSearchDate = QString("%1%2%3").arg(nYear, 4, 10, QChar('0')).arg(nMonth, 2, 10, QChar('0')).arg(nDay, 2, 10, QChar('0'));
QString strQuery;
strQuery = QString("select * from Image where AcquisitionDate < '%1' and ImageStorage=0;").arg(strSearchDate);
ExecuteQuery(strQuery, NULL, 500);
return m_pResult;
}
void SDatabase::UpdateScheduledDeleteCompleteStudyDate()
{
QDate date = QDate::currentDate();
date = date.addDays(-60);
int nYear = date.year();
int nMonth = date.month();
int nDay = date.day();
QString strSearchDate = QString("%1%2%3").arg(nYear, 4, 10, QChar('0')).arg(nMonth, 2, 10, QChar('0')).arg(nDay, 2, 10, QChar('0'));
QString strQuery;
strQuery = QString("update Image set ImageStorage=1 where AcquisitionDate < '%1' and ImageStorage=0;").arg(strSearchDate);
Execute(strQuery);
}
QList<QStringList*>* SDatabase::GetScheduledDeleteStudyDateList()
{
QDate date = QDate::currentDate();
date = date.addDays(-60);
int nYear = date.year();
int nMonth = date.month();
int nDay = date.day();
QString strSearchDate = QString("%1%2%3").arg(nYear, 4, 10, QChar('0')).arg(nMonth, 2, 10, QChar('0')).arg(nDay, 2, 10, QChar('0'));
QString strQuery;
strQuery = QString("select DISTINCT(AcquisitionDate) from Image where AcquisitionDate < '%1' and ImageStorage=0;").arg(strSearchDate);
ExecuteQuery(strQuery, NULL, 500);
return m_pResult;
}
bool SDatabase::AutoremoveImageTable()
{
bool bRet = true;
int nRet = 0;
QDate date = QDate::currentDate();
date = date.addDays(-60);
int nYear = date.year();
int nMonth = date.month();
int nDay = date.day();
QString strSearchDate = QString("%1%2%3").arg(nYear, 4, 10, QChar('0')).arg(nMonth, 2, 10, QChar('0')).arg(nDay, 2, 10, QChar('0'));
QString strQuery;
strQuery = QString("DELETE from Image where AcquisitionDate < '%1';").arg(strSearchDate);
nRet = Execute(strQuery);
strQuery = QString("vacuum;");
nRet = Execute(strQuery);
return bRet;
}
void SDatabase::SetDeleteStorageFile(QString strFilename)
{
QString strQuery;
strQuery = QString("update Image set ImageStorage=1 where FileLocation='%1';").arg(strFilename);
Execute(strQuery);
}
QList<QStringList*>* SDatabase::GetVideoFileList()
{
QString strQuery;
strQuery = QString("select FileLocation from Image where ImageStorage=0 and FileType=1 order by ID asc;");
ExecuteQuery(strQuery);
return m_pResult;
}
QString SDatabase::GetValueAdavancedTable(QString strColumn)
{
QString strQuery = QString("select %1 from AdvancedSetting where ID=1;").arg(strColumn);
QString strData = "";
ExecuteQuery(strQuery);
QList<QStringList*>* pResult = NULL;
pResult = GetResult();
if(pResult->size()>0)
{
QStringList* pListData = (*pResult)[0];
pListData = (*pResult)[0];
if(pListData->size()>0)
{
strData = (*pListData)[0];
}
}
return strData;
}
void SDatabase::CheckAdavancedTable()
{
QString strQuery;
strQuery = "select * from AdvancedSetting;";
ExecuteQuery(strQuery);
QList<QStringList*>* pResult = NULL;
pResult = GetResult();
if(pResult->size()==0)
{
MakeTableAdvancedSetting();
QString strInitAdvancedSetting = "insert into AdvancedSetting (EnableNetworkShare) values ('Disabled');";
Execute(strInitAdvancedSetting);
}
else
{
QString strAutoCaptureSendDICOM = "";
QString strAutoExitCaptureSendDICOM = "";
QString strAutoVideoCapture = "";
QString strEnableNetworkShare = "";
QString strNetworkAutoSend = "";
QString strNetworkShareIP = "";
QString strNetworkShareFolder = "";
QString strNetworkSMBVersion = "";
QString strNetworkShareID = "";
QString strNetworkSharePassword = "";
QString strDICOMCharacterSet = "";
QString strAutoCloseSendFinish = "";
QString strAutoLogin = "";
QString strDICOMCompress = "";
QString strVideoMode = "";
QString strCropMode = "";
QString strUseFixWidthLevel = "";
QString strUseLogLevel = "";
QString strScreenSaverTime = "";
strAutoCaptureSendDICOM = GetValueAdavancedTable("AutoCaptureSendDICOM");
strAutoExitCaptureSendDICOM = GetValueAdavancedTable("AutoExitCaptureSendDICOM");
strAutoVideoCapture = GetValueAdavancedTable("AutoVideoCapture");
strEnableNetworkShare = GetValueAdavancedTable("EnableNetworkShare");
strNetworkAutoSend = GetValueAdavancedTable("NetworkAutoSend");
strNetworkShareIP = GetValueAdavancedTable("NetworkShareIP");
strNetworkShareFolder = GetValueAdavancedTable("NetworkShareFolder");
strNetworkSMBVersion = GetValueAdavancedTable("NetworkSMBVersion");
strNetworkShareID = GetValueAdavancedTable("NetworkShareID");
strNetworkSharePassword = GetValueAdavancedTable("NetworkSharePassword");
strDICOMCharacterSet = GetValueAdavancedTable("DICOMCharacterSet");
strAutoCloseSendFinish = GetValueAdavancedTable("AutoCloseSendFinish");
strAutoLogin = GetValueAdavancedTable("AutoLogin");
strDICOMCompress = GetValueAdavancedTable("DICOMCompress");
strVideoMode = GetValueAdavancedTable("VideoMode");
strCropMode = GetValueAdavancedTable("CropMode");
strUseFixWidthLevel = GetValueAdavancedTable("UseFixWidthLevel");
strUseLogLevel = GetValueAdavancedTable("UseLogLevel");
strScreenSaverTime = GetValueAdavancedTable("ScreenSaverTime");
if(strAutoCaptureSendDICOM.size()==0 || strAutoExitCaptureSendDICOM.size()==0 || strAutoVideoCapture.size()==0 ||
strDICOMCharacterSet.size()==0 || strAutoCloseSendFinish.size()==0 || strAutoLogin.size()==0 ||
strDICOMCompress.size()==0 || strVideoMode.size()==0 || strCropMode.size()==0 || strUseFixWidthLevel.size()==0 ||
strUseLogLevel.size()==0 || strScreenSaverTime.size()==0
)
{
if(strAutoCaptureSendDICOM.size()==0)
{
strAutoCaptureSendDICOM = "0";
}
if(strAutoExitCaptureSendDICOM.size()==0)
{
strAutoExitCaptureSendDICOM = "0";
}
if(strAutoVideoCapture.size()==0)
{
strAutoVideoCapture = "0";
}
if(strDICOMCharacterSet.size()==0)
{
strDICOMCharacterSet = "EUC-KR";
}
if(strAutoCloseSendFinish.size()==0)
{
strAutoCloseSendFinish = "0";
}
if(strAutoLogin.size()==0)
{
strAutoLogin = "1";
}
if(strDICOMCompress.size()==0)
{
strDICOMCompress = "0";
}
if(strVideoMode.size()==0)
{
strVideoMode = "0";
}
if(strCropMode.size()==0)
{
strCropMode = "0";
}
if(strUseFixWidthLevel.size()==0)
{
strUseFixWidthLevel = "0";
}
if(strUseLogLevel.size()==0)
{
strUseLogLevel = "0";
}
if(strScreenSaverTime.size()==0)
{
strScreenSaverTime = "0";
}
MakeTableAdvancedSetting();
QString strInitAdvancedSetting = QString("insert into AdvancedSetting (\
AutoCaptureSendDICOM, AutoExitCaptureSendDICOM, AutoVideoCapture, \
EnableNetworkShare, NetworkAutoSend, NetworkShareIP, NetworkShareFolder, \
NetworkSMBVersion, NetworkShareID, NetworkSharePassword, DICOMCharacterSet, AutoCloseSendFinish, AutoLogin, DICOMCompress, VideoMode, CropMode, UseFixWidthLevel, UseLogLevel, ScreenSaverTime) \
values ('%1','%2','%3','%4','%5','%6','%7','%8','%9','%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17', '%18', '%19');")
.arg(strAutoCaptureSendDICOM).arg(strAutoExitCaptureSendDICOM).arg(strAutoVideoCapture)
.arg(strEnableNetworkShare).arg(strNetworkAutoSend).arg(strNetworkShareIP).arg(strNetworkShareFolder)
.arg(strNetworkSMBVersion).arg(strNetworkShareID).arg(strNetworkSharePassword).arg(strDICOMCharacterSet)
.arg(strAutoCloseSendFinish).arg(strAutoLogin).arg(strDICOMCompress).arg(strVideoMode).arg(strCropMode)
.arg(strUseFixWidthLevel).arg(strUseLogLevel).arg(strScreenSaverTime);
Execute(strInitAdvancedSetting);
}
}
}
void SDatabase::CheckLoginTable()
{
QString strQuery = "select * from LoginUser;";
ExecuteQuery(strQuery);
QList<QStringList*>* pResult = GetResult();
if(pResult->size()==0)
{
MakeTableUser();
QString strInitLoginUser = "insert into LoginUser (LoginID, LoginPassword) values ('admin', 'smartquadra')";
Execute(strInitLoginUser);
}
}
void SDatabase::MakeViewTable()
{
Execute("DROP VIEW IF EXISTS Storage;"
"CREATE VIEW Storage as select d2.SeriesNumber, d3.ID as ImageIndex, d1.ID as StudyIndex, d2.ID as SeriesIndex, d1.PatientIndex, d2.Modality, d1.StudyDate, d1.StudyTime, d3.FileLocation, d1.StudyInstanceUID, d2.SeriesInstanceUID, d3.ImageInstanceUID, d3.CreateDateTime, d3.ImageDelete, d3.ImageSend, d3.FileType, d3.AcquisitionDate, d3.AcquisitionTime, d3.AcquisitionNumber, d3.ImageStorage from Study as d1 join (Series as d2 join Image as d3 on d3.seriesIndex=d2.id) on d1.id=d2.studyindex;");
Execute("DROP VIEW IF EXISTS StorageInfo;"
"CREATE VIEW StorageInfo as select d1.*, d3.PatientID, d3.PatientName, d3.PatientAge, d3.PatientSex, (select count(*) from Storage as d2 where d1.StudyInstanceUID=d2.StudyInstanceUID) as TotalImageCount from Storage as d1 join Patient as d3 on (d1.PatientIndex=d3.ID)");
//Execute("DROP VIEW IF EXISTS HistoryStudy;"
//"CREATE VIEW HistoryStudy as select d4.ID, d4.PatientIndex, d5.PatientID, d5.PatientName, d5.PatientAge, d5.PatientSex, d5.PatientBirthDate, d5.PatientWeight, d4.CreateDateTime, d4.StudyDate, d4.StudyTime, d4.StudyCodeValue, d4.PatientLocation, d4.AccessionNumber, d4.ReferringPhysiciansName, d4.StudyInstanceUID, d4.SeriesInstanceUID, d4.StudyDescription, d4.SeriesDescription, d4.OperatorsName, d4.ImageCount, d4.ImageSend, d4.Modality, d4.SeriesDate, d4.SeriesTime, d4.SeriesNumber from (select *, (select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.ImageDelete=0) as ImageCount, (select sum(ImageSend) from Image as d3 where d3.StudyIndex=d1.ID and d3.ImageDelete=0) as ImageSend from Study as d1 join Series as d2 on (d2.StudyIndex=d1.ID)) as d4 join Patient as d5 on (d4.PatientIndex=d5.ID)");
/*
Execute("DROP VIEW IF EXISTS HistoryStudy;"
"CREATE VIEW HistoryStudy as "
"select d4.StudyIndex, d4.PatientIndex, d5.PatientID, d5.PatientName, d5.PatientAge, d5.PatientSex, d5.PatientBirthDate, d5.PatientWeight, d4.CreateDateTime, d4.StudyDate, d4.StudyTime, d4.StudyCodeValue, d4.PatientLocation, d4.AccessionNumber, d4.ReferringPhysiciansName, d4.StudyInstanceUID, d4.SeriesInstanceUID, d4.StudyDescription, d4.SeriesDescription, d4.OperatorsName, d4.ImageCount, d4.ImageSend, d4.Modality, d4.SeriesDate, d4.SeriesTime, max(d4.SeriesNumber), d4.VideoCount "
"from (select *, (select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=1 and d3.ImageDelete=0) as ImageCount, "
"(select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=2 and d3.ImageDelete=0) as VideoCount, "
"(select sum(ImageSend) from Image as d3 where d3.StudyIndex=d1.ID) as ImageSend "
"from Study as d1 join Series as d2 on (d2.StudyIndex=d1.ID)) as d4 join Patient as d5 on (d4.PatientIndex=d5.ID)");
Execute("DROP VIEW IF EXISTS HistoryStudyWithDelete;"
"CREATE VIEW HistoryStudyWithDelete as "
"select d4.StudyIndex, d4.PatientIndex, d5.PatientID, d5.PatientName, d5.PatientAge, d5.PatientSex, d5.PatientBirthDate, d5.PatientWeight, d4.CreateDateTime, d4.StudyDate, d4.StudyTime, d4.StudyCodeValue, d4.PatientLocation, d4.AccessionNumber, d4.ReferringPhysiciansName, d4.StudyInstanceUID, d4.SeriesInstanceUID, d4.StudyDescription, d4.SeriesDescription, d4.OperatorsName, d4.ImageCount, d4.ImageSend, d4.Modality, d4.SeriesDate, d4.SeriesTime, max(d4.SeriesNumber), d4.VideoCount "
"from (select *, (select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=1) as ImageCount, "
"(select count(*) from Image as d3 where d3.StudyIndex=d1.ID and d3.SeriesIndex=2) as VideoCount, "
"(select sum(ImageSend) from Image as d3 where d3.StudyIndex=d1.ID) as ImageSend "
"from Study as d1 join Series as d2 on (d2.StudyIndex=d1.ID)) as d4 join Patient as d5 on (d4.PatientIndex=d5.ID)");
*/
Execute("DROP VIEW IF EXISTS HistoryStudy;"
"CREATE VIEW HistoryStudy as "
"select StudyIndex, PatientIndex, PatientID, PatientName, PatientAge, PatientSex, PatientBirthDate, PatientWeight, CreateDateTime, StudyDate, StudyTime, StudyCodeValue, PatientLocation, AccessionNumber, ReferringPhysiciansName, StudyInstanceUID, SeriesInstanceUID, StudyDescription, SeriesDescription, OperatorsName, ImageCount, ImageSendCount, Modality, SeriesDate, SeriesTime, SeriesNumber, VideoCount from (select DISTINCT(d1.ID), d3.StudyIndex, d1.PatientIndex, d4.PatientID, d4.PatientName, d4.PatientAge, d4.PatientSex, d4.PatientBirthDate, d4.PatientWeight, d4.CreateDateTime, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, d1.ReferringPhysiciansName, d1.StudyInstanceUID, d2.SeriesInstanceUID, d1.StudyDescription, d2.SeriesDescription, d2.OperatorsName, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageDelete=0 and Image.ImageSend=1) as ImageSendCount, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageDelete=0) as ImageCount, d2.Modality, d2.SeriesDate, d2.SeriesTime, d2.SeriesNumber, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=1 and Image.ImageDelete=0) as VideoCount from Study as d1 join Series as d2 on (d1.ID=d2.StudyIndex) join Image as d3 on(d2.ID=d3.SeriesIndex and d2.SeriesNumber=1) join Patient as d4 on (d4.ID=d1.PatientIndex))");
Execute("DROP VIEW IF EXISTS HistoryStudyWithDelete;"
"CREATE VIEW HistoryStudyWithDelete as "
"select StudyIndex, PatientIndex, PatientID, PatientName, PatientAge, PatientSex, PatientBirthDate, PatientWeight, CreateDateTime, StudyDate, StudyTime, StudyCodeValue, PatientLocation, AccessionNumber, ReferringPhysiciansName, StudyInstanceUID, SeriesInstanceUID, StudyDescription, SeriesDescription, OperatorsName, ImageCount, ImageSend, Modality, SeriesDate, SeriesTime, SeriesNumber, VideoCount from (select DISTINCT(d1.ID), d3.StudyIndex, d1.PatientIndex, d4.PatientID, d4.PatientName, d4.PatientAge, d4.PatientSex, d4.PatientBirthDate, d4.PatientWeight, d4.CreateDateTime, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, d1.ReferringPhysiciansName, d1.StudyInstanceUID, d2.SeriesInstanceUID, d1.StudyDescription, d2.SeriesDescription, d2.OperatorsName, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 ) as ImageCount, d3.ImageSend, d2.Modality, d2.SeriesDate, d2.SeriesTime, d2.SeriesNumber, (select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=1) as VideoCount from Study as d1 join Series as d2 on (d1.ID=d2.StudyIndex) join Image as d3 on(d2.ID=d3.SeriesIndex and d2.SeriesNumber=1) join Patient as d4 on (d4.ID=d1.PatientIndex))");
/*
Execute(
"DROP VIEW IF EXISTS HistoryStudy; "
"CREATE VIEW HistoryStudy as "
"select StudyIndex, PatientIndex, PatientID, PatientName, PatientAge, PatientSex, PatientBirthDate, PatientWeight, CreateDateTime, StudyDate, StudyTime, StudyCodeValue, PatientLocation, AccessionNumber, "
"ReferringPhysiciansName, StudyInstanceUID, SeriesInstanceUID, StudyDescription, SeriesDescription, OperatorsName, ImageCount, ImageSendCount, Modality, SeriesDate, SeriesTime, SeriesNumber, VideoCount "
"from (select DISTINCT(d1.ID), d1.PatientIndex, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, d1.ReferringPhysiciansName, d1.StudyInstanceUID, d1.StudyDescription, "
"(select d4.PatientID from patient as d4 where d4.ID=d1.PatientIndex) as PatientID,"
"(select d4.PatientName from patient as d4 where d4.ID=d1.PatientIndex) as PatientName,"
"(select d4.PatientAge from patient as d4 where d4.ID=d1.PatientIndex) as PatientAge,"
"(select d4.PatientSex from patient as d4 where d4.ID=d1.PatientIndex) as PatientSex,"
"(select d4.PatientBirthDate from patient as d4 where d4.ID=d1.PatientIndex) as PatientBirthDate, "
"(select d4.PatientWeight from patient as d4 where d4.ID=d1.PatientIndex) as PatientWeight, "
"(select d1.CreateDateTime from patient as d4 where d4.ID=d1.PatientIndex) as CreateDateTime, "
//"(select d2.StudyIndex from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as StudyIndex, "
"(d1.ID) as StudyIndex, "
"(select d2.SeriesInstanceUID from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesInstanceUID, "
"(select d2.SeriesDescription from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDescription, "
"(select d2.OperatorsName from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as OperatorsName, "
"(select d2.Modality from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as Modality, "
"(select d2.SeriesDate from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDate, "
"(select d2.SeriesTime from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesTime, "
"(select d2.SeriesNumber from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesNumber, "
"(select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageDelete=0 and Image.ImageSend=1) as ImageSendCount, "
"(select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageDelete=0) as ImageCount, "
"(select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=1 and Image.ImageDelete=0) as VideoCount "
"from Study as d1);"
);
Execute(
"DROP VIEW IF EXISTS HistoryStudyWithDelete; "
"CREATE VIEW HistoryStudyWithDelete as "
"select StudyIndex, PatientIndex, PatientID, PatientName, PatientAge, PatientSex, PatientBirthDate, PatientWeight, CreateDateTime, StudyDate, StudyTime, StudyCodeValue, PatientLocation, AccessionNumber, "
"ReferringPhysiciansName, StudyInstanceUID, SeriesInstanceUID, StudyDescription, SeriesDescription, OperatorsName, ImageCount, ImageSendCount, Modality, SeriesDate, SeriesTime, SeriesNumber, VideoCount "
"from (select DISTINCT(d1.ID), d1.PatientIndex, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, d1.ReferringPhysiciansName, d1.StudyInstanceUID, d1.StudyDescription, "
"(select d4.PatientID from patient as d4 where d4.ID=d1.PatientIndex) as PatientID,"
"(select d4.PatientName from patient as d4 where d4.ID=d1.PatientIndex) as PatientName,"
"(select d4.PatientAge from patient as d4 where d4.ID=d1.PatientIndex) as PatientAge,"
"(select d4.PatientSex from patient as d4 where d4.ID=d1.PatientIndex) as PatientSex,"
"(select d4.PatientBirthDate from patient as d4 where d4.ID=d1.PatientIndex) as PatientBirthDate, "
"(select d4.PatientWeight from patient as d4 where d4.ID=d1.PatientIndex) as PatientWeight, "
"(select d1.CreateDateTime from patient as d4 where d4.ID=d1.PatientIndex) as CreateDateTime, "
//"(select d2.StudyIndex from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as StudyIndex, "
"(d1.ID) as StudyIndex, "
"(select d2.SeriesInstanceUID from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesInstanceUID, "
"(select d2.SeriesDescription from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDescription, "
"(select d2.OperatorsName from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as OperatorsName, "
"(select d2.Modality from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as Modality, "
"(select d2.SeriesDate from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDate, "
"(select d2.SeriesTime from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesTime, "
"(select d2.SeriesNumber from series as d2 where d1.ID=d2.StudyIndex and d2.SeriesNumber=1) as SeriesNumber, "
"(select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 and Image.ImageSend=1) as ImageSendCount, "
"(select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=0 ) as ImageCount, "
"(select count(*) from Image where Image.StudyIndex=d1.ID and Image.FileType=1 ) as VideoCount "
"from Study as d1);"
);
*/
Execute(
"DROP VIEW IF EXISTS HistoryStudy; "
"CREATE VIEW HistoryStudy as "
"select Q.StudyIndex, Q.PatientIndex, "
"(select d4.PatientID from patient as d4 where d4.ID=Q.PatientIndex) as PatientID, "
"(select d4.PatientName from patient as d4 where d4.ID=Q.PatientIndex) as PatientName, "
"(select d4.PatientAge from patient as d4 where d4.ID=Q.PatientIndex) as PatientAge, "
"(select d4.PatientSex from patient as d4 where d4.ID=Q.PatientIndex) as PatientSex, "
"(select d4.PatientBirthDate from patient as d4 where d4.ID=Q.PatientIndex) as PatientBirthDate, "
"(select d4.PatientWeight from patient as d4 where d4.ID=Q.PatientIndex) as PatientWeight, "
"(select Q.CreateDateTime from patient as d4 where d4.ID=Q.PatientIndex) as CreateDateTime, "
"Q.StudyDate as StudyDate, Q.StudyTime as StudyTime, Q.StudyCodeValue as StudyCodeValue, Q.PatientLocation as PatientLocation, Q.AccessionNumber as AccessionNumber, "
"ReferringPhysiciansName, StudyInstanceUID, "
"(select d2.SeriesInstanceUID from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesInstanceUID, "
"StudyDescription, "
"(select d2.SeriesDescription from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDescription, "
"(select d2.OperatorsName from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as OperatorsName, "
"(select count(*) from Image where Image.StudyIndex=Q.StudyIndex and Image.FileType=0 and Image.ImageDelete=0) as ImageCount, "
"(select count(*) from Image where Image.StudyIndex=Q.StudyIndex and Image.FileType=0 and Image.ImageDelete=0 and Image.ImageSend=1) as ImageSendCount, "
"(select d2.Modality from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as Modality, "
"(select d2.SeriesDate from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDate, "
"(select d2.SeriesTime from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesTime, "
"(select d2.SeriesNumber from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesNumber, "
"(select count(*) from Image where Image.StudyIndex=Q.StudyIndex and Image.FileType=1 and Image.ImageDelete=0) as VideoCount "
"from (select DISTINCT(d1.ID), d1.PatientIndex, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, "
" d1.ReferringPhysiciansName, d1.StudyInstanceUID, d1.StudyDescription, "
" (d1.ID) as StudyIndex, "
" (d1.PatientIndex) as PatientIndex,"
" (d1.CreateDateTime)"
" from Study as d1) as Q; "
);
Execute(
"DROP VIEW IF EXISTS HistoryStudyWithDelete; "
"CREATE VIEW HistoryStudyWithDelete as "
"select Q.StudyIndex, Q.PatientIndex, "
"(select d4.PatientID from patient as d4 where d4.ID=Q.PatientIndex) as PatientID, "
"(select d4.PatientName from patient as d4 where d4.ID=Q.PatientIndex) as PatientName, "
"(select d4.PatientAge from patient as d4 where d4.ID=Q.PatientIndex) as PatientAge, "
"(select d4.PatientSex from patient as d4 where d4.ID=Q.PatientIndex) as PatientSex, "
"(select d4.PatientBirthDate from patient as d4 where d4.ID=Q.PatientIndex) as PatientBirthDate, "
"(select d4.PatientWeight from patient as d4 where d4.ID=Q.PatientIndex) as PatientWeight, "
"(select Q.CreateDateTime from patient as d4 where d4.ID=Q.PatientIndex) as CreateDateTime, "
"Q.StudyDate as StudyDate, Q.StudyTime as StudyTime, Q.StudyCodeValue as StudyCodeValue, Q.PatientLocation as PatientLocation, Q.AccessionNumber as AccessionNumber, "
"ReferringPhysiciansName, StudyInstanceUID, "
"(select d2.SeriesInstanceUID from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesInstanceUID, "
"StudyDescription, "
"(select d2.SeriesDescription from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDescription, "
"(select d2.OperatorsName from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as OperatorsName, "
"(select count(*) from Image where Image.StudyIndex=Q.StudyIndex and Image.FileType=0) as ImageCount, "
"(select count(*) from Image where Image.StudyIndex=Q.StudyIndex and Image.FileType=0 and Image.ImageSend=1) as ImageSendCount, "
"(select d2.Modality from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as Modality, "
"(select d2.SeriesDate from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesDate, "
"(select d2.SeriesTime from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesTime, "
"(select d2.SeriesNumber from series as d2 where Q.StudyIndex=d2.StudyIndex and d2.SeriesNumber=1) as SeriesNumber, "
"(select count(*) from Image where Image.StudyIndex=Q.StudyIndex and Image.FileType=1) as VideoCount "
"from (select DISTINCT(d1.ID), d1.PatientIndex, d1.StudyDate, d1.StudyTime, d1.StudyCodeValue, d1.PatientLocation, d1.AccessionNumber, "
" d1.ReferringPhysiciansName, d1.StudyInstanceUID, d1.StudyDescription, "
" (d1.ID) as StudyIndex, "
" (d1.PatientIndex) as PatientIndex,"
" (d1.CreateDateTime)"
" from Study as d1) as Q; "
);
Execute(
"DROP VIEW IF EXISTS Storage;"
"CREATE VIEW Storage as "
"select "
"(select d1.ID from Study as d1 where d3.StudyIndex=d1.ID) as StudyIndex,"
"(select d1.PatientIndex from Study as d1 where d3.StudyIndex=d1.ID) as PatientIndex,"
"(select d1.StudyDate from Study as d1 where d3.StudyIndex=d1.ID) as StudyDate,"
"(select d1.StudyTime from Study as d1 where d3.StudyIndex=d1.ID) as StudyTime,"
"(select d1.StudyInstanceUID from Study as d1 where d3.StudyIndex=d1.ID) as StudyInstanceUID,"
"(select d2.SeriesNumber from Series as d2 where d2.ID=d3.SeriesIndex) as SeriesNumber, "
"(select d2.Modality from Series as d2 where d2.ID=d3.SeriesIndex) as Modality, "
"(select d2.SeriesInstanceUID from Series as d2 where d2.ID=d3.SeriesIndex) as SeriesInstanceUID, "
"d3.SeriesIndex as SeriesIndex, "
"d3.ID as ImageIndex,"
"d3.FileLocation as FileLocation,"
"d3.ImageInstanceUID as ImageInstanceUID,"
"d3.CreateDateTime as CreateDateTime,"
"d3.ImageDelete as ImageDelete,"
"d3.ImageSend as ImageSend,"
"d3.FileType as FileType,"
"d3.AcquisitionDate as AcquisitionDate,"
"d3.AcquisitionTime as AcquisitionTime,"
"d3.AcquisitionNumber as AcquisitionNumber,"
"d3.ImageStorage as ImageStorage, "
"d3.ImageNumber as ImageNumber "
" from Image as d3;"
);
Execute(
"DROP VIEW IF EXISTS StorageInfo;"
"CREATE VIEW StorageInfo as "
"select "
"(select d1.ID from Study as d1 where d3.StudyIndex=d1.ID) as StudyIndex,"
"(select d1.PatientIndex from Study as d1 where d3.StudyIndex=d1.ID) as PatientIndex,"
"(select d1.StudyDate from Study as d1 where d3.StudyIndex=d1.ID) as StudyDate,"
"(select d1.StudyTime from Study as d1 where d3.StudyIndex=d1.ID) as StudyTime,"
"(select d1.StudyInstanceUID from Study as d1 where d3.StudyIndex=d1.ID) as StudyInstanceUID,"
"(select d2.SeriesNumber from Series as d2 where d2.ID=d3.SeriesIndex) as SeriesNumber, "
"(select d2.Modality from Series as d2 where d2.ID=d3.SeriesIndex) as Modality, "
"(select d2.SeriesInstanceUID from Series as d2 where d2.ID=d3.SeriesIndex) as SeriesInstanceUID, "
"d3.SeriesIndex as SeriesIndex, "
"d3.ID as ImageIndex,"
"d3.FileLocation as FileLocation,"
"d3.ImageInstanceUID as ImageInstanceUID,"
"d3.CreateDateTime as CreateDateTime,"
"d3.ImageDelete as ImageDelete,"
"d3.ImageSend as ImageSend,"
"d3.FileType as FileType,"
"d3.AcquisitionDate as AcquisitionDate,"
"d3.AcquisitionTime as AcquisitionTime,"
"d3.AcquisitionNumber as AcquisitionNumber,"
"d3.ImageStorage as ImageStorage,"
"(select p.PatientID from Patient as p where (select d1.PatientIndex from Study as d1 where d3.StudyIndex=d1.ID)=p.ID) as PatientID,"
"(select p.PatientName from Patient as p where (select d1.PatientIndex from Study as d1 where d3.StudyIndex=d1.ID)=p.ID) as PatientName,"
"(select p.PatientAge from Patient as p where (select d1.PatientIndex from Study as d1 where d3.StudyIndex=d1.ID)=p.ID) as PatientAge, "
"(select p.PatientSex from Patient as p where (select d1.PatientIndex from Study as d1 where d3.StudyIndex=d1.ID)=p.ID) as PatientSex, "
"d3.ImageNumber as ImageNumber "
" from Image as d3; "
);
}
bool SDatabase::IsExecute()
{
return m_bExecute;
}
int SDatabase::GetStudyIndexWithStudyInstanceUID(QString strStudyInstanceUID)
{
QString strQuery;
strQuery = QString("select ID from Study where StudyInstanceUID='%1';").arg(strStudyInstanceUID);
QList<QStringList*> listResponse;
int nStudyIndex = 0;
ExecuteQuery(strQuery, &listResponse);
if(listResponse.size()>0)
{
QString strStudyIndex;
QStringList* pDataList = listResponse.at(0);
if(pDataList->size()>0)
{
strStudyIndex = pDataList->at(0);
nStudyIndex = strStudyIndex.toInt();
}
}
SDatabase::DeleteListReponse(listResponse);
return nStudyIndex;
}
vector<QString> SDatabase::GetSendList(int nStudyIndex)
{
int i=0;
vector<QString> listFile;
QString strQuery;
strQuery = QString("select `FileLocation`, `ID`, `FileType` from Image where `StudyIndex`='%1' and `ImageSend`='0' and `FileType`='0' and `ImageDelete`='0' order by `AcquisitionNumber`; ").arg(nStudyIndex);
//qDebug() << strQuery;
QList<QStringList*> listSendFile;
ExecuteQuery(strQuery, &listSendFile);
for(i=0 ; i<listSendFile.size() ; i++)
{
QStringList* pListData = listSendFile[i];
QString strData = (*pListData)[0];
listFile.push_back(strData);
}
SDatabase::DeleteListReponse(listSendFile);
return listFile;
}
int SDatabase::CacheWrite()
{
int nCacheWrite = 0;
int nLockTry = 10;
int i=0;
bool bLock = false;
while(i<nLockTry && bLock==false)
{
if(m_Lock.tryLock(100)==true)
{
bLock = true;
break;
}
i++;
QThread::usleep(100);
}
if(bLock==false)
{
return -1;
}
int nRetCode = sqlite3_db_cacheflush(m_pSqliteDB);
for(i=0 ; i<10 && nRetCode!=SQLITE_OK ; i++)
{
QThread::usleep(1000*100);
nRetCode = sqlite3_db_cacheflush(m_pSqliteDB);
}
if(nRetCode==SQLITE_OK)
{
nCacheWrite = 1;
}
m_Lock.unlock();
return nCacheWrite;
}
vector<QString> SDatabase::GetSendListAcquisitionTemp(int nStudyIndex)
{
int i=0;
vector<QString> listFile;
QString strQuery;
strQuery = QString("select `FileLocation`, `ID`, `FileType` from AcquisitionTemp where `StudyIndex`='%1' and `ImageSend`='0' and `FileType`='0' and `ImageDelete`='0' order by `AcquisitionNumber`; ").arg(nStudyIndex);
//qDebug() << strQuery;
QList<QStringList*> listSendFile;
ExecuteQuery(strQuery, &listSendFile);
for(i=0 ; i<listSendFile.size() ; i++)
{
QStringList* pListData = listSendFile[i];
QString strFileLocation = (*pListData)[0];
QFile fileCheck(strFileLocation);
if(fileCheck.exists()==true)
{
qint64 nFileSize = fileCheck.size();
//BMP File size is just 6220854
if(nFileSize>2220850 && nFileSize<7230854)
{
listFile.push_back(strFileLocation);
}
}
}
SDatabase::DeleteListReponse(listSendFile);
return listFile;
}
int SDatabase::GetImageMaxAcquisitionNumber(QString& strIndex)
{
int nMaxAcquisitionNumber = 0;
QString strQuery;
strQuery = QString("select max(`AcquisitionNumber`) from Image where `SeriesIndex`='%1'; ").arg(strIndex);
//qDebug() << strQuery;
QList<QStringList*> listMaxNumber;
ExecuteQuery(strQuery, &listMaxNumber);
if(listMaxNumber.size()==1)
{
QStringList* pListData = listMaxNumber[0];
if(pListData!=NULL)
{
if(pListData->size()==1)
{
QString strData = (*pListData)[0];
nMaxAcquisitionNumber = strData.toInt();
}
}
}
SDatabase::DeleteListReponse(listMaxNumber);
return nMaxAcquisitionNumber;
}
int SDatabase::GetVideoMaxAcquisitionNumber(QString& strIndex)
{
int nMaxAcquisitionNumber = 0;
QString strQuery;
strQuery = QString("select max(`AcquisitionNumber`) from Image where `SeriesIndex`='%1'; ").arg(strIndex);
//qDebug() << strQuery;
QList<QStringList*> listMaxNumber;
ExecuteQuery(strQuery, &listMaxNumber);
if(listMaxNumber.size()==1)
{
QStringList* pListData = listMaxNumber[0];
if(pListData!=NULL)
{
if(pListData->size()==1)
{
QString strData = (*pListData)[0];
nMaxAcquisitionNumber = strData.toInt();
}
}
}
SDatabase::DeleteListReponse(listMaxNumber);
return nMaxAcquisitionNumber;
}
void SDatabase::AddAcquisitionTempToImage()
{
//QString strUpdate = QString("update Image set ImageDelete=t1.`ImageDelete`, ImageStorage=t1.`ImageStorage`, ImageSend=t1.`ImageSend`, ImageType=t1.`ImageType`, FileType=t1.`FileType` from AcquisitionTemp as t1 join Image as t2 on t1.`FileLocation`=t2.`FileLocation` WHERE Image.`FileLocation`=t1.`FileLocation`;");
//QString strUpdate = QString("UPDATE Image SET `ImageDelete`=t1.`ImageDelete`, `ImageStorage`=t1.`ImageStorage`, `ImageSend`=t1.`ImageSend`, `ImageType`=t1.`ImageType`, `FileType`=t1.`FileType` FROM (SELECT * FROM AcquisitionTemp) as t1 WHERE Image.FileLocation = t1.FileLocation;");
QString strQuery = QString("select t2.ID, t2.ImageDelete, t2.ImageStorage, t2.ImageSend, t2.ImageType, t2.FileType, t2.FileLocation from Image as t1 join AcquisitionTemp as t2 on t1.ID=t2.ID;");
QList<QStringList*> listUpdateData;
ExecuteQuery(strQuery, &listUpdateData);
if(listUpdateData.size()>0)
{
Begin();
int i=0;
for(i=0 ; i<listUpdateData.size() ; i++)
{
QStringList* pListData = listUpdateData[i];
if(pListData!=NULL)
{
QString strID = (*pListData)[0];
QString strImageDelete = (*pListData)[1];
QString strImageStorage = (*pListData)[2];
QString strImageSend = (*pListData)[3];
QString strImageType = (*pListData)[4];
QString strFileType = (*pListData)[5];
QString strFileLocation = (*pListData)[6];
QString strUpdate = QString("UPDATE Image SET ImageDelete='%1', ImageStorage='%2', ImageSend='%3', ImageType='%4', FileType='%5' where FileLocation='%6';")
.arg(strImageDelete).arg(strImageStorage).arg(strImageSend).arg(strImageType).arg(strFileType).arg(strFileLocation);
Execute(strUpdate);
}
}
End();
}
SDatabase::DeleteListReponse(listUpdateData);
QString strDelete = QString("delete from AcquisitionTemp where AcquisitionTemp.FileLocation IN (select t1.FileLocation from AcquisitionTemp as t1 join Image as t2 on t1.FileLocation=t2.FileLocation);");
Execute(strDelete);
QString strInsert;
strInsert = QString("INSERT INTO IMAGE(`CreateDateTime`, `StudyIndex`, `SeriesIndex`, `ImageNumber`, `ImageDelete`, `ImageStorage`, `ImageSend`, `FileType`, "
"`ImageInstanceUID`, `FileLocation`, `ImageType`, `AcquisitionDate`, `AcquisitionTime`, `ContentDate`, `ContentTime`, `AcquisitionNumber`, "
"`InstanceNumber`, `PatientOrientation`, `ImageLaterality`, `ImageComments`) "
"SELECT `CreateDateTime`, `StudyIndex`, `SeriesIndex`, `ImageNumber`, `ImageDelete`, `ImageStorage`, `ImageSend`, `FileType`, "
"`ImageInstanceUID`, `FileLocation`, `ImageType`, `AcquisitionDate`, `AcquisitionTime`, `ContentDate`, `ContentTime`, `AcquisitionNumber`, "
"`InstanceNumber`, `PatientOrientation`, `ImageLaterality`, `ImageComments` FROM AcquisitionTemp order by `ID` asc; ");
Execute(strInsert);
}
void SDatabase::ClearAcquisitionTempTable()
{
Execute("DELETE FROM AcquisitionTemp WHERE `ID` >= 0 ;");
Execute("UPDATE SQLITE_SEQUENCE SET seq=0 WHERE name='AcquisitionTemp' ;");
}
void SDatabase::AddImageToAcquisitionTemp(int nStudyIndex)
{
QString strInsert;
strInsert = QString("INSERT INTO AcquisitionTemp(`ID`, `CreateDateTime`, `StudyIndex`, `SeriesIndex`, `ImageNumber`, `ImageDelete`, `ImageStorage`, `ImageSend`, `FileType`, "
"`ImageInstanceUID`, `FileLocation`, `ImageType`, `AcquisitionDate`, `AcquisitionTime`, `ContentDate`, `ContentTime`, `AcquisitionNumber`, "
"`InstanceNumber`, `PatientOrientation`, `ImageLaterality`, `ImageComments`) "
"SELECT `ID`, `CreateDateTime`, `StudyIndex`, `SeriesIndex`, `ImageNumber`, `ImageDelete`, `ImageStorage`, `ImageSend`, `FileType`, "
"`ImageInstanceUID`, `FileLocation`, `ImageType`, `AcquisitionDate`, `AcquisitionTime`, `ContentDate`, `ContentTime`, `AcquisitionNumber`, "
"`InstanceNumber`, `PatientOrientation`, `ImageLaterality`, `ImageComments` FROM IMAGE WHERE `StudyIndex`='%1' and `ImageDelete`='0' order by `ID` asc; ").arg(nStudyIndex);
Execute(strInsert);
}
void SDatabase::Begin()
{
char err[1024];
memset(err, 0, 1024);
sqlite3_exec((sqlite3*)m_pSqliteDB, "BEGIN TRANSACTION", NULL, NULL, (char**)err);
}
void SDatabase::End()
{
char err[1024];
memset(err, 0, 1024);
sqlite3_exec((sqlite3*)m_pSqliteDB, "END TRANSACTION", NULL, NULL, (char**)err);
}
void SDatabase::DeleteListReponse(QList<QStringList*>& listResponse)
{
QList<QStringList*>::iterator it;
for(it=listResponse.begin() ; it!=listResponse.end() ; ++it)
{
QStringList* pDataList = *it;
if(pDataList!=NULL)
{
pDataList->clear();
SAFE_DELETE(pDataList);
}
}
listResponse.clear();
}