版博士V2.0程序
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

1389 linhas
68 KiB

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