ParticleSTDDB.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #include "stdafx.h"
  2. #include "ParticleSTDDB.h"
  3. #include "ParticleSTDTable.h"
  4. #include "ParticleSTD.h"
  5. #include <SQLiteDB.h>
  6. #include <ExpressionParseEngine/STDGroupTable.h>
  7. namespace OTSClassifyEngine
  8. {
  9. using namespace OTSSQLITE;
  10. CParticleSTDDB::CParticleSTDDB(CDBStoreBasePtr a_datastore)
  11. {
  12. m_tableInfo.reset(new CParticleSTDTable());
  13. myDB = CreateNewSQLiteDB(a_datastore, m_tableInfo);
  14. }
  15. CParticleSTDDB::~CParticleSTDDB()
  16. {
  17. }
  18. CDBTableBasePtr CParticleSTDDB::GetTableInfo()
  19. {
  20. return m_tableInfo;
  21. }
  22. BOOL CParticleSTDDB::Init(const BOOL a_bClean /*= FALSE*/)
  23. {
  24. return myDB->Init(a_bClean);
  25. }
  26. BOOL CParticleSTDDB::CreateTable(const BOOL a_bForce /*= FALSE*/)
  27. {
  28. return myDB->CreateTable(a_bForce);
  29. }
  30. BOOL CParticleSTDDB::DeleteTable()
  31. {
  32. return myDB->DeleteTable();
  33. }
  34. BOOL CParticleSTDDB::RemoveAllRows()
  35. {
  36. return myDB->RemoveAllRows();
  37. }
  38. BOOL CParticleSTDDB::IsDBExist()
  39. {
  40. return myDB->IsDBExist();
  41. }
  42. OTSSQLITE::CDBStoreBasePtr CParticleSTDDB::GetDatastore()
  43. {
  44. return myDB->GetDatastore();
  45. }
  46. OTSSQLITE::CDBQueryBasePtr CParticleSTDDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)
  47. {
  48. return myDB->GetTableQuery(a_sOrderColumnName);
  49. }
  50. const int STDGroupsColCount = 4;
  51. const int ColCountComplement = 1;
  52. ParticleSTDPtr CParticleSTDDB::GetPartSTDLib(ParticleSTDPtr partStd,BOOL bForce/* = FALSE*/)
  53. {
  54. if (bForce)
  55. {
  56. partStd->PartSTDItemListClear();
  57. }
  58. CString cmdstr = "select * from ClassifySTD left join STDGroups on ClassifySTD.GroupId=STDGroups.id";
  59. auto query = myDB->GetCommandStringQuery(cmdstr);
  60. ASSERT(query);
  61. int cols = query->GetColCount();
  62. int defineCols =(int) CParticleSTDTable::ColumnID::MAX -(int) CParticleSTDTable::ColumnID::MIN+STDGroupsColCount+ ColCountComplement;
  63. if (cols != defineCols)
  64. {
  65. LogErrorTrace(__FILE__, __LINE__, _T("std db version is not match!"));
  66. return NULL;
  67. }
  68. auto partstdlist= ReadParticleSTDList(query);
  69. partStd->setSTDList(partstdlist);
  70. return partStd;
  71. }
  72. PartSTDRuleItemList CParticleSTDDB::ReadParticleSTDList(CDBQueryBasePtr a_query)
  73. {
  74. PartSTDRuleItemList listSTDItem;
  75. int nRowId = 0;
  76. int nWrongItems = 0;
  77. while (!a_query->IsEOF())
  78. {
  79. auto itm = PartSTDRuleItemPtr(new PartSTDRuleItem());
  80. if (!ReadParticleSTDItem(a_query,itm)) //current x-ray point
  81. {
  82. LogErrorTrace(__FILE__, __LINE__, _T("Read xray point failed"));
  83. nWrongItems++;
  84. break;
  85. }
  86. listSTDItem.push_back(itm);
  87. a_query->NextRow();
  88. nRowId++;
  89. }
  90. return listSTDItem;
  91. }
  92. BOOL CParticleSTDDB::ReadParticleSTDItem(CDBQueryBasePtr a_query, PartSTDRuleItemPtr stdItem)
  93. {
  94. int nCol;
  95. int nIncAIdNow;
  96. nCol = (int)CParticleSTDTable::ColumnID::N_STDId - (int)CParticleSTDTable::ColumnID::MIN;
  97. nIncAIdNow = a_query->GetColIntValue(nCol, -1);
  98. stdItem->SetID(nIncAIdNow);
  99. CString sIncAName;
  100. nCol = (int)CParticleSTDTable::ColumnID::S_StrName - (int)CParticleSTDTable::ColumnID::MIN;
  101. sIncAName = a_query->GetColStringValue(nCol, _T(""));
  102. stdItem->SetName(sIncAName.GetString());
  103. CString sColor;
  104. nCol = (int)CParticleSTDTable::ColumnID::S_COLOR - (int)CParticleSTDTable::ColumnID::MIN;
  105. sColor = a_query->GetColStringValue(nCol, _T(""));
  106. if (sColor.Left(1) != "#") sColor = "#" + sColor;
  107. stdItem->SetColor(sColor.GetString());
  108. CString sKeyElementList;
  109. nCol = (int)CParticleSTDTable::ColumnID::S_KeyElementList - (int)CParticleSTDTable::ColumnID::MIN;
  110. sKeyElementList = a_query->GetColStringValue(nCol, _T(""));
  111. std::vector < std::string> keyeleStrlist;
  112. xmls::SplitString(sKeyElementList.GetBuffer(), keyeleStrlist, ",");
  113. CElementsList elelist;
  114. for (auto s : keyeleStrlist)
  115. {
  116. CElementPtr ele = CElementPtr(new CElement(s.c_str()));
  117. elelist.push_back(ele);
  118. }
  119. stdItem->SetKeyElementList(elelist);
  120. CString sSubElementList;
  121. nCol = (int)CParticleSTDTable::ColumnID::S_SubElementList - (int)CParticleSTDTable::ColumnID::MIN;
  122. sSubElementList = a_query->GetColStringValue(nCol, _T(""));
  123. std::vector < std::string> SubeleStrlist;
  124. xmls::SplitString(sSubElementList.GetBuffer(), SubeleStrlist, ",");
  125. elelist.clear();
  126. for (auto s : SubeleStrlist)
  127. {
  128. CElementPtr ele = CElementPtr(new CElement(s.c_str()));
  129. elelist.push_back(ele);
  130. }
  131. stdItem->SetSubElementList(elelist);
  132. CString sUsingImgPropertyList;
  133. nCol = (int)CParticleSTDTable::ColumnID::S_UsingImgPropertyList - (int)CParticleSTDTable::ColumnID::MIN;
  134. sUsingImgPropertyList = a_query->GetColStringValue(nCol, _T(""));
  135. std::vector < std::string> UsingImgPropertyeleStrlist;
  136. xmls::SplitString(sUsingImgPropertyList.GetBuffer(), UsingImgPropertyeleStrlist, ",");
  137. std::vector<std::string> val;
  138. for (auto s : UsingImgPropertyeleStrlist)
  139. {
  140. val.push_back(s);
  141. }
  142. stdItem->SetUsingImgPropertyNameList(val);
  143. CString sUsingOtherPropertyList;
  144. nCol = (int)CParticleSTDTable::ColumnID::S_UsingOtherPropertyList - (int)CParticleSTDTable::ColumnID::MIN;
  145. sUsingOtherPropertyList = a_query->GetColStringValue(nCol, _T(""));
  146. std::vector < std::string> UsingOtherPropertyStrlist;
  147. xmls::SplitString(sUsingOtherPropertyList.GetBuffer(), UsingOtherPropertyStrlist, ",");
  148. val.clear();
  149. for (auto s : UsingOtherPropertyStrlist)
  150. {
  151. val.push_back(s);
  152. }
  153. stdItem->SetUsingOtherpropertyList(val);
  154. CString sExpression;
  155. nCol = (int)CParticleSTDTable::ColumnID::S_Expression - (int)CParticleSTDTable::ColumnID::MIN;
  156. sExpression = a_query->GetColStringValue(nCol, _T(""));
  157. stdItem->SetExpressionStr(sExpression.GetString());
  158. std::string dHardness;
  159. nCol = (int)CParticleSTDTable::ColumnID::S_Hardness - (int)CParticleSTDTable::ColumnID::MIN;
  160. dHardness = a_query->GetColStringValue(nCol, _T(""));
  161. stdItem->SetHardness(dHardness);
  162. std::string dDensity;
  163. nCol = (int)CParticleSTDTable::ColumnID::S_Density - (int)CParticleSTDTable::ColumnID::MIN;
  164. dDensity = a_query->GetColStringValue(nCol, _T(""));
  165. stdItem->SetDensity(dDensity);
  166. std::string dElectrical_conductivity;
  167. nCol = (int)CParticleSTDTable::ColumnID::S_Electrical_conductivity - (int)CParticleSTDTable::ColumnID::MIN;
  168. dElectrical_conductivity = a_query->GetColStringValue(nCol, _T(""));
  169. stdItem->SetElectrical_conductivity(dElectrical_conductivity);
  170. int nBSE;
  171. nCol = (int)CParticleSTDTable::ColumnID::N_BSE - (int)CParticleSTDTable::ColumnID::MIN;
  172. nBSE = a_query->GetColIntValue(nCol, -1);
  173. stdItem->SetBSE(nBSE);
  174. CString sFormula;
  175. nCol = (int)CParticleSTDTable::ColumnID::S_Formula - (int)CParticleSTDTable::ColumnID::MIN;
  176. sFormula = a_query->GetColStringValue(nCol, _T(""));
  177. stdItem->SetFormula(sFormula.GetString());
  178. CString sElement;
  179. nCol = (int)CParticleSTDTable::ColumnID::S_Element - (int)CParticleSTDTable::ColumnID::MIN;
  180. sElement = a_query->GetColStringValue(nCol, _T(""));
  181. stdItem->SetElement(sElement.GetString());
  182. int isElementanalysis;
  183. nCol = (int)CParticleSTDTable::ColumnID::B_IsElementAnalysis - (int)CParticleSTDTable::ColumnID::MIN;
  184. isElementanalysis = a_query->GetColIntValue(nCol, 1);
  185. stdItem->SetIsElementAnalysis(isElementanalysis==1);
  186. int grpid;
  187. nCol = (int)CParticleSTDTable::ColumnID::N_GroupId- (int)CParticleSTDTable::ColumnID::MIN;
  188. grpid = a_query->GetColIntValue(nCol, -1);
  189. stdItem->SetGrpID(grpid);
  190. CString grpName;
  191. nCol = (int)CParticleSTDTable::ColumnID::N_GroupId - (int)CParticleSTDTable::ColumnID::MIN+(int)CSTDGroupTable::ColumnID::S_NAME- (int)CSTDGroupTable::ColumnID::MIN+1;
  192. grpName = a_query->GetColStringValue(nCol, _T(""));
  193. stdItem->SetGrpName(grpName.GetString());
  194. CString grpColor;
  195. nCol = (int)CParticleSTDTable::ColumnID::N_GroupId - (int)CParticleSTDTable::ColumnID::MIN + (int)CSTDGroupTable::ColumnID::S_COLOR - (int)CSTDGroupTable::ColumnID::MIN+1;
  196. grpColor = a_query->GetColStringValue(nCol, _T(""));
  197. if (grpColor.Left(1) != "#") sColor = "#" + grpColor;
  198. stdItem->SetGrpColor(grpColor.GetString());
  199. return TRUE;
  200. }
  201. }