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;
}
}
}