InclusionProportion.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. 
  2. using OTSIncAReportApp.DataOperation.DataAccess;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using static OTSIncAReportApp.OTSReport_Export;
  10. namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration
  11. {
  12. /// <summary>
  13. /// 夹杂物占比
  14. /// </summary>
  15. class InclusionProportion
  16. {
  17. /// <summary>
  18. /// 夹杂物数据表
  19. /// </summary>
  20. /// <param name="str"></param>
  21. /// <param name="dt"></param>
  22. public DataTable GetINCAtable(BasicData basicData, string str, c_TemplateClass m_mbszclass)
  23. {
  24. //根据sql条件,查询获取颗粒信息数据
  25. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  26. List<string> ClassName = basicData.GetGroupInformation();
  27. //夹杂物面积比添加大类
  28. DataTable RawParticleData = InclusionAreaRatio_2(str, basicData, m_mbszclass);
  29. //夹杂物面积比计算大类占比
  30. ProportionOfParticleArea(RawParticleData, ClassName, str, out DataTable dt);
  31. return dt;
  32. }
  33. /// <summary>
  34. /// 夹杂物大分类chart数据
  35. /// </summary>
  36. /// <param name="str"></param>
  37. /// <param name="m_mbszclass"></param>
  38. /// <param name="m_otsreport_export"></param>
  39. /// <returns></returns>
  40. public DataTable Get_incaPIC_classify(string str ,c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export)
  41. {
  42. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.GetWorkingResultId()].FilePath);
  43. DataTable m_bt_DBData = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  44. DataTable data;
  45. if (m_mbszclass.list_str_MainPriority_Serial.Count==0)
  46. {
  47. data = m_bt_DBData.Copy();
  48. }
  49. else
  50. {
  51. data = m_bt_DBData.Clone();
  52. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  53. {
  54. for (int a = 0; a < m_mbszclass.list_str_MainPriority_Serial.Count; a++)
  55. {
  56. if (m_bt_DBData.Rows[i]["TypeId"].ToString() == m_mbszclass.list_str_MainPriority_Serial[a])
  57. {
  58. data.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  59. continue;
  60. }
  61. }
  62. }
  63. }
  64. //去除物质分类(非夹杂物分类)
  65. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass_Serial.Count; a++)
  66. {
  67. for (int i = data.Rows.Count - 1; i >= 0; i--)
  68. {
  69. if (data.Rows[i]["TypeId"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass_Serial[a].ToString())
  70. {
  71. data.Rows.RemoveAt(i);
  72. }
  73. }
  74. }
  75. DataTable AreaInformationOfAllElements = ConSolidateInvalid(data);
  76. DataTable AllAnalysisDetails = new DataTable();
  77. AllAnalysisDetails.Columns.Add("Name");
  78. AllAnalysisDetails.Columns.Add("TypeId");
  79. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  80. AllAnalysisDetails.Columns.Add("Class");
  81. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  82. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  83. {
  84. DataRow dr2 = AllAnalysisDetails.NewRow();
  85. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  86. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  87. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  88. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  89. if (AreaInformationOfAllElements.Rows[i]["GroupName"].ToString() == "")
  90. dr2["Class"] = "Default";
  91. else
  92. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  93. //dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  94. AllAnalysisDetails.Rows.Add(dr2);
  95. }
  96. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  97. List<string> ClassName = new List<string>();
  98. DataTable getClass_dt = fielddata.GetAllClass();
  99. bool bl = false;
  100. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  101. {
  102. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  103. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  104. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  105. {
  106. if (!bl)
  107. {
  108. ClassName.Add("Default");
  109. bl = true;
  110. }
  111. }
  112. else
  113. {
  114. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  115. {
  116. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  117. }
  118. }
  119. }
  120. DataTable AreaRatio = new DataTable();
  121. AreaRatio.TableName = "InclusionAreaRatio";
  122. AreaRatio.Columns.Add("Class");
  123. AreaRatio.Columns.Add("Name");
  124. AreaRatio.Columns.Add("Area", typeof(double));
  125. AreaRatio.Columns.Add("inca_proportion");
  126. AreaRatio.Columns.Add("inca_FieldRatio");
  127. AreaRatio.Columns.Add("Cunt", typeof(int));
  128. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  129. double totalInclusionArea = Convert.ToDouble(decimal.Parse(AllAnalysisDetails.Compute("sum(Area)", "").ToString()));
  130. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  131. {
  132. DataRow dr2 = AreaRatio.NewRow();
  133. dr2["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  134. dr2["Name"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  135. dr2["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  136. dr2["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / totalInclusionArea) * 100, 2);
  137. dr2["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  138. dr2["Cunt"] = AllAnalysisDetails.Rows[i]["Cunt"].ToString();
  139. AreaRatio.Rows.Add(dr2);
  140. }
  141. DataTable AreaRatio_dt = AreaRatio.Copy();
  142. AreaRatio_dt.Clear();
  143. for (int i = 0; i < ClassName.Count(); i++)
  144. {
  145. DataTable dt = AreaRatio.Copy();
  146. dt.Clear();
  147. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  148. {
  149. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  150. {
  151. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  152. }
  153. }
  154. DataView dv = dt.DefaultView;
  155. dv.Sort = "Area DESC";
  156. DataTable dt_Element = dv.ToTable();
  157. for (int a = 0; a < dt_Element.Rows.Count; a++)
  158. {
  159. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  160. }
  161. }
  162. DataTable AllAnalysisDetails1 = AreaRatio_dt.Copy();
  163. AllAnalysisDetails1.Clear();
  164. for (int i = 0; i < ClassName.Count; i++)
  165. {
  166. DataTable dt = AreaRatio_dt.Copy();
  167. dt.Clear();
  168. for (int a = 0; a < AreaRatio_dt.Rows.Count; a++)
  169. {
  170. if (AreaRatio_dt.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  171. {
  172. dt.Rows.Add(AreaRatio_dt.Rows[a].ItemArray);
  173. }
  174. }
  175. if (dt.Rows.Count > 0)
  176. {
  177. double totalInclusionArea2 = Convert.ToDouble(decimal.Parse(AreaRatio_dt.Compute("sum(Area)", "").ToString()));
  178. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  179. int cunt = Convert.ToInt32(decimal.Parse(dt.Compute("sum(Cunt)", "").ToString()));
  180. DataRow dr3 = AllAnalysisDetails1.NewRow();
  181. dr3["Class"] = ClassName[i].ToString();
  182. dr3["Area"] = Math.Round(Area, 2);
  183. dr3["inca_proportion"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / totalInclusionArea2) * 100, 2);
  184. dr3["inca_FieldRatio"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  185. dr3["Cunt"] = cunt;
  186. AllAnalysisDetails1.Rows.Add(dr3);
  187. }
  188. }
  189. return AllAnalysisDetails1;
  190. }
  191. /// <summary>
  192. /// 夹杂物细分类chart数据
  193. /// </summary>
  194. /// <param name="m_mbszclass"></param>
  195. /// <param name="m_otsreport_export"></param>
  196. /// <returns></returns>
  197. public DataTable Get_incaPIC_subdivision(c_TemplateClass m_mbszclass,OTSReport_Export m_otsreport_export)
  198. {
  199. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.GetWorkingResultId()].FilePath);
  200. DataTable m_bt_DBData = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  201. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  202. List<string> ClassName = new List<string>();
  203. DataTable getClass_dt = fielddata.GetAllClass();
  204. bool bl = false;
  205. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  206. {
  207. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  208. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  209. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  210. {
  211. if (!bl)
  212. {
  213. ClassName.Add("Default");
  214. bl = true;
  215. }
  216. }
  217. else
  218. {
  219. if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  220. {
  221. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  222. }
  223. }
  224. }
  225. DataTable dataTable = m_bt_DBData.Clone();
  226. for (int i=0;i< m_bt_DBData.Rows.Count;i++)
  227. {
  228. for (int a=0;a< ClassName.Count;a++)
  229. {
  230. if (m_bt_DBData.Rows[i]["GroupName"].ToString()== ClassName[a].ToString())
  231. {
  232. dataTable.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  233. }
  234. }
  235. }
  236. if (m_mbszclass.list_str_MainPriority_Serial.Count==0)
  237. {
  238. return ConSolidateInvalid(dataTable);
  239. }
  240. DataTable data = m_bt_DBData.Clone();
  241. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  242. {
  243. for (int a = 0; a < m_mbszclass.list_str_MainPriority_Serial.Count; a++)
  244. {
  245. if (m_bt_DBData.Rows[i]["TypeId"].ToString() == m_mbszclass.list_str_MainPriority_Serial[a])
  246. {
  247. data.Rows.Add(m_bt_DBData.Rows[i].ItemArray);
  248. continue;
  249. }
  250. }
  251. }
  252. return ConSolidateInvalid(dataTable);
  253. }
  254. private DataTable ConSolidateInvalid(DataTable dt)
  255. {
  256. DataTable dt_invalid = dt.Clone();
  257. DataTable dt_no_invalid = dt.Clone();
  258. for (int i = 0; i < dt.Rows.Count; i++)
  259. {
  260. if (dt.Rows[i]["TypeName"].ToString() == "Invalid")
  261. {
  262. dt_invalid.Rows.Add(dt.Rows[i].ItemArray);
  263. }
  264. else
  265. {
  266. dt_no_invalid.Rows.Add(dt.Rows[i].ItemArray);
  267. }
  268. }
  269. return dt_no_invalid;
  270. }
  271. private DataTable InclusionAreaRatio_2(string str, BasicData basicData, c_TemplateClass m_mbszclass)
  272. {
  273. //根据sql条件,查询获取颗粒信息数据
  274. //ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  275. DataTable m_bt_DBData = InvalidRemoval(basicData.getParticleData().GetAreaByAllIncA(""));
  276. DataTable AreaInformationOfAllElements = m_bt_DBData.Copy();
  277. //去除物质分类(非夹杂物分类)
  278. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass_Serial.Count; a++)
  279. {
  280. for (int i = AreaInformationOfAllElements.Rows.Count - 1; i >= 0; i--)
  281. {
  282. if (AreaInformationOfAllElements.Rows[i]["TypeId"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass_Serial[a].ToString())
  283. {
  284. AreaInformationOfAllElements.Rows.RemoveAt(i);
  285. }
  286. }
  287. }
  288. DataTable AllAnalysisDetails = new DataTable();
  289. AllAnalysisDetails.Columns.Add("Name");
  290. AllAnalysisDetails.Columns.Add("TypeId");
  291. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  292. AllAnalysisDetails.Columns.Add("Class");
  293. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  294. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  295. {
  296. DataRow dr2 = AllAnalysisDetails.NewRow();
  297. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  298. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  299. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  300. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  301. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  302. AllAnalysisDetails.Rows.Add(dr2);
  303. }
  304. List<string> ClassName = basicData.GetGroupInformation();
  305. //DataTable getClass_dt = basicData.GetAllClass();
  306. //bool bl = false;
  307. //for (int i = 0; i < getClass_dt.Rows.Count; i++)
  308. //{
  309. // if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  310. // && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  311. // if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  312. // {
  313. // if (!bl)
  314. // {
  315. // ClassName.Add("Default");
  316. // bl = true;
  317. // }
  318. // }
  319. // else
  320. // {
  321. // if (getClass_dt.Rows[i]["GroupName"].ToString() != "Default")
  322. // {
  323. // ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  324. // }
  325. // }
  326. //}
  327. DataTable AreaRatio = new DataTable();
  328. AreaRatio.TableName = "InclusionAreaRatio";
  329. AreaRatio.Columns.Add("Class");
  330. AreaRatio.Columns.Add("subdivision");
  331. AreaRatio.Columns.Add("Area", typeof(double));
  332. AreaRatio.Columns.Add("inca_proportion");
  333. AreaRatio.Columns.Add("inca_FieldRatio");
  334. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  335. int sumArea = 0;
  336. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  337. {
  338. sumArea = sumArea + Convert.ToInt32(AllAnalysisDetails.Rows[i]["Area"]);
  339. }
  340. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  341. {
  342. DataRow dr = AreaRatio.NewRow();
  343. //dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  344. if (AllAnalysisDetails.Rows[i]["Class"].ToString() == "")
  345. dr["Class"] = "Default";
  346. else
  347. dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  348. dr["subdivision"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  349. dr["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  350. dr["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / sumArea) * 100, 2);
  351. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  352. AreaRatio.Rows.Add(dr);
  353. }
  354. DataTable AreaRatio_dt = AreaRatio.Copy();
  355. AreaRatio_dt.Clear();
  356. for (int i = 0; i < ClassName.Count(); i++)
  357. {
  358. DataTable dt = AreaRatio.Copy();
  359. dt.Clear();
  360. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  361. {
  362. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  363. {
  364. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  365. }
  366. }
  367. DataView dv = dt.DefaultView;
  368. dv.Sort = "Area DESC";
  369. DataTable dt_Element = dv.ToTable();
  370. for (int a = 0; a < dt_Element.Rows.Count; a++)
  371. {
  372. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  373. }
  374. }
  375. return AreaRatio_dt;
  376. }
  377. private bool ProportionOfParticleArea(DataTable dataTable, List<string> ClassName, string str, out DataTable dt_out)
  378. {
  379. DataTable AllAnalysisDetails = dataTable.Copy();
  380. AllAnalysisDetails.Clear();
  381. AllAnalysisDetails.TableName = "InclusionAreaRatio";
  382. for (int i = 0; i < ClassName.Count; i++)
  383. {
  384. DataTable dt = dataTable.Copy();
  385. dt.Clear();
  386. for (int a = 0; a < dataTable.Rows.Count; a++)
  387. {
  388. if (dataTable.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  389. {
  390. dt.Rows.Add(dataTable.Rows[a].ItemArray);
  391. }
  392. }
  393. if (dt.Rows.Count > 0)
  394. {
  395. double totalInclusionArea = Convert.ToDouble(decimal.Parse(dataTable.Compute("sum(Area)", "").ToString()));
  396. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  397. DataRow dr = AllAnalysisDetails.NewRow();
  398. dr["Class"] = ClassName[i].ToString();
  399. dr["Area"] = Math.Round(Area, 2);
  400. //Convert.ToDouble(decimal.Parse(dt.Compute("sum(e3)", "").ToString()));
  401. dr["inca_proportion"] = Math.Round((Convert.ToDouble(Area) / totalInclusionArea) * 100, 2);
  402. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(Area) / Convert.ToDouble(str)) * 100, 4);
  403. AllAnalysisDetails.Rows.Add(dr);
  404. DataView dv = dt.DefaultView;
  405. dv.Sort = "Area DESC";
  406. DataTable dt_Area = dv.ToTable();
  407. for (int a = 0; a < dt_Area.Rows.Count; a++)
  408. {
  409. dt_Area.Rows[a]["Class"] = "";
  410. dt_Area.Rows[a]["Area"] = Math.Round(Convert.ToDouble(dt_Area.Rows[a]["Area"]), 2);
  411. AllAnalysisDetails.Rows.Add(dt_Area.Rows[a].ItemArray);
  412. }
  413. }
  414. }
  415. dt_out = AllAnalysisDetails.Copy();
  416. return true;
  417. }
  418. private DataTable InvalidRemoval(DataTable dt)
  419. {
  420. DataTable dataTable = dt.Copy();
  421. dataTable.Clear();
  422. for (int i = 0; i < dt.Rows.Count; i++)
  423. {
  424. if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 10)
  425. {
  426. dataTable.Rows.Add(dt.Rows[i].ItemArray);
  427. }
  428. }
  429. return dataTable;
  430. }
  431. }
  432. }