BasicData.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. 
  2. using DevExpress.Office.Drawing;
  3. using NPOI.Util;
  4. using OTSIncAReportApp.DataOperation.DataAccess;
  5. using OTSIncAReportApp.OTSRstMgrFunction;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using static OTSDataType.otsdataconst;
  13. using static OTSIncAReportApp.OTSReport_Export;
  14. namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration
  15. {
  16. public class BasicData
  17. {
  18. ParticleData fielddata;
  19. private string SizeChart = "";
  20. List<string> colid = new List<string>();
  21. List<string> colid_Below7 = new List<string>();
  22. List<string> GroupInformation = new List<string>();
  23. private List<DataTable> BData = new List<DataTable>();
  24. private List<DataTable> Measurements = new List<DataTable>();//测量结果数据列队
  25. private DataTable AllClass = new DataTable();
  26. private DataTable AllElement = new DataTable();
  27. private bool IsShereAClassificationGroup = false;
  28. private ResultFile resfile;
  29. private string FilePath = "";
  30. /// <summary>
  31. /// 获取粒级表
  32. /// </summary>
  33. public void SetParticlesizeTable(OTSReport_Export m_otsreport_export)
  34. {
  35. colid_Below7.Clear();
  36. //获取粒级表
  37. string path1 = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder +
  38. m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile;
  39. DataSet ds = OTSIncAReportApp.DataOperation.DataAccess.XMLoperate.GetXml(path1);
  40. SizeChart = ds.Tables[0].Rows[0]["Sizes"].ToString();
  41. for (int i = 0; i < SizeChart.Split(',').Length; i++)
  42. {
  43. if (SizeChart.Split(',')[i].Length > 0)
  44. {
  45. double d1 = Convert.ToDouble(SizeChart.Split(',')[i]);
  46. //double d2 = Convert.ToDouble(SizeChart.Split(',')[i + 1]);
  47. colid.Add("≥"+ d1.ToString() /*+ "~" + d2.ToString()*/);
  48. }
  49. }
  50. for (int i = 0; i < SizeChart.Split(',').Length - 1; i++)
  51. {
  52. if (SizeChart.Split(',')[i].Length > 0)
  53. {
  54. double d1 = Convert.ToDouble(SizeChart.Split(',')[i]);
  55. double d2 = Convert.ToDouble(SizeChart.Split(',')[i + 1]);
  56. colid_Below7.Add(d1.ToString() + "~" + d2.ToString());
  57. }
  58. }
  59. double d = Convert.ToDouble(SizeChart.Split(',')[SizeChart.Split(',').Length - 1]);
  60. colid_Below7.Add(d.ToString() + "~MAX");
  61. //double d = Convert.ToDouble(SizeChart.Split(',')[SizeChart.Split(',').Length - 1]);
  62. //colid.Add(d.ToString() + "~MAX");
  63. }
  64. /// <summary>
  65. /// 获取粒级表
  66. /// </summary>
  67. /// <returns></returns>
  68. public List<string> GetParticlesizeTable()
  69. {
  70. if(colid.Count>7)
  71. {
  72. return colid;
  73. }else
  74. {
  75. return colid_Below7;
  76. }
  77. }
  78. public void SetDBData(c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export, string ComputeMode)
  79. {
  80. DataTable m_bt_DBData = new DataTable();
  81. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.GetWorkingResultId()].FilePath);
  82. List<string> colid = new List<string>() { "TypeName", "ar", "TypeId", "Largest", "Class", "GroupId", "con" };
  83. //获取粒级表
  84. string path1 = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder +
  85. m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile;
  86. DataSet ds = OTSIncAReportApp.DataOperation.DataAccess.XMLoperate.GetXml(path1);
  87. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  88. bool blBelow7 = false;
  89. if (sizestr.Split(',').Length>7)
  90. {
  91. for (int i = 0; i < sizestr.Split(',').Length; i++)
  92. {
  93. if (sizestr.Split(',')[i].Length > 0)
  94. {
  95. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  96. //double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  97. colid.Add("≥" + d1.ToString() /*+ "~" + d2.ToString()*/);
  98. }
  99. }
  100. blBelow7 = true;
  101. }
  102. else
  103. {
  104. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  105. {
  106. if (sizestr.Split(',')[i].Length > 0)
  107. {
  108. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  109. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  110. colid.Add(d1.ToString() + "~" + d2.ToString());
  111. }
  112. }
  113. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  114. colid.Add(d.ToString() + "~MAX");
  115. blBelow7 = false;
  116. }
  117. for (int i = 0; i < colid.Count; i++)
  118. {
  119. m_bt_DBData.Columns.Add(colid[i].ToString());
  120. }
  121. DataTable dt = InvalidRemoval(fielddata.GetParticleListForParticlSize("area", ""));
  122. DataTable AreaInformationOfAllElements = InvalidRemoval(fielddata.GetAreaByAllIncA(""));
  123. DataTable dtp = InvalidRemoval(fielddata.GetParticleAll(""));
  124. string po = ComputeMode;
  125. switch (po)
  126. {
  127. case "DMAX":
  128. po = "DMAX";
  129. break;
  130. case "DMIN":
  131. po = "DMIN";
  132. break;
  133. case "ECD":
  134. po = "Area";
  135. break;
  136. case "FERET":
  137. po = "DFERET";
  138. break;
  139. }
  140. for (int i = 0; i < dt.Rows.Count; i++)
  141. {
  142. DataRow dr = m_bt_DBData.NewRow();
  143. dr["TypeName"] = dt.Rows[i]["TypeName"].ToString();
  144. dr["TypeId"] = dt.Rows[i]["TypeId"].ToString();
  145. dr["con"] = dt.Rows[i]["con"].ToString();
  146. dr["GroupId"] = dt.Rows[i]["GroupId"].ToString();
  147. if (dt.Rows[i]["GroupName"].ToString() == "")
  148. dr["Class"] = "Default";
  149. else
  150. dr["Class"] = dt.Rows[i]["GroupName"].ToString();
  151. //continue;
  152. dr["Largest"] = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2);
  153. if(blBelow7)
  154. {
  155. for (int a = 7; a < colid.Count; a++)
  156. {
  157. string d1 = colid[a].Split('≥')[1];
  158. string d2;
  159. if (a == colid.Count - 1)
  160. {
  161. d2 = "999";
  162. }
  163. else
  164. {
  165. d2 = colid[a + 1].Split('≥')[1];
  166. }
  167. DataRow[] datas = dtp.Select(getWhere(d2, d1, po, dt.Rows[i]["TypeId"].ToString()));
  168. dr[colid[a]] = datas.Count();
  169. }
  170. }
  171. else
  172. {
  173. for (int a = 7; a < colid.Count; a++)
  174. {
  175. string d1 = colid[a].Split('~')[0];
  176. string d2 = colid[a].Split('~')[1];
  177. if (d2 == "MAX")
  178. {
  179. d2 = "999";
  180. }
  181. DataRow[] datas = dtp.Select(getWhere(d2, d1, po, dt.Rows[i]["TypeId"].ToString()));
  182. dr[colid[a]] = datas.Count();
  183. }
  184. }
  185. for (int a = 0; a < AreaInformationOfAllElements.Rows.Count; a++)
  186. {
  187. if (dt.Rows[i]["TypeId"].ToString() == AreaInformationOfAllElements.Rows[a]["TypeId"].ToString())
  188. {
  189. dr["ar"] = AreaInformationOfAllElements.Rows[a]["ar"];
  190. }
  191. }
  192. m_bt_DBData.Rows.Add(dr);
  193. }
  194. //去除物质分类(非夹杂物分类)
  195. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass_Serial.Count; a++)
  196. {
  197. for (int i = m_bt_DBData.Rows.Count - 1; i >= 0; i--)
  198. {
  199. if (m_bt_DBData.Rows[i]["TypeId"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass_Serial[a].ToString())
  200. {
  201. m_bt_DBData.Rows.RemoveAt(i);
  202. }
  203. }
  204. }
  205. GroupInformation = new List<string>();
  206. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  207. {
  208. bool bl = false;
  209. for (int a = 0; a < GroupInformation.Count; a++)
  210. {
  211. if (GroupInformation[a] == m_bt_DBData.Rows[i]["Class"].ToString())
  212. {
  213. bl = true;
  214. }
  215. }
  216. if (!bl)
  217. {
  218. GroupInformation.Add(m_bt_DBData.Rows[i]["Class"].ToString());
  219. }
  220. }
  221. if (m_otsreport_export.m_ReportApp.m_RptConfigFile.Systype == OTS_SysType_ID.IncA)
  222. {
  223. Measurements = new List<DataTable>();
  224. for (int i = 0; i < GroupInformation.Count; i++)
  225. {
  226. DataTable table = m_bt_DBData.Clone();
  227. for (int a = 0; a < m_bt_DBData.Rows.Count; a++)
  228. {
  229. if (GroupInformation[i] == m_bt_DBData.Rows[a]["Class"].ToString())
  230. {
  231. table.Rows.Add(m_bt_DBData.Rows[a].ItemArray);
  232. }
  233. }
  234. BData.Add(table);
  235. }
  236. //Measurements = BData.Copy();
  237. for (int i = 0; i < GroupInformation.Count; i++)
  238. {
  239. DataTable table = dtp.Clone();
  240. for (int a = 0; a < dtp.Rows.Count; a++)
  241. {
  242. if (GroupInformation[i] == dtp.Rows[a]["GroupName"].ToString())
  243. {
  244. table.Rows.Add(dtp.Rows[a].ItemArray);
  245. }
  246. }
  247. Measurements.Add(table);
  248. }
  249. return;
  250. }
  251. // if (m_otsreport_export.m_ReportApp.m_RptConfigFile.Systype == OTS_SysType_ID.IncA)
  252. // {
  253. // BData = m_bt_DBData.Copy();
  254. // return;
  255. //}
  256. #region 判断是否使用指定选择组和规则
  257. bool bl1 = false;
  258. for (int i = 0; i < m_otsreport_export.m_mbszclass.RuleGroup.Rows.Count; i++)
  259. {
  260. if (m_otsreport_export.m_mbszclass.RuleGroup.Rows[i]["GroupId"].ToString() == "0")
  261. {
  262. bl1 = true;
  263. }
  264. }
  265. #endregion
  266. if (!bl1)
  267. {
  268. #region 筛选现有组
  269. List<string> strings = new List<string>();
  270. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  271. {
  272. bool bl2 = false;
  273. for (int a = 0; a < strings.Count; a++)
  274. {
  275. if (m_bt_DBData.Rows[i]["GroupId"].ToString() == strings[a])
  276. {
  277. bl2 = true;
  278. }
  279. }
  280. if (!bl2)
  281. {
  282. strings.Add(m_bt_DBData.Rows[i]["GroupId"].ToString());
  283. }
  284. }
  285. #endregion
  286. List<DataTable> OutData = new List<DataTable>();
  287. for (int i = 0; i < strings.Count(); i++)
  288. {
  289. DataTable data = m_bt_DBData.Clone();
  290. for (int a = 0; a < m_bt_DBData.Rows.Count; a++)
  291. {
  292. if (strings[i] == m_bt_DBData.Rows[a]["GroupId"].ToString())
  293. {
  294. data.Rows.Add(m_bt_DBData.Rows[a].ItemArray);
  295. }
  296. }
  297. OutData.Add(data);
  298. }
  299. BData = OutData.Copy();
  300. return;
  301. }
  302. List<DataTable> SpecifyGroup = new List<DataTable>();
  303. for (int i = 0; i < m_otsreport_export.m_mbszclass.List_data.Count; i++)
  304. {
  305. DataTable data= m_bt_DBData.Clone();
  306. bool b3 = false;
  307. string str_class = "";
  308. for (int a = 0; a < m_otsreport_export.m_mbszclass.RuleGroup.Rows.Count; a++)
  309. {
  310. if (m_otsreport_export.m_mbszclass.RuleGroup.Rows[a]["GroupId"].ToString() == m_otsreport_export.m_mbszclass.List_data[i].TableName)
  311. {
  312. if (m_otsreport_export.m_mbszclass.RuleGroup.Rows[a]["display"].ToString() == "1")
  313. {
  314. str_class = m_otsreport_export.m_mbszclass.RuleGroup.Rows[a]["GroupName"].ToString();
  315. b3 = true;
  316. }
  317. }
  318. }
  319. data.TableName = m_otsreport_export.m_mbszclass.List_data[i].TableName;
  320. if (b3)
  321. {
  322. for (int a = 0; a < m_otsreport_export.m_mbszclass.List_data[i].Rows.Count; a++)
  323. {
  324. if (m_otsreport_export.m_mbszclass.List_data[i].Rows[a]["display"].ToString() == "1")
  325. {
  326. DataTable data1 = m_bt_DBData.Clone();
  327. DataRow row = data.NewRow();
  328. row["TypeName"] = m_otsreport_export.m_mbszclass.List_data[i].Rows[a]["StrName"];
  329. row["ar"] = 0;
  330. row["TypeId"] = m_otsreport_export.m_mbszclass.List_data[i].Rows[a]["STDId"];
  331. row["GroupId"] = m_otsreport_export.m_mbszclass.List_data[i].Rows[a]["GroupId"];
  332. row["con"] = 0;
  333. row["Largest"] = 0;
  334. row["Class"] = str_class;
  335. for (int j = 7; j < data.Columns.Count; j++)
  336. {
  337. row[j] = 0;
  338. }
  339. bool b2 = false;
  340. for (int j = 0; j < m_bt_DBData.Rows.Count; j++)
  341. {
  342. if (m_otsreport_export.m_mbszclass.List_data[i].Rows[a]["STDId"].ToString() == m_bt_DBData.Rows[j]["TypeId"].ToString())
  343. {
  344. data1.Rows.Add(m_bt_DBData.Rows[j].ItemArray);
  345. b2 = true;
  346. }
  347. }
  348. if (b2)
  349. {
  350. data.Rows.Add(data1.Rows[0].ItemArray);
  351. }
  352. else
  353. {
  354. data.Rows.Add(row);
  355. }
  356. }
  357. }
  358. }
  359. SpecifyGroup.Add(data);
  360. }
  361. BData = SpecifyGroup.Copy();
  362. #region 测量结果颗粒组队列
  363. List<DataTable> datas1 = new List<DataTable>();
  364. List<string> stringsa = fielddata.ObtainParticleCategory(m_otsreport_export, this);
  365. for (int i = 0; i < stringsa.Count; i++)
  366. {
  367. DataTable data = dtp.Clone();
  368. for (int a = 0; a < dtp.Rows.Count; a++)
  369. {
  370. if (Convert.ToInt64(dtp.Rows[i]["TypeId"]) > 10)
  371. {
  372. if (stringsa[i].ToString() == dtp.Rows[a]["GroupName"].ToString())
  373. {
  374. data.Rows.Add(dtp.Rows[a].ItemArray);
  375. }
  376. }
  377. }
  378. datas1.Add(data);
  379. }
  380. Measurements = new List<DataTable>();
  381. for (int i = 0; i < m_otsreport_export.m_mbszclass.List_data.Count; i++)
  382. {
  383. bool b3 = false;
  384. string str_class = "";
  385. for (int a = 0; a < m_otsreport_export.m_mbszclass.RuleGroup.Rows.Count; a++)
  386. {
  387. if (m_otsreport_export.m_mbszclass.RuleGroup.Rows[a]["GroupId"].ToString() == m_otsreport_export.m_mbszclass.List_data[i].TableName)
  388. {
  389. if (m_otsreport_export.m_mbszclass.RuleGroup.Rows[a]["display"].ToString() == "1")
  390. {
  391. str_class = m_otsreport_export.m_mbszclass.RuleGroup.Rows[a]["GroupName"].ToString();
  392. b3 = true;
  393. }
  394. }
  395. }
  396. if (b3)
  397. {
  398. DataTable table = datas1[i].Clone();
  399. for (int a = 0; a < datas1[i].Rows.Count; a++)
  400. {
  401. for (int b = 0; b < m_otsreport_export.m_mbszclass.List_data[i].Rows.Count; b++)
  402. {
  403. if (m_otsreport_export.m_mbszclass.List_data[i].Rows[b]["display"].ToString() == "1")
  404. {
  405. if (datas1[i].Rows[a]["TypeId"].ToString() == m_otsreport_export.m_mbszclass.List_data[i].Rows[b]["STDId"].ToString())
  406. {
  407. table.Rows.Add(datas1[i].Rows[a].ItemArray);
  408. }
  409. }
  410. }
  411. }
  412. Measurements.Add(table);
  413. }
  414. }
  415. #endregion
  416. }
  417. /// <summary>
  418. /// 获取夹杂物组信息
  419. /// </summary>
  420. /// <returns></returns>
  421. public List<string> GetGroupInformation()
  422. {
  423. return GroupInformation;
  424. }
  425. /// <summary>
  426. /// 获取读取数据库并过滤颗粒
  427. /// </summary>
  428. /// <returns></returns>
  429. public List<DataTable> GetDBData()
  430. {
  431. return BData;
  432. }
  433. /// <summary>
  434. /// 获取读取数据库并过滤颗粒
  435. /// </summary>
  436. /// <returns></returns>
  437. public List<DataTable> etDBData()
  438. {
  439. return BData;
  440. }
  441. public void SetAllClass()
  442. {
  443. AllClass = fielddata.GetAllClass();
  444. }
  445. /// <summary>
  446. /// 获取全部大类
  447. /// </summary>
  448. /// <returns></returns>
  449. public DataTable GetAllClass()
  450. {
  451. return AllClass;
  452. }
  453. /// <summary>
  454. ///测量结果数据列队
  455. /// </summary>
  456. /// <returns></returns>
  457. public List<DataTable> GetMeasurements()
  458. {
  459. return Measurements;
  460. }
  461. /// <summary>
  462. /// 定义ParticleData类
  463. /// </summary>
  464. public void newParticleData(OTSReport_Export m_otsreport_export)
  465. {
  466. fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.GetWorkingResultId()].FilePath);
  467. }
  468. public ParticleData getParticleData()
  469. {
  470. return fielddata;
  471. }
  472. public void SetAllElement()
  473. {
  474. AllElement = fielddata.GetAllElement();
  475. }
  476. /// <summary>
  477. /// 获取全部元素
  478. /// </summary>
  479. /// <returns></returns>
  480. public DataTable GetAllElement()
  481. {
  482. return AllElement;
  483. }
  484. /// <summary>
  485. /// 判断是否有大分类,有为true
  486. /// </summary>
  487. /// <param name="m_otsreport_export"></param>
  488. /// <returns></returns>
  489. public void IsThereAMajorClassification()
  490. {
  491. DataTable getClass_dt = fielddata.GetAllClass();
  492. List<string> ClassName = new List<string>();
  493. bool bl = false;
  494. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  495. {
  496. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  497. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  498. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  499. {
  500. if (!bl)
  501. {
  502. ClassName.Add("Default");
  503. bl = true;
  504. }
  505. }
  506. else
  507. {
  508. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  509. {
  510. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  511. }
  512. }
  513. }
  514. if (ClassName.Count < 2)
  515. {
  516. IsShereAClassificationGroup= false;
  517. }
  518. else
  519. {
  520. IsShereAClassificationGroup= true;
  521. }
  522. }
  523. public bool GetIsThereAMajorClassification()
  524. {
  525. return IsShereAClassificationGroup;
  526. }
  527. public void IsResultFilesList(OTSReport_Export m_otsreport_export)
  528. {
  529. resfile = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.GetWorkingResultId()];
  530. }
  531. /// <summary>
  532. /// 获取标准库名称
  533. /// </summary>
  534. /// <returns></returns>
  535. public string GetResfile()
  536. {
  537. return resfile.GetSTDName();
  538. }
  539. public void IsFilePath(OTSReport_Export m_otsreport_export)
  540. {
  541. FilePath= m_otsreport_export.m_ReportApp.m_rstDataMgr.CurResultFile.FilePath;
  542. }
  543. /// <summary>
  544. /// 得到文件路径
  545. /// </summary>
  546. /// <returns></returns>
  547. public string GetFilePath()
  548. {
  549. return FilePath;
  550. }
  551. #region 内部函数
  552. private string getWhere(string max, string min, string col, string partic)
  553. {
  554. return col + ">=" + min + " and " + col + "<" + max + " and TypeId=" + partic;
  555. }
  556. private DataTable InvalidRemoval(DataTable dt)
  557. {
  558. DataTable dataTable = dt.Copy();
  559. dataTable.Clear();
  560. for (int i = 0; i < dt.Rows.Count; i++)
  561. {
  562. if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 10)
  563. {
  564. dataTable.Rows.Add(dt.Rows[i].ItemArray);
  565. }
  566. }
  567. return dataTable;
  568. }
  569. #endregion
  570. }
  571. }