using MaiMuAOI.SysCtrl; using MaiMuAOI.SysUI.ProductAndStep; using Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OpenCvSharp.Flann; using SqlSugar; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Drawing; using System.Dynamic; using System.IO; using System.Linq; using System.Runtime.InteropServices.ComTypes; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Web.Routing; using System.Web.UI.WebControls; using System.Windows.Forms; using static MaiMuControl.Form1; namespace MaiMuAOI.SysUI.DefectPicShow { public partial class DataQueryFrm : Form { Service.OrderService OrderService = new Service.OrderService(); List QueryOrders = new List(); List QueryAllOrders = new List(); public DataQueryFrm() { InitializeComponent(); UIStyle.SetUIStyle(this); this.uiTitel1.FatherForm = this; } private void DataQueryFrm_Load(object sender, EventArgs e) { LoadPdtList(SysMgr.Instance.ProductCodeList); //激活OnPageChanged事件 pageCtrl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged); } #region 切页 /// /// 页数变化时调用绑定数据方法 /// /// /// private void pagerControl1_OnPageChanged(object sender, EventArgs e) { QueryData(); } #endregion #region 加载料号 private string[] pdtlistData; private void LoadPdtList(List list) { this.cbProductCode.Items.Clear(); this.pdtlistData = list.ToArray(); cbProductCode.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些 cbProductCode.TextUpdate += cobList_TextUpdate;//重新绑定事件 cbProductCode.KeyDown += CobList_KeyDown; this.cbProductCode.Text = ""; cbProductCode.Focus(); cbProductCode.SelectAll(); } private void CobList_KeyDown(object sender, KeyEventArgs e) { ComboBox ctrl = sender as ComboBox; if (e.KeyCode == Keys.Enter) { if (ctrl.Items.Count == 1) ctrl.Text = ctrl.Items[0].ToString(); } } private void cobList_TextUpdate(object sender, EventArgs e) { ComboBox ctrl = sender as ComboBox; if (ctrl.Text != null) { string str = ctrl.Text; //获取cb_material控件输入内 //清空combobox ctrl.DataSource = null; ctrl.Items.Clear(); string[] workOrderFiltered; workOrderFiltered = pdtlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写 ctrl.Items.AddRange(workOrderFiltered);//比使用DataSource速度要快一些 // 不存在符合条件时 //设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列 ctrl.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置 if (workOrderFiltered.Length > 0) { if (!ctrl.DroppedDown) ctrl.DroppedDown = true; // 自动弹出下拉框 } ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列 } } #endregion #region 查询数据 #region 数据库查询 private class domainItem { public string FieldName { get; set; } public string FieldValue { get; set; } public int ConditionalType { get; set; } } private class QueryOrderData { public string model { get; set; } public string fields { get; set; } public List domain { get; set; } public string order { get; set; } public int pageNum { get; set; } public int pageSize { get; set; } } private List getTableList(JObject req, out int TotalCnt) { try { string model, fields = "", domain = "", order = ""; int pageNum = 0, pageSize = 0, totalCount = 0; model = req.Value("model"); if (req.ContainsKey("fields")) fields = req.Value("fields"); if (req.ContainsKey("domain")) domain = req.Value("domain").ToString(); if (req.ContainsKey("order")) order = req.Value("order"); if (req.ContainsKey("pageNum")) pageNum = req.Value("pageNum"); if (req.ContainsKey("pageSize")) pageSize = req.Value("pageSize"); //创建表达式 var exp1 = Expressionable.Create() //.AndIF((int)cobProductList.SelectedValue > 0, it => it.ProductId == (int)cobProductList.SelectedValue) //.AndIF((int)cobStepList.SelectedValue > 0, it => it.StepId == (int)cobStepList.SelectedValue) //.AndIF(dateTimePicker1.Checked, it => it.CreateTime >= dateTimePicker1.Value) //.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value) .ToExpression();//注意 这一句 不能少 var list = OrderService.GetListEx(fields, domain, order, pageNum, pageSize, ref totalCount); TotalCnt = totalCount; //var list = svcOrder.GetListNav(pageNum, pageSize, ref totalCount, exp1); return list; } catch (Exception ex) { ; } TotalCnt = 0; return null; } #endregion #region 新老流程数据分析 private void ShowDataTableEx(List list) { dataGridView1.Columns.Clear(); //记录数据类型列数 Dictionary dataCnt = new Dictionary(); DataTable dt = new DataTable(); //建立个数据表 //通用列 DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn(); chk.Name = "Select"; chk.HeaderText = "选择"; dataGridView1.Columns.Add(chk); dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列 foreach(var item in list) { //老流程 if(item.StepInfo == null ||item.StepInfo.ProcessType != "快速流程") { //加入数据表 if(item.SizeDefectInfoList == null) item.SizeDefectInfoList = new List(); #region 张力 item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension4, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension5, }); #endregion #region 厚度 item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height4, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height5, }); #endregion #region YPT item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT5, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT6, }); #endregion #region 线宽 item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth4, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth5, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth6, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth7, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth8, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth9, }); #endregion if (!dataCnt.ContainsKey("Tension")) dataCnt.Add("Tension", 5); else if (dataCnt["Tension"] < 5) dataCnt["Tension"] = 5; if (!dataCnt.ContainsKey("Height")) dataCnt.Add("Height", 5); else if (dataCnt["Height"] < 5) dataCnt["Height"] = 5; if (!dataCnt.ContainsKey("Y轴方向PT值检测")) dataCnt.Add("Y轴方向PT值检测", 5); else if (dataCnt["Y轴方向PT值检测"] < 5) dataCnt["Y轴方向PT值检测"] = 5; if (!dataCnt.ContainsKey("线宽正面")) dataCnt.Add("线宽正面", 9); else if (dataCnt["线宽正面"] < 9) dataCnt["线宽正面"] = 9; } else { string[] pointType = new string[11] {"Tension", "Height", "Y轴方向PT值检测" , "线宽正面" , "反面检测" , "X轴方向PT值检测","主栅连接线检测","主栅宽度检测","主栅间距","细栅间距检测","背极宽度"}; for (int i = 0; i < pointType.Length; i++) { List t = item.SizeDefectInfoList.Where(q => q.PointCode == pointType[i]).ToList(); if (t.Count > 0) { if (!dataCnt.ContainsKey(pointType[i])) dataCnt.Add(pointType[i], t.Count); else if (dataCnt[pointType[i]] < t.Count) dataCnt[pointType[i]] = t.Count; } } } } foreach (var item in dataCnt) { switch(item.Key) { case "Tension": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"张力{i+1}", typeof(string))); dt.Columns.Add(new DataColumn("张力均值", typeof(string))); break; case "Height": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"厚度{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("厚度均值", typeof(string))); break; case "Y轴方向PT值检测": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"Y轴方向PT值{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("Y轴方向PT值均值", typeof(string))); break; case "线宽正面": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"线宽正面{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("线宽正面均值", typeof(string))); break; case "X轴方向PT值检测": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"X轴方向PT值{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("X轴方向PT值均值", typeof(string))); break; } } dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("栅线数量", typeof(int)));//在表中添加int类型的列 dataGridView1.DataSource = dt; //在datagridview中添加button按钮 DataGridViewButtonColumn btn = new DataGridViewButtonColumn(); btn.Name = "Modify"; btn.HeaderText = "操作"; btn.DefaultCellStyle.NullValue = "修改"; dataGridView1.Columns.Add(btn); DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn(); btn2.Name = "HistoryView"; btn2.HeaderText = "查看"; btn2.DefaultCellStyle.NullValue = "历史"; dataGridView1.Columns.Add(btn2); DataTable dts = (DataTable)dataGridView1.DataSource; dts.Clear(); foreach (var item in list) { //新增 DataRow dr;//行 dr = dts.NewRow(); //dr["选择"] = false; dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"); dr["检测单号"] = item.DetectOrder; dr["产品名称"] = item.ProductInfo.Name; dr["料号"] = item.ProductInfo.Code; dr["网版编码"] = item.SN; dr["批次"] = item.BatchId; dr["合格"] = item.Qualified ? "合格": "不合格"; dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复"; dr["异常情况"] = item.Abnormalities; dr["修复人员"] = item.RepairCode; dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对"; List tempd = new List(); foreach (var tdata in dataCnt) { switch (tdata.Key) { case "Tension": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00") ; dr["张力均值"] = item.TensionValue.ToString("0.00"); break; case "Height": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["厚度均值"] = item.HeightValue.ToString("0.00"); break; case "Y轴方向PT值检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["Y轴方向PT值均值"] = item.PTValue.ToString("0.0000"); break; case "线宽正面": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "线宽正面").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"线宽正面{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["线宽正面均值"] = item.PTValue.ToString("0.00"); break; case "反面检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "反面检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"反面检测{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["反面检测均值"] = item.PTValue.ToString("0.00"); break; case "X轴方向PT值检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["X轴方向PT值均值"] = item.XPTValue.ToString("0.0000"); break; case "主栅连接线检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅连接线检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"主栅连接线检测值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["主栅连接线检测均值"] = item.XPTValue.ToString("0.0000"); break; case "主栅宽度检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅宽度检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"主栅宽度检测值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["主栅宽度检测均值"] = item.XPTValue.ToString("0.0000"); break; case "主栅间距": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅间距").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"主栅间距值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["主栅间距均值"] = item.XPTValue.ToString("0.0000"); break; case "细栅间距检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["细栅间距检测均值"] = item.XPTValue.ToString("0.0000"); break; case "背极宽度": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["背极宽度均值"] = item.XPTValue.ToString("0.0000"); break; } } dr["堵孔数量"] = item.DKCount; dr["脏污数量"] = item.ZWCount; dr["钢丝异常数量"] = item.GSYCCount; dr["纤维丝数量"] = item.XWSCount; dr["缺口数量"] = item.QKCount; dr["针孔数量"] = item.ZKCount; dr["泡泡数量"] = item.PPCount ; dr["划伤数量"] = item.HSCount; dr["压线数量"] = item.YXCount; dr["斜边数量"] = item.XBCount; dr["栅线数量"] = item.SXCount; dts.Rows.Add(dr);//在表的对象的行里添加此行 } //dts.DefaultView.Sort = "时间戳 desc"; //dts = dts.DefaultView.ToTable(); dataGridView1.DataSource = dts; this.dataGridView1.Columns[0].Width = 50; this.dataGridView1.Columns[1].Width = 120; for (int i = 0; i < 12; i++) { this.dataGridView1.Columns[i].Frozen = true; } return; } #endregion private void QueryData() { QueryOrderData queryOrderData = new QueryOrderData(); queryOrderData.model = "order"; queryOrderData.fields = "*"; queryOrderData.order = "id desc"; queryOrderData.pageNum = this.pageCtrl1.PageIndex; queryOrderData.pageSize = this.pageCtrl1.PageSize; queryOrderData.domain = new List(); domainItem startTime = new domainItem(); startTime.FieldName = "CreateTime"; startTime.FieldValue = dateTimePicker1.Value.ToString("yyyy-M-d"); startTime.ConditionalType = 3; queryOrderData.domain.Add(startTime); domainItem endTime = new domainItem(); endTime.FieldName = "CreateTime"; endTime.FieldValue = dateTimePicker2.Value.ToString("yyyy-M-d") + " 23:59:59"; endTime.ConditionalType = 5; queryOrderData.domain.Add(endTime); //OrderService.GetList //产品条件 if (!string.IsNullOrEmpty(cbProductCode.Text)) { domainItem ProductCode = new domainItem(); ProductCode.FieldName = "ProductId"; ProductCode.FieldValue = cbProductCode.Text; ProductCode.ConditionalType = 6; queryOrderData.domain.Add(ProductCode); } //合格条件 if (!string.IsNullOrEmpty(comboBox2.Text)) { domainItem CompareResult = new domainItem(); CompareResult.FieldName = "Qualified"; CompareResult.FieldValue = comboBox2.Text == "合格"? "1":"0"; CompareResult.ConditionalType = 0; queryOrderData.domain.Add(CompareResult); } //比对条件 if (!string.IsNullOrEmpty(comboBox1.Text)) { domainItem CompareResultOptions = new domainItem(); CompareResultOptions.FieldName = "CompareResult"; CompareResultOptions.FieldValue = comboBox1.Text == "通过" ? "1" : comboBox1.Text == "未通过" ? "2" : "0"; CompareResultOptions.ConditionalType = 0; queryOrderData.domain.Add(CompareResultOptions); } //异常条件 if (!string.IsNullOrEmpty(comboBox3.Text)) { domainItem State = new domainItem(); State.FieldName = "State"; State.FieldValue = comboBox3.Text == "修复" ? "5" : comboBox3.Text == "未修复" ? "0" : "10"; State.ConditionalType = 0; queryOrderData.domain.Add(State); } int totalcnt = 0; JObject str = JObject.Parse(JsonConvert.SerializeObject(queryOrderData)); var list = getTableList(str, out totalcnt); this.pageCtrl1.DrawControl(totalcnt); QueryOrders = list; //自动生成表格 ShowDataTableEx(list); //总数居 queryOrderData.pageNum = 0; queryOrderData.pageSize = 0; JObject str2 = JObject.Parse(JsonConvert.SerializeObject(queryOrderData)); var list2 = getTableList(str2, out totalcnt); QueryAllOrders = list2; } private void skinButton2_Click(object sender, EventArgs e) { pageCtrl1.PageIndex = 1; QueryData(); } #endregion #region 表格单击 #region 更新数据 #endregion private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "操作") { AmendantRecordFrm recordFrm = new AmendantRecordFrm(QueryOrders[Index]); recordFrm.ShowDialog(); //重新显示 QueryData(); } else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "查看") { HistoryViewFrm Frm = new HistoryViewFrm(QueryOrders[Index]); Frm.ShowDialog(); } else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "选择") { DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[Index].Cells[0]; Boolean flag = Convert.ToBoolean(checkCell.Value); if (flag == true) //查找被选择的数据行 { checkCell.Value = false; } else checkCell.Value = true; } } #endregion #region 界面调整 private void DataQueryFrm_SizeChanged(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Maximized) { this.WindowState = FormWindowState.Normal; this.Top = 0; this.Left = 0; this.Width = SystemInformation.WorkingArea.Width; this.Height = SystemInformation.WorkingArea.Height; } } #endregion #region 删除 private int delTableList(JObject req) { JObject res = new JObject(); try { string model = req.Value("model"); string domain = req.Value("domain").ToString(); //var idArr = req.Value("idList"); //List ids = new List(); //foreach (int id in idArr) ids.Add(id); int result = OrderService.DeleteList(model, domain); return 1; } catch (Exception ex) { } return 0; } private void skinButton3_Click(object sender, EventArgs e) { for (int i = 0; i < dataGridView1.Rows.Count; i++) { DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0]; Boolean flag = Convert.ToBoolean(checkCell.Value); if(flag == true) { QueryOrderData delOrderData = new QueryOrderData(); delOrderData.model = "order"; delOrderData.domain = new List(); domainItem doitem = new domainItem(); doitem.FieldName = "Id"; doitem.FieldValue = QueryOrders[i].Id.ToString(); doitem.ConditionalType = 6; delOrderData.domain.Add(doitem); JObject str = JObject.Parse(JsonConvert.SerializeObject(delOrderData)); int ret = delTableList(str); if (ret == 1) { //删除历史 QueryOrderData HistoryOrderData = new QueryOrderData(); HistoryOrderData.model = "OrderHistory"; HistoryOrderData.domain = new List(); domainItem doitem2 = new domainItem(); doitem2.FieldName = "Pid"; doitem2.FieldValue = QueryOrders[i].Id.ToString(); doitem2.ConditionalType = 6; HistoryOrderData.domain.Add(doitem2); JObject str2 = JObject.Parse(JsonConvert.SerializeObject(HistoryOrderData)); delTableList(str2); } } } //重新显示 QueryData(); } #endregion #region Excel导出 private void ShowAllDataTableEx(string filePath) { //记录数据类型列数 Dictionary dataCnt = new Dictionary(); DataTable dt = new DataTable(); //建立个数据表 //通用列 dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列 dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列 foreach (var item in QueryAllOrders) { //老流程 if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程") { //加入数据表 if (item.SizeDefectInfoList == null) item.SizeDefectInfoList = new List(); #region 张力 item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension4, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Tension", Data = item.Tension5, }); #endregion #region 厚度 item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height4, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Height", Data = item.Height5, }); #endregion #region YPT item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT5, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "Y轴方向PT值检测", Data = item.PT6, }); #endregion #region 线宽 item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth1, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth2, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth3, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth4, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth5, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth6, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth7, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth8, }); item.SizeDefectInfoList.Add(new SizeDefectInfo() { PointCode = "线宽正面", Data = item.LineWidth9, }); #endregion if (!dataCnt.ContainsKey("Tension")) dataCnt.Add("Tension", 5); else if (dataCnt["Tension"] < 5) dataCnt["Tension"] = 5; if (!dataCnt.ContainsKey("Height")) dataCnt.Add("Height", 5); else if (dataCnt["Height"] < 5) dataCnt["Height"] = 5; if (!dataCnt.ContainsKey("Y轴方向PT值检测")) dataCnt.Add("Y轴方向PT值检测", 5); else if (dataCnt["Y轴方向PT值检测"] < 5) dataCnt["Y轴方向PT值检测"] = 5; if (!dataCnt.ContainsKey("线宽正面")) dataCnt.Add("线宽正面", 9); else if (dataCnt["线宽正面"] < 9) dataCnt["线宽正面"] = 9; } else { string[] pointType = new string[11] {"Tension", "Height", "Y轴方向PT值检测" , "线宽正面" , "反面检测" , "X轴方向PT值检测","主栅连接线检测","主栅宽度检测","主栅间距","细栅间距检测","背极宽度"}; for (int i = 0; i < pointType.Length; i++) { List t = item.SizeDefectInfoList.Where(q => q.PointCode == pointType[i]).ToList(); if (t.Count > 0) { if (!dataCnt.ContainsKey(pointType[i])) dataCnt.Add(pointType[i], t.Count); else if (dataCnt[pointType[i]] < t.Count) dataCnt[pointType[i]] = t.Count; } } } } foreach (var item in dataCnt) { switch (item.Key) { case "Tension": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"张力{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("张力均值", typeof(string))); break; case "Height": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"厚度{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("厚度均值", typeof(string))); break; case "Y轴方向PT值检测": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"Y轴方向PT值{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("Y轴方向PT值均值", typeof(string))); break; case "线宽正面": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"线宽正面{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("线宽正面均值", typeof(string))); break; case "X轴方向PT值检测": for (int i = 0; i < item.Value; i++) dt.Columns.Add(new DataColumn($"X轴方向PT值{i + 1}", typeof(string))); dt.Columns.Add(new DataColumn("X轴方向PT值均值", typeof(string))); break; } } dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列 dt.Columns.Add(new DataColumn("栅线数量", typeof(int)));//在表中添加int类型的列 foreach (var item in QueryAllOrders) { //新增 DataRow dr;//行 dr = dt.NewRow(); //dr["选择"] = false; dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"); dr["检测单号"] = item.DetectOrder; dr["产品名称"] = item.ProductInfo.Name; dr["料号"] = item.ProductInfo.Code; dr["网版编码"] = item.SN; dr["批次"] = item.BatchId; dr["合格"] = item.Qualified ? "不合格" : "合格"; dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复"; dr["异常情况"] = item.Abnormalities; dr["修复人员"] = item.RepairCode; dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对"; List tempd = new List(); foreach (var tdata in dataCnt) { switch (tdata.Key) { case "Tension": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["张力均值"] = item.TensionValue.ToString("0.00"); break; case "Height": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["厚度均值"] = item.HeightValue.ToString("0.00"); break; case "Y轴方向PT值检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["Y轴方向PT值均值"] = item.PTValue.ToString("0.0000"); break; case "线宽正面": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "线宽正面").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"线宽正面{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["线宽正面均值"] = item.PTValue.ToString("0.00"); break; case "反面检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "反面检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"反面检测{i + 1}"] = tempd[i].Data.ToString("0.00"); dr["反面检测均值"] = item.PTValue.ToString("0.00"); break; case "X轴方向PT值检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["X轴方向PT值均值"] = item.XPTValue.ToString("0.0000"); break; case "主栅连接线检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅连接线检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"主栅连接线检测值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["主栅连接线检测均值"] = item.XPTValue.ToString("0.0000"); break; case "主栅宽度检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅宽度检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"主栅宽度检测值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["主栅宽度检测均值"] = item.XPTValue.ToString("0.0000"); break; case "主栅间距": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅间距").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"主栅间距值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["主栅间距均值"] = item.XPTValue.ToString("0.0000"); break; case "细栅间距检测": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["细栅间距检测均值"] = item.XPTValue.ToString("0.0000"); break; case "背极宽度": tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList(); for (int i = 0; i < tempd.Count; i++) dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000"); dr["背极宽度均值"] = item.XPTValue.ToString("0.0000"); break; } } dr["堵孔数量"] = item.DKCount; dr["脏污数量"] = item.ZWCount; dr["钢丝异常数量"] = item.GSYCCount; dr["纤维丝数量"] = item.XWSCount; dr["缺口数量"] = item.QKCount; dr["针孔数量"] = item.ZKCount; dr["泡泡数量"] = item.PPCount; dr["划伤数量"] = item.HSCount; dr["压线数量"] = item.YXCount; dr["斜边数量"] = item.XBCount; dr["栅线数量"] = item.SXCount; dt.Rows.Add(dr);//在表的对象的行里添加此行 } try { // 创建一个新的CSV文件并写入数据 using (StreamWriter writer = new StreamWriter(filePath, false, UnicodeEncoding.GetEncoding("GB2312"))) { // 写入CSV文件的标题行 for (int i = 0; i < dt.Columns.Count; i++) { writer.Write(dt.Columns[i].ColumnName + ","); } writer.Write("\r\n"); for (int i = 0; i < dt.Rows.Count; i++) { // 写入数据行 for (int j = 0; j < dt.Columns.Count; j++) { writer.Write(dt.Rows[i][j] + ","); } writer.Write("\r\n"); //Console.WriteLine("CSV文件写入成功!"); } } } catch (Exception ex) { MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } return; } private void skinButton1_Click(object sender, EventArgs e) { DataTable dt = (DataTable)dataGridView1.DataSource; if (dt.Rows.Count > 0) { SaveFileDialog fileDialog = new SaveFileDialog(); fileDialog.Filter = "数据文件(*.csv)|*.csv"; fileDialog.Title = "保存数据"; //保存对话框是否记忆上次打开的目录 fileDialog.RestoreDirectory = true; if (fileDialog.ShowDialog() == DialogResult.OK) { try { string filePath = fileDialog.FileName; // CSV文件路径 ShowAllDataTableEx(filePath); MessageBox.Show("数据导出成功!" , "完成", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } #endregion } }