ParticleSTDDB.cpp 8.5 KB

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