版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1388 line
71 KiB

  1. using MaiMuAOI.SysCtrl;
  2. using MaiMuAOI.SysUI.ProductAndStep;
  3. using Models;
  4. using Newtonsoft.Json;
  5. using Newtonsoft.Json.Linq;
  6. using OpenCvSharp.Flann;
  7. using SqlSugar;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Data.Common;
  13. using System.Drawing;
  14. using System.Dynamic;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Runtime.InteropServices.ComTypes;
  18. using System.Runtime.Serialization;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using System.Web.Routing;
  22. using System.Web.UI.WebControls;
  23. using System.Windows.Forms;
  24. using static MaiMuControl.Form1;
  25. namespace MaiMuAOI.SysUI.DefectPicShow
  26. {
  27. public partial class DataQueryFrm : Form
  28. {
  29. Service.OrderService OrderService = new Service.OrderService();
  30. List<Order> QueryOrders = new List<Order>();
  31. List<Order> QueryAllOrders = new List<Order>();
  32. public DataQueryFrm()
  33. {
  34. InitializeComponent();
  35. UIStyle.SetUIStyle(this);
  36. this.uiTitel1.FatherForm = this;
  37. }
  38. private void DataQueryFrm_Load(object sender, EventArgs e)
  39. {
  40. LoadPdtList(SysMgr.Instance.ProductCodeList);
  41. //激活OnPageChanged事件
  42. pageCtrl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
  43. }
  44. #region 切页
  45. /// <summary>
  46. /// 页数变化时调用绑定数据方法
  47. /// </summary>
  48. /// <param name="sender"></param>
  49. /// <param name="e"></param>
  50. private void pagerControl1_OnPageChanged(object sender, EventArgs e)
  51. {
  52. QueryData();
  53. }
  54. #endregion
  55. #region 加载料号
  56. private string[] pdtlistData;
  57. private void LoadPdtList(List<string> list)
  58. {
  59. this.cbProductCode.Items.Clear();
  60. this.pdtlistData = list.ToArray();
  61. cbProductCode.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些
  62. cbProductCode.TextUpdate += cobList_TextUpdate;//重新绑定事件
  63. cbProductCode.KeyDown += CobList_KeyDown;
  64. this.cbProductCode.Text = "";
  65. cbProductCode.Focus();
  66. cbProductCode.SelectAll();
  67. }
  68. private void CobList_KeyDown(object sender, KeyEventArgs e)
  69. {
  70. ComboBox ctrl = sender as ComboBox;
  71. if (e.KeyCode == Keys.Enter)
  72. {
  73. if (ctrl.Items.Count == 1)
  74. ctrl.Text = ctrl.Items[0].ToString();
  75. }
  76. }
  77. private void cobList_TextUpdate(object sender, EventArgs e)
  78. {
  79. ComboBox ctrl = sender as ComboBox;
  80. if (ctrl.Text != null)
  81. {
  82. string str = ctrl.Text; //获取cb_material控件输入内
  83. //清空combobox
  84. ctrl.DataSource = null;
  85. ctrl.Items.Clear();
  86. string[] workOrderFiltered;
  87. workOrderFiltered = pdtlistData.Where(x => x.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();//忽略大小写
  88. ctrl.Items.AddRange(workOrderFiltered);//比使用DataSource速度要快一些
  89. // 不存在符合条件时
  90. //设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  91. ctrl.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
  92. if (workOrderFiltered.Length > 0)
  93. {
  94. if (!ctrl.DroppedDown)
  95. ctrl.DroppedDown = true; // 自动弹出下拉框
  96. }
  97. ctrl.SelectionStart = str.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  98. }
  99. }
  100. #endregion
  101. #region 查询数据
  102. #region 数据库查询
  103. private class domainItem
  104. {
  105. public string FieldName { get; set; }
  106. public string FieldValue { get; set; }
  107. public int ConditionalType { get; set; }
  108. }
  109. private class QueryOrderData
  110. {
  111. public string model { get; set; }
  112. public string fields { get; set; }
  113. public List<domainItem> domain { get; set; }
  114. public string order { get; set; }
  115. public int pageNum { get; set; }
  116. public int pageSize { get; set; }
  117. }
  118. private List<Order> getTableList(JObject req, out int TotalCnt)
  119. {
  120. try
  121. {
  122. string model, fields = "", domain = "", order = "";
  123. int pageNum = 0, pageSize = 0, totalCount = 0;
  124. model = req.Value<string>("model");
  125. if (req.ContainsKey("fields")) fields = req.Value<string>("fields");
  126. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  127. if (req.ContainsKey("order")) order = req.Value<string>("order");
  128. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  129. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  130. //创建表达式
  131. var exp1 = Expressionable.Create<Order>()
  132. //.AndIF((int)cobProductList.SelectedValue > 0, it => it.ProductId == (int)cobProductList.SelectedValue)
  133. //.AndIF((int)cobStepList.SelectedValue > 0, it => it.StepId == (int)cobStepList.SelectedValue)
  134. //.AndIF(dateTimePicker1.Checked, it => it.CreateTime >= dateTimePicker1.Value)
  135. //.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value)
  136. .ToExpression();//注意 这一句 不能少
  137. var list = OrderService.GetListEx(fields, domain, order, pageNum, pageSize, ref totalCount);
  138. TotalCnt = totalCount;
  139. //var list = svcOrder.GetListNav(pageNum, pageSize, ref totalCount, exp1);
  140. return list;
  141. }
  142. catch (Exception ex)
  143. {
  144. ;
  145. }
  146. TotalCnt = 0;
  147. return null;
  148. }
  149. #endregion
  150. #region 新老流程数据分析
  151. private void ShowDataTableEx(List<Order> list)
  152. {
  153. dataGridView1.Columns.Clear();
  154. //记录数据类型列数
  155. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  156. DataTable dt = new DataTable(); //建立个数据表
  157. //通用列
  158. DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
  159. chk.Name = "Select";
  160. chk.HeaderText = "选择";
  161. dataGridView1.Columns.Add(chk);
  162. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  163. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  164. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  165. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  166. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  167. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  168. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  169. dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  170. dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  171. dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  172. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  173. foreach(var item in list)
  174. {
  175. //老流程
  176. if(item.StepInfo == null ||item.StepInfo.ProcessType != "快速流程")
  177. {
  178. //加入数据表
  179. if(item.SizeDefectInfoList == null)
  180. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  181. #region 张力
  182. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  183. {
  184. PointCode = "Tension",
  185. Data = item.Tension1,
  186. });
  187. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  188. {
  189. PointCode = "Tension",
  190. Data = item.Tension2,
  191. });
  192. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  193. {
  194. PointCode = "Tension",
  195. Data = item.Tension3,
  196. });
  197. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  198. {
  199. PointCode = "Tension",
  200. Data = item.Tension4,
  201. });
  202. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  203. {
  204. PointCode = "Tension",
  205. Data = item.Tension5,
  206. });
  207. #endregion
  208. #region 厚度
  209. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  210. {
  211. PointCode = "Height",
  212. Data = item.Height1,
  213. });
  214. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  215. {
  216. PointCode = "Height",
  217. Data = item.Height2,
  218. });
  219. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  220. {
  221. PointCode = "Height",
  222. Data = item.Height3,
  223. });
  224. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  225. {
  226. PointCode = "Height",
  227. Data = item.Height4,
  228. });
  229. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  230. {
  231. PointCode = "Height",
  232. Data = item.Height5,
  233. });
  234. #endregion
  235. #region YPT
  236. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  237. {
  238. PointCode = "Y轴方向PT值检测",
  239. Data = item.PT1,
  240. });
  241. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  242. {
  243. PointCode = "Y轴方向PT值检测",
  244. Data = item.PT2,
  245. });
  246. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  247. {
  248. PointCode = "Y轴方向PT值检测",
  249. Data = item.PT3,
  250. });
  251. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  252. {
  253. PointCode = "Y轴方向PT值检测",
  254. Data = item.PT5,
  255. });
  256. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  257. {
  258. PointCode = "Y轴方向PT值检测",
  259. Data = item.PT6,
  260. });
  261. #endregion
  262. #region 线宽
  263. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  264. {
  265. PointCode = "线宽正面",
  266. Data = item.LineWidth1,
  267. });
  268. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  269. {
  270. PointCode = "线宽正面",
  271. Data = item.LineWidth2,
  272. });
  273. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  274. {
  275. PointCode = "线宽正面",
  276. Data = item.LineWidth3,
  277. });
  278. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  279. {
  280. PointCode = "线宽正面",
  281. Data = item.LineWidth4,
  282. });
  283. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  284. {
  285. PointCode = "线宽正面",
  286. Data = item.LineWidth5,
  287. });
  288. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  289. {
  290. PointCode = "线宽正面",
  291. Data = item.LineWidth6,
  292. });
  293. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  294. {
  295. PointCode = "线宽正面",
  296. Data = item.LineWidth7,
  297. });
  298. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  299. {
  300. PointCode = "线宽正面",
  301. Data = item.LineWidth8,
  302. });
  303. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  304. {
  305. PointCode = "线宽正面",
  306. Data = item.LineWidth9,
  307. });
  308. #endregion
  309. if (!dataCnt.ContainsKey("Tension"))
  310. dataCnt.Add("Tension", 5);
  311. else
  312. if (dataCnt["Tension"] < 5)
  313. dataCnt["Tension"] = 5;
  314. if (!dataCnt.ContainsKey("Height"))
  315. dataCnt.Add("Height", 5);
  316. else
  317. if (dataCnt["Height"] < 5)
  318. dataCnt["Height"] = 5;
  319. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  320. dataCnt.Add("Y轴方向PT值检测", 5);
  321. else
  322. if (dataCnt["Y轴方向PT值检测"] < 5)
  323. dataCnt["Y轴方向PT值检测"] = 5;
  324. if (!dataCnt.ContainsKey("线宽正面"))
  325. dataCnt.Add("线宽正面", 9);
  326. else
  327. if (dataCnt["线宽正面"] < 9)
  328. dataCnt["线宽正面"] = 9;
  329. }
  330. else
  331. {
  332. string[] pointType = new string[17] {"Tension", "Height", "Y轴方向PT值检测" , "线宽正面" , "反面检测" ,
  333. "X轴方向PT值检测","主栅连接线检测","主栅宽度检测","主栅间距","细栅间距检测","背极宽度",
  334. "主栅长度检测","Mark点横向间距","Mark点竖向间距","鱼叉口长","鱼叉口宽","鱼叉口间距"};
  335. for (int i = 0; i < pointType.Length; i++)
  336. {
  337. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.PointCode == pointType[i]).ToList();
  338. if (t.Count > 0)
  339. {
  340. if (!dataCnt.ContainsKey(pointType[i]))
  341. dataCnt.Add(pointType[i], t.Count);
  342. else
  343. if (dataCnt[pointType[i]] < t.Count)
  344. dataCnt[pointType[i]] = t.Count;
  345. }
  346. }
  347. }
  348. }
  349. foreach (var item in dataCnt)
  350. {
  351. switch(item.Key)
  352. {
  353. case "Tension":
  354. for (int i = 0; i < item.Value; i++)
  355. dt.Columns.Add(new DataColumn($"张力{i+1}", typeof(string)));
  356. dt.Columns.Add(new DataColumn("张力均值", typeof(string)));
  357. break;
  358. case "Height":
  359. for (int i = 0; i < item.Value; i++)
  360. dt.Columns.Add(new DataColumn($"厚度{i + 1}", typeof(string)));
  361. dt.Columns.Add(new DataColumn("厚度均值", typeof(string)));
  362. break;
  363. case "Y轴方向PT值检测":
  364. for (int i = 0; i < item.Value; i++)
  365. dt.Columns.Add(new DataColumn($"Y轴方向PT值{i + 1}", typeof(string)));
  366. dt.Columns.Add(new DataColumn("Y轴方向PT值均值", typeof(string)));
  367. break;
  368. case "线宽正面":
  369. for (int i = 0; i < item.Value; i++)
  370. dt.Columns.Add(new DataColumn($"线宽正面{i + 1}", typeof(string)));
  371. dt.Columns.Add(new DataColumn("线宽正面均值", typeof(string)));
  372. break;
  373. case "反面检测":
  374. for (int i = 0; i < item.Value; i++)
  375. dt.Columns.Add(new DataColumn($"反面检测{i + 1}", typeof(string)));
  376. dt.Columns.Add(new DataColumn("反面检测均值", typeof(string)));
  377. break;
  378. case "X轴方向PT值检测":
  379. for (int i = 0; i < item.Value; i++)
  380. dt.Columns.Add(new DataColumn($"X轴方向PT值{i + 1}", typeof(string)));
  381. dt.Columns.Add(new DataColumn("X轴方向PT值均值", typeof(string)));
  382. break;
  383. case "主栅连接线检测":
  384. for (int i = 0; i < item.Value; i++)
  385. dt.Columns.Add(new DataColumn($"主栅连接线检测值{i + 1}", typeof(string)));
  386. dt.Columns.Add(new DataColumn("主栅连接线检测均值", typeof(string)));
  387. break;
  388. case "主栅宽度检测":
  389. for (int i = 0; i < item.Value; i++)
  390. dt.Columns.Add(new DataColumn($"主栅宽度检测值{i + 1}", typeof(string)));
  391. dt.Columns.Add(new DataColumn("主栅宽度检测均值", typeof(string)));
  392. break;
  393. case "主栅间距":
  394. for (int i = 0; i < item.Value; i++)
  395. dt.Columns.Add(new DataColumn($"主栅间距值{i + 1}", typeof(string)));
  396. dt.Columns.Add(new DataColumn("主栅间距均值", typeof(string)));
  397. break;
  398. case "细栅间距检测":
  399. for (int i = 0; i < item.Value; i++)
  400. dt.Columns.Add(new DataColumn($"细栅间距检测值{i + 1}", typeof(string)));
  401. dt.Columns.Add(new DataColumn("细栅间距检测均值", typeof(string)));
  402. break;
  403. case "背极宽度":
  404. for (int i = 0; i < item.Value; i++)
  405. dt.Columns.Add(new DataColumn($"背极宽度值{i + 1}", typeof(string)));
  406. dt.Columns.Add(new DataColumn("背极宽度均值", typeof(string)));
  407. break;
  408. case "主栅长度检测":
  409. for (int i = 0; i < item.Value; i++)
  410. dt.Columns.Add(new DataColumn($"主栅长度检测{i + 1}", typeof(string)));
  411. dt.Columns.Add(new DataColumn("主栅长度检测均值", typeof(string)));
  412. break;
  413. case "Mark点横向间距":
  414. for (int i = 0; i < item.Value; i++)
  415. dt.Columns.Add(new DataColumn($"Mark点横向间距{i + 1}", typeof(string)));
  416. dt.Columns.Add(new DataColumn("Mark点横向间距均值", typeof(string)));
  417. break;
  418. case "Mark点竖向间距":
  419. for (int i = 0; i < item.Value; i++)
  420. dt.Columns.Add(new DataColumn($"Mark点竖向间距{i + 1}", typeof(string)));
  421. dt.Columns.Add(new DataColumn("Mark点竖向间距均值", typeof(string)));
  422. break;
  423. case "鱼叉口长":
  424. for (int i = 0; i < item.Value; i++)
  425. dt.Columns.Add(new DataColumn($"鱼叉口长{i + 1}", typeof(string)));
  426. dt.Columns.Add(new DataColumn("鱼叉口长均值", typeof(string)));
  427. break;
  428. case "鱼叉口宽":
  429. for (int i = 0; i < item.Value; i++)
  430. dt.Columns.Add(new DataColumn($"鱼叉口宽{i + 1}", typeof(string)));
  431. dt.Columns.Add(new DataColumn("鱼叉口宽均值", typeof(string)));
  432. break;
  433. case "鱼叉口间距":
  434. for (int i = 0; i < item.Value; i++)
  435. dt.Columns.Add(new DataColumn($"鱼叉口间距{i + 1}", typeof(string)));
  436. dt.Columns.Add(new DataColumn("鱼叉口间距均值", typeof(string)));
  437. break;
  438. }
  439. }
  440. dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列
  441. dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列
  442. dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列
  443. dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列
  444. dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列
  445. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  446. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  447. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  448. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  449. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  450. dt.Columns.Add(new DataColumn("栅线数量", typeof(int)));//在表中添加int类型的列
  451. dataGridView1.DataSource = dt;
  452. //在datagridview中添加button按钮
  453. DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
  454. btn.Name = "Modify";
  455. btn.HeaderText = "操作";
  456. btn.DefaultCellStyle.NullValue = "修改";
  457. dataGridView1.Columns.Add(btn);
  458. DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
  459. btn2.Name = "HistoryView";
  460. btn2.HeaderText = "查看";
  461. btn2.DefaultCellStyle.NullValue = "历史";
  462. dataGridView1.Columns.Add(btn2);
  463. DataGridViewButtonColumn btn3 = new DataGridViewButtonColumn();
  464. btn3.Name = "Distribution";
  465. btn3.HeaderText = "缺陷分布";
  466. btn3.DefaultCellStyle.NullValue = "分布";
  467. dataGridView1.Columns.Add(btn3);
  468. DataTable dts = (DataTable)dataGridView1.DataSource;
  469. dts.Clear();
  470. foreach (var item in list)
  471. {
  472. //新增
  473. DataRow dr;//行
  474. dr = dts.NewRow();
  475. //dr["选择"] = false;
  476. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  477. dr["检测单号"] = item.DetectOrder;
  478. dr["产品名称"] = item.ProductInfo.Name;
  479. dr["料号"] = item.ProductInfo.Code;
  480. dr["网版编码"] = item.SN;
  481. dr["批次"] = item.BatchId;
  482. dr["合格"] = item.Qualified ? "合格": "不合格";
  483. dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  484. dr["异常情况"] = item.Abnormalities;
  485. dr["修复人员"] = item.RepairCode;
  486. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  487. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  488. foreach (var tdata in dataCnt)
  489. {
  490. switch (tdata.Key)
  491. {
  492. case "Tension":
  493. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList();
  494. for (int i = 0; i < tempd.Count; i++)
  495. dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00") ;
  496. dr["张力均值"] = item.TensionValue.ToString("0.00");
  497. break;
  498. case "Height":
  499. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList();
  500. for (int i = 0; i < tempd.Count; i++)
  501. dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00");
  502. dr["厚度均值"] = item.HeightValue.ToString("0.00");
  503. break;
  504. case "Y轴方向PT值检测":
  505. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList();
  506. for (int i = 0; i < tempd.Count; i++)
  507. dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  508. dr["Y轴方向PT值均值"] = item.PTValue.ToString("0.0000");
  509. break;
  510. case "线宽正面":
  511. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "线宽正面").ToList();
  512. for (int i = 0; i < tempd.Count; i++)
  513. dr[$"线宽正面{i + 1}"] = tempd[i].Data.ToString("0.00");
  514. dr["线宽正面均值"] = item.LineWidthValue.ToString("0.00");
  515. break;
  516. case "反面检测":
  517. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "反面检测").ToList();
  518. for (int i = 0; i < tempd.Count; i++)
  519. dr[$"反面检测{i + 1}"] = tempd[i].Data.ToString("0.00");
  520. dr["反面检测均值"] = item.FLineWidthValue.ToString("0.00");
  521. break;
  522. case "X轴方向PT值检测":
  523. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList();
  524. for (int i = 0; i < tempd.Count; i++)
  525. dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  526. dr["X轴方向PT值均值"] = item.XPTValue.ToString("0.0000");
  527. break;
  528. case "主栅连接线检测":
  529. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅连接线检测").ToList();
  530. for (int i = 0; i < tempd.Count; i++)
  531. dr[$"主栅连接线检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  532. dr["主栅连接线检测均值"] = item.MGridIntervalValue.ToString("0.0000");
  533. break;
  534. case "主栅宽度检测":
  535. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅宽度检测").ToList();
  536. for (int i = 0; i < tempd.Count; i++)
  537. dr[$"主栅宽度检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  538. dr["主栅宽度检测均值"] = item.MGridWidthValue.ToString("0.0000");
  539. break;
  540. case "主栅间距":
  541. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅间距").ToList();
  542. for (int i = 0; i < tempd.Count; i++)
  543. dr[$"主栅间距值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  544. dr["主栅间距均值"] = item.MGridSpreadValue.ToString("0.0000");
  545. break;
  546. case "细栅间距检测":
  547. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList();
  548. for (int i = 0; i < tempd.Count; i++)
  549. dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  550. dr["细栅间距检测均值"] = item.FGridSpreadValue.ToString("0.0000");
  551. break;
  552. case "背极宽度":
  553. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList();
  554. for (int i = 0; i < tempd.Count; i++)
  555. dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  556. dr["背极宽度均值"] = item.BackPoleWidthValue.ToString("0.0000");
  557. break;
  558. case "主栅长度检测":
  559. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅长度检测").ToList();
  560. for (int i = 0; i < tempd.Count; i++)
  561. dr[$"主栅长度检测{i + 1}"] = tempd[i].Data.ToString("0.0000");
  562. dr["主栅长度检测均值"] = item.MGridLengthValue.ToString("0.0000");
  563. break;
  564. case "Mark点横向间距":
  565. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点横向间距").ToList();
  566. for (int i = 0; i < tempd.Count; i++)
  567. dr[$"Mark点横向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  568. dr["Mark点横向间距均值"] = item.MarkXDisValue.ToString("0.0000");
  569. break;
  570. case "Mark点竖向间距":
  571. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点竖向间距").ToList();
  572. for (int i = 0; i < tempd.Count; i++)
  573. dr[$"Mark点竖向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  574. dr["Mark点竖向间距均值"] = item.MarkYDisValue.ToString("0.0000");
  575. break;
  576. case "鱼叉口长":
  577. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口长").ToList();
  578. for (int i = 0; i < tempd.Count; i++)
  579. dr[$"鱼叉口长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  580. dr["鱼叉口长均值"] = item.ForkLengthValue.ToString("0.0000");
  581. break;
  582. case "鱼叉口宽":
  583. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口宽").ToList();
  584. for (int i = 0; i < tempd.Count; i++)
  585. dr[$"鱼叉口宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  586. dr["鱼叉口宽均值"] = item.ForkWidthValue.ToString("0.0000");
  587. break;
  588. case "鱼叉口间距":
  589. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口间距").ToList();
  590. for (int i = 0; i < tempd.Count; i++)
  591. dr[$"鱼叉口间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  592. dr["鱼叉口间距均值"] = item.ForkDisValue.ToString("0.0000");
  593. break;
  594. }
  595. }
  596. dr["堵孔数量"] = item.DKCount;
  597. dr["脏污数量"] = item.ZWCount;
  598. dr["钢丝异常数量"] = item.GSYCCount;
  599. dr["纤维丝数量"] = item.XWSCount;
  600. dr["缺口数量"] = item.QKCount;
  601. dr["针孔数量"] = item.ZKCount;
  602. dr["泡泡数量"] = item.PPCount ;
  603. dr["划伤数量"] = item.HSCount;
  604. dr["压线数量"] = item.YXCount;
  605. dr["斜边数量"] = item.XBCount;
  606. dr["栅线数量"] = item.SXCount;
  607. dts.Rows.Add(dr);//在表的对象的行里添加此行
  608. }
  609. //dts.DefaultView.Sort = "时间戳 desc";
  610. //dts = dts.DefaultView.ToTable();
  611. dataGridView1.DataSource = dts;
  612. this.dataGridView1.Columns[0].Width = 50;
  613. this.dataGridView1.Columns[1].Width = 120;
  614. for (int i = 0; i < 12; i++)
  615. {
  616. this.dataGridView1.Columns[i].Frozen = true;
  617. }
  618. return;
  619. }
  620. #endregion
  621. private void QueryData()
  622. {
  623. QueryOrderData queryOrderData = new QueryOrderData();
  624. queryOrderData.model = "order";
  625. queryOrderData.fields = "*";
  626. queryOrderData.order = "id desc";
  627. queryOrderData.pageNum = this.pageCtrl1.PageIndex;
  628. queryOrderData.pageSize = this.pageCtrl1.PageSize;
  629. queryOrderData.domain = new List<domainItem>();
  630. domainItem startTime = new domainItem();
  631. startTime.FieldName = "CreateTime";
  632. startTime.FieldValue = dateTimePicker1.Value.ToString("yyyy-M-d");
  633. startTime.ConditionalType = 3;
  634. queryOrderData.domain.Add(startTime);
  635. domainItem endTime = new domainItem();
  636. endTime.FieldName = "CreateTime";
  637. endTime.FieldValue = dateTimePicker2.Value.ToString("yyyy-M-d") + " 23:59:59";
  638. endTime.ConditionalType = 5;
  639. queryOrderData.domain.Add(endTime);
  640. //OrderService.GetList
  641. //产品条件
  642. if (!string.IsNullOrEmpty(cbProductCode.Text))
  643. {
  644. domainItem ProductCode = new domainItem();
  645. ProductCode.FieldName = "ProductId";
  646. ProductCode.FieldValue = SysMgr.Instance.ProductIdList[cbProductCode.SelectedIndex].ToString();
  647. ProductCode.ConditionalType = 6;
  648. queryOrderData.domain.Add(ProductCode);
  649. }
  650. //合格条件
  651. if (!string.IsNullOrEmpty(comboBox2.Text))
  652. {
  653. domainItem CompareResult = new domainItem();
  654. CompareResult.FieldName = "Qualified";
  655. CompareResult.FieldValue = comboBox2.Text == "合格"? "1":"0";
  656. CompareResult.ConditionalType = 0;
  657. queryOrderData.domain.Add(CompareResult);
  658. }
  659. //比对条件
  660. if (!string.IsNullOrEmpty(comboBox1.Text))
  661. {
  662. domainItem CompareResultOptions = new domainItem();
  663. CompareResultOptions.FieldName = "CompareResult";
  664. CompareResultOptions.FieldValue = comboBox1.Text == "通过" ? "1" : comboBox1.Text == "未通过" ? "2" : "0";
  665. CompareResultOptions.ConditionalType = 0;
  666. queryOrderData.domain.Add(CompareResultOptions);
  667. }
  668. //异常条件
  669. if (!string.IsNullOrEmpty(comboBox3.Text))
  670. {
  671. domainItem State = new domainItem();
  672. State.FieldName = "State";
  673. State.FieldValue = comboBox3.Text == "修复" ? "5" : comboBox3.Text == "未修复" ? "0" : "10";
  674. State.ConditionalType = 0;
  675. queryOrderData.domain.Add(State);
  676. }
  677. int totalcnt = 0;
  678. JObject str = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  679. var list = getTableList(str, out totalcnt);
  680. this.pageCtrl1.DrawControl(totalcnt);
  681. QueryOrders = list;
  682. //自动生成表格
  683. ShowDataTableEx(list);
  684. //总数居
  685. queryOrderData.pageNum = 0;
  686. queryOrderData.pageSize = 0;
  687. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(queryOrderData));
  688. var list2 = getTableList(str2, out totalcnt);
  689. QueryAllOrders = list2;
  690. }
  691. private void skinButton2_Click(object sender, EventArgs e)
  692. {
  693. pageCtrl1.PageIndex = 1;
  694. QueryData();
  695. }
  696. #endregion
  697. #region 表格单击
  698. #region 更新数据
  699. #endregion
  700. private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  701. {
  702. int Index = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引
  703. if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "操作")
  704. {
  705. //修改数据
  706. AmendantRecordFrm recordFrm = new AmendantRecordFrm(QueryOrders[Index]);
  707. recordFrm.ShowDialog();
  708. //重新显示
  709. QueryData();
  710. }
  711. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "查看")
  712. {
  713. //查看历史
  714. HistoryViewFrm Frm = new HistoryViewFrm(QueryOrders[Index]);
  715. Frm.ShowDialog();
  716. }
  717. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "缺陷分布")
  718. {
  719. //缺陷分布
  720. DistributionFrm Frm = new DistributionFrm(QueryOrders[Index]);
  721. Frm.WindowState = FormWindowState.Maximized;
  722. Frm.ShowDialog();
  723. }
  724. else if (Index < this.dataGridView1.Rows.Count && this.dataGridView1.Columns[this.dataGridView1.CurrentCell.ColumnIndex].HeaderText.ToString() == "选择")
  725. {
  726. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[Index].Cells[0];
  727. Boolean flag = Convert.ToBoolean(checkCell.Value);
  728. if (flag == true) //查找被选择的数据行
  729. {
  730. checkCell.Value = false;
  731. }
  732. else
  733. checkCell.Value = true;
  734. }
  735. }
  736. #endregion
  737. #region 界面调整
  738. private void DataQueryFrm_SizeChanged(object sender, EventArgs e)
  739. {
  740. if (this.WindowState == FormWindowState.Maximized)
  741. {
  742. this.WindowState = FormWindowState.Normal;
  743. this.Top = 0;
  744. this.Left = 0;
  745. this.Width = SystemInformation.WorkingArea.Width;
  746. this.Height = SystemInformation.WorkingArea.Height;
  747. }
  748. }
  749. #endregion
  750. #region 删除
  751. private int delTableList(JObject req)
  752. {
  753. JObject res = new JObject();
  754. try
  755. {
  756. string model = req.Value<string>("model");
  757. string domain = req.Value<JArray>("domain").ToString();
  758. //var idArr = req.Value<JArray>("idList");
  759. //List<int> ids = new List<int>();
  760. //foreach (int id in idArr) ids.Add(id);
  761. int result = OrderService.DeleteList(model, domain);
  762. return 1;
  763. }
  764. catch (Exception ex)
  765. {
  766. }
  767. return 0;
  768. }
  769. private void skinButton3_Click(object sender, EventArgs e)
  770. {
  771. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  772. {
  773. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0];
  774. Boolean flag = Convert.ToBoolean(checkCell.Value);
  775. if(flag == true)
  776. {
  777. QueryOrderData delOrderData = new QueryOrderData();
  778. delOrderData.model = "order";
  779. delOrderData.domain = new List<domainItem>();
  780. domainItem doitem = new domainItem();
  781. doitem.FieldName = "Id";
  782. doitem.FieldValue = QueryOrders[i].Id.ToString();
  783. doitem.ConditionalType = 6;
  784. delOrderData.domain.Add(doitem);
  785. JObject str = JObject.Parse(JsonConvert.SerializeObject(delOrderData));
  786. int ret = delTableList(str);
  787. if (ret == 1)
  788. {
  789. //删除历史
  790. QueryOrderData HistoryOrderData = new QueryOrderData();
  791. HistoryOrderData.model = "OrderHistory";
  792. HistoryOrderData.domain = new List<domainItem>();
  793. domainItem doitem2 = new domainItem();
  794. doitem2.FieldName = "Pid";
  795. doitem2.FieldValue = QueryOrders[i].Id.ToString();
  796. doitem2.ConditionalType = 6;
  797. HistoryOrderData.domain.Add(doitem2);
  798. JObject str2 = JObject.Parse(JsonConvert.SerializeObject(HistoryOrderData));
  799. delTableList(str2);
  800. }
  801. }
  802. }
  803. //重新显示
  804. QueryData();
  805. }
  806. #endregion
  807. #region Excel导出
  808. private void ShowAllDataTableEx(string filePath)
  809. {
  810. //记录数据类型列数
  811. Dictionary<string, int> dataCnt = new Dictionary<string, int>();
  812. DataTable dt = new DataTable(); //建立个数据表
  813. //通用列
  814. dt.Columns.Add(new DataColumn("检验日期", typeof(string)));//在表中添加string类型的列
  815. dt.Columns.Add(new DataColumn("检测单号", typeof(string)));//在表中添加string类型的列
  816. dt.Columns.Add(new DataColumn("产品名称", typeof(string)));//在表中添加string类型的列
  817. dt.Columns.Add(new DataColumn("料号", typeof(string)));//在表中添加string类型的列
  818. dt.Columns.Add(new DataColumn("网版编码", typeof(string)));//在表中添加string类型的列
  819. dt.Columns.Add(new DataColumn("批次", typeof(string)));//在表中添加string类型的列
  820. dt.Columns.Add(new DataColumn("合格", typeof(string)));//在表中添加string类型的列
  821. dt.Columns.Add(new DataColumn("修复", typeof(string)));//在表中添加string类型的列
  822. dt.Columns.Add(new DataColumn("异常情况", typeof(string)));//在表中添加string类型的列
  823. dt.Columns.Add(new DataColumn("修复人员", typeof(string)));//在表中添加string类型的列
  824. dt.Columns.Add(new DataColumn("比对", typeof(string)));//在表中添加string类型的列
  825. foreach (var item in QueryAllOrders)
  826. {
  827. //老流程
  828. if (item.StepInfo == null || item.StepInfo.ProcessType != "快速流程")
  829. {
  830. //加入数据表
  831. if (item.SizeDefectInfoList == null)
  832. item.SizeDefectInfoList = new List<SizeDefectInfo>();
  833. #region 张力
  834. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  835. {
  836. PointCode = "Tension",
  837. Data = item.Tension1,
  838. });
  839. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  840. {
  841. PointCode = "Tension",
  842. Data = item.Tension2,
  843. });
  844. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  845. {
  846. PointCode = "Tension",
  847. Data = item.Tension3,
  848. });
  849. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  850. {
  851. PointCode = "Tension",
  852. Data = item.Tension4,
  853. });
  854. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  855. {
  856. PointCode = "Tension",
  857. Data = item.Tension5,
  858. });
  859. #endregion
  860. #region 厚度
  861. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  862. {
  863. PointCode = "Height",
  864. Data = item.Height1,
  865. });
  866. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  867. {
  868. PointCode = "Height",
  869. Data = item.Height2,
  870. });
  871. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  872. {
  873. PointCode = "Height",
  874. Data = item.Height3,
  875. });
  876. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  877. {
  878. PointCode = "Height",
  879. Data = item.Height4,
  880. });
  881. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  882. {
  883. PointCode = "Height",
  884. Data = item.Height5,
  885. });
  886. #endregion
  887. #region YPT
  888. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  889. {
  890. PointCode = "Y轴方向PT值检测",
  891. Data = item.PT1,
  892. });
  893. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  894. {
  895. PointCode = "Y轴方向PT值检测",
  896. Data = item.PT2,
  897. });
  898. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  899. {
  900. PointCode = "Y轴方向PT值检测",
  901. Data = item.PT3,
  902. });
  903. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  904. {
  905. PointCode = "Y轴方向PT值检测",
  906. Data = item.PT5,
  907. });
  908. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  909. {
  910. PointCode = "Y轴方向PT值检测",
  911. Data = item.PT6,
  912. });
  913. #endregion
  914. #region 线宽
  915. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  916. {
  917. PointCode = "线宽正面",
  918. Data = item.LineWidth1,
  919. });
  920. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  921. {
  922. PointCode = "线宽正面",
  923. Data = item.LineWidth2,
  924. });
  925. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  926. {
  927. PointCode = "线宽正面",
  928. Data = item.LineWidth3,
  929. });
  930. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  931. {
  932. PointCode = "线宽正面",
  933. Data = item.LineWidth4,
  934. });
  935. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  936. {
  937. PointCode = "线宽正面",
  938. Data = item.LineWidth5,
  939. });
  940. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  941. {
  942. PointCode = "线宽正面",
  943. Data = item.LineWidth6,
  944. });
  945. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  946. {
  947. PointCode = "线宽正面",
  948. Data = item.LineWidth7,
  949. });
  950. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  951. {
  952. PointCode = "线宽正面",
  953. Data = item.LineWidth8,
  954. });
  955. item.SizeDefectInfoList.Add(new SizeDefectInfo()
  956. {
  957. PointCode = "线宽正面",
  958. Data = item.LineWidth9,
  959. });
  960. #endregion
  961. if (!dataCnt.ContainsKey("Tension"))
  962. dataCnt.Add("Tension", 5);
  963. else
  964. if (dataCnt["Tension"] < 5)
  965. dataCnt["Tension"] = 5;
  966. if (!dataCnt.ContainsKey("Height"))
  967. dataCnt.Add("Height", 5);
  968. else
  969. if (dataCnt["Height"] < 5)
  970. dataCnt["Height"] = 5;
  971. if (!dataCnt.ContainsKey("Y轴方向PT值检测"))
  972. dataCnt.Add("Y轴方向PT值检测", 5);
  973. else
  974. if (dataCnt["Y轴方向PT值检测"] < 5)
  975. dataCnt["Y轴方向PT值检测"] = 5;
  976. if (!dataCnt.ContainsKey("线宽正面"))
  977. dataCnt.Add("线宽正面", 9);
  978. else
  979. if (dataCnt["线宽正面"] < 9)
  980. dataCnt["线宽正面"] = 9;
  981. }
  982. else
  983. {
  984. string[] pointType = new string[17] {"Tension", "Height", "Y轴方向PT值检测" , "线宽正面" , "反面检测" ,
  985. "X轴方向PT值检测","主栅连接线检测","主栅宽度检测","主栅间距","细栅间距检测","背极宽度",
  986. "主栅长度检测","Mark点横向间距","Mark点竖向间距","鱼叉口长","鱼叉口宽","鱼叉口间距"};
  987. for (int i = 0; i < pointType.Length; i++)
  988. {
  989. List<SizeDefectInfo> t = item.SizeDefectInfoList.Where(q => q.PointCode == pointType[i]).ToList();
  990. if (t.Count > 0)
  991. {
  992. if (!dataCnt.ContainsKey(pointType[i]))
  993. dataCnt.Add(pointType[i], t.Count);
  994. else
  995. if (dataCnt[pointType[i]] < t.Count)
  996. dataCnt[pointType[i]] = t.Count;
  997. }
  998. }
  999. }
  1000. }
  1001. foreach (var item in dataCnt)
  1002. {
  1003. switch (item.Key)
  1004. {
  1005. case "Tension":
  1006. for (int i = 0; i < item.Value; i++)
  1007. dt.Columns.Add(new DataColumn($"张力{i + 1}", typeof(string)));
  1008. dt.Columns.Add(new DataColumn("张力均值", typeof(string)));
  1009. break;
  1010. case "Height":
  1011. for (int i = 0; i < item.Value; i++)
  1012. dt.Columns.Add(new DataColumn($"厚度{i + 1}", typeof(string)));
  1013. dt.Columns.Add(new DataColumn("厚度均值", typeof(string)));
  1014. break;
  1015. case "Y轴方向PT值检测":
  1016. for (int i = 0; i < item.Value; i++)
  1017. dt.Columns.Add(new DataColumn($"Y轴方向PT值{i + 1}", typeof(string)));
  1018. dt.Columns.Add(new DataColumn("Y轴方向PT值均值", typeof(string)));
  1019. break;
  1020. case "线宽正面":
  1021. for (int i = 0; i < item.Value; i++)
  1022. dt.Columns.Add(new DataColumn($"线宽正面{i + 1}", typeof(string)));
  1023. dt.Columns.Add(new DataColumn("线宽正面均值", typeof(string)));
  1024. break;
  1025. case "反面检测":
  1026. for (int i = 0; i < item.Value; i++)
  1027. dt.Columns.Add(new DataColumn($"反面检测{i + 1}", typeof(string)));
  1028. dt.Columns.Add(new DataColumn("反面检测均值", typeof(string)));
  1029. break;
  1030. case "X轴方向PT值检测":
  1031. for (int i = 0; i < item.Value; i++)
  1032. dt.Columns.Add(new DataColumn($"X轴方向PT值{i + 1}", typeof(string)));
  1033. dt.Columns.Add(new DataColumn("X轴方向PT值均值", typeof(string)));
  1034. break;
  1035. case "主栅连接线检测":
  1036. for (int i = 0; i < item.Value; i++)
  1037. dt.Columns.Add(new DataColumn($"主栅连接线检测{i + 1}", typeof(string)));
  1038. dt.Columns.Add(new DataColumn("主栅连接线检测均值", typeof(string)));
  1039. break;
  1040. case "主栅宽度检测":
  1041. for (int i = 0; i < item.Value; i++)
  1042. dt.Columns.Add(new DataColumn($"主栅宽度检测值{i + 1}", typeof(string)));
  1043. dt.Columns.Add(new DataColumn("主栅宽度检测均值", typeof(string)));
  1044. break;
  1045. case "主栅间距":
  1046. for (int i = 0; i < item.Value; i++)
  1047. dt.Columns.Add(new DataColumn($"主栅间距值{i + 1}", typeof(string)));
  1048. dt.Columns.Add(new DataColumn("主栅间距均值", typeof(string)));
  1049. break;
  1050. case "细栅间距检测":
  1051. for (int i = 0; i < item.Value; i++)
  1052. dt.Columns.Add(new DataColumn($"细栅间距检测值{i + 1}", typeof(string)));
  1053. dt.Columns.Add(new DataColumn("细栅间距检测均值", typeof(string)));
  1054. break;
  1055. case "背极宽度":
  1056. for (int i = 0; i < item.Value; i++)
  1057. dt.Columns.Add(new DataColumn($"背极宽度值{i + 1}", typeof(string)));
  1058. dt.Columns.Add(new DataColumn("背极宽度均值", typeof(string)));
  1059. break;
  1060. case "主栅长度检测":
  1061. for (int i = 0; i < item.Value; i++)
  1062. dt.Columns.Add(new DataColumn($"主栅长度检测{i + 1}", typeof(string)));
  1063. dt.Columns.Add(new DataColumn("主栅长度检测均值", typeof(string)));
  1064. break;
  1065. case "Mark点横向间距":
  1066. for (int i = 0; i < item.Value; i++)
  1067. dt.Columns.Add(new DataColumn($"Mark点横向间距{i + 1}", typeof(string)));
  1068. dt.Columns.Add(new DataColumn("Mark点横向间距均值", typeof(string)));
  1069. break;
  1070. case "Mark点竖向间距":
  1071. for (int i = 0; i < item.Value; i++)
  1072. dt.Columns.Add(new DataColumn($"Mark点竖向间距{i + 1}", typeof(string)));
  1073. dt.Columns.Add(new DataColumn("Mark点竖向间距均值", typeof(string)));
  1074. break;
  1075. case "鱼叉口长":
  1076. for (int i = 0; i < item.Value; i++)
  1077. dt.Columns.Add(new DataColumn($"鱼叉口长{i + 1}", typeof(string)));
  1078. dt.Columns.Add(new DataColumn("鱼叉口长均值", typeof(string)));
  1079. break;
  1080. case "鱼叉口宽":
  1081. for (int i = 0; i < item.Value; i++)
  1082. dt.Columns.Add(new DataColumn($"鱼叉口宽{i + 1}", typeof(string)));
  1083. dt.Columns.Add(new DataColumn("鱼叉口宽均值", typeof(string)));
  1084. break;
  1085. case "鱼叉口间距":
  1086. for (int i = 0; i < item.Value; i++)
  1087. dt.Columns.Add(new DataColumn($"鱼叉口间距{i + 1}", typeof(string)));
  1088. dt.Columns.Add(new DataColumn("鱼叉口间距均值", typeof(string)));
  1089. break;
  1090. }
  1091. }
  1092. dt.Columns.Add(new DataColumn("堵孔数量", typeof(int)));//在表中添加int类型的列
  1093. dt.Columns.Add(new DataColumn("脏污数量", typeof(int)));//在表中添加int类型的列
  1094. dt.Columns.Add(new DataColumn("钢丝异常数量", typeof(int)));//在表中添加int类型的列
  1095. dt.Columns.Add(new DataColumn("纤维丝数量", typeof(int)));//在表中添加int类型的列
  1096. dt.Columns.Add(new DataColumn("缺口数量", typeof(int)));//在表中添加int类型的列
  1097. dt.Columns.Add(new DataColumn("针孔数量", typeof(int)));//在表中添加int类型的列
  1098. dt.Columns.Add(new DataColumn("泡泡数量", typeof(int)));//在表中添加int类型的列
  1099. dt.Columns.Add(new DataColumn("划伤数量", typeof(int)));//在表中添加int类型的列
  1100. dt.Columns.Add(new DataColumn("压线数量", typeof(int)));//在表中添加int类型的列
  1101. dt.Columns.Add(new DataColumn("斜边数量", typeof(int)));//在表中添加int类型的列
  1102. dt.Columns.Add(new DataColumn("栅线数量", typeof(int)));//在表中添加int类型的列
  1103. foreach (var item in QueryAllOrders)
  1104. {
  1105. //新增
  1106. DataRow dr;//行
  1107. dr = dt.NewRow();
  1108. //dr["选择"] = false;
  1109. dr["检验日期"] = item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
  1110. dr["检测单号"] = item.DetectOrder;
  1111. dr["产品名称"] = item.ProductInfo.Name;
  1112. dr["料号"] = item.ProductInfo.Code;
  1113. dr["网版编码"] = item.SN;
  1114. dr["批次"] = item.BatchId;
  1115. dr["合格"] = item.Qualified ? "不合格" : "合格";
  1116. dr["修复"] = item.State == 10 ? "异常" : item.State == 5 ? "修复" : "待修复";
  1117. dr["异常情况"] = item.Abnormalities;
  1118. dr["修复人员"] = item.RepairCode;
  1119. dr["比对"] = item.CompareResult == 2 ? "不通过" : item.CompareResult == 1 ? "通过" : "未比对";
  1120. List<SizeDefectInfo> tempd = new List<SizeDefectInfo>();
  1121. foreach (var tdata in dataCnt)
  1122. {
  1123. switch (tdata.Key)
  1124. {
  1125. case "Tension":
  1126. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Tension").ToList();
  1127. for (int i = 0; i < tempd.Count; i++)
  1128. dr[$"张力{i + 1}"] = tempd[i].Data.ToString("0.00");
  1129. dr["张力均值"] = item.TensionValue.ToString("0.00");
  1130. break;
  1131. case "Height":
  1132. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Height").ToList();
  1133. for (int i = 0; i < tempd.Count; i++)
  1134. dr[$"厚度{i + 1}"] = tempd[i].Data.ToString("0.00");
  1135. dr["厚度均值"] = item.HeightValue.ToString("0.00");
  1136. break;
  1137. case "Y轴方向PT值检测":
  1138. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Y轴方向PT值检测").ToList();
  1139. for (int i = 0; i < tempd.Count; i++)
  1140. dr[$"Y轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1141. dr["Y轴方向PT值均值"] = item.PTValue.ToString("0.0000");
  1142. break;
  1143. case "线宽正面":
  1144. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "线宽正面").ToList();
  1145. for (int i = 0; i < tempd.Count; i++)
  1146. dr[$"线宽正面{i + 1}"] = tempd[i].Data.ToString("0.00");
  1147. dr["线宽正面均值"] = item.LineWidthValue.ToString("0.00");
  1148. break;
  1149. case "反面检测":
  1150. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "反面检测").ToList();
  1151. for (int i = 0; i < tempd.Count; i++)
  1152. dr[$"反面检测{i + 1}"] = tempd[i].Data.ToString("0.00");
  1153. dr["反面检测均值"] = item.FLineWidthValue.ToString("0.00");
  1154. break;
  1155. case "X轴方向PT值检测":
  1156. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "X轴方向PT值检测").ToList();
  1157. for (int i = 0; i < tempd.Count; i++)
  1158. dr[$"X轴方向PT值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1159. dr["X轴方向PT值均值"] = item.XPTValue.ToString("0.0000");
  1160. break;
  1161. case "主栅连接线检测":
  1162. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅连接线检测").ToList();
  1163. for (int i = 0; i < tempd.Count; i++)
  1164. dr[$"主栅连接线检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1165. dr["主栅连接线检测均值"] = item.MGridIntervalValue.ToString("0.0000");
  1166. break;
  1167. case "主栅宽度检测":
  1168. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅宽度检测").ToList();
  1169. for (int i = 0; i < tempd.Count; i++)
  1170. dr[$"主栅宽度检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1171. dr["主栅宽度检测均值"] = item.MGridWidthValue.ToString("0.0000");
  1172. break;
  1173. case "主栅间距":
  1174. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅间距").ToList();
  1175. for (int i = 0; i < tempd.Count; i++)
  1176. dr[$"主栅间距值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1177. dr["主栅间距均值"] = item.MGridSpreadValue.ToString("0.0000");
  1178. break;
  1179. case "细栅间距检测":
  1180. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "细栅间距检测").ToList();
  1181. for (int i = 0; i < tempd.Count; i++)
  1182. dr[$"细栅间距检测值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1183. dr["细栅间距检测均值"] = item.FGridSpreadValue.ToString("0.0000");
  1184. break;
  1185. case "背极宽度":
  1186. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "背极宽度").ToList();
  1187. for (int i = 0; i < tempd.Count; i++)
  1188. dr[$"背极宽度值{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1189. dr["背极宽度均值"] = item.BackPoleWidthValue.ToString("0.0000");
  1190. break;
  1191. case "主栅长度检测":
  1192. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "主栅长度检测").ToList();
  1193. for (int i = 0; i < tempd.Count; i++)
  1194. dr[$"主栅长度检测{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1195. dr["主栅长度检测均值"] = item.MGridLengthValue.ToString("0.0000");
  1196. break;
  1197. case "Mark点横向间距":
  1198. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点横向间距").ToList();
  1199. for (int i = 0; i < tempd.Count; i++)
  1200. dr[$"Mark点横向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1201. dr["Mark点横向间距均值"] = item.MarkXDisValue.ToString("0.0000");
  1202. break;
  1203. case "Mark点竖向间距":
  1204. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "Mark点竖向间距").ToList();
  1205. for (int i = 0; i < tempd.Count; i++)
  1206. dr[$"Mark点竖向间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1207. dr["Mark点竖向间距均值"] = item.MarkYDisValue.ToString("0.0000");
  1208. break;
  1209. case "鱼叉口长":
  1210. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口长").ToList();
  1211. for (int i = 0; i < tempd.Count; i++)
  1212. dr[$"鱼叉口长{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1213. dr["鱼叉口长均值"] = item.ForkLengthValue.ToString("0.0000");
  1214. break;
  1215. case "鱼叉口宽":
  1216. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口宽").ToList();
  1217. for (int i = 0; i < tempd.Count; i++)
  1218. dr[$"鱼叉口宽{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1219. dr["鱼叉口宽均值"] = item.ForkWidthValue.ToString("0.0000");
  1220. break;
  1221. case "鱼叉口间距":
  1222. tempd = item.SizeDefectInfoList.Where(q => q.PointCode == "鱼叉口间距").ToList();
  1223. for (int i = 0; i < tempd.Count; i++)
  1224. dr[$"鱼叉口间距{i + 1}"] = tempd[i].Data.ToString("0.0000");
  1225. dr["鱼叉口间距均值"] = item.ForkDisValue.ToString("0.0000");
  1226. break;
  1227. }
  1228. }
  1229. dr["堵孔数量"] = item.DKCount;
  1230. dr["脏污数量"] = item.ZWCount;
  1231. dr["钢丝异常数量"] = item.GSYCCount;
  1232. dr["纤维丝数量"] = item.XWSCount;
  1233. dr["缺口数量"] = item.QKCount;
  1234. dr["针孔数量"] = item.ZKCount;
  1235. dr["泡泡数量"] = item.PPCount;
  1236. dr["划伤数量"] = item.HSCount;
  1237. dr["压线数量"] = item.YXCount;
  1238. dr["斜边数量"] = item.XBCount;
  1239. dr["栅线数量"] = item.SXCount;
  1240. dt.Rows.Add(dr);//在表的对象的行里添加此行
  1241. }
  1242. try
  1243. {
  1244. // 创建一个新的CSV文件并写入数据
  1245. using (StreamWriter writer = new StreamWriter(filePath, false, UnicodeEncoding.GetEncoding("GB2312")))
  1246. {
  1247. // 写入CSV文件的标题行
  1248. for (int i = 0; i < dt.Columns.Count; i++)
  1249. {
  1250. writer.Write(dt.Columns[i].ColumnName + ",");
  1251. }
  1252. writer.Write("\r\n");
  1253. for (int i = 0; i < dt.Rows.Count; i++)
  1254. {
  1255. // 写入数据行
  1256. for (int j = 0; j < dt.Columns.Count; j++)
  1257. {
  1258. writer.Write(dt.Rows[i][j] + ",");
  1259. }
  1260. writer.Write("\r\n");
  1261. //Console.WriteLine("CSV文件写入成功!");
  1262. }
  1263. }
  1264. }
  1265. catch (Exception ex)
  1266. {
  1267. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1268. }
  1269. return;
  1270. }
  1271. private void skinButton1_Click(object sender, EventArgs e)
  1272. {
  1273. DataTable dt = (DataTable)dataGridView1.DataSource;
  1274. if (dt.Rows.Count > 0)
  1275. {
  1276. SaveFileDialog fileDialog = new SaveFileDialog();
  1277. fileDialog.Filter = "数据文件(*.csv)|*.csv";
  1278. fileDialog.Title = "保存数据";
  1279. //保存对话框是否记忆上次打开的目录
  1280. fileDialog.RestoreDirectory = true;
  1281. if (fileDialog.ShowDialog() == DialogResult.OK)
  1282. {
  1283. try
  1284. {
  1285. string filePath = fileDialog.FileName; // CSV文件路径
  1286. ShowAllDataTableEx(filePath);
  1287. MessageBox.Show("数据导出成功!" , "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
  1288. }
  1289. catch (Exception ex)
  1290. {
  1291. MessageBox.Show("数据导出失败!error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1292. }
  1293. }
  1294. }
  1295. }
  1296. #endregion
  1297. private void btnClear_Click(object sender, EventArgs e)
  1298. {
  1299. cbProductCode.Text = "";
  1300. }
  1301. }
  1302. }