| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 | #pragma once#include "stdafx.h"#include "IncADataDB.h"#include "IncADataTable.h"namespace OTSSQLITE{	CIncADataDB::CIncADataDB(CDBStoreBasePtr a_datastore)			{		m_tableInfo.reset(new CIncADataTable());		myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);	}	CIncADataDB::~CIncADataDB()	{	}	BOOL CIncADataDB::UpdataAIncA(const COTSParticlePtr a_pParticle)	{		if (!Init())		{			ASSERT(FALSE);			return FALSE;		}		ASSERT(a_pParticle);		if (!a_pParticle)		{			return FALSE;		}		auto tableInfoPtr = GetTableInfo();		ASSERT(tableInfoPtr);		if (!tableInfoPtr)		{			return FALSE;		}		auto datastorePtr = GetDatastore();		ASSERT(datastorePtr);		if (!datastorePtr)		{			return FALSE;		}		CString sSQLCommand = "Update IncAData set AveGray = %d,Area = %f,TypeID=%d where FieldID = %d and ParticleId = %d ";		sSQLCommand.Format(sSQLCommand,			a_pParticle->GetAveGray(),			a_pParticle->GetActualArea(),			a_pParticle->GetType(),			a_pParticle->GetFieldId(),			a_pParticle->GetTagId());		if (!datastorePtr->RunCommand(sSQLCommand))		{			ASSERT(FALSE);			return false;		}		return true;	}	BOOL CIncADataDB::SaveAIncA(const COTSParticlePtr a_pParticle, const CPosXrayPtr a_pXray,const CPoint fldPos)	{		if (!Init())		{			ASSERT(FALSE);			return FALSE;		}		ASSERT(a_pParticle);		if(!a_pParticle)		{			return FALSE;		}		ASSERT(a_pXray);		if (!a_pXray)		{			return FALSE;		}		// safety check		//1. particle should be agree with xray		/*if ((!(a_pParticle->GetFieldId() == a_pXray->GetScanFieldId()))			|| (!(a_pParticle->GetAnalysisId() == a_pXray->GetIndex())))		{			return FALSE;		}*/				auto tableInfoPtr = GetTableInfo();		ASSERT(tableInfoPtr);		if (!tableInfoPtr)		{			return FALSE;		}				auto datastorePtr = GetDatastore();		ASSERT(datastorePtr);		if (!datastorePtr)		{			return FALSE;		}		CString sInsertFormat = tableInfoPtr->GetInsertCommandFormatString(TRUE);		CString sSQLCommand;		sSQLCommand.Format(sInsertFormat,			a_pParticle->GetFieldId(),			a_pParticle->GetAnalysisId(),			a_pParticle->GetAveGray(),			a_pParticle->GetParticleRect().left,			a_pParticle->GetParticleRect().top,			a_pParticle->GetParticleRect().Width(),			a_pParticle->GetParticleRect().Height(),			a_pParticle->GetActualArea(),			a_pParticle->GetXRayPos().x,			a_pParticle->GetXRayPos().y,			a_pParticle->GetType(),			(int)a_pXray->GetElementQuantifyData().size(),			(int)(a_pParticle->GetFeature()->GetSegmentsList().size()),			fldPos.x,			fldPos.y,			a_pParticle->GetTagId(),			a_pParticle->GetDMax(),			a_pParticle->GetDMin(),			a_pParticle->GetDPerp(),			a_pParticle->GetPerimeter(),			a_pParticle->GetOrientation(),			a_pParticle->GetDInscr(),			a_pParticle->GetDMean(),			a_pParticle->GetDElong(),			a_pParticle->GetFeretDiameter(),			a_pParticle->TypeName().c_str(),			a_pParticle->TypeColor().c_str()			);			if (!datastorePtr->RunCommand(sSQLCommand))			{				LogErrorTrace(__FILE__, __LINE__, _T("Insert inclusion data(%d:%d:%d:%d:%d:%d:%d:%f:%d:%d:%d:%d:%s:%s:%s:%s:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f) failed: %s command error"),					a_pParticle->GetFieldId(),					a_pParticle->GetAnalysisId(),					a_pParticle->GetAveGray(),					a_pParticle->GetParticleRect().left,					a_pParticle->GetParticleRect().top,					a_pParticle->GetParticleRect().Width(),					a_pParticle->GetParticleRect().Height(),					a_pParticle->GetActualArea(),					a_pParticle->GetXRayPos().x,					a_pParticle->GetXRayPos().y,					a_pParticle->GetType(),					(int)a_pXray->GetElementQuantifyData().size(),					(int)(a_pParticle->GetFeature()->GetSegmentsList().size()),						fldPos.x,					fldPos.y,					a_pParticle->GetTagId(),					a_pParticle->GetDMax(),					a_pParticle->GetDMin(),					a_pParticle->GetDPerp(),					a_pParticle->GetPerimeter(),					a_pParticle->GetOrientation(),					a_pParticle->GetDInscr(),					a_pParticle->GetDMean(),					a_pParticle->GetDElong(),					a_pParticle->GetFeretDiameter(),					a_pParticle->TypeName(),					a_pParticle->TypeColor(),					sSQLCommand);				ASSERT(FALSE);				return FALSE;			}				return TRUE;	}	CDBTableBasePtr CIncADataDB::GetTableInfo()	{		/*	if (!m_tableInfo)			{				m_tableInfo.reset(new CIncADataTable);			}*/		return m_tableInfo;	}		CDBQueryBasePtr CIncADataDB::GetQueryById(const long a_nXrayId, const long a_nFieldId)	{		CDBQueryBasePtr query;		auto datastorePtr = GetDatastore();		ASSERT(datastorePtr);		if (!datastorePtr)		{			return query;		}		auto tableInfoPtr = GetTableInfo();		ASSERT(tableInfoPtr);		if (!tableInfoPtr)		{			return query;		}		CString sXrayIdColumnName = tableInfoPtr->GetColumnName((int)CIncADataTable::ColumnID::N_XRAY_ID - (int)CIncADataTable::ColumnID::MIN);		CString sFieldIdColumnName = tableInfoPtr->GetColumnName((int)CIncADataTable::ColumnID::N_FIELD_ID - (int)CIncADataTable::ColumnID::MIN);		CString sSQLCommand;		sSQLCommand.Format(_T("SELECT * FROM \'%s\' WHERE %s = %d AND %s = %d;"),			(LPCTSTR)tableInfoPtr->GetTableName(),			(LPCTSTR)sFieldIdColumnName,			a_nFieldId,			(LPCTSTR)sXrayIdColumnName,			a_nXrayId);		query = datastorePtr->QueryByCommand(sSQLCommand);		ASSERT(query);		if (!query || !query->IsValid())		{			LogErrorTrace(__FILE__, __LINE__, _T("Invalid quary command (%s)."), (LPCTSTR)sSQLCommand);			ASSERT(FALSE);			return (CDBQueryBasePtr());		}		// do the table related valid checking		if (query->GetColCount() != GetTableInfo()->GetColumnCount())		{			LogErrorTrace(__FILE__, __LINE__, _T("query col num value is %d, but not %d"), query->GetColCount(), GetTableInfo()->GetColumnCount());			ASSERT(FALSE);			return (CDBQueryBasePtr());		}		return query;	}	CDBQueryBasePtr CIncADataDB::GetQueryOfAllRecord()	{		CDBQueryBasePtr query;		auto datastorePtr = GetDatastore();		ASSERT(datastorePtr);		if (!datastorePtr)		{			return query;		}		auto tableInfoPtr = GetTableInfo();		ASSERT(tableInfoPtr);		if (!tableInfoPtr)		{			return query;		}				CString sSQLCommand;		sSQLCommand.Format(_T("SELECT * FROM \'%s\';"),			(LPCTSTR)tableInfoPtr->GetTableName());			query = datastorePtr->QueryByCommand(sSQLCommand);		ASSERT(query);		if (!query || !query->IsValid())		{			LogErrorTrace(__FILE__, __LINE__, _T("Invalid quary command (%s)."), (LPCTSTR)sSQLCommand);			ASSERT(FALSE);			return (CDBQueryBasePtr());		}		// do the table related valid checking		if (query->GetColCount() != GetTableInfo()->GetColumnCount())		{			LogErrorTrace(__FILE__, __LINE__, _T("query col num value is %d, but not %d"), query->GetColCount(), GetTableInfo()->GetColumnCount());			ASSERT(FALSE);			return (CDBQueryBasePtr());		}		return query;	}	bool CIncADataDB::GetAllFieldsRecord(COTSFieldDataList& allFlds)	{		auto allRecords = this->GetQueryOfAllRecord();		std::map<int, COTSFieldDataPtr> mapFld;		while (!allRecords->IsEOF())		{			int curFldId = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FIELD_ID);			/*auto itr= std::find_if(allFlds.begin(), allFlds.end(), [curFldId](COTSFieldDataPtr curFld)			{				return curFldId == curFld->GetId();			});*/			auto itr = mapFld.find(curFldId);//map's find method would be much more faster than find_if.			if (itr == mapFld.end())			{				COTSFieldDataPtr fld = COTSFieldDataPtr(new COTSFieldData());								fld->SetId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FIELD_ID));				CPoint fldPos;				fldPos.x = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FldPosX);				fldPos.y = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FldPosY);				fld->SetPosition(fldPos);								COTSParticleList& ps=fld->GetParticleList();				COTSParticlePtr p = COTSParticlePtr(new COTSParticle());				p->SetFieldId(fld->GetId());				p->SetAbsolutePos(fldPos);				double dferet = allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DFERET);				p->SetFeretDiameter(dferet);				p->SetTagId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_PARTICLE_ID));				p->SetType((OTS_PARTICLE_TYPE)allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_INCA_ID));				int top = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_TOP);				int left= allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_LEFT);				int width= allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_WIDTH);				int height = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_HEIGHT);				CRect r = CRect(left, top, left + width, top + height);				p->SetParticleRect(r);				p->SetAveGray(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_AVE_GRAY));				p->SetActualArea(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_AREA));				int x = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_X);				int y= allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_Y);				p->SetXRayPos(CPoint(x,y));				p->SetAnalysisId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_XRAY_ID));				p->SetDMax(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMAX));				p->SetDMin(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMIN));				p->SetDPerp(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DPERP));				p->SetDInscr(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DINSCR));				p->SetDMean(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMEAN));				p->SetDElong(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DELONG));				p->SetPerimeter(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_PERIMETER));				p->SetOrientation(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_ORIENTATION));				p->TypeName(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_NAME).GetBuffer());				p->TypeColor(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_COLOR).GetBuffer());				ps.push_back(p);				allFlds.push_back(fld);				mapFld[curFldId] = fld;			}			else			{				COTSFieldDataPtr& fld = itr->second ;				COTSParticleList& ps = fld->GetParticleList();				COTSParticlePtr p = COTSParticlePtr(new COTSParticle());				p->SetFieldId(fld->GetId());				p->SetAbsolutePos(fld->GetPosition());				double dferet = allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DFERET);				p->SetFeretDiameter(dferet);				p->SetTagId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_PARTICLE_ID));				p->SetType((OTS_PARTICLE_TYPE)allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_INCA_ID));				int top = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_TOP);				int left = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_LEFT);				int width = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_WIDTH);				int height = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_HEIGHT);				CRect r = CRect(left, top, left + width, top + height);				p->SetParticleRect(r);				p->SetAveGray(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_AVE_GRAY));				p->SetActualArea(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_AREA));				int x = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_X);				int y = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_Y);				p->SetXRayPos(CPoint(x, y));				p->SetAnalysisId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_XRAY_ID));				p->SetDMax(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMAX));				p->SetDMin(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMIN));				p->SetDPerp(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DPERP));				p->SetDInscr(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DINSCR));				p->SetDMean(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMEAN));				p->SetDElong(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DELONG));				p->SetPerimeter(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_PERIMETER));				p->SetOrientation(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_ORIENTATION));				p->TypeName(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_NAME).GetBuffer());				p->TypeColor(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_COLOR).GetBuffer());				ps.push_back(p);			}			allRecords->NextRow();		} ;		allRecords->Close();		return true;	}	BOOL CIncADataDB::Init(const BOOL a_bClean /*= FALSE*/)	{		return myDB->Init(a_bClean);	}	BOOL CIncADataDB::CreateTable(const BOOL a_bForce /*= FALSE*/)	{		return myDB->CreateTable(a_bForce);	}	BOOL CIncADataDB::DeleteTable()	{		return myDB->DeleteTable();	}	BOOL CIncADataDB::RemoveAllRows()	{		return myDB->RemoveAllRows();	}	BOOL CIncADataDB::IsDBExist()	{		return myDB->IsDBExist();	}	OTSSQLITE::CDBStoreBasePtr CIncADataDB::GetDatastore()	{		return myDB->GetDatastore();	}	OTSSQLITE::CDBQueryBasePtr CIncADataDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)	{		return myDB->GetTableQuery(a_sOrderColumnName);	}}
 |