OTSSTDLibDB.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #include "stdafx.h"
  2. #include "OTSSTDLibDB.h"
  3. #include "OTSSTDLibTable.h"
  4. using namespace OTSSQLITE;
  5. namespace OTSClassifyEngine
  6. {
  7. CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore)
  8. {
  9. m_tableInfo.reset(new CSTDLibTable());
  10. myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);
  11. m_strFileName = _T("");
  12. m_pSTDLib = CSTDLibPtr(new CSTDLib());
  13. //m_elementDB = nullptr;
  14. m_mineralgroupDB = nullptr;
  15. }
  16. CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore, CString strFileName)
  17. {
  18. m_tableInfo.reset(new CSTDLibTable());
  19. myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);
  20. m_strFileName = strFileName;
  21. m_pSTDLib = CSTDLibPtr(new CSTDLib());
  22. //m_elementDB = nullptr;
  23. m_mineralgroupDB = nullptr;
  24. }
  25. CSTDLibDB::~CSTDLibDB()
  26. {
  27. }
  28. CDBTableBasePtr CSTDLibDB::GetTableInfo()
  29. {
  30. return m_tableInfo;
  31. }
  32. /*CElementDBPtr CSTDLibDB::GetElementDB()
  33. {
  34. if (!m_elementDB)
  35. {
  36. auto datastorePtr = GetDatastore();
  37. if (datastorePtr)
  38. {
  39. m_elementDB = std::make_shared<CElementDB>(CElementDB(datastorePtr));
  40. }
  41. }
  42. return m_elementDB;
  43. }*/
  44. CMineralGroupDBPtr CSTDLibDB::GetMineralGroupDB()
  45. {
  46. if (!m_mineralgroupDB)
  47. {
  48. auto datastorePtr = GetDatastore();
  49. if (datastorePtr)
  50. {
  51. m_mineralgroupDB = std::make_shared<CMineralGroupDB>(CMineralGroupDB(datastorePtr));
  52. }
  53. }
  54. return m_mineralgroupDB;
  55. }
  56. BOOL CSTDLibDB::Init(const BOOL a_bClean /*= FALSE*/)
  57. {
  58. return myDB->Init(a_bClean);
  59. }
  60. BOOL CSTDLibDB::CreateTable(const BOOL a_bForce /*= FALSE*/)
  61. {
  62. return myDB->CreateTable(a_bForce);
  63. }
  64. BOOL CSTDLibDB::DeleteTable()
  65. {
  66. return myDB->DeleteTable();
  67. }
  68. BOOL CSTDLibDB::RemoveAllRows()
  69. {
  70. return myDB->RemoveAllRows();
  71. }
  72. BOOL CSTDLibDB::IsDBExist()
  73. {
  74. return myDB->IsDBExist();
  75. }
  76. OTSSQLITE::CDBStoreBasePtr CSTDLibDB::GetDatastore()
  77. {
  78. return myDB->GetDatastore();
  79. }
  80. OTSSQLITE::CDBQueryBasePtr CSTDLibDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)
  81. {
  82. return myDB->GetTableQuery(a_sOrderColumnName);
  83. }
  84. CSTDLibPtr CSTDLibDB::GetSTDLib(BOOL bForce/* = FALSE*/)
  85. {
  86. if (bForce)
  87. {
  88. m_pSTDLib->Clear();
  89. }
  90. if (0 == m_pSTDLib->GetSTDItemCount())
  91. {
  92. ReadSTDLib();
  93. }
  94. if (0 == m_pSTDLib->GetClassifyCount())
  95. {
  96. GetMineralGroup(m_pSTDLib);
  97. }
  98. //m_pOretype->SetName(_T(""));
  99. return m_pSTDLib;
  100. }
  101. BOOL CSTDLibDB::ReadSTDLib()
  102. {
  103. auto tableInfoPtr = GetTableInfo();
  104. ASSERT(tableInfoPtr);
  105. if (!tableInfoPtr)
  106. {
  107. return FALSE;
  108. }
  109. auto query = GetTableQuery("id");
  110. ASSERT(query);
  111. if (!query)
  112. {
  113. return FALSE;
  114. }
  115. return ReadSTDLib(query);
  116. }
  117. BOOL CSTDLibDB::ReadSTDLib(CDBQueryBasePtr a_query)
  118. {
  119. while (!a_query->IsEOF())
  120. {
  121. CStandardItemPtr pSTDItem = ReadSTDItem(a_query);
  122. m_pSTDLib->AddItem(pSTDItem.get());
  123. a_query->NextRow();
  124. }
  125. return true;
  126. }
  127. BOOL CSTDLibDB::ReadPartSTDLib()
  128. {
  129. auto tableInfoPtr = GetTableInfo();
  130. ASSERT(tableInfoPtr);
  131. if (!tableInfoPtr)
  132. {
  133. return FALSE;
  134. }
  135. auto query = GetTableQuery("STDId");
  136. ASSERT(query);
  137. if (!query)
  138. {
  139. return FALSE;
  140. }
  141. return ReadPartSTDLib(query);
  142. }
  143. BOOL CSTDLibDB::ReadPartSTDLib(CDBQueryBasePtr a_query)
  144. {
  145. while (!a_query->IsEOF())
  146. {
  147. CStandardItemPtr pSTDItem = ReadSTDItem(a_query);
  148. m_pSTDLib->AddItem(pSTDItem.get());
  149. a_query->NextRow();
  150. }
  151. return true;
  152. }
  153. CStandardItemPtr CSTDLibDB::ReadSTDItem(CDBQueryBasePtr a_query)
  154. {
  155. int iCol = 0;
  156. int iValue = 0;
  157. float fValue = 0;
  158. CString strValue = "";
  159. CStandardItemPtr pSTDMineral = CStandardItemPtr(new CStandardItem());
  160. // ¸øpSTDMineral¸³Öµ
  161. iCol = (int)CSTDLibTable::ColumnID::N_ID - (int)CSTDLibTable::ColumnID::MIN;
  162. iValue = a_query->GetColIntValue(iCol, 0);
  163. pSTDMineral->SetID(iValue);
  164. iValue = 0;
  165. iCol = (int)CSTDLibTable::ColumnID::B_SPEC - (int)CSTDLibTable::ColumnID::MIN;
  166. auto pSpec = a_query->GetColBlobValue(iCol, iValue);
  167. if (iValue == sizeof(DWORD) * pSTDMineral->GetChannelsNo())
  168. {
  169. pSTDMineral->SetXrayData((DWORD*)pSpec);
  170. }
  171. //the elements ratio is usfull only when we make the report so we don't read them here.
  172. /*GetElements(pSTDMineral);*/
  173. return pSTDMineral;
  174. }
  175. /*BOOL CSTDLibDB::GetElements(CStandardItemPtr& pSTDMineral)
  176. {
  177. auto elementdb = GetElementDB();
  178. return elementdb->GetElements(pSTDMineral);
  179. }*/
  180. BOOL CSTDLibDB::GetMineralGroup(CSTDLibPtr& pOretype)
  181. {
  182. auto mineralgroupdb = GetMineralGroupDB();
  183. return mineralgroupdb->GetMineralGroups(pOretype);
  184. }
  185. }