ElementChemistryDB.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. using OTSCLRINTERFACE;
  2. using OTSDataType;
  3. using OTSModelSharp.DTLBase;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SQLite;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace OTSModelSharp.DTLBase
  12. {
  13. public class CElementChemistryDB : CSQLiteDB
  14. {
  15. List<CPosXrayClr> m_listPosXrayInfo = new List<CPosXrayClr>();
  16. public CElementChemistryDB(IDBStoreBase _conStr, IDBTableBase _table) : base(_conStr, _table)
  17. {
  18. }
  19. public System.Data.DataTable GetQueryById(long a_nXrayId, long a_nFieldId, long a_nElementId, long a_nElementSize)
  20. {
  21. var datastorePtr = GetDatastore();
  22. var tableInfoPtr = GetTableInfo();
  23. var sXrayIdColumnName = tableInfoPtr.GetColumnName((int)CElementChemistryTable.ColumnID.N_XRAY_INDEX - (int)CElementChemistryTable.ColumnID.MIN);
  24. var sFieldIdColumnName = tableInfoPtr.GetColumnName((int)CElementChemistryTable.ColumnID.N_FIELD_ID - (int)CElementChemistryTable.ColumnID.MIN);
  25. var sElementIdColumnName = tableInfoPtr.GetColumnName((int)CElementChemistryTable.ColumnID.N_ELEMENT_ID - (int)CElementChemistryTable.ColumnID.MIN);
  26. var sElementNumColumnName = tableInfoPtr.GetColumnName((int)CElementChemistryTable.ColumnID.N_ELEMENT_TOTAL - (int)CElementChemistryTable.ColumnID.MIN);
  27. String sSQLCommand = String.Format("SELECT * FROM \'{0}\' WHERE {1} = {2} AND {3} ={4} AND {5} ={6} AND {7} = {8};", (String)tableInfoPtr.GetTableName(), sFieldIdColumnName,
  28. a_nFieldId, sXrayIdColumnName, a_nXrayId, sElementIdColumnName, a_nElementId, sElementNumColumnName, a_nElementSize);
  29. var q = datastorePtr.QueryByCmdForDataTable(sSQLCommand);
  30. return q;
  31. }
  32. public List<CPosXrayClr> GetXrayInfoList(bool a_bForce/* = FALSE*/)
  33. {
  34. if (a_bForce)
  35. {
  36. m_listPosXrayInfo.Clear();
  37. }
  38. if (m_listPosXrayInfo.Count == 0)
  39. {
  40. ReadXrayPointInfoList();
  41. }
  42. return m_listPosXrayInfo;
  43. }
  44. public bool ReadXrayPointInfoList()
  45. {
  46. var tableInfoPtr = GetTableInfo();
  47. var query = GetTableQueryForDataTable("");
  48. m_listPosXrayInfo = ReadXrayPointInfoList(query);
  49. return true;
  50. }
  51. public bool SaveElementChemistriesList_Batch(List<CPosXrayClr> a_xrayPointList)
  52. {
  53. List<KeyValuePair<string, SQLiteParameter[]>> list = new List<KeyValuePair<string, SQLiteParameter[]>>();
  54. foreach (var xrayPointInfo in a_xrayPointList)
  55. {
  56. List<CElementChemistryClr> listElemnentChemistries = xrayPointInfo.GetElementQuantifyData();
  57. int nSize = (int)listElemnentChemistries.Count;
  58. int nElementIndex = 0;
  59. foreach (var pElementChemistry in listElemnentChemistries)
  60. {
  61. //INSERT INTO ElementChemistry(XRayId, FieldId, ElementId, ElementNum, Name, Percentage) VALUES({ 0:G},{ 1:G},{ 2:G},{ 3:G},"{4:G}",{ 5:G})
  62. string sSQLCommand = "INSERT INTO ElementChemistry(XRayId, FieldId, ElementId, ElementNum, Name, Percentage) VALUES(@XRayId,@FieldId,@ElementId,@ElementNum,@Name,@Percentage)";
  63. var paras = new SQLiteParameter[6];
  64. paras[0] = new SQLiteParameter("XRayId");
  65. paras[0].Value = xrayPointInfo.GetIndex();
  66. paras[1] = new SQLiteParameter("FieldId");
  67. paras[1].Value = xrayPointInfo.GetScanFieldId();
  68. paras[2] = new SQLiteParameter("ElementId");
  69. paras[2].Value = nElementIndex;
  70. paras[3] = new SQLiteParameter("ElementNum");
  71. paras[3].Value = nSize;
  72. paras[4] = new SQLiteParameter("Name");
  73. paras[4].Value = pElementChemistry.GetName();
  74. paras[5] = new SQLiteParameter("Percentage");
  75. paras[5].Value = pElementChemistry.GetPercentage();
  76. list.Add(new KeyValuePair<string, SQLiteParameter[]>(sSQLCommand, paras));
  77. }
  78. }
  79. var datastorePtr = GetDatastore();
  80. try
  81. {
  82. datastorePtr.ExecuteNonQueryBatch(ref list);
  83. return true;
  84. }
  85. catch (Exception e)
  86. {
  87. NLog.LogManager.GetCurrentClassLogger().Error(e.Message);
  88. return false;
  89. }
  90. }
  91. public bool SaveElementChemistriesList(CPosXrayClr a_pxrayPoint)
  92. {
  93. var tableInfoPtr = GetTableInfo();
  94. var datastorePtr = GetDatastore();
  95. String sInsertFormat = tableInfoPtr.GetInsertCommandFormatString();
  96. String sSQLCommand = "";
  97. List<CElementChemistryClr> listElemnentChemistries = a_pxrayPoint.GetElementQuantifyData();
  98. int nSize = (int)listElemnentChemistries.Count;
  99. int nElementIndex = 0;
  100. foreach (var pElementChemistry in listElemnentChemistries)
  101. {
  102. sSQLCommand = String.Format(sInsertFormat,
  103. a_pxrayPoint.GetIndex(),
  104. a_pxrayPoint.GetScanFieldId(),
  105. nElementIndex,
  106. nSize,
  107. pElementChemistry.GetName(),
  108. pElementChemistry.GetPercentage(),
  109. pElementChemistry.GetMolarPercentage());
  110. if (datastorePtr.RunCommand(sSQLCommand) != true)
  111. {
  112. return false;
  113. }
  114. nElementIndex++;
  115. }
  116. return true;
  117. }
  118. public List<KeyValuePair<string, SQLiteParameter[]>> GetSavingElementChemistriesCmds(CPosXrayClr a_pxrayPoint)
  119. {
  120. List<KeyValuePair<string, SQLiteParameter[]>> cmds = new List<KeyValuePair<string, SQLiteParameter[]>>();
  121. var tableInfoPtr = GetTableInfo();
  122. var sInsertFormat = tableInfoPtr.GetInsertCommand();
  123. var parasTem = sInsertFormat.Value;
  124. List<CElementChemistryClr> listElemnentChemistries = a_pxrayPoint.GetElementQuantifyData();
  125. int nSize = (int)listElemnentChemistries.Count;
  126. int nElementIndex = 0;
  127. foreach (var pElementChemistry in listElemnentChemistries)
  128. {
  129. var paras = new SQLiteParameter[6];
  130. for (int j = 0; j < 6; j++)
  131. {
  132. paras[j] = new SQLiteParameter(parasTem[j].ParameterName);
  133. }
  134. paras[0].Value = a_pxrayPoint.GetIndex();
  135. paras[1].Value = a_pxrayPoint.GetScanFieldId();
  136. paras[2].Value = nElementIndex;
  137. paras[3].Value = nSize;
  138. paras[4].Value = pElementChemistry.GetName();
  139. paras[5].Value = pElementChemistry.GetPercentage();
  140. nElementIndex++;
  141. cmds.Add(new KeyValuePair<string, SQLiteParameter[]>(sInsertFormat.Key, paras));
  142. }
  143. return cmds;
  144. }
  145. public bool DeleteElementChemistryById(long a_nFieldId, long a_nXrayId)
  146. {
  147. if (m_listPosXrayInfo.Count != 0)
  148. {
  149. for (int itr = 0; itr < m_listPosXrayInfo.Count; itr++)
  150. {
  151. if (m_listPosXrayInfo[itr].ToString() == a_nFieldId.ToString())
  152. {
  153. CPosXrayClr posXrayInfo = new CPosXrayClr();
  154. posXrayInfo = m_listPosXrayInfo[itr];
  155. break;
  156. }
  157. }
  158. }
  159. //DataTable query;
  160. var tableInfoPtr = GetTableInfo();
  161. var datastorePtr = GetDatastore();
  162. String sTableName = tableInfoPtr.GetTableName();
  163. if (IsTableExists(sTableName))
  164. {
  165. var sXrayIdColumnName = tableInfoPtr.GetColumnName((int)CElementChemistryTable.ColumnID.N_XRAY_INDEX - (int)CElementChemistryTable.ColumnID.MIN);
  166. var sFieldIdColumnName = tableInfoPtr.GetColumnName((int)CElementChemistryTable.ColumnID.N_FIELD_ID - (int)CElementChemistryTable.ColumnID.MIN);
  167. String sSQLCommand =
  168. String.Format("DELETE FROM \'{0}\' WHERE {1} = {2} AND {3} ={4};",
  169. sTableName,
  170. sXrayIdColumnName,
  171. a_nXrayId,
  172. sFieldIdColumnName,
  173. a_nFieldId);
  174. //var helper = new SQLiteHelper(datastorePtr);
  175. datastorePtr.RunCommand(sSQLCommand);
  176. }
  177. return true;
  178. }
  179. public bool IsTableExists(String a_sTableName)
  180. {
  181. return IsDBExist();
  182. }
  183. public List<CPosXrayClr> ReadXrayPointInfoList(DataTable a_query)
  184. {
  185. List<CPosXrayClr> xrayList = new List<CPosXrayClr>();
  186. Dictionary<string, CPosXrayClr> mapXrayInfo = new Dictionary<string, CPosXrayClr>();
  187. foreach (DataRow row in a_query.Rows)
  188. {
  189. int nCol = (int)CElementChemistryTable.ColumnID.N_FIELD_ID - (int)CElementChemistryTable.ColumnID.MIN;
  190. int curFldId = Convert.ToInt32(row[nCol]);
  191. nCol = (int)CElementChemistryTable.ColumnID.N_XRAY_INDEX - (int)CElementChemistryTable.ColumnID.MIN;
  192. int xrayId = Convert.ToInt32(row[nCol]);
  193. string fldvec = "";
  194. fldvec += curFldId.ToString();
  195. fldvec += "_";
  196. fldvec += xrayId.ToString();
  197. nCol = (int)CElementChemistryTable.ColumnID.S_NAME - (int)CElementChemistryTable.ColumnID.MIN;
  198. string cheName = Convert.ToString(row[nCol]);
  199. nCol = (int)CElementChemistryTable.ColumnID.F_PERCENTAGE - (int)CElementChemistryTable.ColumnID.MIN;
  200. double percentage = Convert.ToDouble(row[nCol]);
  201. CElementChemistryClr che = new CElementChemistryClr(cheName, percentage);
  202. if (!mapXrayInfo.ContainsKey(fldvec))
  203. {
  204. CPosXrayClr xray = new CPosXrayClr();
  205. xray.AddQuantifyElement(che);
  206. mapXrayInfo.Add(fldvec, xray);
  207. }
  208. else
  209. {
  210. CPosXrayClr xray = mapXrayInfo[fldvec];
  211. xray.AddQuantifyElement(che);
  212. }
  213. }
  214. foreach (var keyvalue in mapXrayInfo)
  215. {
  216. xrayList.Add(keyvalue.Value);
  217. }
  218. return xrayList;
  219. }
  220. public bool GetAllMapedXrayInfo(ref Dictionary<string, CPosXrayClr> mapXrayInfo)
  221. {
  222. DataTable a_query = GetTableQueryForDataTable();
  223. //Dictionary<string, CPosXrayClr> mapXrayInfo = new Dictionary<string, CPosXrayClr>();
  224. foreach (DataRow row in a_query.Rows)
  225. {
  226. int nCol = (int)CElementChemistryTable.ColumnID.N_FIELD_ID - (int)CElementChemistryTable.ColumnID.MIN;
  227. int curFldId = Convert.ToInt32(row[nCol]);
  228. nCol = (int)CElementChemistryTable.ColumnID.N_XRAY_INDEX - (int)CElementChemistryTable.ColumnID.MIN;
  229. int xrayId = Convert.ToInt32(row[nCol]);
  230. string fldvec = "";
  231. fldvec += curFldId.ToString();
  232. fldvec += "_";
  233. fldvec += xrayId.ToString();
  234. nCol = (int)CElementChemistryTable.ColumnID.S_NAME - (int)CElementChemistryTable.ColumnID.MIN;
  235. string cheName = Convert.ToString(row[nCol]);
  236. nCol = (int)CElementChemistryTable.ColumnID.F_PERCENTAGE - (int)CElementChemistryTable.ColumnID.MIN;
  237. double percentage = Convert.ToDouble(row[nCol]);
  238. CElementChemistryClr che = new CElementChemistryClr(cheName, percentage);
  239. if (!mapXrayInfo.ContainsKey(fldvec))
  240. {
  241. CPosXrayClr xray = new CPosXrayClr();
  242. xray.AddQuantifyElement(che);
  243. mapXrayInfo.Add(fldvec, xray);
  244. }
  245. else
  246. {
  247. CPosXrayClr xray = mapXrayInfo[fldvec];
  248. xray.AddQuantifyElement(che);
  249. }
  250. }
  251. return true;
  252. }
  253. }
  254. }