using OTSCommon.Model; using OTSIncAReportApp.DataOperation.DataAccess; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using static OTSIncAReportApp.OTSReport_Export; namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration { /// /// 夹杂物占比 /// class InclusionProportion { /// /// 夹杂物数据表 /// /// /// public DataTable GetINCAtable(string str, OTSReport_Export m_otsreport_export, c_TemplateClass m_mbszclass) { //根据sql条件,查询获取颗粒信息数据 ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序 List ClassName = new List(); DataTable getClass_dt = fielddata.GetAllClass(); for (int i = 0; i < getClass_dt.Rows.Count; i++) { if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid") if (getClass_dt.Rows[i]["GroupName"].ToString() == "") ClassName.Add("Default"); else ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); } //夹杂物面积比添加大类 DataTable RawParticleData = InclusionAreaRatio_2(str, m_otsreport_export, m_mbszclass); //夹杂物面积比计算大类占比 ProportionOfParticleArea(RawParticleData, ClassName, str, out DataTable dt); return dt; } /// /// 夹杂物大分类chart数据 /// /// /// /// /// public DataTable Get_incaPIC_classify(string str ,c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export) { ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); DataTable data = new DataTable(); if (m_mbszclass.M_SY.int_xzkl == 0) { data = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息 } else { DataTable AllInca = fielddata.GetAreaByAllIncA(""); DataTable SelectParticl = SelectParticleData(m_otsreport_export); data = GetParticleListForParticlSize(SelectParticl, AllInca); } //去除物质分类(非夹杂物分类) for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++) { for (int i = data.Rows.Count - 1; i >= 0; i--) { if (data.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString()) { data.Rows.RemoveAt(i); } } } DataTable AreaInformationOfAllElements = ConSolidateInvalid(data); DataTable AllAnalysisDetails = new DataTable(); AllAnalysisDetails.Columns.Add("Name"); AllAnalysisDetails.Columns.Add("TypeId"); AllAnalysisDetails.Columns.Add("Area", typeof(double)); AllAnalysisDetails.Columns.Add("Class"); AllAnalysisDetails.Columns.Add("Cunt", typeof(double)); for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++) { DataRow dr2 = AllAnalysisDetails.NewRow(); dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString(); dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]); dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString(); dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]); if (AreaInformationOfAllElements.Rows[i]["GroupName"].ToString() == "") dr2["Class"] = "Default"; else dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString(); //dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString(); AllAnalysisDetails.Rows.Add(dr2); } //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序 List ClassName = new List(); DataTable getClass_dt = fielddata.GetAllClass(); for (int i = 0; i < getClass_dt.Rows.Count; i++) { if (getClass_dt.Rows[i]["GroupName"].ToString() == "") ClassName.Add("Default"); else ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); } DataTable AreaRatio = new DataTable(); AreaRatio.TableName = "InclusionAreaRatio"; AreaRatio.Columns.Add("Class"); AreaRatio.Columns.Add("Name"); AreaRatio.Columns.Add("Area", typeof(double)); AreaRatio.Columns.Add("inca_proportion"); AreaRatio.Columns.Add("inca_FieldRatio"); AreaRatio.Columns.Add("Cunt", typeof(int)); //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一) double totalInclusionArea = Convert.ToDouble(decimal.Parse(AllAnalysisDetails.Compute("sum(Area)", "").ToString())); for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++) { DataRow dr2 = AreaRatio.NewRow(); dr2["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString(); dr2["Name"] = AllAnalysisDetails.Rows[i]["Name"].ToString(); dr2["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]); dr2["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / totalInclusionArea) * 100, 2); dr2["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4); dr2["Cunt"] = AllAnalysisDetails.Rows[i]["Cunt"].ToString(); AreaRatio.Rows.Add(dr2); } DataTable AreaRatio_dt = AreaRatio.Copy(); AreaRatio_dt.Clear(); for (int i = 0; i < ClassName.Count(); i++) { DataTable dt = AreaRatio.Copy(); dt.Clear(); for (int a = 0; a < AreaRatio.Rows.Count; a++) { if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString()) { dt.Rows.Add(AreaRatio.Rows[a].ItemArray); } } DataView dv = dt.DefaultView; dv.Sort = "Area DESC"; DataTable dt_Element = dv.ToTable(); for (int a = 0; a < dt_Element.Rows.Count; a++) { AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray); } } DataTable AllAnalysisDetails1 = AreaRatio_dt.Copy(); AllAnalysisDetails1.Clear(); for (int i = 0; i < ClassName.Count; i++) { DataTable dt = AreaRatio_dt.Copy(); dt.Clear(); for (int a = 0; a < AreaRatio_dt.Rows.Count; a++) { if (AreaRatio_dt.Rows[a]["Class"].ToString() == ClassName[i].ToString()) { dt.Rows.Add(AreaRatio_dt.Rows[a].ItemArray); } } if (dt.Rows.Count > 0) { double totalInclusionArea2 = Convert.ToDouble(decimal.Parse(AreaRatio_dt.Compute("sum(Area)", "").ToString())); double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString())); int cunt = Convert.ToInt32(decimal.Parse(dt.Compute("sum(Cunt)", "").ToString())); DataRow dr3 = AllAnalysisDetails1.NewRow(); dr3["Class"] = ClassName[i].ToString(); dr3["Area"] = Math.Round(Area, 2); dr3["inca_proportion"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / totalInclusionArea2) * 100, 2); dr3["inca_FieldRatio"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / Convert.ToDouble(str)) * 100, 4); dr3["Cunt"] = cunt; AllAnalysisDetails1.Rows.Add(dr3); } } return AllAnalysisDetails1; } /// /// 夹杂物细分类chart数据 /// /// /// /// public DataTable Get_incaPIC_subdivision(c_TemplateClass m_mbszclass,OTSReport_Export m_otsreport_export) { ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); DataTable data = new DataTable(); if (m_mbszclass.M_SY.int_xzkl == 0) { data = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息 } else { DataTable AllInca = fielddata.GetAreaByAllIncA(""); DataTable SelectParticl = SelectParticleData(m_otsreport_export); data = GetParticleListForParticlSize(SelectParticl, AllInca); } return ConSolidateInvalid(data); } /// /// 判断是否有大分类,有为true /// /// /// public bool IsThereAMajorClassification(OTSReport_Export m_otsreport_export) { ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); DataTable getClass_dt = fielddata.GetAllClass(); List ClassName = new List(); for (int i = 0; i < getClass_dt.Rows.Count; i++) { if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid" && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified") if (getClass_dt.Rows[i]["GroupName"].ToString() == "") ClassName.Add("Default"); else ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); } if (ClassName.Count < 2) { return false; } else { return true; } } private DataTable ConSolidateInvalid(DataTable dt) { DataTable dt_invalid = dt.Clone(); DataTable dt_no_invalid = dt.Clone(); for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["TypeName"].ToString() == "Invalid") { dt_invalid.Rows.Add(dt.Rows[i].ItemArray); } else { dt_no_invalid.Rows.Add(dt.Rows[i].ItemArray); } } return dt_no_invalid; } private DataTable GetParticleListForParticlSize(DataTable data, DataTable table) { DataTable dt_Partick = new DataTable(); dt_Partick.Columns.Add("TypeId"); dt_Partick.Columns.Add("TypeName"); dt_Partick.Columns.Add("TypeColor"); dt_Partick.Columns.Add("con"); dt_Partick.Columns.Add("ar"); dt_Partick.Columns.Add("max"); dt_Partick.Columns.Add("Area", typeof(double)); dt_Partick.Columns.Add("GroupName"); List typeName = new List(); for (int i = 0; i < data.Rows.Count; i++) { typeName.Add(data.Rows[i]["TypeId"].ToString()); } typeName = typeName.Distinct().ToList(); for (int i = 0; i < typeName.Count; i++) { DataTable dt = dt_Partick.Clone(); for (int j = 0; j < data.Rows.Count; j++) { if (typeName[i].ToString() == data.Rows[j]["TypeId"].ToString()) { DataRow row = dt.NewRow(); row["TypeId"] = data.Rows[j]["TypeId"]; row["TypeName"] = data.Rows[j]["TypeName"]; row["TypeColor"] = data.Rows[j]["TypeColor"]; row["Area"] = data.Rows[j]["Area"]; dt.Rows.Add(row); } } DataRow dr = dt_Partick.NewRow(); dr["TypeId"] = dt.Rows[0]["TypeId"].ToString(); dr["TypeName"] = dt.Rows[0]["TypeName"].ToString(); dr["TypeColor"] = dt.Rows[0]["TypeColor"].ToString(); dr["con"] = dt.Rows.Count; dr["ar"] = dt.Compute("min(Area)", ""); dr["max"] = dt.Compute("Max(Area)", ""); dr["Area"] = dt.Compute("SUM(Area)", ""); dt_Partick.Rows.Add(dr); } for (int i = 0; i < dt_Partick.Rows.Count; i++) { for (int j = 0; j < table.Rows.Count; j++) { if (dt_Partick.Rows[i]["TypeId"].ToString() == table.Rows[j]["TypeId"].ToString()) { dt_Partick.Rows[i]["GroupName"] = table.Rows[j]["GroupName"]; break; } } } return dt_Partick; } private DataTable SelectParticleData(OTSReport_Export m_otsreport_export) { List selectParticles = m_otsreport_export.m_ReportApp.GetSelectedParticles(); #region Datatable数据表格式 DataTable dtUelect = new DataTable(); dtUelect.Columns.Add("fieldid"); dtUelect.Columns.Add("particleid"); dtUelect.Columns.Add("AveGray"); dtUelect.Columns.Add("RectLeft"); dtUelect.Columns.Add("RectTop"); dtUelect.Columns.Add("RectWidth"); dtUelect.Columns.Add("RectHeight"); dtUelect.Columns.Add("Area"); dtUelect.Columns.Add("PosX"); dtUelect.Columns.Add("PosY"); dtUelect.Columns.Add("TypeId"); dtUelect.Columns.Add("SegmentNum"); dtUelect.Columns.Add("SEMPosX"); dtUelect.Columns.Add("SEMPosY"); dtUelect.Columns.Add("XrayId"); dtUelect.Columns.Add("DMAX"); dtUelect.Columns.Add("DMIN"); dtUelect.Columns.Add("DPERP"); dtUelect.Columns.Add("PERIMETER"); dtUelect.Columns.Add("ORIENTATION"); dtUelect.Columns.Add("DINSCR"); dtUelect.Columns.Add("DMEAN"); dtUelect.Columns.Add("DELONG"); dtUelect.Columns.Add("DFERET"); dtUelect.Columns.Add("TypeName"); dtUelect.Columns.Add("TypeColor"); #endregion for (int i = 0; i < selectParticles.Count; i++) { dtUelect.Rows.Add(selectParticles[i].FieldId, selectParticles[i].ParticleId, selectParticles[i].AveGray, selectParticles[i].RectLeft, selectParticles[i].RectTop, selectParticles[i].RectWidth, selectParticles[i].RectHeight, selectParticles[i].Area, selectParticles[i].PosX, selectParticles[i].PosX, selectParticles[i].TypeId, /*selectParticles[i].ElementNum,*/ selectParticles[i].SegmentNum, selectParticles[i].SEMPosX, selectParticles[i].SEMPosY, selectParticles[i].ParticleId, selectParticles[i].DMAX, selectParticles[i].DMIN, selectParticles[i].DPERP, selectParticles[i].PERIMETER, selectParticles[i].ORIENTATION, selectParticles[i].DINSCR, selectParticles[i].DMEAN, selectParticles[i].DELONG, selectParticles[i].DFERET, selectParticles[i].TypeName, selectParticles[i].TypeColor); } return dtUelect; } private DataTable InclusionAreaRatio_2(string str, OTSReport_Export m_otsreport_export, c_TemplateClass m_mbszclass) { //根据sql条件,查询获取颗粒信息数据 ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath); DataTable AreaInformationOfAllElements = InvalidRemoval(fielddata.GetAreaByAllIncA("")); //去除物质分类(非夹杂物分类) for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++) { for (int i = AreaInformationOfAllElements.Rows.Count - 1; i >= 0; i--) { if (AreaInformationOfAllElements.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString()) { AreaInformationOfAllElements.Rows.RemoveAt(i); } } } DataTable AllAnalysisDetails = new DataTable(); AllAnalysisDetails.Columns.Add("Name"); AllAnalysisDetails.Columns.Add("TypeId"); AllAnalysisDetails.Columns.Add("Area", typeof(double)); AllAnalysisDetails.Columns.Add("Class"); AllAnalysisDetails.Columns.Add("Cunt", typeof(double)); for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++) { DataRow dr2 = AllAnalysisDetails.NewRow(); dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString(); dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]); dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString(); dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]); dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString(); AllAnalysisDetails.Rows.Add(dr2); } List ClassName = new List(); DataTable getClass_dt = fielddata.GetAllClass(); for (int i = 0; i < getClass_dt.Rows.Count; i++) { if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid") //ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); if (getClass_dt.Rows[i]["GroupName"].ToString() == "") ClassName.Add("Default"); else ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString()); } DataTable AreaRatio = new DataTable(); AreaRatio.TableName = "InclusionAreaRatio"; AreaRatio.Columns.Add("Class"); AreaRatio.Columns.Add("subdivision"); AreaRatio.Columns.Add("Area", typeof(double)); AreaRatio.Columns.Add("inca_proportion"); AreaRatio.Columns.Add("inca_FieldRatio"); //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一) int sumArea = 0; for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++) { sumArea = sumArea + Convert.ToInt32(AllAnalysisDetails.Rows[i]["Area"]); } for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++) { DataRow dr = AreaRatio.NewRow(); //dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString(); if (AllAnalysisDetails.Rows[i]["Class"].ToString() == "") dr["Class"] = "Default"; else dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString(); dr["subdivision"] = AllAnalysisDetails.Rows[i]["Name"].ToString(); dr["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]); dr["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / sumArea) * 100, 2); dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4); AreaRatio.Rows.Add(dr); } DataTable AreaRatio_dt = AreaRatio.Copy(); AreaRatio_dt.Clear(); for (int i = 0; i < ClassName.Count(); i++) { DataTable dt = AreaRatio.Copy(); dt.Clear(); for (int a = 0; a < AreaRatio.Rows.Count; a++) { if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString()) { dt.Rows.Add(AreaRatio.Rows[a].ItemArray); } } DataView dv = dt.DefaultView; dv.Sort = "Area DESC"; DataTable dt_Element = dv.ToTable(); for (int a = 0; a < dt_Element.Rows.Count; a++) { AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray); } } return AreaRatio_dt; } private bool ProportionOfParticleArea(DataTable dataTable, List ClassName, string str, out DataTable dt_out) { DataTable AllAnalysisDetails = dataTable.Copy(); AllAnalysisDetails.Clear(); AllAnalysisDetails.TableName = "InclusionAreaRatio"; for (int i = 0; i < ClassName.Count; i++) { DataTable dt = dataTable.Copy(); dt.Clear(); for (int a = 0; a < dataTable.Rows.Count; a++) { if (dataTable.Rows[a]["Class"].ToString() == ClassName[i].ToString()) { dt.Rows.Add(dataTable.Rows[a].ItemArray); } } if (dt.Rows.Count > 0) { double totalInclusionArea = Convert.ToDouble(decimal.Parse(dataTable.Compute("sum(Area)", "").ToString())); double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString())); DataRow dr = AllAnalysisDetails.NewRow(); dr["Class"] = ClassName[i].ToString(); dr["Area"] = Math.Round(Area, 2); //Convert.ToDouble(decimal.Parse(dt.Compute("sum(e3)", "").ToString())); dr["inca_proportion"] = Math.Round((Convert.ToDouble(Area) / totalInclusionArea) * 100, 2); dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(Area) / Convert.ToDouble(str)) * 100, 4); AllAnalysisDetails.Rows.Add(dr); DataView dv = dt.DefaultView; dv.Sort = "Area DESC"; DataTable dt_Area = dv.ToTable(); for (int a = 0; a < dt_Area.Rows.Count; a++) { dt_Area.Rows[a]["Class"] = ""; dt_Area.Rows[a]["Area"] = Math.Round(Convert.ToDouble(dt_Area.Rows[a]["Area"]), 2); AllAnalysisDetails.Rows.Add(dt_Area.Rows[a].ItemArray); } } } dt_out = AllAnalysisDetails.Copy(); return true; } private DataTable InvalidRemoval(DataTable dt) { DataTable dataTable = dt.Copy(); dataTable.Clear(); for (int i = 0; i < dt.Rows.Count; i++) { if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 10) { dataTable.Rows.Add(dt.Rows[i].ItemArray); } } return dataTable; } } }